1This is doc/gcc.info, produced by makeinfo version 4.7 from 2/home/mitchell/gcc-3.4.2/gcc-3.4.2/gcc/doc/gcc.texi. 3 4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 51999, 2000, 2001, 2002, 2003, 2004 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 Programming 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 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 3.4.2. 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, Java, Fortran, 102and 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++, and Objective-C languages. 134 135 136File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 137 1382 Language Standards Supported by GCC 139************************************* 140 141For each language compiled by GCC for which there is a standard, GCC 142attempts to follow one or more versions of that standard, possibly with 143some exceptions, and possibly with some extensions. 144 145 GCC supports three versions of the C standard, although support for 146the most recent version is not yet complete. 147 148 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 149published in 1990. This standard was ratified as an ISO standard 150(ISO/IEC 9899:1990) later in 1990. There were no technical differences 151between these publications, although the sections of the ANSI standard 152were renumbered and became clauses in the ISO standard. This standard, 153in both its forms, is commonly known as "C89", or occasionally as 154"C90", from the dates of ratification. The ANSI standard, but not the 155ISO standard, also came with a Rationale document. To select this 156standard in GCC, use one of the options `-ansi', `-std=c89' or 157`-std=iso9899:1990'; to obtain all the diagnostics required by the 158standard, you should also specify `-pedantic' (or `-pedantic-errors' if 159you want them to be errors rather than warnings). *Note Options 160Controlling C Dialect: C Dialect Options. 161 162 Errors in the 1990 ISO C standard were corrected in two Technical 163Corrigenda published in 1994 and 1996. GCC does not support the 164uncorrected version. 165 166 An amendment to the 1990 standard was published in 1995. This 167amendment added digraphs and `__STDC_VERSION__' to the language, but 168otherwise concerned the library. This amendment is commonly known as 169"AMD1"; the amended standard is sometimes known as "C94" or "C95". To 170select this standard in GCC, use the option `-std=iso9899:199409' 171(with, as for other standard versions, `-pedantic' to receive all 172required diagnostics). 173 174 A new edition of the ISO C standard was published in 1999 as ISO/IEC 1759899:1999, and is commonly known as "C99". GCC has incomplete support 176for this standard version; see 177`http://gcc.gnu.org/gcc-3.4/c99status.html' for details. To select this 178standard, use `-std=c99' or `-std=iso9899:1999'. (While in 179development, drafts of this standard version were referred to as "C9X".) 180 181 Errors in the 1999 ISO C standard were corrected in a Technical 182Corrigendum published in 2001. GCC does not support the uncorrected 183version. 184 185 By default, GCC provides some extensions to the C language that on 186rare occasions conflict with the C standard. *Note Extensions to the C 187Language Family: C Extensions. Use of the `-std' options listed above 188will disable these extensions where they conflict with the C standard 189version selected. You may also select an extended version of the C 190language explicitly with `-std=gnu89' (for C89 with GNU extensions) or 191`-std=gnu99' (for C99 with GNU extensions). The default, if no C 192language dialect options are given, is `-std=gnu89'; this will change to 193`-std=gnu99' in some future release when the C99 support is complete. 194Some features that are part of the C99 standard are accepted as 195extensions in C89 mode. 196 197 The ISO C standard defines (in clause 4) two classes of conforming 198implementation. A "conforming hosted implementation" supports the 199whole standard including all the library facilities; a "conforming 200freestanding implementation" is only required to provide certain 201library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>', 202and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99, 203also those in `<stdbool.h>' and `<stdint.h>'. In addition, complex 204types, added in C99, are not required for freestanding implementations. 205The standard also defines two environments for programs, a 206"freestanding environment", required of all implementations and which 207may not have library facilities beyond those required of freestanding 208implementations, where the handling of program startup and termination 209are implementation-defined, and a "hosted environment", which is not 210required, in which all the library facilities are provided and startup 211is through a function `int main (void)' or `int main (int, char *[])'. 212An OS kernel would be a freestanding environment; a program using the 213facilities of an operating system would normally be in a hosted 214implementation. 215 216 GCC aims towards being usable as a conforming freestanding 217implementation, or as the compiler for a conforming hosted 218implementation. By default, it will act as the compiler for a hosted 219implementation, defining `__STDC_HOSTED__' as `1' and presuming that 220when the names of ISO C functions are used, they have the semantics 221defined in the standard. To make it act as a conforming freestanding 222implementation for a freestanding environment, use the option 223`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not 224make assumptions about the meanings of function names from the standard 225library, with exceptions noted below. To build an OS kernel, you may 226well still need to make your own arrangements for linking and startup. 227*Note Options Controlling C Dialect: C Dialect Options. 228 229 GCC does not provide the library facilities required only of hosted 230implementations, nor yet all the facilities required by C99 of 231freestanding implementations; to use the facilities of a hosted 232environment, you will need to find them elsewhere (for example, in the 233GNU C library). *Note Standard Libraries: Standard Libraries. 234 235 Most of the compiler support routines used by GCC are present in 236`libgcc', but there are a few exceptions. GCC requires the 237freestanding environment provide `memcpy', `memmove', `memset' and 238`memcmp'. Some older ports of GCC are configured to use the BSD 239`bcopy', `bzero' and `bcmp' functions instead, but this is deprecated 240for new ports. Finally, if `__builtin_trap' is used, and the target 241does not implement the `trap' pattern, then GCC will emit a call to 242`abort'. 243 244 For references to Technical Corrigenda, Rationale documents and 245information concerning the history of C that is available online, see 246`http://gcc.gnu.org/readings.html' 247 248 There is no formal written standard for Objective-C. The most 249authoritative manual is "Object-Oriented Programming and the 250Objective-C Language", available at a number of web sites 251 252 * `http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/' is 253 a recent version 254 255 * `http://www.toodarkpark.org/computers/objc/' is an older example 256 257 * `http://www.gnustep.org' has 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 The GNU Fortran Language: (g77)Language, for details of the 269Fortran language supported by GCC. 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, `-fforce-mem', `-fstrength-reduce', `-Wformat' and so on. 311Most of these have both positive and negative forms; the negative form 312of `-ffoo' would be `-fno-foo'. This manual documents only one of 313these two forms, 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 Dialect Options:: Variations on Objective-C. 327* Language Independent Options:: Controlling how diagnostics should be 328 formatted. 329* Warning Options:: How picky should the compiler be? 330* Debugging Options:: Symbol tables, measurements, and debugging dumps. 331* Optimize Options:: How much optimization? 332* Preprocessor Options:: Controlling header files and macro definitions. 333 Also, getting dependency information for Make. 334* Assembler Options:: Passing options to the assembler. 335* Link Options:: Specifying libraries and so on. 336* Directory Options:: Where to find header files and libraries. 337 Where to find the compiler executable files. 338* Spec Files:: How to pass switches to sub-processes. 339* Target Options:: Running a cross-compiler, or an old version of GCC. 340* Submodel Options:: Specifying minor hardware or convention variations, 341 such as 68010 vs 68020. 342* Code Gen Options:: Specifying conventions for function calls, data layout 343 and register usage. 344* Environment Variables:: Env vars that affect GCC. 345* Precompiled Headers:: Compiling a header once, and using it many times. 346* Running Protoize:: Automatically adding or removing function prototypes. 347 348 349File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 350 3513.1 Option Summary 352================== 353 354Here is a summary of all the options, grouped by type. Explanations are 355in the following sections. 356 357_Overall Options_ 358 *Note Options Controlling the Kind of Output: Overall Options. 359 -c -S -E -o FILE -pipe -pass-exit-codes 360 -x LANGUAGE -v -### --help --target-help --version 361 362_C Language Options_ 363 *Note Options Controlling C Dialect: C Dialect Options. 364 -ansi -std=STANDARD -aux-info FILENAME 365 -fno-asm -fno-builtin -fno-builtin-FUNCTION 366 -fhosted -ffreestanding -fms-extensions 367 -trigraphs -no-integrated-cpp -traditional -traditional-cpp 368 -fallow-single-precision -fcond-mismatch 369 -fsigned-bitfields -fsigned-char 370 -funsigned-bitfields -funsigned-char 371 -fwritable-strings 372 373_C++ Language Options_ 374 *Note Options Controlling C++ Dialect: C++ Dialect Options. 375 -fabi-version=N -fno-access-control -fcheck-new 376 -fconserve-space -fno-const-strings 377 -fno-elide-constructors 378 -fno-enforce-eh-specs 379 -ffor-scope -fno-for-scope -fno-gnu-keywords 380 -fno-implicit-templates 381 -fno-implicit-inline-templates 382 -fno-implement-inlines -fms-extensions 383 -fno-nonansi-builtins -fno-operator-names 384 -fno-optional-diags -fpermissive 385 -frepo -fno-rtti -fstats -ftemplate-depth-N 386 -fuse-cxa-atexit -fno-weak -nostdinc++ 387 -fno-default-inline -Wabi -Wctor-dtor-privacy 388 -Wnon-virtual-dtor -Wreorder 389 -Weffc++ -Wno-deprecated 390 -Wno-non-template-friend -Wold-style-cast 391 -Woverloaded-virtual -Wno-pmf-conversions 392 -Wsign-promo -Wsynth 393 394_Objective-C Language Options_ 395 *Note Options Controlling Objective-C Dialect: Objective-C Dialect 396 Options. 397 -fconstant-string-class=CLASS-NAME 398 -fgnu-runtime -fnext-runtime 399 -fno-nil-receivers 400 -fobjc-exceptions 401 -freplace-objc-classes 402 -fzero-link 403 -gen-decls 404 -Wno-protocol -Wselector -Wundeclared-selector 405 406_Language Independent Options_ 407 *Note Options to Control Diagnostic Messages Formatting: Language 408 Independent Options. 409 -fmessage-length=N 410 -fdiagnostics-show-location=[once|every-line] 411 412_Warning Options_ 413 *Note Options to Request or Suppress Warnings: Warning Options. 414 -fsyntax-only -pedantic -pedantic-errors 415 -w -Wextra -Wall -Waggregate-return 416 -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment 417 -Wconversion -Wno-deprecated-declarations 418 -Wdisabled-optimization -Wno-div-by-zero -Wendif-labels 419 -Werror -Werror-implicit-function-declaration 420 -Wfloat-equal -Wformat -Wformat=2 421 -Wno-format-extra-args -Wformat-nonliteral 422 -Wformat-security -Wformat-y2k 423 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 424 -Wimport -Wno-import -Winit-self -Winline 425 -Wno-invalid-offsetof -Winvalid-pch 426 -Wlarger-than-LEN -Wlong-long 427 -Wmain -Wmissing-braces 428 -Wmissing-format-attribute -Wmissing-noreturn 429 -Wno-multichar -Wnonnull -Wpacked -Wpadded 430 -Wparentheses -Wpointer-arith -Wredundant-decls 431 -Wreturn-type -Wsequence-point -Wshadow 432 -Wsign-compare -Wstrict-aliasing 433 -Wswitch -Wswitch-default -Wswitch-enum 434 -Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized 435 -Wunknown-pragmas -Wunreachable-code 436 -Wunused -Wunused-function -Wunused-label -Wunused-parameter 437 -Wunused-value -Wunused-variable -Wwrite-strings 438 439_C-only Warning Options_ 440 -Wbad-function-cast -Wmissing-declarations 441 -Wmissing-prototypes -Wnested-externs -Wold-style-definition 442 -Wstrict-prototypes -Wtraditional 443 -Wdeclaration-after-statement 444 445_Debugging Options_ 446 *Note Options for Debugging Your Program or GCC: Debugging Options. 447 -dLETTERS -dumpspecs -dumpmachine -dumpversion 448 -fdump-unnumbered -fdump-translation-unit[-N] 449 -fdump-class-hierarchy[-N] 450 -fdump-tree-original[-N] 451 -fdump-tree-optimized[-N] 452 -fdump-tree-inlined[-N] 453 -feliminate-dwarf2-dups -feliminate-unused-debug-types 454 -feliminate-unused-debug-symbols -fmem-report -fprofile-arcs 455 -frandom-seed=STRING -fsched-verbose=N 456 -ftest-coverage -ftime-report 457 -g -gLEVEL -gcoff -gdwarf-2 458 -ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ 459 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 460 -print-multi-directory -print-multi-lib 461 -print-prog-name=PROGRAM -print-search-dirs -Q 462 -save-temps -time 463 464_Optimization Options_ 465 *Note Options that Control Optimization: Optimize Options. 466 -falign-functions=N -falign-jumps=N 467 -falign-labels=N -falign-loops=N 468 -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize 469 -fbranch-target-load-optimize2 -fcaller-saves -fcprop-registers 470 -fcse-follow-jumps -fcse-skip-blocks -fdata-sections 471 -fdelayed-branch -fdelete-null-pointer-checks 472 -fexpensive-optimizations -ffast-math -ffloat-store 473 -fforce-addr -fforce-mem -ffunction-sections 474 -fgcse -fgcse-lm -fgcse-sm -fgcse-las -floop-optimize 475 -fcrossjumping -fif-conversion -fif-conversion2 476 -finline-functions -finline-limit=N -fkeep-inline-functions 477 -fkeep-static-consts -fmerge-constants -fmerge-all-constants 478 -fmove-all-movables -fnew-ra -fno-branch-count-reg 479 -fno-default-inline -fno-defer-pop 480 -fno-function-cse -fno-guess-branch-probability 481 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 482 -funsafe-math-optimizations -ffinite-math-only 483 -fno-trapping-math -fno-zero-initialized-in-bss 484 -fomit-frame-pointer -foptimize-register-move 485 -foptimize-sibling-calls -fprefetch-loop-arrays 486 -fprofile-generate -fprofile-use 487 -freduce-all-givs -fregmove -frename-registers 488 -freorder-blocks -freorder-functions 489 -frerun-cse-after-loop -frerun-loop-opt 490 -frounding-math -fschedule-insns -fschedule-insns2 491 -fno-sched-interblock -fno-sched-spec -fsched-spec-load 492 -fsched-spec-load-dangerous 493 -fsched-stalled-insns=N -sched-stalled-insns-dep=N 494 -fsched2-use-superblocks 495 -fsched2-use-traces -fsignaling-nans 496 -fsingle-precision-constant 497 -fstrength-reduce -fstrict-aliasing -ftracer -fthread-jumps 498 -funroll-all-loops -funroll-loops -fpeel-loops 499 -funswitch-loops -fold-unroll-loops -fold-unroll-all-loops 500 --param NAME=VALUE 501 -O -O0 -O1 -O2 -O3 -Os 502 503_Preprocessor Options_ 504 *Note Options Controlling the Preprocessor: Preprocessor Options. 505 -AQUESTION=ANSWER 506 -A-QUESTION[=ANSWER] 507 -C -dD -dI -dM -dN 508 -DMACRO[=DEFN] -E -H 509 -idirafter DIR 510 -include FILE -imacros FILE 511 -iprefix FILE -iwithprefix DIR 512 -iwithprefixbefore DIR -isystem DIR 513 -M -MM -MF -MG -MP -MQ -MT -nostdinc 514 -P -fworking-directory -remap 515 -trigraphs -undef -UMACRO -Wp,OPTION 516 -Xpreprocessor OPTION 517 518_Assembler Option_ 519 *Note Passing Options to the Assembler: Assembler Options. 520 -Wa,OPTION -Xassembler OPTION 521 522_Linker Options_ 523 *Note Options for Linking: Link Options. 524 OBJECT-FILE-NAME -lLIBRARY 525 -nostartfiles -nodefaultlibs -nostdlib -pie 526 -s -static -static-libgcc -shared -shared-libgcc -symbolic 527 -Wl,OPTION -Xlinker OPTION 528 -u SYMBOL 529 530_Directory Options_ 531 *Note Options for Directory Search: Directory Options. 532 -BPREFIX -IDIR -I- -LDIR -specs=FILE 533 534_Target Options_ 535 *Note Target Options::. 536 -V VERSION -b MACHINE 537 538_Machine Dependent Options_ 539 *Note Hardware Models and Configurations: Submodel Options. 540 541 _M680x0 Options_ 542 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 543 -m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 544 -mnobitfield -mrtd -mshort -msoft-float -mpcrel 545 -malign-int -mstrict-align -msep-data -mno-sep-data 546 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 547 548 _M68hc1x Options_ 549 -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 550 -mauto-incdec -minmax -mlong-calls -mshort 551 -msoft-reg-count=COUNT 552 553 _VAX Options_ 554 -mg -mgnu -munix 555 556 _SPARC Options_ 557 -mcpu=CPU-TYPE 558 -mtune=CPU-TYPE 559 -mcmodel=CODE-MODEL 560 -m32 -m64 -mapp-regs -mno-app-regs 561 -mfaster-structs -mno-faster-structs 562 -mflat -mno-flat -mfpu -mno-fpu 563 -mhard-float -msoft-float 564 -mhard-quad-float -msoft-quad-float 565 -mimpure-text -mno-impure-text -mlittle-endian 566 -mstack-bias -mno-stack-bias 567 -munaligned-doubles -mno-unaligned-doubles 568 -mv8plus -mno-v8plus -mvis -mno-vis 569 -mcypress -mf930 -mf934 570 -msparclite -msupersparc -mv8 571 -threads -pthreads 572 573 _ARM Options_ 574 -mapcs-frame -mno-apcs-frame 575 -mapcs-26 -mapcs-32 576 -mapcs-stack-check -mno-apcs-stack-check 577 -mapcs-float -mno-apcs-float 578 -mapcs-reentrant -mno-apcs-reentrant 579 -msched-prolog -mno-sched-prolog 580 -mlittle-endian -mbig-endian -mwords-little-endian 581 -malignment-traps -mno-alignment-traps 582 -msoft-float -mhard-float -mfpe 583 -mthumb-interwork -mno-thumb-interwork 584 -mcpu=NAME -march=NAME -mfpe=NAME 585 -mstructure-size-boundary=N 586 -mabort-on-noreturn 587 -mlong-calls -mno-long-calls 588 -msingle-pic-base -mno-single-pic-base 589 -mpic-register=REG 590 -mnop-fun-dllimport 591 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns 592 -mpoke-function-name 593 -mthumb -marm 594 -mtpcs-frame -mtpcs-leaf-frame 595 -mcaller-super-interworking -mcallee-super-interworking 596 597 _MN10300 Options_ 598 -mmult-bug -mno-mult-bug 599 -mam33 -mno-am33 600 -mam33-2 -mno-am33-2 601 -mno-crt0 -mrelax 602 603 _M32R/D Options_ 604 -m32r2 -m32rx -m32r 605 -mdebug 606 -malign-loops -mno-align-loops 607 -missue-rate=NUMBER 608 -mbranch-cost=NUMBER 609 -mmodel=CODE-SIZE-MODEL-TYPE 610 -msdata=SDATA-TYPE 611 -mno-flush-func -mflush-func=NAME 612 -mno-flush-trap -mflush-trap=NUMBER 613 -G NUM 614 615 _RS/6000 and PowerPC Options_ 616 -mcpu=CPU-TYPE 617 -mtune=CPU-TYPE 618 -mpower -mno-power -mpower2 -mno-power2 619 -mpowerpc -mpowerpc64 -mno-powerpc 620 -maltivec -mno-altivec 621 -mpowerpc-gpopt -mno-powerpc-gpopt 622 -mpowerpc-gfxopt -mno-powerpc-gfxopt 623 -mnew-mnemonics -mold-mnemonics 624 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 625 -m64 -m32 -mxl-call -mno-xl-call -mpe 626 -malign-power -malign-natural 627 -msoft-float -mhard-float -mmultiple -mno-multiple 628 -mstring -mno-string -mupdate -mno-update 629 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 630 -mstrict-align -mno-strict-align -mrelocatable 631 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 632 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 633 -mdynamic-no-pic 634 -mprioritize-restricted-insns=PRIORITY 635 -msched-costly-dep=DEPENDENCE_TYPE 636 -minsert-sched-nops=SCHEME 637 -mcall-sysv -mcall-netbsd 638 -maix-struct-return -msvr4-struct-return 639 -mabi=altivec -mabi=no-altivec 640 -mabi=spe -mabi=no-spe 641 -misel=yes -misel=no 642 -mspe=yes -mspe=no 643 -mfloat-gprs=yes -mfloat-gprs=no 644 -mprototype -mno-prototype 645 -msim -mmvme -mads -myellowknife -memb -msdata 646 -msdata=OPT -mvxworks -mwindiss -G NUM -pthread 647 648 _Darwin Options_ 649 -all_load -allowable_client -arch -arch_errors_fatal 650 -arch_only -bind_at_load -bundle -bundle_loader 651 -client_name -compatibility_version -current_version 652 -dependency-file -dylib_file -dylinker_install_name 653 -dynamic -dynamiclib -exported_symbols_list 654 -filelist -flat_namespace -force_cpusubtype_ALL 655 -force_flat_namespace -headerpad_max_install_names 656 -image_base -init -install_name -keep_private_externs 657 -multi_module -multiply_defined -multiply_defined_unused 658 -noall_load -nofixprebinding -nomultidefs -noprebind -noseglinkedit 659 -pagezero_size -prebind -prebind_all_twolevel_modules 660 -private_bundle -read_only_relocs -sectalign 661 -sectobjectsymbols -whyload -seg1addr 662 -sectcreate -sectobjectsymbols -sectorder 663 -seg_addr_table -seg_addr_table_filename -seglinkedit 664 -segprot -segs_read_only_addr -segs_read_write_addr 665 -single_module -static -sub_library -sub_umbrella 666 -twolevel_namespace -umbrella -undefined 667 -unexported_symbols_list -weak_reference_mismatches 668 -whatsloaded 669 670 _MIPS Options_ 671 -EL -EB -march=ARCH -mtune=ARCH 672 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 673 -mips16 -mno-mips16 -mabi=ABI -mabicalls -mno-abicalls 674 -mxgot -mno-xgot -membedded-pic -mno-embedded-pic 675 -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float 676 -msingle-float -mdouble-float -mint64 -mlong64 -mlong32 677 -GNUM -membedded-data -mno-embedded-data 678 -muninit-const-in-rodata -mno-uninit-const-in-rodata 679 -msplit-addresses -mno-split-addresses 680 -mexplicit-relocs -mno-explicit-relocs 681 -mrnames -mno-rnames 682 -mcheck-zero-division -mno-check-zero-division 683 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 684 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp 685 -mfix-sb1 -mno-fix-sb1 -mflush-func=FUNC 686 -mno-flush-func -mbranch-likely -mno-branch-likely 687 688 _i386 and x86-64 Options_ 689 -mtune=CPU-TYPE -march=CPU-TYPE 690 -mfpmath=UNIT 691 -masm=DIALECT -mno-fancy-math-387 692 -mno-fp-ret-in-387 -msoft-float -msvr3-shlib 693 -mno-wide-multiply -mrtd -malign-double 694 -mpreferred-stack-boundary=NUM 695 -mmmx -msse -msse2 -msse3 -m3dnow 696 -mthreads -mno-align-stringops -minline-all-stringops 697 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 698 -m96bit-long-double -mregparm=NUM -momit-leaf-frame-pointer 699 -mno-red-zone -mno-tls-direct-seg-refs 700 -mcmodel=CODE-MODEL 701 -m32 -m64 702 703 _HPPA Options_ 704 -march=ARCHITECTURE-TYPE 705 -mbig-switch -mdisable-fpregs -mdisable-indexing 706 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 707 -mjump-in-delay -mlinker-opt -mlong-calls 708 -mlong-load-store -mno-big-switch -mno-disable-fpregs 709 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 710 -mno-jump-in-delay -mno-long-load-store 711 -mno-portable-runtime -mno-soft-float 712 -mno-space-regs -msoft-float -mpa-risc-1-0 713 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 714 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 715 -nolibdld -static -threads 716 717 _Intel 960 Options_ 718 -mCPU-TYPE -masm-compat -mclean-linkage 719 -mcode-align -mcomplex-addr -mleaf-procedures 720 -mic-compat -mic2.0-compat -mic3.0-compat 721 -mintel-asm -mno-clean-linkage -mno-code-align 722 -mno-complex-addr -mno-leaf-procedures 723 -mno-old-align -mno-strict-align -mno-tail-call 724 -mnumerics -mold-align -msoft-float -mstrict-align 725 -mtail-call 726 727 _DEC Alpha Options_ 728 -mno-fp-regs -msoft-float -malpha-as -mgas 729 -mieee -mieee-with-inexact -mieee-conformant 730 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 731 -mtrap-precision=MODE -mbuild-constants 732 -mcpu=CPU-TYPE -mtune=CPU-TYPE 733 -mbwx -mmax -mfix -mcix 734 -mfloat-vax -mfloat-ieee 735 -mexplicit-relocs -msmall-data -mlarge-data 736 -msmall-text -mlarge-text 737 -mmemory-latency=TIME 738 739 _DEC Alpha/VMS Options_ 740 -mvms-return-codes 741 742 _H8/300 Options_ 743 -mrelax -mh -ms -mn -mint32 -malign-300 744 745 _SH Options_ 746 -m1 -m2 -m2e -m3 -m3e 747 -m4-nofpu -m4-single-only -m4-single -m4 748 -m5-64media -m5-64media-nofpu 749 -m5-32media -m5-32media-nofpu 750 -m5-compact -m5-compact-nofpu 751 -mb -ml -mdalign -mrelax 752 -mbigtable -mfmovd -mhitachi -mnomacsave 753 -mieee -misize -mpadstruct -mspace 754 -mprefergot -musermode 755 756 _System V Options_ 757 -Qy -Qn -YP,PATHS -Ym,DIR 758 759 _ARC Options_ 760 -EB -EL 761 -mmangle-cpu -mcpu=CPU -mtext=TEXT-SECTION 762 -mdata=DATA-SECTION -mrodata=READONLY-DATA-SECTION 763 764 _TMS320C3x/C4x Options_ 765 -mcpu=CPU -mbig -msmall -mregparm -mmemparm 766 -mfast-fix -mmpyi -mbk -mti -mdp-isr-reload 767 -mrpts=COUNT -mrptb -mdb -mloop-unsigned 768 -mparallel-insns -mparallel-mpy -mpreserve-float 769 770 _V850 Options_ 771 -mlong-calls -mno-long-calls -mep -mno-ep 772 -mprolog-function -mno-prolog-function -mspace 773 -mtda=N -msda=N -mzda=N 774 -mapp-regs -mno-app-regs 775 -mdisable-callt -mno-disable-callt 776 -mv850e1 777 -mv850e 778 -mv850 -mbig-switch 779 780 _NS32K Options_ 781 -m32032 -m32332 -m32532 -m32081 -m32381 782 -mmult-add -mnomult-add -msoft-float -mrtd -mnortd 783 -mregparam -mnoregparam -msb -mnosb 784 -mbitfield -mnobitfield -mhimem -mnohimem 785 786 _AVR Options_ 787 -mmcu=MCU -msize -minit-stack=N -mno-interrupts 788 -mcall-prologues -mno-tablejump -mtiny-stack 789 790 _MCore Options_ 791 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 792 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 793 -m4byte-functions -mno-4byte-functions -mcallgraph-data 794 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 795 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 796 797 _MMIX Options_ 798 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 799 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 800 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 801 -mno-base-addresses -msingle-exit -mno-single-exit 802 803 _IA-64 Options_ 804 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 805 -mvolatile-asm-stop -mb-step -mregister-names -mno-sdata 806 -mconstant-gp -mauto-pic -minline-float-divide-min-latency 807 -minline-float-divide-max-throughput 808 -minline-int-divide-min-latency 809 -minline-int-divide-max-throughput -mno-dwarf2-asm 810 -mfixed-range=REGISTER-RANGE 811 812 _D30V Options_ 813 -mextmem -mextmemory -monchip -mno-asm-optimize 814 -masm-optimize -mbranch-cost=N -mcond-exec=N 815 816 _S/390 and zSeries Options_ 817 -mtune=CPU-TYPE -march=CPU-TYPE 818 -mhard-float -msoft-float -mbackchain -mno-backchain 819 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 820 -m64 -m31 -mdebug -mno-debug -mesa -mzarch -mfused-madd -mno-fused-madd 821 822 _CRIS Options_ 823 -mcpu=CPU -march=CPU -mtune=CPU 824 -mmax-stack-frame=N -melinux-stacksize=N 825 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 826 -mstack-align -mdata-align -mconst-align 827 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 828 -melf -maout -melinux -mlinux -sim -sim2 829 -mmul-bug-workaround -mno-mul-bug-workaround 830 831 _PDP-11 Options_ 832 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 833 -mbcopy -mbcopy-builtin -mint32 -mno-int16 834 -mint16 -mno-int32 -mfloat32 -mno-float64 835 -mfloat64 -mno-float32 -mabshi -mno-abshi 836 -mbranch-expensive -mbranch-cheap 837 -msplit -mno-split -munix-asm -mdec-asm 838 839 _Xstormy16 Options_ 840 -msim 841 842 _Xtensa Options_ 843 -mconst16 -mno-const16 844 -mfused-madd -mno-fused-madd 845 -mtext-section-literals -mno-text-section-literals 846 -mtarget-align -mno-target-align 847 -mlongcalls -mno-longcalls 848 849 _FRV Options_ 850 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 851 -mhard-float -msoft-float 852 -malloc-cc -mfixed-cc -mdword -mno-dword 853 -mdouble -mno-double 854 -mmedia -mno-media -mmuladd -mno-muladd 855 -mlibrary-pic -macc-4 -macc-8 856 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 857 -mscc -mno-scc -mcond-exec -mno-cond-exec 858 -mvliw-branch -mno-vliw-branch 859 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 860 -mno-nested-cond-exec -mtomcat-stats 861 -mcpu=CPU 862 863_Code Generation Options_ 864 *Note Options for Code Generation Conventions: Code Gen Options. 865 -fcall-saved-REG -fcall-used-REG 866 -ffixed-REG -fexceptions 867 -fnon-call-exceptions -funwind-tables 868 -fasynchronous-unwind-tables 869 -finhibit-size-directive -finstrument-functions 870 -fno-common -fno-ident 871 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 872 -freg-struct-return -fshared-data -fshort-enums 873 -fshort-double -fshort-wchar 874 -fverbose-asm -fpack-struct -fstack-check 875 -fstack-limit-register=REG -fstack-limit-symbol=SYM 876 -fargument-alias -fargument-noalias 877 -fargument-noalias-global -fleading-underscore 878 -ftls-model=MODEL 879 -ftrapv -fwrapv -fbounds-check 880 881 882* Menu: 883 884* Overall Options:: Controlling the kind of output: 885 an executable, object files, assembler files, 886 or preprocessed source. 887* C Dialect Options:: Controlling the variant of C language compiled. 888* C++ Dialect Options:: Variations on C++. 889* Objective-C Dialect Options:: Variations on Objective-C. 890* Language Independent Options:: Controlling how diagnostics should be 891 formatted. 892* Warning Options:: How picky should the compiler be? 893* Debugging Options:: Symbol tables, measurements, and debugging dumps. 894* Optimize Options:: How much optimization? 895* Preprocessor Options:: Controlling header files and macro definitions. 896 Also, getting dependency information for Make. 897* Assembler Options:: Passing options to the assembler. 898* Link Options:: Specifying libraries and so on. 899* Directory Options:: Where to find header files and libraries. 900 Where to find the compiler executable files. 901* Spec Files:: How to pass switches to sub-processes. 902* Target Options:: Running a cross-compiler, or an old version of GCC. 903 904 905File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 906 9073.2 Options Controlling the Kind of Output 908========================================== 909 910Compilation can involve up to four stages: preprocessing, compilation 911proper, assembly and linking, always in that order. GCC is capable of 912preprocessing and compiling several files either into several assembler 913input files, or into one assembler input file; then each assembler 914input file produces an object file, and linking combines all the object 915files (those newly compiled, and those specified as input) into an 916executable file. 917 918 For any given input file, the file name suffix determines what kind of 919compilation is done: 920 921`FILE.c' 922 C source code which must be preprocessed. 923 924`FILE.i' 925 C source code which should not be preprocessed. 926 927`FILE.ii' 928 C++ source code which should not be preprocessed. 929 930`FILE.m' 931 Objective-C source code. Note that you must link with the library 932 `libobjc.a' to make an Objective-C program work. 933 934`FILE.mi' 935 Objective-C source code which should not be preprocessed. 936 937`FILE.h' 938 C or C++ header file to be turned into a precompiled header. 939 940`FILE.cc' 941`FILE.cp' 942`FILE.cxx' 943`FILE.cpp' 944`FILE.CPP' 945`FILE.c++' 946`FILE.C' 947 C++ source code which must be preprocessed. Note that in `.cxx', 948 the last two letters must both be literally `x'. Likewise, `.C' 949 refers to a literal capital C. 950 951`FILE.hh' 952`FILE.H' 953 C++ header file to be turned into a precompiled header. 954 955`FILE.f' 956`FILE.for' 957`FILE.FOR' 958 Fortran source code which should not be preprocessed. 959 960`FILE.F' 961`FILE.fpp' 962`FILE.FPP' 963 Fortran source code which must be preprocessed (with the 964 traditional preprocessor). 965 966`FILE.r' 967 Fortran source code which must be preprocessed with a RATFOR 968 preprocessor (not included with GCC). 969 970 *Note Options Controlling the Kind of Output: (g77)Overall 971 Options, for more details of the handling of Fortran input files. 972 973`FILE.ads' 974 Ada source code file which contains a library unit declaration (a 975 declaration of a package, subprogram, or generic, or a generic 976 instantiation), or a library unit renaming declaration (a package, 977 generic, or subprogram renaming declaration). Such files are also 978 called "specs". 979 980`FILE.adb' 981 Ada source code file containing a library unit body (a subprogram 982 or package body). Such files are also called "bodies". 983 984`FILE.s' 985 Assembler code. 986 987`FILE.S' 988 Assembler code which must be preprocessed. 989 990`OTHER' 991 An object file to be fed straight into linking. Any file name 992 with no recognized suffix is treated this way. 993 994 You can specify the input language explicitly with the `-x' option: 995 996`-x LANGUAGE' 997 Specify explicitly the LANGUAGE for the following input files 998 (rather than letting the compiler choose a default based on the 999 file name suffix). This option applies to all following input 1000 files until the next `-x' option. Possible values for LANGUAGE 1001 are: 1002 c c-header cpp-output 1003 c++ c++-header c++-cpp-output 1004 objective-c objective-c-header objc-cpp-output 1005 assembler assembler-with-cpp 1006 ada 1007 f77 f77-cpp-input ratfor 1008 java 1009 treelang 1010 1011`-x none' 1012 Turn off any specification of a language, so that subsequent files 1013 are handled according to their file name suffixes (as they are if 1014 `-x' has not been used at all). 1015 1016`-pass-exit-codes' 1017 Normally the `gcc' program will exit with the code of 1 if any 1018 phase of the compiler returns a non-success return code. If you 1019 specify `-pass-exit-codes', the `gcc' program will instead return 1020 with numerically highest error produced by any phase that returned 1021 an error indication. 1022 1023 If you only want some of the stages of compilation, you can use `-x' 1024(or filename suffixes) to tell `gcc' where to start, and one of the 1025options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1026some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1027do nothing at all. 1028 1029`-c' 1030 Compile or assemble the source files, but do not link. The linking 1031 stage simply is not done. The ultimate output is in the form of an 1032 object file for each source file. 1033 1034 By default, the object file name for a source file is made by 1035 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1036 1037 Unrecognized input files, not requiring compilation or assembly, 1038 are ignored. 1039 1040`-S' 1041 Stop after the stage of compilation proper; do not assemble. The 1042 output is in the form of an assembler code file for each 1043 non-assembler input file specified. 1044 1045 By default, the assembler file name for a source file is made by 1046 replacing the suffix `.c', `.i', etc., with `.s'. 1047 1048 Input files that don't require compilation are ignored. 1049 1050`-E' 1051 Stop after the preprocessing stage; do not run the compiler 1052 proper. The output is in the form of preprocessed source code, 1053 which is sent to the standard output. 1054 1055 Input files which don't require preprocessing are ignored. 1056 1057`-o FILE' 1058 Place output in file FILE. This applies regardless to whatever 1059 sort of output is being produced, whether it be an executable file, 1060 an object file, an assembler file or preprocessed C code. 1061 1062 If you specify `-o' when compiling more than one input file, or 1063 you are producing an executable file as output, all the source 1064 files on the command line will be compiled at once. 1065 1066 If `-o' is not specified, the default is to put an executable file 1067 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1068 assembler file in `SOURCE.s', and all preprocessed C source on 1069 standard output. 1070 1071`-v' 1072 Print (on standard error output) the commands executed to run the 1073 stages of compilation. Also print the version number of the 1074 compiler driver program and of the preprocessor and the compiler 1075 proper. 1076 1077`-###' 1078 Like `-v' except the commands are not executed and all command 1079 arguments are quoted. This is useful for shell scripts to capture 1080 the driver-generated command lines. 1081 1082`-pipe' 1083 Use pipes rather than temporary files for communication between the 1084 various stages of compilation. This fails to work on some systems 1085 where the assembler is unable to read from a pipe; but the GNU 1086 assembler has no trouble. 1087 1088`--help' 1089 Print (on the standard output) a description of the command line 1090 options understood by `gcc'. If the `-v' option is also specified 1091 then `--help' will also be passed on to the various processes 1092 invoked by `gcc', so that they can display the command line options 1093 they accept. If the `-Wextra' option is also specified then 1094 command line options which have no documentation associated with 1095 them will also be displayed. 1096 1097`--target-help' 1098 Print (on the standard output) a description of target specific 1099 command line options for each tool. 1100 1101`--version' 1102 Display the version number and copyrights of the invoked GCC. 1103 1104 1105File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1106 11073.3 Compiling C++ Programs 1108========================== 1109 1110C++ source files conventionally use one of the suffixes `.C', `.cc', 1111`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1112`.hh' or `.H'; and preprocessed C++ files use the suffix `.ii'. GCC 1113recognizes files with these names and compiles them as C++ programs 1114even if you call the compiler the same way as for compiling C programs 1115(usually with the name `gcc'). 1116 1117 However, C++ programs often require class libraries as well as a 1118compiler that understands the C++ language--and under some 1119circumstances, you might want to compile programs or header files from 1120standard input, or otherwise without a suffix that flags them as C++ 1121programs. You might also like to precompile a C header file with a 1122`.h' extension to be used in C++ compilations. `g++' is a program that 1123calls GCC with the default language set to C++, and automatically 1124specifies linking against the C++ library. On many systems, `g++' is 1125also installed with the name `c++'. 1126 1127 When you compile C++ programs, you may specify many of the same 1128command-line options that you use for compiling programs in any 1129language; or command-line options meaningful for C and related 1130languages; or options that are meaningful only for C++ programs. *Note 1131Options Controlling C Dialect: C Dialect Options, for explanations of 1132options for languages related to C. *Note Options Controlling C++ 1133Dialect: C++ Dialect Options, for explanations of options that are 1134meaningful only for C++ programs. 1135 1136 1137File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1138 11393.4 Options Controlling C Dialect 1140================================= 1141 1142The following options control the dialect of C (or languages derived 1143from C, such as C++ and Objective-C) that the compiler accepts: 1144 1145`-ansi' 1146 In C mode, support all ISO C90 programs. In C++ mode, remove GNU 1147 extensions that conflict with ISO C++. 1148 1149 This turns off certain features of GCC that are incompatible with 1150 ISO C90 (when compiling C code), or of standard C++ (when 1151 compiling C++ code), such as the `asm' and `typeof' keywords, and 1152 predefined macros such as `unix' and `vax' that identify the type 1153 of system you are using. It also enables the undesirable and 1154 rarely used ISO trigraph feature. For the C compiler, it disables 1155 recognition of C++ style `//' comments as well as the `inline' 1156 keyword. 1157 1158 The alternate keywords `__asm__', `__extension__', `__inline__' 1159 and `__typeof__' continue to work despite `-ansi'. You would not 1160 want to use them in an ISO C program, of course, but it is useful 1161 to put them in header files that might be included in compilations 1162 done with `-ansi'. Alternate predefined macros such as `__unix__' 1163 and `__vax__' are also available, with or without `-ansi'. 1164 1165 The `-ansi' option does not cause non-ISO programs to be rejected 1166 gratuitously. For that, `-pedantic' is required in addition to 1167 `-ansi'. *Note Warning Options::. 1168 1169 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1170 is used. Some header files may notice this macro and refrain from 1171 declaring certain functions or defining certain macros that the 1172 ISO standard doesn't call for; this is to avoid interfering with 1173 any programs that might use these names for other things. 1174 1175 Functions which would normally be built in but do not have 1176 semantics defined by ISO C (such as `alloca' and `ffs') are not 1177 built-in functions with `-ansi' is used. *Note Other built-in 1178 functions provided by GCC: Other Builtins, for details of the 1179 functions affected. 1180 1181`-std=' 1182 Determine the language standard. This option is currently only 1183 supported when compiling C or C++. A value for this option must be 1184 provided; possible values are 1185 1186 `c89' 1187 `iso9899:1990' 1188 ISO C90 (same as `-ansi'). 1189 1190 `iso9899:199409' 1191 ISO C90 as modified in amendment 1. 1192 1193 `c99' 1194 `c9x' 1195 `iso9899:1999' 1196 `iso9899:199x' 1197 ISO C99. Note that this standard is not yet fully supported; 1198 see `http://gcc.gnu.org/gcc-3.4/c99status.html' for more 1199 information. The names `c9x' and `iso9899:199x' are 1200 deprecated. 1201 1202 `gnu89' 1203 Default, ISO C90 plus GNU extensions (including some C99 1204 features). 1205 1206 `gnu99' 1207 `gnu9x' 1208 ISO C99 plus GNU extensions. When ISO C99 is fully 1209 implemented in GCC, this will become the default. The name 1210 `gnu9x' is deprecated. 1211 1212 `c++98' 1213 The 1998 ISO C++ standard plus amendments. 1214 1215 `gnu++98' 1216 The same as `-std=c++98' plus GNU extensions. This is the 1217 default for C++ code. 1218 1219 Even when this option is not specified, you can still use some of 1220 the features of newer standards in so far as they do not conflict 1221 with previous C standards. For example, you may use 1222 `__restrict__' even when `-std=c99' is not specified. 1223 1224 The `-std' options specifying some version of ISO C have the same 1225 effects as `-ansi', except that features that were not in ISO C90 1226 but are in the specified version (for example, `//' comments and 1227 the `inline' keyword in ISO C99) are not disabled. 1228 1229 *Note Language Standards Supported by GCC: Standards, for details 1230 of these standard versions. 1231 1232`-aux-info FILENAME' 1233 Output to the given filename prototyped declarations for all 1234 functions declared and/or defined in a translation unit, including 1235 those in header files. This option is silently ignored in any 1236 language other than C. 1237 1238 Besides declarations, the file indicates, in comments, the origin 1239 of each declaration (source file and line), whether the 1240 declaration was implicit, prototyped or unprototyped (`I', `N' for 1241 new or `O' for old, respectively, in the first character after the 1242 line number and the colon), and whether it came from a declaration 1243 or a definition (`C' or `F', respectively, in the following 1244 character). In the case of function definitions, a K&R-style list 1245 of arguments followed by their declarations is also provided, 1246 inside comments, after the declaration. 1247 1248`-fno-asm' 1249 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 1250 code can use these words as identifiers. You can use the keywords 1251 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 1252 `-fno-asm'. 1253 1254 In C++, this switch only affects the `typeof' keyword, since `asm' 1255 and `inline' are standard keywords. You may want to use the 1256 `-fno-gnu-keywords' flag instead, which has the same effect. In 1257 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 1258 the `asm' and `typeof' keywords, since `inline' is a standard 1259 keyword in ISO C99. 1260 1261`-fno-builtin' 1262`-fno-builtin-FUNCTION' 1263 Don't recognize built-in functions that do not begin with 1264 `__builtin_' as prefix. *Note Other built-in functions provided 1265 by GCC: Other Builtins, for details of the functions affected, 1266 including those which are not built-in functions when `-ansi' or 1267 `-std' options for strict ISO C conformance are used because they 1268 do not have an ISO standard meaning. 1269 1270 GCC normally generates special code to handle certain built-in 1271 functions more efficiently; for instance, calls to `alloca' may 1272 become single instructions that adjust the stack directly, and 1273 calls to `memcpy' may become inline copy loops. The resulting 1274 code is often both smaller and faster, but since the function 1275 calls no longer appear as such, you cannot set a breakpoint on 1276 those calls, nor can you change the behavior of the functions by 1277 linking with a different library. 1278 1279 With the `-fno-builtin-FUNCTION' option only the built-in function 1280 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 1281 If a function is named this is not built-in in this version of 1282 GCC, this option is ignored. There is no corresponding 1283 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 1284 functions selectively when using `-fno-builtin' or 1285 `-ffreestanding', you may define macros such as: 1286 1287 #define abs(n) __builtin_abs ((n)) 1288 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 1289 1290`-fhosted' 1291 Assert that compilation takes place in a hosted environment. This 1292 implies `-fbuiltin'. A hosted environment is one in which the 1293 entire standard library is available, and in which `main' has a 1294 return type of `int'. Examples are nearly everything except a 1295 kernel. This is equivalent to `-fno-freestanding'. 1296 1297`-ffreestanding' 1298 Assert that compilation takes place in a freestanding environment. 1299 This implies `-fno-builtin'. A freestanding environment is one 1300 in which the standard library may not exist, and program startup 1301 may not necessarily be at `main'. The most obvious example is an 1302 OS kernel. This is equivalent to `-fno-hosted'. 1303 1304 *Note Language Standards Supported by GCC: Standards, for details 1305 of freestanding and hosted environments. 1306 1307`-fms-extensions' 1308 Accept some non-standard constructs used in Microsoft header files. 1309 1310`-trigraphs' 1311 Support ISO C trigraphs. The `-ansi' option (and `-std' options 1312 for strict ISO C conformance) implies `-trigraphs'. 1313 1314`-no-integrated-cpp' 1315 Performs a compilation in two passes: preprocessing and compiling. 1316 This option allows a user supplied "cc1", "cc1plus", or "cc1obj" 1317 via the `-B' option. The user supplied compilation step can then 1318 add in an additional preprocessing step after normal preprocessing 1319 but before compiling. The default is to use the integrated cpp 1320 (internal cpp) 1321 1322 The semantics of this option will change if "cc1", "cc1plus", and 1323 "cc1obj" are merged. 1324 1325`-traditional' 1326`-traditional-cpp' 1327 Formerly, these options caused GCC to attempt to emulate a 1328 pre-standard C compiler. They are now only supported with the 1329 `-E' switch. The preprocessor continues to support a pre-standard 1330 mode. See the GNU CPP manual for details. 1331 1332`-fcond-mismatch' 1333 Allow conditional expressions with mismatched types in the second 1334 and third arguments. The value of such an expression is void. 1335 This option is not supported for C++. 1336 1337`-funsigned-char' 1338 Let the type `char' be unsigned, like `unsigned char'. 1339 1340 Each kind of machine has a default for what `char' should be. It 1341 is either like `unsigned char' by default or like `signed char' by 1342 default. 1343 1344 Ideally, a portable program should always use `signed char' or 1345 `unsigned char' when it depends on the signedness of an object. 1346 But many programs have been written to use plain `char' and expect 1347 it to be signed, or expect it to be unsigned, depending on the 1348 machines they were written for. This option, and its inverse, let 1349 you make such a program work with the opposite default. 1350 1351 The type `char' is always a distinct type from each of `signed 1352 char' or `unsigned char', even though its behavior is always just 1353 like one of those two. 1354 1355`-fsigned-char' 1356 Let the type `char' be signed, like `signed char'. 1357 1358 Note that this is equivalent to `-fno-unsigned-char', which is the 1359 negative form of `-funsigned-char'. Likewise, the option 1360 `-fno-signed-char' is equivalent to `-funsigned-char'. 1361 1362`-fsigned-bitfields' 1363`-funsigned-bitfields' 1364`-fno-signed-bitfields' 1365`-fno-unsigned-bitfields' 1366 These options control whether a bit-field is signed or unsigned, 1367 when the declaration does not use either `signed' or `unsigned'. 1368 By default, such a bit-field is signed, because this is 1369 consistent: the basic integer types such as `int' are signed types. 1370 1371`-fwritable-strings' 1372 Store string constants in the writable data segment and don't 1373 uniquize them. This is for compatibility with old programs which 1374 assume they can write into string constants. 1375 1376 Writing into string constants is a very bad idea; "constants" 1377 should be constant. 1378 1379 This option is deprecated. 1380 1381 1382File: gcc.info, Node: C++ Dialect Options, Next: Objective-C Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 1383 13843.5 Options Controlling C++ Dialect 1385=================================== 1386 1387This section describes the command-line options that are only meaningful 1388for C++ programs; but you can also use most of the GNU compiler options 1389regardless of what language your program is in. For example, you might 1390compile a file `firstClass.C' like this: 1391 1392 g++ -g -frepo -O -c firstClass.C 1393 1394In this example, only `-frepo' is an option meant only for C++ 1395programs; you can use the other options with any language supported by 1396GCC. 1397 1398 Here is a list of options that are _only_ for compiling C++ programs: 1399 1400`-fabi-version=N' 1401 Use version N of the C++ ABI. Version 2 is the version of the C++ 1402 ABI that first appeared in G++ 3.4. Version 1 is the version of 1403 the C++ ABI that first appeared in G++ 3.2. Version 0 will always 1404 be the version that conforms most closely to the C++ ABI 1405 specification. Therefore, the ABI obtained using version 0 will 1406 change as ABI bugs are fixed. 1407 1408 The default is version 2. 1409 1410`-fno-access-control' 1411 Turn off all access checking. This switch is mainly useful for 1412 working around bugs in the access control code. 1413 1414`-fcheck-new' 1415 Check that the pointer returned by `operator new' is non-null 1416 before attempting to modify the storage allocated. This check is 1417 normally unnecessary because the C++ standard specifies that 1418 `operator new' will only return `0' if it is declared `throw()', 1419 in which case the compiler will always check the return value even 1420 without this option. In all other cases, when `operator new' has 1421 a non-empty exception specification, memory exhaustion is 1422 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 1423 1424`-fconserve-space' 1425 Put uninitialized or runtime-initialized global variables into the 1426 common segment, as C does. This saves space in the executable at 1427 the cost of not diagnosing duplicate definitions. If you compile 1428 with this flag and your program mysteriously crashes after 1429 `main()' has completed, you may have an object that is being 1430 destroyed twice because two definitions were merged. 1431 1432 This option is no longer useful on most targets, now that support 1433 has been added for putting variables into BSS without making them 1434 common. 1435 1436`-fno-const-strings' 1437 Give string constants type `char *' instead of type `const char 1438 *'. By default, G++ uses type `const char *' as required by the 1439 standard. Even if you use `-fno-const-strings', you cannot 1440 actually modify the value of a string constant, unless you also use 1441 `-fwritable-strings'. 1442 1443 This option might be removed in a future release of G++. For 1444 maximum portability, you should structure your code so that it 1445 works with string constants that have type `const char *'. 1446 1447`-fno-elide-constructors' 1448 The C++ standard allows an implementation to omit creating a 1449 temporary which is only used to initialize another object of the 1450 same type. Specifying this option disables that optimization, and 1451 forces G++ to call the copy constructor in all cases. 1452 1453`-fno-enforce-eh-specs' 1454 Don't check for violation of exception specifications at runtime. 1455 This option violates the C++ standard, but may be useful for 1456 reducing code size in production builds, much like defining 1457 `NDEBUG'. The compiler will still optimize based on the exception 1458 specifications. 1459 1460`-ffor-scope' 1461`-fno-for-scope' 1462 If `-ffor-scope' is specified, the scope of variables declared in 1463 a for-init-statement is limited to the `for' loop itself, as 1464 specified by the C++ standard. If `-fno-for-scope' is specified, 1465 the scope of variables declared in a for-init-statement extends to 1466 the end of the enclosing scope, as was the case in old versions of 1467 G++, and other (traditional) implementations of C++. 1468 1469 The default if neither flag is given to follow the standard, but 1470 to allow and give a warning for old-style code that would 1471 otherwise be invalid, or have different behavior. 1472 1473`-fno-gnu-keywords' 1474 Do not recognize `typeof' as a keyword, so that code can use this 1475 word as an identifier. You can use the keyword `__typeof__' 1476 instead. `-ansi' implies `-fno-gnu-keywords'. 1477 1478`-fno-implicit-templates' 1479 Never emit code for non-inline templates which are instantiated 1480 implicitly (i.e. by use); only emit code for explicit 1481 instantiations. *Note Template Instantiation::, for more 1482 information. 1483 1484`-fno-implicit-inline-templates' 1485 Don't emit code for implicit instantiations of inline templates, 1486 either. The default is to handle inlines differently so that 1487 compiles with and without optimization will need the same set of 1488 explicit instantiations. 1489 1490`-fno-implement-inlines' 1491 To save space, do not emit out-of-line copies of inline functions 1492 controlled by `#pragma implementation'. This will cause linker 1493 errors if these functions are not inlined everywhere they are 1494 called. 1495 1496`-fms-extensions' 1497 Disable pedantic warnings about constructs used in MFC, such as 1498 implicit int and getting a pointer to member function via 1499 non-standard syntax. 1500 1501`-fno-nonansi-builtins' 1502 Disable built-in declarations of functions that are not mandated by 1503 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 1504 `bzero', `conjf', and other related functions. 1505 1506`-fno-operator-names' 1507 Do not treat the operator name keywords `and', `bitand', `bitor', 1508 `compl', `not', `or' and `xor' as synonyms as keywords. 1509 1510`-fno-optional-diags' 1511 Disable diagnostics that the standard says a compiler does not 1512 need to issue. Currently, the only such diagnostic issued by G++ 1513 is the one for a name having multiple meanings within a class. 1514 1515`-fpermissive' 1516 Downgrade some diagnostics about nonconformant code from errors to 1517 warnings. Thus, using `-fpermissive' will allow some 1518 nonconforming code to compile. 1519 1520`-frepo' 1521 Enable automatic template instantiation at link time. This option 1522 also implies `-fno-implicit-templates'. *Note Template 1523 Instantiation::, for more information. 1524 1525`-fno-rtti' 1526 Disable generation of information about every class with virtual 1527 functions for use by the C++ runtime type identification features 1528 (`dynamic_cast' and `typeid'). If you don't use those parts of 1529 the language, you can save some space by using this flag. Note 1530 that exception handling uses the same information, but it will 1531 generate it as needed. 1532 1533`-fstats' 1534 Emit statistics about front-end processing at the end of the 1535 compilation. This information is generally only useful to the G++ 1536 development team. 1537 1538`-ftemplate-depth-N' 1539 Set the maximum instantiation depth for template classes to N. A 1540 limit on the template instantiation depth is needed to detect 1541 endless recursions during template class instantiation. ANSI/ISO 1542 C++ conforming programs must not rely on a maximum depth greater 1543 than 17. 1544 1545`-fuse-cxa-atexit' 1546 Register destructors for objects with static storage duration with 1547 the `__cxa_atexit' function rather than the `atexit' function. 1548 This option is required for fully standards-compliant handling of 1549 static destructors, but will only work if your C library supports 1550 `__cxa_atexit'. 1551 1552`-fno-weak' 1553 Do not use weak symbol support, even if it is provided by the 1554 linker. By default, G++ will use weak symbols if they are 1555 available. This option exists only for testing, and should not be 1556 used by end-users; it will result in inferior code and has no 1557 benefits. This option may be removed in a future release of G++. 1558 1559`-nostdinc++' 1560 Do not search for header files in the standard directories 1561 specific to C++, but do still search the other standard 1562 directories. (This option is used when building the C++ library.) 1563 1564 In addition, these optimization, warning, and code generation options 1565have meanings only for C++ programs: 1566 1567`-fno-default-inline' 1568 Do not assume `inline' for functions defined inside a class scope. 1569 *Note Options That Control Optimization: Optimize Options. Note 1570 that these functions will have linkage like inline functions; they 1571 just won't be inlined by default. 1572 1573`-Wabi (C++ only)' 1574 Warn when G++ generates code that is probably not compatible with 1575 the vendor-neutral C++ ABI. Although an effort has been made to 1576 warn about all such cases, there are probably some cases that are 1577 not warned about, even though G++ is generating incompatible code. 1578 There may also be cases where warnings are emitted even though 1579 the code that is generated will be compatible. 1580 1581 You should rewrite your code to avoid these warnings if you are 1582 concerned about the fact that code generated by G++ may not be 1583 binary compatible with code generated by other compilers. 1584 1585 The known incompatibilities at this point include: 1586 1587 * Incorrect handling of tail-padding for bit-fields. G++ may 1588 attempt to pack data into the same byte as a base class. For 1589 example: 1590 1591 struct A { virtual void f(); int f1 : 1; }; 1592 struct B : public A { int f2 : 1; }; 1593 1594 In this case, G++ will place `B::f2' into the same byte 1595 as`A::f1'; other compilers will not. You can avoid this 1596 problem by explicitly padding `A' so that its size is a 1597 multiple of the byte size on your platform; that will cause 1598 G++ and other compilers to layout `B' identically. 1599 1600 * Incorrect handling of tail-padding for virtual bases. G++ 1601 does not use tail padding when laying out virtual bases. For 1602 example: 1603 1604 struct A { virtual void f(); char c1; }; 1605 struct B { B(); char c2; }; 1606 struct C : public A, public virtual B {}; 1607 1608 In this case, G++ will not place `B' into the tail-padding for 1609 `A'; other compilers will. You can avoid this problem by 1610 explicitly padding `A' so that its size is a multiple of its 1611 alignment (ignoring virtual base classes); that will cause 1612 G++ and other compilers to layout `C' identically. 1613 1614 * Incorrect handling of bit-fields with declared widths greater 1615 than that of their underlying types, when the bit-fields 1616 appear in a union. For example: 1617 1618 union U { int i : 4096; }; 1619 1620 Assuming that an `int' does not have 4096 bits, G++ will make 1621 the union too small by the number of bits in an `int'. 1622 1623 * Empty classes can be placed at incorrect offsets. For 1624 example: 1625 1626 struct A {}; 1627 1628 struct B { 1629 A a; 1630 virtual void f (); 1631 }; 1632 1633 struct C : public B, public A {}; 1634 1635 G++ will place the `A' base class of `C' at a nonzero offset; 1636 it should be placed at offset zero. G++ mistakenly believes 1637 that the `A' data member of `B' is already at offset zero. 1638 1639 * Names of template functions whose types involve `typename' or 1640 template template parameters can be mangled incorrectly. 1641 1642 template <typename Q> 1643 void f(typename Q::X) {} 1644 1645 template <template <typename> class Q> 1646 void f(typename Q<int>::X) {} 1647 1648 Instantiations of these templates may be mangled incorrectly. 1649 1650 1651`-Wctor-dtor-privacy (C++ only)' 1652 Warn when a class seems unusable because all the constructors or 1653 destructors in that class are private, and it has neither friends 1654 nor public static member functions. 1655 1656`-Wnon-virtual-dtor (C++ only)' 1657 Warn when a class appears to be polymorphic, thereby requiring a 1658 virtual destructor, yet it declares a non-virtual one. This 1659 warning is enabled by `-Wall'. 1660 1661`-Wreorder (C++ only)' 1662 Warn when the order of member initializers given in the code does 1663 not match the order in which they must be executed. For instance: 1664 1665 struct A { 1666 int i; 1667 int j; 1668 A(): j (0), i (1) { } 1669 }; 1670 1671 The compiler will rearrange the member initializers for `i' and 1672 `j' to match the declaration order of the members, emitting a 1673 warning to that effect. This warning is enabled by `-Wall'. 1674 1675 The following `-W...' options are not affected by `-Wall'. 1676 1677`-Weffc++ (C++ only)' 1678 Warn about violations of the following style guidelines from Scott 1679 Meyers' `Effective C++' book: 1680 1681 * Item 11: Define a copy constructor and an assignment 1682 operator for classes with dynamically allocated memory. 1683 1684 * Item 12: Prefer initialization to assignment in constructors. 1685 1686 * Item 14: Make destructors virtual in base classes. 1687 1688 * Item 15: Have `operator=' return a reference to `*this'. 1689 1690 * Item 23: Don't try to return a reference when you must 1691 return an object. 1692 1693 1694 Also warn about violations of the following style guidelines from 1695 Scott Meyers' `More Effective C++' book: 1696 1697 * Item 6: Distinguish between prefix and postfix forms of 1698 increment and decrement operators. 1699 1700 * Item 7: Never overload `&&', `||', or `,'. 1701 1702 1703 When selecting this option, be aware that the standard library 1704 headers do not obey all of these guidelines; use `grep -v' to 1705 filter out those warnings. 1706 1707`-Wno-deprecated (C++ only)' 1708 Do not warn about usage of deprecated features. *Note Deprecated 1709 Features::. 1710 1711`-Wno-non-template-friend (C++ only)' 1712 Disable warnings when non-templatized friend functions are declared 1713 within a template. Since the advent of explicit template 1714 specification support in G++, if the name of the friend is an 1715 unqualified-id (i.e., `friend foo(int)'), the C++ language 1716 specification demands that the friend declare or define an 1717 ordinary, nontemplate function. (Section 14.5.3). Before G++ 1718 implemented explicit specification, unqualified-ids could be 1719 interpreted as a particular specialization of a templatized 1720 function. Because this non-conforming behavior is no longer the 1721 default behavior for G++, `-Wnon-template-friend' allows the 1722 compiler to check existing code for potential trouble spots and is 1723 on by default. This new compiler behavior can be turned off with 1724 `-Wno-non-template-friend' which keeps the conformant compiler code 1725 but disables the helpful warning. 1726 1727`-Wold-style-cast (C++ only)' 1728 Warn if an old-style (C-style) cast to a non-void type is used 1729 within a C++ program. The new-style casts (`static_cast', 1730 `reinterpret_cast', and `const_cast') are less vulnerable to 1731 unintended effects and much easier to search for. 1732 1733`-Woverloaded-virtual (C++ only)' 1734 Warn when a function declaration hides virtual functions from a 1735 base class. For example, in: 1736 1737 struct A { 1738 virtual void f(); 1739 }; 1740 1741 struct B: public A { 1742 void f(int); 1743 }; 1744 1745 the `A' class version of `f' is hidden in `B', and code like: 1746 1747 B* b; 1748 b->f(); 1749 1750 will fail to compile. 1751 1752`-Wno-pmf-conversions (C++ only)' 1753 Disable the diagnostic for converting a bound pointer to member 1754 function to a plain pointer. 1755 1756`-Wsign-promo (C++ only)' 1757 Warn when overload resolution chooses a promotion from unsigned or 1758 enumerated type to a signed type, over a conversion to an unsigned 1759 type of the same size. Previous versions of G++ would try to 1760 preserve unsignedness, but the standard mandates the current 1761 behavior. 1762 1763`-Wsynth (C++ only)' 1764 Warn when G++'s synthesis behavior does not match that of cfront. 1765 For instance: 1766 1767 struct A { 1768 operator int (); 1769 A& operator = (int); 1770 }; 1771 1772 main () 1773 { 1774 A a,b; 1775 a = b; 1776 } 1777 1778 In this example, G++ will synthesize a default `A& operator = 1779 (const A&);', while cfront will use the user-defined `operator ='. 1780 1781 1782File: gcc.info, Node: Objective-C Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 1783 17843.6 Options Controlling Objective-C Dialect 1785=========================================== 1786 1787(NOTE: This manual does not describe the Objective-C language itself. 1788See `http://gcc.gnu.org/readings.html' for references.) 1789 1790 This section describes the command-line options that are only 1791meaningful for Objective-C programs, but you can also use most of the 1792GNU compiler options regardless of what language your program is in. 1793For example, you might compile a file `some_class.m' like this: 1794 1795 gcc -g -fgnu-runtime -O -c some_class.m 1796 1797In this example, `-fgnu-runtime' is an option meant only for 1798Objective-C programs; you can use the other options with any language 1799supported by GCC. 1800 1801 Here is a list of options that are _only_ for compiling Objective-C 1802programs: 1803 1804`-fconstant-string-class=CLASS-NAME' 1805 Use CLASS-NAME as the name of the class to instantiate for each 1806 literal string specified with the syntax `@"..."'. The default 1807 class name is `NXConstantString' if the GNU runtime is being used, 1808 and `NSConstantString' if the NeXT runtime is being used (see 1809 below). The `-fconstant-cfstrings' option, if also present, will 1810 override the `-fconstant-string-class' setting and cause `@"..."' 1811 literals to be laid out as constant CoreFoundation strings. 1812 1813`-fgnu-runtime' 1814 Generate object code compatible with the standard GNU Objective-C 1815 runtime. This is the default for most types of systems. 1816 1817`-fnext-runtime' 1818 Generate output compatible with the NeXT runtime. This is the 1819 default for NeXT-based systems, including Darwin and Mac OS X. 1820 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 1821 option is used. 1822 1823`-fno-nil-receivers' 1824 Assume that all Objective-C message dispatches (e.g., `[receiver 1825 message:arg]') in this translation unit ensure that the receiver 1826 is not `nil'. This allows for more efficient entry points in the 1827 runtime to be used. Currently, this option is only available in 1828 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 1829 1830`-fobjc-exceptions' 1831 Enable syntactic support for structured exception handling in 1832 Objective-C, similar to what is offered by C++ and Java. 1833 Currently, this option is only available in conjunction with the 1834 NeXT runtime on Mac OS X 10.3 and later. 1835 1836 @try { 1837 ... 1838 @throw expr; 1839 ... 1840 } 1841 @catch (AnObjCClass *exc) { 1842 ... 1843 @throw expr; 1844 ... 1845 @throw; 1846 ... 1847 } 1848 @catch (AnotherClass *exc) { 1849 ... 1850 } 1851 @catch (id allOthers) { 1852 ... 1853 } 1854 @finally { 1855 ... 1856 @throw expr; 1857 ... 1858 } 1859 1860 The `@throw' statement may appear anywhere in an Objective-C or 1861 Objective-C++ program; when used inside of a `@catch' block, the 1862 `@throw' may appear without an argument (as shown above), in which 1863 case the object caught by the `@catch' will be rethrown. 1864 1865 Note that only (pointers to) Objective-C objects may be thrown and 1866 caught using this scheme. When an object is thrown, it will be 1867 caught by the nearest `@catch' clause capable of handling objects 1868 of that type, analogously to how `catch' blocks work in C++ and 1869 Java. A `@catch(id ...)' clause (as shown above) may also be 1870 provided to catch any and all Objective-C exceptions not caught by 1871 previous `@catch' clauses (if any). 1872 1873 The `@finally' clause, if present, will be executed upon exit from 1874 the immediately preceding `@try ... @catch' section. This will 1875 happen regardless of whether any exceptions are thrown, caught or 1876 rethrown inside the `@try ... @catch' section, analogously to the 1877 behavior of the `finally' clause in Java. 1878 1879 There are several caveats to using the new exception mechanism: 1880 1881 * Although currently designed to be binary compatible with 1882 `NS_HANDLER'-style idioms provided by the `NSException' 1883 class, the new exceptions can only be used on Mac OS X 10.3 1884 (Panther) and later systems, due to additional functionality 1885 needed in the (NeXT) Objective-C runtime. 1886 1887 * As mentioned above, the new exceptions do not support handling 1888 types other than Objective-C objects. Furthermore, when 1889 used from Objective-C++, the Objective-C exception model does 1890 not interoperate with C++ exceptions at this time. This 1891 means you cannot `@throw' an exception from Objective-C and 1892 `catch' it in C++, or vice versa (i.e., `throw ... @catch'). 1893 1894 The `-fobjc-exceptions' switch also enables the use of 1895 synchronization blocks for thread-safe execution: 1896 1897 @synchronized (ObjCClass *guard) { 1898 ... 1899 } 1900 1901 Upon entering the `@synchronized' block, a thread of execution 1902 shall first check whether a lock has been placed on the 1903 corresponding `guard' object by another thread. If it has, the 1904 current thread shall wait until the other thread relinquishes its 1905 lock. Once `guard' becomes available, the current thread will 1906 place its own lock on it, execute the code contained in the 1907 `@synchronized' block, and finally relinquish the lock (thereby 1908 making `guard' available to other threads). 1909 1910 Unlike Java, Objective-C does not allow for entire methods to be 1911 marked `@synchronized'. Note that throwing exceptions out of 1912 `@synchronized' blocks is allowed, and will cause the guarding 1913 object to be unlocked properly. 1914 1915`-freplace-objc-classes' 1916 Emit a special marker instructing `ld(1)' not to statically link in 1917 the resulting object file, and allow `dyld(1)' to load it in at 1918 run time instead. This is used in conjunction with the 1919 Fix-and-Continue debugging mode, where the object file in question 1920 may be recompiled and dynamically reloaded in the course of 1921 program execution, without the need to restart the program itself. 1922 Currently, Fix-and-Continue functionality is only available in 1923 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 1924 1925`-fzero-link' 1926 When compiling for the NeXT runtime, the compiler ordinarily 1927 replaces calls to `objc_getClass("...")' (when the name of the 1928 class is known at compile time) with static class references that 1929 get initialized at load time, which improves run-time performance. 1930 Specifying the `-fzero-link' flag suppresses this behavior and 1931 causes calls to `objc_getClass("...")' to be retained. This is 1932 useful in Zero-Link debugging mode, since it allows for individual 1933 class implementations to be modified during program execution. 1934 1935`-gen-decls' 1936 Dump interface declarations for all classes seen in the source 1937 file to a file named `SOURCENAME.decl'. 1938 1939`-Wno-protocol' 1940 If a class is declared to implement a protocol, a warning is 1941 issued for every method in the protocol that is not implemented by 1942 the class. The default behavior is to issue a warning for every 1943 method not explicitly implemented in the class, even if a method 1944 implementation is inherited from the superclass. If you use the 1945 `-Wno-protocol' option, then methods inherited from the superclass 1946 are considered to be implemented, and no warning is issued for 1947 them. 1948 1949`-Wselector' 1950 Warn if multiple methods of different types for the same selector 1951 are found during compilation. The check is performed on the list 1952 of methods in the final stage of compilation. Additionally, a 1953 check is performed for each selector appearing in a 1954 `@selector(...)' expression, and a corresponding method for that 1955 selector has been found during compilation. Because these checks 1956 scan the method table only at the end of compilation, these 1957 warnings are not produced if the final stage of compilation is not 1958 reached, for example because an error is found during compilation, 1959 or because the `-fsyntax-only' option is being used. 1960 1961`-Wundeclared-selector' 1962 Warn if a `@selector(...)' expression referring to an undeclared 1963 selector is found. A selector is considered undeclared if no 1964 method with that name has been declared before the 1965 `@selector(...)' expression, either explicitly in an `@interface' 1966 or `@protocol' declaration, or implicitly in an `@implementation' 1967 section. This option always performs its checks as soon as a 1968 `@selector(...)' expression is found, while `-Wselector' only 1969 performs its checks in the final stage of compilation. This also 1970 enforces the coding style convention that methods and selectors 1971 must be declared before being used. 1972 1973`-print-objc-runtime-info' 1974 Generate C header describing the largest structure that is passed 1975 by value, if any. 1976 1977 1978 1979File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C Dialect Options, Up: Invoking GCC 1980 19813.7 Options to Control Diagnostic Messages Formatting 1982===================================================== 1983 1984Traditionally, diagnostic messages have been formatted irrespective of 1985the output device's aspect (e.g. its width, ...). The options described 1986below can be used to control the diagnostic messages formatting 1987algorithm, e.g. how many characters per line, how often source location 1988information should be reported. Right now, only the C++ front end can 1989honor these options. However it is expected, in the near future, that 1990the remaining front ends would be able to digest them correctly. 1991 1992`-fmessage-length=N' 1993 Try to format error messages so that they fit on lines of about N 1994 characters. The default is 72 characters for `g++' and 0 for the 1995 rest of the front ends supported by GCC. If N is zero, then no 1996 line-wrapping will be done; each error message will appear on a 1997 single line. 1998 1999`-fdiagnostics-show-location=once' 2000 Only meaningful in line-wrapping mode. Instructs the diagnostic 2001 messages reporter to emit _once_ source location information; that 2002 is, in case the message is too long to fit on a single physical 2003 line and has to be wrapped, the source location won't be emitted 2004 (as prefix) again, over and over, in subsequent continuation 2005 lines. This is the default behavior. 2006 2007`-fdiagnostics-show-location=every-line' 2008 Only meaningful in line-wrapping mode. Instructs the diagnostic 2009 messages reporter to emit the same source location information (as 2010 prefix) for physical lines that result from the process of breaking 2011 a message which is too long to fit on a single line. 2012 2013 2014 2015File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 2016 20173.8 Options to Request or Suppress Warnings 2018=========================================== 2019 2020Warnings are diagnostic messages that report constructions which are 2021not inherently erroneous but which are risky or suggest there may have 2022been an error. 2023 2024 You can request many specific warnings with options beginning `-W', 2025for example `-Wimplicit' to request warnings on implicit declarations. 2026Each of these specific warning options also has a negative form 2027beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'. 2028This manual lists only one of the two forms, whichever is not the 2029default. 2030 2031 The following options control the amount and kinds of warnings produced 2032by GCC; for further, language-specific options also refer to *Note C++ 2033Dialect Options:: and *Note Objective-C Dialect Options::. 2034 2035`-fsyntax-only' 2036 Check the code for syntax errors, but don't do anything beyond 2037 that. 2038 2039`-pedantic' 2040 Issue all the warnings demanded by strict ISO C and ISO C++; 2041 reject all programs that use forbidden extensions, and some other 2042 programs that do not follow ISO C and ISO C++. For ISO C, follows 2043 the version of the ISO C standard specified by any `-std' option 2044 used. 2045 2046 Valid ISO C and ISO C++ programs should compile properly with or 2047 without this option (though a rare few will require `-ansi' or a 2048 `-std' option specifying the required version of ISO C). However, 2049 without this option, certain GNU extensions and traditional C and 2050 C++ features are supported as well. With this option, they are 2051 rejected. 2052 2053 `-pedantic' does not cause warning messages for use of the 2054 alternate keywords whose names begin and end with `__'. Pedantic 2055 warnings are also disabled in the expression that follows 2056 `__extension__'. However, only system header files should use 2057 these escape routes; application programs should avoid them. 2058 *Note Alternate Keywords::. 2059 2060 Some users try to use `-pedantic' to check programs for strict ISO 2061 C conformance. They soon find that it does not do quite what they 2062 want: it finds some non-ISO practices, but not all--only those for 2063 which ISO C _requires_ a diagnostic, and some others for which 2064 diagnostics have been added. 2065 2066 A feature to report any failure to conform to ISO C might be 2067 useful in some instances, but would require considerable 2068 additional work and would be quite different from `-pedantic'. We 2069 don't have plans to support such a feature in the near future. 2070 2071 Where the standard specified with `-std' represents a GNU extended 2072 dialect of C, such as `gnu89' or `gnu99', there is a corresponding 2073 "base standard", the version of ISO C on which the GNU extended 2074 dialect is based. Warnings from `-pedantic' are given where they 2075 are required by the base standard. (It would not make sense for 2076 such warnings to be given only for features not in the specified 2077 GNU C dialect, since by definition the GNU dialects of C include 2078 all features the compiler supports with the given option, and 2079 there would be nothing to warn about.) 2080 2081`-pedantic-errors' 2082 Like `-pedantic', except that errors are produced rather than 2083 warnings. 2084 2085`-w' 2086 Inhibit all warning messages. 2087 2088`-Wno-import' 2089 Inhibit warning messages about the use of `#import'. 2090 2091`-Wchar-subscripts' 2092 Warn if an array subscript has type `char'. This is a common cause 2093 of error, as programmers often forget that this type is signed on 2094 some machines. 2095 2096`-Wcomment' 2097 Warn whenever a comment-start sequence `/*' appears in a `/*' 2098 comment, or whenever a Backslash-Newline appears in a `//' comment. 2099 2100`-Wformat' 2101 Check calls to `printf' and `scanf', etc., to make sure that the 2102 arguments supplied have types appropriate to the format string 2103 specified, and that the conversions specified in the format string 2104 make sense. This includes standard functions, and others 2105 specified by format attributes (*note Function Attributes::), in 2106 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 2107 extension, not in the C standard) families. 2108 2109 The formats are checked against the format features supported by 2110 GNU libc version 2.2. These include all ISO C90 and C99 features, 2111 as well as features from the Single Unix Specification and some 2112 BSD and GNU extensions. Other library implementations may not 2113 support all these features; GCC does not support warning about 2114 features that go beyond a particular library's limitations. 2115 However, if `-pedantic' is used with `-Wformat', warnings will be 2116 given about format features not in the selected standard version 2117 (but not for `strfmon' formats, since those are not in any version 2118 of the C standard). *Note Options Controlling C Dialect: C 2119 Dialect Options. 2120 2121 Since `-Wformat' also checks for null format arguments for several 2122 functions, `-Wformat' also implies `-Wnonnull'. 2123 2124 `-Wformat' is included in `-Wall'. For more control over some 2125 aspects of format checking, the options `-Wformat-y2k', 2126 `-Wno-format-extra-args', `-Wno-format-zero-length', 2127 `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are 2128 available, but are not included in `-Wall'. 2129 2130`-Wformat-y2k' 2131 If `-Wformat' is specified, also warn about `strftime' formats 2132 which may yield only a two-digit year. 2133 2134`-Wno-format-extra-args' 2135 If `-Wformat' is specified, do not warn about excess arguments to a 2136 `printf' or `scanf' format function. The C standard specifies 2137 that such arguments are ignored. 2138 2139 Where the unused arguments lie between used arguments that are 2140 specified with `$' operand number specifications, normally 2141 warnings are still given, since the implementation could not know 2142 what type to pass to `va_arg' to skip the unused arguments. 2143 However, in the case of `scanf' formats, this option will suppress 2144 the warning if the unused arguments are all pointers, since the 2145 Single Unix Specification says that such unused arguments are 2146 allowed. 2147 2148`-Wno-format-zero-length' 2149 If `-Wformat' is specified, do not warn about zero-length formats. 2150 The C standard specifies that zero-length formats are allowed. 2151 2152`-Wformat-nonliteral' 2153 If `-Wformat' is specified, also warn if the format string is not a 2154 string literal and so cannot be checked, unless the format function 2155 takes its format arguments as a `va_list'. 2156 2157`-Wformat-security' 2158 If `-Wformat' is specified, also warn about uses of format 2159 functions that represent possible security problems. At present, 2160 this warns about calls to `printf' and `scanf' functions where the 2161 format string is not a string literal and there are no format 2162 arguments, as in `printf (foo);'. This may be a security hole if 2163 the format string came from untrusted input and contains `%n'. 2164 (This is currently a subset of what `-Wformat-nonliteral' warns 2165 about, but in future warnings may be added to `-Wformat-security' 2166 that are not included in `-Wformat-nonliteral'.) 2167 2168`-Wformat=2' 2169 Enable `-Wformat' plus format checks not included in `-Wformat'. 2170 Currently equivalent to `-Wformat -Wformat-nonliteral 2171 -Wformat-security -Wformat-y2k'. 2172 2173`-Wnonnull' 2174 Warn about passing a null pointer for arguments marked as 2175 requiring a non-null value by the `nonnull' function attribute. 2176 2177 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 2178 disabled with the `-Wno-nonnull' option. 2179 2180`-Winit-self (C, C++, and Objective-C only)' 2181 Warn about uninitialized variables which are initialized with 2182 themselves. Note this option can only be used with the 2183 `-Wuninitialized' option, which in turn only works with `-O1' and 2184 above. 2185 2186 For example, GCC will warn about `i' being uninitialized in the 2187 following snippet only when `-Winit-self' has been specified: 2188 int f() 2189 { 2190 int i = i; 2191 return i; 2192 } 2193 2194`-Wimplicit-int' 2195 Warn when a declaration does not specify a type. 2196 2197`-Wimplicit-function-declaration' 2198`-Werror-implicit-function-declaration' 2199 Give a warning (or error) whenever a function is used before being 2200 declared. 2201 2202`-Wimplicit' 2203 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 2204 2205`-Wmain' 2206 Warn if the type of `main' is suspicious. `main' should be a 2207 function with external linkage, returning int, taking either zero 2208 arguments, two, or three arguments of appropriate types. 2209 2210`-Wmissing-braces' 2211 Warn if an aggregate or union initializer is not fully bracketed. 2212 In the following example, the initializer for `a' is not fully 2213 bracketed, but that for `b' is fully bracketed. 2214 2215 int a[2][2] = { 0, 1, 2, 3 }; 2216 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 2217 2218`-Wparentheses' 2219 Warn if parentheses are omitted in certain contexts, such as when 2220 there is an assignment in a context where a truth value is 2221 expected, or when operators are nested whose precedence people 2222 often get confused about. 2223 2224 Also warn about constructions where there may be confusion to which 2225 `if' statement an `else' branch belongs. Here is an example of 2226 such a case: 2227 2228 { 2229 if (a) 2230 if (b) 2231 foo (); 2232 else 2233 bar (); 2234 } 2235 2236 In C, every `else' branch belongs to the innermost possible `if' 2237 statement, which in this example is `if (b)'. This is often not 2238 what the programmer expected, as illustrated in the above example 2239 by indentation the programmer chose. When there is the potential 2240 for this confusion, GCC will issue a warning when this flag is 2241 specified. To eliminate the warning, add explicit braces around 2242 the innermost `if' statement so there is no way the `else' could 2243 belong to the enclosing `if'. The resulting code would look like 2244 this: 2245 2246 { 2247 if (a) 2248 { 2249 if (b) 2250 foo (); 2251 else 2252 bar (); 2253 } 2254 } 2255 2256`-Wsequence-point' 2257 Warn about code that may have undefined semantics because of 2258 violations of sequence point rules in the C standard. 2259 2260 The C standard defines the order in which expressions in a C 2261 program are evaluated in terms of "sequence points", which 2262 represent a partial ordering between the execution of parts of the 2263 program: those executed before the sequence point, and those 2264 executed after it. These occur after the evaluation of a full 2265 expression (one which is not part of a larger expression), after 2266 the evaluation of the first operand of a `&&', `||', `? :' or `,' 2267 (comma) operator, before a function is called (but after the 2268 evaluation of its arguments and the expression denoting the called 2269 function), and in certain other places. Other than as expressed 2270 by the sequence point rules, the order of evaluation of 2271 subexpressions of an expression is not specified. All these rules 2272 describe only a partial order rather than a total order, since, 2273 for example, if two functions are called within one expression 2274 with no sequence point between them, the order in which the 2275 functions are called is not specified. However, the standards 2276 committee have ruled that function calls do not overlap. 2277 2278 It is not specified when between sequence points modifications to 2279 the values of objects take effect. Programs whose behavior 2280 depends on this have undefined behavior; the C standard specifies 2281 that "Between the previous and next sequence point an object shall 2282 have its stored value modified at most once by the evaluation of 2283 an expression. Furthermore, the prior value shall be read only to 2284 determine the value to be stored.". If a program breaks these 2285 rules, the results on any particular implementation are entirely 2286 unpredictable. 2287 2288 Examples of code with undefined behavior are `a = a++;', `a[n] = 2289 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 2290 diagnosed by this option, and it may give an occasional false 2291 positive result, but in general it has been found fairly effective 2292 at detecting this sort of problem in programs. 2293 2294 The present implementation of this option only works for C 2295 programs. A future implementation may also work for C++ programs. 2296 2297 The C standard is worded confusingly, therefore there is some 2298 debate over the precise meaning of the sequence point rules in 2299 subtle cases. Links to discussions of the problem, including 2300 proposed formal definitions, may be found on the GCC readings 2301 page, at `http://gcc.gnu.org/readings.html'. 2302 2303`-Wreturn-type' 2304 Warn whenever a function is defined with a return-type that 2305 defaults to `int'. Also warn about any `return' statement with no 2306 return-value in a function whose return-type is not `void'. 2307 2308 For C++, a function without return type always produces a 2309 diagnostic message, even when `-Wno-return-type' is specified. 2310 The only exceptions are `main' and functions defined in system 2311 headers. 2312 2313`-Wswitch' 2314 Warn whenever a `switch' statement has an index of enumerated type 2315 and lacks a `case' for one or more of the named codes of that 2316 enumeration. (The presence of a `default' label prevents this 2317 warning.) `case' labels outside the enumeration range also 2318 provoke warnings when this option is used. 2319 2320`-Wswitch-default' 2321 Warn whenever a `switch' statement does not have a `default' case. 2322 2323`-Wswitch-enum' 2324 Warn whenever a `switch' statement has an index of enumerated type 2325 and lacks a `case' for one or more of the named codes of that 2326 enumeration. `case' labels outside the enumeration range also 2327 provoke warnings when this option is used. 2328 2329`-Wtrigraphs' 2330 Warn if any trigraphs are encountered that might change the 2331 meaning of the program (trigraphs within comments are not warned 2332 about). 2333 2334`-Wunused-function' 2335 Warn whenever a static function is declared but not defined or a 2336 non\-inline static function is unused. 2337 2338`-Wunused-label' 2339 Warn whenever a label is declared but not used. 2340 2341 To suppress this warning use the `unused' attribute (*note 2342 Variable Attributes::). 2343 2344`-Wunused-parameter' 2345 Warn whenever a function parameter is unused aside from its 2346 declaration. 2347 2348 To suppress this warning use the `unused' attribute (*note 2349 Variable Attributes::). 2350 2351`-Wunused-variable' 2352 Warn whenever a local variable or non-constant static variable is 2353 unused aside from its declaration 2354 2355 To suppress this warning use the `unused' attribute (*note 2356 Variable Attributes::). 2357 2358`-Wunused-value' 2359 Warn whenever a statement computes a result that is explicitly not 2360 used. 2361 2362 To suppress this warning cast the expression to `void'. 2363 2364`-Wunused' 2365 All the above `-Wunused' options combined. 2366 2367 In order to get a warning about an unused function parameter, you 2368 must either specify `-Wextra -Wunused' (note that `-Wall' implies 2369 `-Wunused'), or separately specify `-Wunused-parameter'. 2370 2371`-Wuninitialized' 2372 Warn if an automatic variable is used without first being 2373 initialized or if a variable may be clobbered by a `setjmp' call. 2374 2375 These warnings are possible only in optimizing compilation, 2376 because they require data flow information that is computed only 2377 when optimizing. If you don't specify `-O', you simply won't get 2378 these warnings. 2379 2380 If you want to warn about code which uses the uninitialized value 2381 of the variable in its own initializer, use the `-Winit-self' 2382 option. 2383 2384 These warnings occur only for variables that are candidates for 2385 register allocation. Therefore, they do not occur for a variable 2386 that is declared `volatile', or whose address is taken, or whose 2387 size is other than 1, 2, 4 or 8 bytes. Also, they do not occur for 2388 structures, unions or arrays, even when they are in registers. 2389 2390 Note that there may be no warning about a variable that is used 2391 only to compute a value that itself is never used, because such 2392 computations may be deleted by data flow analysis before the 2393 warnings are printed. 2394 2395 These warnings are made optional because GCC is not smart enough 2396 to see all the reasons why the code might be correct despite 2397 appearing to have an error. Here is one example of how this can 2398 happen: 2399 2400 { 2401 int x; 2402 switch (y) 2403 { 2404 case 1: x = 1; 2405 break; 2406 case 2: x = 4; 2407 break; 2408 case 3: x = 5; 2409 } 2410 foo (x); 2411 } 2412 2413 If the value of `y' is always 1, 2 or 3, then `x' is always 2414 initialized, but GCC doesn't know this. Here is another common 2415 case: 2416 2417 { 2418 int save_y; 2419 if (change_y) save_y = y, y = new_y; 2420 ... 2421 if (change_y) y = save_y; 2422 } 2423 2424 This has no bug because `save_y' is used only if it is set. 2425 2426 This option also warns when a non-volatile automatic variable 2427 might be changed by a call to `longjmp'. These warnings as well 2428 are possible only in optimizing compilation. 2429 2430 The compiler sees only the calls to `setjmp'. It cannot know 2431 where `longjmp' will be called; in fact, a signal handler could 2432 call it at any point in the code. As a result, you may get a 2433 warning even when there is in fact no problem because `longjmp' 2434 cannot in fact be called at the place which would cause a problem. 2435 2436 Some spurious warnings can be avoided if you declare all the 2437 functions you use that never return as `noreturn'. *Note Function 2438 Attributes::. 2439 2440`-Wunknown-pragmas' 2441 Warn when a #pragma directive is encountered which is not 2442 understood by GCC. If this command line option is used, warnings 2443 will even be issued for unknown pragmas in system header files. 2444 This is not the case if the warnings were only enabled by the 2445 `-Wall' command line option. 2446 2447`-Wstrict-aliasing' 2448 This option is only active when `-fstrict-aliasing' is active. It 2449 warns about code which might break the strict aliasing rules that 2450 the compiler is using for optimization. The warning does not catch 2451 all cases, but does attempt to catch the more common pitfalls. It 2452 is included in `-Wall'. 2453 2454`-Wall' 2455 All of the above `-W' options combined. This enables all the 2456 warnings about constructions that some users consider 2457 questionable, and that are easy to avoid (or modify to prevent the 2458 warning), even in conjunction with macros. This also enables some 2459 language-specific warnings described in *Note C++ Dialect 2460 Options:: and *Note Objective-C Dialect Options::. 2461 2462 The following `-W...' options are not implied by `-Wall'. Some of 2463them warn about constructions that users generally do not consider 2464questionable, but which occasionally you might wish to check for; 2465others warn about constructions that are necessary or hard to avoid in 2466some cases, and there is no simple way to modify the code to suppress 2467the warning. 2468 2469`-Wextra' 2470 (This option used to be called `-W'. The older name is still 2471 supported, but the newer name is more descriptive.) Print extra 2472 warning messages for these events: 2473 2474 * A function can return either with or without a value. 2475 (Falling off the end of the function body is considered 2476 returning without a value.) For example, this function would 2477 evoke such a warning: 2478 2479 foo (a) 2480 { 2481 if (a > 0) 2482 return a; 2483 } 2484 2485 * An expression-statement or the left-hand side of a comma 2486 expression contains no side effects. To suppress the 2487 warning, cast the unused expression to void. For example, an 2488 expression such as `x[i,j]' will cause a warning, but 2489 `x[(void)i,j]' will not. 2490 2491 * An unsigned value is compared against zero with `<' or `>='. 2492 2493 * A comparison like `x<=y<=z' appears; this is equivalent to 2494 `(x<=y ? 1 : 0) <= z', which is a different interpretation 2495 from that of ordinary mathematical notation. 2496 2497 * Storage-class specifiers like `static' are not the first 2498 things in a declaration. According to the C Standard, this 2499 usage is obsolescent. 2500 2501 * The return type of a function has a type qualifier such as 2502 `const'. Such a type qualifier has no effect, since the 2503 value returned by a function is not an lvalue. (But don't 2504 warn about the GNU extension of `volatile void' return types. 2505 That extension will be warned about if `-pedantic' is 2506 specified.) 2507 2508 * If `-Wall' or `-Wunused' is also specified, warn about unused 2509 arguments. 2510 2511 * A comparison between signed and unsigned values could produce 2512 an incorrect result when the signed value is converted to 2513 unsigned. (But don't warn if `-Wno-sign-compare' is also 2514 specified.) 2515 2516 * An aggregate has an initializer which does not initialize all 2517 members. For example, the following code would cause such a 2518 warning, because `x.h' would be implicitly initialized to 2519 zero: 2520 2521 struct s { int f, g, h; }; 2522 struct s x = { 3, 4 }; 2523 2524 * A function parameter is declared without a type specifier in 2525 K&R-style functions: 2526 2527 void foo(bar) { } 2528 2529 * An empty body occurs in an `if' or `else' statement. 2530 2531 * A pointer is compared against integer zero with `<', `<=', 2532 `>', or `>='. 2533 2534 * A variable might be changed by `longjmp' or `vfork'. 2535 2536 * Any of several floating-point events that often indicate 2537 errors, such as overflow, underflow, loss of precision, etc. 2538 2539 * (C++ only) An enumerator and a non-enumerator both appear in 2540 a conditional expression. 2541 2542 * (C++ only) A non-static reference or non-static `const' 2543 member appears in a class without constructors. 2544 2545 * (C++ only) Ambiguous virtual bases. 2546 2547 * (C++ only) Subscripting an array which has been declared 2548 `register'. 2549 2550 * (C++ only) Taking the address of a variable which has been 2551 declared `register'. 2552 2553 * (C++ only) A base class is not initialized in a derived 2554 class' copy constructor. 2555 2556`-Wno-div-by-zero' 2557 Do not warn about compile-time integer division by zero. Floating 2558 point division by zero is not warned about, as it can be a 2559 legitimate way of obtaining infinities and NaNs. 2560 2561`-Wsystem-headers' 2562 Print warning messages for constructs found in system header files. 2563 Warnings from system headers are normally suppressed, on the 2564 assumption that they usually do not indicate real problems and 2565 would only make the compiler output harder to read. Using this 2566 command line option tells GCC to emit warnings from system headers 2567 as if they occurred in user code. However, note that using 2568 `-Wall' in conjunction with this option will _not_ warn about 2569 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 2570 must also be used. 2571 2572`-Wfloat-equal' 2573 Warn if floating point values are used in equality comparisons. 2574 2575 The idea behind this is that sometimes it is convenient (for the 2576 programmer) to consider floating-point values as approximations to 2577 infinitely precise real numbers. If you are doing this, then you 2578 need to compute (by analyzing the code, or in some other way) the 2579 maximum or likely maximum error that the computation introduces, 2580 and allow for it when performing comparisons (and when producing 2581 output, but that's a different problem). In particular, instead 2582 of testing for equality, you would check to see whether the two 2583 values have ranges that overlap; and this is done with the 2584 relational operators, so equality comparisons are probably 2585 mistaken. 2586 2587`-Wtraditional (C only)' 2588 Warn about certain constructs that behave differently in 2589 traditional and ISO C. Also warn about ISO C constructs that have 2590 no traditional C equivalent, and/or problematic constructs which 2591 should be avoided. 2592 2593 * Macro parameters that appear within string literals in the 2594 macro body. In traditional C macro replacement takes place 2595 within string literals, but does not in ISO C. 2596 2597 * In traditional C, some preprocessor directives did not exist. 2598 Traditional preprocessors would only consider a line to be a 2599 directive if the `#' appeared in column 1 on the line. 2600 Therefore `-Wtraditional' warns about directives that 2601 traditional C understands but would ignore because the `#' 2602 does not appear as the first character on the line. It also 2603 suggests you hide directives like `#pragma' not understood by 2604 traditional C by indenting them. Some traditional 2605 implementations would not recognize `#elif', so it suggests 2606 avoiding it altogether. 2607 2608 * A function-like macro that appears without arguments. 2609 2610 * The unary plus operator. 2611 2612 * The `U' integer constant suffix, or the `F' or `L' floating 2613 point constant suffixes. (Traditional C does support the `L' 2614 suffix on integer constants.) Note, these suffixes appear in 2615 macros defined in the system headers of most modern systems, 2616 e.g. the `_MIN'/`_MAX' macros in `<limits.h>'. Use of these 2617 macros in user code might normally lead to spurious warnings, 2618 however GCC's integrated preprocessor has enough context to 2619 avoid warning in these cases. 2620 2621 * A function declared external in one block and then used after 2622 the end of the block. 2623 2624 * A `switch' statement has an operand of type `long'. 2625 2626 * A non-`static' function declaration follows a `static' one. 2627 This construct is not accepted by some traditional C 2628 compilers. 2629 2630 * The ISO type of an integer constant has a different width or 2631 signedness from its traditional type. This warning is only 2632 issued if the base of the constant is ten. I.e. hexadecimal 2633 or octal values, which typically represent bit patterns, are 2634 not warned about. 2635 2636 * Usage of ISO string concatenation is detected. 2637 2638 * Initialization of automatic aggregates. 2639 2640 * Identifier conflicts with labels. Traditional C lacks a 2641 separate namespace for labels. 2642 2643 * Initialization of unions. If the initializer is zero, the 2644 warning is omitted. This is done under the assumption that 2645 the zero initializer in user code appears conditioned on e.g. 2646 `__STDC__' to avoid missing initializer warnings and relies 2647 on default initialization to zero in the traditional C case. 2648 2649 * Conversions by prototypes between fixed/floating point values 2650 and vice versa. The absence of these prototypes when 2651 compiling with traditional C would cause serious problems. 2652 This is a subset of the possible conversion warnings, for the 2653 full set use `-Wconversion'. 2654 2655 * Use of ISO C style function definitions. This warning 2656 intentionally is _not_ issued for prototype declarations or 2657 variadic functions because these ISO C features will appear 2658 in your code when using libiberty's traditional C 2659 compatibility macros, `PARAMS' and `VPARAMS'. This warning 2660 is also bypassed for nested functions because that feature is 2661 already a GCC extension and thus not relevant to traditional 2662 C compatibility. 2663 2664`-Wdeclaration-after-statement (C only)' 2665 Warn when a declaration is found after a statement in a block. 2666 This construct, known from C++, was introduced with ISO C99 and is 2667 by default allowed in GCC. It is not supported by ISO C90 and was 2668 not supported by GCC versions before GCC 3.0. *Note Mixed 2669 Declarations::. 2670 2671`-Wundef' 2672 Warn if an undefined identifier is evaluated in an `#if' directive. 2673 2674`-Wendif-labels' 2675 Warn whenever an `#else' or an `#endif' are followed by text. 2676 2677`-Wshadow' 2678 Warn whenever a local variable shadows another local variable, 2679 parameter or global variable or whenever a built-in function is 2680 shadowed. 2681 2682`-Wlarger-than-LEN' 2683 Warn whenever an object of larger than LEN bytes is defined. 2684 2685`-Wpointer-arith' 2686 Warn about anything that depends on the "size of" a function type 2687 or of `void'. GNU C assigns these types a size of 1, for 2688 convenience in calculations with `void *' pointers and pointers to 2689 functions. 2690 2691`-Wbad-function-cast (C only)' 2692 Warn whenever a function call is cast to a non-matching type. For 2693 example, warn if `int malloc()' is cast to `anything *'. 2694 2695`-Wcast-qual' 2696 Warn whenever a pointer is cast so as to remove a type qualifier 2697 from the target type. For example, warn if a `const char *' is 2698 cast to an ordinary `char *'. 2699 2700`-Wcast-align' 2701 Warn whenever a pointer is cast such that the required alignment 2702 of the target is increased. For example, warn if a `char *' is 2703 cast to an `int *' on machines where integers can only be accessed 2704 at two- or four-byte boundaries. 2705 2706`-Wwrite-strings' 2707 When compiling C, give string constants the type `const 2708 char[LENGTH]' so that copying the address of one into a 2709 non-`const' `char *' pointer will get a warning; when compiling 2710 C++, warn about the deprecated conversion from string constants to 2711 `char *'. These warnings will help you find at compile time code 2712 that can try to write into a string constant, but only if you have 2713 been very careful about using `const' in declarations and 2714 prototypes. Otherwise, it will just be a nuisance; this is why we 2715 did not make `-Wall' request these warnings. 2716 2717`-Wconversion' 2718 Warn if a prototype causes a type conversion that is different 2719 from what would happen to the same argument in the absence of a 2720 prototype. This includes conversions of fixed point to floating 2721 and vice versa, and conversions changing the width or signedness 2722 of a fixed point argument except when the same as the default 2723 promotion. 2724 2725 Also, warn if a negative integer constant expression is implicitly 2726 converted to an unsigned type. For example, warn about the 2727 assignment `x = -1' if `x' is unsigned. But do not warn about 2728 explicit casts like `(unsigned) -1'. 2729 2730`-Wsign-compare' 2731 Warn when a comparison between signed and unsigned values could 2732 produce an incorrect result when the signed value is converted to 2733 unsigned. This warning is also enabled by `-Wextra'; to get the 2734 other warnings of `-Wextra' without this warning, use `-Wextra 2735 -Wno-sign-compare'. 2736 2737`-Waggregate-return' 2738 Warn if any functions that return structures or unions are defined 2739 or called. (In languages where you can return an array, this also 2740 elicits a warning.) 2741 2742`-Wstrict-prototypes (C only)' 2743 Warn if a function is declared or defined without specifying the 2744 argument types. (An old-style function definition is permitted 2745 without a warning if preceded by a declaration which specifies the 2746 argument types.) 2747 2748`-Wold-style-definition (C only)' 2749 Warn if an old-style function definition is used. A warning is 2750 given even if there is a previous prototype. 2751 2752`-Wmissing-prototypes (C only)' 2753 Warn if a global function is defined without a previous prototype 2754 declaration. This warning is issued even if the definition itself 2755 provides a prototype. The aim is to detect global functions that 2756 fail to be declared in header files. 2757 2758`-Wmissing-declarations (C only)' 2759 Warn if a global function is defined without a previous 2760 declaration. Do so even if the definition itself provides a 2761 prototype. Use this option to detect global functions that are 2762 not declared in header files. 2763 2764`-Wmissing-noreturn' 2765 Warn about functions which might be candidates for attribute 2766 `noreturn'. Note these are only possible candidates, not absolute 2767 ones. Care should be taken to manually verify functions actually 2768 do not ever return before adding the `noreturn' attribute, 2769 otherwise subtle code generation bugs could be introduced. You 2770 will not get a warning for `main' in hosted C environments. 2771 2772`-Wmissing-format-attribute' 2773 If `-Wformat' is enabled, also warn about functions which might be 2774 candidates for `format' attributes. Note these are only possible 2775 candidates, not absolute ones. GCC will guess that `format' 2776 attributes might be appropriate for any function that calls a 2777 function like `vprintf' or `vscanf', but this might not always be 2778 the case, and some functions for which `format' attributes are 2779 appropriate may not be detected. This option has no effect unless 2780 `-Wformat' is enabled (possibly by `-Wall'). 2781 2782`-Wno-multichar' 2783 Do not warn if a multicharacter constant (`'FOOF'') is used. 2784 Usually they indicate a typo in the user's code, as they have 2785 implementation-defined values, and should not be used in portable 2786 code. 2787 2788`-Wno-deprecated-declarations' 2789 Do not warn about uses of functions, variables, and types marked as 2790 deprecated by using the `deprecated' attribute. (*note Function 2791 Attributes::, *note Variable Attributes::, *note Type 2792 Attributes::.) 2793 2794`-Wpacked' 2795 Warn if a structure is given the packed attribute, but the packed 2796 attribute has no effect on the layout or size of the structure. 2797 Such structures may be mis-aligned for little benefit. For 2798 instance, in this code, the variable `f.x' in `struct bar' will be 2799 misaligned even though `struct bar' does not itself have the 2800 packed attribute: 2801 2802 struct foo { 2803 int x; 2804 char a, b, c, d; 2805 } __attribute__((packed)); 2806 struct bar { 2807 char z; 2808 struct foo f; 2809 }; 2810 2811`-Wpadded' 2812 Warn if padding is included in a structure, either to align an 2813 element of the structure or to align the whole structure. 2814 Sometimes when this happens it is possible to rearrange the fields 2815 of the structure to reduce the padding and so make the structure 2816 smaller. 2817 2818`-Wredundant-decls' 2819 Warn if anything is declared more than once in the same scope, 2820 even in cases where multiple declaration is valid and changes 2821 nothing. 2822 2823`-Wnested-externs (C only)' 2824 Warn if an `extern' declaration is encountered within a function. 2825 2826`-Wunreachable-code' 2827 Warn if the compiler detects that code will never be executed. 2828 2829 This option is intended to warn when the compiler detects that at 2830 least a whole line of source code will never be executed, because 2831 some condition is never satisfied or because it is after a 2832 procedure that never returns. 2833 2834 It is possible for this option to produce a warning even though 2835 there are circumstances under which part of the affected line can 2836 be executed, so care should be taken when removing 2837 apparently-unreachable code. 2838 2839 For instance, when a function is inlined, a warning may mean that 2840 the line is unreachable in only one inlined copy of the function. 2841 2842 This option is not made part of `-Wall' because in a debugging 2843 version of a program there is often substantial code which checks 2844 correct functioning of the program and is, hopefully, unreachable 2845 because the program does work. Another common use of unreachable 2846 code is to provide behavior which is selectable at compile-time. 2847 2848`-Winline' 2849 Warn if a function can not be inlined and it was declared as 2850 inline. Even with this option, the compiler will not warn about 2851 failures to inline functions declared in system headers. 2852 2853 The compiler uses a variety of heuristics to determine whether or 2854 not to inline a function. For example, the compiler takes into 2855 account the size of the function being inlined and the the amount 2856 of inlining that has already been done in the current function. 2857 Therefore, seemingly insignificant changes in the source program 2858 can cause the warnings produced by `-Winline' to appear or 2859 disappear. 2860 2861`-Wno-invalid-offsetof (C++ only)' 2862 Suppress warnings from applying the `offsetof' macro to a non-POD 2863 type. According to the 1998 ISO C++ standard, applying `offsetof' 2864 to a non-POD type is undefined. In existing C++ implementations, 2865 however, `offsetof' typically gives meaningful results even when 2866 applied to certain kinds of non-POD types. (Such as a simple 2867 `struct' that fails to be a POD type only by virtue of having a 2868 constructor.) This flag is for users who are aware that they are 2869 writing nonportable code and who have deliberately chosen to 2870 ignore the warning about it. 2871 2872 The restrictions on `offsetof' may be relaxed in a future version 2873 of the C++ standard. 2874 2875`-Winvalid-pch' 2876 Warn if a precompiled header (*note Precompiled Headers::) is 2877 found in the search path but can't be used. 2878 2879`-Wlong-long' 2880 Warn if `long long' type is used. This is default. To inhibit 2881 the warning messages, use `-Wno-long-long'. Flags `-Wlong-long' 2882 and `-Wno-long-long' are taken into account only when `-pedantic' 2883 flag is used. 2884 2885`-Wdisabled-optimization' 2886 Warn if a requested optimization pass is disabled. This warning 2887 does not generally indicate that there is anything wrong with your 2888 code; it merely indicates that GCC's optimizers were unable to 2889 handle the code effectively. Often, the problem is that your code 2890 is too big or too complex; GCC will refuse to optimize programs 2891 when the optimization itself is likely to take inordinate amounts 2892 of time. 2893 2894`-Werror' 2895 Make all warnings into errors. 2896 2897 2898File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 2899 29003.9 Options for Debugging Your Program or GCC 2901============================================= 2902 2903GCC has various special options that are used for debugging either your 2904program or GCC: 2905 2906`-g' 2907 Produce debugging information in the operating system's native 2908 format (stabs, COFF, XCOFF, or DWARF). GDB can work with this 2909 debugging information. 2910 2911 On most systems that use stabs format, `-g' enables use of extra 2912 debugging information that only GDB can use; this extra information 2913 makes debugging work better in GDB but will probably make other 2914 debuggers crash or refuse to read the program. If you want to 2915 control for certain whether to generate the extra information, use 2916 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 2917 below). 2918 2919 Unlike most other C compilers, GCC allows you to use `-g' with 2920 `-O'. The shortcuts taken by optimized code may occasionally 2921 produce surprising results: some variables you declared may not 2922 exist at all; flow of control may briefly move where you did not 2923 expect it; some statements may not be executed because they 2924 compute constant results or their values were already at hand; 2925 some statements may execute in different places because they were 2926 moved out of loops. 2927 2928 Nevertheless it proves possible to debug optimized output. This 2929 makes it reasonable to use the optimizer for programs that might 2930 have bugs. 2931 2932 The following options are useful when GCC is generated with the 2933 capability for more than one debugging format. 2934 2935`-ggdb' 2936 Produce debugging information for use by GDB. This means to use 2937 the most expressive format available (DWARF 2, stabs, or the 2938 native format if neither of those are supported), including GDB 2939 extensions if at all possible. 2940 2941`-gstabs' 2942 Produce debugging information in stabs format (if that is 2943 supported), without GDB extensions. This is the format used by 2944 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 2945 systems this option produces stabs debugging output which is not 2946 understood by DBX or SDB. On System V Release 4 systems this 2947 option requires the GNU assembler. 2948 2949`-feliminate-unused-debug-symbols' 2950 Produce debugging information in stabs format (if that is 2951 supported), for only symbols that are actually used. 2952 2953`-gstabs+' 2954 Produce debugging information in stabs format (if that is 2955 supported), using GNU extensions understood only by the GNU 2956 debugger (GDB). The use of these extensions is likely to make 2957 other debuggers crash or refuse to read the program. 2958 2959`-gcoff' 2960 Produce debugging information in COFF format (if that is 2961 supported). This is the format used by SDB on most System V 2962 systems prior to System V Release 4. 2963 2964`-gxcoff' 2965 Produce debugging information in XCOFF format (if that is 2966 supported). This is the format used by the DBX debugger on IBM 2967 RS/6000 systems. 2968 2969`-gxcoff+' 2970 Produce debugging information in XCOFF format (if that is 2971 supported), using GNU extensions understood only by the GNU 2972 debugger (GDB). The use of these extensions is likely to make 2973 other debuggers crash or refuse to read the program, and may cause 2974 assemblers other than the GNU assembler (GAS) to fail with an 2975 error. 2976 2977`-gdwarf-2' 2978 Produce debugging information in DWARF version 2 format (if that is 2979 supported). This is the format used by DBX on IRIX 6. 2980 2981`-gvms' 2982 Produce debugging information in VMS debug format (if that is 2983 supported). This is the format used by DEBUG on VMS systems. 2984 2985`-gLEVEL' 2986`-ggdbLEVEL' 2987`-gstabsLEVEL' 2988`-gcoffLEVEL' 2989`-gxcoffLEVEL' 2990`-gvmsLEVEL' 2991 Request debugging information and also use LEVEL to specify how 2992 much information. The default level is 2. 2993 2994 Level 1 produces minimal information, enough for making backtraces 2995 in parts of the program that you don't plan to debug. This 2996 includes descriptions of functions and external variables, but no 2997 information about local variables and no line numbers. 2998 2999 Level 3 includes extra information, such as all the macro 3000 definitions present in the program. Some debuggers support macro 3001 expansion when you use `-g3'. 3002 3003 Note that in order to avoid confusion between DWARF1 debug level 2, 3004 and DWARF2 `-gdwarf-2' does not accept a concatenated debug level. 3005 Instead use an additional `-gLEVEL' option to change the debug 3006 level for DWARF2. 3007 3008`-feliminate-dwarf2-dups' 3009 Compress DWARF2 debugging information by eliminating duplicated 3010 information about each symbol. This option only makes sense when 3011 generating DWARF2 debugging information with `-gdwarf-2'. 3012 3013`-p' 3014 Generate extra code to write profile information suitable for the 3015 analysis program `prof'. You must use this option when compiling 3016 the source files you want data about, and you must also use it when 3017 linking. 3018 3019`-pg' 3020 Generate extra code to write profile information suitable for the 3021 analysis program `gprof'. You must use this option when compiling 3022 the source files you want data about, and you must also use it when 3023 linking. 3024 3025`-Q' 3026 Makes the compiler print out each function name as it is compiled, 3027 and print some statistics about each pass when it finishes. 3028 3029`-ftime-report' 3030 Makes the compiler print some statistics about the time consumed 3031 by each pass when it finishes. 3032 3033`-fmem-report' 3034 Makes the compiler print some statistics about permanent memory 3035 allocation when it finishes. 3036 3037`-fprofile-arcs' 3038 Add code so that program flow "arcs" are instrumented. During 3039 execution the program records how many times each branch and call 3040 is executed and how many times it is taken or returns. When the 3041 compiled program exits it saves this data to a file called 3042 `AUXNAME.gcda' for each source file. The data may be used for 3043 profile-directed optimizations (`-fbranch-probabilities'), or for 3044 test coverage analysis (`-ftest-coverage'). Each object file's 3045 AUXNAME is generated from the name of the output file, if 3046 explicitly specified and it is not the final executable, otherwise 3047 it is the basename of the source file. In both cases any suffix is 3048 removed (e.g. `foo.gcda' for input file `dir/foo.c', or 3049 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 3050 3051 * Compile the source files with `-fprofile-arcs' plus 3052 optimization and code generation options. For test coverage 3053 analysis, use the additional `-ftest-coverage' option. You do 3054 not need to profile every source file in a program. 3055 3056 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 3057 latter implies the former). 3058 3059 * Run the program on a representative workload to generate the 3060 arc profile information. This may be repeated any number of 3061 times. You can run concurrent instances of your program, and 3062 provided that the file system supports locking, the data 3063 files will be correctly updated. Also `fork' calls are 3064 detected and correctly handled (double counting will not 3065 happen). 3066 3067 * For profile-directed optimizations, compile the source files 3068 again with the same optimization and code generation options 3069 plus `-fbranch-probabilities' (*note Options that Control 3070 Optimization: Optimize Options.). 3071 3072 * For test coverage analysis, use `gcov' to produce human 3073 readable information from the `.gcno' and `.gcda' files. 3074 Refer to the `gcov' documentation for further information. 3075 3076 3077 With `-fprofile-arcs', for each function of your program GCC 3078 creates a program flow graph, then finds a spanning tree for the 3079 graph. Only arcs that are not on the spanning tree have to be 3080 instrumented: the compiler adds code to count the number of times 3081 that these arcs are executed. When an arc is the only exit or 3082 only entrance to a block, the instrumentation code can be added to 3083 the block; otherwise, a new basic block must be created to hold 3084 the instrumentation code. 3085 3086`-ftest-coverage' 3087 Produce a notes file that the `gcov' code-coverage utility (*note 3088 `gcov'--a Test Coverage Program: Gcov.) can use to show program 3089 coverage. Each source file's note file is called `AUXNAME.gcno'. 3090 Refer to the `-fprofile-arcs' option above for a description of 3091 AUXNAME and instructions on how to generate test coverage data. 3092 Coverage data will match the source files more closely, if you do 3093 not optimize. 3094 3095`-dLETTERS' 3096 Says to make debugging dumps during compilation at times specified 3097 by LETTERS. This is used for debugging the compiler. The file 3098 names for most of the dumps are made by appending a pass number 3099 and a word to the DUMPNAME. DUMPNAME is generated from the name of 3100 the output file, if explicitly specified and it is not an 3101 executable, otherwise it is the basename of the source file. In 3102 both cases any suffix is removed (e.g. `foo.01.rtl' or 3103 `foo.02.sibling'). Here are the possible letters for use in 3104 LETTERS, and their meanings: 3105 3106 `A' 3107 Annotate the assembler output with miscellaneous debugging 3108 information. 3109 3110 `b' 3111 Dump after computing branch probabilities, to `FILE.12.bp'. 3112 3113 `B' 3114 Dump after block reordering, to `FILE.31.bbro'. 3115 3116 `c' 3117 Dump after instruction combination, to the file 3118 `FILE.20.combine'. 3119 3120 `C' 3121 Dump after the first if conversion, to the file `FILE.14.ce1'. 3122 Also dump after the second if conversion, to the file 3123 `FILE.21.ce2'. 3124 3125 `d' 3126 Dump after branch target load optimization, to to 3127 `FILE.32.btl'. Also dump after delayed branch scheduling, to 3128 `FILE.36.dbr'. 3129 3130 `D' 3131 Dump all macro definitions, at the end of preprocessing, in 3132 addition to normal output. 3133 3134 `E' 3135 Dump after the third if conversion, to `FILE.30.ce3'. 3136 3137 `f' 3138 Dump after control and data flow analysis, to `FILE.11.cfg'. 3139 Also dump after life analysis, to `FILE.19.life'. 3140 3141 `F' 3142 Dump after purging `ADDRESSOF' codes, to `FILE.07.addressof'. 3143 3144 `g' 3145 Dump after global register allocation, to `FILE.25.greg'. 3146 3147 `G' 3148 Dump after GCSE, to `FILE.08.gcse'. Also dump after jump 3149 bypassing and control flow optimizations, to `FILE.10.bypass'. 3150 3151 `h' 3152 Dump after finalization of EH handling code, to `FILE.03.eh'. 3153 3154 `i' 3155 Dump after sibling call optimizations, to `FILE.02.sibling'. 3156 3157 `j' 3158 Dump after the first jump optimization, to `FILE.04.jump'. 3159 3160 `k' 3161 Dump after conversion from registers to stack, to 3162 `FILE.34.stack'. 3163 3164 `l' 3165 Dump after local register allocation, to `FILE.24.lreg'. 3166 3167 `L' 3168 Dump after loop optimization passes, to `FILE.09.loop' and 3169 `FILE.16.loop2'. 3170 3171 `M' 3172 Dump after performing the machine dependent reorganization 3173 pass, to `FILE.35.mach'. 3174 3175 `n' 3176 Dump after register renumbering, to `FILE.29.rnreg'. 3177 3178 `N' 3179 Dump after the register move pass, to `FILE.22.regmove'. 3180 3181 `o' 3182 Dump after post-reload optimizations, to `FILE.26.postreload'. 3183 3184 `r' 3185 Dump after RTL generation, to `FILE.01.rtl'. 3186 3187 `R' 3188 Dump after the second scheduling pass, to `FILE.33.sched2'. 3189 3190 `s' 3191 Dump after CSE (including the jump optimization that 3192 sometimes follows CSE), to `FILE.06.cse'. 3193 3194 `S' 3195 Dump after the first scheduling pass, to `FILE.23.sched'. 3196 3197 `t' 3198 Dump after the second CSE pass (including the jump 3199 optimization that sometimes follows CSE), to `FILE.18.cse2'. 3200 3201 `T' 3202 Dump after running tracer, to `FILE.15.tracer'. 3203 3204 `u' 3205 Dump after null pointer elimination pass to `FILE.05.null'. 3206 3207 `U' 3208 Dump callgraph and unit-at-a-time optimization `FILE.00.unit'. 3209 3210 `V' 3211 Dump after the value profile transformations, to 3212 `FILE.13.vpt'. 3213 3214 `w' 3215 Dump after the second flow pass, to `FILE.27.flow2'. 3216 3217 `z' 3218 Dump after the peephole pass, to `FILE.28.peephole2'. 3219 3220 `Z' 3221 Dump after constructing the web, to `FILE.17.web'. 3222 3223 `a' 3224 Produce all the dumps listed above. 3225 3226 `H' 3227 Produce a core dump whenever an error occurs. 3228 3229 `m' 3230 Print statistics on memory usage, at the end of the run, to 3231 standard error. 3232 3233 `p' 3234 Annotate the assembler output with a comment indicating which 3235 pattern and alternative was used. The length of each 3236 instruction is also printed. 3237 3238 `P' 3239 Dump the RTL in the assembler output as a comment before each 3240 instruction. Also turns on `-dp' annotation. 3241 3242 `v' 3243 For each of the other indicated dump files (except for 3244 `FILE.01.rtl'), dump a representation of the control flow 3245 graph suitable for viewing with VCG to `FILE.PASS.vcg'. 3246 3247 `x' 3248 Just generate RTL for a function instead of compiling it. 3249 Usually used with `r'. 3250 3251 `y' 3252 Dump debugging information during parsing, to standard error. 3253 3254`-fdump-unnumbered' 3255 When doing debugging dumps (see `-d' option above), suppress 3256 instruction numbers and line number note output. This makes it 3257 more feasible to use diff on debugging dumps for compiler 3258 invocations with different options, in particular with and without 3259 `-g'. 3260 3261`-fdump-translation-unit (C and C++ only)' 3262`-fdump-translation-unit-OPTIONS (C and C++ only)' 3263 Dump a representation of the tree structure for the entire 3264 translation unit to a file. The file name is made by appending 3265 `.tu' to the source file name. If the `-OPTIONS' form is used, 3266 OPTIONS controls the details of the dump as described for the 3267 `-fdump-tree' options. 3268 3269`-fdump-class-hierarchy (C++ only)' 3270`-fdump-class-hierarchy-OPTIONS (C++ only)' 3271 Dump a representation of each class's hierarchy and virtual 3272 function table layout to a file. The file name is made by 3273 appending `.class' to the source file name. If the `-OPTIONS' 3274 form is used, OPTIONS controls the details of the dump as 3275 described for the `-fdump-tree' options. 3276 3277`-fdump-tree-SWITCH (C++ only)' 3278`-fdump-tree-SWITCH-OPTIONS (C++ only)' 3279 Control the dumping at various stages of processing the 3280 intermediate language tree to a file. The file name is generated 3281 by appending a switch specific suffix to the source file name. If 3282 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 3283 options that control the details of the dump. Not all options are 3284 applicable to all dumps, those which are not meaningful will be 3285 ignored. The following options are available 3286 3287 `address' 3288 Print the address of each node. Usually this is not 3289 meaningful as it changes according to the environment and 3290 source file. Its primary use is for tying up a dump file with 3291 a debug environment. 3292 3293 `slim' 3294 Inhibit dumping of members of a scope or body of a function 3295 merely because that scope has been reached. Only dump such 3296 items when they are directly reachable by some other path. 3297 3298 `all' 3299 Turn on all options. 3300 3301 The following tree dumps are possible: 3302 `original' 3303 Dump before any tree based optimization, to `FILE.original'. 3304 3305 `optimized' 3306 Dump after all tree based optimization, to `FILE.optimized'. 3307 3308 `inlined' 3309 Dump after function inlining, to `FILE.inlined'. 3310 3311`-frandom-seed=STRING' 3312 This option provides a seed that GCC uses when it would otherwise 3313 use random numbers. It is used to generate certain symbol names 3314 that have to be different in every compiled file. It is also used 3315 to place unique stamps in coverage data files and the object files 3316 that produce them. You can use the `-frandom-seed' option to 3317 produce reproducibly identical object files. 3318 3319 The STRING should be different for every file you compile. 3320 3321`-fsched-verbose=N' 3322 On targets that use instruction scheduling, this option controls 3323 the amount of debugging output the scheduler prints. This 3324 information is written to standard error, unless `-dS' or `-dR' is 3325 specified, in which case it is output to the usual dump listing 3326 file, `.sched' or `.sched2' respectively. However for N greater 3327 than nine, the output is always printed to standard error. 3328 3329 For N greater than zero, `-fsched-verbose' outputs the same 3330 information as `-dRS'. For N greater than one, it also output 3331 basic block probabilities, detailed ready list information and 3332 unit/insn info. For N greater than two, it includes RTL at abort 3333 point, control-flow and regions info. And for N over four, 3334 `-fsched-verbose' also includes dependence info. 3335 3336`-save-temps' 3337 Store the usual "temporary" intermediate files permanently; place 3338 them in the current directory and name them based on the source 3339 file. Thus, compiling `foo.c' with `-c -save-temps' would produce 3340 files `foo.i' and `foo.s', as well as `foo.o'. This creates a 3341 preprocessed `foo.i' output file even though the compiler now 3342 normally uses an integrated preprocessor. 3343 3344`-time' 3345 Report the CPU time taken by each subprocess in the compilation 3346 sequence. For C source files, this is the compiler proper and 3347 assembler (plus the linker if linking is done). The output looks 3348 like this: 3349 3350 # cc1 0.12 0.01 3351 # as 0.00 0.01 3352 3353 The first number on each line is the "user time," that is time 3354 spent executing the program itself. The second number is "system 3355 time," time spent executing operating system routines on behalf of 3356 the program. Both numbers are in seconds. 3357 3358`-print-file-name=LIBRARY' 3359 Print the full absolute name of the library file LIBRARY that 3360 would be used when linking--and don't do anything else. With this 3361 option, GCC does not compile or link anything; it just prints the 3362 file name. 3363 3364`-print-multi-directory' 3365 Print the directory name corresponding to the multilib selected by 3366 any other switches present in the command line. This directory is 3367 supposed to exist in `GCC_EXEC_PREFIX'. 3368 3369`-print-multi-lib' 3370 Print the mapping from multilib directory names to compiler 3371 switches that enable them. The directory name is separated from 3372 the switches by `;', and each switch starts with an `@' instead of 3373 the `-', without spaces between multiple switches. This is 3374 supposed to ease shell-processing. 3375 3376`-print-prog-name=PROGRAM' 3377 Like `-print-file-name', but searches for a program such as `cpp'. 3378 3379`-print-libgcc-file-name' 3380 Same as `-print-file-name=libgcc.a'. 3381 3382 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 3383 you do want to link with `libgcc.a'. You can do 3384 3385 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 3386 3387`-print-search-dirs' 3388 Print the name of the configured installation directory and a list 3389 of program and library directories `gcc' will search--and don't do 3390 anything else. 3391 3392 This is useful when `gcc' prints the error message `installation 3393 problem, cannot exec cpp0: No such file or directory'. To resolve 3394 this you either need to put `cpp0' and the other compiler 3395 components where `gcc' expects to find them, or you can set the 3396 environment variable `GCC_EXEC_PREFIX' to the directory where you 3397 installed them. Don't forget the trailing '/'. *Note Environment 3398 Variables::. 3399 3400`-dumpmachine' 3401 Print the compiler's target machine (for example, 3402 `i686-pc-linux-gnu')--and don't do anything else. 3403 3404`-dumpversion' 3405 Print the compiler version (for example, `3.0')--and don't do 3406 anything else. 3407 3408`-dumpspecs' 3409 Print the compiler's built-in specs--and don't do anything else. 3410 (This is used when GCC itself is being built.) *Note Spec Files::. 3411 3412`-feliminate-unused-debug-types' 3413 Normally, when producing DWARF2 output, GCC will emit debugging 3414 information for all types declared in a compilation unit, 3415 regardless of whether or not they are actually used in that 3416 compilation unit. Sometimes this is useful, such as if, in the 3417 debugger, you want to cast a value to a type that is not actually 3418 used in your program (but is declared). More often, however, this 3419 results in a significant amount of wasted space. With this 3420 option, GCC will avoid producing debug symbol output for types 3421 that are nowhere used in the source file being compiled. 3422 3423 3424File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 3425 34263.10 Options That Control Optimization 3427====================================== 3428 3429These options control various sorts of optimizations. 3430 3431 Without any optimization option, the compiler's goal is to reduce the 3432cost of compilation and to make debugging produce the expected results. 3433Statements are independent: if you stop the program with a breakpoint 3434between statements, you can then assign a new value to any variable or 3435change the program counter to any other statement in the function and 3436get exactly the results you would expect from the source code. 3437 3438 Turning on optimization flags makes the compiler attempt to improve 3439the performance and/or code size at the expense of compilation time and 3440possibly the ability to debug the program. 3441 3442 The compiler performs optimization based on the knowledge it has of 3443the program. Using the `-funit-at-a-time' flag will allow the compiler 3444to consider information gained from later functions in the file when 3445compiling a function. Compiling multiple files at once to a single 3446output file (and using `-funit-at-a-time') will allow the compiler to 3447use information gained from all of the files when compiling each of 3448them. 3449 3450 Not all optimizations are controlled directly by a flag. Only 3451optimizations that have a flag are listed. 3452 3453`-O' 3454`-O1' 3455 Optimize. Optimizing compilation takes somewhat more time, and a 3456 lot more memory for a large function. 3457 3458 With `-O', the compiler tries to reduce code size and execution 3459 time, without performing any optimizations that take a great deal 3460 of compilation time. 3461 3462 `-O' turns on the following optimization flags: 3463 -fdefer-pop 3464 -fmerge-constants 3465 -fthread-jumps 3466 -floop-optimize 3467 -fif-conversion 3468 -fif-conversion2 3469 -fdelayed-branch 3470 -fguess-branch-probability 3471 -fcprop-registers 3472 3473 `-O' also turns on `-fomit-frame-pointer' on machines where doing 3474 so does not interfere with debugging. 3475 3476`-O2' 3477 Optimize even more. GCC performs nearly all supported 3478 optimizations that do not involve a space-speed tradeoff. The 3479 compiler does not perform loop unrolling or function inlining when 3480 you specify `-O2'. As compared to `-O', this option increases 3481 both compilation time and the performance of the generated code. 3482 3483 `-O2' turns on all optimization flags specified by `-O'. It also 3484 turns on the following optimization flags: 3485 -fforce-mem 3486 -foptimize-sibling-calls 3487 -fstrength-reduce 3488 -fcse-follow-jumps -fcse-skip-blocks 3489 -frerun-cse-after-loop -frerun-loop-opt 3490 -fgcse -fgcse-lm -fgcse-sm -fgcse-las 3491 -fdelete-null-pointer-checks 3492 -fexpensive-optimizations 3493 -fregmove 3494 -fschedule-insns -fschedule-insns2 3495 -fsched-interblock -fsched-spec 3496 -fcaller-saves 3497 -fpeephole2 3498 -freorder-blocks -freorder-functions 3499 -fstrict-aliasing 3500 -funit-at-a-time 3501 -falign-functions -falign-jumps 3502 -falign-loops -falign-labels 3503 -fcrossjumping 3504 3505 Please note the warning under `-fgcse' about invoking `-O2' on 3506 programs that use computed gotos. 3507 3508`-O3' 3509 Optimize yet more. `-O3' turns on all optimizations specified by 3510 `-O2' and also turns on the `-finline-functions', `-fweb' and 3511 `-frename-registers' options. 3512 3513`-O0' 3514 Do not optimize. This is the default. 3515 3516`-Os' 3517 Optimize for size. `-Os' enables all `-O2' optimizations that do 3518 not typically increase code size. It also performs further 3519 optimizations designed to reduce code size. 3520 3521 `-Os' disables the following optimization flags: 3522 -falign-functions -falign-jumps -falign-loops 3523 -falign-labels -freorder-blocks -fprefetch-loop-arrays 3524 3525 If you use multiple `-O' options, with or without level numbers, 3526 the last such option is the one that is effective. 3527 3528 Options of the form `-fFLAG' specify machine-independent flags. Most 3529flags have both positive and negative forms; the negative form of 3530`-ffoo' would be `-fno-foo'. In the table below, only one of the forms 3531is listed--the one you typically will use. You can figure out the 3532other form by either removing `no-' or adding it. 3533 3534 The following options control specific optimizations. They are either 3535activated by `-O' options or are related to ones that are. You can use 3536the following flags in the rare cases when "fine-tuning" of 3537optimizations to be performed is desired. 3538 3539`-fno-default-inline' 3540 Do not make member functions inline by default merely because they 3541 are defined inside the class scope (C++ only). Otherwise, when 3542 you specify `-O', member functions defined inside class scope are 3543 compiled inline by default; i.e., you don't need to add `inline' 3544 in front of the member function name. 3545 3546`-fno-defer-pop' 3547 Always pop the arguments to each function call as soon as that 3548 function returns. For machines which must pop arguments after a 3549 function call, the compiler normally lets arguments accumulate on 3550 the stack for several function calls and pops them all at once. 3551 3552 Disabled at levels `-O', `-O2', `-O3', `-Os'. 3553 3554`-fforce-mem' 3555 Force memory operands to be copied into registers before doing 3556 arithmetic on them. This produces better code by making all memory 3557 references potential common subexpressions. When they are not 3558 common subexpressions, instruction combination should eliminate 3559 the separate register-load. 3560 3561 Enabled at levels `-O2', `-O3', `-Os'. 3562 3563`-fforce-addr' 3564 Force memory address constants to be copied into registers before 3565 doing arithmetic on them. This may produce better code just as 3566 `-fforce-mem' may. 3567 3568`-fomit-frame-pointer' 3569 Don't keep the frame pointer in a register for functions that 3570 don't need one. This avoids the instructions to save, set up and 3571 restore frame pointers; it also makes an extra register available 3572 in many functions. *It also makes debugging impossible on some 3573 machines.* 3574 3575 On some machines, such as the VAX, this flag has no effect, because 3576 the standard calling sequence automatically handles the frame 3577 pointer and nothing is saved by pretending it doesn't exist. The 3578 machine-description macro `FRAME_POINTER_REQUIRED' controls 3579 whether a target machine supports this flag. *Note Register 3580 Usage: (gccint)Registers. 3581 3582 Enabled at levels `-O', `-O2', `-O3', `-Os'. 3583 3584`-foptimize-sibling-calls' 3585 Optimize sibling and tail recursive calls. 3586 3587 Enabled at levels `-O2', `-O3', `-Os'. 3588 3589`-fno-inline' 3590 Don't pay attention to the `inline' keyword. Normally this option 3591 is used to keep the compiler from expanding any functions inline. 3592 Note that if you are not optimizing, no functions can be expanded 3593 inline. 3594 3595`-finline-functions' 3596 Integrate all simple functions into their callers. The compiler 3597 heuristically decides which functions are simple enough to be worth 3598 integrating in this way. 3599 3600 If all calls to a given function are integrated, and the function 3601 is declared `static', then the function is normally not output as 3602 assembler code in its own right. 3603 3604 Enabled at level `-O3'. 3605 3606`-finline-limit=N' 3607 By default, GCC limits the size of functions that can be inlined. 3608 This flag allows the control of this limit for functions that are 3609 explicitly marked as inline (i.e., marked with the inline keyword 3610 or defined within the class definition in c++). N is the size of 3611 functions that can be inlined in number of pseudo instructions 3612 (not counting parameter handling). The default value of N is 600. 3613 Increasing this value can result in more inlined code at the cost 3614 of compilation time and memory consumption. Decreasing usually 3615 makes the compilation faster and less code will be inlined (which 3616 presumably means slower programs). This option is particularly 3617 useful for programs that use inlining heavily such as those based 3618 on recursive templates with C++. 3619 3620 Inlining is actually controlled by a number of parameters, which 3621 may be specified individually by using `--param NAME=VALUE'. The 3622 `-finline-limit=N' option sets some of these parameters as follows: 3623 3624 `max-inline-insns-single' 3625 is set to N/2. 3626 3627 `max-inline-insns-auto' 3628 is set to N/2. 3629 3630 `min-inline-insns' 3631 is set to 130 or N/4, whichever is smaller. 3632 3633 `max-inline-insns-rtl' 3634 is set to N. 3635 3636 See below for a documentation of the individual parameters 3637 controlling inlining. 3638 3639 _Note:_ pseudo instruction represents, in this particular context, 3640 an abstract measurement of function's size. In no way, it 3641 represents a count of assembly instructions and as such its exact 3642 meaning might change from one release to an another. 3643 3644`-fkeep-inline-functions' 3645 Even if all calls to a given function are integrated, and the 3646 function is declared `static', nevertheless output a separate 3647 run-time callable version of the function. This switch does not 3648 affect `extern inline' functions. 3649 3650`-fkeep-static-consts' 3651 Emit variables declared `static const' when optimization isn't 3652 turned on, even if the variables aren't referenced. 3653 3654 GCC enables this option by default. If you want to force the 3655 compiler to check if the variable was referenced, regardless of 3656 whether or not optimization is turned on, use the 3657 `-fno-keep-static-consts' option. 3658 3659`-fmerge-constants' 3660 Attempt to merge identical constants (string constants and 3661 floating point constants) across compilation units. 3662 3663 This option is the default for optimized compilation if the 3664 assembler and linker support it. Use `-fno-merge-constants' to 3665 inhibit this behavior. 3666 3667 Enabled at levels `-O', `-O2', `-O3', `-Os'. 3668 3669`-fmerge-all-constants' 3670 Attempt to merge identical constants and identical variables. 3671 3672 This option implies `-fmerge-constants'. In addition to 3673 `-fmerge-constants' this considers e.g. even constant initialized 3674 arrays or initialized constant variables with integral or floating 3675 point types. Languages like C or C++ require each non-automatic 3676 variable to have distinct location, so using this option will 3677 result in non-conforming behavior. 3678 3679`-fnew-ra' 3680 Use a graph coloring register allocator. Currently this option is 3681 meant only for testing. Users should not specify this option, 3682 since it is not yet ready for production use. 3683 3684`-fno-branch-count-reg' 3685 Do not use "decrement and branch" instructions on a count register, 3686 but instead generate a sequence of instructions that decrement a 3687 register, compare it against zero, then branch based upon the 3688 result. This option is only meaningful on architectures that 3689 support such instructions, which include x86, PowerPC, IA-64 and 3690 S/390. 3691 3692 The default is `-fbranch-count-reg', enabled when 3693 `-fstrength-reduce' is enabled. 3694 3695`-fno-function-cse' 3696 Do not put function addresses in registers; make each instruction 3697 that calls a constant function contain the function's address 3698 explicitly. 3699 3700 This option results in less efficient code, but some strange hacks 3701 that alter the assembler output may be confused by the 3702 optimizations performed when this option is not used. 3703 3704 The default is `-ffunction-cse' 3705 3706`-fno-zero-initialized-in-bss' 3707 If the target supports a BSS section, GCC by default puts 3708 variables that are initialized to zero into BSS. This can save 3709 space in the resulting code. 3710 3711 This option turns off this behavior because some programs 3712 explicitly rely on variables going to the data section. E.g., so 3713 that the resulting executable can find the beginning of that 3714 section and/or make assumptions based on that. 3715 3716 The default is `-fzero-initialized-in-bss'. 3717 3718`-fstrength-reduce' 3719 Perform the optimizations of loop strength reduction and 3720 elimination of iteration variables. 3721 3722 Enabled at levels `-O2', `-O3', `-Os'. 3723 3724`-fthread-jumps' 3725 Perform optimizations where we check to see if a jump branches to a 3726 location where another comparison subsumed by the first is found. 3727 If so, the first branch is redirected to either the destination of 3728 the second branch or a point immediately following it, depending 3729 on whether the condition is known to be true or false. 3730 3731 Enabled at levels `-O', `-O2', `-O3', `-Os'. 3732 3733`-fcse-follow-jumps' 3734 In common subexpression elimination, scan through jump instructions 3735 when the target of the jump is not reached by any other path. For 3736 example, when CSE encounters an `if' statement with an `else' 3737 clause, CSE will follow the jump when the condition tested is 3738 false. 3739 3740 Enabled at levels `-O2', `-O3', `-Os'. 3741 3742`-fcse-skip-blocks' 3743 This is similar to `-fcse-follow-jumps', but causes CSE to follow 3744 jumps which conditionally skip over blocks. When CSE encounters a 3745 simple `if' statement with no else clause, `-fcse-skip-blocks' 3746 causes CSE to follow the jump around the body of the `if'. 3747 3748 Enabled at levels `-O2', `-O3', `-Os'. 3749 3750`-frerun-cse-after-loop' 3751 Re-run common subexpression elimination after loop optimizations 3752 has been performed. 3753 3754 Enabled at levels `-O2', `-O3', `-Os'. 3755 3756`-frerun-loop-opt' 3757 Run the loop optimizer twice. 3758 3759 Enabled at levels `-O2', `-O3', `-Os'. 3760 3761`-fgcse' 3762 Perform a global common subexpression elimination pass. This pass 3763 also performs global constant and copy propagation. 3764 3765 _Note:_ When compiling a program using computed gotos, a GCC 3766 extension, you may get better runtime performance if you disable 3767 the global common subexpression elimination pass by adding 3768 `-fno-gcse' to the command line. 3769 3770 Enabled at levels `-O2', `-O3', `-Os'. 3771 3772`-fgcse-lm' 3773 When `-fgcse-lm' is enabled, global common subexpression 3774 elimination will attempt to move loads which are only killed by 3775 stores into themselves. This allows a loop containing a 3776 load/store sequence to be changed to a load outside the loop, and 3777 a copy/store within the loop. 3778 3779 Enabled by default when gcse is enabled. 3780 3781`-fgcse-sm' 3782 When `-fgcse-sm' is enabled, a store motion pass is run after 3783 global common subexpression elimination. This pass will attempt 3784 to move stores out of loops. When used in conjunction with 3785 `-fgcse-lm', loops containing a load/store sequence can be changed 3786 to a load before the loop and a store after the loop. 3787 3788 Enabled by default when gcse is enabled. 3789 3790`-fgcse-las' 3791 When `-fgcse-las' is enabled, the global common subexpression 3792 elimination pass eliminates redundant loads that come after stores 3793 to the same memory location (both partial and full redundancies). 3794 3795 Enabled by default when gcse is enabled. 3796 3797`-floop-optimize' 3798 Perform loop optimizations: move constant expressions out of 3799 loops, simplify exit test conditions and optionally do 3800 strength-reduction and loop unrolling as well. 3801 3802 Enabled at levels `-O', `-O2', `-O3', `-Os'. 3803 3804`-fcrossjumping' 3805 Perform cross-jumping transformation. This transformation unifies 3806 equivalent code and save code size. The resulting code may or may 3807 not perform better than without cross-jumping. 3808 3809 Enabled at levels `-O', `-O2', `-O3', `-Os'. 3810 3811`-fif-conversion' 3812 Attempt to transform conditional jumps into branch-less 3813 equivalents. This include use of conditional moves, min, max, set 3814 flags and abs instructions, and some tricks doable by standard 3815 arithmetics. The use of conditional execution on chips where it 3816 is available is controlled by `if-conversion2'. 3817 3818 Enabled at levels `-O', `-O2', `-O3', `-Os'. 3819 3820`-fif-conversion2' 3821 Use conditional execution (where available) to transform 3822 conditional jumps into branch-less equivalents. 3823 3824 Enabled at levels `-O', `-O2', `-O3', `-Os'. 3825 3826`-fdelete-null-pointer-checks' 3827 Use global dataflow analysis to identify and eliminate useless 3828 checks for null pointers. The compiler assumes that dereferencing 3829 a null pointer would have halted the program. If a pointer is 3830 checked after it has already been dereferenced, it cannot be null. 3831 3832 In some environments, this assumption is not true, and programs can 3833 safely dereference null pointers. Use 3834 `-fno-delete-null-pointer-checks' to disable this optimization for 3835 programs which depend on that behavior. 3836 3837 Enabled at levels `-O2', `-O3', `-Os'. 3838 3839`-fexpensive-optimizations' 3840 Perform a number of minor optimizations that are relatively 3841 expensive. 3842 3843 Enabled at levels `-O2', `-O3', `-Os'. 3844 3845`-foptimize-register-move' 3846`-fregmove' 3847 Attempt to reassign register numbers in move instructions and as 3848 operands of other simple instructions in order to maximize the 3849 amount of register tying. This is especially helpful on machines 3850 with two-operand instructions. 3851 3852 Note `-fregmove' and `-foptimize-register-move' are the same 3853 optimization. 3854 3855 Enabled at levels `-O2', `-O3', `-Os'. 3856 3857`-fdelayed-branch' 3858 If supported for the target machine, attempt to reorder 3859 instructions to exploit instruction slots available after delayed 3860 branch instructions. 3861 3862 Enabled at levels `-O', `-O2', `-O3', `-Os'. 3863 3864`-fschedule-insns' 3865 If supported for the target machine, attempt to reorder 3866 instructions to eliminate execution stalls due to required data 3867 being unavailable. This helps machines that have slow floating 3868 point or memory load instructions by allowing other instructions 3869 to be issued until the result of the load or floating point 3870 instruction is required. 3871 3872 Enabled at levels `-O2', `-O3', `-Os'. 3873 3874`-fschedule-insns2' 3875 Similar to `-fschedule-insns', but requests an additional pass of 3876 instruction scheduling after register allocation has been done. 3877 This is especially useful on machines with a relatively small 3878 number of registers and where memory load instructions take more 3879 than one cycle. 3880 3881 Enabled at levels `-O2', `-O3', `-Os'. 3882 3883`-fno-sched-interblock' 3884 Don't schedule instructions across basic blocks. This is normally 3885 enabled by default when scheduling before register allocation, i.e. 3886 with `-fschedule-insns' or at `-O2' or higher. 3887 3888`-fno-sched-spec' 3889 Don't allow speculative motion of non-load instructions. This is 3890 normally enabled by default when scheduling before register 3891 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 3892 3893`-fsched-spec-load' 3894 Allow speculative motion of some load instructions. This only 3895 makes sense when scheduling before register allocation, i.e. with 3896 `-fschedule-insns' or at `-O2' or higher. 3897 3898`-fsched-spec-load-dangerous' 3899 Allow speculative motion of more load instructions. This only 3900 makes sense when scheduling before register allocation, i.e. with 3901 `-fschedule-insns' or at `-O2' or higher. 3902 3903`-fsched-stalled-insns=N' 3904 Define how many insns (if any) can be moved prematurely from the 3905 queue of stalled insns into the ready list, during the second 3906 scheduling pass. 3907 3908`-fsched-stalled-insns-dep=N' 3909 Define how many insn groups (cycles) will be examined for a 3910 dependency on a stalled insn that is candidate for premature 3911 removal from the queue of stalled insns. Has an effect only 3912 during the second scheduling pass, and only if 3913 `-fsched-stalled-insns' is used and its value is not zero. 3914 3915`-fsched2-use-superblocks' 3916 When scheduling after register allocation, do use superblock 3917 scheduling algorithm. Superblock scheduling allows motion across 3918 basic block boundaries resulting on faster schedules. This option 3919 is experimental, as not all machine descriptions used by GCC model 3920 the CPU closely enough to avoid unreliable results from the 3921 algorithm. 3922 3923 This only makes sense when scheduling after register allocation, 3924 i.e. with `-fschedule-insns2' or at `-O2' or higher. 3925 3926`-fsched2-use-traces' 3927 Use `-fsched2-use-superblocks' algorithm when scheduling after 3928 register allocation and additionally perform code duplication in 3929 order to increase the size of superblocks using tracer pass. See 3930 `-ftracer' for details on trace formation. 3931 3932 This mode should produce faster but significantly longer programs. 3933 Also without `-fbranch-probabilities' the traces constructed may 3934 not match the reality and hurt the performance. This only makes 3935 sense when scheduling after register allocation, i.e. with 3936 `-fschedule-insns2' or at `-O2' or higher. 3937 3938`-fcaller-saves' 3939 Enable values to be allocated in registers that will be clobbered 3940 by function calls, by emitting extra instructions to save and 3941 restore the registers around such calls. Such allocation is done 3942 only when it seems to result in better code than would otherwise 3943 be produced. 3944 3945 This option is always enabled by default on certain machines, 3946 usually those which have no call-preserved registers to use 3947 instead. 3948 3949 Enabled at levels `-O2', `-O3', `-Os'. 3950 3951`-fmove-all-movables' 3952 Forces all invariant computations in loops to be moved outside the 3953 loop. 3954 3955`-freduce-all-givs' 3956 Forces all general-induction variables in loops to be 3957 strength-reduced. 3958 3959 _Note:_ When compiling programs written in Fortran, 3960 `-fmove-all-movables' and `-freduce-all-givs' are enabled by 3961 default when you use the optimizer. 3962 3963 These options may generate better or worse code; results are highly 3964 dependent on the structure of loops within the source code. 3965 3966 These two options are intended to be removed someday, once they 3967 have helped determine the efficacy of various approaches to 3968 improving loop optimizations. 3969 3970 Please contact <gcc@gcc.gnu.org>, and describe how use of these 3971 options affects the performance of your production code. Examples 3972 of code that runs _slower_ when these options are _enabled_ are 3973 very valuable. 3974 3975`-fno-peephole' 3976`-fno-peephole2' 3977 Disable any machine-specific peephole optimizations. The 3978 difference between `-fno-peephole' and `-fno-peephole2' is in how 3979 they are implemented in the compiler; some targets use one, some 3980 use the other, a few use both. 3981 3982 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 3983 levels `-O2', `-O3', `-Os'. 3984 3985`-fno-guess-branch-probability' 3986 Do not guess branch probabilities using a randomized model. 3987 3988 Sometimes GCC will opt to use a randomized model to guess branch 3989 probabilities, when none are available from either profiling 3990 feedback (`-fprofile-arcs') or `__builtin_expect'. This means that 3991 different runs of the compiler on the same program may produce 3992 different object code. 3993 3994 In a hard real-time system, people don't want different runs of the 3995 compiler to produce code that has different behavior; minimizing 3996 non-determinism is of paramount import. This switch allows users 3997 to reduce non-determinism, possibly at the expense of inferior 3998 optimization. 3999 4000 The default is `-fguess-branch-probability' at levels `-O', `-O2', 4001 `-O3', `-Os'. 4002 4003`-freorder-blocks' 4004 Reorder basic blocks in the compiled function in order to reduce 4005 number of taken branches and improve code locality. 4006 4007 Enabled at levels `-O2', `-O3'. 4008 4009`-freorder-functions' 4010 Reorder basic blocks in the compiled function in order to reduce 4011 number of taken branches and improve code locality. This is 4012 implemented by using special subsections `text.hot' for most 4013 frequently executed functions and `text.unlikely' for unlikely 4014 executed functions. Reordering is done by the linker so object 4015 file format must support named sections and linker must place them 4016 in a reasonable way. 4017 4018 Also profile feedback must be available in to make this option 4019 effective. See `-fprofile-arcs' for details. 4020 4021 Enabled at levels `-O2', `-O3', `-Os'. 4022 4023`-fstrict-aliasing' 4024 Allows the compiler to assume the strictest aliasing rules 4025 applicable to the language being compiled. For C (and C++), this 4026 activates optimizations based on the type of expressions. In 4027 particular, an object of one type is assumed never to reside at 4028 the same address as an object of a different type, unless the 4029 types are almost the same. For example, an `unsigned int' can 4030 alias an `int', but not a `void*' or a `double'. A character type 4031 may alias any other type. 4032 4033 Pay special attention to code like this: 4034 union a_union { 4035 int i; 4036 double d; 4037 }; 4038 4039 int f() { 4040 a_union t; 4041 t.d = 3.0; 4042 return t.i; 4043 } 4044 The practice of reading from a different union member than the one 4045 most recently written to (called "type-punning") is common. Even 4046 with `-fstrict-aliasing', type-punning is allowed, provided the 4047 memory is accessed through the union type. So, the code above 4048 will work as expected. However, this code might not: 4049 int f() { 4050 a_union t; 4051 int* ip; 4052 t.d = 3.0; 4053 ip = &t.i; 4054 return *ip; 4055 } 4056 4057 Every language that wishes to perform language-specific alias 4058 analysis should define a function that computes, given an `tree' 4059 node, an alias set for the node. Nodes in different alias sets 4060 are not allowed to alias. For an example, see the C front-end 4061 function `c_get_alias_set'. 4062 4063 Enabled at levels `-O2', `-O3', `-Os'. 4064 4065`-falign-functions' 4066`-falign-functions=N' 4067 Align the start of functions to the next power-of-two greater than 4068 N, skipping up to N bytes. For instance, `-falign-functions=32' 4069 aligns functions to the next 32-byte boundary, but 4070 `-falign-functions=24' would align to the next 32-byte boundary 4071 only if this can be done by skipping 23 bytes or less. 4072 4073 `-fno-align-functions' and `-falign-functions=1' are equivalent 4074 and mean that functions will not be aligned. 4075 4076 Some assemblers only support this flag when N is a power of two; 4077 in that case, it is rounded up. 4078 4079 If N is not specified or is zero, use a machine-dependent default. 4080 4081 Enabled at levels `-O2', `-O3'. 4082 4083`-falign-labels' 4084`-falign-labels=N' 4085 Align all branch targets to a power-of-two boundary, skipping up to 4086 N bytes like `-falign-functions'. This option can easily make 4087 code slower, because it must insert dummy operations for when the 4088 branch target is reached in the usual flow of the code. 4089 4090 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 4091 that labels will not be aligned. 4092 4093 If `-falign-loops' or `-falign-jumps' are applicable and are 4094 greater than this value, then their values are used instead. 4095 4096 If N is not specified or is zero, use a machine-dependent default 4097 which is very likely to be `1', meaning no alignment. 4098 4099 Enabled at levels `-O2', `-O3'. 4100 4101`-falign-loops' 4102`-falign-loops=N' 4103 Align loops to a power-of-two boundary, skipping up to N bytes 4104 like `-falign-functions'. The hope is that the loop will be 4105 executed many times, which will make up for any execution of the 4106 dummy operations. 4107 4108 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 4109 that loops will not be aligned. 4110 4111 If N is not specified or is zero, use a machine-dependent default. 4112 4113 Enabled at levels `-O2', `-O3'. 4114 4115`-falign-jumps' 4116`-falign-jumps=N' 4117 Align branch targets to a power-of-two boundary, for branch targets 4118 where the targets can only be reached by jumping, skipping up to N 4119 bytes like `-falign-functions'. In this case, no dummy operations 4120 need be executed. 4121 4122 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 4123 that loops will not be aligned. 4124 4125 If N is not specified or is zero, use a machine-dependent default. 4126 4127 Enabled at levels `-O2', `-O3'. 4128 4129`-frename-registers' 4130 Attempt to avoid false dependencies in scheduled code by making use 4131 of registers left over after register allocation. This 4132 optimization will most benefit processors with lots of registers. 4133 It can, however, make debugging impossible, since variables will 4134 no longer stay in a "home register". 4135 4136`-fweb' 4137 Constructs webs as commonly used for register allocation purposes 4138 and assign each web individual pseudo register. This allows the 4139 register allocation pass to operate on pseudos directly, but also 4140 strengthens several other optimization passes, such as CSE, loop 4141 optimizer and trivial dead code remover. It can, however, make 4142 debugging impossible, since variables will no longer stay in a 4143 "home register". 4144 4145 Enabled at levels `-O3'. 4146 4147`-fno-cprop-registers' 4148 After register allocation and post-register allocation instruction 4149 splitting, we perform a copy-propagation pass to try to reduce 4150 scheduling dependencies and occasionally eliminate the copy. 4151 4152 Disabled at levels `-O', `-O2', `-O3', `-Os'. 4153 4154`-fprofile-generate' 4155 Enable options usually used for instrumenting application to 4156 produce profile useful for later recompilation with profile 4157 feedback based optimization. You must use `-fprofile-generate' 4158 both when compiling and when linking your program. 4159 4160 The following options are enabled: `-fprofile-arcs', 4161 `-fprofile-values', `-fvpt'. 4162 4163`-fprofile-use' 4164 Enable profile feedback directed optimizations, and optimizations 4165 generally profitable only with profile feedback available. 4166 4167 The following options are enabled: `-fbranch-probabilities', 4168 `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer'. 4169 4170 4171 The following options control compiler behavior regarding floating 4172point arithmetic. These options trade off between speed and 4173correctness. All must be specifically enabled. 4174 4175`-ffloat-store' 4176 Do not store floating point variables in registers, and inhibit 4177 other options that might change whether a floating point value is 4178 taken from a register or memory. 4179 4180 This option prevents undesirable excess precision on machines such 4181 as the 68000 where the floating registers (of the 68881) keep more 4182 precision than a `double' is supposed to have. Similarly for the 4183 x86 architecture. For most programs, the excess precision does 4184 only good, but a few programs rely on the precise definition of 4185 IEEE floating point. Use `-ffloat-store' for such programs, after 4186 modifying them to store all pertinent intermediate computations 4187 into variables. 4188 4189`-ffast-math' 4190 Sets `-fno-math-errno', `-funsafe-math-optimizations', 4191 `-fno-trapping-math', `-ffinite-math-only', `-fno-rounding-math' 4192 and `-fno-signaling-nans'. 4193 4194 This option causes the preprocessor macro `__FAST_MATH__' to be 4195 defined. 4196 4197 This option should never be turned on by any `-O' option since it 4198 can result in incorrect output for programs which depend on an 4199 exact implementation of IEEE or ISO rules/specifications for math 4200 functions. 4201 4202`-fno-math-errno' 4203 Do not set ERRNO after calling math functions that are executed 4204 with a single instruction, e.g., sqrt. A program that relies on 4205 IEEE exceptions for math error handling may want to use this flag 4206 for speed while maintaining IEEE arithmetic compatibility. 4207 4208 This option should never be turned on by any `-O' option since it 4209 can result in incorrect output for programs which depend on an 4210 exact implementation of IEEE or ISO rules/specifications for math 4211 functions. 4212 4213 The default is `-fmath-errno'. 4214 4215`-funsafe-math-optimizations' 4216 Allow optimizations for floating-point arithmetic that (a) assume 4217 that arguments and results are valid and (b) may violate IEEE or 4218 ANSI standards. When used at link-time, it may include libraries 4219 or startup files that change the default FPU control word or other 4220 similar optimizations. 4221 4222 This option should never be turned on by any `-O' option since it 4223 can result in incorrect output for programs which depend on an 4224 exact implementation of IEEE or ISO rules/specifications for math 4225 functions. 4226 4227 The default is `-fno-unsafe-math-optimizations'. 4228 4229`-ffinite-math-only' 4230 Allow optimizations for floating-point arithmetic that assume that 4231 arguments and results are not NaNs or +-Infs. 4232 4233 This option should never be turned on by any `-O' option since it 4234 can result in incorrect output for programs which depend on an 4235 exact implementation of IEEE or ISO rules/specifications. 4236 4237 The default is `-fno-finite-math-only'. 4238 4239`-fno-trapping-math' 4240 Compile code assuming that floating-point operations cannot 4241 generate user-visible traps. These traps include division by 4242 zero, overflow, underflow, inexact result and invalid operation. 4243 This option implies `-fno-signaling-nans'. Setting this option 4244 may allow faster code if one relies on "non-stop" IEEE arithmetic, 4245 for example. 4246 4247 This option should never be turned on by any `-O' option since it 4248 can result in incorrect output for programs which depend on an 4249 exact implementation of IEEE or ISO rules/specifications for math 4250 functions. 4251 4252 The default is `-ftrapping-math'. 4253 4254`-frounding-math' 4255 Disable transformations and optimizations that assume default 4256 floating point rounding behavior. This is round-to-zero for all 4257 floating point to integer conversions, and round-to-nearest for 4258 all other arithmetic truncations. This option should be specified 4259 for programs that change the FP rounding mode dynamically, or that 4260 may be executed with a non-default rounding mode. This option 4261 disables constant folding of floating point expressions at 4262 compile-time (which may be affected by rounding mode) and 4263 arithmetic transformations that are unsafe in the presence of 4264 sign-dependent rounding modes. 4265 4266 The default is `-fno-rounding-math'. 4267 4268 This option is experimental and does not currently guarantee to 4269 disable all GCC optimizations that are affected by rounding mode. 4270 Future versions of GCC may provide finer control of this setting 4271 using C99's `FENV_ACCESS' pragma. This command line option will 4272 be used to specify the default state for `FENV_ACCESS'. 4273 4274`-fsignaling-nans' 4275 Compile code assuming that IEEE signaling NaNs may generate 4276 user-visible traps during floating-point operations. Setting this 4277 option disables optimizations that may change the number of 4278 exceptions visible with signaling NaNs. This option implies 4279 `-ftrapping-math'. 4280 4281 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 4282 defined. 4283 4284 The default is `-fno-signaling-nans'. 4285 4286 This option is experimental and does not currently guarantee to 4287 disable all GCC optimizations that affect signaling NaN behavior. 4288 4289`-fsingle-precision-constant' 4290 Treat floating point constant as single precision constant instead 4291 of implicitly converting it to double precision constant. 4292 4293 4294 The following options control optimizations that may improve 4295performance, but are not enabled by any `-O' options. This section 4296includes experimental options that may produce broken code. 4297 4298`-fbranch-probabilities' 4299 After running a program compiled with `-fprofile-arcs' (*note 4300 Options for Debugging Your Program or `gcc': Debugging Options.), 4301 you can compile it a second time using `-fbranch-probabilities', 4302 to improve optimizations based on the number of times each branch 4303 was taken. When the program compiled with `-fprofile-arcs' exits 4304 it saves arc execution counts to a file called `SOURCENAME.gcda' 4305 for each source file The information in this data file is very 4306 dependent on the structure of the generated code, so you must use 4307 the same source code and the same optimization options for both 4308 compilations. 4309 4310 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 4311 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 4312 optimization. Currently, they are only used in one place: in 4313 `reorg.c', instead of guessing which path a branch is mostly to 4314 take, the `REG_BR_PROB' values are used to exactly determine which 4315 path is taken more often. 4316 4317`-fprofile-values' 4318 If combined with `-fprofile-arcs', it adds code so that some data 4319 about values of expressions in the program is gathered. 4320 4321 With `-fbranch-probabilities', it reads back the data gathered 4322 from profiling values of expressions and adds `REG_VALUE_PROFILE' 4323 notes to instructions for their later usage in optimizations. 4324 4325`-fvpt' 4326 If combined with `-fprofile-arcs', it instructs the compiler to add 4327 a code to gather information about values of expressions. 4328 4329 With `-fbranch-probabilities', it reads back the data gathered and 4330 actually performs the optimizations based on them. Currently the 4331 optimizations include specialization of division operation using 4332 the knowledge about the value of the denominator. 4333 4334`-fnew-ra' 4335 Use a graph coloring register allocator. Currently this option is 4336 meant for testing, so we are interested to hear about 4337 miscompilations with `-fnew-ra'. 4338 4339`-ftracer' 4340 Perform tail duplication to enlarge superblock size. This 4341 transformation simplifies the control flow of the function 4342 allowing other optimizations to do better job. 4343 4344`-funit-at-a-time' 4345 Parse the whole compilation unit before starting to produce code. 4346 This allows some extra optimizations to take place but consumes 4347 more memory. 4348 4349`-funroll-loops' 4350 Unroll loops whose number of iterations can be determined at 4351 compile time or upon entry to the loop. `-funroll-loops' implies 4352 `-frerun-cse-after-loop'. It also turns on complete loop peeling 4353 (i.e. complete removal of loops with small constant number of 4354 iterations). This option makes code larger, and may or may not 4355 make it run faster. 4356 4357`-funroll-all-loops' 4358 Unroll all loops, even if their number of iterations is uncertain 4359 when the loop is entered. This usually makes programs run more 4360 slowly. `-funroll-all-loops' implies the same options as 4361 `-funroll-loops'. 4362 4363`-fpeel-loops' 4364 Peels the loops for that there is enough information that they do 4365 not roll much (from profile feedback). It also turns on complete 4366 loop peeling (i.e. complete removal of loops with small constant 4367 number of iterations). 4368 4369`-funswitch-loops' 4370 Move branches with loop invariant conditions out of the loop, with 4371 duplicates of the loop on both branches (modified according to 4372 result of the condition). 4373 4374`-fold-unroll-loops' 4375 Unroll loops whose number of iterations can be determined at 4376 compile time or upon entry to the loop, using the old loop 4377 unroller whose loop recognition is based on notes from frontend. 4378 `-fold-unroll-loops' implies both `-fstrength-reduce' and 4379 `-frerun-cse-after-loop'. This option makes code larger, and may 4380 or may not make it run faster. 4381 4382`-fold-unroll-all-loops' 4383 Unroll all loops, even if their number of iterations is uncertain 4384 when the loop is entered. This is done using the old loop unroller 4385 whose loop recognition is based on notes from frontend. This 4386 usually makes programs run more slowly. `-fold-unroll-all-loops' 4387 implies the same options as `-fold-unroll-loops'. 4388 4389`-funswitch-loops' 4390 Move branches with loop invariant conditions out of the loop, with 4391 duplicates of the loop on both branches (modified according to 4392 result of the condition). 4393 4394`-funswitch-loops' 4395 Move branches with loop invariant conditions out of the loop, with 4396 duplicates of the loop on both branches (modified according to 4397 result of the condition). 4398 4399`-fprefetch-loop-arrays' 4400 If supported by the target machine, generate instructions to 4401 prefetch memory to improve the performance of loops that access 4402 large arrays. 4403 4404 Disabled at level `-Os'. 4405 4406`-ffunction-sections' 4407`-fdata-sections' 4408 Place each function or data item into its own section in the output 4409 file if the target supports arbitrary sections. The name of the 4410 function or the name of the data item determines the section's name 4411 in the output file. 4412 4413 Use these options on systems where the linker can perform 4414 optimizations to improve locality of reference in the instruction 4415 space. Most systems using the ELF object format and SPARC 4416 processors running Solaris 2 have linkers with such optimizations. 4417 AIX may have these optimizations in the future. 4418 4419 Only use these options when there are significant benefits from 4420 doing so. When you specify these options, the assembler and 4421 linker will create larger object and executable files and will 4422 also be slower. You will not be able to use `gprof' on all 4423 systems if you specify this option and you may have problems with 4424 debugging if you specify both this option and `-g'. 4425 4426`-fbranch-target-load-optimize' 4427 Perform branch target register load optimization before prologue / 4428 epilogue threading. The use of target registers can typically be 4429 exposed only during reload, thus hoisting loads out of loops and 4430 doing inter-block scheduling needs a separate optimization pass. 4431 4432`-fbranch-target-load-optimize2' 4433 Perform branch target register load optimization after prologue / 4434 epilogue threading. 4435 4436`--param NAME=VALUE' 4437 In some places, GCC uses various constants to control the amount of 4438 optimization that is done. For example, GCC will not inline 4439 functions that contain more that a certain number of instructions. 4440 You can control some of these constants on the command-line using 4441 the `--param' option. 4442 4443 The names of specific parameters, and the meaning of the values, 4444 are tied to the internals of the compiler, and are subject to 4445 change without notice in future releases. 4446 4447 In each case, the VALUE is an integer. The allowable choices for 4448 NAME are given in the following table: 4449 4450 `max-crossjump-edges' 4451 The maximum number of incoming edges to consider for 4452 crossjumping. The algorithm used by `-fcrossjumping' is 4453 O(N^2) in the number of edges incoming to each block. 4454 Increasing values mean more aggressive optimization, making 4455 the compile time increase with probably small improvement in 4456 executable size. 4457 4458 `max-delay-slot-insn-search' 4459 The maximum number of instructions to consider when looking 4460 for an instruction to fill a delay slot. If more than this 4461 arbitrary number of instructions is searched, the time 4462 savings from filling the delay slot will be minimal so stop 4463 searching. Increasing values mean more aggressive 4464 optimization, making the compile time increase with probably 4465 small improvement in executable run time. 4466 4467 `max-delay-slot-live-search' 4468 When trying to fill delay slots, the maximum number of 4469 instructions to consider when searching for a block with 4470 valid live register information. Increasing this arbitrarily 4471 chosen value means more aggressive optimization, increasing 4472 the compile time. This parameter should be removed when the 4473 delay slot code is rewritten to maintain the control-flow 4474 graph. 4475 4476 `max-gcse-memory' 4477 The approximate maximum amount of memory that will be 4478 allocated in order to perform the global common subexpression 4479 elimination optimization. If more memory than specified is 4480 required, the optimization will not be done. 4481 4482 `max-gcse-passes' 4483 The maximum number of passes of GCSE to run. 4484 4485 `max-pending-list-length' 4486 The maximum number of pending dependencies scheduling will 4487 allow before flushing the current state and starting over. 4488 Large functions with few branches or calls can create 4489 excessively large lists which needlessly consume memory and 4490 resources. 4491 4492 `max-inline-insns-single' 4493 Several parameters control the tree inliner used in gcc. 4494 This number sets the maximum number of instructions (counted 4495 in GCC's internal representation) in a single function that 4496 the tree inliner will consider for inlining. This only 4497 affects functions declared inline and methods implemented in 4498 a class declaration (C++). The default value is 500. 4499 4500 `max-inline-insns-auto' 4501 When you use `-finline-functions' (included in `-O3'), a lot 4502 of functions that would otherwise not be considered for 4503 inlining by the compiler will be investigated. To those 4504 functions, a different (more restrictive) limit compared to 4505 functions declared inline can be applied. The default value 4506 is 100. 4507 4508 `large-function-insns' 4509 The limit specifying really large functions. For functions 4510 greater than this limit inlining is constrained by `--param 4511 large-function-growth'. This parameter is useful primarily 4512 to avoid extreme compilation time caused by non-linear 4513 algorithms used by the backend. This parameter is ignored 4514 when `-funit-at-a-time' is not used. The default value is 4515 3000. 4516 4517 `large-function-growth' 4518 Specifies maximal growth of large function caused by inlining 4519 in percents. This parameter is ignored when 4520 `-funit-at-a-time' is not used. The default value is 200. 4521 4522 `inline-unit-growth' 4523 Specifies maximal overall growth of the compilation unit 4524 caused by inlining. This parameter is ignored when 4525 `-funit-at-a-time' is not used. The default value is 150. 4526 4527 `max-inline-insns-rtl' 4528 For languages that use the RTL inliner (this happens at a 4529 later stage than tree inlining), you can set the maximum 4530 allowable size (counted in RTL instructions) for the RTL 4531 inliner with this parameter. The default value is 600. 4532 4533 `max-unrolled-insns' 4534 The maximum number of instructions that a loop should have if 4535 that loop is unrolled, and if the loop is unrolled, it 4536 determines how many times the loop code is unrolled. 4537 4538 `max-average-unrolled-insns' 4539 The maximum number of instructions biased by probabilities of 4540 their execution that a loop should have if that loop is 4541 unrolled, and if the loop is unrolled, it determines how many 4542 times the loop code is unrolled. 4543 4544 `max-unroll-times' 4545 The maximum number of unrollings of a single loop. 4546 4547 `max-peeled-insns' 4548 The maximum number of instructions that a loop should have if 4549 that loop is peeled, and if the loop is peeled, it determines 4550 how many times the loop code is peeled. 4551 4552 `max-peel-times' 4553 The maximum number of peelings of a single loop. 4554 4555 `max-completely-peeled-insns' 4556 The maximum number of insns of a completely peeled loop. 4557 4558 `max-completely-peel-times' 4559 The maximum number of iterations of a loop to be suitable for 4560 complete peeling. 4561 4562 `max-unswitch-insns' 4563 The maximum number of insns of an unswitched loop. 4564 4565 `max-unswitch-level' 4566 The maximum number of branches unswitched in a single loop. 4567 4568 `hot-bb-count-fraction' 4569 Select fraction of the maximal count of repetitions of basic 4570 block in program given basic block needs to have to be 4571 considered hot. 4572 4573 `hot-bb-frequency-fraction' 4574 Select fraction of the maximal frequency of executions of 4575 basic block in function given basic block needs to have to be 4576 considered hot 4577 4578 `tracer-dynamic-coverage' 4579 `tracer-dynamic-coverage-feedback' 4580 This value is used to limit superblock formation once the 4581 given percentage of executed instructions is covered. This 4582 limits unnecessary code size expansion. 4583 4584 The `tracer-dynamic-coverage-feedback' is used only when 4585 profile feedback is available. The real profiles (as opposed 4586 to statically estimated ones) are much less balanced allowing 4587 the threshold to be larger value. 4588 4589 `tracer-max-code-growth' 4590 Stop tail duplication once code growth has reached given 4591 percentage. This is rather hokey argument, as most of the 4592 duplicates will be eliminated later in cross jumping, so it 4593 may be set to much higher values than is the desired code 4594 growth. 4595 4596 `tracer-min-branch-ratio' 4597 Stop reverse growth when the reverse probability of best edge 4598 is less than this threshold (in percent). 4599 4600 `tracer-min-branch-ratio' 4601 `tracer-min-branch-ratio-feedback' 4602 Stop forward growth if the best edge do have probability 4603 lower than this threshold. 4604 4605 Similarly to `tracer-dynamic-coverage' two values are 4606 present, one for compilation for profile feedback and one for 4607 compilation without. The value for compilation with profile 4608 feedback needs to be more conservative (higher) in order to 4609 make tracer effective. 4610 4611 `max-cse-path-length' 4612 Maximum number of basic blocks on path that cse considers. 4613 4614 `ggc-min-expand' 4615 GCC uses a garbage collector to manage its own memory 4616 allocation. This parameter specifies the minimum percentage 4617 by which the garbage collector's heap should be allowed to 4618 expand between collections. Tuning this may improve 4619 compilation speed; it has no effect on code generation. 4620 4621 The default is 30% + 70% * (RAM/1GB) with an upper bound of 4622 100% when RAM >= 1GB. If `getrlimit' is available, the 4623 notion of "RAM" is the smallest of actual RAM, RLIMIT_RSS, 4624 RLIMIT_DATA and RLIMIT_AS. If GCC is not able to calculate 4625 RAM on a particular platform, the lower bound of 30% is used. 4626 Setting this parameter and `ggc-min-heapsize' to zero causes 4627 a full collection to occur at every opportunity. This is 4628 extremely slow, but can be useful for debugging. 4629 4630 `ggc-min-heapsize' 4631 Minimum size of the garbage collector's heap before it begins 4632 bothering to collect garbage. The first collection occurs 4633 after the heap expands by `ggc-min-expand'% beyond 4634 `ggc-min-heapsize'. Again, tuning this may improve 4635 compilation speed, and has no effect on code generation. 4636 4637 The default is RAM/8, with a lower bound of 4096 (four 4638 megabytes) and an upper bound of 131072 (128 megabytes). If 4639 `getrlimit' is available, the notion of "RAM" is the smallest 4640 of actual RAM, RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS. If GCC 4641 is not able to calculate RAM on a particular platform, the 4642 lower bound is used. Setting this parameter very large 4643 effectively disables garbage collection. Setting this 4644 parameter and `ggc-min-expand' to zero causes a full 4645 collection to occur at every opportunity. 4646 4647 `max-reload-search-insns' 4648 The maximum number of instruction reload should look backward 4649 for equivalent register. Increasing values mean more 4650 aggressive optimization, making the compile time increase 4651 with probably slightly better performance. The default value 4652 is 100. 4653 4654 `max-cselib-memory-location' 4655 The maximum number of memory locations cselib should take 4656 into acount. Increasing values mean more aggressive 4657 optimization, making the compile time increase with probably 4658 slightly better performance. The default value is 500. 4659 4660 `reorder-blocks-duplicate' 4661 `reorder-blocks-duplicate-feedback' 4662 Used by basic block reordering pass to decide whether to use 4663 unconditional branch or duplicate the code on its 4664 destination. Code is duplicated when its estimated size is 4665 smaller than this value multiplied by the estimated size of 4666 unconditional jump in the hot spots of the program. 4667 4668 The `reorder-block-duplicate-feedback' is used only when 4669 profile feedback is available and may be set to higher values 4670 than `reorder-block-duplicate' since information about the 4671 hot spots is more accurate. 4672 4673 4674File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 4675 46763.11 Options Controlling the Preprocessor 4677========================================= 4678 4679These options control the C preprocessor, which is run on each C source 4680file before actual compilation. 4681 4682 If you use the `-E' option, nothing is done except preprocessing. 4683Some of these options make sense only together with `-E' because they 4684cause the preprocessor output to be unsuitable for actual compilation. 4685 4686 You can use `-Wp,OPTION' to bypass the compiler driver and pass 4687 OPTION directly through to the preprocessor. If OPTION contains 4688 commas, it is split into multiple options at the commas. However, 4689 many options are modified, translated or interpreted by the 4690 compiler driver before being passed to the preprocessor, and `-Wp' 4691 forcibly bypasses this phase. The preprocessor's direct interface 4692 is undocumented and subject to change, so whenever possible you 4693 should avoid using `-Wp' and let the driver handle the options 4694 instead. 4695 4696`-Xpreprocessor OPTION' 4697 Pass OPTION as an option to the preprocessor. You can use this to 4698 supply system-specific preprocessor options which GCC does not 4699 know how to recognize. 4700 4701 If you want to pass an option that takes an argument, you must use 4702 `-Xpreprocessor' twice, once for the option and once for the 4703 argument. 4704 4705`-D NAME' 4706 Predefine NAME as a macro, with definition `1'. 4707 4708`-D NAME=DEFINITION' 4709 Predefine NAME as a macro, with definition DEFINITION. The 4710 contents of DEFINITION are tokenized and processed as if they 4711 appeared during translation phase three in a `#define' directive. 4712 In particular, the definition will be truncated by embedded 4713 newline characters. 4714 4715 If you are invoking the preprocessor from a shell or shell-like 4716 program you may need to use the shell's quoting syntax to protect 4717 characters such as spaces that have a meaning in the shell syntax. 4718 4719 If you wish to define a function-like macro on the command line, 4720 write its argument list with surrounding parentheses before the 4721 equals sign (if any). Parentheses are meaningful to most shells, 4722 so you will need to quote the option. With `sh' and `csh', 4723 `-D'NAME(ARGS...)=DEFINITION'' works. 4724 4725 `-D' and `-U' options are processed in the order they are given on 4726 the command line. All `-imacros FILE' and `-include FILE' options 4727 are processed after all `-D' and `-U' options. 4728 4729`-U NAME' 4730 Cancel any previous definition of NAME, either built in or 4731 provided with a `-D' option. 4732 4733`-undef' 4734 Do not predefine any system-specific or GCC-specific macros. The 4735 standard predefined macros remain defined. 4736 4737`-I DIR' 4738 Add the directory DIR to the list of directories to be searched 4739 for header files. Directories named by `-I' are searched before 4740 the standard system include directories. If the directory DIR is 4741 a standard system include directory, the option is ignored to 4742 ensure that the default search order for system directories and 4743 the special treatment of system headers are not defeated . 4744 4745`-o FILE' 4746 Write output to FILE. This is the same as specifying FILE as the 4747 second non-option argument to `cpp'. `gcc' has a different 4748 interpretation of a second non-option argument, so you must use 4749 `-o' to specify the output file. 4750 4751`-Wall' 4752 Turns on all optional warnings which are desirable for normal code. 4753 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 4754 warning about integer promotion causing a change of sign in `#if' 4755 expressions. Note that many of the preprocessor's warnings are on 4756 by default and have no options to control them. 4757 4758`-Wcomment' 4759`-Wcomments' 4760 Warn whenever a comment-start sequence `/*' appears in a `/*' 4761 comment, or whenever a backslash-newline appears in a `//' comment. 4762 (Both forms have the same effect.) 4763 4764`-Wtrigraphs' 4765 Most trigraphs in comments cannot affect the meaning of the 4766 program. However, a trigraph that would form an escaped newline 4767 (`??/' at the end of a line) can, by changing where the comment 4768 begins or ends. Therefore, only trigraphs that would form escaped 4769 newlines produce warnings inside a comment. 4770 4771 This option is implied by `-Wall'. If `-Wall' is not given, this 4772 option is still enabled unless trigraphs are enabled. To get 4773 trigraph conversion without warnings, but get the other `-Wall' 4774 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 4775 4776`-Wtraditional' 4777 Warn about certain constructs that behave differently in 4778 traditional and ISO C. Also warn about ISO C constructs that have 4779 no traditional C equivalent, and problematic constructs which 4780 should be avoided. 4781 4782`-Wimport' 4783 Warn the first time `#import' is used. 4784 4785`-Wundef' 4786 Warn whenever an identifier which is not a macro is encountered in 4787 an `#if' directive, outside of `defined'. Such identifiers are 4788 replaced with zero. 4789 4790`-Wunused-macros' 4791 Warn about macros defined in the main file that are unused. A 4792 macro is "used" if it is expanded or tested for existence at least 4793 once. The preprocessor will also warn if the macro has not been 4794 used at the time it is redefined or undefined. 4795 4796 Built-in macros, macros defined on the command line, and macros 4797 defined in include files are not warned about. 4798 4799 *Note:* If a macro is actually used, but only used in skipped 4800 conditional blocks, then CPP will report it as unused. To avoid 4801 the warning in such a case, you might improve the scope of the 4802 macro's definition by, for example, moving it into the first 4803 skipped block. Alternatively, you could provide a dummy use with 4804 something like: 4805 4806 #if defined the_macro_causing_the_warning 4807 #endif 4808 4809`-Wendif-labels' 4810 Warn whenever an `#else' or an `#endif' are followed by text. 4811 This usually happens in code of the form 4812 4813 #if FOO 4814 ... 4815 #else FOO 4816 ... 4817 #endif FOO 4818 4819 The second and third `FOO' should be in comments, but often are not 4820 in older programs. This warning is on by default. 4821 4822`-Werror' 4823 Make all warnings into hard errors. Source code which triggers 4824 warnings will be rejected. 4825 4826`-Wsystem-headers' 4827 Issue warnings for code in system headers. These are normally 4828 unhelpful in finding bugs in your own code, therefore suppressed. 4829 If you are responsible for the system library, you may want to see 4830 them. 4831 4832`-w' 4833 Suppress all warnings, including those which GNU CPP issues by 4834 default. 4835 4836`-pedantic' 4837 Issue all the mandatory diagnostics listed in the C standard. 4838 Some of them are left out by default, since they trigger 4839 frequently on harmless code. 4840 4841`-pedantic-errors' 4842 Issue all the mandatory diagnostics, and make all mandatory 4843 diagnostics into errors. This includes mandatory diagnostics that 4844 GCC issues without `-pedantic' but treats as warnings. 4845 4846`-M' 4847 Instead of outputting the result of preprocessing, output a rule 4848 suitable for `make' describing the dependencies of the main source 4849 file. The preprocessor outputs one `make' rule containing the 4850 object file name for that source file, a colon, and the names of 4851 all the included files, including those coming from `-include' or 4852 `-imacros' command line options. 4853 4854 Unless specified explicitly (with `-MT' or `-MQ'), the object file 4855 name consists of the basename of the source file with any suffix 4856 replaced with object file suffix. If there are many included 4857 files then the rule is split into several lines using `\'-newline. 4858 The rule has no commands. 4859 4860 This option does not suppress the preprocessor's debug output, 4861 such as `-dM'. To avoid mixing such debug output with the 4862 dependency rules you should explicitly specify the dependency 4863 output file with `-MF', or use an environment variable like 4864 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 4865 output will still be sent to the regular output stream as normal. 4866 4867 Passing `-M' to the driver implies `-E', and suppresses warnings 4868 with an implicit `-w'. 4869 4870`-MM' 4871 Like `-M' but do not mention header files that are found in system 4872 header directories, nor header files that are included, directly 4873 or indirectly, from such a header. 4874 4875 This implies that the choice of angle brackets or double quotes in 4876 an `#include' directive does not in itself determine whether that 4877 header will appear in `-MM' dependency output. This is a slight 4878 change in semantics from GCC versions 3.0 and earlier. 4879 4880`-MF FILE' 4881 When used with `-M' or `-MM', specifies a file to write the 4882 dependencies to. If no `-MF' switch is given the preprocessor 4883 sends the rules to the same place it would have sent preprocessed 4884 output. 4885 4886 When used with the driver options `-MD' or `-MMD', `-MF' overrides 4887 the default dependency output file. 4888 4889`-MG' 4890 In conjunction with an option such as `-M' requesting dependency 4891 generation, `-MG' assumes missing header files are generated files 4892 and adds them to the dependency list without raising an error. 4893 The dependency filename is taken directly from the `#include' 4894 directive without prepending any path. `-MG' also suppresses 4895 preprocessed output, as a missing header file renders this useless. 4896 4897 This feature is used in automatic updating of makefiles. 4898 4899`-MP' 4900 This option instructs CPP to add a phony target for each dependency 4901 other than the main file, causing each to depend on nothing. These 4902 dummy rules work around errors `make' gives if you remove header 4903 files without updating the `Makefile' to match. 4904 4905 This is typical output: 4906 4907 test.o: test.c test.h 4908 4909 test.h: 4910 4911`-MT TARGET' 4912 Change the target of the rule emitted by dependency generation. By 4913 default CPP takes the name of the main input file, including any 4914 path, deletes any file suffix such as `.c', and appends the 4915 platform's usual object suffix. The result is the target. 4916 4917 An `-MT' option will set the target to be exactly the string you 4918 specify. If you want multiple targets, you can specify them as a 4919 single argument to `-MT', or use multiple `-MT' options. 4920 4921 For example, `-MT '$(objpfx)foo.o'' might give 4922 4923 $(objpfx)foo.o: foo.c 4924 4925`-MQ TARGET' 4926 Same as `-MT', but it quotes any characters which are special to 4927 Make. `-MQ '$(objpfx)foo.o'' gives 4928 4929 $$(objpfx)foo.o: foo.c 4930 4931 The default target is automatically quoted, as if it were given 4932 with `-MQ'. 4933 4934`-MD' 4935 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 4936 implied. The driver determines FILE based on whether an `-o' 4937 option is given. If it is, the driver uses its argument but with 4938 a suffix of `.d', otherwise it take the basename of the input file 4939 and applies a `.d' suffix. 4940 4941 If `-MD' is used in conjunction with `-E', any `-o' switch is 4942 understood to specify the dependency output file (but *note -MF: 4943 dashMF.), but if used without `-E', each `-o' is understood to 4944 specify a target object file. 4945 4946 Since `-E' is not implied, `-MD' can be used to generate a 4947 dependency output file as a side-effect of the compilation process. 4948 4949`-MMD' 4950 Like `-MD' except mention only user header files, not system 4951 -header files. 4952 4953`-fpch-deps' 4954 When using precompiled headers (*note Precompiled Headers::), this 4955 flag will cause the dependency-output flags to also list the files 4956 from the precompiled header's dependencies. If not specified only 4957 the precompiled header would be listed and not the files that were 4958 used to create it because those files are not consulted when a 4959 precompiled header is used. 4960 4961`-x c' 4962`-x c++' 4963`-x objective-c' 4964`-x assembler-with-cpp' 4965 Specify the source language: C, C++, Objective-C, or assembly. 4966 This has nothing to do with standards conformance or extensions; 4967 it merely selects which base syntax to expect. If you give none 4968 of these options, cpp will deduce the language from the extension 4969 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 4970 extensions for C++ and assembly are also recognized. If cpp does 4971 not recognize the extension, it will treat the file as C; this is 4972 the most generic mode. 4973 4974 *Note:* Previous versions of cpp accepted a `-lang' option which 4975 selected both the language and the standards conformance level. 4976 This option has been removed, because it conflicts with the `-l' 4977 option. 4978 4979`-std=STANDARD' 4980`-ansi' 4981 Specify the standard to which the code should conform. Currently 4982 CPP knows about C and C++ standards; others may be added in the 4983 future. 4984 4985 STANDARD may be one of: 4986 `iso9899:1990' 4987 `c89' 4988 The ISO C standard from 1990. `c89' is the customary 4989 shorthand for this version of the standard. 4990 4991 The `-ansi' option is equivalent to `-std=c89'. 4992 4993 `iso9899:199409' 4994 The 1990 C standard, as amended in 1994. 4995 4996 `iso9899:1999' 4997 `c99' 4998 `iso9899:199x' 4999 `c9x' 5000 The revised ISO C standard, published in December 1999. 5001 Before publication, this was known as C9X. 5002 5003 `gnu89' 5004 The 1990 C standard plus GNU extensions. This is the default. 5005 5006 `gnu99' 5007 `gnu9x' 5008 The 1999 C standard plus GNU extensions. 5009 5010 `c++98' 5011 The 1998 ISO C++ standard plus amendments. 5012 5013 `gnu++98' 5014 The same as `-std=c++98' plus GNU extensions. This is the 5015 default for C++ code. 5016 5017`-I-' 5018 Split the include path. Any directories specified with `-I' 5019 options before `-I-' are searched only for headers requested with 5020 `#include "FILE"'; they are not searched for `#include <FILE>'. 5021 If additional directories are specified with `-I' options after 5022 the `-I-', those directories are searched for all `#include' 5023 directives. 5024 5025 In addition, `-I-' inhibits the use of the directory of the current 5026 file directory as the first search directory for `#include "FILE"'. 5027 5028`-nostdinc' 5029 Do not search the standard system directories for header files. 5030 Only the directories you have specified with `-I' options (and the 5031 directory of the current file, if appropriate) are searched. 5032 5033`-nostdinc++' 5034 Do not search for header files in the C++-specific standard 5035 directories, but do still search the other standard directories. 5036 (This option is used when building the C++ library.) 5037 5038`-include FILE' 5039 Process FILE as if `#include "file"' appeared as the first line of 5040 the primary source file. However, the first directory searched 5041 for FILE is the preprocessor's working directory _instead of_ the 5042 directory containing the main source file. If not found there, it 5043 is searched for in the remainder of the `#include "..."' search 5044 chain as normal. 5045 5046 If multiple `-include' options are given, the files are included 5047 in the order they appear on the command line. 5048 5049`-imacros FILE' 5050 Exactly like `-include', except that any output produced by 5051 scanning FILE is thrown away. Macros it defines remain defined. 5052 This allows you to acquire all the macros from a header without 5053 also processing its declarations. 5054 5055 All files specified by `-imacros' are processed before all files 5056 specified by `-include'. 5057 5058`-idirafter DIR' 5059 Search DIR for header files, but do it _after_ all directories 5060 specified with `-I' and the standard system directories have been 5061 exhausted. DIR is treated as a system include directory. 5062 5063`-iprefix PREFIX' 5064 Specify PREFIX as the prefix for subsequent `-iwithprefix' 5065 options. If the prefix represents a directory, you should include 5066 the final `/'. 5067 5068`-iwithprefix DIR' 5069`-iwithprefixbefore DIR' 5070 Append DIR to the prefix specified previously with `-iprefix', and 5071 add the resulting directory to the include search path. 5072 `-iwithprefixbefore' puts it in the same place `-I' would; 5073 `-iwithprefix' puts it where `-idirafter' would. 5074 5075`-isystem DIR' 5076 Search DIR for header files, after all directories specified by 5077 `-I' but before the standard system directories. Mark it as a 5078 system directory, so that it gets the same special treatment as is 5079 applied to the standard system directories. 5080 5081`-fdollars-in-identifiers' 5082 Accept `$' in identifiers. 5083 5084`-fpreprocessed' 5085 Indicate to the preprocessor that the input file has already been 5086 preprocessed. This suppresses things like macro expansion, 5087 trigraph conversion, escaped newline splicing, and processing of 5088 most directives. The preprocessor still recognizes and removes 5089 comments, so that you can pass a file preprocessed with `-C' to 5090 the compiler without problems. In this mode the integrated 5091 preprocessor is little more than a tokenizer for the front ends. 5092 5093 `-fpreprocessed' is implicit if the input file has one of the 5094 extensions `.i', `.ii' or `.mi'. These are the extensions that 5095 GCC uses for preprocessed files created by `-save-temps'. 5096 5097`-ftabstop=WIDTH' 5098 Set the distance between tab stops. This helps the preprocessor 5099 report correct column numbers in warnings or errors, even if tabs 5100 appear on the line. If the value is less than 1 or greater than 5101 100, the option is ignored. The default is 8. 5102 5103`-fexec-charset=CHARSET' 5104 Set the execution character set, used for string and character 5105 constants. The default is UTF-8. CHARSET can be any encoding 5106 supported by the system's `iconv' library routine. 5107 5108`-fwide-exec-charset=CHARSET' 5109 Set the wide execution character set, used for wide string and 5110 character constants. The default is UTF-32 or UTF-16, whichever 5111 corresponds to the width of `wchar_t'. As with 5112 `-ftarget-charset', CHARSET can be any encoding supported by the 5113 system's `iconv' library routine; however, you will have problems 5114 with encodings that do not fit exactly in `wchar_t'. 5115 5116`-finput-charset=CHARSET' 5117 Set the input character set, used for translation from the 5118 character set of the input file to the source character set used 5119 by GCC. If the locale does not specify, or GCC cannot get this 5120 information from the locale, the default is UTF-8. This can be 5121 overridden by either the locale or this command line option. 5122 Currently the command line option takes precedence if there's a 5123 conflict. CHARSET can be any encoding supported by the system's 5124 `iconv' library routine. 5125 5126`-fworking-directory' 5127 Enable generation of linemarkers in the preprocessor output that 5128 will let the compiler know the current working directory at the 5129 time of preprocessing. When this option is enabled, the 5130 preprocessor will emit, after the initial linemarker, a second 5131 linemarker with the current working directory followed by two 5132 slashes. GCC will use this directory, when it's present in the 5133 preprocessed input, as the directory emitted as the current 5134 working directory in some debugging information formats. This 5135 option is implicitly enabled if debugging information is enabled, 5136 but this can be inhibited with the negated form 5137 `-fno-working-directory'. If the `-P' flag is present in the 5138 command line, this option has no effect, since no `#line' 5139 directives are emitted whatsoever. 5140 5141`-fno-show-column' 5142 Do not print column numbers in diagnostics. This may be necessary 5143 if diagnostics are being scanned by a program that does not 5144 understand the column numbers, such as `dejagnu'. 5145 5146`-A PREDICATE=ANSWER' 5147 Make an assertion with the predicate PREDICATE and answer ANSWER. 5148 This form is preferred to the older form `-A PREDICATE(ANSWER)', 5149 which is still supported, because it does not use shell special 5150 characters. 5151 5152`-A -PREDICATE=ANSWER' 5153 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 5154 5155`-dCHARS' 5156 CHARS is a sequence of one or more of the following characters, 5157 and must not be preceded by a space. Other characters are 5158 interpreted by the compiler proper, or reserved for future 5159 versions of GCC, and so are silently ignored. If you specify 5160 characters whose behavior conflicts, the result is undefined. 5161 5162 `M' 5163 Instead of the normal output, generate a list of `#define' 5164 directives for all the macros defined during the execution of 5165 the preprocessor, including predefined macros. This gives 5166 you a way of finding out what is predefined in your version 5167 of the preprocessor. Assuming you have no file `foo.h', the 5168 command 5169 5170 touch foo.h; cpp -dM foo.h 5171 5172 will show all the predefined macros. 5173 5174 `D' 5175 Like `M' except in two respects: it does _not_ include the 5176 predefined macros, and it outputs _both_ the `#define' 5177 directives and the result of preprocessing. Both kinds of 5178 output go to the standard output file. 5179 5180 `N' 5181 Like `D', but emit only the macro names, not their expansions. 5182 5183 `I' 5184 Output `#include' directives in addition to the result of 5185 preprocessing. 5186 5187`-P' 5188 Inhibit generation of linemarkers in the output from the 5189 preprocessor. This might be useful when running the preprocessor 5190 on something that is not C code, and will be sent to a program 5191 which might be confused by the linemarkers. 5192 5193`-C' 5194 Do not discard comments. All comments are passed through to the 5195 output file, except for comments in processed directives, which 5196 are deleted along with the directive. 5197 5198 You should be prepared for side effects when using `-C'; it causes 5199 the preprocessor to treat comments as tokens in their own right. 5200 For example, comments appearing at the start of what would be a 5201 directive line have the effect of turning that line into an 5202 ordinary source line, since the first token on the line is no 5203 longer a `#'. 5204 5205`-CC' 5206 Do not discard comments, including during macro expansion. This is 5207 like `-C', except that comments contained within macros are also 5208 passed through to the output file where the macro is expanded. 5209 5210 In addition to the side-effects of the `-C' option, the `-CC' 5211 option causes all C++-style comments inside a macro to be 5212 converted to C-style comments. This is to prevent later use of 5213 that macro from inadvertently commenting out the remainder of the 5214 source line. 5215 5216 The `-CC' option is generally used to support lint comments. 5217 5218`-traditional-cpp' 5219 Try to imitate the behavior of old-fashioned C preprocessors, as 5220 opposed to ISO C preprocessors. 5221 5222`-trigraphs' 5223 Process trigraph sequences. These are three-character sequences, 5224 all starting with `??', that are defined by ISO C to stand for 5225 single characters. For example, `??/' stands for `\', so `'??/n'' 5226 is a character constant for a newline. By default, GCC ignores 5227 trigraphs, but in standard-conforming modes it converts them. See 5228 the `-std' and `-ansi' options. 5229 5230 The nine trigraphs and their replacements are 5231 5232 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 5233 Replacement: [ ] { } # \ ^ | ~ 5234 5235`-remap' 5236 Enable special code to work around file systems which only permit 5237 very short file names, such as MS-DOS. 5238 5239`--help' 5240`--target-help' 5241 Print text describing all the command line options instead of 5242 preprocessing anything. 5243 5244`-v' 5245 Verbose mode. Print out GNU CPP's version number at the beginning 5246 of execution, and report the final form of the include path. 5247 5248`-H' 5249 Print the name of each header file used, in addition to other 5250 normal activities. Each name is indented to show how deep in the 5251 `#include' stack it is. Precompiled header files are also 5252 printed, even if they are found to be invalid; an invalid 5253 precompiled header file is printed with `...x' and a valid one 5254 with `...!' . 5255 5256`-version' 5257`--version' 5258 Print out GNU CPP's version number. With one dash, proceed to 5259 preprocess as normal. With two dashes, exit immediately. 5260 5261 5262File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 5263 52643.12 Passing Options to the Assembler 5265===================================== 5266 5267You can pass options to the assembler. 5268 5269`-Wa,OPTION' 5270 Pass OPTION as an option to the assembler. If OPTION contains 5271 commas, it is split into multiple options at the commas. 5272 5273`-Xassembler OPTION' 5274 Pass OPTION as an option to the assembler. You can use this to 5275 supply system-specific assembler options which GCC does not know 5276 how to recognize. 5277 5278 If you want to pass an option that takes an argument, you must use 5279 `-Xassembler' twice, once for the option and once for the argument. 5280 5281 5282 5283File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 5284 52853.13 Options for Linking 5286======================== 5287 5288These options come into play when the compiler links object files into 5289an executable output file. They are meaningless if the compiler is not 5290doing a link step. 5291 5292`OBJECT-FILE-NAME' 5293 A file name that does not end in a special recognized suffix is 5294 considered to name an object file or library. (Object files are 5295 distinguished from libraries by the linker according to the file 5296 contents.) If linking is done, these object files are used as 5297 input to the linker. 5298 5299`-c' 5300`-S' 5301`-E' 5302 If any of these options is used, then the linker is not run, and 5303 object file names should not be used as arguments. *Note Overall 5304 Options::. 5305 5306`-lLIBRARY' 5307`-l LIBRARY' 5308 Search the library named LIBRARY when linking. (The second 5309 alternative with the library as a separate argument is only for 5310 POSIX compliance and is not recommended.) 5311 5312 It makes a difference where in the command you write this option; 5313 the linker searches and processes libraries and object files in 5314 the order they are specified. Thus, `foo.o -lz bar.o' searches 5315 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 5316 refers to functions in `z', those functions may not be loaded. 5317 5318 The linker searches a standard list of directories for the library, 5319 which is actually a file named `libLIBRARY.a'. The linker then 5320 uses this file as if it had been specified precisely by name. 5321 5322 The directories searched include several standard system 5323 directories plus any that you specify with `-L'. 5324 5325 Normally the files found this way are library files--archive files 5326 whose members are object files. The linker handles an archive 5327 file by scanning through it for members which define symbols that 5328 have so far been referenced but not defined. But if the file that 5329 is found is an ordinary object file, it is linked in the usual 5330 fashion. The only difference between using an `-l' option and 5331 specifying a file name is that `-l' surrounds LIBRARY with `lib' 5332 and `.a' and searches several directories. 5333 5334`-lobjc' 5335 You need this special case of the `-l' option in order to link an 5336 Objective-C program. 5337 5338`-nostartfiles' 5339 Do not use the standard system startup files when linking. The 5340 standard system libraries are used normally, unless `-nostdlib' or 5341 `-nodefaultlibs' is used. 5342 5343`-nodefaultlibs' 5344 Do not use the standard system libraries when linking. Only the 5345 libraries you specify will be passed to the linker. The standard 5346 startup files are used normally, unless `-nostartfiles' is used. 5347 The compiler may generate calls to memcmp, memset, and memcpy for 5348 System V (and ISO C) environments or to bcopy and bzero for BSD 5349 environments. These entries are usually resolved by entries in 5350 libc. These entry points should be supplied through some other 5351 mechanism when this option is specified. 5352 5353`-nostdlib' 5354 Do not use the standard system startup files or libraries when 5355 linking. No startup files and only the libraries you specify will 5356 be passed to the linker. The compiler may generate calls to 5357 memcmp, memset, and memcpy for System V (and ISO C) environments 5358 or to bcopy and bzero for BSD environments. These entries are 5359 usually resolved by entries in libc. These entry points should be 5360 supplied through some other mechanism when this option is 5361 specified. 5362 5363 One of the standard libraries bypassed by `-nostdlib' and 5364 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 5365 that GCC uses to overcome shortcomings of particular machines, or 5366 special needs for some languages. (*Note Interfacing to GCC 5367 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 5368 most cases, you need `libgcc.a' even when you want to avoid other 5369 standard libraries. In other words, when you specify `-nostdlib' 5370 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 5371 This ensures that you have no unresolved references to internal GCC 5372 library subroutines. (For example, `__main', used to ensure C++ 5373 constructors will be called; *note `collect2': (gccint)Collect2.) 5374 5375`-pie' 5376 Produce a position independent executable on targets which support 5377 it. For predictable results, you must also specify the same set 5378 of options that were used to generate code (`-fpie', `-fPIE', or 5379 model suboptions) when you specify this option. 5380 5381`-s' 5382 Remove all symbol table and relocation information from the 5383 executable. 5384 5385`-static' 5386 On systems that support dynamic linking, this prevents linking 5387 with the shared libraries. On other systems, this option has no 5388 effect. 5389 5390`-shared' 5391 Produce a shared object which can then be linked with other 5392 objects to form an executable. Not all systems support this 5393 option. For predictable results, you must also specify the same 5394 set of options that were used to generate code (`-fpic', `-fPIC', 5395 or model suboptions) when you specify this option.(1) 5396 5397`-shared-libgcc' 5398`-static-libgcc' 5399 On systems that provide `libgcc' as a shared library, these options 5400 force the use of either the shared or static version respectively. 5401 If no shared version of `libgcc' was built when the compiler was 5402 configured, these options have no effect. 5403 5404 There are several situations in which an application should use the 5405 shared `libgcc' instead of the static version. The most common of 5406 these is when the application wishes to throw and catch exceptions 5407 across different shared libraries. In that case, each of the 5408 libraries as well as the application itself should use the shared 5409 `libgcc'. 5410 5411 Therefore, the G++ and GCJ drivers automatically add 5412 `-shared-libgcc' whenever you build a shared library or a main 5413 executable, because C++ and Java programs typically use 5414 exceptions, so this is the right thing to do. 5415 5416 If, instead, you use the GCC driver to create shared libraries, 5417 you may find that they will not always be linked with the shared 5418 `libgcc'. If GCC finds, at its configuration time, that you have 5419 a non-GNU linker or a GNU linker that does not support option 5420 `--eh-frame-hdr', it will link the shared version of `libgcc' into 5421 shared libraries by default. Otherwise, it will take advantage of 5422 the linker and optimize away the linking with the shared version 5423 of `libgcc', linking with the static version of libgcc by default. 5424 This allows exceptions to propagate through such shared 5425 libraries, without incurring relocation costs at library load time. 5426 5427 However, if a library or main executable is supposed to throw or 5428 catch exceptions, you must link it using the G++ or GCJ driver, as 5429 appropriate for the languages used in the program, or using the 5430 option `-shared-libgcc', such that it is linked with the shared 5431 `libgcc'. 5432 5433`-symbolic' 5434 Bind references to global symbols when building a shared object. 5435 Warn about any unresolved references (unless overridden by the 5436 link editor option `-Xlinker -z -Xlinker defs'). Only a few 5437 systems support this option. 5438 5439`-Xlinker OPTION' 5440 Pass OPTION as an option to the linker. You can use this to 5441 supply system-specific linker options which GCC does not know how 5442 to recognize. 5443 5444 If you want to pass an option that takes an argument, you must use 5445 `-Xlinker' twice, once for the option and once for the argument. 5446 For example, to pass `-assert definitions', you must write 5447 `-Xlinker -assert -Xlinker definitions'. It does not work to write 5448 `-Xlinker "-assert definitions"', because this passes the entire 5449 string as a single argument, which is not what the linker expects. 5450 5451`-Wl,OPTION' 5452 Pass OPTION as an option to the linker. If OPTION contains 5453 commas, it is split into multiple options at the commas. 5454 5455`-u SYMBOL' 5456 Pretend the symbol SYMBOL is undefined, to force linking of 5457 library modules to define it. You can use `-u' multiple times with 5458 different symbols to force loading of additional library modules. 5459 5460 ---------- Footnotes ---------- 5461 5462 (1) On some systems, `gcc -shared' needs to build supplementary stub 5463code for constructors to work. On multi-libbed systems, `gcc -shared' 5464must select the correct support libraries to link against. Failing to 5465supply the correct flags may lead to subtle defects. Supplying them in 5466cases where they are not necessary is innocuous. 5467 5468 5469File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 5470 54713.14 Options for Directory Search 5472================================= 5473 5474These options specify directories to search for header files, for 5475libraries and for parts of the compiler: 5476 5477`-IDIR' 5478 Add the directory DIR to the head of the list of directories to be 5479 searched for header files. This can be used to override a system 5480 header file, substituting your own version, since these 5481 directories are searched before the system header file 5482 directories. However, you should not use this option to add 5483 directories that contain vendor-supplied system header files (use 5484 `-isystem' for that). If you use more than one `-I' option, the 5485 directories are scanned in left-to-right order; the standard 5486 system directories come after. 5487 5488 If a standard system include directory, or a directory specified 5489 with `-isystem', is also specified with `-I', the `-I' option will 5490 be ignored. The directory will still be searched but as a system 5491 directory at its normal position in the system include chain. 5492 This is to ensure that GCC's procedure to fix buggy system headers 5493 and the ordering for the include_next directive are not 5494 inadvertently changed. If you really need to change the search 5495 order for system directories, use the `-nostdinc' and/or 5496 `-isystem' options. 5497 5498`-I-' 5499 Any directories you specify with `-I' options before the `-I-' 5500 option are searched only for the case of `#include "FILE"'; they 5501 are not searched for `#include <FILE>'. 5502 5503 If additional directories are specified with `-I' options after 5504 the `-I-', these directories are searched for all `#include' 5505 directives. (Ordinarily _all_ `-I' directories are used this way.) 5506 5507 In addition, the `-I-' option inhibits the use of the current 5508 directory (where the current input file came from) as the first 5509 search directory for `#include "FILE"'. There is no way to 5510 override this effect of `-I-'. With `-I.' you can specify 5511 searching the directory which was current when the compiler was 5512 invoked. That is not exactly the same as what the preprocessor 5513 does by default, but it is often satisfactory. 5514 5515 `-I-' does not inhibit the use of the standard system directories 5516 for header files. Thus, `-I-' and `-nostdinc' are independent. 5517 5518`-LDIR' 5519 Add directory DIR to the list of directories to be searched for 5520 `-l'. 5521 5522`-BPREFIX' 5523 This option specifies where to find the executables, libraries, 5524 include files, and data files of the compiler itself. 5525 5526 The compiler driver program runs one or more of the subprograms 5527 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 5528 program it tries to run, both with and without `MACHINE/VERSION/' 5529 (*note Target Options::). 5530 5531 For each subprogram to be run, the compiler driver first tries the 5532 `-B' prefix, if any. If that name is not found, or if `-B' was 5533 not specified, the driver tries two standard prefixes, which are 5534 `/usr/lib/gcc/' and `/usr/local/lib/gcc/'. If neither of those 5535 results in a file name that is found, the unmodified program name 5536 is searched for using the directories specified in your `PATH' 5537 environment variable. 5538 5539 The compiler will check to see if the path provided by the `-B' 5540 refers to a directory, and if necessary it will add a directory 5541 separator character at the end of the path. 5542 5543 `-B' prefixes that effectively specify directory names also apply 5544 to libraries in the linker, because the compiler translates these 5545 options into `-L' options for the linker. They also apply to 5546 includes files in the preprocessor, because the compiler 5547 translates these options into `-isystem' options for the 5548 preprocessor. In this case, the compiler appends `include' to the 5549 prefix. 5550 5551 The run-time support file `libgcc.a' can also be searched for using 5552 the `-B' prefix, if needed. If it is not found there, the two 5553 standard prefixes above are tried, and that is all. The file is 5554 left out of the link if it is not found by those means. 5555 5556 Another way to specify a prefix much like the `-B' prefix is to use 5557 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 5558 Variables::. 5559 5560 As a special kludge, if the path provided by `-B' is 5561 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 5562 will be replaced by `[dir/]include'. This is to help with 5563 boot-strapping the compiler. 5564 5565`-specs=FILE' 5566 Process FILE after the compiler reads in the standard `specs' 5567 file, in order to override the defaults that the `gcc' driver 5568 program uses when determining what switches to pass to `cc1', 5569 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 5570 specified on the command line, and they are processed in order, 5571 from left to right. 5572 5573 5574File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 5575 55763.15 Specifying subprocesses and the switches to pass to them 5577============================================================= 5578 5579`gcc' is a driver program. It performs its job by invoking a sequence 5580of other programs to do the work of compiling, assembling and linking. 5581GCC interprets its command-line parameters and uses these to deduce 5582which programs it should invoke, and which command-line options it 5583ought to place on their command lines. This behavior is controlled by 5584"spec strings". In most cases there is one spec string for each 5585program that GCC can invoke, but a few programs have multiple spec 5586strings to control their behavior. The spec strings built into GCC can 5587be overridden by using the `-specs=' command-line switch to specify a 5588spec file. 5589 5590 "Spec files" are plaintext files that are used to construct spec 5591strings. They consist of a sequence of directives separated by blank 5592lines. The type of directive is determined by the first non-whitespace 5593character on the line and it can be one of the following: 5594 5595`%COMMAND' 5596 Issues a COMMAND to the spec file processor. The commands that can 5597 appear here are: 5598 5599 `%include <FILE>' 5600 Search for FILE and insert its text at the current point in 5601 the specs file. 5602 5603 `%include_noerr <FILE>' 5604 Just like `%include', but do not generate an error message if 5605 the include file cannot be found. 5606 5607 `%rename OLD_NAME NEW_NAME' 5608 Rename the spec string OLD_NAME to NEW_NAME. 5609 5610 5611`*[SPEC_NAME]:' 5612 This tells the compiler to create, override or delete the named 5613 spec string. All lines after this directive up to the next 5614 directive or blank line are considered to be the text for the spec 5615 string. If this results in an empty string then the spec will be 5616 deleted. (Or, if the spec did not exist, then nothing will 5617 happened.) Otherwise, if the spec does not currently exist a new 5618 spec will be created. If the spec does exist then its contents 5619 will be overridden by the text of this directive, unless the first 5620 character of that text is the `+' character, in which case the 5621 text will be appended to the spec. 5622 5623`[SUFFIX]:' 5624 Creates a new `[SUFFIX] spec' pair. All lines after this directive 5625 and up to the next directive or blank line are considered to make 5626 up the spec string for the indicated suffix. When the compiler 5627 encounters an input file with the named suffix, it will processes 5628 the spec string in order to work out how to compile that file. 5629 For example: 5630 5631 .ZZ: 5632 z-compile -input %i 5633 5634 This says that any input file whose name ends in `.ZZ' should be 5635 passed to the program `z-compile', which should be invoked with the 5636 command-line switch `-input' and with the result of performing the 5637 `%i' substitution. (See below.) 5638 5639 As an alternative to providing a spec string, the text that 5640 follows a suffix directive can be one of the following: 5641 5642 `@LANGUAGE' 5643 This says that the suffix is an alias for a known LANGUAGE. 5644 This is similar to using the `-x' command-line switch to GCC 5645 to specify a language explicitly. For example: 5646 5647 .ZZ: 5648 @c++ 5649 5650 Says that .ZZ files are, in fact, C++ source files. 5651 5652 `#NAME' 5653 This causes an error messages saying: 5654 5655 NAME compiler not installed on this system. 5656 5657 GCC already has an extensive list of suffixes built into it. This 5658 directive will add an entry to the end of the list of suffixes, but 5659 since the list is searched from the end backwards, it is 5660 effectively possible to override earlier entries using this 5661 technique. 5662 5663 5664 GCC has the following spec strings built into it. Spec files can 5665override these strings or create their own. Note that individual 5666targets can also add their own spec strings to this list. 5667 5668 asm Options to pass to the assembler 5669 asm_final Options to pass to the assembler post-processor 5670 cpp Options to pass to the C preprocessor 5671 cc1 Options to pass to the C compiler 5672 cc1plus Options to pass to the C++ compiler 5673 endfile Object files to include at the end of the link 5674 link Options to pass to the linker 5675 lib Libraries to include on the command line to the linker 5676 libgcc Decides which GCC support library to pass to the linker 5677 linker Sets the name of the linker 5678 predefines Defines to be passed to the C preprocessor 5679 signed_char Defines to pass to CPP to say whether `char' is signed 5680 by default 5681 startfile Object files to include at the start of the link 5682 5683 Here is a small example of a spec file: 5684 5685 %rename lib old_lib 5686 5687 *lib: 5688 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 5689 5690 This example renames the spec called `lib' to `old_lib' and then 5691overrides the previous definition of `lib' with a new one. The new 5692definition adds in some extra command-line options before including the 5693text of the old definition. 5694 5695 "Spec strings" are a list of command-line options to be passed to their 5696corresponding program. In addition, the spec strings can contain 5697`%'-prefixed sequences to substitute variable text or to conditionally 5698insert text into the command line. Using these constructs it is 5699possible to generate quite complex command lines. 5700 5701 Here is a table of all defined `%'-sequences for spec strings. Note 5702that spaces are not generated automatically around the results of 5703expanding these sequences. Therefore you can concatenate them together 5704or combine them with constant text in a single argument. 5705 5706`%%' 5707 Substitute one `%' into the program name or argument. 5708 5709`%i' 5710 Substitute the name of the input file being processed. 5711 5712`%b' 5713 Substitute the basename of the input file being processed. This 5714 is the substring up to (and not including) the last period and not 5715 including the directory. 5716 5717`%B' 5718 This is the same as `%b', but include the file suffix (text after 5719 the last period). 5720 5721`%d' 5722 Marks the argument containing or following the `%d' as a temporary 5723 file name, so that that file will be deleted if GCC exits 5724 successfully. Unlike `%g', this contributes no text to the 5725 argument. 5726 5727`%gSUFFIX' 5728 Substitute a file name that has suffix SUFFIX and is chosen once 5729 per compilation, and mark the argument in the same way as `%d'. 5730 To reduce exposure to denial-of-service attacks, the file name is 5731 now chosen in a way that is hard to predict even when previously 5732 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 5733 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 5734 matches the regexp `[.A-Za-z]*' or the special string `%O', which 5735 is treated exactly as if `%O' had been preprocessed. Previously, 5736 `%g' was simply substituted with a file name chosen once per 5737 compilation, without regard to any appended suffix (which was 5738 therefore treated just like ordinary text), making such attacks 5739 more likely to succeed. 5740 5741`%uSUFFIX' 5742 Like `%g', but generates a new temporary file name even if 5743 `%uSUFFIX' was already seen. 5744 5745`%USUFFIX' 5746 Substitutes the last file name generated with `%uSUFFIX', 5747 generating a new one if there is no such last file name. In the 5748 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 5749 they don't share the same suffix _space_, so `%g.s ... %U.s ... 5750 %g.s ... %U.s' would involve the generation of two distinct file 5751 names, one for each `%g.s' and another for each `%U.s'. 5752 Previously, `%U' was simply substituted with a file name chosen 5753 for the previous `%u', without regard to any appended suffix. 5754 5755`%jSUFFIX' 5756 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 5757 writable, and if save-temps is off; otherwise, substitute the name 5758 of a temporary file, just like `%u'. This temporary file is not 5759 meant for communication between processes, but rather as a junk 5760 disposal mechanism. 5761 5762`%|SUFFIX' 5763`%mSUFFIX' 5764 Like `%g', except if `-pipe' is in effect. In that case `%|' 5765 substitutes a single dash and `%m' substitutes nothing at all. 5766 These are the two most common ways to instruct a program that it 5767 should read from standard input or write to standard output. If 5768 you need something more elaborate you can use an `%{pipe:`X'}' 5769 construct: see for example `f/lang-specs.h'. 5770 5771`%.SUFFIX' 5772 Substitutes .SUFFIX for the suffixes of a matched switch's args 5773 when it is subsequently output with `%*'. SUFFIX is terminated by 5774 the next space or %. 5775 5776`%w' 5777 Marks the argument containing or following the `%w' as the 5778 designated output file of this compilation. This puts the argument 5779 into the sequence of arguments that `%o' will substitute later. 5780 5781`%o' 5782 Substitutes the names of all the output files, with spaces 5783 automatically placed around them. You should write spaces around 5784 the `%o' as well or the results are undefined. `%o' is for use in 5785 the specs for running the linker. Input files whose names have no 5786 recognized suffix are not compiled at all, but they are included 5787 among the output files, so they will be linked. 5788 5789`%O' 5790 Substitutes the suffix for object files. Note that this is 5791 handled specially when it immediately follows `%g, %u, or %U', 5792 because of the need for those to form complete file names. The 5793 handling is such that `%O' is treated exactly as if it had already 5794 been substituted, except that `%g, %u, and %U' do not currently 5795 support additional SUFFIX characters following `%O' as they would 5796 following, for example, `.o'. 5797 5798`%p' 5799 Substitutes the standard macro predefinitions for the current 5800 target machine. Use this when running `cpp'. 5801 5802`%P' 5803 Like `%p', but puts `__' before and after the name of each 5804 predefined macro, except for macros that start with `__' or with 5805 `_L', where L is an uppercase letter. This is for ISO C. 5806 5807`%I' 5808 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 5809 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), and `-isystem' (made 5810 from `COMPILER_PATH' and `-B' options) as necessary. 5811 5812`%s' 5813 Current argument is the name of a library or startup file of some 5814 sort. Search for that file in a standard list of directories and 5815 substitute the full name found. 5816 5817`%eSTR' 5818 Print STR as an error message. STR is terminated by a newline. 5819 Use this when inconsistent options are detected. 5820 5821`%(NAME)' 5822 Substitute the contents of spec string NAME at this point. 5823 5824`%[NAME]' 5825 Like `%(...)' but put `__' around `-D' arguments. 5826 5827`%x{OPTION}' 5828 Accumulate an option for `%X'. 5829 5830`%X' 5831 Output the accumulated linker options specified by `-Wl' or a `%x' 5832 spec string. 5833 5834`%Y' 5835 Output the accumulated assembler options specified by `-Wa'. 5836 5837`%Z' 5838 Output the accumulated preprocessor options specified by `-Wp'. 5839 5840`%a' 5841 Process the `asm' spec. This is used to compute the switches to 5842 be passed to the assembler. 5843 5844`%A' 5845 Process the `asm_final' spec. This is a spec string for passing 5846 switches to an assembler post-processor, if such a program is 5847 needed. 5848 5849`%l' 5850 Process the `link' spec. This is the spec for computing the 5851 command line passed to the linker. Typically it will make use of 5852 the `%L %G %S %D and %E' sequences. 5853 5854`%D' 5855 Dump out a `-L' option for each directory that GCC believes might 5856 contain startup files. If the target supports multilibs then the 5857 current multilib directory will be prepended to each of these 5858 paths. 5859 5860`%M' 5861 Output the multilib directory with directory separators replaced 5862 with `_'. If multilib directories are not set, or the multilib 5863 directory is `.' then this option emits nothing. 5864 5865`%L' 5866 Process the `lib' spec. This is a spec string for deciding which 5867 libraries should be included on the command line to the linker. 5868 5869`%G' 5870 Process the `libgcc' spec. This is a spec string for deciding 5871 which GCC support library should be included on the command line 5872 to the linker. 5873 5874`%S' 5875 Process the `startfile' spec. This is a spec for deciding which 5876 object files should be the first ones passed to the linker. 5877 Typically this might be a file named `crt0.o'. 5878 5879`%E' 5880 Process the `endfile' spec. This is a spec string that specifies 5881 the last object files that will be passed to the linker. 5882 5883`%C' 5884 Process the `cpp' spec. This is used to construct the arguments 5885 to be passed to the C preprocessor. 5886 5887`%c' 5888 Process the `signed_char' spec. This is intended to be used to 5889 tell cpp whether a char is signed. It typically has the 5890 definition: 5891 %{funsigned-char:-D__CHAR_UNSIGNED__} 5892 5893`%1' 5894 Process the `cc1' spec. This is used to construct the options to 5895 be passed to the actual C compiler (`cc1'). 5896 5897`%2' 5898 Process the `cc1plus' spec. This is used to construct the options 5899 to be passed to the actual C++ compiler (`cc1plus'). 5900 5901`%*' 5902 Substitute the variable part of a matched option. See below. 5903 Note that each comma in the substituted string is replaced by a 5904 single space. 5905 5906`%<`S'' 5907 Remove all occurrences of `-S' from the command line. Note--this 5908 command is position dependent. `%' commands in the spec string 5909 before this one will see `-S', `%' commands in the spec string 5910 after this one will not. 5911 5912`%:FUNCTION(ARGS)' 5913 Call the named function FUNCTION, passing it ARGS. ARGS is first 5914 processed as a nested spec string, then split into an argument 5915 vector in the usual fashion. The function returns a string which 5916 is processed as if it had appeared literally as part of the 5917 current spec. 5918 5919 The following built-in spec functions are provided: 5920 5921 ``if-exists'' 5922 The `if-exists' spec function takes one argument, an absolute 5923 pathname to a file. If the file exists, `if-exists' returns 5924 the pathname. Here is a small example of its usage: 5925 5926 *startfile: 5927 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 5928 5929 ``if-exists-else'' 5930 The `if-exists-else' spec function is similar to the 5931 `if-exists' spec function, except that it takes two 5932 arguments. The first argument is an absolute pathname to a 5933 file. If the file exists, `if-exists-else' returns the 5934 pathname. If it does not exist, it returns the second 5935 argument. This way, `if-exists-else' can be used to select 5936 one file or another, based on the existence of the first. 5937 Here is a small example of its usage: 5938 5939 *startfile: 5940 crt0%O%s %:if-exists(crti%O%s) \ 5941 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 5942 5943`%{`S'}' 5944 Substitutes the `-S' switch, if that switch was given to GCC. If 5945 that switch was not specified, this substitutes nothing. Note that 5946 the leading dash is omitted when specifying this option, and it is 5947 automatically inserted if the substitution is performed. Thus the 5948 spec string `%{foo}' would match the command-line option `-foo' 5949 and would output the command line option `-foo'. 5950 5951`%W{`S'}' 5952 Like %{`S'} but mark last argument supplied within as a file to be 5953 deleted on failure. 5954 5955`%{`S'*}' 5956 Substitutes all the switches specified to GCC whose names start 5957 with `-S', but which also take an argument. This is used for 5958 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 5959 being one switch whose names starts with `o'. %{o*} would 5960 substitute this text, including the space. Thus two arguments 5961 would be generated. 5962 5963`%{`S'*&`T'*}' 5964 Like %{`S'*}, but preserve order of `S' and `T' options (the order 5965 of `S' and `T' in the spec is not significant). There can be any 5966 number of ampersand-separated variables; for each the wild card is 5967 optional. Useful for CPP as `%{D*&U*&A*}'. 5968 5969`%{`S':`X'}' 5970 Substitutes `X', if the `-S' switch was given to GCC. 5971 5972`%{!`S':`X'}' 5973 Substitutes `X', if the `-S' switch was _not_ given to GCC. 5974 5975`%{`S'*:`X'}' 5976 Substitutes `X' if one or more switches whose names start with 5977 `-S' are specified to GCC. Normally `X' is substituted only once, 5978 no matter how many such switches appeared. However, if `%*' 5979 appears somewhere in `X', then `X' will be substituted once for 5980 each matching switch, with the `%*' replaced by the part of that 5981 switch that matched the `*'. 5982 5983`%{.`S':`X'}' 5984 Substitutes `X', if processing a file with suffix `S'. 5985 5986`%{!.`S':`X'}' 5987 Substitutes `X', if _not_ processing a file with suffix `S'. 5988 5989`%{`S'|`P':`X'}' 5990 Substitutes `X' if either `-S' or `-P' was given to GCC. This may 5991 be combined with `!', `.', and `*' sequences as well, although 5992 they have a stronger binding than the `|'. If `%*' appears in 5993 `X', all of the alternatives must be starred, and only the first 5994 matching alternative is substituted. 5995 5996 For example, a spec string like this: 5997 5998 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 5999 6000 will output the following command-line options from the following 6001 input command-line options: 6002 6003 fred.c -foo -baz 6004 jim.d -bar -boggle 6005 -d fred.c -foo -baz -boggle 6006 -d jim.d -bar -baz -boggle 6007 6008`%{S:X; T:Y; :D}' 6009 If `S' was given to GCC, substitutes `X'; else if `T' was given to 6010 GCC, substitutes `Y'; else substitutes `D'. There can be as many 6011 clauses as you need. This may be combined with `.', `!', `|', and 6012 `*' as needed. 6013 6014 6015 The conditional text `X' in a %{`S':`X'} or similar construct may 6016contain other nested `%' constructs or spaces, or even newlines. They 6017are processed as usual, as described above. Trailing white space in 6018`X' is ignored. White space may also appear anywhere on the left side 6019of the colon in these constructs, except between `.' or `*' and the 6020corresponding word. 6021 6022 The `-O', `-f', `-m', and `-W' switches are handled specifically in 6023these constructs. If another value of `-O' or the negated form of a 6024`-f', `-m', or `-W' switch is found later in the command line, the 6025earlier switch value is ignored, except with {`S'*} where `S' is just 6026one letter, which passes all matching options. 6027 6028 The character `|' at the beginning of the predicate text is used to 6029indicate that a command should be piped to the following command, but 6030only if `-pipe' is specified. 6031 6032 It is built into GCC which switches take arguments and which do not. 6033(You might think it would be useful to generalize this to allow each 6034compiler's spec to say which switches take arguments. But this cannot 6035be done in a consistent fashion. GCC cannot even decide which input 6036files have been specified without knowing which switches take arguments, 6037and it must know which input files to compile in order to tell which 6038compilers to run). 6039 6040 GCC also knows implicitly that arguments starting in `-l' are to be 6041treated as compiler output files, and passed to the linker in their 6042proper position among the other output files. 6043 6044 6045File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 6046 60473.16 Specifying Target Machine and Compiler Version 6048=================================================== 6049 6050The usual way to run GCC is to run the executable called `gcc', or 6051`<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to 6052run a version other than the one that was installed last. Sometimes 6053this is inconvenient, so GCC provides options that will switch to 6054another cross-compiler or version. 6055 6056`-b MACHINE' 6057 The argument MACHINE specifies the target machine for compilation. 6058 6059 The value to use for MACHINE is the same as was specified as the 6060 machine type when configuring GCC as a cross-compiler. For 6061 example, if a cross-compiler was configured with `configure 6062 i386v', meaning to compile for an 80386 running System V, then you 6063 would specify `-b i386v' to run that cross compiler. 6064 6065`-V VERSION' 6066 The argument VERSION specifies which version of GCC to run. This 6067 is useful when multiple versions are installed. For example, 6068 VERSION might be `2.0', meaning to run GCC version 2.0. 6069 6070 The `-V' and `-b' options work by running the 6071`<machine>-gcc-<version>' executable, so there's no real reason to use 6072them if you can just run that directly. 6073 6074 6075File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 6076 60773.17 Hardware Models and Configurations 6078======================================= 6079 6080Earlier we discussed the standard option `-b' which chooses among 6081different installed compilers for completely different target machines, 6082such as VAX vs. 68000 vs. 80386. 6083 6084 In addition, each of these target machine types can have its own 6085special options, starting with `-m', to choose among various hardware 6086models or configurations--for example, 68010 vs 68020, floating 6087coprocessor or none. A single installed version of the compiler can 6088compile for any model or configuration, according to the options 6089specified. 6090 6091 Some configurations of the compiler also support additional special 6092options, usually for compatibility with other compilers on the same 6093platform. 6094 6095 These options are defined by the macro `TARGET_SWITCHES' in the 6096machine description. The default for the options is also defined by 6097that macro, which enables you to change the defaults. 6098 6099* Menu: 6100 6101* M680x0 Options:: 6102* M68hc1x Options:: 6103* VAX Options:: 6104* SPARC Options:: 6105* ARM Options:: 6106* MN10300 Options:: 6107* M32R/D Options:: 6108* RS/6000 and PowerPC Options:: 6109* Darwin Options:: 6110* MIPS Options:: 6111* i386 and x86-64 Options:: 6112* HPPA Options:: 6113* Intel 960 Options:: 6114* DEC Alpha Options:: 6115* DEC Alpha/VMS Options:: 6116* H8/300 Options:: 6117* SH Options:: 6118* System V Options:: 6119* TMS320C3x/C4x Options:: 6120* V850 Options:: 6121* ARC Options:: 6122* NS32K Options:: 6123* AVR Options:: 6124* MCore Options:: 6125* IA-64 Options:: 6126* D30V Options:: 6127* S/390 and zSeries Options:: 6128* CRIS Options:: 6129* MMIX Options:: 6130* PDP-11 Options:: 6131* Xstormy16 Options:: 6132* Xtensa Options:: 6133* FRV Options:: 6134 6135 6136File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Up: Submodel Options 6137 61383.17.1 M680x0 Options 6139--------------------- 6140 6141These are the `-m' options defined for the 68000 series. The default 6142values for these options depends on which style of 68000 was selected 6143when the compiler was configured; the defaults for the most common 6144choices are given below. 6145 6146`-m68000' 6147`-mc68000' 6148 Generate output for a 68000. This is the default when the 6149 compiler is configured for 68000-based systems. 6150 6151 Use this option for microcontrollers with a 68000 or EC000 core, 6152 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 6153 6154`-m68020' 6155`-mc68020' 6156 Generate output for a 68020. This is the default when the 6157 compiler is configured for 68020-based systems. 6158 6159`-m68881' 6160 Generate output containing 68881 instructions for floating point. 6161 This is the default for most 68020 systems unless `--nfp' was 6162 specified when the compiler was configured. 6163 6164`-m68030' 6165 Generate output for a 68030. This is the default when the 6166 compiler is configured for 68030-based systems. 6167 6168`-m68040' 6169 Generate output for a 68040. This is the default when the 6170 compiler is configured for 68040-based systems. 6171 6172 This option inhibits the use of 68881/68882 instructions that have 6173 to be emulated by software on the 68040. Use this option if your 6174 68040 does not have code to emulate those instructions. 6175 6176`-m68060' 6177 Generate output for a 68060. This is the default when the 6178 compiler is configured for 68060-based systems. 6179 6180 This option inhibits the use of 68020 and 68881/68882 instructions 6181 that have to be emulated by software on the 68060. Use this 6182 option if your 68060 does not have code to emulate those 6183 instructions. 6184 6185`-mcpu32' 6186 Generate output for a CPU32. This is the default when the 6187 compiler is configured for CPU32-based systems. 6188 6189 Use this option for microcontrollers with a CPU32 or CPU32+ core, 6190 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 6191 68341, 68349 and 68360. 6192 6193`-m5200' 6194 Generate output for a 520X "coldfire" family cpu. This is the 6195 default when the compiler is configured for 520X-based systems. 6196 6197 Use this option for microcontroller with a 5200 core, including 6198 the MCF5202, MCF5203, MCF5204 and MCF5202. 6199 6200`-m68020-40' 6201 Generate output for a 68040, without using any of the new 6202 instructions. This results in code which can run relatively 6203 efficiently on either a 68020/68881 or a 68030 or a 68040. The 6204 generated code does use the 68881 instructions that are emulated 6205 on the 68040. 6206 6207`-m68020-60' 6208 Generate output for a 68060, without using any of the new 6209 instructions. This results in code which can run relatively 6210 efficiently on either a 68020/68881 or a 68030 or a 68040. The 6211 generated code does use the 68881 instructions that are emulated 6212 on the 68060. 6213 6214`-msoft-float' 6215 Generate output containing library calls for floating point. 6216 *Warning:* the requisite libraries are not available for all m68k 6217 targets. Normally the facilities of the machine's usual C 6218 compiler are used, but this can't be done directly in 6219 cross-compilation. You must make your own arrangements to provide 6220 suitable library functions for cross-compilation. The embedded 6221 targets `m68k-*-aout' and `m68k-*-coff' do provide software 6222 floating point support. 6223 6224`-mshort' 6225 Consider type `int' to be 16 bits wide, like `short int'. 6226 6227`-mnobitfield' 6228 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 6229 and `-m5200' options imply `-mnobitfield'. 6230 6231`-mbitfield' 6232 Do use the bit-field instructions. The `-m68020' option implies 6233 `-mbitfield'. This is the default if you use a configuration 6234 designed for a 68020. 6235 6236`-mrtd' 6237 Use a different function-calling convention, in which functions 6238 that take a fixed number of arguments return with the `rtd' 6239 instruction, which pops their arguments while returning. This 6240 saves one instruction in the caller since there is no need to pop 6241 the arguments there. 6242 6243 This calling convention is incompatible with the one normally used 6244 on Unix, so you cannot use it if you need to call libraries 6245 compiled with the Unix compiler. 6246 6247 Also, you must provide function prototypes for all functions that 6248 take variable numbers of arguments (including `printf'); otherwise 6249 incorrect code will be generated for calls to those functions. 6250 6251 In addition, seriously incorrect code will result if you call a 6252 function with too many arguments. (Normally, extra arguments are 6253 harmlessly ignored.) 6254 6255 The `rtd' instruction is supported by the 68010, 68020, 68030, 6256 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 6257 6258`-malign-int' 6259`-mno-align-int' 6260 Control whether GCC aligns `int', `long', `long long', `float', 6261 `double', and `long double' variables on a 32-bit boundary 6262 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 6263 variables on 32-bit boundaries produces code that runs somewhat 6264 faster on processors with 32-bit busses at the expense of more 6265 memory. 6266 6267 *Warning:* if you use the `-malign-int' switch, GCC will align 6268 structures containing the above types differently than most 6269 published application binary interface specifications for the m68k. 6270 6271`-mpcrel' 6272 Use the pc-relative addressing mode of the 68000 directly, instead 6273 of using a global offset table. At present, this option implies 6274 `-fpic', allowing at most a 16-bit offset for pc-relative 6275 addressing. `-fPIC' is not presently supported with `-mpcrel', 6276 though this could be supported for 68020 and higher processors. 6277 6278`-mno-strict-align' 6279`-mstrict-align' 6280 Do not (do) assume that unaligned memory references will be 6281 handled by the system. 6282 6283`-msep-data' 6284 Generate code that allows the data segment to be located in a 6285 different area of memory from the text segment. This allows for 6286 execute in place in an environment without virtual memory 6287 management. This option implies -fPIC. 6288 6289`-mno-sep-data' 6290 Generate code that assumes that the data segment follows the text 6291 segment. This is the default. 6292 6293`-mid-shared-library' 6294 Generate code that supports shared libraries via the library ID 6295 method. This allows for execute in place and shared libraries in 6296 an environment without virtual memory management. This option 6297 implies -fPIC. 6298 6299`-mno-id-shared-library' 6300 Generate code that doesn't assume ID based shared libraries are 6301 being used. This is the default. 6302 6303`-mshared-library-id=n' 6304 Specified the identification number of the ID based shared library 6305 being compiled. Specifying a value of 0 will generate more 6306 compact code, specifying other values will force the allocation of 6307 that number to the current library but is no more space or time 6308 efficient than omitting this option. 6309 6310 6311 6312File: gcc.info, Node: M68hc1x Options, Next: VAX Options, Prev: M680x0 Options, Up: Submodel Options 6313 63143.17.2 M68hc1x Options 6315---------------------- 6316 6317These are the `-m' options defined for the 68hc11 and 68hc12 6318microcontrollers. The default values for these options depends on 6319which style of microcontroller was selected when the compiler was 6320configured; the defaults for the most common choices are given below. 6321 6322`-m6811' 6323`-m68hc11' 6324 Generate output for a 68HC11. This is the default when the 6325 compiler is configured for 68HC11-based systems. 6326 6327`-m6812' 6328`-m68hc12' 6329 Generate output for a 68HC12. This is the default when the 6330 compiler is configured for 68HC12-based systems. 6331 6332`-m68S12' 6333`-m68hcs12' 6334 Generate output for a 68HCS12. 6335 6336`-mauto-incdec' 6337 Enable the use of 68HC12 pre and post auto-increment and 6338 auto-decrement addressing modes. 6339 6340`-minmax' 6341`-nominmax' 6342 Enable the use of 68HC12 min and max instructions. 6343 6344`-mlong-calls' 6345`-mno-long-calls' 6346 Treat all calls as being far away (near). If calls are assumed to 6347 be far away, the compiler will use the `call' instruction to call 6348 a function and the `rtc' instruction for returning. 6349 6350`-mshort' 6351 Consider type `int' to be 16 bits wide, like `short int'. 6352 6353`-msoft-reg-count=COUNT' 6354 Specify the number of pseudo-soft registers which are used for the 6355 code generation. The maximum number is 32. Using more pseudo-soft 6356 register may or may not result in better code depending on the 6357 program. The default is 4 for 68HC11 and 2 for 68HC12. 6358 6359 6360 6361File: gcc.info, Node: VAX Options, Next: SPARC Options, Prev: M68hc1x Options, Up: Submodel Options 6362 63633.17.3 VAX Options 6364------------------ 6365 6366These `-m' options are defined for the VAX: 6367 6368`-munix' 6369 Do not output certain jump instructions (`aobleq' and so on) that 6370 the Unix assembler for the VAX cannot handle across long ranges. 6371 6372`-mgnu' 6373 Do output those jump instructions, on the assumption that you will 6374 assemble with the GNU assembler. 6375 6376`-mg' 6377 Output code for g-format floating point numbers instead of 6378 d-format. 6379 6380 6381File: gcc.info, Node: SPARC Options, Next: ARM Options, Prev: VAX Options, Up: Submodel Options 6382 63833.17.4 SPARC Options 6384-------------------- 6385 6386These `-m' options are supported on the SPARC: 6387 6388`-mno-app-regs' 6389`-mapp-regs' 6390 Specify `-mapp-regs' to generate output using the global registers 6391 2 through 4, which the SPARC SVR4 ABI reserves for applications. 6392 This is the default. 6393 6394 To be fully SVR4 ABI compliant at the cost of some performance 6395 loss, specify `-mno-app-regs'. You should compile libraries and 6396 system software with this option. 6397 6398`-mfpu' 6399`-mhard-float' 6400 Generate output containing floating point instructions. This is 6401 the default. 6402 6403`-mno-fpu' 6404`-msoft-float' 6405 Generate output containing library calls for floating point. 6406 *Warning:* the requisite libraries are not available for all SPARC 6407 targets. Normally the facilities of the machine's usual C 6408 compiler are used, but this cannot be done directly in 6409 cross-compilation. You must make your own arrangements to provide 6410 suitable library functions for cross-compilation. The embedded 6411 targets `sparc-*-aout' and `sparclite-*-*' do provide software 6412 floating point support. 6413 6414 `-msoft-float' changes the calling convention in the output file; 6415 therefore, it is only useful if you compile _all_ of a program with 6416 this option. In particular, you need to compile `libgcc.a', the 6417 library that comes with GCC, with `-msoft-float' in order for this 6418 to work. 6419 6420`-mhard-quad-float' 6421 Generate output containing quad-word (long double) floating point 6422 instructions. 6423 6424`-msoft-quad-float' 6425 Generate output containing library calls for quad-word (long 6426 double) floating point instructions. The functions called are 6427 those specified in the SPARC ABI. This is the default. 6428 6429 As of this writing, there are no SPARC implementations that have 6430 hardware support for the quad-word floating point instructions. 6431 They all invoke a trap handler for one of these instructions, and 6432 then the trap handler emulates the effect of the instruction. 6433 Because of the trap handler overhead, this is much slower than 6434 calling the ABI library routines. Thus the `-msoft-quad-float' 6435 option is the default. 6436 6437`-mno-flat' 6438`-mflat' 6439 With `-mflat', the compiler does not generate save/restore 6440 instructions and will use a "flat" or single register window 6441 calling convention. This model uses %i7 as the frame pointer and 6442 is compatible with the normal register window model. Code from 6443 either may be intermixed. The local registers and the input 6444 registers (0-5) are still treated as "call saved" registers and 6445 will be saved on the stack as necessary. 6446 6447 With `-mno-flat' (the default), the compiler emits save/restore 6448 instructions (except for leaf functions) and is the normal mode of 6449 operation. 6450 6451 These options are deprecated and will be deleted in a future GCC 6452 release. 6453 6454`-mno-unaligned-doubles' 6455`-munaligned-doubles' 6456 Assume that doubles have 8 byte alignment. This is the default. 6457 6458 With `-munaligned-doubles', GCC assumes that doubles have 8 byte 6459 alignment only if they are contained in another type, or if they 6460 have an absolute address. Otherwise, it assumes they have 4 byte 6461 alignment. Specifying this option avoids some rare compatibility 6462 problems with code generated by other compilers. It is not the 6463 default because it results in a performance loss, especially for 6464 floating point code. 6465 6466`-mno-faster-structs' 6467`-mfaster-structs' 6468 With `-mfaster-structs', the compiler assumes that structures 6469 should have 8 byte alignment. This enables the use of pairs of 6470 `ldd' and `std' instructions for copies in structure assignment, 6471 in place of twice as many `ld' and `st' pairs. However, the use 6472 of this changed alignment directly violates the SPARC ABI. Thus, 6473 it's intended only for use on targets where the developer 6474 acknowledges that their resulting code will not be directly in 6475 line with the rules of the ABI. 6476 6477`-mimpure-text' 6478 `-mimpure-text', used in addition to `-shared', tells the compiler 6479 to not pass `-z text' to the linker when linking a shared object. 6480 Using this option, you can link position-dependent code into a 6481 shared object. 6482 6483 `-mimpure-text' suppresses the "relocations remain against 6484 allocatable but non-writable sections" linker error message. 6485 However, the necessary relocations will trigger copy-on-write, and 6486 the shared object is not actually shared across processes. 6487 Instead of using `-mimpure-text', you should compile all source 6488 code with `-fpic' or `-fPIC'. 6489 6490 This option is only available on SunOS and Solaris. 6491 6492`-mv8' 6493`-msparclite' 6494 These two options select variations on the SPARC architecture. 6495 These options are deprecated and will be deleted in a future GCC 6496 release. They have been replaced with `-mcpu=xxx'. 6497 6498`-mcypress' 6499`-msupersparc' 6500`-mf930' 6501`-mf934' 6502 These four options select the processor for which the code is 6503 optimized. These options are deprecated and will be deleted in a 6504 future GCC release. They have been replaced with `-mcpu=xxx'. 6505 6506`-mcpu=CPU_TYPE' 6507 Set the instruction set, register set, and instruction scheduling 6508 parameters for machine type CPU_TYPE. Supported values for 6509 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite', 6510 `f930', `f934', `hypersparc', `sparclite86x', `sparclet', 6511 `tsc701', `v9', `ultrasparc', and `ultrasparc3'. 6512 6513 Default instruction scheduling parameters are used for values that 6514 select an architecture and not an implementation. These are `v7', 6515 `v8', `sparclite', `sparclet', `v9'. 6516 6517 Here is a list of each supported architecture and their supported 6518 implementations. 6519 6520 v7: cypress 6521 v8: supersparc, hypersparc 6522 sparclite: f930, f934, sparclite86x 6523 sparclet: tsc701 6524 v9: ultrasparc, ultrasparc3 6525 6526 By default (unless configured otherwise), GCC generates code for 6527 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 6528 the compiler additionally optimizes it for the Cypress CY7C602 6529 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 6530 also appropriate for the older SPARCStation 1, 2, IPX etc. 6531 6532 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 6533 architecture. The only difference from V7 code is that the 6534 compiler emits the integer multiply and integer divide 6535 instructions which exist in SPARC-V8 but not in SPARC-V7. With 6536 `-mcpu=supersparc', the compiler additionally optimizes it for the 6537 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 6538 series. 6539 6540 With `-mcpu=sparclite', GCC generates code for the SPARClite 6541 variant of the SPARC architecture. This adds the integer 6542 multiply, integer divide step and scan (`ffs') instructions which 6543 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 6544 compiler additionally optimizes it for the Fujitsu MB86930 chip, 6545 which is the original SPARClite, with no FPU. With `-mcpu=f934', 6546 the compiler additionally optimizes it for the Fujitsu MB86934 6547 chip, which is the more recent SPARClite with FPU. 6548 6549 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 6550 of the SPARC architecture. This adds the integer multiply, 6551 multiply/accumulate, integer divide step and scan (`ffs') 6552 instructions which exist in SPARClet but not in SPARC-V7. With 6553 `-mcpu=tsc701', the compiler additionally optimizes it for the 6554 TEMIC SPARClet chip. 6555 6556 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 6557 architecture. This adds 64-bit integer and floating-point move 6558 instructions, 3 additional floating-point condition code registers 6559 and conditional move instructions. With `-mcpu=ultrasparc', the 6560 compiler additionally optimizes it for the Sun UltraSPARC I/II 6561 chips. With `-mcpu=ultrasparc3', the compiler additionally 6562 optimizes it for the Sun UltraSPARC III chip. 6563 6564`-mtune=CPU_TYPE' 6565 Set the instruction scheduling parameters for machine type 6566 CPU_TYPE, but do not set the instruction set or register set that 6567 the option `-mcpu=CPU_TYPE' would. 6568 6569 The same values for `-mcpu=CPU_TYPE' can be used for 6570 `-mtune=CPU_TYPE', but the only useful values are those that 6571 select a particular cpu implementation. Those are `cypress', 6572 `supersparc', `hypersparc', `f930', `f934', `sparclite86x', 6573 `tsc701', `ultrasparc', and `ultrasparc3'. 6574 6575`-mv8plus' 6576`-mno-v8plus' 6577 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 6578 difference from the V8 ABI is that the global and out registers are 6579 considered 64-bit wide. This is enabled by default on Solaris in 6580 32-bit mode for all SPARC-V9 processors. 6581 6582`-mvis' 6583`-mno-vis' 6584 With `-mvis', GCC generates code that takes advantage of the 6585 UltraSPARC Visual Instruction Set extensions. The default is 6586 `-mno-vis'. 6587 6588 These `-m' options are supported in addition to the above on SPARC-V9 6589processors in 64-bit environments: 6590 6591`-mlittle-endian' 6592 Generate code for a processor running in little-endian mode. It is 6593 only available for a few configurations and most notably not on 6594 Solaris. 6595 6596`-m32' 6597`-m64' 6598 Generate code for a 32-bit or 64-bit environment. The 32-bit 6599 environment sets int, long and pointer to 32 bits. The 64-bit 6600 environment sets int to 32 bits and long and pointer to 64 bits. 6601 6602`-mcmodel=medlow' 6603 Generate code for the Medium/Low code model: 64-bit addresses, 6604 programs must be linked in the low 32 bits of memory. Programs 6605 can be statically or dynamically linked. 6606 6607`-mcmodel=medmid' 6608 Generate code for the Medium/Middle code model: 64-bit addresses, 6609 programs must be linked in the low 44 bits of memory, the text and 6610 data segments must be less than 2GB in size and the data segment 6611 must be located within 2GB of the text segment. 6612 6613`-mcmodel=medany' 6614 Generate code for the Medium/Anywhere code model: 64-bit 6615 addresses, programs may be linked anywhere in memory, the text and 6616 data segments must be less than 2GB in size and the data segment 6617 must be located within 2GB of the text segment. 6618 6619`-mcmodel=embmedany' 6620 Generate code for the Medium/Anywhere code model for embedded 6621 systems: 64-bit addresses, the text and data segments must be less 6622 than 2GB in size, both starting anywhere in memory (determined at 6623 link time). The global register %g4 points to the base of the 6624 data segment. Programs are statically linked and PIC is not 6625 supported. 6626 6627`-mstack-bias' 6628`-mno-stack-bias' 6629 With `-mstack-bias', GCC assumes that the stack pointer, and frame 6630 pointer if present, are offset by -2047 which must be added back 6631 when making stack frame references. This is the default in 64-bit 6632 mode. Otherwise, assume no such offset is present. 6633 6634 These switches are supported in addition to the above on Solaris: 6635 6636`-threads' 6637 Add support for multithreading using the Solaris threads library. 6638 This option sets flags for both the preprocessor and linker. This 6639 option does not affect the thread safety of object code produced 6640 by the compiler or that of libraries supplied with it. 6641 6642`-pthreads' 6643 Add support for multithreading using the POSIX threads library. 6644 This option sets flags for both the preprocessor and linker. This 6645 option does not affect the thread safety of object code produced 6646 by the compiler or that of libraries supplied with it. 6647 6648 6649File: gcc.info, Node: ARM Options, Next: MN10300 Options, Prev: SPARC Options, Up: Submodel Options 6650 66513.17.5 ARM Options 6652------------------ 6653 6654These `-m' options are defined for Advanced RISC Machines (ARM) 6655architectures: 6656 6657`-mapcs-frame' 6658 Generate a stack frame that is compliant with the ARM Procedure 6659 Call Standard for all functions, even if this is not strictly 6660 necessary for correct execution of the code. Specifying 6661 `-fomit-frame-pointer' with this option will cause the stack 6662 frames not to be generated for leaf functions. The default is 6663 `-mno-apcs-frame'. 6664 6665`-mapcs' 6666 This is a synonym for `-mapcs-frame'. 6667 6668`-mapcs-26' 6669 Generate code for a processor running with a 26-bit program 6670 counter, and conforming to the function calling standards for the 6671 APCS 26-bit option. 6672 6673 This option is deprecated. Future releases of the GCC will only 6674 support generating code that runs in apcs-32 mode. 6675 6676`-mapcs-32' 6677 Generate code for a processor running with a 32-bit program 6678 counter, and conforming to the function calling standards for the 6679 APCS 32-bit option. 6680 6681 This flag is deprecated. Future releases of GCC will make this 6682 flag unconditional. 6683 6684`-mthumb-interwork' 6685 Generate code which supports calling between the ARM and Thumb 6686 instruction sets. Without this option the two instruction sets 6687 cannot be reliably used inside one program. The default is 6688 `-mno-thumb-interwork', since slightly larger code is generated 6689 when `-mthumb-interwork' is specified. 6690 6691`-mno-sched-prolog' 6692 Prevent the reordering of instructions in the function prolog, or 6693 the merging of those instruction with the instructions in the 6694 function's body. This means that all functions will start with a 6695 recognizable set of instructions (or in fact one of a choice from 6696 a small set of different function prologues), and this information 6697 can be used to locate the start if functions inside an executable 6698 piece of code. The default is `-msched-prolog'. 6699 6700`-mhard-float' 6701 Generate output containing floating point instructions. This is 6702 the default. 6703 6704`-msoft-float' 6705 Generate output containing library calls for floating point. 6706 *Warning:* the requisite libraries are not available for all ARM 6707 targets. Normally the facilities of the machine's usual C 6708 compiler are used, but this cannot be done directly in 6709 cross-compilation. You must make your own arrangements to provide 6710 suitable library functions for cross-compilation. 6711 6712 `-msoft-float' changes the calling convention in the output file; 6713 therefore, it is only useful if you compile _all_ of a program with 6714 this option. In particular, you need to compile `libgcc.a', the 6715 library that comes with GCC, with `-msoft-float' in order for this 6716 to work. 6717 6718`-mlittle-endian' 6719 Generate code for a processor running in little-endian mode. This 6720 is the default for all standard configurations. 6721 6722`-mbig-endian' 6723 Generate code for a processor running in big-endian mode; the 6724 default is to compile code for a little-endian processor. 6725 6726`-mwords-little-endian' 6727 This option only applies when generating code for big-endian 6728 processors. Generate code for a little-endian word order but a 6729 big-endian byte order. That is, a byte order of the form 6730 `32107654'. Note: this option should only be used if you require 6731 compatibility with code for big-endian ARM processors generated by 6732 versions of the compiler prior to 2.8. 6733 6734`-malignment-traps' 6735 Generate code that will not trap if the MMU has alignment traps 6736 enabled. On ARM architectures prior to ARMv4, there were no 6737 instructions to access half-word objects stored in memory. 6738 However, when reading from memory a feature of the ARM 6739 architecture allows a word load to be used, even if the address is 6740 unaligned, and the processor core will rotate the data as it is 6741 being loaded. This option tells the compiler that such misaligned 6742 accesses will cause a MMU trap and that it should instead 6743 synthesize the access as a series of byte accesses. The compiler 6744 can still use word accesses to load half-word data if it knows 6745 that the address is aligned to a word boundary. 6746 6747 This option has no effect when compiling for ARM architecture 4 or 6748 later, since these processors have instructions to directly access 6749 half-word objects in memory. 6750 6751`-mno-alignment-traps' 6752 Generate code that assumes that the MMU will not trap unaligned 6753 accesses. This produces better code when the target instruction 6754 set does not have half-word memory operations (i.e. 6755 implementations prior to ARMv4). 6756 6757 Note that you cannot use this option to access unaligned word 6758 objects, since the processor will only fetch one 32-bit aligned 6759 object from memory. 6760 6761 The default setting is `-malignment-traps', since this produces 6762 code that will also run on processors implementing ARM architecture 6763 version 6 or later. 6764 6765 This option is deprecated and will be removed in the next release 6766 of GCC. 6767 6768`-mcpu=NAME' 6769 This specifies the name of the target ARM processor. GCC uses 6770 this name to determine what kind of instructions it can emit when 6771 generating assembly code. Permissible names are: `arm2', `arm250', 6772 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 6773 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 6774 `arm700i', `arm710', `arm710c', `arm7100', `arm7500', `arm7500fe', 6775 `arm7tdmi', `arm8', `strongarm', `strongarm110', `strongarm1100', 6776 `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t', 6777 `arm926ejs', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t', 6778 `arm1026ejs', `arm1136js', `arm1136jfs' ,`xscale', `iwmmxt', 6779 `ep9312'. 6780 6781`-mtune=NAME' 6782 This option is very similar to the `-mcpu=' option, except that 6783 instead of specifying the actual target processor type, and hence 6784 restricting which instructions can be used, it specifies that GCC 6785 should tune the performance of the code as if the target were of 6786 the type specified in this option, but still choosing the 6787 instructions that it will generate based on the cpu specified by a 6788 `-mcpu=' option. For some ARM implementations better performance 6789 can be obtained by using this option. 6790 6791`-march=NAME' 6792 This specifies the name of the target ARM architecture. GCC uses 6793 this name to determine what kind of instructions it can emit when 6794 generating assembly code. This option can be used in conjunction 6795 with or instead of the `-mcpu=' option. Permissible names are: 6796 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 6797 `armv5t', `armv5te', `armv6j', `iwmmxt', `ep9312'. 6798 6799`-mfpe=NUMBER' 6800`-mfp=NUMBER' 6801 This specifies the version of the floating point emulation 6802 available on the target. Permissible values are 2 and 3. `-mfp=' 6803 is a synonym for `-mfpe=', for compatibility with older versions 6804 of GCC. 6805 6806`-mstructure-size-boundary=N' 6807 The size of all structures and unions will be rounded up to a 6808 multiple of the number of bits set by this option. Permissible 6809 values are 8 and 32. The default value varies for different 6810 toolchains. For the COFF targeted toolchain the default value is 6811 8. Specifying the larger number can produce faster, more 6812 efficient code, but can also increase the size of the program. 6813 The two values are potentially incompatible. Code compiled with 6814 one value cannot necessarily expect to work with code or libraries 6815 compiled with the other value, if they exchange information using 6816 structures or unions. 6817 6818`-mabort-on-noreturn' 6819 Generate a call to the function `abort' at the end of a `noreturn' 6820 function. It will be executed if the function tries to return. 6821 6822`-mlong-calls' 6823`-mno-long-calls' 6824 Tells the compiler to perform function calls by first loading the 6825 address of the function into a register and then performing a 6826 subroutine call on this register. This switch is needed if the 6827 target function will lie outside of the 64 megabyte addressing 6828 range of the offset based version of subroutine call instruction. 6829 6830 Even if this switch is enabled, not all function calls will be 6831 turned into long calls. The heuristic is that static functions, 6832 functions which have the `short-call' attribute, functions that 6833 are inside the scope of a `#pragma no_long_calls' directive and 6834 functions whose definitions have already been compiled within the 6835 current compilation unit, will not be turned into long calls. The 6836 exception to this rule is that weak function definitions, 6837 functions with the `long-call' attribute or the `section' 6838 attribute, and functions that are within the scope of a `#pragma 6839 long_calls' directive, will always be turned into long calls. 6840 6841 This feature is not enabled by default. Specifying 6842 `-mno-long-calls' will restore the default behavior, as will 6843 placing the function calls within the scope of a `#pragma 6844 long_calls_off' directive. Note these switches have no effect on 6845 how the compiler generates code to handle function calls via 6846 function pointers. 6847 6848`-mnop-fun-dllimport' 6849 Disable support for the `dllimport' attribute. 6850 6851`-msingle-pic-base' 6852 Treat the register used for PIC addressing as read-only, rather 6853 than loading it in the prologue for each function. The run-time 6854 system is responsible for initializing this register with an 6855 appropriate value before execution begins. 6856 6857`-mpic-register=REG' 6858 Specify the register to be used for PIC addressing. The default 6859 is R10 unless stack-checking is enabled, when R9 is used. 6860 6861`-mcirrus-fix-invalid-insns' 6862 Insert NOPs into the instruction stream to in order to work around 6863 problems with invalid Maverick instruction combinations. This 6864 option is only valid if the `-mcpu=ep9312' option has been used to 6865 enable generation of instructions for the Cirrus Maverick floating 6866 point co-processor. This option is not enabled by default, since 6867 the problem is only present in older Maverick implementations. 6868 The default can be re-enabled by use of the 6869 `-mno-cirrus-fix-invalid-insns' switch. 6870 6871`-mpoke-function-name' 6872 Write the name of each function into the text section, directly 6873 preceding the function prologue. The generated code is similar to 6874 this: 6875 6876 t0 6877 .ascii "arm_poke_function_name", 0 6878 .align 6879 t1 6880 .word 0xff000000 + (t1 - t0) 6881 arm_poke_function_name 6882 mov ip, sp 6883 stmfd sp!, {fp, ip, lr, pc} 6884 sub fp, ip, #4 6885 6886 When performing a stack backtrace, code can inspect the value of 6887 `pc' stored at `fp + 0'. If the trace function then looks at 6888 location `pc - 12' and the top 8 bits are set, then we know that 6889 there is a function name embedded immediately preceding this 6890 location and has length `((pc[-3]) & 0xff000000)'. 6891 6892`-mthumb' 6893 Generate code for the 16-bit Thumb instruction set. The default 6894 is to use the 32-bit ARM instruction set. 6895 6896`-mtpcs-frame' 6897 Generate a stack frame that is compliant with the Thumb Procedure 6898 Call Standard for all non-leaf functions. (A leaf function is one 6899 that does not call any other functions.) The default is 6900 `-mno-tpcs-frame'. 6901 6902`-mtpcs-leaf-frame' 6903 Generate a stack frame that is compliant with the Thumb Procedure 6904 Call Standard for all leaf functions. (A leaf function is one 6905 that does not call any other functions.) The default is 6906 `-mno-apcs-leaf-frame'. 6907 6908`-mcallee-super-interworking' 6909 Gives all externally visible functions in the file being compiled 6910 an ARM instruction set header which switches to Thumb mode before 6911 executing the rest of the function. This allows these functions 6912 to be called from non-interworking code. 6913 6914`-mcaller-super-interworking' 6915 Allows calls via function pointers (including virtual functions) to 6916 execute correctly regardless of whether the target code has been 6917 compiled for interworking or not. There is a small overhead in 6918 the cost of executing a function pointer if this option is enabled. 6919 6920 6921 6922File: gcc.info, Node: MN10300 Options, Next: M32R/D Options, Prev: ARM Options, Up: Submodel Options 6923 69243.17.6 MN10300 Options 6925---------------------- 6926 6927These `-m' options are defined for Matsushita MN10300 architectures: 6928 6929`-mmult-bug' 6930 Generate code to avoid bugs in the multiply instructions for the 6931 MN10300 processors. This is the default. 6932 6933`-mno-mult-bug' 6934 Do not generate code to avoid bugs in the multiply instructions 6935 for the MN10300 processors. 6936 6937`-mam33' 6938 Generate code which uses features specific to the AM33 processor. 6939 6940`-mno-am33' 6941 Do not generate code which uses features specific to the AM33 6942 processor. This is the default. 6943 6944`-mno-crt0' 6945 Do not link in the C run-time initialization object file. 6946 6947`-mrelax' 6948 Indicate to the linker that it should perform a relaxation 6949 optimization pass to shorten branches, calls and absolute memory 6950 addresses. This option only has an effect when used on the 6951 command line for the final link step. 6952 6953 This option makes symbolic debugging impossible. 6954 6955 6956File: gcc.info, Node: M32R/D Options, Next: RS/6000 and PowerPC Options, Prev: MN10300 Options, Up: Submodel Options 6957 69583.17.7 M32R/D Options 6959--------------------- 6960 6961These `-m' options are defined for Renesas M32R/D architectures: 6962 6963`-m32r2' 6964 Generate code for the M32R/2. 6965 6966`-m32rx' 6967 Generate code for the M32R/X. 6968 6969`-m32r' 6970 Generate code for the M32R. This is the default. 6971 6972`-mmodel=small' 6973 Assume all objects live in the lower 16MB of memory (so that their 6974 addresses can be loaded with the `ld24' instruction), and assume 6975 all subroutines are reachable with the `bl' instruction. This is 6976 the default. 6977 6978 The addressability of a particular object can be set with the 6979 `model' attribute. 6980 6981`-mmodel=medium' 6982 Assume objects may be anywhere in the 32-bit address space (the 6983 compiler will generate `seth/add3' instructions to load their 6984 addresses), and assume all subroutines are reachable with the `bl' 6985 instruction. 6986 6987`-mmodel=large' 6988 Assume objects may be anywhere in the 32-bit address space (the 6989 compiler will generate `seth/add3' instructions to load their 6990 addresses), and assume subroutines may not be reachable with the 6991 `bl' instruction (the compiler will generate the much slower 6992 `seth/add3/jl' instruction sequence). 6993 6994`-msdata=none' 6995 Disable use of the small data area. Variables will be put into 6996 one of `.data', `bss', or `.rodata' (unless the `section' 6997 attribute has been specified). This is the default. 6998 6999 The small data area consists of sections `.sdata' and `.sbss'. 7000 Objects may be explicitly put in the small data area with the 7001 `section' attribute using one of these sections. 7002 7003`-msdata=sdata' 7004 Put small global and static data in the small data area, but do not 7005 generate special code to reference them. 7006 7007`-msdata=use' 7008 Put small global and static data in the small data area, and 7009 generate special instructions to reference them. 7010 7011`-G NUM' 7012 Put global and static objects less than or equal to NUM bytes into 7013 the small data or bss sections instead of the normal data or bss 7014 sections. The default value of NUM is 8. The `-msdata' option 7015 must be set to one of `sdata' or `use' for this option to have any 7016 effect. 7017 7018 All modules should be compiled with the same `-G NUM' value. 7019 Compiling with different values of NUM may or may not work; if it 7020 doesn't the linker will give an error message--incorrect code will 7021 not be generated. 7022 7023`-mdebug' 7024 Makes the M32R specific code in the compiler display some 7025 statistics that might help in debugging programs. 7026 7027`-malign-loops' 7028 Align all loops to a 32-byte boundary. 7029 7030`-mno-align-loops' 7031 Do not enforce a 32-byte alignment for loops. This is the default. 7032 7033`-missue-rate=NUMBER' 7034 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 7035 7036`-mbranch-cost=NUMBER' 7037 NUMBER can only be 1 or 2. If it is 1 then branches will be 7038 preferred over conditional code, if it is 2, then the opposite will 7039 apply. 7040 7041`-mflush-trap=NUMBER' 7042 Specifies the trap number to use to flush the cache. The default 7043 is 12. Valid numbers are between 0 and 15 inclusive. 7044 7045`-mno-flush-trap' 7046 Specifies that the cache cannot be flushed by using a trap. 7047 7048`-mflush-func=NAME' 7049 Specifies the name of the operating system function to call to 7050 flush the cache. The default is __flush_cache_, but a function 7051 call will only be used if a trap is not available. 7052 7053`-mno-flush-func' 7054 Indicates that there is no OS function for flushing the cache. 7055 7056 7057 7058File: gcc.info, Node: RS/6000 and PowerPC Options, Next: Darwin Options, Prev: M32R/D Options, Up: Submodel Options 7059 70603.17.8 IBM RS/6000 and PowerPC Options 7061-------------------------------------- 7062 7063These `-m' options are defined for the IBM RS/6000 and PowerPC: 7064`-mpower' 7065`-mno-power' 7066`-mpower2' 7067`-mno-power2' 7068`-mpowerpc' 7069`-mno-powerpc' 7070`-mpowerpc-gpopt' 7071`-mno-powerpc-gpopt' 7072`-mpowerpc-gfxopt' 7073`-mno-powerpc-gfxopt' 7074`-mpowerpc64' 7075`-mno-powerpc64' 7076 GCC supports two related instruction set architectures for the 7077 RS/6000 and PowerPC. The "POWER" instruction set are those 7078 instructions supported by the `rios' chip set used in the original 7079 RS/6000 systems and the "PowerPC" instruction set is the 7080 architecture of the Motorola MPC5xx, MPC6xx, MPC8xx 7081 microprocessors, and the IBM 4xx microprocessors. 7082 7083 Neither architecture is a subset of the other. However there is a 7084 large common subset of instructions supported by both. An MQ 7085 register is included in processors supporting the POWER 7086 architecture. 7087 7088 You use these options to specify which instructions are available 7089 on the processor you are using. The default value of these 7090 options is determined when configuring GCC. Specifying the 7091 `-mcpu=CPU_TYPE' overrides the specification of these options. We 7092 recommend you use the `-mcpu=CPU_TYPE' option rather than the 7093 options listed above. 7094 7095 The `-mpower' option allows GCC to generate instructions that are 7096 found only in the POWER architecture and to use the MQ register. 7097 Specifying `-mpower2' implies `-power' and also allows GCC to 7098 generate instructions that are present in the POWER2 architecture 7099 but not the original POWER architecture. 7100 7101 The `-mpowerpc' option allows GCC to generate instructions that 7102 are found only in the 32-bit subset of the PowerPC architecture. 7103 Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows 7104 GCC to use the optional PowerPC architecture instructions in the 7105 General Purpose group, including floating-point square root. 7106 Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows 7107 GCC to use the optional PowerPC architecture instructions in the 7108 Graphics group, including floating-point select. 7109 7110 The `-mpowerpc64' option allows GCC to generate the additional 7111 64-bit instructions that are found in the full PowerPC64 7112 architecture and to treat GPRs as 64-bit, doubleword quantities. 7113 GCC defaults to `-mno-powerpc64'. 7114 7115 If you specify both `-mno-power' and `-mno-powerpc', GCC will use 7116 only the instructions in the common subset of both architectures 7117 plus some special AIX common-mode calls, and will not use the MQ 7118 register. Specifying both `-mpower' and `-mpowerpc' permits GCC 7119 to use any instruction from either architecture and to allow use 7120 of the MQ register; specify this for the Motorola MPC601. 7121 7122`-mnew-mnemonics' 7123`-mold-mnemonics' 7124 Select which mnemonics to use in the generated assembler code. 7125 With `-mnew-mnemonics', GCC uses the assembler mnemonics defined 7126 for the PowerPC architecture. With `-mold-mnemonics' it uses the 7127 assembler mnemonics defined for the POWER architecture. 7128 Instructions defined in only one architecture have only one 7129 mnemonic; GCC uses that mnemonic irrespective of which of these 7130 options is specified. 7131 7132 GCC defaults to the mnemonics appropriate for the architecture in 7133 use. Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of 7134 these option. Unless you are building a cross-compiler, you 7135 should normally not specify either `-mnew-mnemonics' or 7136 `-mold-mnemonics', but should instead accept the default. 7137 7138`-mcpu=CPU_TYPE' 7139 Set architecture type, register usage, choice of mnemonics, and 7140 instruction scheduling parameters for machine type CPU_TYPE. 7141 Supported values for CPU_TYPE are `401', `403', `405', `405fp', 7142 `440', `440fp', `505', `601', `602', `603', `603e', `604', `604e', 7143 `620', `630', `740', `7400', `7450', `750', `801', `821', `823', 7144 `860', `970', `common', `ec603e', `G3', `G4', `G5', `power', 7145 `power2', `power3', `power4', `power5', `powerpc', `powerpc64', 7146 `rios', `rios1', `rios2', `rsc', and `rs64a'. 7147 7148 `-mcpu=common' selects a completely generic processor. Code 7149 generated under this option will run on any POWER or PowerPC 7150 processor. GCC will use only the instructions in the common 7151 subset of both architectures, and will not use the MQ register. 7152 GCC assumes a generic processor model for scheduling purposes. 7153 7154 `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and 7155 `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit 7156 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 7157 types, with an appropriate, generic processor model assumed for 7158 scheduling purposes. 7159 7160 The other options specify a specific processor. Code generated 7161 under those options will run best on that processor, and may not 7162 run at all on others. 7163 7164 The `-mcpu' options automatically enable or disable the following 7165 options: `-maltivec', `-mhard-float', `-mmfcrf', `-mmultiple', 7166 `-mnew-mnemonics', `-mpower', `-mpower2', `-mpowerpc64', 7167 `-mpowerpc-gpopt', `-mpowerpc-gfxopt', `-mstring'. The particular 7168 options set for any particular CPU will vary between compiler 7169 versions, depending on what setting seems to produce optimal code 7170 for that CPU; it doesn't necessarily reflect the actual hardware's 7171 capabilities. If you wish to set an individual option to a 7172 particular value, you may specify it after the `-mcpu' option, 7173 like `-mcpu=970 -mno-altivec'. 7174 7175 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 7176 or disabled by the `-mcpu' option at present, since AIX does not 7177 have full support for these options. You may still enable or 7178 disable them individually if you're sure it'll work in your 7179 environment. 7180 7181`-mtune=CPU_TYPE' 7182 Set the instruction scheduling parameters for machine type 7183 CPU_TYPE, but do not set the architecture type, register usage, or 7184 choice of mnemonics, as `-mcpu=CPU_TYPE' would. The same values 7185 for CPU_TYPE are used for `-mtune' as for `-mcpu'. If both are 7186 specified, the code generated will use the architecture, 7187 registers, and mnemonics set by `-mcpu', but the scheduling 7188 parameters set by `-mtune'. 7189 7190`-maltivec' 7191`-mno-altivec' 7192 These switches enable or disable the use of built-in functions that 7193 allow access to the AltiVec instruction set. You may also need to 7194 set `-mabi=altivec' to adjust the current ABI with AltiVec ABI 7195 enhancements. 7196 7197`-mabi=spe' 7198 Extend the current ABI with SPE ABI extensions. This does not 7199 change the default ABI, instead it adds the SPE ABI extensions to 7200 the current ABI. 7201 7202`-mabi=no-spe' 7203 Disable Booke SPE ABI extensions for the current ABI. 7204 7205`-misel=YES/NO' 7206`-misel' 7207 This switch enables or disables the generation of ISEL 7208 instructions. 7209 7210`-mspe=YES/NO' 7211`-mspe' 7212 This switch enables or disables the generation of SPE simd 7213 instructions. 7214 7215`-mfloat-gprs=YES/NO' 7216`-mfloat-gprs' 7217 This switch enables or disables the generation of floating point 7218 operations on the general purpose registers for architectures that 7219 support it. This option is currently only available on the 7220 MPC8540. 7221 7222`-mfull-toc' 7223`-mno-fp-in-toc' 7224`-mno-sum-in-toc' 7225`-mminimal-toc' 7226 Modify generation of the TOC (Table Of Contents), which is created 7227 for every executable file. The `-mfull-toc' option is selected by 7228 default. In that case, GCC will allocate at least one TOC entry 7229 for each unique non-automatic variable reference in your program. 7230 GCC will also place floating-point constants in the TOC. However, 7231 only 16,384 entries are available in the TOC. 7232 7233 If you receive a linker error message that saying you have 7234 overflowed the available TOC space, you can reduce the amount of 7235 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 7236 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 7237 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 7238 code to calculate the sum of an address and a constant at run-time 7239 instead of putting that sum into the TOC. You may specify one or 7240 both of these options. Each causes GCC to produce very slightly 7241 slower and larger code at the expense of conserving TOC space. 7242 7243 If you still run out of space in the TOC even when you specify 7244 both of these options, specify `-mminimal-toc' instead. This 7245 option causes GCC to make only one TOC entry for every file. When 7246 you specify this option, GCC will produce code that is slower and 7247 larger but which uses extremely little TOC space. You may wish to 7248 use this option only on files that contain less frequently 7249 executed code. 7250 7251`-maix64' 7252`-maix32' 7253 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 7254 64-bit `long' type, and the infrastructure needed to support them. 7255 Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while 7256 `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'. 7257 GCC defaults to `-maix32'. 7258 7259`-mxl-call' 7260`-mno-xl-call' 7261 On AIX, pass floating-point arguments to prototyped functions 7262 beyond the register save area (RSA) on the stack in addition to 7263 argument FPRs. The AIX calling convention was extended but not 7264 initially documented to handle an obscure K&R C case of calling a 7265 function that takes the address of its arguments with fewer 7266 arguments than declared. AIX XL compilers access floating point 7267 arguments which do not fit in the RSA from the stack when a 7268 subroutine is compiled without optimization. Because always 7269 storing floating-point arguments on the stack is inefficient and 7270 rarely needed, this option is not enabled by default and only is 7271 necessary when calling subroutines compiled by AIX XL compilers 7272 without optimization. 7273 7274`-mpe' 7275 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 7276 application written to use message passing with special startup 7277 code to enable the application to run. The system must have PE 7278 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 7279 `specs' file must be overridden with the `-specs=' option to 7280 specify the appropriate directory location. The Parallel 7281 Environment does not support threads, so the `-mpe' option and the 7282 `-pthread' option are incompatible. 7283 7284`-malign-natural' 7285`-malign-power' 7286 On AIX, Darwin, and 64-bit PowerPC GNU/Linux, the option 7287 `-malign-natural' overrides the ABI-defined alignment of larger 7288 types, such as floating-point doubles, on their natural size-based 7289 boundary. The option `-malign-power' instructs GCC to follow the 7290 ABI-specified alignment rules. GCC defaults to the standard 7291 alignment defined in the ABI. 7292 7293`-msoft-float' 7294`-mhard-float' 7295 Generate code that does not use (uses) the floating-point register 7296 set. Software floating point emulation is provided if you use the 7297 `-msoft-float' option, and pass the option to GCC when linking. 7298 7299`-mmultiple' 7300`-mno-multiple' 7301 Generate code that uses (does not use) the load multiple word 7302 instructions and the store multiple word instructions. These 7303 instructions are generated by default on POWER systems, and not 7304 generated on PowerPC systems. Do not use `-mmultiple' on little 7305 endian PowerPC systems, since those instructions do not work when 7306 the processor is in little endian mode. The exceptions are PPC740 7307 and PPC750 which permit the instructions usage in little endian 7308 mode. 7309 7310`-mstring' 7311`-mno-string' 7312 Generate code that uses (does not use) the load string instructions 7313 and the store string word instructions to save multiple registers 7314 and do small block moves. These instructions are generated by 7315 default on POWER systems, and not generated on PowerPC systems. 7316 Do not use `-mstring' on little endian PowerPC systems, since those 7317 instructions do not work when the processor is in little endian 7318 mode. The exceptions are PPC740 and PPC750 which permit the 7319 instructions usage in little endian mode. 7320 7321`-mupdate' 7322`-mno-update' 7323 Generate code that uses (does not use) the load or store 7324 instructions that update the base register to the address of the 7325 calculated memory location. These instructions are generated by 7326 default. If you use `-mno-update', there is a small window 7327 between the time that the stack pointer is updated and the address 7328 of the previous frame is stored, which means code that walks the 7329 stack frame across interrupts or signals may get corrupted data. 7330 7331`-mfused-madd' 7332`-mno-fused-madd' 7333 Generate code that uses (does not use) the floating point multiply 7334 and accumulate instructions. These instructions are generated by 7335 default if hardware floating is used. 7336 7337`-mno-bit-align' 7338`-mbit-align' 7339 On System V.4 and embedded PowerPC systems do not (do) force 7340 structures and unions that contain bit-fields to be aligned to the 7341 base type of the bit-field. 7342 7343 For example, by default a structure containing nothing but 8 7344 `unsigned' bit-fields of length 1 would be aligned to a 4 byte 7345 boundary and have a size of 4 bytes. By using `-mno-bit-align', 7346 the structure would be aligned to a 1 byte boundary and be one 7347 byte in size. 7348 7349`-mno-strict-align' 7350`-mstrict-align' 7351 On System V.4 and embedded PowerPC systems do not (do) assume that 7352 unaligned memory references will be handled by the system. 7353 7354`-mrelocatable' 7355`-mno-relocatable' 7356 On embedded PowerPC systems generate code that allows (does not 7357 allow) the program to be relocated to a different address at 7358 runtime. If you use `-mrelocatable' on any module, all objects 7359 linked together must be compiled with `-mrelocatable' or 7360 `-mrelocatable-lib'. 7361 7362`-mrelocatable-lib' 7363`-mno-relocatable-lib' 7364 On embedded PowerPC systems generate code that allows (does not 7365 allow) the program to be relocated to a different address at 7366 runtime. Modules compiled with `-mrelocatable-lib' can be linked 7367 with either modules compiled without `-mrelocatable' and 7368 `-mrelocatable-lib' or with modules compiled with the 7369 `-mrelocatable' options. 7370 7371`-mno-toc' 7372`-mtoc' 7373 On System V.4 and embedded PowerPC systems do not (do) assume that 7374 register 2 contains a pointer to a global area pointing to the 7375 addresses used in the program. 7376 7377`-mlittle' 7378`-mlittle-endian' 7379 On System V.4 and embedded PowerPC systems compile code for the 7380 processor in little endian mode. The `-mlittle-endian' option is 7381 the same as `-mlittle'. 7382 7383`-mbig' 7384`-mbig-endian' 7385 On System V.4 and embedded PowerPC systems compile code for the 7386 processor in big endian mode. The `-mbig-endian' option is the 7387 same as `-mbig'. 7388 7389`-mdynamic-no-pic' 7390 On Darwin and Mac OS X systems, compile code so that it is not 7391 relocatable, but that its external references are relocatable. The 7392 resulting code is suitable for applications, but not shared 7393 libraries. 7394 7395`-mprioritize-restricted-insns=PRIORITY' 7396 This option controls the priority that is assigned to 7397 dispatch-slot restricted instructions during the second scheduling 7398 pass. The argument PRIORITY takes the value 0/1/2 to assign 7399 NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted 7400 instructions. 7401 7402`-msched-costly-dep=DEPENDENCE_TYPE' 7403 This option controls which dependences are considered costly by 7404 the target during instruction scheduling. The argument 7405 DEPENDENCE_TYPE takes one of the following values: NO: no 7406 dependence is costly, ALL: all dependences are costly, 7407 TRUE_STORE_TO_LOAD: a true dependence from store to load is costly, 7408 STORE_TO_LOAD: any dependence from store to load is costly, 7409 NUMBER: any dependence which latency >= NUMBER is costly. 7410 7411`-minsert-sched-nops=SCHEME' 7412 This option controls which nop insertion scheme will be used during 7413 the second scheduling pass. The argument SCHEME takes one of the 7414 following values: NO: Don't insert nops. PAD: Pad with nops any 7415 dispatch group which has vacant issue slots, according to the 7416 scheduler's grouping. REGROUP_EXACT: Insert nops to force costly 7417 dependent insns into separate groups. Insert exactly as many nops 7418 as needed to force an insn to a new group, according to the 7419 estimated processor grouping. NUMBER: Insert nops to force costly 7420 dependent insns into separate groups. Insert NUMBER nops to force 7421 an insn to a new group. 7422 7423`-mcall-sysv' 7424 On System V.4 and embedded PowerPC systems compile code using 7425 calling conventions that adheres to the March 1995 draft of the 7426 System V Application Binary Interface, PowerPC processor 7427 supplement. This is the default unless you configured GCC using 7428 `powerpc-*-eabiaix'. 7429 7430`-mcall-sysv-eabi' 7431 Specify both `-mcall-sysv' and `-meabi' options. 7432 7433`-mcall-sysv-noeabi' 7434 Specify both `-mcall-sysv' and `-mno-eabi' options. 7435 7436`-mcall-solaris' 7437 On System V.4 and embedded PowerPC systems compile code for the 7438 Solaris operating system. 7439 7440`-mcall-linux' 7441 On System V.4 and embedded PowerPC systems compile code for the 7442 Linux-based GNU system. 7443 7444`-mcall-gnu' 7445 On System V.4 and embedded PowerPC systems compile code for the 7446 Hurd-based GNU system. 7447 7448`-mcall-netbsd' 7449 On System V.4 and embedded PowerPC systems compile code for the 7450 NetBSD operating system. 7451 7452`-maix-struct-return' 7453 Return all structures in memory (as specified by the AIX ABI). 7454 7455`-msvr4-struct-return' 7456 Return structures smaller than 8 bytes in registers (as specified 7457 by the SVR4 ABI). 7458 7459`-mabi=altivec' 7460 Extend the current ABI with AltiVec ABI extensions. This does not 7461 change the default ABI, instead it adds the AltiVec ABI extensions 7462 to the current ABI. 7463 7464`-mabi=no-altivec' 7465 Disable AltiVec ABI extensions for the current ABI. 7466 7467`-mprototype' 7468`-mno-prototype' 7469 On System V.4 and embedded PowerPC systems assume that all calls to 7470 variable argument functions are properly prototyped. Otherwise, 7471 the compiler must insert an instruction before every non 7472 prototyped call to set or clear bit 6 of the condition code 7473 register (CR) to indicate whether floating point values were 7474 passed in the floating point registers in case the function takes 7475 a variable arguments. With `-mprototype', only calls to 7476 prototyped variable argument functions will set or clear the bit. 7477 7478`-msim' 7479 On embedded PowerPC systems, assume that the startup module is 7480 called `sim-crt0.o' and that the standard C libraries are 7481 `libsim.a' and `libc.a'. This is the default for 7482 `powerpc-*-eabisim'. configurations. 7483 7484`-mmvme' 7485 On embedded PowerPC systems, assume that the startup module is 7486 called `crt0.o' and the standard C libraries are `libmvme.a' and 7487 `libc.a'. 7488 7489`-mads' 7490 On embedded PowerPC systems, assume that the startup module is 7491 called `crt0.o' and the standard C libraries are `libads.a' and 7492 `libc.a'. 7493 7494`-myellowknife' 7495 On embedded PowerPC systems, assume that the startup module is 7496 called `crt0.o' and the standard C libraries are `libyk.a' and 7497 `libc.a'. 7498 7499`-mvxworks' 7500 On System V.4 and embedded PowerPC systems, specify that you are 7501 compiling for a VxWorks system. 7502 7503`-mwindiss' 7504 Specify that you are compiling for the WindISS simulation 7505 environment. 7506 7507`-memb' 7508 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 7509 header to indicate that `eabi' extended relocations are used. 7510 7511`-meabi' 7512`-mno-eabi' 7513 On System V.4 and embedded PowerPC systems do (do not) adhere to 7514 the Embedded Applications Binary Interface (eabi) which is a set of 7515 modifications to the System V.4 specifications. Selecting `-meabi' 7516 means that the stack is aligned to an 8 byte boundary, a function 7517 `__eabi' is called to from `main' to set up the eabi environment, 7518 and the `-msdata' option can use both `r2' and `r13' to point to 7519 two separate small data areas. Selecting `-mno-eabi' means that 7520 the stack is aligned to a 16 byte boundary, do not call an 7521 initialization function from `main', and the `-msdata' option will 7522 only use `r13' to point to a single small data area. The `-meabi' 7523 option is on by default if you configured GCC using one of the 7524 `powerpc*-*-eabi*' options. 7525 7526`-msdata=eabi' 7527 On System V.4 and embedded PowerPC systems, put small initialized 7528 `const' global and static data in the `.sdata2' section, which is 7529 pointed to by register `r2'. Put small initialized non-`const' 7530 global and static data in the `.sdata' section, which is pointed 7531 to by register `r13'. Put small uninitialized global and static 7532 data in the `.sbss' section, which is adjacent to the `.sdata' 7533 section. The `-msdata=eabi' option is incompatible with the 7534 `-mrelocatable' option. The `-msdata=eabi' option also sets the 7535 `-memb' option. 7536 7537`-msdata=sysv' 7538 On System V.4 and embedded PowerPC systems, put small global and 7539 static data in the `.sdata' section, which is pointed to by 7540 register `r13'. Put small uninitialized global and static data in 7541 the `.sbss' section, which is adjacent to the `.sdata' section. 7542 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 7543 option. 7544 7545`-msdata=default' 7546`-msdata' 7547 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 7548 compile code the same as `-msdata=eabi', otherwise compile code the 7549 same as `-msdata=sysv'. 7550 7551`-msdata-data' 7552 On System V.4 and embedded PowerPC systems, put small global and 7553 static data in the `.sdata' section. Put small uninitialized 7554 global and static data in the `.sbss' section. Do not use 7555 register `r13' to address small data however. This is the default 7556 behavior unless other `-msdata' options are used. 7557 7558`-msdata=none' 7559`-mno-sdata' 7560 On embedded PowerPC systems, put all initialized global and static 7561 data in the `.data' section, and all uninitialized data in the 7562 `.bss' section. 7563 7564`-G NUM' 7565 On embedded PowerPC systems, put global and static items less than 7566 or equal to NUM bytes into the small data or bss sections instead 7567 of the normal data or bss section. By default, NUM is 8. The `-G 7568 NUM' switch is also passed to the linker. All modules should be 7569 compiled with the same `-G NUM' value. 7570 7571`-mregnames' 7572`-mno-regnames' 7573 On System V.4 and embedded PowerPC systems do (do not) emit 7574 register names in the assembly language output using symbolic 7575 forms. 7576 7577`-mlongcall' 7578`-mno-longcall' 7579 Default to making all function calls via pointers, so that 7580 functions which reside further than 64 megabytes (67,108,864 7581 bytes) from the current location can be called. This setting can 7582 be overridden by the `shortcall' function attribute, or by 7583 `#pragma longcall(0)'. 7584 7585 Some linkers are capable of detecting out-of-range calls and 7586 generating glue code on the fly. On these systems, long calls are 7587 unnecessary and generate slower code. As of this writing, the AIX 7588 linker can do this, as can the GNU linker for PowerPC/64. It is 7589 planned to add this feature to the GNU linker for 32-bit PowerPC 7590 systems as well. 7591 7592 On Mach-O (Darwin) systems, this option directs the compiler emit 7593 to the glue for every direct call, and the Darwin linker decides 7594 whether to use or discard it. 7595 7596 In the future, we may cause GCC to ignore all longcall 7597 specifications when the linker is known to generate glue. 7598 7599`-pthread' 7600 Adds support for multithreading with the "pthreads" library. This 7601 option sets flags for both the preprocessor and linker. 7602 7603 7604 7605File: gcc.info, Node: Darwin Options, Next: MIPS Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 7606 76073.17.9 Darwin Options 7608--------------------- 7609 7610These options are defined for all architectures running the Darwin 7611operating system. They are useful for compatibility with other Mac OS 7612compilers. 7613 7614`-all_load' 7615 Loads all members of static archive libraries. See man ld(1) for 7616 more information. 7617 7618`-arch_errors_fatal' 7619 Cause the errors having to do with files that have the wrong 7620 architecture to be fatal. 7621 7622`-bind_at_load' 7623 Causes the output file to be marked such that the dynamic linker 7624 will bind all undefined references when the file is loaded or 7625 launched. 7626 7627`-bundle' 7628 Produce a Mach-o bundle format file. See man ld(1) for more 7629 information. 7630 7631`-bundle_loader EXECUTABLE' 7632 This specifies the EXECUTABLE that will be loading the build 7633 output file being linked. See man ld(1) for more information. 7634 7635`-allowable_client CLIENT_NAME' 7636`-arch_only' 7637`-client_name' 7638`-compatibility_version' 7639`-current_version' 7640`-dependency-file' 7641`-dylib_file' 7642`-dylinker_install_name' 7643`-dynamic' 7644`-dynamiclib' 7645`-exported_symbols_list' 7646`-filelist' 7647`-flat_namespace' 7648`-force_cpusubtype_ALL' 7649`-force_flat_namespace' 7650`-headerpad_max_install_names' 7651`-image_base' 7652`-init' 7653`-install_name' 7654`-keep_private_externs' 7655`-multi_module' 7656`-multiply_defined' 7657`-multiply_defined_unused' 7658`-noall_load' 7659`-nofixprebinding' 7660`-nomultidefs' 7661`-noprebind' 7662`-noseglinkedit' 7663`-pagezero_size' 7664`-prebind' 7665`-prebind_all_twolevel_modules' 7666`-private_bundle' 7667`-read_only_relocs' 7668`-sectalign' 7669`-sectobjectsymbols' 7670`-whyload' 7671`-seg1addr' 7672`-sectcreate' 7673`-sectobjectsymbols' 7674`-sectorder' 7675`-seg_addr_table' 7676`-seg_addr_table_filename' 7677`-seglinkedit' 7678`-segprot' 7679`-segs_read_only_addr' 7680`-segs_read_write_addr' 7681`-single_module' 7682`-static' 7683`-sub_library' 7684`-sub_umbrella' 7685`-twolevel_namespace' 7686`-umbrella' 7687`-undefined' 7688`-unexported_symbols_list' 7689`-weak_reference_mismatches' 7690`-whatsloaded' 7691 These options are available for Darwin linker. Darwin linker man 7692 page describes them in detail. 7693 7694 7695File: gcc.info, Node: MIPS Options, Next: i386 and x86-64 Options, Prev: Darwin Options, Up: Submodel Options 7696 76973.17.10 MIPS Options 7698-------------------- 7699 7700`-EB' 7701 Generate big-endian code. 7702 7703`-EL' 7704 Generate little-endian code. This is the default for `mips*el-*-*' 7705 configurations. 7706 7707`-march=ARCH' 7708 Generate code that will run on ARCH, which can be the name of a 7709 generic MIPS ISA, or the name of a particular processor. The ISA 7710 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 7711 `mips32r2', and `mips64'. The processor names are: `4kc', `4kp', 7712 `5kc', `20kc', `m4k', `r2000', `r3000', `r3900', `r4000', `r4400', 7713 `r4600', `r4650', `r6000', `r8000', `rm7000', `rm9000', `orion', 7714 `sb1', `vr4100', `vr4111', `vr4120', `vr4300', `vr5000', `vr5400' 7715 and `vr5500'. The special value `from-abi' selects the most 7716 compatible architecture for the selected ABI (that is, `mips1' for 7717 32-bit ABIs and `mips3' for 64-bit ABIs). 7718 7719 In processor names, a final `000' can be abbreviated as `k' (for 7720 example, `-march=r2k'). Prefixes are optional, and `vr' may be 7721 written `r'. 7722 7723 GCC defines two macros based on the value of this option. The 7724 first is `_MIPS_ARCH', which gives the name of target 7725 architecture, as a string. The second has the form 7726 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 7727 `_MIPS_ARCH'. For example, `-march=r2000' will set `_MIPS_ARCH' 7728 to `"r2000"' and define the macro `_MIPS_ARCH_R2000'. 7729 7730 Note that the `_MIPS_ARCH' macro uses the processor names given 7731 above. In other words, it will have the full prefix and will not 7732 abbreviate `000' as `k'. In the case of `from-abi', the macro 7733 names the resolved architecture (either `"mips1"' or `"mips3"'). 7734 It names the default architecture when no `-march' option is given. 7735 7736`-mtune=ARCH' 7737 Optimize for ARCH. Among other things, this option controls the 7738 way instructions are scheduled, and the perceived cost of 7739 arithmetic operations. The list of ARCH values is the same as for 7740 `-march'. 7741 7742 When this option is not used, GCC will optimize for the processor 7743 specified by `-march'. By using `-march' and `-mtune' together, 7744 it is possible to generate code that will run on a family of 7745 processors, but optimize the code for one particular member of 7746 that family. 7747 7748 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 7749 which work in the same way as the `-march' ones described above. 7750 7751`-mips1' 7752 Equivalent to `-march=mips1'. 7753 7754`-mips2' 7755 Equivalent to `-march=mips2'. 7756 7757`-mips3' 7758 Equivalent to `-march=mips3'. 7759 7760`-mips4' 7761 Equivalent to `-march=mips4'. 7762 7763`-mips32' 7764 Equivalent to `-march=mips32'. 7765 7766`-mips32r2' 7767 Equivalent to `-march=mips32r2'. 7768 7769`-mips64' 7770 Equivalent to `-march=mips64'. 7771 7772`-mips16' 7773`-mno-mips16' 7774 Use (do not use) the MIPS16 ISA. 7775 7776`-mabi=32' 7777`-mabi=o64' 7778`-mabi=n32' 7779`-mabi=64' 7780`-mabi=eabi' 7781 Generate code for the given ABI. 7782 7783 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 7784 generates 64-bit code when you select a 64-bit architecture, but 7785 you can use `-mgp32' to get 32-bit code instead. 7786 7787`-mabicalls' 7788`-mno-abicalls' 7789 Generate (do not generate) SVR4-style position-independent code. 7790 `-mabicalls' is the default for SVR4-based systems. 7791 7792`-mxgot' 7793`-mno-xgot' 7794 Lift (do not lift) the usual restrictions on the size of the global 7795 offset table. 7796 7797 GCC normally uses a single instruction to load values from the GOT. 7798 While this is relatively efficient, it will only work if the GOT 7799 is smaller than about 64k. Anything larger will cause the linker 7800 to report an error such as: 7801 7802 relocation truncated to fit: R_MIPS_GOT16 foobar 7803 7804 If this happens, you should recompile your code with `-mxgot'. It 7805 should then work with very large GOTs, although it will also be 7806 less efficient, since it will take three instructions to fetch the 7807 value of a global symbol. 7808 7809 Note that some linkers can create multiple GOTs. If you have such 7810 a linker, you should only need to use `-mxgot' when a single object 7811 file accesses more than 64k's worth of GOT entries. Very few do. 7812 7813 These options have no effect unless GCC is generating position 7814 independent code. 7815 7816`-membedded-pic' 7817`-mno-embedded-pic' 7818 Generate (do not generate) position-independent code suitable for 7819 some embedded systems. All calls are made using PC relative 7820 addresses, and all data is addressed using the $gp register. No 7821 more than 65536 bytes of global data may be used. This requires 7822 GNU as and GNU ld, which do most of the work. 7823 7824`-mgp32' 7825 Assume that general-purpose registers are 32 bits wide. 7826 7827`-mgp64' 7828 Assume that general-purpose registers are 64 bits wide. 7829 7830`-mfp32' 7831 Assume that floating-point registers are 32 bits wide. 7832 7833`-mfp64' 7834 Assume that floating-point registers are 64 bits wide. 7835 7836`-mhard-float' 7837 Use floating-point coprocessor instructions. 7838 7839`-msoft-float' 7840 Do not use floating-point coprocessor instructions. Implement 7841 floating-point calculations using library calls instead. 7842 7843`-msingle-float' 7844 Assume that the floating-point coprocessor only supports 7845 single-precision operations. 7846 7847`-mdouble-float' 7848 Assume that the floating-point coprocessor supports 7849 double-precision operations. This is the default. 7850 7851`-mint64' 7852 Force `int' and `long' types to be 64 bits wide. See `-mlong32' 7853 for an explanation of the default and the way that the pointer 7854 size is determined. 7855 7856`-mlong64' 7857 Force `long' types to be 64 bits wide. See `-mlong32' for an 7858 explanation of the default and the way that the pointer size is 7859 determined. 7860 7861`-mlong32' 7862 Force `long', `int', and pointer types to be 32 bits wide. 7863 7864 The default size of `int's, `long's and pointers depends on the 7865 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 7866 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 7867 `long's. Pointers are the same size as `long's, or the same size 7868 as integer registers, whichever is smaller. 7869 7870`-G NUM' 7871 Put global and static items less than or equal to NUM bytes into 7872 the small data or bss section instead of the normal data or bss 7873 section. This allows the data to be accessed using a single 7874 instruction. 7875 7876 All modules should be compiled with the same `-G NUM' value. 7877 7878`-membedded-data' 7879`-mno-embedded-data' 7880 Allocate variables to the read-only data section first if 7881 possible, then next in the small data section if possible, 7882 otherwise in data. This gives slightly slower code than the 7883 default, but reduces the amount of RAM required when executing, 7884 and thus may be preferred for some embedded systems. 7885 7886`-muninit-const-in-rodata' 7887`-mno-uninit-const-in-rodata' 7888 Put uninitialized `const' variables in the read-only data section. 7889 This option is only meaningful in conjunction with 7890 `-membedded-data'. 7891 7892`-msplit-addresses' 7893`-mno-split-addresses' 7894 Enable (disable) use of the `%hi()' and `%lo()' assembler 7895 relocation operators. This option has been superceded by 7896 `-mexplicit-relocs' but is retained for backwards compatibility. 7897 7898`-mexplicit-relocs' 7899`-mno-explicit-relocs' 7900 Use (do not use) assembler relocation operators when dealing with 7901 symbolic addresses. The alternative, selected by 7902 `-mno-explicit-relocs', is to use assembler macros instead. 7903 7904 `-mexplicit-relocs' is usually the default if GCC was configured 7905 to use an assembler that supports relocation operators. However, 7906 there are two exceptions: 7907 7908 * GCC is not yet able to generate explicit relocations for the 7909 combination of `-mabi=64' and `-mno-abicalls'. This will be 7910 addressed in a future release. 7911 7912 * The combination of `-mabicalls' and `-fno-unit-at-a-time' 7913 implies `-mno-explicit-relocs' unless explicitly overridden. 7914 This is because, when generating abicalls, the choice of 7915 relocation depends on whether a symbol is local or global. 7916 In some rare cases, GCC will not be able to decide this until 7917 the whole compilation unit has been read. 7918 7919`-mrnames' 7920`-mno-rnames' 7921 Generate (do not generate) code that refers to registers using 7922 their software names. The default is `-mno-rnames', which tells 7923 GCC to use hardware names like `$4' instead of software names like 7924 `a0'. The only assembler known to support `-rnames' is the 7925 Algorithmics assembler. 7926 7927`-mcheck-zero-division' 7928`-mno-check-zero-division' 7929 Trap (do not trap) on integer division by zero. The default is 7930 `-mcheck-zero-division'. 7931 7932`-mmemcpy' 7933`-mno-memcpy' 7934 Force (do not force) the use of `memcpy()' for non-trivial block 7935 moves. The default is `-mno-memcpy', which allows GCC to inline 7936 most constant-sized copies. 7937 7938`-mlong-calls' 7939`-mno-long-calls' 7940 Disable (do not disable) use of the `jal' instruction. Calling 7941 functions using `jal' is more efficient but requires the caller 7942 and callee to be in the same 256 megabyte segment. 7943 7944 This option has no effect on abicalls code. The default is 7945 `-mno-long-calls'. 7946 7947`-mmad' 7948`-mno-mad' 7949 Enable (disable) use of the `mad', `madu' and `mul' instructions, 7950 as provided by the R4650 ISA. 7951 7952`-mfused-madd' 7953`-mno-fused-madd' 7954 Enable (disable) use of the floating point multiply-accumulate 7955 instructions, when they are available. The default is 7956 `-mfused-madd'. 7957 7958 When multiply-accumulate instructions are used, the intermediate 7959 product is calculated to infinite precision and is not subject to 7960 the FCSR Flush to Zero bit. This may be undesirable in some 7961 circumstances. 7962 7963`-nocpp' 7964 Tell the MIPS assembler to not run its preprocessor over user 7965 assembler files (with a `.s' suffix) when assembling them. 7966 7967`-mfix-sb1' 7968`-mno-fix-sb1' 7969 Work around certain SB-1 CPU core errata. (This flag currently 7970 works around the SB-1 revision 2 "F1" and "F2" floating point 7971 errata.) 7972 7973`-mflush-func=FUNC' 7974`-mno-flush-func' 7975 Specifies the function to call to flush the I and D caches, or to 7976 not call any such function. If called, the function must take the 7977 same arguments as the common `_flush_func()', that is, the address 7978 of the memory range for which the cache is being flushed, the size 7979 of the memory range, and the number 3 (to flush both caches). The 7980 default depends on the target GCC was configured for, but commonly 7981 is either `_flush_func' or `__cpu_flush'. 7982 7983`-mbranch-likely' 7984`-mno-branch-likely' 7985 Enable or disable use of Branch Likely instructions, regardless of 7986 the default for the selected architecture. By default, Branch 7987 Likely instructions may be generated if they are supported by the 7988 selected architecture. An exception is for the MIPS32 and MIPS64 7989 architectures and processors which implement those architectures; 7990 for those, Branch Likely instructions will not be generated by 7991 default because the MIPS32 and MIPS64 architectures specifically 7992 deprecate their use. 7993 7994 7995File: gcc.info, Node: i386 and x86-64 Options, Next: HPPA Options, Prev: MIPS Options, Up: Submodel Options 7996 79973.17.11 Intel 386 and AMD x86-64 Options 7998---------------------------------------- 7999 8000These `-m' options are defined for the i386 and x86-64 family of 8001computers: 8002 8003`-mtune=CPU-TYPE' 8004 Tune to CPU-TYPE everything applicable about the generated code, 8005 except for the ABI and the set of available instructions. The 8006 choices for CPU-TYPE are: 8007 _i386_ 8008 Original Intel's i386 CPU. 8009 8010 _i486_ 8011 Intel's i486 CPU. (No scheduling is implemented for this 8012 chip.) 8013 8014 _i586, pentium_ 8015 Intel Pentium CPU with no MMX support. 8016 8017 _pentium-mmx_ 8018 Intel PentiumMMX CPU based on Pentium core with MMX 8019 instruction set support. 8020 8021 _i686, pentiumpro_ 8022 Intel PentiumPro CPU. 8023 8024 _pentium2_ 8025 Intel Pentium2 CPU based on PentiumPro core with MMX 8026 instruction set support. 8027 8028 _pentium3, pentium3m_ 8029 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE 8030 instruction set support. 8031 8032 _pentium-m_ 8033 Low power version of Intel Pentium3 CPU with MMX, SSE and 8034 SSE2 instruction set support. Used by Centrino notebooks. 8035 8036 _pentium4, pentium4m_ 8037 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set 8038 support. 8039 8040 _prescott_ 8041 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 8042 and SSE3 instruction set support. 8043 8044 _nocona_ 8045 Improved version of Intel Pentium4 CPU with 64-bit 8046 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 8047 8048 _k6_ 8049 AMD K6 CPU with MMX instruction set support. 8050 8051 _k6-2, k6-3_ 8052 Improved versions of AMD K6 CPU with MMX and 3dNOW! 8053 instruction set support. 8054 8055 _athlon, athlon-tbird_ 8056 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE 8057 prefetch instructions support. 8058 8059 _athlon-4, athlon-xp, athlon-mp_ 8060 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and 8061 full SSE instruction set support. 8062 8063 _k8, opteron, athlon64, athlon-fx_ 8064 AMD K8 core based CPUs with x86-64 instruction set support. 8065 (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 8066 64-bit instruction set extensions.) 8067 8068 _winchip-c6_ 8069 IDT Winchip C6 CPU, dealt in same way as i486 with additional 8070 MMX instruction set support. 8071 8072 _winchip2_ 8073 IDT Winchip2 CPU, dealt in same way as i486 with additional 8074 MMX and 3dNOW! instruction set support. 8075 8076 _c3_ 8077 Via C3 CPU with MMX and 3dNOW! instruction set support. (No 8078 scheduling is implemented for this chip.) 8079 8080 _c3-2_ 8081 Via C3-2 CPU with MMX and SSE instruction set support. (No 8082 scheduling is implemented for this chip.) 8083 8084 While picking a specific CPU-TYPE will schedule things 8085 appropriately for that particular chip, the compiler will not 8086 generate any code that does not run on the i386 without the 8087 `-march=CPU-TYPE' option being used. 8088 8089`-march=CPU-TYPE' 8090 Generate instructions for the machine type CPU-TYPE. The choices 8091 for CPU-TYPE are the same as for `-mtune'. Moreover, specifying 8092 `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 8093 8094`-mcpu=CPU-TYPE' 8095 A deprecated synonym for `-mtune'. 8096 8097`-m386' 8098`-m486' 8099`-mpentium' 8100`-mpentiumpro' 8101 These options are synonyms for `-mtune=i386', `-mtune=i486', 8102 `-mtune=pentium', and `-mtune=pentiumpro' respectively. These 8103 synonyms are deprecated. 8104 8105`-mfpmath=UNIT' 8106 Generate floating point arithmetics for selected unit UNIT. The 8107 choices for UNIT are: 8108 8109 `387' 8110 Use the standard 387 floating point coprocessor present 8111 majority of chips and emulated otherwise. Code compiled with 8112 this option will run almost everywhere. The temporary 8113 results are computed in 80bit precision instead of precision 8114 specified by the type resulting in slightly different results 8115 compared to most of other chips. See `-ffloat-store' for more 8116 detailed description. 8117 8118 This is the default choice for i386 compiler. 8119 8120 `sse' 8121 Use scalar floating point instructions present in the SSE 8122 instruction set. This instruction set is supported by 8123 Pentium3 and newer chips, in the AMD line by Athlon-4, 8124 Athlon-xp and Athlon-mp chips. The earlier version of SSE 8125 instruction set supports only single precision arithmetics, 8126 thus the double and extended precision arithmetics is still 8127 done using 387. Later version, present only in Pentium4 and 8128 the future AMD x86-64 chips supports double precision 8129 arithmetics too. 8130 8131 For i387 you need to use `-march=CPU-TYPE', `-msse' or 8132 `-msse2' switches to enable SSE extensions and make this 8133 option effective. For x86-64 compiler, these extensions are 8134 enabled by default. 8135 8136 The resulting code should be considerably faster in the 8137 majority of cases and avoid the numerical instability 8138 problems of 387 code, but may break some existing code that 8139 expects temporaries to be 80bit. 8140 8141 This is the default choice for the x86-64 compiler. 8142 8143 `sse,387' 8144 Attempt to utilize both instruction sets at once. This 8145 effectively double the amount of available registers and on 8146 chips with separate execution units for 387 and SSE the 8147 execution resources too. Use this option with care, as it is 8148 still experimental, because the GCC register allocator does 8149 not model separate functional units well resulting in 8150 instable performance. 8151 8152`-masm=DIALECT' 8153 Output asm instructions using selected DIALECT. Supported choices 8154 are `intel' or `att' (the default one). 8155 8156`-mieee-fp' 8157`-mno-ieee-fp' 8158 Control whether or not the compiler uses IEEE floating point 8159 comparisons. These handle correctly the case where the result of a 8160 comparison is unordered. 8161 8162`-msoft-float' 8163 Generate output containing library calls for floating point. 8164 *Warning:* the requisite libraries are not part of GCC. Normally 8165 the facilities of the machine's usual C compiler are used, but 8166 this can't be done directly in cross-compilation. You must make 8167 your own arrangements to provide suitable library functions for 8168 cross-compilation. 8169 8170 On machines where a function returns floating point results in the 8171 80387 register stack, some floating point opcodes may be emitted 8172 even if `-msoft-float' is used. 8173 8174`-mno-fp-ret-in-387' 8175 Do not use the FPU registers for return values of functions. 8176 8177 The usual calling convention has functions return values of types 8178 `float' and `double' in an FPU register, even if there is no FPU. 8179 The idea is that the operating system should emulate an FPU. 8180 8181 The option `-mno-fp-ret-in-387' causes such values to be returned 8182 in ordinary CPU registers instead. 8183 8184`-mno-fancy-math-387' 8185 Some 387 emulators do not support the `sin', `cos' and `sqrt' 8186 instructions for the 387. Specify this option to avoid generating 8187 those instructions. This option is the default on FreeBSD, 8188 OpenBSD and NetBSD. This option is overridden when `-march' 8189 indicates that the target cpu will always have an FPU and so the 8190 instruction will not need emulation. As of revision 2.6.1, these 8191 instructions are not generated unless you also use the 8192 `-funsafe-math-optimizations' switch. 8193 8194`-malign-double' 8195`-mno-align-double' 8196 Control whether GCC aligns `double', `long double', and `long 8197 long' variables on a two word boundary or a one word boundary. 8198 Aligning `double' variables on a two word boundary will produce 8199 code that runs somewhat faster on a `Pentium' at the expense of 8200 more memory. 8201 8202 *Warning:* if you use the `-malign-double' switch, structures 8203 containing the above types will be aligned differently than the 8204 published application binary interface specifications for the 386 8205 and will not be binary compatible with structures in code compiled 8206 without that switch. 8207 8208`-m96bit-long-double' 8209`-m128bit-long-double' 8210 These switches control the size of `long double' type. The i386 8211 application binary interface specifies the size to be 96 bits, so 8212 `-m96bit-long-double' is the default in 32 bit mode. 8213 8214 Modern architectures (Pentium and newer) would prefer `long double' 8215 to be aligned to an 8 or 16 byte boundary. In arrays or structures 8216 conforming to the ABI, this would not be possible. So specifying a 8217 `-m128bit-long-double' will align `long double' to a 16 byte 8218 boundary by padding the `long double' with an additional 32 bit 8219 zero. 8220 8221 In the x86-64 compiler, `-m128bit-long-double' is the default 8222 choice as its ABI specifies that `long double' is to be aligned on 8223 16 byte boundary. 8224 8225 Notice that neither of these options enable any extra precision 8226 over the x87 standard of 80 bits for a `long double'. 8227 8228 *Warning:* if you override the default value for your target ABI, 8229 the structures and arrays containing `long double' variables will 8230 change their size as well as function calling convention for 8231 function taking `long double' will be modified. Hence they will 8232 not be binary compatible with arrays or structures in code 8233 compiled without that switch. 8234 8235`-msvr3-shlib' 8236`-mno-svr3-shlib' 8237 Control whether GCC places uninitialized local variables into the 8238 `bss' or `data' segments. `-msvr3-shlib' places them into `bss'. 8239 These options are meaningful only on System V Release 3. 8240 8241`-mrtd' 8242 Use a different function-calling convention, in which functions 8243 that take a fixed number of arguments return with the `ret' NUM 8244 instruction, which pops their arguments while returning. This 8245 saves one instruction in the caller since there is no need to pop 8246 the arguments there. 8247 8248 You can specify that an individual function is called with this 8249 calling sequence with the function attribute `stdcall'. You can 8250 also override the `-mrtd' option by using the function attribute 8251 `cdecl'. *Note Function Attributes::. 8252 8253 *Warning:* this calling convention is incompatible with the one 8254 normally used on Unix, so you cannot use it if you need to call 8255 libraries compiled with the Unix compiler. 8256 8257 Also, you must provide function prototypes for all functions that 8258 take variable numbers of arguments (including `printf'); otherwise 8259 incorrect code will be generated for calls to those functions. 8260 8261 In addition, seriously incorrect code will result if you call a 8262 function with too many arguments. (Normally, extra arguments are 8263 harmlessly ignored.) 8264 8265`-mregparm=NUM' 8266 Control how many registers are used to pass integer arguments. By 8267 default, no registers are used to pass arguments, and at most 3 8268 registers can be used. You can control this behavior for a 8269 specific function by using the function attribute `regparm'. 8270 *Note Function Attributes::. 8271 8272 *Warning:* if you use this switch, and NUM is nonzero, then you 8273 must build all modules with the same value, including any 8274 libraries. This includes the system libraries and startup modules. 8275 8276`-mpreferred-stack-boundary=NUM' 8277 Attempt to keep the stack boundary aligned to a 2 raised to NUM 8278 byte boundary. If `-mpreferred-stack-boundary' is not specified, 8279 the default is 4 (16 bytes or 128 bits), except when optimizing 8280 for code size (`-Os'), in which case the default is the minimum 8281 correct alignment (4 bytes for x86, and 8 bytes for x86-64). 8282 8283 On Pentium and PentiumPro, `double' and `long double' values 8284 should be aligned to an 8 byte boundary (see `-malign-double') or 8285 suffer significant run time performance penalties. On Pentium 8286 III, the Streaming SIMD Extension (SSE) data type `__m128' suffers 8287 similar penalties if it is not 16 byte aligned. 8288 8289 To ensure proper alignment of this values on the stack, the stack 8290 boundary must be as aligned as that required by any value stored 8291 on the stack. Further, every function must be generated such that 8292 it keeps the stack aligned. Thus calling a function compiled with 8293 a higher preferred stack boundary from a function compiled with a 8294 lower preferred stack boundary will most likely misalign the 8295 stack. It is recommended that libraries that use callbacks always 8296 use the default setting. 8297 8298 This extra alignment does consume extra stack space, and generally 8299 increases code size. Code that is sensitive to stack space usage, 8300 such as embedded systems and operating system kernels, may want to 8301 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 8302 8303`-mmmx' 8304`-mno-mmx' 8305 8306`-msse' 8307`-mno-sse' 8308 8309`-msse2' 8310`-mno-sse2' 8311 8312`-msse3' 8313`-mno-sse3' 8314 8315`-m3dnow' 8316`-mno-3dnow' 8317 These switches enable or disable the use of built-in functions 8318 that allow direct access to the MMX, SSE, SSE2, SSE3 and 3Dnow 8319 extensions of the instruction set. 8320 8321 *Note X86 Built-in Functions::, for details of the functions 8322 enabled and disabled by these switches. 8323 8324 To have SSE/SSE2 instructions generated automatically from 8325 floating-point code, see `-mfpmath=sse'. 8326 8327`-mpush-args' 8328`-mno-push-args' 8329 Use PUSH operations to store outgoing parameters. This method is 8330 shorter and usually equally fast as method using SUB/MOV 8331 operations and is enabled by default. In some cases disabling it 8332 may improve performance because of improved scheduling and reduced 8333 dependencies. 8334 8335`-maccumulate-outgoing-args' 8336 If enabled, the maximum amount of space required for outgoing 8337 arguments will be computed in the function prologue. This is 8338 faster on most modern CPUs because of reduced dependencies, 8339 improved scheduling and reduced stack usage when preferred stack 8340 boundary is not equal to 2. The drawback is a notable increase in 8341 code size. This switch implies `-mno-push-args'. 8342 8343`-mthreads' 8344 Support thread-safe exception handling on `Mingw32'. Code that 8345 relies on thread-safe exception handling must compile and link all 8346 code with the `-mthreads' option. When compiling, `-mthreads' 8347 defines `-D_MT'; when linking, it links in a special thread helper 8348 library `-lmingwthrd' which cleans up per thread exception 8349 handling data. 8350 8351`-mno-align-stringops' 8352 Do not align destination of inlined string operations. This 8353 switch reduces code size and improves performance in case the 8354 destination is already aligned, but GCC doesn't know about it. 8355 8356`-minline-all-stringops' 8357 By default GCC inlines string operations only when destination is 8358 known to be aligned at least to 4 byte boundary. This enables 8359 more inlining, increase code size, but may improve performance of 8360 code that depends on fast memcpy, strlen and memset for short 8361 lengths. 8362 8363`-momit-leaf-frame-pointer' 8364 Don't keep the frame pointer in a register for leaf functions. 8365 This avoids the instructions to save, set up and restore frame 8366 pointers and makes an extra register available in leaf functions. 8367 The option `-fomit-frame-pointer' removes the frame pointer for 8368 all functions which might make debugging harder. 8369 8370`-mtls-direct-seg-refs' 8371`-mno-tls-direct-seg-refs' 8372 Controls whether TLS variables may be accessed with offsets from 8373 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 8374 whether the thread base pointer must be added. Whether or not this 8375 is legal depends on the operating system, and whether it maps the 8376 segment to cover the entire TLS area. 8377 8378 For systems that use GNU libc, the default is on. 8379 8380 These `-m' switches are supported in addition to the above on AMD 8381x86-64 processors in 64-bit environments. 8382 8383`-m32' 8384`-m64' 8385 Generate code for a 32-bit or 64-bit environment. The 32-bit 8386 environment sets int, long and pointer to 32 bits and generates 8387 code that runs on any i386 system. The 64-bit environment sets 8388 int to 32 bits and long and pointer to 64 bits and generates code 8389 for AMD's x86-64 architecture. 8390 8391`-mno-red-zone' 8392 Do not use a so called red zone for x86-64 code. The red zone is 8393 mandated by the x86-64 ABI, it is a 128-byte area beyond the 8394 location of the stack pointer that will not be modified by signal 8395 or interrupt handlers and therefore can be used for temporary data 8396 without adjusting the stack pointer. The flag `-mno-red-zone' 8397 disables this red zone. 8398 8399`-mcmodel=small' 8400 Generate code for the small code model: the program and its 8401 symbols must be linked in the lower 2 GB of the address space. 8402 Pointers are 64 bits. Programs can be statically or dynamically 8403 linked. This is the default code model. 8404 8405`-mcmodel=kernel' 8406 Generate code for the kernel code model. The kernel runs in the 8407 negative 2 GB of the address space. This model has to be used for 8408 Linux kernel code. 8409 8410`-mcmodel=medium' 8411 Generate code for the medium model: The program is linked in the 8412 lower 2 GB of the address space but symbols can be located 8413 anywhere in the address space. Programs can be statically or 8414 dynamically linked, but building of shared libraries are not 8415 supported with the medium model. 8416 8417`-mcmodel=large' 8418 Generate code for the large model: This model makes no assumptions 8419 about addresses and sizes of sections. Currently GCC does not 8420 implement this model. 8421 8422 8423File: gcc.info, Node: HPPA Options, Next: Intel 960 Options, Prev: i386 and x86-64 Options, Up: Submodel Options 8424 84253.17.12 HPPA Options 8426-------------------- 8427 8428These `-m' options are defined for the HPPA family of computers: 8429 8430`-march=ARCHITECTURE-TYPE' 8431 Generate code for the specified architecture. The choices for 8432 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 8433 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 8434 an HP-UX system to determine the proper architecture option for 8435 your machine. Code compiled for lower numbered architectures will 8436 run on higher numbered architectures, but not the other way around. 8437 8438 PA 2.0 support currently requires gas snapshot 19990413 or later. 8439 The next release of binutils (current is 2.9.1) will probably 8440 contain PA 2.0 support. 8441 8442`-mpa-risc-1-0' 8443`-mpa-risc-1-1' 8444`-mpa-risc-2-0' 8445 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 8446 respectively. 8447 8448`-mbig-switch' 8449 Generate code suitable for big switch tables. Use this option 8450 only if the assembler/linker complain about out of range branches 8451 within a switch table. 8452 8453`-mjump-in-delay' 8454 Fill delay slots of function calls with unconditional jump 8455 instructions by modifying the return pointer for the function call 8456 to be the target of the conditional jump. 8457 8458`-mdisable-fpregs' 8459 Prevent floating point registers from being used in any manner. 8460 This is necessary for compiling kernels which perform lazy context 8461 switching of floating point registers. If you use this option and 8462 attempt to perform floating point operations, the compiler will 8463 abort. 8464 8465`-mdisable-indexing' 8466 Prevent the compiler from using indexing address modes. This 8467 avoids some rather obscure problems when compiling MIG generated 8468 code under MACH. 8469 8470`-mno-space-regs' 8471 Generate code that assumes the target has no space registers. 8472 This allows GCC to generate faster indirect calls and use unscaled 8473 index address modes. 8474 8475 Such code is suitable for level 0 PA systems and kernels. 8476 8477`-mfast-indirect-calls' 8478 Generate code that assumes calls never cross space boundaries. 8479 This allows GCC to emit code which performs faster indirect calls. 8480 8481 This option will not work in the presence of shared libraries or 8482 nested functions. 8483 8484`-mlong-load-store' 8485 Generate 3-instruction load and store sequences as sometimes 8486 required by the HP-UX 10 linker. This is equivalent to the `+k' 8487 option to the HP compilers. 8488 8489`-mportable-runtime' 8490 Use the portable calling conventions proposed by HP for ELF 8491 systems. 8492 8493`-mgas' 8494 Enable the use of assembler directives only GAS understands. 8495 8496`-mschedule=CPU-TYPE' 8497 Schedule code according to the constraints for the machine type 8498 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 8499 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 8500 HP-UX system to determine the proper scheduling option for your 8501 machine. The default scheduling is `8000'. 8502 8503`-mlinker-opt' 8504 Enable the optimization pass in the HP-UX linker. Note this makes 8505 symbolic debugging impossible. It also triggers a bug in the 8506 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 8507 messages when linking some programs. 8508 8509`-msoft-float' 8510 Generate output containing library calls for floating point. 8511 *Warning:* the requisite libraries are not available for all HPPA 8512 targets. Normally the facilities of the machine's usual C 8513 compiler are used, but this cannot be done directly in 8514 cross-compilation. You must make your own arrangements to provide 8515 suitable library functions for cross-compilation. The embedded 8516 target `hppa1.1-*-pro' does provide software floating point 8517 support. 8518 8519 `-msoft-float' changes the calling convention in the output file; 8520 therefore, it is only useful if you compile _all_ of a program with 8521 this option. In particular, you need to compile `libgcc.a', the 8522 library that comes with GCC, with `-msoft-float' in order for this 8523 to work. 8524 8525`-msio' 8526 Generate the predefine, `_SIO', for server IO. The default is 8527 `-mwsio'. This generates the predefines, `__hp9000s700', 8528 `__hp9000s700__' and `_WSIO', for workstation IO. These options 8529 are available under HP-UX and HI-UX. 8530 8531`-mgnu-ld' 8532 Use GNU ld specific options. This passes `-shared' to ld when 8533 building a shared library. It is the default when GCC is 8534 configured, explicitly or implicitly, with the GNU linker. This 8535 option does not have any affect on which ld is called, it only 8536 changes what parameters are passed to that ld. The ld that is 8537 called is determined by the `--with-ld' configure option, GCC's 8538 program search path, and finally by the user's `PATH'. The linker 8539 used by GCC can be printed using `which `gcc -print-prog-name=ld`'. 8540 8541`-mhp-ld' 8542 Use HP ld specific options. This passes `-b' to ld when building 8543 a shared library and passes `+Accept TypeMismatch' to ld on all 8544 links. It is the default when GCC is configured, explicitly or 8545 implicitly, with the HP linker. This option does not have any 8546 affect on which ld is called, it only changes what parameters are 8547 passed to that ld. The ld that is called is determined by the 8548 `--with-ld' configure option, GCC's program search path, and 8549 finally by the user's `PATH'. The linker used by GCC can be 8550 printed using `which `gcc -print-prog-name=ld`'. 8551 8552`-mlong-calls' 8553 Generate code that uses long call sequences. This ensures that a 8554 call is always able to reach linker generated stubs. The default 8555 is to generate long calls only when the distance from the call 8556 site to the beginning of the function or translation unit, as the 8557 case may be, exceeds a predefined limit set by the branch type 8558 being used. The limits for normal calls are 7,600,000 and 240,000 8559 bytes, respectively for the PA 2.0 and PA 1.X architectures. 8560 Sibcalls are always limited at 240,000 bytes. 8561 8562 Distances are measured from the beginning of functions when using 8563 the `-ffunction-sections' option, or when using the `-mgas' and 8564 `-mno-portable-runtime' options together under HP-UX with the SOM 8565 linker. 8566 8567 It is normally not desirable to use this option as it will degrade 8568 performance. However, it may be useful in large applications, 8569 particularly when partial linking is used to build the application. 8570 8571 The types of long calls used depends on the capabilities of the 8572 assembler and linker, and the type of code being generated. The 8573 impact on systems that support long absolute calls, and long pic 8574 symbol-difference or pc-relative calls should be relatively small. 8575 However, an indirect call is used on 32-bit ELF systems in pic code 8576 and it is quite long. 8577 8578`-nolibdld' 8579 Suppress the generation of link options to search libdld.sl when 8580 the `-static' option is specified on HP-UX 10 and later. 8581 8582`-static' 8583 The HP-UX implementation of setlocale in libc has a dependency on 8584 libdld.sl. There isn't an archive version of libdld.sl. Thus, 8585 when the `-static' option is specified, special link options are 8586 needed to resolve this dependency. 8587 8588 On HP-UX 10 and later, the GCC driver adds the necessary options to 8589 link with libdld.sl when the `-static' option is specified. This 8590 causes the resulting binary to be dynamic. On the 64-bit port, 8591 the linkers generate dynamic binaries by default in any case. The 8592 `-nolibdld' option can be used to prevent the GCC driver from 8593 adding these link options. 8594 8595`-threads' 8596 Add support for multithreading with the "dce thread" library under 8597 HP-UX. This option sets flags for both the preprocessor and 8598 linker. 8599 8600 8601File: gcc.info, Node: Intel 960 Options, Next: DEC Alpha Options, Prev: HPPA Options, Up: Submodel Options 8602 86033.17.13 Intel 960 Options 8604------------------------- 8605 8606These `-m' options are defined for the Intel 960 implementations: 8607 8608`-mCPU-TYPE' 8609 Assume the defaults for the machine type CPU-TYPE for some of the 8610 other options, including instruction scheduling, floating point 8611 support, and addressing modes. The choices for CPU-TYPE are `ka', 8612 `kb', `mc', `ca', `cf', `sa', and `sb'. The default is `kb'. 8613 8614`-mnumerics' 8615`-msoft-float' 8616 The `-mnumerics' option indicates that the processor does support 8617 floating-point instructions. The `-msoft-float' option indicates 8618 that floating-point support should not be assumed. 8619 8620`-mleaf-procedures' 8621`-mno-leaf-procedures' 8622 Do (or do not) attempt to alter leaf procedures to be callable 8623 with the `bal' instruction as well as `call'. This will result in 8624 more efficient code for explicit calls when the `bal' instruction 8625 can be substituted by the assembler or linker, but less efficient 8626 code in other cases, such as calls via function pointers, or using 8627 a linker that doesn't support this optimization. 8628 8629`-mtail-call' 8630`-mno-tail-call' 8631 Do (or do not) make additional attempts (beyond those of the 8632 machine-independent portions of the compiler) to optimize 8633 tail-recursive calls into branches. You may not want to do this 8634 because the detection of cases where this is not valid is not 8635 totally complete. The default is `-mno-tail-call'. 8636 8637`-mcomplex-addr' 8638`-mno-complex-addr' 8639 Assume (or do not assume) that the use of a complex addressing 8640 mode is a win on this implementation of the i960. Complex 8641 addressing modes may not be worthwhile on the K-series, but they 8642 definitely are on the C-series. The default is currently 8643 `-mcomplex-addr' for all processors except the CB and CC. 8644 8645`-mcode-align' 8646`-mno-code-align' 8647 Align code to 8-byte boundaries for faster fetching (or don't 8648 bother). Currently turned on by default for C-series 8649 implementations only. 8650 8651`-mic-compat' 8652`-mic2.0-compat' 8653`-mic3.0-compat' 8654 Enable compatibility with iC960 v2.0 or v3.0. 8655 8656`-masm-compat' 8657`-mintel-asm' 8658 Enable compatibility with the iC960 assembler. 8659 8660`-mstrict-align' 8661`-mno-strict-align' 8662 Do not permit (do permit) unaligned accesses. 8663 8664`-mold-align' 8665 Enable structure-alignment compatibility with Intel's gcc release 8666 version 1.3 (based on gcc 1.37). This option implies 8667 `-mstrict-align'. 8668 8669`-mlong-double-64' 8670 Implement type `long double' as 64-bit floating point numbers. 8671 Without the option `long double' is implemented by 80-bit floating 8672 point numbers. The only reason we have it because there is no 8673 128-bit `long double' support in `fp-bit.c' yet. So it is only 8674 useful for people using soft-float targets. Otherwise, we should 8675 recommend against use of it. 8676 8677 8678 8679File: gcc.info, Node: DEC Alpha Options, Next: DEC Alpha/VMS Options, Prev: Intel 960 Options, Up: Submodel Options 8680 86813.17.14 DEC Alpha Options 8682------------------------- 8683 8684These `-m' options are defined for the DEC Alpha implementations: 8685 8686`-mno-soft-float' 8687`-msoft-float' 8688 Use (do not use) the hardware floating-point instructions for 8689 floating-point operations. When `-msoft-float' is specified, 8690 functions in `libgcc.a' will be used to perform floating-point 8691 operations. Unless they are replaced by routines that emulate the 8692 floating-point operations, or compiled in such a way as to call 8693 such emulations routines, these routines will issue floating-point 8694 operations. If you are compiling for an Alpha without 8695 floating-point operations, you must ensure that the library is 8696 built so as not to call them. 8697 8698 Note that Alpha implementations without floating-point operations 8699 are required to have floating-point registers. 8700 8701`-mfp-reg' 8702`-mno-fp-regs' 8703 Generate code that uses (does not use) the floating-point register 8704 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 8705 register set is not used, floating point operands are passed in 8706 integer registers as if they were integers and floating-point 8707 results are passed in `$0' instead of `$f0'. This is a 8708 non-standard calling sequence, so any function with a 8709 floating-point argument or return value called by code compiled 8710 with `-mno-fp-regs' must also be compiled with that option. 8711 8712 A typical use of this option is building a kernel that does not 8713 use, and hence need not save and restore, any floating-point 8714 registers. 8715 8716`-mieee' 8717 The Alpha architecture implements floating-point hardware 8718 optimized for maximum performance. It is mostly compliant with 8719 the IEEE floating point standard. However, for full compliance, 8720 software assistance is required. This option generates code fully 8721 IEEE compliant code _except_ that the INEXACT-FLAG is not 8722 maintained (see below). If this option is turned on, the 8723 preprocessor macro `_IEEE_FP' is defined during compilation. The 8724 resulting code is less efficient but is able to correctly support 8725 denormalized numbers and exceptional IEEE values such as 8726 not-a-number and plus/minus infinity. Other Alpha compilers call 8727 this option `-ieee_with_no_inexact'. 8728 8729`-mieee-with-inexact' 8730 This is like `-mieee' except the generated code also maintains the 8731 IEEE INEXACT-FLAG. Turning on this option causes the generated 8732 code to implement fully-compliant IEEE math. In addition to 8733 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 8734 On some Alpha implementations the resulting code may execute 8735 significantly slower than the code generated by default. Since 8736 there is very little code that depends on the INEXACT-FLAG, you 8737 should normally not specify this option. Other Alpha compilers 8738 call this option `-ieee_with_inexact'. 8739 8740`-mfp-trap-mode=TRAP-MODE' 8741 This option controls what floating-point related traps are enabled. 8742 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 8743 trap mode can be set to one of four values: 8744 8745 `n' 8746 This is the default (normal) setting. The only traps that 8747 are enabled are the ones that cannot be disabled in software 8748 (e.g., division by zero trap). 8749 8750 `u' 8751 In addition to the traps enabled by `n', underflow traps are 8752 enabled as well. 8753 8754 `su' 8755 Like `su', but the instructions are marked to be safe for 8756 software completion (see Alpha architecture manual for 8757 details). 8758 8759 `sui' 8760 Like `su', but inexact traps are enabled as well. 8761 8762`-mfp-rounding-mode=ROUNDING-MODE' 8763 Selects the IEEE rounding mode. Other Alpha compilers call this 8764 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 8765 8766 `n' 8767 Normal IEEE rounding mode. Floating point numbers are 8768 rounded towards the nearest machine number or towards the 8769 even machine number in case of a tie. 8770 8771 `m' 8772 Round towards minus infinity. 8773 8774 `c' 8775 Chopped rounding mode. Floating point numbers are rounded 8776 towards zero. 8777 8778 `d' 8779 Dynamic rounding mode. A field in the floating point control 8780 register (FPCR, see Alpha architecture reference manual) 8781 controls the rounding mode in effect. The C library 8782 initializes this register for rounding towards plus infinity. 8783 Thus, unless your program modifies the FPCR, `d' corresponds 8784 to round towards plus infinity. 8785 8786`-mtrap-precision=TRAP-PRECISION' 8787 In the Alpha architecture, floating point traps are imprecise. 8788 This means without software assistance it is impossible to recover 8789 from a floating trap and program execution normally needs to be 8790 terminated. GCC can generate code that can assist operating 8791 system trap handlers in determining the exact location that caused 8792 a floating point trap. Depending on the requirements of an 8793 application, different levels of precisions can be selected: 8794 8795 `p' 8796 Program precision. This option is the default and means a 8797 trap handler can only identify which program caused a 8798 floating point exception. 8799 8800 `f' 8801 Function precision. The trap handler can determine the 8802 function that caused a floating point exception. 8803 8804 `i' 8805 Instruction precision. The trap handler can determine the 8806 exact instruction that caused a floating point exception. 8807 8808 Other Alpha compilers provide the equivalent options called 8809 `-scope_safe' and `-resumption_safe'. 8810 8811`-mieee-conformant' 8812 This option marks the generated code as IEEE conformant. You must 8813 not use this option unless you also specify `-mtrap-precision=i' 8814 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 8815 effect is to emit the line `.eflag 48' in the function prologue of 8816 the generated assembly file. Under DEC Unix, this has the effect 8817 that IEEE-conformant math library routines will be linked in. 8818 8819`-mbuild-constants' 8820 Normally GCC examines a 32- or 64-bit integer constant to see if 8821 it can construct it from smaller constants in two or three 8822 instructions. If it cannot, it will output the constant as a 8823 literal and generate code to load it from the data segment at 8824 runtime. 8825 8826 Use this option to require GCC to construct _all_ integer constants 8827 using code, even if it takes more instructions (the maximum is 8828 six). 8829 8830 You would typically use this option to build a shared library 8831 dynamic loader. Itself a shared library, it must relocate itself 8832 in memory before it can find the variables and constants in its 8833 own data segment. 8834 8835`-malpha-as' 8836`-mgas' 8837 Select whether to generate code to be assembled by the 8838 vendor-supplied assembler (`-malpha-as') or by the GNU assembler 8839 `-mgas'. 8840 8841`-mbwx' 8842`-mno-bwx' 8843`-mcix' 8844`-mno-cix' 8845`-mfix' 8846`-mno-fix' 8847`-mmax' 8848`-mno-max' 8849 Indicate whether GCC should generate code to use the optional BWX, 8850 CIX, FIX and MAX instruction sets. The default is to use the 8851 instruction sets supported by the CPU type specified via `-mcpu=' 8852 option or that of the CPU on which GCC was built if none was 8853 specified. 8854 8855`-mfloat-vax' 8856`-mfloat-ieee' 8857 Generate code that uses (does not use) VAX F and G floating point 8858 arithmetic instead of IEEE single and double precision. 8859 8860`-mexplicit-relocs' 8861`-mno-explicit-relocs' 8862 Older Alpha assemblers provided no way to generate symbol 8863 relocations except via assembler macros. Use of these macros does 8864 not allow optimal instruction scheduling. GNU binutils as of 8865 version 2.12 supports a new syntax that allows the compiler to 8866 explicitly mark which relocations should apply to which 8867 instructions. This option is mostly useful for debugging, as GCC 8868 detects the capabilities of the assembler when it is built and 8869 sets the default accordingly. 8870 8871`-msmall-data' 8872`-mlarge-data' 8873 When `-mexplicit-relocs' is in effect, static data is accessed via 8874 "gp-relative" relocations. When `-msmall-data' is used, objects 8 8875 bytes long or smaller are placed in a "small data area" (the 8876 `.sdata' and `.sbss' sections) and are accessed via 16-bit 8877 relocations off of the `$gp' register. This limits the size of 8878 the small data area to 64KB, but allows the variables to be 8879 directly accessed via a single instruction. 8880 8881 The default is `-mlarge-data'. With this option the data area is 8882 limited to just below 2GB. Programs that require more than 2GB of 8883 data must use `malloc' or `mmap' to allocate the data in the heap 8884 instead of in the program's data segment. 8885 8886 When generating code for shared libraries, `-fpic' implies 8887 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 8888 8889`-msmall-text' 8890`-mlarge-text' 8891 When `-msmall-text' is used, the compiler assumes that the code of 8892 the entire program (or shared library) fits in 4MB, and is thus 8893 reachable with a branch instruction. When `-msmall-data' is used, 8894 the compiler can assume that all local symbols share the same 8895 `$gp' value, and thus reduce the number of instructions required 8896 for a function call from 4 to 1. 8897 8898 The default is `-mlarge-text'. 8899 8900`-mcpu=CPU_TYPE' 8901 Set the instruction set and instruction scheduling parameters for 8902 machine type CPU_TYPE. You can specify either the `EV' style name 8903 or the corresponding chip number. GCC supports scheduling 8904 parameters for the EV4, EV5 and EV6 family of processors and will 8905 choose the default values for the instruction set from the 8906 processor you specify. If you do not specify a processor type, 8907 GCC will default to the processor on which the compiler was built. 8908 8909 Supported values for CPU_TYPE are 8910 8911 `ev4' 8912 `ev45' 8913 `21064' 8914 Schedules as an EV4 and has no instruction set extensions. 8915 8916 `ev5' 8917 `21164' 8918 Schedules as an EV5 and has no instruction set extensions. 8919 8920 `ev56' 8921 `21164a' 8922 Schedules as an EV5 and supports the BWX extension. 8923 8924 `pca56' 8925 `21164pc' 8926 `21164PC' 8927 Schedules as an EV5 and supports the BWX and MAX extensions. 8928 8929 `ev6' 8930 `21264' 8931 Schedules as an EV6 and supports the BWX, FIX, and MAX 8932 extensions. 8933 8934 `ev67' 8935 `21264a' 8936 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 8937 extensions. 8938 8939`-mtune=CPU_TYPE' 8940 Set only the instruction scheduling parameters for machine type 8941 CPU_TYPE. The instruction set is not changed. 8942 8943`-mmemory-latency=TIME' 8944 Sets the latency the scheduler should assume for typical memory 8945 references as seen by the application. This number is highly 8946 dependent on the memory access patterns used by the application 8947 and the size of the external cache on the machine. 8948 8949 Valid options for TIME are 8950 8951 `NUMBER' 8952 A decimal number representing clock cycles. 8953 8954 `L1' 8955 `L2' 8956 `L3' 8957 `main' 8958 The compiler contains estimates of the number of clock cycles 8959 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 8960 (also called Dcache, Scache, and Bcache), as well as to main 8961 memory. Note that L3 is only valid for EV5. 8962 8963 8964 8965File: gcc.info, Node: DEC Alpha/VMS Options, Next: H8/300 Options, Prev: DEC Alpha Options, Up: Submodel Options 8966 89673.17.15 DEC Alpha/VMS Options 8968----------------------------- 8969 8970These `-m' options are defined for the DEC Alpha/VMS implementations: 8971 8972`-mvms-return-codes' 8973 Return VMS condition codes from main. The default is to return 8974 POSIX style condition (e.g. error) codes. 8975 8976 8977File: gcc.info, Node: H8/300 Options, Next: SH Options, Prev: DEC Alpha/VMS Options, Up: Submodel Options 8978 89793.17.16 H8/300 Options 8980---------------------- 8981 8982These `-m' options are defined for the H8/300 implementations: 8983 8984`-mrelax' 8985 Shorten some address references at link time, when possible; uses 8986 the linker option `-relax'. *Note `ld' and the H8/300: 8987 (ld)H8/300, for a fuller description. 8988 8989`-mh' 8990 Generate code for the H8/300H. 8991 8992`-ms' 8993 Generate code for the H8S. 8994 8995`-mn' 8996 Generate code for the H8S and H8/300H in the normal mode. This 8997 switch must be used either with -mh or -ms. 8998 8999`-ms2600' 9000 Generate code for the H8S/2600. This switch must be used with 9001 `-ms'. 9002 9003`-mint32' 9004 Make `int' data 32 bits by default. 9005 9006`-malign-300' 9007 On the H8/300H and H8S, use the same alignment rules as for the 9008 H8/300. The default for the H8/300H and H8S is to align longs and 9009 floats on 4 byte boundaries. `-malign-300' causes them to be 9010 aligned on 2 byte boundaries. This option has no effect on the 9011 H8/300. 9012 9013 9014File: gcc.info, Node: SH Options, Next: System V Options, Prev: H8/300 Options, Up: Submodel Options 9015 90163.17.17 SH Options 9017------------------ 9018 9019These `-m' options are defined for the SH implementations: 9020 9021`-m1' 9022 Generate code for the SH1. 9023 9024`-m2' 9025 Generate code for the SH2. 9026 9027`-m2e' 9028 Generate code for the SH2e. 9029 9030`-m3' 9031 Generate code for the SH3. 9032 9033`-m3e' 9034 Generate code for the SH3e. 9035 9036`-m4-nofpu' 9037 Generate code for the SH4 without a floating-point unit. 9038 9039`-m4-single-only' 9040 Generate code for the SH4 with a floating-point unit that only 9041 supports single-precision arithmetic. 9042 9043`-m4-single' 9044 Generate code for the SH4 assuming the floating-point unit is in 9045 single-precision mode by default. 9046 9047`-m4' 9048 Generate code for the SH4. 9049 9050`-mb' 9051 Compile code for the processor in big endian mode. 9052 9053`-ml' 9054 Compile code for the processor in little endian mode. 9055 9056`-mdalign' 9057 Align doubles at 64-bit boundaries. Note that this changes the 9058 calling conventions, and thus some functions from the standard C 9059 library will not work unless you recompile it first with 9060 `-mdalign'. 9061 9062`-mrelax' 9063 Shorten some address references at link time, when possible; uses 9064 the linker option `-relax'. 9065 9066`-mbigtable' 9067 Use 32-bit offsets in `switch' tables. The default is to use 9068 16-bit offsets. 9069 9070`-mfmovd' 9071 Enable the use of the instruction `fmovd'. 9072 9073`-mhitachi' 9074 Comply with the calling conventions defined by Renesas. 9075 9076`-mnomacsave' 9077 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is 9078 given. 9079 9080`-mieee' 9081 Increase IEEE-compliance of floating-point code. 9082 9083`-misize' 9084 Dump instruction size and location in the assembly code. 9085 9086`-mpadstruct' 9087 This option is deprecated. It pads structures to multiple of 4 9088 bytes, which is incompatible with the SH ABI. 9089 9090`-mspace' 9091 Optimize for space instead of speed. Implied by `-Os'. 9092 9093`-mprefergot' 9094 When generating position-independent code, emit function calls 9095 using the Global Offset Table instead of the Procedure Linkage 9096 Table. 9097 9098`-musermode' 9099 Generate a library function call to invalidate instruction cache 9100 entries, after fixing up a trampoline. This library function call 9101 doesn't assume it can write to the whole memory address space. 9102 This is the default when the target is `sh-*-linux*'. 9103 9104 9105File: gcc.info, Node: System V Options, Next: TMS320C3x/C4x Options, Prev: SH Options, Up: Submodel Options 9106 91073.17.18 Options for System V 9108---------------------------- 9109 9110These additional options are available on System V Release 4 for 9111compatibility with other compilers on those systems: 9112 9113`-G' 9114 Create a shared object. It is recommended that `-symbolic' or 9115 `-shared' be used instead. 9116 9117`-Qy' 9118 Identify the versions of each tool used by the compiler, in a 9119 `.ident' assembler directive in the output. 9120 9121`-Qn' 9122 Refrain from adding `.ident' directives to the output file (this is 9123 the default). 9124 9125`-YP,DIRS' 9126 Search the directories DIRS, and no others, for libraries 9127 specified with `-l'. 9128 9129`-Ym,DIR' 9130 Look in the directory DIR to find the M4 preprocessor. The 9131 assembler uses this option. 9132 9133 9134File: gcc.info, Node: TMS320C3x/C4x Options, Next: V850 Options, Prev: System V Options, Up: Submodel Options 9135 91363.17.19 TMS320C3x/C4x Options 9137----------------------------- 9138 9139These `-m' options are defined for TMS320C3x/C4x implementations: 9140 9141`-mcpu=CPU_TYPE' 9142 Set the instruction set, register set, and instruction scheduling 9143 parameters for machine type CPU_TYPE. Supported values for 9144 CPU_TYPE are `c30', `c31', `c32', `c40', and `c44'. The default 9145 is `c40' to generate code for the TMS320C40. 9146 9147`-mbig-memory' 9148`-mbig' 9149`-msmall-memory' 9150`-msmall' 9151 Generates code for the big or small memory model. The small memory 9152 model assumed that all data fits into one 64K word page. At 9153 run-time the data page (DP) register must be set to point to the 9154 64K page containing the .bss and .data program sections. The big 9155 memory model is the default and requires reloading of the DP 9156 register for every direct memory access. 9157 9158`-mbk' 9159`-mno-bk' 9160 Allow (disallow) allocation of general integer operands into the 9161 block count register BK. 9162 9163`-mdb' 9164`-mno-db' 9165 Enable (disable) generation of code using decrement and branch, 9166 DBcond(D), instructions. This is enabled by default for the C4x. 9167 To be on the safe side, this is disabled for the C3x, since the 9168 maximum iteration count on the C3x is 2^23 + 1 (but who iterates 9169 loops more than 2^23 times on the C3x?). Note that GCC will try 9170 to reverse a loop so that it can utilize the decrement and branch 9171 instruction, but will give up if there is more than one memory 9172 reference in the loop. Thus a loop where the loop counter is 9173 decremented can generate slightly more efficient code, in cases 9174 where the RPTB instruction cannot be utilized. 9175 9176`-mdp-isr-reload' 9177`-mparanoid' 9178 Force the DP register to be saved on entry to an interrupt service 9179 routine (ISR), reloaded to point to the data section, and restored 9180 on exit from the ISR. This should not be required unless someone 9181 has violated the small memory model by modifying the DP register, 9182 say within an object library. 9183 9184`-mmpyi' 9185`-mno-mpyi' 9186 For the C3x use the 24-bit MPYI instruction for integer multiplies 9187 instead of a library call to guarantee 32-bit results. Note that 9188 if one of the operands is a constant, then the multiplication will 9189 be performed using shifts and adds. If the `-mmpyi' option is not 9190 specified for the C3x, then squaring operations are performed 9191 inline instead of a library call. 9192 9193`-mfast-fix' 9194`-mno-fast-fix' 9195 The C3x/C4x FIX instruction to convert a floating point value to an 9196 integer value chooses the nearest integer less than or equal to the 9197 floating point value rather than to the nearest integer. Thus if 9198 the floating point number is negative, the result will be 9199 incorrectly truncated an additional code is necessary to detect 9200 and correct this case. This option can be used to disable 9201 generation of the additional code required to correct the result. 9202 9203`-mrptb' 9204`-mno-rptb' 9205 Enable (disable) generation of repeat block sequences using the 9206 RPTB instruction for zero overhead looping. The RPTB construct is 9207 only used for innermost loops that do not call functions or jump 9208 across the loop boundaries. There is no advantage having nested 9209 RPTB loops due to the overhead required to save and restore the 9210 RC, RS, and RE registers. This is enabled by default with `-O2'. 9211 9212`-mrpts=COUNT' 9213`-mno-rpts' 9214 Enable (disable) the use of the single instruction repeat 9215 instruction RPTS. If a repeat block contains a single 9216 instruction, and the loop count can be guaranteed to be less than 9217 the value COUNT, GCC will emit a RPTS instruction instead of a 9218 RPTB. If no value is specified, then a RPTS will be emitted even 9219 if the loop count cannot be determined at compile time. Note that 9220 the repeated instruction following RPTS does not have to be 9221 reloaded from memory each iteration, thus freeing up the CPU buses 9222 for operands. However, since interrupts are blocked by this 9223 instruction, it is disabled by default. 9224 9225`-mloop-unsigned' 9226`-mno-loop-unsigned' 9227 The maximum iteration count when using RPTS and RPTB (and DB on 9228 the C40) is 2^31 + 1 since these instructions test if the 9229 iteration count is negative to terminate the loop. If the 9230 iteration count is unsigned there is a possibility than the 2^31 + 9231 1 maximum iteration count may be exceeded. This switch allows an 9232 unsigned iteration count. 9233 9234`-mti' 9235 Try to emit an assembler syntax that the TI assembler (asm30) is 9236 happy with. This also enforces compatibility with the API 9237 employed by the TI C3x C compiler. For example, long doubles are 9238 passed as structures rather than in floating point registers. 9239 9240`-mregparm' 9241`-mmemparm' 9242 Generate code that uses registers (stack) for passing arguments to 9243 functions. By default, arguments are passed in registers where 9244 possible rather than by pushing arguments on to the stack. 9245 9246`-mparallel-insns' 9247`-mno-parallel-insns' 9248 Allow the generation of parallel instructions. This is enabled by 9249 default with `-O2'. 9250 9251`-mparallel-mpy' 9252`-mno-parallel-mpy' 9253 Allow the generation of MPY||ADD and MPY||SUB parallel 9254 instructions, provided `-mparallel-insns' is also specified. 9255 These instructions have tight register constraints which can 9256 pessimize the code generation of large functions. 9257 9258 9259 9260File: gcc.info, Node: V850 Options, Next: ARC Options, Prev: TMS320C3x/C4x Options, Up: Submodel Options 9261 92623.17.20 V850 Options 9263-------------------- 9264 9265These `-m' options are defined for V850 implementations: 9266 9267`-mlong-calls' 9268`-mno-long-calls' 9269 Treat all calls as being far away (near). If calls are assumed to 9270 be far away, the compiler will always load the functions address 9271 up into a register, and call indirect through the pointer. 9272 9273`-mno-ep' 9274`-mep' 9275 Do not optimize (do optimize) basic blocks that use the same index 9276 pointer 4 or more times to copy pointer into the `ep' register, and 9277 use the shorter `sld' and `sst' instructions. The `-mep' option 9278 is on by default if you optimize. 9279 9280`-mno-prolog-function' 9281`-mprolog-function' 9282 Do not use (do use) external functions to save and restore 9283 registers at the prologue and epilogue of a function. The 9284 external functions are slower, but use less code space if more 9285 than one function saves the same number of registers. The 9286 `-mprolog-function' option is on by default if you optimize. 9287 9288`-mspace' 9289 Try to make the code as small as possible. At present, this just 9290 turns on the `-mep' and `-mprolog-function' options. 9291 9292`-mtda=N' 9293 Put static or global variables whose size is N bytes or less into 9294 the tiny data area that register `ep' points to. The tiny data 9295 area can hold up to 256 bytes in total (128 bytes for byte 9296 references). 9297 9298`-msda=N' 9299 Put static or global variables whose size is N bytes or less into 9300 the small data area that register `gp' points to. The small data 9301 area can hold up to 64 kilobytes. 9302 9303`-mzda=N' 9304 Put static or global variables whose size is N bytes or less into 9305 the first 32 kilobytes of memory. 9306 9307`-mv850' 9308 Specify that the target processor is the V850. 9309 9310`-mbig-switch' 9311 Generate code suitable for big switch tables. Use this option 9312 only if the assembler/linker complain about out of range branches 9313 within a switch table. 9314 9315`-mapp-regs' 9316 This option will cause r2 and r5 to be used in the code generated 9317 by the compiler. This setting is the default. 9318 9319`-mno-app-regs' 9320 This option will cause r2 and r5 to be treated as fixed registers. 9321 9322`-mv850e1' 9323 Specify that the target processor is the V850E1. The preprocessor 9324 constants `__v850e1__' and `__v850e__' will be defined if this 9325 option is used. 9326 9327`-mv850e' 9328 Specify that the target processor is the V850E. The preprocessor 9329 constant `__v850e__' will be defined if this option is used. 9330 9331 If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then 9332 a default target processor will be chosen and the relevant 9333 `__v850*__' preprocessor constant will be defined. 9334 9335 The preprocessor constants `__v850' and `__v851__' are always 9336 defined, regardless of which processor variant is the target. 9337 9338`-mdisable-callt' 9339 This option will suppress generation of the CALLT instruction for 9340 the v850e and v850e1 flavors of the v850 architecture. The 9341 default is `-mno-disable-callt' which allows the CALLT instruction 9342 to be used. 9343 9344 9345 9346File: gcc.info, Node: ARC Options, Next: NS32K Options, Prev: V850 Options, Up: Submodel Options 9347 93483.17.21 ARC Options 9349------------------- 9350 9351These options are defined for ARC implementations: 9352 9353`-EL' 9354 Compile code for little endian mode. This is the default. 9355 9356`-EB' 9357 Compile code for big endian mode. 9358 9359`-mmangle-cpu' 9360 Prepend the name of the cpu to all public symbol names. In 9361 multiple-processor systems, there are many ARC variants with 9362 different instruction and register set characteristics. This flag 9363 prevents code compiled for one cpu to be linked with code compiled 9364 for another. No facility exists for handling variants that are 9365 "almost identical". This is an all or nothing option. 9366 9367`-mcpu=CPU' 9368 Compile code for ARC variant CPU. Which variants are supported 9369 depend on the configuration. All variants support `-mcpu=base', 9370 this is the default. 9371 9372`-mtext=TEXT-SECTION' 9373`-mdata=DATA-SECTION' 9374`-mrodata=READONLY-DATA-SECTION' 9375 Put functions, data, and readonly data in TEXT-SECTION, 9376 DATA-SECTION, and READONLY-DATA-SECTION respectively by default. 9377 This can be overridden with the `section' attribute. *Note 9378 Variable Attributes::. 9379 9380 9381 9382File: gcc.info, Node: NS32K Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 9383 93843.17.22 NS32K Options 9385--------------------- 9386 9387These are the `-m' options defined for the 32000 series. The default 9388values for these options depends on which style of 32000 was selected 9389when the compiler was configured; the defaults for the most common 9390choices are given below. 9391 9392`-m32032' 9393`-m32032' 9394 Generate output for a 32032. This is the default when the 9395 compiler is configured for 32032 and 32016 based systems. 9396 9397`-m32332' 9398`-m32332' 9399 Generate output for a 32332. This is the default when the 9400 compiler is configured for 32332-based systems. 9401 9402`-m32532' 9403`-m32532' 9404 Generate output for a 32532. This is the default when the 9405 compiler is configured for 32532-based systems. 9406 9407`-m32081' 9408 Generate output containing 32081 instructions for floating point. 9409 This is the default for all systems. 9410 9411`-m32381' 9412 Generate output containing 32381 instructions for floating point. 9413 This also implies `-m32081'. The 32381 is only compatible with 9414 the 32332 and 32532 cpus. This is the default for the 9415 pc532-netbsd configuration. 9416 9417`-mmulti-add' 9418 Try and generate multiply-add floating point instructions `polyF' 9419 and `dotF'. This option is only available if the `-m32381' option 9420 is in effect. Using these instructions requires changes to 9421 register allocation which generally has a negative impact on 9422 performance. This option should only be enabled when compiling 9423 code particularly likely to make heavy use of multiply-add 9424 instructions. 9425 9426`-mnomulti-add' 9427 Do not try and generate multiply-add floating point instructions 9428 `polyF' and `dotF'. This is the default on all platforms. 9429 9430`-msoft-float' 9431 Generate output containing library calls for floating point. 9432 *Warning:* the requisite libraries may not be available. 9433 9434`-mieee-compare' 9435`-mno-ieee-compare' 9436 Control whether or not the compiler uses IEEE floating point 9437 comparisons. These handle correctly the case where the result of a 9438 comparison is unordered. *Warning:* the requisite kernel support 9439 may not be available. 9440 9441`-mnobitfield' 9442 Do not use the bit-field instructions. On some machines it is 9443 faster to use shifting and masking operations. This is the 9444 default for the pc532. 9445 9446`-mbitfield' 9447 Do use the bit-field instructions. This is the default for all 9448 platforms except the pc532. 9449 9450`-mrtd' 9451 Use a different function-calling convention, in which functions 9452 that take a fixed number of arguments return pop their arguments 9453 on return with the `ret' instruction. 9454 9455 This calling convention is incompatible with the one normally used 9456 on Unix, so you cannot use it if you need to call libraries 9457 compiled with the Unix compiler. 9458 9459 Also, you must provide function prototypes for all functions that 9460 take variable numbers of arguments (including `printf'); otherwise 9461 incorrect code will be generated for calls to those functions. 9462 9463 In addition, seriously incorrect code will result if you call a 9464 function with too many arguments. (Normally, extra arguments are 9465 harmlessly ignored.) 9466 9467 This option takes its name from the 680x0 `rtd' instruction. 9468 9469`-mregparam' 9470 Use a different function-calling convention where the first two 9471 arguments are passed in registers. 9472 9473 This calling convention is incompatible with the one normally used 9474 on Unix, so you cannot use it if you need to call libraries 9475 compiled with the Unix compiler. 9476 9477`-mnoregparam' 9478 Do not pass any arguments in registers. This is the default for 9479 all targets. 9480 9481`-msb' 9482 It is OK to use the sb as an index register which is always loaded 9483 with zero. This is the default for the pc532-netbsd target. 9484 9485`-mnosb' 9486 The sb register is not available for use or has not been 9487 initialized to zero by the run time system. This is the default 9488 for all targets except the pc532-netbsd. It is also implied 9489 whenever `-mhimem' or `-fpic' is set. 9490 9491`-mhimem' 9492 Many ns32000 series addressing modes use displacements of up to 9493 512MB. If an address is above 512MB then displacements from zero 9494 can not be used. This option causes code to be generated which 9495 can be loaded above 512MB. This may be useful for operating 9496 systems or ROM code. 9497 9498`-mnohimem' 9499 Assume code will be loaded in the first 512MB of virtual address 9500 space. This is the default for all platforms. 9501 9502 9503 9504File: gcc.info, Node: AVR Options, Next: MCore Options, Prev: NS32K Options, Up: Submodel Options 9505 95063.17.23 AVR Options 9507------------------- 9508 9509These options are defined for AVR implementations: 9510 9511`-mmcu=MCU' 9512 Specify ATMEL AVR instruction set or MCU type. 9513 9514 Instruction set avr1 is for the minimal AVR core, not supported by 9515 the C compiler, only for assembler programs (MCU types: at90s1200, 9516 attiny10, attiny11, attiny12, attiny15, attiny28). 9517 9518 Instruction set avr2 (default) is for the classic AVR core with up 9519 to 8K program memory space (MCU types: at90s2313, at90s2323, 9520 attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, 9521 at90s8515, at90c8534, at90s8535). 9522 9523 Instruction set avr3 is for the classic AVR core with up to 128K 9524 program memory space (MCU types: atmega103, atmega603, at43usb320, 9525 at76c711). 9526 9527 Instruction set avr4 is for the enhanced AVR core with up to 8K 9528 program memory space (MCU types: atmega8, atmega83, atmega85). 9529 9530 Instruction set avr5 is for the enhanced AVR core with up to 128K 9531 program memory space (MCU types: atmega16, atmega161, atmega163, 9532 atmega32, atmega323, atmega64, atmega128, at43usb355, at94k). 9533 9534`-msize' 9535 Output instruction sizes to the asm file. 9536 9537`-minit-stack=N' 9538 Specify the initial stack address, which may be a symbol or 9539 numeric value, `__stack' is the default. 9540 9541`-mno-interrupts' 9542 Generated code is not compatible with hardware interrupts. Code 9543 size will be smaller. 9544 9545`-mcall-prologues' 9546 Functions prologues/epilogues expanded as call to appropriate 9547 subroutines. Code size will be smaller. 9548 9549`-mno-tablejump' 9550 Do not generate tablejump insns which sometimes increase code size. 9551 9552`-mtiny-stack' 9553 Change only the low 8 bits of the stack pointer. 9554 9555 9556File: gcc.info, Node: MCore Options, Next: IA-64 Options, Prev: AVR Options, Up: Submodel Options 9557 95583.17.24 MCore Options 9559--------------------- 9560 9561These are the `-m' options defined for the Motorola M*Core processors. 9562 9563`-mhardlit' 9564`-mno-hardlit' 9565 Inline constants into the code stream if it can be done in two 9566 instructions or less. 9567 9568`-mdiv' 9569`-mno-div' 9570 Use the divide instruction. (Enabled by default). 9571 9572`-mrelax-immediate' 9573`-mno-relax-immediate' 9574 Allow arbitrary sized immediates in bit operations. 9575 9576`-mwide-bitfields' 9577`-mno-wide-bitfields' 9578 Always treat bit-fields as int-sized. 9579 9580`-m4byte-functions' 9581`-mno-4byte-functions' 9582 Force all functions to be aligned to a four byte boundary. 9583 9584`-mcallgraph-data' 9585`-mno-callgraph-data' 9586 Emit callgraph information. 9587 9588`-mslow-bytes' 9589`-mno-slow-bytes' 9590 Prefer word access when reading byte quantities. 9591 9592`-mlittle-endian' 9593`-mbig-endian' 9594 Generate code for a little endian target. 9595 9596`-m210' 9597`-m340' 9598 Generate code for the 210 processor. 9599 9600 9601File: gcc.info, Node: IA-64 Options, Next: D30V Options, Prev: MCore Options, Up: Submodel Options 9602 96033.17.25 IA-64 Options 9604--------------------- 9605 9606These are the `-m' options defined for the Intel IA-64 architecture. 9607 9608`-mbig-endian' 9609 Generate code for a big endian target. This is the default for 9610 HP-UX. 9611 9612`-mlittle-endian' 9613 Generate code for a little endian target. This is the default for 9614 AIX5 and GNU/Linux. 9615 9616`-mgnu-as' 9617`-mno-gnu-as' 9618 Generate (or don't) code for the GNU assembler. This is the 9619 default. 9620 9621`-mgnu-ld' 9622`-mno-gnu-ld' 9623 Generate (or don't) code for the GNU linker. This is the default. 9624 9625`-mno-pic' 9626 Generate code that does not use a global pointer register. The 9627 result is not position independent code, and violates the IA-64 9628 ABI. 9629 9630`-mvolatile-asm-stop' 9631`-mno-volatile-asm-stop' 9632 Generate (or don't) a stop bit immediately before and after 9633 volatile asm statements. 9634 9635`-mb-step' 9636 Generate code that works around Itanium B step errata. 9637 9638`-mregister-names' 9639`-mno-register-names' 9640 Generate (or don't) `in', `loc', and `out' register names for the 9641 stacked registers. This may make assembler output more readable. 9642 9643`-mno-sdata' 9644`-msdata' 9645 Disable (or enable) optimizations that use the small data section. 9646 This may be useful for working around optimizer bugs. 9647 9648`-mconstant-gp' 9649 Generate code that uses a single constant global pointer value. 9650 This is useful when compiling kernel code. 9651 9652`-mauto-pic' 9653 Generate code that is self-relocatable. This implies 9654 `-mconstant-gp'. This is useful when compiling firmware code. 9655 9656`-minline-float-divide-min-latency' 9657 Generate code for inline divides of floating point values using 9658 the minimum latency algorithm. 9659 9660`-minline-float-divide-max-throughput' 9661 Generate code for inline divides of floating point values using 9662 the maximum throughput algorithm. 9663 9664`-minline-int-divide-min-latency' 9665 Generate code for inline divides of integer values using the 9666 minimum latency algorithm. 9667 9668`-minline-int-divide-max-throughput' 9669 Generate code for inline divides of integer values using the 9670 maximum throughput algorithm. 9671 9672`-mno-dwarf2-asm' 9673`-mdwarf2-asm' 9674 Don't (or do) generate assembler code for the DWARF2 line number 9675 debugging info. This may be useful when not using the GNU 9676 assembler. 9677 9678`-mfixed-range=REGISTER-RANGE' 9679 Generate code treating the given register range as fixed registers. 9680 A fixed register is one that the register allocator can not use. 9681 This is useful when compiling kernel code. A register range is 9682 specified as two registers separated by a dash. Multiple register 9683 ranges can be specified separated by a comma. 9684 9685`-mearly-stop-bits' 9686`-mno-early-stop-bits' 9687 Allow stop bits to be placed earlier than immediately preceding the 9688 instruction that triggered the stop bit. This can improve 9689 instruction scheduling, but does not always do so. 9690 9691 9692File: gcc.info, Node: D30V Options, Next: S/390 and zSeries Options, Prev: IA-64 Options, Up: Submodel Options 9693 96943.17.26 D30V Options 9695-------------------- 9696 9697These `-m' options are defined for D30V implementations: 9698 9699`-mextmem' 9700 Link the `.text', `.data', `.bss', `.strings', `.rodata', 9701 `.rodata1', `.data1' sections into external memory, which starts 9702 at location `0x80000000'. 9703 9704`-mextmemory' 9705 Same as the `-mextmem' switch. 9706 9707`-monchip' 9708 Link the `.text' section into onchip text memory, which starts at 9709 location `0x0'. Also link `.data', `.bss', `.strings', `.rodata', 9710 `.rodata1', `.data1' sections into onchip data memory, which 9711 starts at location `0x20000000'. 9712 9713`-mno-asm-optimize' 9714`-masm-optimize' 9715 Disable (enable) passing `-O' to the assembler when optimizing. 9716 The assembler uses the `-O' option to automatically parallelize 9717 adjacent short instructions where possible. 9718 9719`-mbranch-cost=N' 9720 Increase the internal costs of branches to N. Higher costs means 9721 that the compiler will issue more instructions to avoid doing a 9722 branch. The default is 2. 9723 9724`-mcond-exec=N' 9725 Specify the maximum number of conditionally executed instructions 9726 that replace a branch. The default is 4. 9727 9728 9729File: gcc.info, Node: S/390 and zSeries Options, Next: CRIS Options, Prev: D30V Options, Up: Submodel Options 9730 97313.17.27 S/390 and zSeries Options 9732--------------------------------- 9733 9734These are the `-m' options defined for the S/390 and zSeries 9735architecture. 9736 9737`-mhard-float' 9738`-msoft-float' 9739 Use (do not use) the hardware floating-point instructions and 9740 registers for floating-point operations. When `-msoft-float' is 9741 specified, functions in `libgcc.a' will be used to perform 9742 floating-point operations. When `-mhard-float' is specified, the 9743 compiler generates IEEE floating-point instructions. This is the 9744 default. 9745 9746`-mbackchain' 9747`-mno-backchain' 9748 Generate (or do not generate) code which maintains an explicit 9749 backchain within the stack frame that points to the caller's frame. 9750 This may be needed to allow debugging using tools that do not 9751 understand DWARF-2 call frame information. The default is not to 9752 generate the backchain. 9753 9754`-msmall-exec' 9755`-mno-small-exec' 9756 Generate (or do not generate) code using the `bras' instruction to 9757 do subroutine calls. This only works reliably if the total 9758 executable size does not exceed 64k. The default is to use the 9759 `basr' instruction instead, which does not have this limitation. 9760 9761`-m64' 9762`-m31' 9763 When `-m31' is specified, generate code compliant to the GNU/Linux 9764 for S/390 ABI. When `-m64' is specified, generate code compliant 9765 to the GNU/Linux for zSeries ABI. This allows GCC in particular 9766 to generate 64-bit instructions. For the `s390' targets, the 9767 default is `-m31', while the `s390x' targets default to `-m64'. 9768 9769`-mzarch' 9770`-mesa' 9771 When `-mzarch' is specified, generate code using the instructions 9772 available on z/Architecture. When `-mesa' is specified, generate 9773 code using the instructions available on ESA/390. Note that 9774 `-mesa' is not possible with `-m64'. When generating code 9775 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 9776 When generating code compliant to the GNU/Linux for zSeries ABI, 9777 the default is `-mzarch'. 9778 9779`-mmvcle' 9780`-mno-mvcle' 9781 Generate (or do not generate) code using the `mvcle' instruction 9782 to perform block moves. When `-mno-mvcle' is specified, use a 9783 `mvc' loop instead. This is the default. 9784 9785`-mdebug' 9786`-mno-debug' 9787 Print (or do not print) additional debug information when 9788 compiling. The default is to not print debug information. 9789 9790`-march=CPU-TYPE' 9791 Generate code that will run on CPU-TYPE, which is the name of a 9792 system representing a certain processor type. Possible values for 9793 CPU-TYPE are `g5', `g6', `z900', and `z990'. When generating code 9794 using the instructions available on z/Architecture, the default is 9795 `-march=z900'. Otherwise, the default is `-march=g5'. 9796 9797`-mtune=CPU-TYPE' 9798 Tune to CPU-TYPE everything applicable about the generated code, 9799 except for the ABI and the set of available instructions. The 9800 list of CPU-TYPE values is the same as for `-march'. The default 9801 is the value used for `-march'. 9802 9803`-mfused-madd' 9804`-mno-fused-madd' 9805 Generate code that uses (does not use) the floating point multiply 9806 and accumulate instructions. These instructions are generated by 9807 default if hardware floating point is used. 9808 9809 9810File: gcc.info, Node: CRIS Options, Next: MMIX Options, Prev: S/390 and zSeries Options, Up: Submodel Options 9811 98123.17.28 CRIS Options 9813-------------------- 9814 9815These options are defined specifically for the CRIS ports. 9816 9817`-march=ARCHITECTURE-TYPE' 9818`-mcpu=ARCHITECTURE-TYPE' 9819 Generate code for the specified architecture. The choices for 9820 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 9821 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 9822 cris-axis-linux-gnu, where the default is `v10'. 9823 9824`-mtune=ARCHITECTURE-TYPE' 9825 Tune to ARCHITECTURE-TYPE everything applicable about the generated 9826 code, except for the ABI and the set of available instructions. 9827 The choices for ARCHITECTURE-TYPE are the same as for 9828 `-march=ARCHITECTURE-TYPE'. 9829 9830`-mmax-stack-frame=N' 9831 Warn when the stack frame of a function exceeds N bytes. 9832 9833`-melinux-stacksize=N' 9834 Only available with the `cris-axis-aout' target. Arranges for 9835 indications in the program to the kernel loader that the stack of 9836 the program should be set to N bytes. 9837 9838`-metrax4' 9839`-metrax100' 9840 The options `-metrax4' and `-metrax100' are synonyms for 9841 `-march=v3' and `-march=v8' respectively. 9842 9843`-mmul-bug-workaround' 9844`-mno-mul-bug-workaround' 9845 Work around a bug in the `muls' and `mulu' instructions for CPU 9846 models where it applies. This option is active by default. 9847 9848`-mpdebug' 9849 Enable CRIS-specific verbose debug-related information in the 9850 assembly code. This option also has the effect to turn off the 9851 `#NO_APP' formatted-code indicator to the assembler at the 9852 beginning of the assembly file. 9853 9854`-mcc-init' 9855 Do not use condition-code results from previous instruction; 9856 always emit compare and test instructions before use of condition 9857 codes. 9858 9859`-mno-side-effects' 9860 Do not emit instructions with side-effects in addressing modes 9861 other than post-increment. 9862 9863`-mstack-align' 9864`-mno-stack-align' 9865`-mdata-align' 9866`-mno-data-align' 9867`-mconst-align' 9868`-mno-const-align' 9869 These options (no-options) arranges (eliminate arrangements) for 9870 the stack-frame, individual data and constants to be aligned for 9871 the maximum single data access size for the chosen CPU model. The 9872 default is to arrange for 32-bit alignment. ABI details such as 9873 structure layout are not affected by these options. 9874 9875`-m32-bit' 9876`-m16-bit' 9877`-m8-bit' 9878 Similar to the stack- data- and const-align options above, these 9879 options arrange for stack-frame, writable data and constants to 9880 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 9881 alignment. 9882 9883`-mno-prologue-epilogue' 9884`-mprologue-epilogue' 9885 With `-mno-prologue-epilogue', the normal function prologue and 9886 epilogue that sets up the stack-frame are omitted and no return 9887 instructions or return sequences are generated in the code. Use 9888 this option only together with visual inspection of the compiled 9889 code: no warnings or errors are generated when call-saved 9890 registers must be saved, or storage for local variable needs to be 9891 allocated. 9892 9893`-mno-gotplt' 9894`-mgotplt' 9895 With `-fpic' and `-fPIC', don't generate (do generate) instruction 9896 sequences that load addresses for functions from the PLT part of 9897 the GOT rather than (traditional on other architectures) calls to 9898 the PLT. The default is `-mgotplt'. 9899 9900`-maout' 9901 Legacy no-op option only recognized with the cris-axis-aout target. 9902 9903`-melf' 9904 Legacy no-op option only recognized with the cris-axis-elf and 9905 cris-axis-linux-gnu targets. 9906 9907`-melinux' 9908 Only recognized with the cris-axis-aout target, where it selects a 9909 GNU/linux-like multilib, include files and instruction set for 9910 `-march=v8'. 9911 9912`-mlinux' 9913 Legacy no-op option only recognized with the cris-axis-linux-gnu 9914 target. 9915 9916`-sim' 9917 This option, recognized for the cris-axis-aout and cris-axis-elf 9918 arranges to link with input-output functions from a simulator 9919 library. Code, initialized data and zero-initialized data are 9920 allocated consecutively. 9921 9922`-sim2' 9923 Like `-sim', but pass linker options to locate initialized data at 9924 0x40000000 and zero-initialized data at 0x80000000. 9925 9926 9927File: gcc.info, Node: MMIX Options, Next: PDP-11 Options, Prev: CRIS Options, Up: Submodel Options 9928 99293.17.29 MMIX Options 9930-------------------- 9931 9932These options are defined for the MMIX: 9933 9934`-mlibfuncs' 9935`-mno-libfuncs' 9936 Specify that intrinsic library functions are being compiled, 9937 passing all values in registers, no matter the size. 9938 9939`-mepsilon' 9940`-mno-epsilon' 9941 Generate floating-point comparison instructions that compare with 9942 respect to the `rE' epsilon register. 9943 9944`-mabi=mmixware' 9945`-mabi=gnu' 9946 Generate code that passes function parameters and return values 9947 that (in the called function) are seen as registers `$0' and up, 9948 as opposed to the GNU ABI which uses global registers `$231' and 9949 up. 9950 9951`-mzero-extend' 9952`-mno-zero-extend' 9953 When reading data from memory in sizes shorter than 64 bits, use 9954 (do not use) zero-extending load instructions by default, rather 9955 than sign-extending ones. 9956 9957`-mknuthdiv' 9958`-mno-knuthdiv' 9959 Make the result of a division yielding a remainder have the same 9960 sign as the divisor. With the default, `-mno-knuthdiv', the sign 9961 of the remainder follows the sign of the dividend. Both methods 9962 are arithmetically valid, the latter being almost exclusively used. 9963 9964`-mtoplevel-symbols' 9965`-mno-toplevel-symbols' 9966 Prepend (do not prepend) a `:' to all global symbols, so the 9967 assembly code can be used with the `PREFIX' assembly directive. 9968 9969`-melf' 9970 Generate an executable in the ELF format, rather than the default 9971 `mmo' format used by the `mmix' simulator. 9972 9973`-mbranch-predict' 9974`-mno-branch-predict' 9975 Use (do not use) the probable-branch instructions, when static 9976 branch prediction indicates a probable branch. 9977 9978`-mbase-addresses' 9979`-mno-base-addresses' 9980 Generate (do not generate) code that uses _base addresses_. Using 9981 a base address automatically generates a request (handled by the 9982 assembler and the linker) for a constant to be set up in a global 9983 register. The register is used for one or more base address 9984 requests within the range 0 to 255 from the value held in the 9985 register. The generally leads to short and fast code, but the 9986 number of different data items that can be addressed is limited. 9987 This means that a program that uses lots of static data may 9988 require `-mno-base-addresses'. 9989 9990`-msingle-exit' 9991`-mno-single-exit' 9992 Force (do not force) generated code to have a single exit point in 9993 each function. 9994 9995 9996File: gcc.info, Node: PDP-11 Options, Next: Xstormy16 Options, Prev: MMIX Options, Up: Submodel Options 9997 99983.17.30 PDP-11 Options 9999---------------------- 10000 10001These options are defined for the PDP-11: 10002 10003`-mfpu' 10004 Use hardware FPP floating point. This is the default. (FIS 10005 floating point on the PDP-11/40 is not supported.) 10006 10007`-msoft-float' 10008 Do not use hardware floating point. 10009 10010`-mac0' 10011 Return floating-point results in ac0 (fr0 in Unix assembler 10012 syntax). 10013 10014`-mno-ac0' 10015 Return floating-point results in memory. This is the default. 10016 10017`-m40' 10018 Generate code for a PDP-11/40. 10019 10020`-m45' 10021 Generate code for a PDP-11/45. This is the default. 10022 10023`-m10' 10024 Generate code for a PDP-11/10. 10025 10026`-mbcopy-builtin' 10027 Use inline `movstrhi' patterns for copying memory. This is the 10028 default. 10029 10030`-mbcopy' 10031 Do not use inline `movstrhi' patterns for copying memory. 10032 10033`-mint16' 10034`-mno-int32' 10035 Use 16-bit `int'. This is the default. 10036 10037`-mint32' 10038`-mno-int16' 10039 Use 32-bit `int'. 10040 10041`-mfloat64' 10042`-mno-float32' 10043 Use 64-bit `float'. This is the default. 10044 10045`-mfloat32' 10046`-mno-float64' 10047 Use 32-bit `float'. 10048 10049`-mabshi' 10050 Use `abshi2' pattern. This is the default. 10051 10052`-mno-abshi' 10053 Do not use `abshi2' pattern. 10054 10055`-mbranch-expensive' 10056 Pretend that branches are expensive. This is for experimenting 10057 with code generation only. 10058 10059`-mbranch-cheap' 10060 Do not pretend that branches are expensive. This is the default. 10061 10062`-msplit' 10063 Generate code for a system with split I&D. 10064 10065`-mno-split' 10066 Generate code for a system without split I&D. This is the default. 10067 10068`-munix-asm' 10069 Use Unix assembler syntax. This is the default when configured for 10070 `pdp11-*-bsd'. 10071 10072`-mdec-asm' 10073 Use DEC assembler syntax. This is the default when configured for 10074 any PDP-11 target other than `pdp11-*-bsd'. 10075 10076 10077File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: PDP-11 Options, Up: Submodel Options 10078 100793.17.31 Xstormy16 Options 10080------------------------- 10081 10082These options are defined for Xstormy16: 10083 10084`-msim' 10085 Choose startup files and linker script suitable for the simulator. 10086 10087 10088File: gcc.info, Node: FRV Options, Prev: Xtensa Options, Up: Submodel Options 10089 100903.17.32 FRV Options 10091------------------- 10092 10093`-mgpr-32' 10094 Only use the first 32 general purpose registers. 10095 10096`-mgpr-64' 10097 Use all 64 general purpose registers. 10098 10099`-mfpr-32' 10100 Use only the first 32 floating point registers. 10101 10102`-mfpr-64' 10103 Use all 64 floating point registers 10104 10105`-mhard-float' 10106 Use hardware instructions for floating point operations. 10107 10108`-msoft-float' 10109 Use library routines for floating point operations. 10110 10111`-malloc-cc' 10112 Dynamically allocate condition code registers. 10113 10114`-mfixed-cc' 10115 Do not try to dynamically allocate condition code registers, only 10116 use `icc0' and `fcc0'. 10117 10118`-mdword' 10119 Change ABI to use double word insns. 10120 10121`-mno-dword' 10122 Do not use double word instructions. 10123 10124`-mdouble' 10125 Use floating point double instructions. 10126 10127`-mno-double' 10128 Do not use floating point double instructions. 10129 10130`-mmedia' 10131 Use media instructions. 10132 10133`-mno-media' 10134 Do not use media instructions. 10135 10136`-mmuladd' 10137 Use multiply and add/subtract instructions. 10138 10139`-mno-muladd' 10140 Do not use multiply and add/subtract instructions. 10141 10142`-mlibrary-pic' 10143 Enable PIC support for building libraries 10144 10145`-macc-4' 10146 Use only the first four media accumulator registers. 10147 10148`-macc-8' 10149 Use all eight media accumulator registers. 10150 10151`-mpack' 10152 Pack VLIW instructions. 10153 10154`-mno-pack' 10155 Do not pack VLIW instructions. 10156 10157`-mno-eflags' 10158 Do not mark ABI switches in e_flags. 10159 10160`-mcond-move' 10161 Enable the use of conditional-move instructions (default). 10162 10163 This switch is mainly for debugging the compiler and will likely 10164 be removed in a future version. 10165 10166`-mno-cond-move' 10167 Disable the use of conditional-move instructions. 10168 10169 This switch is mainly for debugging the compiler and will likely 10170 be removed in a future version. 10171 10172`-mscc' 10173 Enable the use of conditional set instructions (default). 10174 10175 This switch is mainly for debugging the compiler and will likely 10176 be removed in a future version. 10177 10178`-mno-scc' 10179 Disable the use of conditional set instructions. 10180 10181 This switch is mainly for debugging the compiler and will likely 10182 be removed in a future version. 10183 10184`-mcond-exec' 10185 Enable the use of conditional execution (default). 10186 10187 This switch is mainly for debugging the compiler and will likely 10188 be removed in a future version. 10189 10190`-mno-cond-exec' 10191 Disable the use of conditional execution. 10192 10193 This switch is mainly for debugging the compiler and will likely 10194 be removed in a future version. 10195 10196`-mvliw-branch' 10197 Run a pass to pack branches into VLIW instructions (default). 10198 10199 This switch is mainly for debugging the compiler and will likely 10200 be removed in a future version. 10201 10202`-mno-vliw-branch' 10203 Do not run a pass to pack branches into VLIW instructions. 10204 10205 This switch is mainly for debugging the compiler and will likely 10206 be removed in a future version. 10207 10208`-mmulti-cond-exec' 10209 Enable optimization of `&&' and `||' in conditional execution 10210 (default). 10211 10212 This switch is mainly for debugging the compiler and will likely 10213 be removed in a future version. 10214 10215`-mno-multi-cond-exec' 10216 Disable optimization of `&&' and `||' in conditional execution. 10217 10218 This switch is mainly for debugging the compiler and will likely 10219 be removed in a future version. 10220 10221`-mnested-cond-exec' 10222 Enable nested conditional execution optimizations (default). 10223 10224 This switch is mainly for debugging the compiler and will likely 10225 be removed in a future version. 10226 10227`-mno-nested-cond-exec' 10228 Disable nested conditional execution optimizations. 10229 10230 This switch is mainly for debugging the compiler and will likely 10231 be removed in a future version. 10232 10233`-mtomcat-stats' 10234 Cause gas to print out tomcat statistics. 10235 10236`-mcpu=CPU' 10237 Select the processor type for which to generate code. Possible 10238 values are `simple', `tomcat', `fr500', `fr400', `fr300', `frv'. 10239 10240 10241 10242File: gcc.info, Node: Xtensa Options, Next: FRV Options, Prev: Xstormy16 Options, Up: Submodel Options 10243 102443.17.33 Xtensa Options 10245---------------------- 10246 10247These options are supported for Xtensa targets: 10248 10249`-mconst16' 10250`-mno-const16' 10251 Enable or disable use of `CONST16' instructions for loading 10252 constant values. The `CONST16' instruction is currently not a 10253 standard option from Tensilica. When enabled, `CONST16' 10254 instructions are always used in place of the standard `L32R' 10255 instructions. The use of `CONST16' is enabled by default only if 10256 the `L32R' instruction is not available. 10257 10258`-mfused-madd' 10259`-mno-fused-madd' 10260 Enable or disable use of fused multiply/add and multiply/subtract 10261 instructions in the floating-point option. This has no effect if 10262 the floating-point option is not also enabled. Disabling fused 10263 multiply/add and multiply/subtract instructions forces the 10264 compiler to use separate instructions for the multiply and 10265 add/subtract operations. This may be desirable in some cases 10266 where strict IEEE 754-compliant results are required: the fused 10267 multiply add/subtract instructions do not round the intermediate 10268 result, thereby producing results with _more_ bits of precision 10269 than specified by the IEEE standard. Disabling fused multiply 10270 add/subtract instructions also ensures that the program output is 10271 not sensitive to the compiler's ability to combine multiply and 10272 add/subtract operations. 10273 10274`-mtext-section-literals' 10275`-mno-text-section-literals' 10276 Control the treatment of literal pools. The default is 10277 `-mno-text-section-literals', which places literals in a separate 10278 section in the output file. This allows the literal pool to be 10279 placed in a data RAM/ROM, and it also allows the linker to combine 10280 literal pools from separate object files to remove redundant 10281 literals and improve code size. With `-mtext-section-literals', 10282 the literals are interspersed in the text section in order to keep 10283 them as close as possible to their references. This may be 10284 necessary for large assembly files. 10285 10286`-mtarget-align' 10287`-mno-target-align' 10288 When this option is enabled, GCC instructs the assembler to 10289 automatically align instructions to reduce branch penalties at the 10290 expense of some code density. The assembler attempts to widen 10291 density instructions to align branch targets and the instructions 10292 following call instructions. If there are not enough preceding 10293 safe density instructions to align a target, no widening will be 10294 performed. The default is `-mtarget-align'. These options do not 10295 affect the treatment of auto-aligned instructions like `LOOP', 10296 which the assembler will always align, either by widening density 10297 instructions or by inserting no-op instructions. 10298 10299`-mlongcalls' 10300`-mno-longcalls' 10301 When this option is enabled, GCC instructs the assembler to 10302 translate direct calls to indirect calls unless it can determine 10303 that the target of a direct call is in the range allowed by the 10304 call instruction. This translation typically occurs for calls to 10305 functions in other source files. Specifically, the assembler 10306 translates a direct `CALL' instruction into an `L32R' followed by 10307 a `CALLX' instruction. The default is `-mno-longcalls'. This 10308 option should be used in programs where the call target can 10309 potentially be out of range. This option is implemented in the 10310 assembler, not the compiler, so the assembly code generated by GCC 10311 will still show direct call instructions--look at the disassembled 10312 object code to see the actual instructions. Note that the 10313 assembler will use an indirect call for every cross-file call, not 10314 just those that really will be out of range. 10315 10316 10317File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 10318 103193.18 Options for Code Generation Conventions 10320============================================ 10321 10322These machine-independent options control the interface conventions 10323used in code generation. 10324 10325 Most of them have both positive and negative forms; the negative form 10326of `-ffoo' would be `-fno-foo'. In the table below, only one of the 10327forms is listed--the one which is not the default. You can figure out 10328the other form by either removing `no-' or adding it. 10329 10330`-fbounds-check' 10331 For front-ends that support it, generate additional code to check 10332 that indices used to access arrays are within the declared range. 10333 This is currently only supported by the Java and Fortran 77 10334 front-ends, where this option defaults to true and false 10335 respectively. 10336 10337`-ftrapv' 10338 This option generates traps for signed overflow on addition, 10339 subtraction, multiplication operations. 10340 10341`-fwrapv' 10342 This option instructs the compiler to assume that signed arithmetic 10343 overflow of addition, subtraction and multiplication wraps around 10344 using twos-complement representation. This flag enables some 10345 optimizations and disables other. This option is enabled by 10346 default for the Java front-end, as required by the Java language 10347 specification. 10348 10349`-fexceptions' 10350 Enable exception handling. Generates extra code needed to 10351 propagate exceptions. For some targets, this implies GCC will 10352 generate frame unwind information for all functions, which can 10353 produce significant data size overhead, although it does not 10354 affect execution. If you do not specify this option, GCC will 10355 enable it by default for languages like C++ which normally require 10356 exception handling, and disable it for languages like C that do 10357 not normally require it. However, you may need to enable this 10358 option when compiling C code that needs to interoperate properly 10359 with exception handlers written in C++. You may also wish to 10360 disable this option if you are compiling older C++ programs that 10361 don't use exception handling. 10362 10363`-fnon-call-exceptions' 10364 Generate code that allows trapping instructions to throw 10365 exceptions. Note that this requires platform-specific runtime 10366 support that does not exist everywhere. Moreover, it only allows 10367 _trapping_ instructions to throw exceptions, i.e. memory 10368 references or floating point instructions. It does not allow 10369 exceptions to be thrown from arbitrary signal handlers such as 10370 `SIGALRM'. 10371 10372`-funwind-tables' 10373 Similar to `-fexceptions', except that it will just generate any 10374 needed static data, but will not affect the generated code in any 10375 other way. You will normally not enable this option; instead, a 10376 language processor that needs this handling would enable it on 10377 your behalf. 10378 10379`-fasynchronous-unwind-tables' 10380 Generate unwind table in dwarf2 format, if supported by target 10381 machine. The table is exact at each instruction boundary, so it 10382 can be used for stack unwinding from asynchronous events (such as 10383 debugger or garbage collector). 10384 10385`-fpcc-struct-return' 10386 Return "short" `struct' and `union' values in memory like longer 10387 ones, rather than in registers. This convention is less 10388 efficient, but it has the advantage of allowing intercallability 10389 between GCC-compiled files and files compiled with other 10390 compilers, particularly the Portable C Compiler (pcc). 10391 10392 The precise convention for returning structures in memory depends 10393 on the target configuration macros. 10394 10395 Short structures and unions are those whose size and alignment 10396 match that of some integer type. 10397 10398 *Warning:* code compiled with the `-fpcc-struct-return' switch is 10399 not binary compatible with code compiled with the 10400 `-freg-struct-return' switch. Use it to conform to a non-default 10401 application binary interface. 10402 10403`-freg-struct-return' 10404 Return `struct' and `union' values in registers when possible. 10405 This is more efficient for small structures than 10406 `-fpcc-struct-return'. 10407 10408 If you specify neither `-fpcc-struct-return' nor 10409 `-freg-struct-return', GCC defaults to whichever convention is 10410 standard for the target. If there is no standard convention, GCC 10411 defaults to `-fpcc-struct-return', except on targets where GCC is 10412 the principal compiler. In those cases, we can choose the 10413 standard, and we chose the more efficient register return 10414 alternative. 10415 10416 *Warning:* code compiled with the `-freg-struct-return' switch is 10417 not binary compatible with code compiled with the 10418 `-fpcc-struct-return' switch. Use it to conform to a non-default 10419 application binary interface. 10420 10421`-fshort-enums' 10422 Allocate to an `enum' type only as many bytes as it needs for the 10423 declared range of possible values. Specifically, the `enum' type 10424 will be equivalent to the smallest integer type which has enough 10425 room. 10426 10427 *Warning:* the `-fshort-enums' switch causes GCC to generate code 10428 that is not binary compatible with code generated without that 10429 switch. Use it to conform to a non-default application binary 10430 interface. 10431 10432`-fshort-double' 10433 Use the same size for `double' as for `float'. 10434 10435 *Warning:* the `-fshort-double' switch causes GCC to generate code 10436 that is not binary compatible with code generated without that 10437 switch. Use it to conform to a non-default application binary 10438 interface. 10439 10440`-fshort-wchar' 10441 Override the underlying type for `wchar_t' to be `short unsigned 10442 int' instead of the default for the target. This option is useful 10443 for building programs to run under WINE. 10444 10445 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 10446 that is not binary compatible with code generated without that 10447 switch. Use it to conform to a non-default application binary 10448 interface. 10449 10450`-fshared-data' 10451 Requests that the data and non-`const' variables of this 10452 compilation be shared data rather than private data. The 10453 distinction makes sense only on certain operating systems, where 10454 shared data is shared between processes running the same program, 10455 while private data exists in one copy per process. 10456 10457`-fno-common' 10458 In C, allocate even uninitialized global variables in the data 10459 section of the object file, rather than generating them as common 10460 blocks. This has the effect that if the same variable is declared 10461 (without `extern') in two different compilations, you will get an 10462 error when you link them. The only reason this might be useful is 10463 if you wish to verify that the program will work on other systems 10464 which always work this way. 10465 10466`-fno-ident' 10467 Ignore the `#ident' directive. 10468 10469`-finhibit-size-directive' 10470 Don't output a `.size' assembler directive, or anything else that 10471 would cause trouble if the function is split in the middle, and the 10472 two halves are placed at locations far apart in memory. This 10473 option is used when compiling `crtstuff.c'; you should not need to 10474 use it for anything else. 10475 10476`-fverbose-asm' 10477 Put extra commentary information in the generated assembly code to 10478 make it more readable. This option is generally only of use to 10479 those who actually need to read the generated assembly code 10480 (perhaps while debugging the compiler itself). 10481 10482 `-fno-verbose-asm', the default, causes the extra information to 10483 be omitted and is useful when comparing two assembler files. 10484 10485`-fpic' 10486 Generate position-independent code (PIC) suitable for use in a 10487 shared library, if supported for the target machine. Such code 10488 accesses all constant addresses through a global offset table 10489 (GOT). The dynamic loader resolves the GOT entries when the 10490 program starts (the dynamic loader is not part of GCC; it is part 10491 of the operating system). If the GOT size for the linked 10492 executable exceeds a machine-specific maximum size, you get an 10493 error message from the linker indicating that `-fpic' does not 10494 work; in that case, recompile with `-fPIC' instead. (These 10495 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 10496 386 has no such limit.) 10497 10498 Position-independent code requires special support, and therefore 10499 works only on certain machines. For the 386, GCC supports PIC for 10500 System V but not for the Sun 386i. Code generated for the IBM 10501 RS/6000 is always position-independent. 10502 10503`-fPIC' 10504 If supported for the target machine, emit position-independent 10505 code, suitable for dynamic linking and avoiding any limit on the 10506 size of the global offset table. This option makes a difference 10507 on the m68k and the SPARC. 10508 10509 Position-independent code requires special support, and therefore 10510 works only on certain machines. 10511 10512`-fpie' 10513`-fPIE' 10514 These options are similar to `-fpic' and `-fPIC', but generated 10515 position independent code can be only linked into executables. 10516 Usually these options are used when `-pie' GCC option will be used 10517 during linking. 10518 10519`-ffixed-REG' 10520 Treat the register named REG as a fixed register; generated code 10521 should never refer to it (except perhaps as a stack pointer, frame 10522 pointer or in some other fixed role). 10523 10524 REG must be the name of a register. The register names accepted 10525 are machine-specific and are defined in the `REGISTER_NAMES' macro 10526 in the machine description macro file. 10527 10528 This flag does not have a negative form, because it specifies a 10529 three-way choice. 10530 10531`-fcall-used-REG' 10532 Treat the register named REG as an allocable register that is 10533 clobbered by function calls. It may be allocated for temporaries 10534 or variables that do not live across a call. Functions compiled 10535 this way will not save and restore the register REG. 10536 10537 It is an error to used this flag with the frame pointer or stack 10538 pointer. Use of this flag for other registers that have fixed 10539 pervasive roles in the machine's execution model will produce 10540 disastrous results. 10541 10542 This flag does not have a negative form, because it specifies a 10543 three-way choice. 10544 10545`-fcall-saved-REG' 10546 Treat the register named REG as an allocable register saved by 10547 functions. It may be allocated even for temporaries or variables 10548 that live across a call. Functions compiled this way will save 10549 and restore the register REG if they use it. 10550 10551 It is an error to used this flag with the frame pointer or stack 10552 pointer. Use of this flag for other registers that have fixed 10553 pervasive roles in the machine's execution model will produce 10554 disastrous results. 10555 10556 A different sort of disaster will result from the use of this flag 10557 for a register in which function values may be returned. 10558 10559 This flag does not have a negative form, because it specifies a 10560 three-way choice. 10561 10562`-fpack-struct' 10563 Pack all structure members together without holes. 10564 10565 *Warning:* the `-fpack-struct' switch causes GCC to generate code 10566 that is not binary compatible with code generated without that 10567 switch. Additionally, it makes the code suboptimal. Use it to 10568 conform to a non-default application binary interface. 10569 10570`-finstrument-functions' 10571 Generate instrumentation calls for entry and exit to functions. 10572 Just after function entry and just before function exit, the 10573 following profiling functions will be called with the address of 10574 the current function and its call site. (On some platforms, 10575 `__builtin_return_address' does not work beyond the current 10576 function, so the call site information may not be available to the 10577 profiling functions otherwise.) 10578 10579 void __cyg_profile_func_enter (void *this_fn, 10580 void *call_site); 10581 void __cyg_profile_func_exit (void *this_fn, 10582 void *call_site); 10583 10584 The first argument is the address of the start of the current 10585 function, which may be looked up exactly in the symbol table. 10586 10587 This currently disables function inlining. This restriction is 10588 expected to be removed in future releases. 10589 10590 A function may be given the attribute `no_instrument_function', in 10591 which case this instrumentation will not be done. This can be 10592 used, for example, for the profiling functions listed above, 10593 high-priority interrupt routines, and any functions from which the 10594 profiling functions cannot safely be called (perhaps signal 10595 handlers, if the profiling routines generate output or allocate 10596 memory). 10597 10598`-fstack-check' 10599 Generate code to verify that you do not go beyond the boundary of 10600 the stack. You should specify this flag if you are running in an 10601 environment with multiple threads, but only rarely need to specify 10602 it in a single-threaded environment since stack overflow is 10603 automatically detected on nearly all systems if there is only one 10604 stack. 10605 10606 Note that this switch does not actually cause checking to be done; 10607 the operating system must do that. The switch causes generation 10608 of code to ensure that the operating system sees the stack being 10609 extended. 10610 10611`-fstack-limit-register=REG' 10612`-fstack-limit-symbol=SYM' 10613`-fno-stack-limit' 10614 Generate code to ensure that the stack does not grow beyond a 10615 certain value, either the value of a register or the address of a 10616 symbol. If the stack would grow beyond the value, a signal is 10617 raised. For most targets, the signal is raised before the stack 10618 overruns the boundary, so it is possible to catch the signal 10619 without taking special precautions. 10620 10621 For instance, if the stack starts at absolute address `0x80000000' 10622 and grows downwards, you can use the flags 10623 `-fstack-limit-symbol=__stack_limit' and 10624 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 10625 of 128KB. Note that this may only work with the GNU linker. 10626 10627`-fargument-alias' 10628`-fargument-noalias' 10629`-fargument-noalias-global' 10630 Specify the possible relationships among parameters and between 10631 parameters and global data. 10632 10633 `-fargument-alias' specifies that arguments (parameters) may alias 10634 each other and may alias global storage. 10635 `-fargument-noalias' specifies that arguments do not alias each 10636 other, but may alias global storage. 10637 `-fargument-noalias-global' specifies that arguments do not alias 10638 each other and do not alias global storage. 10639 10640 Each language will automatically use whatever option is required by 10641 the language standard. You should not need to use these options 10642 yourself. 10643 10644`-fleading-underscore' 10645 This option and its counterpart, `-fno-leading-underscore', 10646 forcibly change the way C symbols are represented in the object 10647 file. One use is to help link with legacy assembly code. 10648 10649 *Warning:* the `-fleading-underscore' switch causes GCC to 10650 generate code that is not binary compatible with code generated 10651 without that switch. Use it to conform to a non-default 10652 application binary interface. Not all targets provide complete 10653 support for this switch. 10654 10655`-ftls-model=MODEL' 10656 Alter the thread-local storage model to be used (*note 10657 Thread-Local::). The MODEL argument should be one of 10658 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 10659 10660 The default without `-fpic' is `initial-exec'; with `-fpic' the 10661 default is `global-dynamic'. 10662 10663 10664File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 10665 106663.19 Environment Variables Affecting GCC 10667======================================== 10668 10669This section describes several environment variables that affect how GCC 10670operates. Some of them work by specifying directories or prefixes to 10671use when searching for various kinds of files. Some are used to 10672specify other aspects of the compilation environment. 10673 10674 Note that you can also specify places to search using options such as 10675`-B', `-I' and `-L' (*note Directory Options::). These take precedence 10676over places specified using environment variables, which in turn take 10677precedence over those specified by the configuration of GCC. *Note 10678Controlling the Compilation Driver `gcc': (gccint)Driver. 10679 10680`LANG' 10681`LC_CTYPE' 10682`LC_MESSAGES' 10683`LC_ALL' 10684 These environment variables control the way that GCC uses 10685 localization information that allow GCC to work with different 10686 national conventions. GCC inspects the locale categories 10687 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 10688 These locale categories can be set to any value supported by your 10689 installation. A typical value is `en_UK' for English in the United 10690 Kingdom. 10691 10692 The `LC_CTYPE' environment variable specifies character 10693 classification. GCC uses it to determine the character boundaries 10694 in a string; this is needed for some multibyte encodings that 10695 contain quote and escape characters that would otherwise be 10696 interpreted as a string end or escape. 10697 10698 The `LC_MESSAGES' environment variable specifies the language to 10699 use in diagnostic messages. 10700 10701 If the `LC_ALL' environment variable is set, it overrides the value 10702 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 10703 `LC_MESSAGES' default to the value of the `LANG' environment 10704 variable. If none of these variables are set, GCC defaults to 10705 traditional C English behavior. 10706 10707`TMPDIR' 10708 If `TMPDIR' is set, it specifies the directory to use for temporary 10709 files. GCC uses temporary files to hold the output of one stage of 10710 compilation which is to be used as input to the next stage: for 10711 example, the output of the preprocessor, which is the input to the 10712 compiler proper. 10713 10714`GCC_EXEC_PREFIX' 10715 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 10716 names of the subprograms executed by the compiler. No slash is 10717 added when this prefix is combined with the name of a subprogram, 10718 but you can specify a prefix that ends with a slash if you wish. 10719 10720 If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an 10721 appropriate prefix to use based on the pathname it was invoked 10722 with. 10723 10724 If GCC cannot find the subprogram using the specified prefix, it 10725 tries looking in the usual places for the subprogram. 10726 10727 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 10728 PREFIX is the value of `prefix' when you ran the `configure' 10729 script. 10730 10731 Other prefixes specified with `-B' take precedence over this 10732 prefix. 10733 10734 This prefix is also used for finding files such as `crt0.o' that 10735 are used for linking. 10736 10737 In addition, the prefix is used in an unusual way in finding the 10738 directories to search for header files. For each of the standard 10739 directories whose name normally begins with `/usr/local/lib/gcc' 10740 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 10741 replacing that beginning with the specified prefix to produce an 10742 alternate directory name. Thus, with `-Bfoo/', GCC will search 10743 `foo/bar' where it would normally search `/usr/local/lib/bar'. 10744 These alternate directories are searched first; the standard 10745 directories come next. 10746 10747`COMPILER_PATH' 10748 The value of `COMPILER_PATH' is a colon-separated list of 10749 directories, much like `PATH'. GCC tries the directories thus 10750 specified when searching for subprograms, if it can't find the 10751 subprograms using `GCC_EXEC_PREFIX'. 10752 10753`LIBRARY_PATH' 10754 The value of `LIBRARY_PATH' is a colon-separated list of 10755 directories, much like `PATH'. When configured as a native 10756 compiler, GCC tries the directories thus specified when searching 10757 for special linker files, if it can't find them using 10758 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 10759 when searching for ordinary libraries for the `-l' option (but 10760 directories specified with `-L' come first). 10761 10762`LANG' 10763 This variable is used to pass locale information to the compiler. 10764 One way in which this information is used is to determine the 10765 character set to be used when character literals, string literals 10766 and comments are parsed in C and C++. When the compiler is 10767 configured to allow multibyte characters, the following values for 10768 `LANG' are recognized: 10769 10770 `C-JIS' 10771 Recognize JIS characters. 10772 10773 `C-SJIS' 10774 Recognize SJIS characters. 10775 10776 `C-EUCJP' 10777 Recognize EUCJP characters. 10778 10779 If `LANG' is not defined, or if it has some other value, then the 10780 compiler will use mblen and mbtowc as defined by the default 10781 locale to recognize and translate multibyte characters. 10782 10783Some additional environments variables affect the behavior of the 10784preprocessor. 10785 10786`CPATH' 10787`C_INCLUDE_PATH' 10788`CPLUS_INCLUDE_PATH' 10789`OBJC_INCLUDE_PATH' 10790 Each variable's value is a list of directories separated by a 10791 special character, much like `PATH', in which to look for header 10792 files. The special character, `PATH_SEPARATOR', is 10793 target-dependent and determined at GCC build time. For Microsoft 10794 Windows-based targets it is a semicolon, and for almost all other 10795 targets it is a colon. 10796 10797 `CPATH' specifies a list of directories to be searched as if 10798 specified with `-I', but after any paths given with `-I' options 10799 on the command line. This environment variable is used regardless 10800 of which language is being preprocessed. 10801 10802 The remaining environment variables apply only when preprocessing 10803 the particular language indicated. Each specifies a list of 10804 directories to be searched as if specified with `-isystem', but 10805 after any paths given with `-isystem' options on the command line. 10806 10807 In all these variables, an empty element instructs the compiler to 10808 search its current working directory. Empty elements can appear 10809 at the beginning or end of a path. For instance, if the value of 10810 `CPATH' is `:/special/include', that has the same effect as 10811 `-I. -I/special/include'. 10812 10813`DEPENDENCIES_OUTPUT' 10814 If this variable is set, its value specifies how to output 10815 dependencies for Make based on the non-system header files 10816 processed by the compiler. System header files are ignored in the 10817 dependency output. 10818 10819 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 10820 which case the Make rules are written to that file, guessing the 10821 target name from the source file name. Or the value can have the 10822 form `FILE TARGET', in which case the rules are written to file 10823 FILE using TARGET as the target name. 10824 10825 In other words, this environment variable is equivalent to 10826 combining the options `-MM' and `-MF' (*note Preprocessor 10827 Options::), with an optional `-MT' switch too. 10828 10829`SUNPRO_DEPENDENCIES' 10830 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 10831 except that system header files are not ignored, so it implies 10832 `-M' rather than `-MM'. However, the dependence on the main input 10833 file is omitted. *Note Preprocessor Options::. 10834 10835 10836File: gcc.info, Node: Precompiled Headers, Next: Running Protoize, Prev: Environment Variables, Up: Invoking GCC 10837 108383.20 Using Precompiled Headers 10839============================== 10840 10841Often large projects have many header files that are included in every 10842source file. The time the compiler takes to process these header files 10843over and over again can account for nearly all of the time required to 10844build the project. To make builds faster, GCC allows users to 10845`precompile' a header file; then, if builds can use the precompiled 10846header file they will be much faster. 10847 10848 *Caution:* There are a few known situations where GCC will crash when 10849trying to use a precompiled header. If you have trouble with a 10850precompiled header, you should remove the precompiled header and 10851compile without it. In addition, please use GCC's on-line 10852defect-tracking system to report any problems you encounter with 10853precompiled headers. *Note Bugs::. 10854 10855 To create a precompiled header file, simply compile it as you would any 10856other file, if necessary using the `-x' option to make the driver treat 10857it as a C or C++ header file. You will probably want to use a tool 10858like `make' to keep the precompiled header up-to-date when the headers 10859it contains change. 10860 10861 A precompiled header file will be searched for when `#include' is seen 10862in the compilation. As it searches for the included file (*note Search 10863Path: (cpp)Search Path.) the compiler looks for a precompiled header in 10864each directory just before it looks for the include file in that 10865directory. The name searched for is the name specified in the 10866`#include' with `.gch' appended. If the precompiled header file can't 10867be used, it is ignored. 10868 10869 For instance, if you have `#include "all.h"', and you have `all.h.gch' 10870in the same directory as `all.h', then the precompiled header file will 10871be used if possible, and the original header will be used otherwise. 10872 10873 Alternatively, you might decide to put the precompiled header file in a 10874directory and use `-I' to ensure that directory is searched before (or 10875instead of) the directory containing the original header. Then, if you 10876want to check that the precompiled header file is always used, you can 10877put a file of the same name as the original header in this directory 10878containing an `#error' command. 10879 10880 This also works with `-include'. So yet another way to use 10881precompiled headers, good for projects not designed with precompiled 10882header files in mind, is to simply take most of the header files used by 10883a project, include them from another header file, precompile that header 10884file, and `-include' the precompiled header. If the header files have 10885guards against multiple inclusion, they will be skipped because they've 10886already been included (in the precompiled header). 10887 10888 If you need to precompile the same header file for different 10889languages, targets, or compiler options, you can instead make a 10890_directory_ named like `all.h.gch', and put each precompiled header in 10891the directory. (It doesn't matter what you call the files in the 10892directory, every precompiled header in the directory will be 10893considered.) The first precompiled header encountered in the directory 10894that is valid for this compilation will be used; they're searched in no 10895particular order. 10896 10897 There are many other possibilities, limited only by your imagination, 10898good sense, and the constraints of your build system. 10899 10900 A precompiled header file can be used only when these conditions apply: 10901 10902 * Only one precompiled header can be used in a particular 10903 compilation. 10904 10905 * A precompiled header can't be used once the first C token is seen. 10906 You can have preprocessor directives before a precompiled header; 10907 you can even include a precompiled header from inside another 10908 header, so long as there are no C tokens before the `#include'. 10909 10910 * The precompiled header file must be produced for the same language 10911 as the current compilation. You can't use a C precompiled header 10912 for a C++ compilation. 10913 10914 * The precompiled header file must be produced by the same compiler 10915 version and configuration as the current compilation is using. 10916 The easiest way to guarantee this is to use the same compiler 10917 binary for creating and using precompiled headers. 10918 10919 * Any macros defined before the precompiled header (including with 10920 `-D') must either be defined in the same way as when the 10921 precompiled header was generated, or must not affect the 10922 precompiled header, which usually means that the they don't appear 10923 in the precompiled header at all. 10924 10925 * Certain command-line options must be defined in the same way as 10926 when the precompiled header was generated. At present, it's not 10927 clear which options are safe to change and which are not; the 10928 safest choice is to use exactly the same options when generating 10929 and using the precompiled header. 10930 10931 For all of these but the last, the compiler will automatically ignore 10932the precompiled header if the conditions aren't met. For the last item, 10933some option changes will cause the precompiled header to be rejected, 10934but not all incompatible option combinations have yet been found. If 10935you find a new incompatible combination, please consider filing a bug 10936report, see *Note Bugs::. 10937 10938 10939File: gcc.info, Node: Running Protoize, Prev: Precompiled Headers, Up: Invoking GCC 10940 109413.21 Running Protoize 10942===================== 10943 10944The program `protoize' is an optional part of GCC. You can use it to 10945add prototypes to a program, thus converting the program to ISO C in 10946one respect. The companion program `unprotoize' does the reverse: it 10947removes argument types from any prototypes that are found. 10948 10949 When you run these programs, you must specify a set of source files as 10950command line arguments. The conversion programs start out by compiling 10951these files to see what functions they define. The information gathered 10952about a file FOO is saved in a file named `FOO.X'. 10953 10954 After scanning comes actual conversion. The specified files are all 10955eligible to be converted; any files they include (whether sources or 10956just headers) are eligible as well. 10957 10958 But not all the eligible files are converted. By default, `protoize' 10959and `unprotoize' convert only source and header files in the current 10960directory. You can specify additional directories whose files should 10961be converted with the `-d DIRECTORY' option. You can also specify 10962particular files to exclude with the `-x FILE' option. A file is 10963converted if it is eligible, its directory name matches one of the 10964specified directory names, and its name within the directory has not 10965been excluded. 10966 10967 Basic conversion with `protoize' consists of rewriting most function 10968definitions and function declarations to specify the types of the 10969arguments. The only ones not rewritten are those for varargs functions. 10970 10971 `protoize' optionally inserts prototype declarations at the beginning 10972of the source file, to make them available for any calls that precede 10973the function's definition. Or it can insert prototype declarations 10974with block scope in the blocks where undeclared functions are called. 10975 10976 Basic conversion with `unprotoize' consists of rewriting most function 10977declarations to remove any argument types, and rewriting function 10978definitions to the old-style pre-ISO form. 10979 10980 Both conversion programs print a warning for any function declaration 10981or definition that they can't convert. You can suppress these warnings 10982with `-q'. 10983 10984 The output from `protoize' or `unprotoize' replaces the original 10985source file. The original file is renamed to a name ending with 10986`.save' (for DOS, the saved filename ends in `.sav' without the 10987original `.c' suffix). If the `.save' (`.sav' for DOS) file already 10988exists, then the source file is simply discarded. 10989 10990 `protoize' and `unprotoize' both depend on GCC itself to scan the 10991program and collect information about the functions it uses. So 10992neither of these programs will work until GCC is installed. 10993 10994 Here is a table of the options you can use with `protoize' and 10995`unprotoize'. Each option works with both programs unless otherwise 10996stated. 10997 10998`-B DIRECTORY' 10999 Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the 11000 usual directory (normally `/usr/local/lib'). This file contains 11001 prototype information about standard system functions. This option 11002 applies only to `protoize'. 11003 11004`-c COMPILATION-OPTIONS' 11005 Use COMPILATION-OPTIONS as the options when running `gcc' to 11006 produce the `.X' files. The special option `-aux-info' is always 11007 passed in addition, to tell `gcc' to write a `.X' file. 11008 11009 Note that the compilation options must be given as a single 11010 argument to `protoize' or `unprotoize'. If you want to specify 11011 several `gcc' options, you must quote the entire set of 11012 compilation options to make them a single word in the shell. 11013 11014 There are certain `gcc' arguments that you cannot use, because they 11015 would produce the wrong kind of output. These include `-g', `-O', 11016 `-c', `-S', and `-o' If you include these in the 11017 COMPILATION-OPTIONS, they are ignored. 11018 11019`-C' 11020 Rename files to end in `.C' (`.cc' for DOS-based file systems) 11021 instead of `.c'. This is convenient if you are converting a C 11022 program to C++. This option applies only to `protoize'. 11023 11024`-g' 11025 Add explicit global declarations. This means inserting explicit 11026 declarations at the beginning of each source file for each function 11027 that is called in the file and was not declared. These 11028 declarations precede the first function definition that contains a 11029 call to an undeclared function. This option applies only to 11030 `protoize'. 11031 11032`-i STRING' 11033 Indent old-style parameter declarations with the string STRING. 11034 This option applies only to `protoize'. 11035 11036 `unprotoize' converts prototyped function definitions to old-style 11037 function definitions, where the arguments are declared between the 11038 argument list and the initial `{'. By default, `unprotoize' uses 11039 five spaces as the indentation. If you want to indent with just 11040 one space instead, use `-i " "'. 11041 11042`-k' 11043 Keep the `.X' files. Normally, they are deleted after conversion 11044 is finished. 11045 11046`-l' 11047 Add explicit local declarations. `protoize' with `-l' inserts a 11048 prototype declaration for each function in each block which calls 11049 the function without any declaration. This option applies only to 11050 `protoize'. 11051 11052`-n' 11053 Make no real changes. This mode just prints information about the 11054 conversions that would have been done without `-n'. 11055 11056`-N' 11057 Make no `.save' files. The original files are simply deleted. 11058 Use this option with caution. 11059 11060`-p PROGRAM' 11061 Use the program PROGRAM as the compiler. Normally, the name `gcc' 11062 is used. 11063 11064`-q' 11065 Work quietly. Most warnings are suppressed. 11066 11067`-v' 11068 Print the version number, just like `-v' for `gcc'. 11069 11070 If you need special compiler options to compile one of your program's 11071source files, then you should generate that file's `.X' file specially, 11072by running `gcc' on that source file with the appropriate options and 11073the option `-aux-info'. Then run `protoize' on the entire set of 11074files. `protoize' will use the existing `.X' file because it is newer 11075than the source file. For example: 11076 11077 gcc -Dfoo=bar file1.c -aux-info file1.X 11078 protoize *.c 11079 11080You need to include the special files along with the rest in the 11081`protoize' command, even though their `.X' files already exist, because 11082otherwise they won't get converted. 11083 11084 *Note Protoize Caveats::, for more information on how to use 11085`protoize' successfully. 11086 11087 11088File: gcc.info, Node: C Implementation, Next: C Extensions, Prev: Invoking GCC, Up: Top 11089 110904 C Implementation-defined behavior 11091*********************************** 11092 11093A conforming implementation of ISO C is required to document its choice 11094of behavior in each of the areas that are designated "implementation 11095defined." The following lists all such areas, along with the section 11096number from the ISO/IEC 9899:1999 standard. 11097 11098* Menu: 11099 11100* Translation implementation:: 11101* Environment implementation:: 11102* Identifiers implementation:: 11103* Characters implementation:: 11104* Integers implementation:: 11105* Floating point implementation:: 11106* Arrays and pointers implementation:: 11107* Hints implementation:: 11108* Structures unions enumerations and bit-fields implementation:: 11109* Qualifiers implementation:: 11110* Preprocessing directives implementation:: 11111* Library functions implementation:: 11112* Architecture implementation:: 11113* Locale-specific behavior implementation:: 11114 11115 11116File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 11117 111184.1 Translation 11119=============== 11120 11121 * `How a diagnostic is identified (3.10, 5.1.1.3).' 11122 11123 Diagnostics consist of all the output sent to stderr by GCC. 11124 11125 * `Whether each nonempty sequence of white-space characters other 11126 than new-line is retained or replaced by one space character in 11127 translation phase 3 (5.1.1.2).' 11128 11129 11130File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 11131 111324.2 Environment 11133=============== 11134 11135The behavior of these points are dependent on the implementation of the 11136C library, and are not defined by GCC itself. 11137 11138 11139File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 11140 111414.3 Identifiers 11142=============== 11143 11144 * `Which additional multibyte characters may appear in identifiers 11145 and their correspondence to universal character names (6.4.2).' 11146 11147 * `The number of significant initial characters in an identifier 11148 (5.2.4.1, 6.4.2).' 11149 11150 For internal names, all characters are significant. For external 11151 names, the number of significant characters are defined by the 11152 linker; for almost all targets, all characters are significant. 11153 11154 11155 11156File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 11157 111584.4 Characters 11159============== 11160 11161 * `The number of bits in a byte (3.6).' 11162 11163 * `The values of the members of the execution character set (5.2.1).' 11164 11165 * `The unique value of the member of the execution character set 11166 produced for each of the standard alphabetic escape sequences 11167 (5.2.2).' 11168 11169 * `The value of a `char' object into which has been stored any 11170 character other than a member of the basic execution character set 11171 (6.2.5).' 11172 11173 * `Which of `signed char' or `unsigned char' has the same range, 11174 representation, and behavior as "plain" `char' (6.2.5, 6.3.1.1).' 11175 11176 * `The mapping of members of the source character set (in character 11177 constants and string literals) to members of the execution 11178 character set (6.4.4.4, 5.1.1.2).' 11179 11180 * `The value of an integer character constant containing more than 11181 one character or containing a character or escape sequence that 11182 does not map to a single-byte execution character (6.4.4.4).' 11183 11184 * `The value of a wide character constant containing more than one 11185 multibyte character, or containing a multibyte character or escape 11186 sequence not represented in the extended execution character set 11187 (6.4.4.4).' 11188 11189 * `The current locale used to convert a wide character constant 11190 consisting of a single multibyte character that maps to a member 11191 of the extended execution character set into a corresponding wide 11192 character code (6.4.4.4).' 11193 11194 * `The current locale used to convert a wide string literal into 11195 corresponding wide character codes (6.4.5).' 11196 11197 * `The value of a string literal containing a multibyte character or 11198 escape sequence not represented in the execution character set 11199 (6.4.5).' 11200 11201 11202File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 11203 112044.5 Integers 11205============ 11206 11207 * `Any extended integer types that exist in the implementation 11208 (6.2.5).' 11209 11210 * `Whether signed integer types are represented using sign and 11211 magnitude, two's complement, or one's complement, and whether the 11212 extraordinary value is a trap representation or an ordinary value 11213 (6.2.6.2).' 11214 11215 GCC supports only two's complement integer types, and all bit 11216 patterns are ordinary values. 11217 11218 * `The rank of any extended integer type relative to another extended 11219 integer type with the same precision (6.3.1.1).' 11220 11221 * `The result of, or the signal raised by, converting an integer to a 11222 signed integer type when the value cannot be represented in an 11223 object of that type (6.3.1.3).' 11224 11225 * `The results of some bitwise operations on signed integers (6.5).' 11226 11227 11228File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 11229 112304.6 Floating point 11231================== 11232 11233 * `The accuracy of the floating-point operations and of the library 11234 functions in `<math.h>' and `<complex.h>' that return 11235 floating-point results (5.2.4.2.2).' 11236 11237 * `The rounding behaviors characterized by non-standard values of 11238 `FLT_ROUNDS' (5.2.4.2.2).' 11239 11240 * `The evaluation methods characterized by non-standard negative 11241 values of `FLT_EVAL_METHOD' (5.2.4.2.2).' 11242 11243 * `The direction of rounding when an integer is converted to a 11244 floating-point number that cannot exactly represent the original 11245 value (6.3.1.4).' 11246 11247 * `The direction of rounding when a floating-point number is 11248 converted to a narrower floating-point number (6.3.1.5).' 11249 11250 * `How the nearest representable value or the larger or smaller 11251 representable value immediately adjacent to the nearest 11252 representable value is chosen for certain floating constants 11253 (6.4.4.2).' 11254 11255 * `Whether and how floating expressions are contracted when not 11256 disallowed by the `FP_CONTRACT' pragma (6.5).' 11257 11258 * `The default state for the `FENV_ACCESS' pragma (7.6.1).' 11259 11260 * `Additional floating-point exceptions, rounding modes, 11261 environments, and classifications, and their macro names (7.6, 11262 7.12).' 11263 11264 * `The default state for the `FP_CONTRACT' pragma (7.12.2).' 11265 11266 * `Whether the "inexact" floating-point exception can be raised when 11267 the rounded result actually does equal the mathematical result in 11268 an IEC 60559 conformant implementation (F.9).' 11269 11270 * `Whether the "underflow" (and "inexact") floating-point exception 11271 can be raised when a result is tiny but not inexact in an IEC 11272 60559 conformant implementation (F.9).' 11273 11274 11275 11276File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 11277 112784.7 Arrays and pointers 11279======================= 11280 11281 * `The result of converting a pointer to an integer or vice versa 11282 (6.3.2.3).' 11283 11284 A cast from pointer to integer discards most-significant bits if 11285 the pointer representation is larger than the integer type, 11286 sign-extends(1) if the pointer representation is smaller than the 11287 integer type, otherwise the bits are unchanged. 11288 11289 A cast from integer to pointer discards most-significant bits if 11290 the pointer representation is smaller than the integer type, 11291 extends according to the signedness of the integer type if the 11292 pointer representation is larger than the integer type, otherwise 11293 the bits are unchanged. 11294 11295 When casting from pointer to integer and back again, the resulting 11296 pointer must reference the same object as the original pointer, 11297 otherwise the behavior is undefined. That is, one may not use 11298 integer arithmetic to avoid the undefined behavior of pointer 11299 arithmetic as proscribed in 6.5.6/8. 11300 11301 * `The size of the result of subtracting two pointers to elements of 11302 the same array (6.5.6).' 11303 11304 11305 ---------- Footnotes ---------- 11306 11307 (1) Future versions of GCC may zero-extend, or use a target-defined 11308`ptr_extend' pattern. Do not rely on sign extension. 11309 11310 11311File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 11312 113134.8 Hints 11314========= 11315 11316 * `The extent to which suggestions made by using the `register' 11317 storage-class specifier are effective (6.7.1).' 11318 11319 The `register' specifier affects code generation only in these 11320 ways: 11321 11322 * When used as part of the register variable extension, see 11323 *Note Explicit Reg Vars::. 11324 11325 * When `-O0' is in use, the compiler allocates distinct stack 11326 memory for all variables that do not have the `register' 11327 storage-class specifier; if `register' is specified, the 11328 variable may have a shorter lifespan than the code would 11329 indicate and may never be placed in memory. 11330 11331 * On some rare x86 targets, `setjmp' doesn't save the registers 11332 in all circumstances. In those cases, GCC doesn't allocate 11333 any variables in registers unless they are marked `register'. 11334 11335 11336 * `The extent to which suggestions made by using the inline function 11337 specifier are effective (6.7.4).' 11338 11339 GCC will not inline any functions if the `-fno-inline' option is 11340 used or if `-O0' is used. Otherwise, GCC may still be unable to 11341 inline a function for many reasons; the `-Winline' option may be 11342 used to determine if a function has not been inlined and why not. 11343 11344 11345 11346File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 11347 113484.9 Structures, unions, enumerations, and bit-fields 11349==================================================== 11350 11351 * `Whether a "plain" int bit-field is treated as a `signed int' 11352 bit-field or as an `unsigned int' bit-field (6.7.2, 6.7.2.1).' 11353 11354 * `Allowable bit-field types other than `_Bool', `signed int', and 11355 `unsigned int' (6.7.2.1).' 11356 11357 * `Whether a bit-field can straddle a storage-unit boundary 11358 (6.7.2.1).' 11359 11360 * `The order of allocation of bit-fields within a unit (6.7.2.1).' 11361 11362 * `The alignment of non-bit-field members of structures (6.7.2.1).' 11363 11364 * `The integer type compatible with each enumerated type (6.7.2.2).' 11365 11366 11367 11368File: gcc.info, Node: Qualifiers implementation, Next: Preprocessing directives implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 11369 113704.10 Qualifiers 11371=============== 11372 11373 * `What constitutes an access to an object that has 11374 volatile-qualified type (6.7.3).' 11375 11376 11377 11378File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Qualifiers implementation, Up: C Implementation 11379 113804.11 Preprocessing directives 11381============================= 11382 11383 * `How sequences in both forms of header names are mapped to headers 11384 or external source file names (6.4.7).' 11385 11386 * `Whether the value of a character constant in a constant expression 11387 that controls conditional inclusion matches the value of the same 11388 character constant in the execution character set (6.10.1).' 11389 11390 * `Whether the value of a single-character character constant in a 11391 constant expression that controls conditional inclusion may have a 11392 negative value (6.10.1).' 11393 11394 * `The places that are searched for an included `<>' delimited 11395 header, and how the places are specified or the header is 11396 identified (6.10.2).' 11397 11398 * `How the named source file is searched for in an included `""' 11399 delimited header (6.10.2).' 11400 11401 * `The method by which preprocessing tokens (possibly resulting from 11402 macro expansion) in a `#include' directive are combined into a 11403 header name (6.10.2).' 11404 11405 * `The nesting limit for `#include' processing (6.10.2).' 11406 11407 GCC imposes a limit of 200 nested `#include's. 11408 11409 * `Whether the `#' operator inserts a `\' character before the `\' 11410 character that begins a universal character name in a character 11411 constant or string literal (6.10.3.2).' 11412 11413 * `The behavior on each recognized non-`STDC #pragma' directive 11414 (6.10.6).' 11415 11416 * `The definitions for `__DATE__' and `__TIME__' when respectively, 11417 the date and time of translation are not available (6.10.8).' 11418 11419 If the date and time are not available, `__DATE__' expands to 11420 `"??? ?? ????"' and `__TIME__' expands to `"??:??:??"'. 11421 11422 11423 11424File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 11425 114264.12 Library functions 11427====================== 11428 11429The behavior of these points are dependent on the implementation of the 11430C library, and are not defined by GCC itself. 11431 11432 11433File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 11434 114354.13 Architecture 11436================= 11437 11438 * `The values or expressions assigned to the macros specified in the 11439 headers `<float.h>', `<limits.h>', and `<stdint.h>' (5.2.4.2, 11440 7.18.2, 7.18.3).' 11441 11442 * `The number, order, and encoding of bytes in any object (when not 11443 explicitly specified in this International Standard) (6.2.6.1).' 11444 11445 * `The value of the result of the sizeof operator (6.5.3.4).' 11446 11447 11448 11449File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 11450 114514.14 Locale-specific behavior 11452============================= 11453 11454The behavior of these points are dependent on the implementation of the 11455C library, and are not defined by GCC itself. 11456 11457 11458File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C Implementation, Up: Top 11459 114605 Extensions to the C Language Family 11461************************************* 11462 11463GNU C provides several language features not found in ISO standard C. 11464(The `-pedantic' option directs GCC to print a warning message if any 11465of these features is used.) To test for the availability of these 11466features in conditional compilation, check for a predefined macro 11467`__GNUC__', which is always defined under GCC. 11468 11469 These extensions are available in C and Objective-C. Most of them are 11470also available in C++. *Note Extensions to the C++ Language: C++ 11471Extensions, for extensions that apply _only_ to C++. 11472 11473 Some features that are in ISO C99 but not C89 or C++ are also, as 11474extensions, accepted by GCC in C89 mode and in C++. 11475 11476* Menu: 11477 11478* Statement Exprs:: Putting statements and declarations inside expressions. 11479* Local Labels:: Labels local to a block. 11480* Labels as Values:: Getting pointers to labels, and computed gotos. 11481* Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 11482* Constructing Calls:: Dispatching a call to another function. 11483* Typeof:: `typeof': referring to the type of an expression. 11484* Lvalues:: Using `?:', `,' and casts in lvalues. 11485* Conditionals:: Omitting the middle operand of a `?:' expression. 11486* Long Long:: Double-word integers---`long long int'. 11487* Complex:: Data types for complex numbers. 11488* Hex Floats:: Hexadecimal floating-point constants. 11489* Zero Length:: Zero-length arrays. 11490* Variable Length:: Arrays whose length is computed at run time. 11491* Empty Structures:: Structures with no members. 11492* Variadic Macros:: Macros with a variable number of arguments. 11493* Escaped Newlines:: Slightly looser rules for escaped newlines. 11494* Subscripting:: Any array can be subscripted, even if not an lvalue. 11495* Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 11496* Initializers:: Non-constant initializers. 11497* Compound Literals:: Compound literals give structures, unions 11498 or arrays as values. 11499* Designated Inits:: Labeling elements of initializers. 11500* Cast to Union:: Casting to union type from any member of the union. 11501* Case Ranges:: `case 1 ... 9' and such. 11502* Mixed Declarations:: Mixing declarations and code. 11503* Function Attributes:: Declaring that functions have no side effects, 11504 or that they can never return. 11505* Attribute Syntax:: Formal syntax for attributes. 11506* Function Prototypes:: Prototype declarations and old-style definitions. 11507* C++ Comments:: C++ comments are recognized. 11508* Dollar Signs:: Dollar sign is allowed in identifiers. 11509* Character Escapes:: `\e' stands for the character <ESC>. 11510* Variable Attributes:: Specifying attributes of variables. 11511* Type Attributes:: Specifying attributes of types. 11512* Alignment:: Inquiring about the alignment of a type or variable. 11513* Inline:: Defining inline functions (as fast as macros). 11514* Extended Asm:: Assembler instructions with C expressions as operands. 11515 (With them you can define ``built-in'' functions.) 11516* Constraints:: Constraints for asm operands 11517* Asm Labels:: Specifying the assembler name to use for a C symbol. 11518* Explicit Reg Vars:: Defining variables residing in specified registers. 11519* Alternate Keywords:: `__const__', `__asm__', etc., for header files. 11520* Incomplete Enums:: `enum foo;', with details to follow. 11521* Function Names:: Printable strings which are the name of the current 11522 function. 11523* Return Address:: Getting the return or frame address of a function. 11524* Vector Extensions:: Using vector instructions through built-in functions. 11525* Other Builtins:: Other built-in functions. 11526* Target Builtins:: Built-in functions specific to particular targets. 11527* Pragmas:: Pragmas accepted by GCC. 11528* Unnamed Fields:: Unnamed struct/union fields within structs/unions. 11529* Thread-Local:: Per-thread variables. 11530 11531 11532File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 11533 115345.1 Statements and Declarations in Expressions 11535============================================== 11536 11537A compound statement enclosed in parentheses may appear as an expression 11538in GNU C. This allows you to use loops, switches, and local variables 11539within an expression. 11540 11541 Recall that a compound statement is a sequence of statements surrounded 11542by braces; in this construct, parentheses go around the braces. For 11543example: 11544 11545 ({ int y = foo (); int z; 11546 if (y > 0) z = y; 11547 else z = - y; 11548 z; }) 11549 11550is a valid (though slightly more complex than necessary) expression for 11551the absolute value of `foo ()'. 11552 11553 The last thing in the compound statement should be an expression 11554followed by a semicolon; the value of this subexpression serves as the 11555value of the entire construct. (If you use some other kind of statement 11556last within the braces, the construct has type `void', and thus 11557effectively no value.) 11558 11559 This feature is especially useful in making macro definitions "safe" 11560(so that they evaluate each operand exactly once). For example, the 11561"maximum" function is commonly defined as a macro in standard C as 11562follows: 11563 11564 #define max(a,b) ((a) > (b) ? (a) : (b)) 11565 11566But this definition computes either A or B twice, with bad results if 11567the operand has side effects. In GNU C, if you know the type of the 11568operands (here taken as `int'), you can define the macro safely as 11569follows: 11570 11571 #define maxint(a,b) \ 11572 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 11573 11574 Embedded statements are not allowed in constant expressions, such as 11575the value of an enumeration constant, the width of a bit-field, or the 11576initial value of a static variable. 11577 11578 If you don't know the type of the operand, you can still do this, but 11579you must use `typeof' (*note Typeof::). 11580 11581 In G++, the result value of a statement expression undergoes array and 11582function pointer decay, and is returned by value to the enclosing 11583expression. For instance, if `A' is a class, then 11584 11585 A a; 11586 11587 ({a;}).Foo () 11588 11589will construct a temporary `A' object to hold the result of the 11590statement expression, and that will be used to invoke `Foo'. Therefore 11591the `this' pointer observed by `Foo' will not be the address of `a'. 11592 11593 Any temporaries created within a statement within a statement 11594expression will be destroyed at the statement's end. This makes 11595statement expressions inside macros slightly different from function 11596calls. In the latter case temporaries introduced during argument 11597evaluation will be destroyed at the end of the statement that includes 11598the function call. In the statement expression case they will be 11599destroyed during the statement expression. For instance, 11600 11601 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 11602 template<typename T> T function(T a) { T b = a; return b + 3; } 11603 11604 void foo () 11605 { 11606 macro (X ()); 11607 function (X ()); 11608 } 11609 11610will have different places where temporaries are destroyed. For the 11611`macro' case, the temporary `X' will be destroyed just after the 11612initialization of `b'. In the `function' case that temporary will be 11613destroyed when the function returns. 11614 11615 These considerations mean that it is probably a bad idea to use 11616statement-expressions of this form in header files that are designed to 11617work with C++. (Note that some versions of the GNU C Library contained 11618header files using statement-expression that lead to precisely this 11619bug.) 11620 11621 11622File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 11623 116245.2 Locally Declared Labels 11625=========================== 11626 11627GCC allows you to declare "local labels" in any nested block scope. A 11628local label is just like an ordinary label, but you can only reference 11629it (with a `goto' statement, or by taking its address) within the block 11630in which it was declared. 11631 11632 A local label declaration looks like this: 11633 11634 __label__ LABEL; 11635 11636or 11637 11638 __label__ LABEL1, LABEL2, /* ... */; 11639 11640 Local label declarations must come at the beginning of the block, 11641before any ordinary declarations or statements. 11642 11643 The label declaration defines the label _name_, but does not define 11644the label itself. You must do this in the usual way, with `LABEL:', 11645within the statements of the statement expression. 11646 11647 The local label feature is useful for complex macros. If a macro 11648contains nested loops, a `goto' can be useful for breaking out of them. 11649However, an ordinary label whose scope is the whole function cannot be 11650used: if the macro can be expanded several times in one function, the 11651label will be multiply defined in that function. A local label avoids 11652this problem. For example: 11653 11654 #define SEARCH(value, array, target) \ 11655 do { \ 11656 __label__ found; \ 11657 typeof (target) _SEARCH_target = (target); \ 11658 typeof (*(array)) *_SEARCH_array = (array); \ 11659 int i, j; \ 11660 int value; \ 11661 for (i = 0; i < max; i++) \ 11662 for (j = 0; j < max; j++) \ 11663 if (_SEARCH_array[i][j] == _SEARCH_target) \ 11664 { (value) = i; goto found; } \ 11665 (value) = -1; \ 11666 found:; \ 11667 } while (0) 11668 11669 This could also be written using a statement-expression: 11670 11671 #define SEARCH(array, target) \ 11672 ({ \ 11673 __label__ found; \ 11674 typeof (target) _SEARCH_target = (target); \ 11675 typeof (*(array)) *_SEARCH_array = (array); \ 11676 int i, j; \ 11677 int value; \ 11678 for (i = 0; i < max; i++) \ 11679 for (j = 0; j < max; j++) \ 11680 if (_SEARCH_array[i][j] == _SEARCH_target) \ 11681 { value = i; goto found; } \ 11682 value = -1; \ 11683 found: \ 11684 value; \ 11685 }) 11686 11687 Local label declarations also make the labels they declare visible to 11688nested functions, if there are any. *Note Nested Functions::, for 11689details. 11690 11691 11692File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 11693 116945.3 Labels as Values 11695==================== 11696 11697You can get the address of a label defined in the current function (or 11698a containing function) with the unary operator `&&'. The value has 11699type `void *'. This value is a constant and can be used wherever a 11700constant of that type is valid. For example: 11701 11702 void *ptr; 11703 /* ... */ 11704 ptr = &&foo; 11705 11706 To use these values, you need to be able to jump to one. This is done 11707with the computed goto statement(1), `goto *EXP;'. For example, 11708 11709 goto *ptr; 11710 11711Any expression of type `void *' is allowed. 11712 11713 One way of using these constants is in initializing a static array that 11714will serve as a jump table: 11715 11716 static void *array[] = { &&foo, &&bar, &&hack }; 11717 11718 Then you can select a label with indexing, like this: 11719 11720 goto *array[i]; 11721 11722Note that this does not check whether the subscript is in bounds--array 11723indexing in C never does that. 11724 11725 Such an array of label values serves a purpose much like that of the 11726`switch' statement. The `switch' statement is cleaner, so use that 11727rather than an array unless the problem does not fit a `switch' 11728statement very well. 11729 11730 Another use of label values is in an interpreter for threaded code. 11731The labels within the interpreter function can be stored in the 11732threaded code for super-fast dispatching. 11733 11734 You may not use this mechanism to jump to code in a different function. 11735If you do that, totally unpredictable things will happen. The best way 11736to avoid this is to store the label address only in automatic variables 11737and never pass it as an argument. 11738 11739 An alternate way to write the above example is 11740 11741 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 11742 &&hack - &&foo }; 11743 goto *(&&foo + array[i]); 11744 11745This is more friendly to code living in shared libraries, as it reduces 11746the number of dynamic relocations that are needed, and by consequence, 11747allows the data to be read-only. 11748 11749 ---------- Footnotes ---------- 11750 11751 (1) The analogous feature in Fortran is called an assigned goto, but 11752that name seems inappropriate in C, where one can do more than simply 11753store label addresses in label variables. 11754 11755 11756File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 11757 117585.4 Nested Functions 11759==================== 11760 11761A "nested function" is a function defined inside another function. 11762(Nested functions are not supported for GNU C++.) The nested function's 11763name is local to the block where it is defined. For example, here we 11764define a nested function named `square', and call it twice: 11765 11766 foo (double a, double b) 11767 { 11768 double square (double z) { return z * z; } 11769 11770 return square (a) + square (b); 11771 } 11772 11773 The nested function can access all the variables of the containing 11774function that are visible at the point of its definition. This is 11775called "lexical scoping". For example, here we show a nested function 11776which uses an inherited variable named `offset': 11777 11778 bar (int *array, int offset, int size) 11779 { 11780 int access (int *array, int index) 11781 { return array[index + offset]; } 11782 int i; 11783 /* ... */ 11784 for (i = 0; i < size; i++) 11785 /* ... */ access (array, i) /* ... */ 11786 } 11787 11788 Nested function definitions are permitted within functions in the 11789places where variable definitions are allowed; that is, in any block, 11790before the first statement in the block. 11791 11792 It is possible to call the nested function from outside the scope of 11793its name by storing its address or passing the address to another 11794function: 11795 11796 hack (int *array, int size) 11797 { 11798 void store (int index, int value) 11799 { array[index] = value; } 11800 11801 intermediate (store, size); 11802 } 11803 11804 Here, the function `intermediate' receives the address of `store' as 11805an argument. If `intermediate' calls `store', the arguments given to 11806`store' are used to store into `array'. But this technique works only 11807so long as the containing function (`hack', in this example) does not 11808exit. 11809 11810 If you try to call the nested function through its address after the 11811containing function has exited, all hell will break loose. If you try 11812to call it after a containing scope level has exited, and if it refers 11813to some of the variables that are no longer in scope, you may be lucky, 11814but it's not wise to take the risk. If, however, the nested function 11815does not refer to anything that has gone out of scope, you should be 11816safe. 11817 11818 GCC implements taking the address of a nested function using a 11819technique called "trampolines". A paper describing them is available as 11820 11821`http://people.debian.org/~aaronl/Usenix88-lexic.pdf'. 11822 11823 A nested function can jump to a label inherited from a containing 11824function, provided the label was explicitly declared in the containing 11825function (*note Local Labels::). Such a jump returns instantly to the 11826containing function, exiting the nested function which did the `goto' 11827and any intermediate functions as well. Here is an example: 11828 11829 bar (int *array, int offset, int size) 11830 { 11831 __label__ failure; 11832 int access (int *array, int index) 11833 { 11834 if (index > size) 11835 goto failure; 11836 return array[index + offset]; 11837 } 11838 int i; 11839 /* ... */ 11840 for (i = 0; i < size; i++) 11841 /* ... */ access (array, i) /* ... */ 11842 /* ... */ 11843 return 0; 11844 11845 /* Control comes here from `access' 11846 if it detects an error. */ 11847 failure: 11848 return -1; 11849 } 11850 11851 A nested function always has internal linkage. Declaring one with 11852`extern' is erroneous. If you need to declare the nested function 11853before its definition, use `auto' (which is otherwise meaningless for 11854function declarations). 11855 11856 bar (int *array, int offset, int size) 11857 { 11858 __label__ failure; 11859 auto int access (int *, int); 11860 /* ... */ 11861 int access (int *array, int index) 11862 { 11863 if (index > size) 11864 goto failure; 11865 return array[index + offset]; 11866 } 11867 /* ... */ 11868 } 11869 11870 11871File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 11872 118735.5 Constructing Function Calls 11874=============================== 11875 11876Using the built-in functions described below, you can record the 11877arguments a function received, and call another function with the same 11878arguments, without knowing the number or types of the arguments. 11879 11880 You can also record the return value of that function call, and later 11881return that value, without knowing what data type the function tried to 11882return (as long as your caller expects that data type). 11883 11884 However, these built-in functions may interact badly with some 11885sophisticated features or other extensions of the language. It is, 11886therefore, not recommended to use them outside very simple functions 11887acting as mere forwarders for their arguments. 11888 11889 -- Built-in Function: void * __builtin_apply_args () 11890 This built-in function returns a pointer to data describing how to 11891 perform a call with the same arguments as were passed to the 11892 current function. 11893 11894 The function saves the arg pointer register, structure value 11895 address, and all registers that might be used to pass arguments to 11896 a function into a block of memory allocated on the stack. Then it 11897 returns the address of that block. 11898 11899 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 11900 *ARGUMENTS, size_t SIZE) 11901 This built-in function invokes FUNCTION with a copy of the 11902 parameters described by ARGUMENTS and SIZE. 11903 11904 The value of ARGUMENTS should be the value returned by 11905 `__builtin_apply_args'. The argument SIZE specifies the size of 11906 the stack argument data, in bytes. 11907 11908 This function returns a pointer to data describing how to return 11909 whatever value was returned by FUNCTION. The data is saved in a 11910 block of memory allocated on the stack. 11911 11912 It is not always simple to compute the proper value for SIZE. The 11913 value is used by `__builtin_apply' to compute the amount of data 11914 that should be pushed on the stack and copied from the incoming 11915 argument area. 11916 11917 -- Built-in Function: void __builtin_return (void *RESULT) 11918 This built-in function returns the value described by RESULT from 11919 the containing function. You should specify, for RESULT, a value 11920 returned by `__builtin_apply'. 11921 11922 11923File: gcc.info, Node: Typeof, Next: Lvalues, Prev: Constructing Calls, Up: C Extensions 11924 119255.6 Referring to a Type with `typeof' 11926===================================== 11927 11928Another way to refer to the type of an expression is with `typeof'. 11929The syntax of using of this keyword looks like `sizeof', but the 11930construct acts semantically like a type name defined with `typedef'. 11931 11932 There are two ways of writing the argument to `typeof': with an 11933expression or with a type. Here is an example with an expression: 11934 11935 typeof (x[0](1)) 11936 11937This assumes that `x' is an array of pointers to functions; the type 11938described is that of the values of the functions. 11939 11940 Here is an example with a typename as the argument: 11941 11942 typeof (int *) 11943 11944Here the type described is that of pointers to `int'. 11945 11946 If you are writing a header file that must work when included in ISO C 11947programs, write `__typeof__' instead of `typeof'. *Note Alternate 11948Keywords::. 11949 11950 A `typeof'-construct can be used anywhere a typedef name could be 11951used. For example, you can use it in a declaration, in a cast, or 11952inside of `sizeof' or `typeof'. 11953 11954 `typeof' is often useful in conjunction with the 11955statements-within-expressions feature. Here is how the two together can 11956be used to define a safe "maximum" macro that operates on any 11957arithmetic type and evaluates each of its arguments exactly once: 11958 11959 #define max(a,b) \ 11960 ({ typeof (a) _a = (a); \ 11961 typeof (b) _b = (b); \ 11962 _a > _b ? _a : _b; }) 11963 11964 The reason for using names that start with underscores for the local 11965variables is to avoid conflicts with variable names that occur within 11966the expressions that are substituted for `a' and `b'. Eventually we 11967hope to design a new form of declaration syntax that allows you to 11968declare variables whose scopes start only after their initializers; 11969this will be a more reliable way to prevent such conflicts. 11970 11971Some more examples of the use of `typeof': 11972 11973 * This declares `y' with the type of what `x' points to. 11974 11975 typeof (*x) y; 11976 11977 * This declares `y' as an array of such values. 11978 11979 typeof (*x) y[4]; 11980 11981 * This declares `y' as an array of pointers to characters: 11982 11983 typeof (typeof (char *)[4]) y; 11984 11985 It is equivalent to the following traditional C declaration: 11986 11987 char *y[4]; 11988 11989 To see the meaning of the declaration using `typeof', and why it 11990 might be a useful way to write, rewrite it with these macros: 11991 11992 #define pointer(T) typeof(T *) 11993 #define array(T, N) typeof(T [N]) 11994 11995 Now the declaration can be rewritten this way: 11996 11997 array (pointer (char), 4) y; 11998 11999 Thus, `array (pointer (char), 4)' is the type of arrays of 4 12000 pointers to `char'. 12001 12002 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more 12003limited extension which permitted one to write 12004 12005 typedef T = EXPR; 12006 12007with the effect of declaring T to have the type of the expression EXPR. 12008This extension does not work with GCC 3 (versions between 3.0 and 3.2 12009will crash; 3.2.1 and later give an error). Code which relies on it 12010should be rewritten to use `typeof': 12011 12012 typedef typeof(EXPR) T; 12013 12014This will work with all versions of GCC. 12015 12016 12017File: gcc.info, Node: Lvalues, Next: Conditionals, Prev: Typeof, Up: C Extensions 12018 120195.7 Generalized Lvalues 12020======================= 12021 12022Compound expressions, conditional expressions and casts are allowed as 12023lvalues provided their operands are lvalues. This means that you can 12024take their addresses or store values into them. All these extensions 12025are deprecated. 12026 12027 Standard C++ allows compound expressions and conditional expressions 12028as lvalues, and permits casts to reference type, so use of this 12029extension is not supported for C++ code. 12030 12031 For example, a compound expression can be assigned, provided the last 12032expression in the sequence is an lvalue. These two expressions are 12033equivalent: 12034 12035 (a, b) += 5 12036 a, (b += 5) 12037 12038 Similarly, the address of the compound expression can be taken. These 12039two expressions are equivalent: 12040 12041 &(a, b) 12042 a, &b 12043 12044 A conditional expression is a valid lvalue if its type is not void and 12045the true and false branches are both valid lvalues. For example, these 12046two expressions are equivalent: 12047 12048 (a ? b : c) = 5 12049 (a ? b = 5 : (c = 5)) 12050 12051 A cast is a valid lvalue if its operand is an lvalue. This extension 12052is deprecated. A simple assignment whose left-hand side is a cast 12053works by converting the right-hand side first to the specified type, 12054then to the type of the inner left-hand side expression. After this is 12055stored, the value is converted back to the specified type to become the 12056value of the assignment. Thus, if `a' has type `char *', the following 12057two expressions are equivalent: 12058 12059 (int)a = 5 12060 (int)(a = (char *)(int)5) 12061 12062 An assignment-with-arithmetic operation such as `+=' applied to a cast 12063performs the arithmetic using the type resulting from the cast, and then 12064continues as in the previous case. Therefore, these two expressions are 12065equivalent: 12066 12067 (int)a += 5 12068 (int)(a = (char *)(int) ((int)a + 5)) 12069 12070 You cannot take the address of an lvalue cast, because the use of its 12071address would not work out coherently. Suppose that `&(int)f' were 12072permitted, where `f' has type `float'. Then the following statement 12073would try to store an integer bit-pattern where a floating point number 12074belongs: 12075 12076 *&(int)f = 1; 12077 12078 This is quite different from what `(int)f = 1' would do--that would 12079convert 1 to floating point and store it. Rather than cause this 12080inconsistency, we think it is better to prohibit use of `&' on a cast. 12081 12082 If you really do want an `int *' pointer with the address of `f', you 12083can simply write `(int *)&f'. 12084 12085 12086File: gcc.info, Node: Conditionals, Next: Long Long, Prev: Lvalues, Up: C Extensions 12087 120885.8 Conditionals with Omitted Operands 12089====================================== 12090 12091The middle operand in a conditional expression may be omitted. Then if 12092the first operand is nonzero, its value is the value of the conditional 12093expression. 12094 12095 Therefore, the expression 12096 12097 x ? : y 12098 12099has the value of `x' if that is nonzero; otherwise, the value of `y'. 12100 12101 This example is perfectly equivalent to 12102 12103 x ? x : y 12104 12105In this simple case, the ability to omit the middle operand is not 12106especially useful. When it becomes useful is when the first operand 12107does, or may (if it is a macro argument), contain a side effect. Then 12108repeating the operand in the middle would perform the side effect 12109twice. Omitting the middle operand uses the value already computed 12110without the undesirable effects of recomputing it. 12111 12112 12113File: gcc.info, Node: Long Long, Next: Complex, Prev: Conditionals, Up: C Extensions 12114 121155.9 Double-Word Integers 12116======================== 12117 12118ISO C99 supports data types for integers that are at least 64 bits wide, 12119and as an extension GCC supports them in C89 mode and in C++. Simply 12120write `long long int' for a signed integer, or `unsigned long long int' 12121for an unsigned integer. To make an integer constant of type `long 12122long int', add the suffix `LL' to the integer. To make an integer 12123constant of type `unsigned long long int', add the suffix `ULL' to the 12124integer. 12125 12126 You can use these types in arithmetic like any other integer types. 12127Addition, subtraction, and bitwise boolean operations on these types 12128are open-coded on all types of machines. Multiplication is open-coded 12129if the machine supports fullword-to-doubleword a widening multiply 12130instruction. Division and shifts are open-coded only on machines that 12131provide special support. The operations that are not open-coded use 12132special library routines that come with GCC. 12133 12134 There may be pitfalls when you use `long long' types for function 12135arguments, unless you declare function prototypes. If a function 12136expects type `int' for its argument, and you pass a value of type `long 12137long int', confusion will result because the caller and the subroutine 12138will disagree about the number of bytes for the argument. Likewise, if 12139the function expects `long long int' and you pass `int'. The best way 12140to avoid such problems is to use prototypes. 12141 12142 12143File: gcc.info, Node: Complex, Next: Hex Floats, Prev: Long Long, Up: C Extensions 12144 121455.10 Complex Numbers 12146==================== 12147 12148ISO C99 supports complex floating data types, and as an extension GCC 12149supports them in C89 mode and in C++, and supports complex integer data 12150types which are not part of ISO C99. You can declare complex types 12151using the keyword `_Complex'. As an extension, the older GNU keyword 12152`__complex__' is also supported. 12153 12154 For example, `_Complex double x;' declares `x' as a variable whose 12155real part and imaginary part are both of type `double'. `_Complex 12156short int y;' declares `y' to have real and imaginary parts of type 12157`short int'; this is not likely to be useful, but it shows that the set 12158of complex types is complete. 12159 12160 To write a constant with a complex data type, use the suffix `i' or 12161`j' (either one; they are equivalent). For example, `2.5fi' has type 12162`_Complex float' and `3i' has type `_Complex int'. Such a constant 12163always has a pure imaginary value, but you can form any complex value 12164you like by adding one to a real constant. This is a GNU extension; if 12165you have an ISO C99 conforming C library (such as GNU libc), and want 12166to construct complex constants of floating type, you should include 12167`<complex.h>' and use the macros `I' or `_Complex_I' instead. 12168 12169 To extract the real part of a complex-valued expression EXP, write 12170`__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 12171part. This is a GNU extension; for values of floating type, you should 12172use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 12173`cimag' and `cimagl', declared in `<complex.h>' and also provided as 12174built-in functions by GCC. 12175 12176 The operator `~' performs complex conjugation when used on a value 12177with a complex type. This is a GNU extension; for values of floating 12178type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 12179declared in `<complex.h>' and also provided as built-in functions by 12180GCC. 12181 12182 GCC can allocate complex automatic variables in a noncontiguous 12183fashion; it's even possible for the real part to be in a register while 12184the imaginary part is on the stack (or vice-versa). Only the DWARF2 12185debug info format can represent this, so use of DWARF2 is recommended. 12186If you are using the stabs debug info format, GCC describes a 12187noncontiguous complex variable as if it were two separate variables of 12188noncomplex type. If the variable's actual name is `foo', the two 12189fictitious variables are named `foo$real' and `foo$imag'. You can 12190examine and set these two fictitious variables with your debugger. 12191 12192 12193File: gcc.info, Node: Hex Floats, Next: Zero Length, Prev: Complex, Up: C Extensions 12194 121955.11 Hex Floats 12196=============== 12197 12198ISO C99 supports floating-point numbers written not only in the usual 12199decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 12200written in hexadecimal format. As a GNU extension, GCC supports this 12201in C89 mode (except in some cases when strictly conforming) and in C++. 12202In that format the `0x' hex introducer and the `p' or `P' exponent 12203field are mandatory. The exponent is a decimal number that indicates 12204the power of 2 by which the significant part will be multiplied. Thus 12205`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 12206is the same as `1.55e1'. 12207 12208 Unlike for floating-point numbers in the decimal notation the exponent 12209is always required in the hexadecimal notation. Otherwise the compiler 12210would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 12211could mean `1.0f' or `1.9375' since `f' is also the extension for 12212floating-point constants of type `float'. 12213 12214 12215File: gcc.info, Node: Zero Length, Next: Variable Length, Prev: Hex Floats, Up: C Extensions 12216 122175.12 Arrays of Length Zero 12218========================== 12219 12220Zero-length arrays are allowed in GNU C. They are very useful as the 12221last element of a structure which is really a header for a 12222variable-length object: 12223 12224 struct line { 12225 int length; 12226 char contents[0]; 12227 }; 12228 12229 struct line *thisline = (struct line *) 12230 malloc (sizeof (struct line) + this_length); 12231 thisline->length = this_length; 12232 12233 In ISO C90, you would have to give `contents' a length of 1, which 12234means either you waste space or complicate the argument to `malloc'. 12235 12236 In ISO C99, you would use a "flexible array member", which is slightly 12237different in syntax and semantics: 12238 12239 * Flexible array members are written as `contents[]' without the `0'. 12240 12241 * Flexible array members have incomplete type, and so the `sizeof' 12242 operator may not be applied. As a quirk of the original 12243 implementation of zero-length arrays, `sizeof' evaluates to zero. 12244 12245 * Flexible array members may only appear as the last member of a 12246 `struct' that is otherwise non-empty. 12247 12248 * A structure containing a flexible array member, or a union 12249 containing such a structure (possibly recursively), may not be a 12250 member of a structure or an element of an array. (However, these 12251 uses are permitted by GCC as extensions.) 12252 12253 GCC versions before 3.0 allowed zero-length arrays to be statically 12254initialized, as if they were flexible arrays. In addition to those 12255cases that were useful, it also allowed initializations in situations 12256that would corrupt later data. Non-empty initialization of zero-length 12257arrays is now treated like any case where there are more initializer 12258elements than the array holds, in that a suitable warning about "excess 12259elements in array" is given, and the excess elements (all of them, in 12260this case) are ignored. 12261 12262 Instead GCC allows static initialization of flexible array members. 12263This is equivalent to defining a new structure containing the original 12264structure followed by an array of sufficient size to contain the data. 12265I.e. in the following, `f1' is constructed as if it were declared like 12266`f2'. 12267 12268 struct f1 { 12269 int x; int y[]; 12270 } f1 = { 1, { 2, 3, 4 } }; 12271 12272 struct f2 { 12273 struct f1 f1; int data[3]; 12274 } f2 = { { 1 }, { 2, 3, 4 } }; 12275 12276The convenience of this extension is that `f1' has the desired type, 12277eliminating the need to consistently refer to `f2.f1'. 12278 12279 This has symmetry with normal static arrays, in that an array of 12280unknown size is also written with `[]'. 12281 12282 Of course, this extension only makes sense if the extra data comes at 12283the end of a top-level object, as otherwise we would be overwriting 12284data at subsequent offsets. To avoid undue complication and confusion 12285with initialization of deeply nested arrays, we simply disallow any 12286non-empty initialization except when the structure is the top-level 12287object. For example: 12288 12289 struct foo { int x; int y[]; }; 12290 struct bar { struct foo z; }; 12291 12292 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 12293 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 12294 struct bar c = { { 1, { } } }; // Valid. 12295 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 12296 12297 12298File: gcc.info, Node: Empty Structures, Next: Variadic Macros, Prev: Variable Length, Up: C Extensions 12299 123005.13 Structures With No Members 12301=============================== 12302 12303GCC permits a C structure to have no members: 12304 12305 struct empty { 12306 }; 12307 12308 The structure will have size zero. In C++, empty structures are part 12309of the language. G++ treats empty structures as if they had a single 12310member of type `char'. 12311 12312 12313File: gcc.info, Node: Variable Length, Next: Empty Structures, Prev: Zero Length, Up: C Extensions 12314 123155.14 Arrays of Variable Length 12316============================== 12317 12318Variable-length automatic arrays are allowed in ISO C99, and as an 12319extension GCC accepts them in C89 mode and in C++. (However, GCC's 12320implementation of variable-length arrays does not yet conform in detail 12321to the ISO C99 standard.) These arrays are declared like any other 12322automatic arrays, but with a length that is not a constant expression. 12323The storage is allocated at the point of declaration and deallocated 12324when the brace-level is exited. For example: 12325 12326 FILE * 12327 concat_fopen (char *s1, char *s2, char *mode) 12328 { 12329 char str[strlen (s1) + strlen (s2) + 1]; 12330 strcpy (str, s1); 12331 strcat (str, s2); 12332 return fopen (str, mode); 12333 } 12334 12335 Jumping or breaking out of the scope of the array name deallocates the 12336storage. Jumping into the scope is not allowed; you get an error 12337message for it. 12338 12339 You can use the function `alloca' to get an effect much like 12340variable-length arrays. The function `alloca' is available in many 12341other C implementations (but not in all). On the other hand, 12342variable-length arrays are more elegant. 12343 12344 There are other differences between these two methods. Space allocated 12345with `alloca' exists until the containing _function_ returns. The 12346space for a variable-length array is deallocated as soon as the array 12347name's scope ends. (If you use both variable-length arrays and 12348`alloca' in the same function, deallocation of a variable-length array 12349will also deallocate anything more recently allocated with `alloca'.) 12350 12351 You can also use variable-length arrays as arguments to functions: 12352 12353 struct entry 12354 tester (int len, char data[len][len]) 12355 { 12356 /* ... */ 12357 } 12358 12359 The length of an array is computed once when the storage is allocated 12360and is remembered for the scope of the array in case you access it with 12361`sizeof'. 12362 12363 If you want to pass the array first and the length afterward, you can 12364use a forward declaration in the parameter list--another GNU extension. 12365 12366 struct entry 12367 tester (int len; char data[len][len], int len) 12368 { 12369 /* ... */ 12370 } 12371 12372 The `int len' before the semicolon is a "parameter forward 12373declaration", and it serves the purpose of making the name `len' known 12374when the declaration of `data' is parsed. 12375 12376 You can write any number of such parameter forward declarations in the 12377parameter list. They can be separated by commas or semicolons, but the 12378last one must end with a semicolon, which is followed by the "real" 12379parameter declarations. Each forward declaration must match a "real" 12380declaration in parameter name and data type. ISO C99 does not support 12381parameter forward declarations. 12382 12383 12384File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Empty Structures, Up: C Extensions 12385 123865.15 Macros with a Variable Number of Arguments. 12387================================================ 12388 12389In the ISO C standard of 1999, a macro can be declared to accept a 12390variable number of arguments much as a function can. The syntax for 12391defining the macro is similar to that of a function. Here is an 12392example: 12393 12394 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 12395 12396 Here `...' is a "variable argument". In the invocation of such a 12397macro, it represents the zero or more tokens until the closing 12398parenthesis that ends the invocation, including any commas. This set of 12399tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 12400it appears. See the CPP manual for more information. 12401 12402 GCC has long supported variadic macros, and used a different syntax 12403that allowed you to give a name to the variable arguments just like any 12404other argument. Here is an example: 12405 12406 #define debug(format, args...) fprintf (stderr, format, args) 12407 12408 This is in all ways equivalent to the ISO C example above, but arguably 12409more readable and descriptive. 12410 12411 GNU CPP has two further variadic macro extensions, and permits them to 12412be used with either of the above forms of macro definition. 12413 12414 In standard C, you are not allowed to leave the variable argument out 12415entirely; but you are allowed to pass an empty argument. For example, 12416this invocation is invalid in ISO C, because there is no comma after 12417the string: 12418 12419 debug ("A message") 12420 12421 GNU CPP permits you to completely omit the variable arguments in this 12422way. In the above examples, the compiler would complain, though since 12423the expansion of the macro still has the extra comma after the format 12424string. 12425 12426 To help solve this problem, CPP behaves specially for variable 12427arguments used with the token paste operator, `##'. If instead you 12428write 12429 12430 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 12431 12432 and if the variable arguments are omitted or empty, the `##' operator 12433causes the preprocessor to remove the comma before it. If you do 12434provide some variable arguments in your macro invocation, GNU CPP does 12435not complain about the paste operation and instead places the variable 12436arguments after the comma. Just like any other pasted macro argument, 12437these arguments are not macro expanded. 12438 12439 12440File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 12441 124425.16 Slightly Looser Rules for Escaped Newlines 12443=============================================== 12444 12445Recently, the preprocessor has relaxed its treatment of escaped 12446newlines. Previously, the newline had to immediately follow a 12447backslash. The current implementation allows whitespace in the form of 12448spaces, horizontal and vertical tabs, and form feeds between the 12449backslash and the subsequent newline. The preprocessor issues a 12450warning, but treats it as a valid escaped newline and combines the two 12451lines to form a single logical line. This works within comments and 12452tokens, as well as between tokens. Comments are _not_ treated as 12453whitespace for the purposes of this relaxation, since they have not yet 12454been replaced with spaces. 12455 12456 12457File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 12458 124595.17 Non-Lvalue Arrays May Have Subscripts 12460========================================== 12461 12462In ISO C99, arrays that are not lvalues still decay to pointers, and 12463may be subscripted, although they may not be modified or used after the 12464next sequence point and the unary `&' operator may not be applied to 12465them. As an extension, GCC allows such arrays to be subscripted in C89 12466mode, though otherwise they do not decay to pointers outside C99 mode. 12467For example, this is valid in GNU C though not valid in C89: 12468 12469 struct foo {int a[4];}; 12470 12471 struct foo f(); 12472 12473 bar (int index) 12474 { 12475 return f().a[index]; 12476 } 12477 12478 12479File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 12480 124815.18 Arithmetic on `void'- and Function-Pointers 12482================================================ 12483 12484In GNU C, addition and subtraction operations are supported on pointers 12485to `void' and on pointers to functions. This is done by treating the 12486size of a `void' or of a function as 1. 12487 12488 A consequence of this is that `sizeof' is also allowed on `void' and 12489on function types, and returns 1. 12490 12491 The option `-Wpointer-arith' requests a warning if these extensions 12492are used. 12493 12494 12495File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 12496 124975.19 Non-Constant Initializers 12498============================== 12499 12500As in standard C++ and ISO C99, the elements of an aggregate 12501initializer for an automatic variable are not required to be constant 12502expressions in GNU C. Here is an example of an initializer with 12503run-time varying elements: 12504 12505 foo (float f, float g) 12506 { 12507 float beat_freqs[2] = { f-g, f+g }; 12508 /* ... */ 12509 } 12510 12511 12512File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 12513 125145.20 Compound Literals 12515====================== 12516 12517ISO C99 supports compound literals. A compound literal looks like a 12518cast containing an initializer. Its value is an object of the type 12519specified in the cast, containing the elements specified in the 12520initializer; it is an lvalue. As an extension, GCC supports compound 12521literals in C89 mode and in C++. 12522 12523 Usually, the specified type is a structure. Assume that `struct foo' 12524and `structure' are declared as shown: 12525 12526 struct foo {int a; char b[2];} structure; 12527 12528Here is an example of constructing a `struct foo' with a compound 12529literal: 12530 12531 structure = ((struct foo) {x + y, 'a', 0}); 12532 12533This is equivalent to writing the following: 12534 12535 { 12536 struct foo temp = {x + y, 'a', 0}; 12537 structure = temp; 12538 } 12539 12540 You can also construct an array. If all the elements of the compound 12541literal are (made up of) simple constant expressions, suitable for use 12542in initializers of objects of static storage duration, then the compound 12543literal can be coerced to a pointer to its first element and used in 12544such an initializer, as shown here: 12545 12546 char **foo = (char *[]) { "x", "y", "z" }; 12547 12548 Compound literals for scalar types and union types are is also 12549allowed, but then the compound literal is equivalent to a cast. 12550 12551 As a GNU extension, GCC allows initialization of objects with static 12552storage duration by compound literals (which is not possible in ISO 12553C99, because the initializer is not a constant). It is handled as if 12554the object was initialized only with the bracket enclosed list if 12555compound literal's and object types match. The initializer list of the 12556compound literal must be constant. If the object being initialized has 12557array type of unknown size, the size is determined by compound literal 12558size. 12559 12560 static struct foo x = (struct foo) {1, 'a', 'b'}; 12561 static int y[] = (int []) {1, 2, 3}; 12562 static int z[] = (int [3]) {1}; 12563 12564The above lines are equivalent to the following: 12565 static struct foo x = {1, 'a', 'b'}; 12566 static int y[] = {1, 2, 3}; 12567 static int z[] = {1, 0, 0}; 12568 12569 12570File: gcc.info, Node: Designated Inits, Next: Cast to Union, Prev: Compound Literals, Up: C Extensions 12571 125725.21 Designated Initializers 12573============================ 12574 12575Standard C89 requires the elements of an initializer to appear in a 12576fixed order, the same as the order of the elements in the array or 12577structure being initialized. 12578 12579 In ISO C99 you can give the elements in any order, specifying the array 12580indices or structure field names they apply to, and GNU C allows this as 12581an extension in C89 mode as well. This extension is not implemented in 12582GNU C++. 12583 12584 To specify an array index, write `[INDEX] =' before the element value. 12585For example, 12586 12587 int a[6] = { [4] = 29, [2] = 15 }; 12588 12589is equivalent to 12590 12591 int a[6] = { 0, 0, 15, 0, 29, 0 }; 12592 12593The index values must be constant expressions, even if the array being 12594initialized is automatic. 12595 12596 An alternative syntax for this which has been obsolete since GCC 2.5 12597but GCC still accepts is to write `[INDEX]' before the element value, 12598with no `='. 12599 12600 To initialize a range of elements to the same value, write `[FIRST ... 12601LAST] = VALUE'. This is a GNU extension. For example, 12602 12603 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 12604 12605If the value in it has side-effects, the side-effects will happen only 12606once, not for each initialized field by the range initializer. 12607 12608Note that the length of the array is the highest value specified plus 12609one. 12610 12611 In a structure initializer, specify the name of a field to initialize 12612with `.FIELDNAME =' before the element value. For example, given the 12613following structure, 12614 12615 struct point { int x, y; }; 12616 12617the following initialization 12618 12619 struct point p = { .y = yvalue, .x = xvalue }; 12620 12621is equivalent to 12622 12623 struct point p = { xvalue, yvalue }; 12624 12625 Another syntax which has the same meaning, obsolete since GCC 2.5, is 12626`FIELDNAME:', as shown here: 12627 12628 struct point p = { y: yvalue, x: xvalue }; 12629 12630 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 12631also use a designator (or the obsolete colon syntax) when initializing 12632a union, to specify which element of the union should be used. For 12633example, 12634 12635 union foo { int i; double d; }; 12636 12637 union foo f = { .d = 4 }; 12638 12639will convert 4 to a `double' to store it in the union using the second 12640element. By contrast, casting 4 to type `union foo' would store it 12641into the union as the integer `i', since it is an integer. (*Note Cast 12642to Union::.) 12643 12644 You can combine this technique of naming elements with ordinary C 12645initialization of successive elements. Each initializer element that 12646does not have a designator applies to the next consecutive element of 12647the array or structure. For example, 12648 12649 int a[6] = { [1] = v1, v2, [4] = v4 }; 12650 12651is equivalent to 12652 12653 int a[6] = { 0, v1, v2, 0, v4, 0 }; 12654 12655 Labeling the elements of an array initializer is especially useful 12656when the indices are characters or belong to an `enum' type. For 12657example: 12658 12659 int whitespace[256] 12660 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 12661 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 12662 12663 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 12664before an `=' to specify a nested subobject to initialize; the list is 12665taken relative to the subobject corresponding to the closest 12666surrounding brace pair. For example, with the `struct point' 12667declaration above: 12668 12669 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 12670 12671If the same field is initialized multiple times, it will have value from 12672the last initialization. If any such overridden initialization has 12673side-effect, it is unspecified whether the side-effect happens or not. 12674Currently, GCC will discard them and issue a warning. 12675 12676 12677File: gcc.info, Node: Case Ranges, Next: Mixed Declarations, Prev: Cast to Union, Up: C Extensions 12678 126795.22 Case Ranges 12680================ 12681 12682You can specify a range of consecutive values in a single `case' label, 12683like this: 12684 12685 case LOW ... HIGH: 12686 12687This has the same effect as the proper number of individual `case' 12688labels, one for each integer value from LOW to HIGH, inclusive. 12689 12690 This feature is especially useful for ranges of ASCII character codes: 12691 12692 case 'A' ... 'Z': 12693 12694 *Be careful:* Write spaces around the `...', for otherwise it may be 12695parsed wrong when you use it with integer values. For example, write 12696this: 12697 12698 case 1 ... 5: 12699 12700rather than this: 12701 12702 case 1...5: 12703 12704 12705File: gcc.info, Node: Cast to Union, Next: Case Ranges, Prev: Designated Inits, Up: C Extensions 12706 127075.23 Cast to a Union Type 12708========================= 12709 12710A cast to union type is similar to other casts, except that the type 12711specified is a union type. You can specify the type either with `union 12712TAG' or with a typedef name. A cast to union is actually a constructor 12713though, not a cast, and hence does not yield an lvalue like normal 12714casts. (*Note Compound Literals::.) 12715 12716 The types that may be cast to the union type are those of the members 12717of the union. Thus, given the following union and variables: 12718 12719 union foo { int i; double d; }; 12720 int x; 12721 double y; 12722 12723both `x' and `y' can be cast to type `union foo'. 12724 12725 Using the cast as the right-hand side of an assignment to a variable of 12726union type is equivalent to storing in a member of the union: 12727 12728 union foo u; 12729 /* ... */ 12730 u = (union foo) x == u.i = x 12731 u = (union foo) y == u.d = y 12732 12733 You can also use the union cast as a function argument: 12734 12735 void hack (union foo); 12736 /* ... */ 12737 hack ((union foo) x); 12738 12739 12740File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Case Ranges, Up: C Extensions 12741 127425.24 Mixed Declarations and Code 12743================================ 12744 12745ISO C99 and ISO C++ allow declarations and code to be freely mixed 12746within compound statements. As an extension, GCC also allows this in 12747C89 mode. For example, you could do: 12748 12749 int i; 12750 /* ... */ 12751 i++; 12752 int j = i + 2; 12753 12754 Each identifier is visible from where it is declared until the end of 12755the enclosing block. 12756 12757 12758File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 12759 127605.25 Declaring Attributes of Functions 12761====================================== 12762 12763In GNU C, you declare certain things about functions called in your 12764program which help the compiler optimize function calls and check your 12765code more carefully. 12766 12767 The keyword `__attribute__' allows you to specify special attributes 12768when making a declaration. This keyword is followed by an attribute 12769specification inside double parentheses. The following attributes are 12770currently defined for functions on all targets: `noreturn', `noinline', 12771`always_inline', `pure', `const', `nothrow', `format', `format_arg', 12772`no_instrument_function', `section', `constructor', `destructor', 12773`used', `unused', `deprecated', `weak', `malloc', `alias', 12774`warn_unused_result' and `nonnull'. Several other attributes are 12775defined for functions on particular target systems. Other attributes, 12776including `section' are supported for variables declarations (*note 12777Variable Attributes::) and for types (*note Type Attributes::). 12778 12779 You may also specify attributes with `__' preceding and following each 12780keyword. This allows you to use them in header files without being 12781concerned about a possible macro of the same name. For example, you 12782may use `__noreturn__' instead of `noreturn'. 12783 12784 *Note Attribute Syntax::, for details of the exact syntax for using 12785attributes. 12786 12787`noreturn' 12788 A few standard library functions, such as `abort' and `exit', 12789 cannot return. GCC knows this automatically. Some programs define 12790 their own functions that never return. You can declare them 12791 `noreturn' to tell the compiler this fact. For example, 12792 12793 void fatal () __attribute__ ((noreturn)); 12794 12795 void 12796 fatal (/* ... */) 12797 { 12798 /* ... */ /* Print error message. */ /* ... */ 12799 exit (1); 12800 } 12801 12802 The `noreturn' keyword tells the compiler to assume that `fatal' 12803 cannot return. It can then optimize without regard to what would 12804 happen if `fatal' ever did return. This makes slightly better 12805 code. More importantly, it helps avoid spurious warnings of 12806 uninitialized variables. 12807 12808 The `noreturn' keyword does not affect the exceptional path when 12809 that applies: a `noreturn'-marked function may still return to the 12810 caller by throwing an exception. 12811 12812 Do not assume that registers saved by the calling function are 12813 restored before calling the `noreturn' function. 12814 12815 It does not make sense for a `noreturn' function to have a return 12816 type other than `void'. 12817 12818 The attribute `noreturn' is not implemented in GCC versions 12819 earlier than 2.5. An alternative way to declare that a function 12820 does not return, which works in the current version and in some 12821 older versions, is as follows: 12822 12823 typedef void voidfn (); 12824 12825 volatile voidfn fatal; 12826 12827`noinline' 12828 This function attribute prevents a function from being considered 12829 for inlining. 12830 12831`always_inline' 12832 Generally, functions are not inlined unless optimization is 12833 specified. For functions declared inline, this attribute inlines 12834 the function even if no optimization level was specified. 12835 12836`pure' 12837 Many functions have no effects except the return value and their 12838 return value depends only on the parameters and/or global 12839 variables. Such a function can be subject to common subexpression 12840 elimination and loop optimization just as an arithmetic operator 12841 would be. These functions should be declared with the attribute 12842 `pure'. For example, 12843 12844 int square (int) __attribute__ ((pure)); 12845 12846 says that the hypothetical function `square' is safe to call fewer 12847 times than the program says. 12848 12849 Some of common examples of pure functions are `strlen' or `memcmp'. 12850 Interesting non-pure functions are functions with infinite loops 12851 or those depending on volatile memory or other system resource, 12852 that may change between two consecutive calls (such as `feof' in a 12853 multithreading environment). 12854 12855 The attribute `pure' is not implemented in GCC versions earlier 12856 than 2.96. 12857 12858`const' 12859 Many functions do not examine any values except their arguments, 12860 and have no effects except the return value. Basically this is 12861 just slightly more strict class than the `pure' attribute above, 12862 since function is not allowed to read global memory. 12863 12864 Note that a function that has pointer arguments and examines the 12865 data pointed to must _not_ be declared `const'. Likewise, a 12866 function that calls a non-`const' function usually must not be 12867 `const'. It does not make sense for a `const' function to return 12868 `void'. 12869 12870 The attribute `const' is not implemented in GCC versions earlier 12871 than 2.5. An alternative way to declare that a function has no 12872 side effects, which works in the current version and in some older 12873 versions, is as follows: 12874 12875 typedef int intfn (); 12876 12877 extern const intfn square; 12878 12879 This approach does not work in GNU C++ from 2.6.0 on, since the 12880 language specifies that the `const' must be attached to the return 12881 value. 12882 12883`nothrow' 12884 The `nothrow' attribute is used to inform the compiler that a 12885 function cannot throw an exception. For example, most functions in 12886 the standard C library can be guaranteed not to throw an exception 12887 with the notable exceptions of `qsort' and `bsearch' that take 12888 function pointer arguments. The `nothrow' attribute is not 12889 implemented in GCC versions earlier than 3.2. 12890 12891`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 12892 The `format' attribute specifies that a function takes `printf', 12893 `scanf', `strftime' or `strfmon' style arguments which should be 12894 type-checked against a format string. For example, the 12895 declaration: 12896 12897 extern int 12898 my_printf (void *my_object, const char *my_format, ...) 12899 __attribute__ ((format (printf, 2, 3))); 12900 12901 causes the compiler to check the arguments in calls to `my_printf' 12902 for consistency with the `printf' style format string argument 12903 `my_format'. 12904 12905 The parameter ARCHETYPE determines how the format string is 12906 interpreted, and should be `printf', `scanf', `strftime' or 12907 `strfmon'. (You can also use `__printf__', `__scanf__', 12908 `__strftime__' or `__strfmon__'.) The parameter STRING-INDEX 12909 specifies which argument is the format string argument (starting 12910 from 1), while FIRST-TO-CHECK is the number of the first argument 12911 to check against the format string. For functions where the 12912 arguments are not available to be checked (such as `vprintf'), 12913 specify the third parameter as zero. In this case the compiler 12914 only checks the format string for consistency. For `strftime' 12915 formats, the third parameter is required to be zero. Since 12916 non-static C++ methods have an implicit `this' argument, the 12917 arguments of such methods should be counted from two, not one, when 12918 giving values for STRING-INDEX and FIRST-TO-CHECK. 12919 12920 In the example above, the format string (`my_format') is the second 12921 argument of the function `my_print', and the arguments to check 12922 start with the third argument, so the correct parameters for the 12923 format attribute are 2 and 3. 12924 12925 The `format' attribute allows you to identify your own functions 12926 which take format strings as arguments, so that GCC can check the 12927 calls to these functions for errors. The compiler always (unless 12928 `-ffreestanding' is used) checks formats for the standard library 12929 functions `printf', `fprintf', `sprintf', `scanf', `fscanf', 12930 `sscanf', `strftime', `vprintf', `vfprintf' and `vsprintf' 12931 whenever such warnings are requested (using `-Wformat'), so there 12932 is no need to modify the header file `stdio.h'. In C99 mode, the 12933 functions `snprintf', `vsnprintf', `vscanf', `vfscanf' and 12934 `vsscanf' are also checked. Except in strictly conforming C 12935 standard modes, the X/Open function `strfmon' is also checked as 12936 are `printf_unlocked' and `fprintf_unlocked'. *Note Options 12937 Controlling C Dialect: C Dialect Options. 12938 12939`format_arg (STRING-INDEX)' 12940 The `format_arg' attribute specifies that a function takes a format 12941 string for a `printf', `scanf', `strftime' or `strfmon' style 12942 function and modifies it (for example, to translate it into 12943 another language), so the result can be passed to a `printf', 12944 `scanf', `strftime' or `strfmon' style function (with the 12945 remaining arguments to the format function the same as they would 12946 have been for the unmodified string). For example, the 12947 declaration: 12948 12949 extern char * 12950 my_dgettext (char *my_domain, const char *my_format) 12951 __attribute__ ((format_arg (2))); 12952 12953 causes the compiler to check the arguments in calls to a `printf', 12954 `scanf', `strftime' or `strfmon' type function, whose format 12955 string argument is a call to the `my_dgettext' function, for 12956 consistency with the format string argument `my_format'. If the 12957 `format_arg' attribute had not been specified, all the compiler 12958 could tell in such calls to format functions would be that the 12959 format string argument is not constant; this would generate a 12960 warning when `-Wformat-nonliteral' is used, but the calls could 12961 not be checked without the attribute. 12962 12963 The parameter STRING-INDEX specifies which argument is the format 12964 string argument (starting from one). Since non-static C++ methods 12965 have an implicit `this' argument, the arguments of such methods 12966 should be counted from two. 12967 12968 The `format-arg' attribute allows you to identify your own 12969 functions which modify format strings, so that GCC can check the 12970 calls to `printf', `scanf', `strftime' or `strfmon' type function 12971 whose operands are a call to one of your own function. The 12972 compiler always treats `gettext', `dgettext', and `dcgettext' in 12973 this manner except when strict ISO C support is requested by 12974 `-ansi' or an appropriate `-std' option, or `-ffreestanding' is 12975 used. *Note Options Controlling C Dialect: C Dialect Options. 12976 12977`nonnull (ARG-INDEX, ...)' 12978 The `nonnull' attribute specifies that some function parameters 12979 should be non-null pointers. For instance, the declaration: 12980 12981 extern void * 12982 my_memcpy (void *dest, const void *src, size_t len) 12983 __attribute__((nonnull (1, 2))); 12984 12985 causes the compiler to check that, in calls to `my_memcpy', 12986 arguments DEST and SRC are non-null. If the compiler determines 12987 that a null pointer is passed in an argument slot marked as 12988 non-null, and the `-Wnonnull' option is enabled, a warning is 12989 issued. The compiler may also choose to make optimizations based 12990 on the knowledge that certain function arguments will not be null. 12991 12992 If no argument index list is given to the `nonnull' attribute, all 12993 pointer arguments are marked as non-null. To illustrate, the 12994 following declaration is equivalent to the previous example: 12995 12996 extern void * 12997 my_memcpy (void *dest, const void *src, size_t len) 12998 __attribute__((nonnull)); 12999 13000`no_instrument_function' 13001 If `-finstrument-functions' is given, profiling function calls will 13002 be generated at entry and exit of most user-compiled functions. 13003 Functions with this attribute will not be so instrumented. 13004 13005`section ("SECTION-NAME")' 13006 Normally, the compiler places the code it generates in the `text' 13007 section. Sometimes, however, you need additional sections, or you 13008 need certain particular functions to appear in special sections. 13009 The `section' attribute specifies that a function lives in a 13010 particular section. For example, the declaration: 13011 13012 extern void foobar (void) __attribute__ ((section ("bar"))); 13013 13014 puts the function `foobar' in the `bar' section. 13015 13016 Some file formats do not support arbitrary sections so the 13017 `section' attribute is not available on all platforms. If you 13018 need to map the entire contents of a module to a particular 13019 section, consider using the facilities of the linker instead. 13020 13021`constructor' 13022`destructor' 13023 The `constructor' attribute causes the function to be called 13024 automatically before execution enters `main ()'. Similarly, the 13025 `destructor' attribute causes the function to be called 13026 automatically after `main ()' has completed or `exit ()' has been 13027 called. Functions with these attributes are useful for 13028 initializing data that will be used implicitly during the 13029 execution of the program. 13030 13031 These attributes are not currently implemented for Objective-C. 13032 13033`unused' 13034 This attribute, attached to a function, means that the function is 13035 meant to be possibly unused. GCC will not produce a warning for 13036 this function. 13037 13038`used' 13039 This attribute, attached to a function, means that code must be 13040 emitted for the function even if it appears that the function is 13041 not referenced. This is useful, for example, when the function is 13042 referenced only in inline assembly. 13043 13044`deprecated' 13045 The `deprecated' attribute results in a warning if the function is 13046 used anywhere in the source file. This is useful when identifying 13047 functions that are expected to be removed in a future version of a 13048 program. The warning also includes the location of the declaration 13049 of the deprecated function, to enable users to easily find further 13050 information about why the function is deprecated, or what they 13051 should do instead. Note that the warnings only occurs for uses: 13052 13053 int old_fn () __attribute__ ((deprecated)); 13054 int old_fn (); 13055 int (*fn_ptr)() = old_fn; 13056 13057 results in a warning on line 3 but not line 2. 13058 13059 The `deprecated' attribute can also be used for variables and 13060 types (*note Variable Attributes::, *note Type Attributes::.) 13061 13062`warn_unused_result' 13063 The `warn_unused_result' attribute causes a warning to be emitted 13064 if a caller of the function with this attribute does not use its 13065 return value. This is useful for functions where not checking the 13066 result is either a security problem or always a bug, such as 13067 `realloc'. 13068 13069 int fn () __attribute__ ((warn_unused_result)); 13070 int foo () 13071 { 13072 if (fn () < 0) return -1; 13073 fn (); 13074 return 0; 13075 } 13076 13077 results in warning on line 5. 13078 13079`weak' 13080 The `weak' attribute causes the declaration to be emitted as a weak 13081 symbol rather than a global. This is primarily useful in defining 13082 library functions which can be overridden in user code, though it 13083 can also be used with non-function declarations. Weak symbols are 13084 supported for ELF targets, and also for a.out targets when using 13085 the GNU assembler and linker. 13086 13087`malloc' 13088 The `malloc' attribute is used to tell the compiler that a function 13089 may be treated as if any non-`NULL' pointer it returns cannot 13090 alias any other pointer valid when the function returns. This 13091 will often improve optimization. Standard functions with this 13092 property include `malloc' and `calloc'. `realloc'-like functions 13093 have this property as long as the old pointer is never referred to 13094 (including comparing it to the new pointer) after the function 13095 returns a non-`NULL' value. 13096 13097`alias ("TARGET")' 13098 The `alias' attribute causes the declaration to be emitted as an 13099 alias for another symbol, which must be specified. For instance, 13100 13101 void __f () { /* Do something. */; } 13102 void f () __attribute__ ((weak, alias ("__f"))); 13103 13104 declares `f' to be a weak alias for `__f'. In C++, the mangled 13105 name for the target must be used. 13106 13107 Not all target machines support this attribute. 13108 13109`visibility ("VISIBILITY_TYPE")' 13110 The `visibility' attribute on ELF targets causes the declaration 13111 to be emitted with default, hidden, protected or internal 13112 visibility. 13113 13114 void __attribute__ ((visibility ("protected"))) 13115 f () { /* Do something. */; } 13116 int i __attribute__ ((visibility ("hidden"))); 13117 13118 See the ELF gABI for complete details, but the short story is: 13119 13120 "default" 13121 Default visibility is the normal case for ELF. This value is 13122 available for the visibility attribute to override other 13123 options that may change the assumed visibility of symbols. 13124 13125 "hidden" 13126 Hidden visibility indicates that the symbol will not be 13127 placed into the dynamic symbol table, so no other "module" 13128 (executable or shared library) can reference it directly. 13129 13130 "protected" 13131 Protected visibility indicates that the symbol will be placed 13132 in the dynamic symbol table, but that references within the 13133 defining module will bind to the local symbol. That is, the 13134 symbol cannot be overridden by another module. 13135 13136 "internal" 13137 Internal visibility is like hidden visibility, but with 13138 additional processor specific semantics. Unless otherwise 13139 specified by the psABI, GCC defines internal visibility to 13140 mean that the function is _never_ called from another module. 13141 Note that hidden symbols, while they cannot be referenced 13142 directly by other modules, can be referenced indirectly via 13143 function pointers. By indicating that a symbol cannot be 13144 called from outside the module, GCC may for instance omit the 13145 load of a PIC register since it is known that the calling 13146 function loaded the correct value. 13147 13148 Not all ELF targets support this attribute. 13149 13150`regparm (NUMBER)' 13151 On the Intel 386, the `regparm' attribute causes the compiler to 13152 pass up to NUMBER integer arguments in registers EAX, EDX, and ECX 13153 instead of on the stack. Functions that take a variable number of 13154 arguments will continue to be passed all of their arguments on the 13155 stack. 13156 13157 Beware that on some ELF systems this attribute is unsuitable for 13158 global functions in shared libraries with lazy binding (which is 13159 the default). Lazy binding will send the first call via resolving 13160 code in the loader, which might assume EAX, EDX and ECX can be 13161 clobbered, as per the standard calling conventions. Solaris 8 is 13162 affected by this. GNU systems with GLIBC 2.1 or higher, and 13163 FreeBSD, are believed to be safe since the loaders there save all 13164 registers. (Lazy binding can be disabled with the linker or the 13165 loader if desired, to avoid the problem.) 13166 13167`stdcall' 13168 On the Intel 386, the `stdcall' attribute causes the compiler to 13169 assume that the called function will pop off the stack space used 13170 to pass arguments, unless it takes a variable number of arguments. 13171 13172`fastcall' 13173 On the Intel 386, the `fastcall' attribute causes the compiler to 13174 pass the first two arguments in the registers ECX and EDX. 13175 Subsequent arguments are passed on the stack. The called function 13176 will pop the arguments off the stack. If the number of arguments 13177 is variable all arguments are pushed on the stack. 13178 13179`cdecl' 13180 On the Intel 386, the `cdecl' attribute causes the compiler to 13181 assume that the calling function will pop off the stack space used 13182 to pass arguments. This is useful to override the effects of the 13183 `-mrtd' switch. 13184 13185`longcall/shortcall' 13186 On the RS/6000 and PowerPC, the `longcall' attribute causes the 13187 compiler to always call this function via a pointer, just as it 13188 would if the `-mlongcall' option had been specified. The 13189 `shortcall' attribute causes the compiler not to do this. These 13190 attributes override both the `-mlongcall' switch and the `#pragma 13191 longcall' setting. 13192 13193 *Note RS/6000 and PowerPC Options::, for more information on 13194 whether long calls are necessary. 13195 13196`long_call/short_call' 13197 This attribute specifies how a particular function is called on 13198 ARM. Both attributes override the `-mlong-calls' (*note ARM 13199 Options::) command line switch and `#pragma long_calls' settings. 13200 The `long_call' attribute causes the compiler to always call the 13201 function by first loading its address into a register and then 13202 using the contents of that register. The `short_call' attribute 13203 always places the offset to the function from the call site into 13204 the `BL' instruction directly. 13205 13206`function_vector' 13207 Use this attribute on the H8/300, H8/300H, and H8S to indicate 13208 that the specified function should be called through the function 13209 vector. Calling a function through the function vector will 13210 reduce code size, however; the function vector has a limited size 13211 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 13212 and H8S) and shares space with the interrupt vector. 13213 13214 You must use GAS and GLD from GNU binutils version 2.7 or later for 13215 this attribute to work correctly. 13216 13217`interrupt' 13218 Use this attribute on the ARM, AVR, C4x, M32R/D and Xstormy16 13219 ports to indicate that the specified function is an interrupt 13220 handler. The compiler will generate function entry and exit 13221 sequences suitable for use in an interrupt handler when this 13222 attribute is present. 13223 13224 Note, interrupt handlers for the m68k, H8/300, H8/300H, H8S, and 13225 SH processors can be specified via the `interrupt_handler' 13226 attribute. 13227 13228 Note, on the AVR, interrupts will be enabled inside the function. 13229 13230 Note, for the ARM, you can specify the kind of interrupt to be 13231 handled by adding an optional parameter to the interrupt attribute 13232 like this: 13233 13234 void f () __attribute__ ((interrupt ("IRQ"))); 13235 13236 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT 13237 and UNDEF. 13238 13239`interrupt_handler' 13240 Use this attribute on the m68k, H8/300, H8/300H, H8S, and SH to 13241 indicate that the specified function is an interrupt handler. The 13242 compiler will generate function entry and exit sequences suitable 13243 for use in an interrupt handler when this attribute is present. 13244 13245`sp_switch' 13246 Use this attribute on the SH to indicate an `interrupt_handler' 13247 function should switch to an alternate stack. It expects a string 13248 argument that names a global variable holding the address of the 13249 alternate stack. 13250 13251 void *alt_stack; 13252 void f () __attribute__ ((interrupt_handler, 13253 sp_switch ("alt_stack"))); 13254 13255`trap_exit' 13256 Use this attribute on the SH for an `interrupt_handler' to return 13257 using `trapa' instead of `rte'. This attribute expects an integer 13258 argument specifying the trap number to be used. 13259 13260`eightbit_data' 13261 Use this attribute on the H8/300, H8/300H, and H8S to indicate 13262 that the specified variable should be placed into the eight bit 13263 data section. The compiler will generate more efficient code for 13264 certain operations on data in the eight bit data area. Note the 13265 eight bit data area is limited to 256 bytes of data. 13266 13267 You must use GAS and GLD from GNU binutils version 2.7 or later for 13268 this attribute to work correctly. 13269 13270`tiny_data' 13271 Use this attribute on the H8/300H and H8S to indicate that the 13272 specified variable should be placed into the tiny data section. 13273 The compiler will generate more efficient code for loads and stores 13274 on data in the tiny data section. Note the tiny data area is 13275 limited to slightly under 32kbytes of data. 13276 13277`saveall' 13278 Use this attribute on the H8/300, H8/300H, and H8S to indicate that 13279 all registers except the stack pointer should be saved in the 13280 prologue regardless of whether they are used or not. 13281 13282`signal' 13283 Use this attribute on the AVR to indicate that the specified 13284 function is a signal handler. The compiler will generate function 13285 entry and exit sequences suitable for use in a signal handler when 13286 this attribute is present. Interrupts will be disabled inside the 13287 function. 13288 13289`naked' 13290 Use this attribute on the ARM, AVR, C4x and IP2K ports to indicate 13291 that the specified function does not need prologue/epilogue 13292 sequences generated by the compiler. It is up to the programmer 13293 to provide these sequences. 13294 13295`model (MODEL-NAME)' 13296 On the M32R/D, use this attribute to set the addressability of an 13297 object, and of the code generated for a function. The identifier 13298 MODEL-NAME is one of `small', `medium', or `large', representing 13299 each of the code models. 13300 13301 Small model objects live in the lower 16MB of memory (so that their 13302 addresses can be loaded with the `ld24' instruction), and are 13303 callable with the `bl' instruction. 13304 13305 Medium model objects may live anywhere in the 32-bit address space 13306 (the compiler will generate `seth/add3' instructions to load their 13307 addresses), and are callable with the `bl' instruction. 13308 13309 Large model objects may live anywhere in the 32-bit address space 13310 (the compiler will generate `seth/add3' instructions to load their 13311 addresses), and may not be reachable with the `bl' instruction 13312 (the compiler will generate the much slower `seth/add3/jl' 13313 instruction sequence). 13314 13315 On IA-64, use this attribute to set the addressability of an 13316 object. At present, the only supported identifier for MODEL-NAME 13317 is `small', indicating addressability via "small" (22-bit) 13318 addresses (so that their addresses can be loaded with the `addl' 13319 instruction). Caveat: such addressing is by definition not 13320 position independent and hence this attribute must not be used for 13321 objects defined by shared libraries. 13322 13323`far' 13324 On 68HC11 and 68HC12 the `far' attribute causes the compiler to 13325 use a calling convention that takes care of switching memory banks 13326 when entering and leaving a function. This calling convention is 13327 also the default when using the `-mlong-calls' option. 13328 13329 On 68HC12 the compiler will use the `call' and `rtc' instructions 13330 to call and return from a function. 13331 13332 On 68HC11 the compiler will generate a sequence of instructions to 13333 invoke a board-specific routine to switch the memory bank and call 13334 the real function. The board-specific routine simulates a `call'. 13335 At the end of a function, it will jump to a board-specific routine 13336 instead of using `rts'. The board-specific return routine simulates 13337 the `rtc'. 13338 13339`near' 13340 On 68HC11 and 68HC12 the `near' attribute causes the compiler to 13341 use the normal calling convention based on `jsr' and `rts'. This 13342 attribute can be used to cancel the effect of the `-mlong-calls' 13343 option. 13344 13345`dllimport' 13346 On Microsoft Windows targets, the `dllimport' attribute causes the 13347 compiler to reference a function or variable via a global pointer 13348 to a pointer that is set up by the Microsoft Windows dll library. 13349 The pointer name is formed by combining `_imp__' and the function 13350 or variable name. The attribute implies `extern' storage. 13351 13352 Currently, the attribute is ignored for inlined functions. If the 13353 attribute is applied to a symbol _definition_, an error is 13354 reported. If a symbol previously declared `dllimport' is later 13355 defined, the attribute is ignored in subsequent references, and a 13356 warning is emitted. The attribute is also overridden by a 13357 subsequent declaration as `dllexport'. 13358 13359 When applied to C++ classes, the attribute marks non-inlined 13360 member functions and static data members as imports. However, the 13361 attribute is ignored for virtual methods to allow creation of 13362 vtables using thunks. 13363 13364 On cygwin, mingw and arm-pe targets, `__declspec(dllimport)' is 13365 recognized as a synonym for `__attribute__ ((dllimport))' for 13366 compatibility with other Microsoft Windows compilers. 13367 13368 The use of the `dllimport' attribute on functions is not necessary, 13369 but provides a small performance benefit by eliminating a thunk in 13370 the dll. The use of the `dllimport' attribute on imported 13371 variables was required on older versions of GNU ld, but can now be 13372 avoided by passing the `--enable-auto-import' switch to ld. As 13373 with functions, using the attribute for a variable eliminates a 13374 thunk in the dll. 13375 13376 One drawback to using this attribute is that a pointer to a 13377 function or variable marked as dllimport cannot be used as a 13378 constant address. The attribute can be disabled for functions by 13379 setting the `-mnop-fun-dllimport' flag. 13380 13381`dllexport' 13382 On Microsoft Windows targets the `dllexport' attribute causes the 13383 compiler to provide a global pointer to a pointer in a dll, so 13384 that it can be referenced with the `dllimport' attribute. The 13385 pointer name is formed by combining `_imp__' and the function or 13386 variable name. 13387 13388 Currently, the `dllexport'attribute is ignored for inlined 13389 functions, but export can be forced by using the 13390 `-fkeep-inline-functions' flag. The attribute is also ignored for 13391 undefined symbols. 13392 13393 When applied to C++ classes. the attribute marks defined 13394 non-inlined member functions and static data members as exports. 13395 Static consts initialized in-class are not marked unless they are 13396 also defined out-of-class. 13397 13398 On cygwin, mingw and arm-pe targets, `__declspec(dllexport)' is 13399 recognized as a synonym for `__attribute__ ((dllexport))' for 13400 compatibility with other Microsoft Windows compilers. 13401 13402 Alternative methods for including the symbol in the dll's export 13403 table are to use a .def file with an `EXPORTS' section or, with 13404 GNU ld, using the `--export-all' linker flag. 13405 13406 13407 You can specify multiple attributes in a declaration by separating them 13408by commas within the double parentheses or by immediately following an 13409attribute declaration with another attribute declaration. 13410 13411 Some people object to the `__attribute__' feature, suggesting that ISO 13412C's `#pragma' should be used instead. At the time `__attribute__' was 13413designed, there were two reasons for not doing this. 13414 13415 1. It is impossible to generate `#pragma' commands from a macro. 13416 13417 2. There is no telling what the same `#pragma' might mean in another 13418 compiler. 13419 13420 These two reasons applied to almost any application that might have 13421been proposed for `#pragma'. It was basically a mistake to use 13422`#pragma' for _anything_. 13423 13424 The ISO C99 standard includes `_Pragma', which now allows pragmas to 13425be generated from macros. In addition, a `#pragma GCC' namespace is 13426now in use for GCC-specific pragmas. However, it has been found 13427convenient to use `__attribute__' to achieve a natural attachment of 13428attributes to their corresponding declarations, whereas `#pragma GCC' 13429is of use for constructs that do not naturally form part of the 13430grammar. *Note Miscellaneous Preprocessing Directives: (cpp)Other 13431Directives. 13432 13433 13434File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 13435 134365.26 Attribute Syntax 13437===================== 13438 13439This section describes the syntax with which `__attribute__' may be 13440used, and the constructs to which attribute specifiers bind, for the C 13441language. Some details may vary for C++ and Objective-C. Because of 13442infelicities in the grammar for attributes, some forms described here 13443may not be successfully parsed in all cases. 13444 13445 There are some problems with the semantics of attributes in C++. For 13446example, there are no manglings for attributes, although they may affect 13447code generation, so problems may arise when attributed types are used in 13448conjunction with templates or overloading. Similarly, `typeid' does 13449not distinguish between types with different attributes. Support for 13450attributes in C++ may be restricted in future to attributes on 13451declarations only, but not on nested declarators. 13452 13453 *Note Function Attributes::, for details of the semantics of attributes 13454applying to functions. *Note Variable Attributes::, for details of the 13455semantics of attributes applying to variables. *Note Type Attributes::, 13456for details of the semantics of attributes applying to structure, union 13457and enumerated types. 13458 13459 An "attribute specifier" is of the form `__attribute__ 13460((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 13461comma-separated sequence of "attributes", where each attribute is one 13462of the following: 13463 13464 * Empty. Empty attributes are ignored. 13465 13466 * A word (which may be an identifier such as `unused', or a reserved 13467 word such as `const'). 13468 13469 * A word, followed by, in parentheses, parameters for the attribute. 13470 These parameters take one of the following forms: 13471 13472 * An identifier. For example, `mode' attributes use this form. 13473 13474 * An identifier followed by a comma and a non-empty 13475 comma-separated list of expressions. For example, `format' 13476 attributes use this form. 13477 13478 * A possibly empty comma-separated list of expressions. For 13479 example, `format_arg' attributes use this form with the list 13480 being a single integer constant expression, and `alias' 13481 attributes use this form with the list being a single string 13482 constant. 13483 13484 An "attribute specifier list" is a sequence of one or more attribute 13485specifiers, not separated by any other tokens. 13486 13487 In GNU C, an attribute specifier list may appear after the colon 13488following a label, other than a `case' or `default' label. The only 13489attribute it makes sense to use after a label is `unused'. This 13490feature is intended for code generated by programs which contains labels 13491that may be unused but which is compiled with `-Wall'. It would not 13492normally be appropriate to use in it human-written code, though it 13493could be useful in cases where the code that jumps to the label is 13494contained within an `#ifdef' conditional. GNU C++ does not permit such 13495placement of attribute lists, as it is permissible for a declaration, 13496which could begin with an attribute list, to be labelled in C++. 13497Declarations cannot be labelled in C90 or C99, so the ambiguity does 13498not arise there. 13499 13500 An attribute specifier list may appear as part of a `struct', `union' 13501or `enum' specifier. It may go either immediately after the `struct', 13502`union' or `enum' keyword, or after the closing brace. It is ignored 13503if the content of the structure, union or enumerated type is not 13504defined in the specifier in which the attribute specifier list is 13505used--that is, in usages such as `struct __attribute__((foo)) bar' with 13506no following opening brace. Where attribute specifiers follow the 13507closing brace, they are considered to relate to the structure, union or 13508enumerated type defined, not to any enclosing declaration the type 13509specifier appears in, and the type defined is not complete until after 13510the attribute specifiers. 13511 13512 Otherwise, an attribute specifier appears as part of a declaration, 13513counting declarations of unnamed parameters and type names, and relates 13514to that declaration (which may be nested in another declaration, for 13515example in the case of a parameter declaration), or to a particular 13516declarator within a declaration. Where an attribute specifier is 13517applied to a parameter declared as a function or an array, it should 13518apply to the function or array rather than the pointer to which the 13519parameter is implicitly converted, but this is not yet correctly 13520implemented. 13521 13522 Any list of specifiers and qualifiers at the start of a declaration may 13523contain attribute specifiers, whether or not such a list may in that 13524context contain storage class specifiers. (Some attributes, however, 13525are essentially in the nature of storage class specifiers, and only make 13526sense where storage class specifiers may be used; for example, 13527`section'.) There is one necessary limitation to this syntax: the 13528first old-style parameter declaration in a function definition cannot 13529begin with an attribute specifier, because such an attribute applies to 13530the function instead by syntax described below (which, however, is not 13531yet implemented in this case). In some other cases, attribute 13532specifiers are permitted by this grammar but not yet supported by the 13533compiler. All attribute specifiers in this place relate to the 13534declaration as a whole. In the obsolescent usage where a type of `int' 13535is implied by the absence of type specifiers, such a list of specifiers 13536and qualifiers may be an attribute specifier list with no other 13537specifiers or qualifiers. 13538 13539 An attribute specifier list may appear immediately before a declarator 13540(other than the first) in a comma-separated list of declarators in a 13541declaration of more than one identifier using a single list of 13542specifiers and qualifiers. Such attribute specifiers apply only to the 13543identifier before whose declarator they appear. For example, in 13544 13545 __attribute__((noreturn)) void d0 (void), 13546 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 13547 d2 (void) 13548 13549the `noreturn' attribute applies to all the functions declared; the 13550`format' attribute only applies to `d1'. 13551 13552 An attribute specifier list may appear immediately before the comma, 13553`=' or semicolon terminating the declaration of an identifier other 13554than a function definition. At present, such attribute specifiers apply 13555to the declared object or function, but in future they may attach to the 13556outermost adjacent declarator. In simple cases there is no difference, 13557but, for example, in 13558 13559 void (****f)(void) __attribute__((noreturn)); 13560 13561at present the `noreturn' attribute applies to `f', which causes a 13562warning since `f' is not a function, but in future it may apply to the 13563function `****f'. The precise semantics of what attributes in such 13564cases will apply to are not yet specified. Where an assembler name for 13565an object or function is specified (*note Asm Labels::), at present the 13566attribute must follow the `asm' specification; in future, attributes 13567before the `asm' specification may apply to the adjacent declarator, 13568and those after it to the declared object or function. 13569 13570 An attribute specifier list may, in future, be permitted to appear 13571after the declarator in a function definition (before any old-style 13572parameter declarations or the function body). 13573 13574 Attribute specifiers may be mixed with type qualifiers appearing inside 13575the `[]' of a parameter array declarator, in the C99 construct by which 13576such qualifiers are applied to the pointer to which the array is 13577implicitly converted. Such attribute specifiers apply to the pointer, 13578not to the array, but at present this is not implemented and they are 13579ignored. 13580 13581 An attribute specifier list may appear at the start of a nested 13582declarator. At present, there are some limitations in this usage: the 13583attributes correctly apply to the declarator, but for most individual 13584attributes the semantics this implies are not implemented. When 13585attribute specifiers follow the `*' of a pointer declarator, they may 13586be mixed with any type qualifiers present. The following describes the 13587formal semantics of this syntax. It will make the most sense if you 13588are familiar with the formal specification of declarators in the ISO C 13589standard. 13590 13591 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 13592where `T' contains declaration specifiers that specify a type TYPE 13593(such as `int') and `D1' is a declarator that contains an identifier 13594IDENT. The type specified for IDENT for derived declarators whose type 13595does not include an attribute specifier is as in the ISO C standard. 13596 13597 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 13598declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 13599TYPE" for IDENT, then `T D1' specifies the type 13600"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 13601 13602 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 13603D', and the declaration `T D' specifies the type 13604"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 13605the type "DERIVED-DECLARATOR-TYPE-LIST 13606TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 13607 13608 For example, 13609 13610 void (__attribute__((noreturn)) ****f) (void); 13611 13612specifies the type "pointer to pointer to pointer to pointer to 13613non-returning function returning `void'". As another example, 13614 13615 char *__attribute__((aligned(8))) *f; 13616 13617specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 13618again that this does not work with most attributes; for example, the 13619usage of `aligned' and `noreturn' attributes given above is not yet 13620supported. 13621 13622 For compatibility with existing code written for compiler versions that 13623did not implement attributes on nested declarators, some laxity is 13624allowed in the placing of attributes. If an attribute that only applies 13625to types is applied to a declaration, it will be treated as applying to 13626the type of that declaration. If an attribute that only applies to 13627declarations is applied to the type of a declaration, it will be treated 13628as applying to that declaration; and, for compatibility with code 13629placing the attributes immediately before the identifier declared, such 13630an attribute applied to a function return type will be treated as 13631applying to the function type, and such an attribute applied to an array 13632element type will be treated as applying to the array type. If an 13633attribute that only applies to function types is applied to a 13634pointer-to-function type, it will be treated as applying to the pointer 13635target type; if such an attribute is applied to a function return type 13636that is not a pointer-to-function type, it will be treated as applying 13637to the function type. 13638 13639 13640File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 13641 136425.27 Prototypes and Old-Style Function Definitions 13643================================================== 13644 13645GNU C extends ISO C to allow a function prototype to override a later 13646old-style non-prototype definition. Consider the following example: 13647 13648 /* Use prototypes unless the compiler is old-fashioned. */ 13649 #ifdef __STDC__ 13650 #define P(x) x 13651 #else 13652 #define P(x) () 13653 #endif 13654 13655 /* Prototype function declaration. */ 13656 int isroot P((uid_t)); 13657 13658 /* Old-style function definition. */ 13659 int 13660 isroot (x) /* ??? lossage here ??? */ 13661 uid_t x; 13662 { 13663 return x == 0; 13664 } 13665 13666 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 13667this example, because subword arguments in old-style non-prototype 13668definitions are promoted. Therefore in this example the function 13669definition's argument is really an `int', which does not match the 13670prototype argument type of `short'. 13671 13672 This restriction of ISO C makes it hard to write code that is portable 13673to traditional C compilers, because the programmer does not know 13674whether the `uid_t' type is `short', `int', or `long'. Therefore, in 13675cases like these GNU C allows a prototype to override a later old-style 13676definition. More precisely, in GNU C, a function prototype argument 13677type overrides the argument type specified by a later old-style 13678definition if the former type is the same as the latter type before 13679promotion. Thus in GNU C the above example is equivalent to the 13680following: 13681 13682 int isroot (uid_t); 13683 13684 int 13685 isroot (uid_t x) 13686 { 13687 return x == 0; 13688 } 13689 13690GNU C++ does not support old-style function definitions, so this 13691extension is irrelevant. 13692 13693 13694File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 13695 136965.28 C++ Style Comments 13697======================= 13698 13699In GNU C, you may use C++ style comments, which start with `//' and 13700continue until the end of the line. Many other C implementations allow 13701such comments, and they are included in the 1999 C standard. However, 13702C++ style comments are not recognized if you specify an `-std' option 13703specifying a version of ISO C before C99, or `-ansi' (equivalent to 13704`-std=c89'). 13705 13706 13707File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 13708 137095.29 Dollar Signs in Identifier Names 13710===================================== 13711 13712In GNU C, you may normally use dollar signs in identifier names. This 13713is because many traditional C implementations allow such identifiers. 13714However, dollar signs in identifiers are not supported on a few target 13715machines, typically because the target assembler does not allow them. 13716 13717 13718File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 13719 137205.30 The Character <ESC> in Constants 13721===================================== 13722 13723You can use the sequence `\e' in a string or character constant to 13724stand for the ASCII character <ESC>. 13725 13726 13727File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 13728 137295.31 Inquiring on Alignment of Types or Variables 13730================================================= 13731 13732The keyword `__alignof__' allows you to inquire about how an object is 13733aligned, or the minimum alignment usually required by a type. Its 13734syntax is just like `sizeof'. 13735 13736 For example, if the target machine requires a `double' value to be 13737aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 13738is true on many RISC machines. On more traditional machine designs, 13739`__alignof__ (double)' is 4 or even 2. 13740 13741 Some machines never actually require alignment; they allow reference 13742to any data type even at an odd address. For these machines, 13743`__alignof__' reports the _recommended_ alignment of a type. 13744 13745 If the operand of `__alignof__' is an lvalue rather than a type, its 13746value is the required alignment for its type, taking into account any 13747minimum alignment specified with GCC's `__attribute__' extension (*note 13748Variable Attributes::). For example, after this declaration: 13749 13750 struct foo { int x; char y; } foo1; 13751 13752the value of `__alignof__ (foo1.y)' is 1, even though its actual 13753alignment is probably 2 or 4, the same as `__alignof__ (int)'. 13754 13755 It is an error to ask for the alignment of an incomplete type. 13756 13757 13758File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 13759 137605.32 Specifying Attributes of Variables 13761======================================= 13762 13763The keyword `__attribute__' allows you to specify special attributes of 13764variables or structure fields. This keyword is followed by an 13765attribute specification inside double parentheses. Some attributes are 13766currently defined generically for variables. Other attributes are 13767defined for variables on particular target systems. Other attributes 13768are available for functions (*note Function Attributes::) and for types 13769(*note Type Attributes::). Other front ends might define more 13770attributes (*note Extensions to the C++ Language: C++ Extensions.). 13771 13772 You may also specify attributes with `__' preceding and following each 13773keyword. This allows you to use them in header files without being 13774concerned about a possible macro of the same name. For example, you 13775may use `__aligned__' instead of `aligned'. 13776 13777 *Note Attribute Syntax::, for details of the exact syntax for using 13778attributes. 13779 13780`aligned (ALIGNMENT)' 13781 This attribute specifies a minimum alignment for the variable or 13782 structure field, measured in bytes. For example, the declaration: 13783 13784 int x __attribute__ ((aligned (16))) = 0; 13785 13786 causes the compiler to allocate the global variable `x' on a 13787 16-byte boundary. On a 68040, this could be used in conjunction 13788 with an `asm' expression to access the `move16' instruction which 13789 requires 16-byte aligned operands. 13790 13791 You can also specify the alignment of structure fields. For 13792 example, to create a double-word aligned `int' pair, you could 13793 write: 13794 13795 struct foo { int x[2] __attribute__ ((aligned (8))); }; 13796 13797 This is an alternative to creating a union with a `double' member 13798 that forces the union to be double-word aligned. 13799 13800 As in the preceding examples, you can explicitly specify the 13801 alignment (in bytes) that you wish the compiler to use for a given 13802 variable or structure field. Alternatively, you can leave out the 13803 alignment factor and just ask the compiler to align a variable or 13804 field to the maximum useful alignment for the target machine you 13805 are compiling for. For example, you could write: 13806 13807 short array[3] __attribute__ ((aligned)); 13808 13809 Whenever you leave out the alignment factor in an `aligned' 13810 attribute specification, the compiler automatically sets the 13811 alignment for the declared variable or field to the largest 13812 alignment which is ever used for any data type on the target 13813 machine you are compiling for. Doing this can often make copy 13814 operations more efficient, because the compiler can use whatever 13815 instructions copy the biggest chunks of memory when performing 13816 copies to or from the variables or fields that you have aligned 13817 this way. 13818 13819 The `aligned' attribute can only increase the alignment; but you 13820 can decrease it by specifying `packed' as well. See below. 13821 13822 Note that the effectiveness of `aligned' attributes may be limited 13823 by inherent limitations in your linker. On many systems, the 13824 linker is only able to arrange for variables to be aligned up to a 13825 certain maximum alignment. (For some linkers, the maximum 13826 supported alignment may be very very small.) If your linker is 13827 only able to align variables up to a maximum of 8 byte alignment, 13828 then specifying `aligned(16)' in an `__attribute__' will still 13829 only provide you with 8 byte alignment. See your linker 13830 documentation for further information. 13831 13832`cleanup (CLEANUP_FUNCTION)' 13833 The `cleanup' attribute runs a function when the variable goes out 13834 of scope. This attribute can only be applied to auto function 13835 scope variables; it may not be applied to parameters or variables 13836 with static storage duration. The function must take one 13837 parameter, a pointer to a type compatible with the variable. The 13838 return value of the function (if any) is ignored. 13839 13840 If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run 13841 during the stack unwinding that happens during the processing of 13842 the exception. Note that the `cleanup' attribute does not allow 13843 the exception to be caught, only to perform an action. It is 13844 undefined what happens if CLEANUP_FUNCTION does not return 13845 normally. 13846 13847`common' 13848`nocommon' 13849 The `common' attribute requests GCC to place a variable in 13850 "common" storage. The `nocommon' attribute requests the opposite 13851 - to allocate space for it directly. 13852 13853 These attributes override the default chosen by the `-fno-common' 13854 and `-fcommon' flags respectively. 13855 13856`deprecated' 13857 The `deprecated' attribute results in a warning if the variable is 13858 used anywhere in the source file. This is useful when identifying 13859 variables that are expected to be removed in a future version of a 13860 program. The warning also includes the location of the declaration 13861 of the deprecated variable, to enable users to easily find further 13862 information about why the variable is deprecated, or what they 13863 should do instead. Note that the warning only occurs for uses: 13864 13865 extern int old_var __attribute__ ((deprecated)); 13866 extern int old_var; 13867 int new_fn () { return old_var; } 13868 13869 results in a warning on line 3 but not line 2. 13870 13871 The `deprecated' attribute can also be used for functions and 13872 types (*note Function Attributes::, *note Type Attributes::.) 13873 13874`mode (MODE)' 13875 This attribute specifies the data type for the 13876 declaration--whichever type corresponds to the mode MODE. This in 13877 effect lets you request an integer or floating point type 13878 according to its width. 13879 13880 You may also specify a mode of `byte' or `__byte__' to indicate 13881 the mode corresponding to a one-byte integer, `word' or `__word__' 13882 for the mode of a one-word integer, and `pointer' or `__pointer__' 13883 for the mode used to represent pointers. 13884 13885`packed' 13886 The `packed' attribute specifies that a variable or structure field 13887 should have the smallest possible alignment--one byte for a 13888 variable, and one bit for a field, unless you specify a larger 13889 value with the `aligned' attribute. 13890 13891 Here is a structure in which the field `x' is packed, so that it 13892 immediately follows `a': 13893 13894 struct foo 13895 { 13896 char a; 13897 int x[2] __attribute__ ((packed)); 13898 }; 13899 13900`section ("SECTION-NAME")' 13901 Normally, the compiler places the objects it generates in sections 13902 like `data' and `bss'. Sometimes, however, you need additional 13903 sections, or you need certain particular variables to appear in 13904 special sections, for example to map to special hardware. The 13905 `section' attribute specifies that a variable (or function) lives 13906 in a particular section. For example, this small program uses 13907 several specific section names: 13908 13909 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 13910 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 13911 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 13912 int init_data __attribute__ ((section ("INITDATA"))) = 0; 13913 13914 main() 13915 { 13916 /* Initialize stack pointer */ 13917 init_sp (stack + sizeof (stack)); 13918 13919 /* Initialize initialized data */ 13920 memcpy (&init_data, &data, &edata - &data); 13921 13922 /* Turn on the serial ports */ 13923 init_duart (&a); 13924 init_duart (&b); 13925 } 13926 13927 Use the `section' attribute with an _initialized_ definition of a 13928 _global_ variable, as shown in the example. GCC issues a warning 13929 and otherwise ignores the `section' attribute in uninitialized 13930 variable declarations. 13931 13932 You may only use the `section' attribute with a fully initialized 13933 global definition because of the way linkers work. The linker 13934 requires each object be defined once, with the exception that 13935 uninitialized variables tentatively go in the `common' (or `bss') 13936 section and can be multiply "defined". You can force a variable 13937 to be initialized with the `-fno-common' flag or the `nocommon' 13938 attribute. 13939 13940 Some file formats do not support arbitrary sections so the 13941 `section' attribute is not available on all platforms. If you 13942 need to map the entire contents of a module to a particular 13943 section, consider using the facilities of the linker instead. 13944 13945`shared' 13946 On Microsoft Windows, in addition to putting variable definitions 13947 in a named section, the section can also be shared among all 13948 running copies of an executable or DLL. For example, this small 13949 program defines shared data by putting it in a named section 13950 `shared' and marking the section shareable: 13951 13952 int foo __attribute__((section ("shared"), shared)) = 0; 13953 13954 int 13955 main() 13956 { 13957 /* Read and write foo. All running 13958 copies see the same value. */ 13959 return 0; 13960 } 13961 13962 You may only use the `shared' attribute along with `section' 13963 attribute with a fully initialized global definition because of 13964 the way linkers work. See `section' attribute for more 13965 information. 13966 13967 The `shared' attribute is only available on Microsoft Windows. 13968 13969`tls_model ("TLS_MODEL")' 13970 The `tls_model' attribute sets thread-local storage model (*note 13971 Thread-Local::) of a particular `__thread' variable, overriding 13972 `-ftls-model=' command line switch on a per-variable basis. The 13973 TLS_MODEL argument should be one of `global-dynamic', 13974 `local-dynamic', `initial-exec' or `local-exec'. 13975 13976 Not all targets support this attribute. 13977 13978`transparent_union' 13979 This attribute, attached to a function parameter which is a union, 13980 means that the corresponding argument may have the type of any 13981 union member, but the argument is passed as if its type were that 13982 of the first union member. For more details see *Note Type 13983 Attributes::. You can also use this attribute on a `typedef' for 13984 a union data type; then it applies to all function parameters with 13985 that type. 13986 13987`unused' 13988 This attribute, attached to a variable, means that the variable is 13989 meant to be possibly unused. GCC will not produce a warning for 13990 this variable. 13991 13992`vector_size (BYTES)' 13993 This attribute specifies the vector size for the variable, 13994 measured in bytes. For example, the declaration: 13995 13996 int foo __attribute__ ((vector_size (16))); 13997 13998 causes the compiler to set the mode for `foo', to be 16 bytes, 13999 divided into `int' sized units. Assuming a 32-bit int (a vector of 14000 4 units of 4 bytes), the corresponding mode of `foo' will be V4SI. 14001 14002 This attribute is only applicable to integral and float scalars, 14003 although arrays, pointers, and function return values are allowed 14004 in conjunction with this construct. 14005 14006 Aggregates with this attribute are invalid, even if they are of 14007 the same size as a corresponding scalar. For example, the 14008 declaration: 14009 14010 struct S { int a; }; 14011 struct S __attribute__ ((vector_size (16))) foo; 14012 14013 is invalid even if the size of the structure is the same as the 14014 size of the `int'. 14015 14016`weak' 14017 The `weak' attribute is described in *Note Function Attributes::. 14018 14019`dllimport' 14020 The `dllimport' attribute is described in *Note Function 14021 Attributes::. 14022 14023`dlexport' 14024 The `dllexport' attribute is described in *Note Function 14025 Attributes::. 14026 14027 140285.32.1 M32R/D Variable Attributes 14029--------------------------------- 14030 14031One attribute is currently defined for the M32R/D. 14032 14033`model (MODEL-NAME)' 14034 Use this attribute on the M32R/D to set the addressability of an 14035 object. The identifier MODEL-NAME is one of `small', `medium', or 14036 `large', representing each of the code models. 14037 14038 Small model objects live in the lower 16MB of memory (so that their 14039 addresses can be loaded with the `ld24' instruction). 14040 14041 Medium and large model objects may live anywhere in the 32-bit 14042 address space (the compiler will generate `seth/add3' instructions 14043 to load their addresses). 14044 140455.32.2 i386 Variable Attributes 14046------------------------------- 14047 14048Two attributes are currently defined for i386 configurations: 14049`ms_struct' and `gcc_struct' 14050 14051`ms_struct' 14052`gcc_struct' 14053 If `packed' is used on a structure, or if bit-fields are used it 14054 may be that the Microsoft ABI packs them differently than GCC 14055 would normally pack them. Particularly when moving packed data 14056 between functions compiled with GCC and the native Microsoft 14057 compiler (either via function call or as data in a file), it may 14058 be necessary to access either format. 14059 14060 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 14061 Windows X86 compilers to match the native Microsoft compiler. 14062 14063 14064File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 14065 140665.33 Specifying Attributes of Types 14067=================================== 14068 14069The keyword `__attribute__' allows you to specify special attributes of 14070`struct' and `union' types when you define such types. This keyword is 14071followed by an attribute specification inside double parentheses. Six 14072attributes are currently defined for types: `aligned', `packed', 14073`transparent_union', `unused', `deprecated' and `may_alias'. Other 14074attributes are defined for functions (*note Function Attributes::) and 14075for variables (*note Variable Attributes::). 14076 14077 You may also specify any one of these attributes with `__' preceding 14078and following its keyword. This allows you to use these attributes in 14079header files without being concerned about a possible macro of the same 14080name. For example, you may use `__aligned__' instead of `aligned'. 14081 14082 You may specify the `aligned' and `transparent_union' attributes 14083either in a `typedef' declaration or just past the closing curly brace 14084of a complete enum, struct or union type _definition_ and the `packed' 14085attribute only past the closing brace of a definition. 14086 14087 You may also specify attributes between the enum, struct or union tag 14088and the name of the type rather than after the closing brace. 14089 14090 *Note Attribute Syntax::, for details of the exact syntax for using 14091attributes. 14092 14093`aligned (ALIGNMENT)' 14094 This attribute specifies a minimum alignment (in bytes) for 14095 variables of the specified type. For example, the declarations: 14096 14097 struct S { short f[3]; } __attribute__ ((aligned (8))); 14098 typedef int more_aligned_int __attribute__ ((aligned (8))); 14099 14100 force the compiler to insure (as far as it can) that each variable 14101 whose type is `struct S' or `more_aligned_int' will be allocated 14102 and aligned _at least_ on a 8-byte boundary. On a SPARC, having 14103 all variables of type `struct S' aligned to 8-byte boundaries 14104 allows the compiler to use the `ldd' and `std' (doubleword load and 14105 store) instructions when copying one variable of type `struct S' to 14106 another, thus improving run-time efficiency. 14107 14108 Note that the alignment of any given `struct' or `union' type is 14109 required by the ISO C standard to be at least a perfect multiple of 14110 the lowest common multiple of the alignments of all of the members 14111 of the `struct' or `union' in question. This means that you _can_ 14112 effectively adjust the alignment of a `struct' or `union' type by 14113 attaching an `aligned' attribute to any one of the members of such 14114 a type, but the notation illustrated in the example above is a 14115 more obvious, intuitive, and readable way to request the compiler 14116 to adjust the alignment of an entire `struct' or `union' type. 14117 14118 As in the preceding example, you can explicitly specify the 14119 alignment (in bytes) that you wish the compiler to use for a given 14120 `struct' or `union' type. Alternatively, you can leave out the 14121 alignment factor and just ask the compiler to align a type to the 14122 maximum useful alignment for the target machine you are compiling 14123 for. For example, you could write: 14124 14125 struct S { short f[3]; } __attribute__ ((aligned)); 14126 14127 Whenever you leave out the alignment factor in an `aligned' 14128 attribute specification, the compiler automatically sets the 14129 alignment for the type to the largest alignment which is ever used 14130 for any data type on the target machine you are compiling for. 14131 Doing this can often make copy operations more efficient, because 14132 the compiler can use whatever instructions copy the biggest chunks 14133 of memory when performing copies to or from the variables which 14134 have types that you have aligned this way. 14135 14136 In the example above, if the size of each `short' is 2 bytes, then 14137 the size of the entire `struct S' type is 6 bytes. The smallest 14138 power of two which is greater than or equal to that is 8, so the 14139 compiler sets the alignment for the entire `struct S' type to 8 14140 bytes. 14141 14142 Note that although you can ask the compiler to select a 14143 time-efficient alignment for a given type and then declare only 14144 individual stand-alone objects of that type, the compiler's 14145 ability to select a time-efficient alignment is primarily useful 14146 only when you plan to create arrays of variables having the 14147 relevant (efficiently aligned) type. If you declare or use arrays 14148 of variables of an efficiently-aligned type, then it is likely 14149 that your program will also be doing pointer arithmetic (or 14150 subscripting, which amounts to the same thing) on pointers to the 14151 relevant type, and the code that the compiler generates for these 14152 pointer arithmetic operations will often be more efficient for 14153 efficiently-aligned types than for other types. 14154 14155 The `aligned' attribute can only increase the alignment; but you 14156 can decrease it by specifying `packed' as well. See below. 14157 14158 Note that the effectiveness of `aligned' attributes may be limited 14159 by inherent limitations in your linker. On many systems, the 14160 linker is only able to arrange for variables to be aligned up to a 14161 certain maximum alignment. (For some linkers, the maximum 14162 supported alignment may be very very small.) If your linker is 14163 only able to align variables up to a maximum of 8 byte alignment, 14164 then specifying `aligned(16)' in an `__attribute__' will still 14165 only provide you with 8 byte alignment. See your linker 14166 documentation for further information. 14167 14168`packed' 14169 This attribute, attached to `struct' or `union' type definition, 14170 specifies that each member of the structure or union is placed to 14171 minimize the memory required. When attached to an `enum' 14172 definition, it indicates that the smallest integral type should be 14173 used. 14174 14175 Specifying this attribute for `struct' and `union' types is 14176 equivalent to specifying the `packed' attribute on each of the 14177 structure or union members. Specifying the `-fshort-enums' flag 14178 on the line is equivalent to specifying the `packed' attribute on 14179 all `enum' definitions. 14180 14181 In the following example `struct my_packed_struct''s members are 14182 packed closely together, but the internal layout of its `s' member 14183 is not packed - to do that, `struct my_unpacked_struct' would need 14184 to be packed too. 14185 14186 struct my_unpacked_struct 14187 { 14188 char c; 14189 int i; 14190 }; 14191 14192 struct my_packed_struct __attribute__ ((__packed__)) 14193 { 14194 char c; 14195 int i; 14196 struct my_unpacked_struct s; 14197 }; 14198 14199 You may only specify this attribute on the definition of a `enum', 14200 `struct' or `union', not on a `typedef' which does not also define 14201 the enumerated type, structure or union. 14202 14203`transparent_union' 14204 This attribute, attached to a `union' type definition, indicates 14205 that any function parameter having that union type causes calls to 14206 that function to be treated in a special way. 14207 14208 First, the argument corresponding to a transparent union type can 14209 be of any type in the union; no cast is required. Also, if the 14210 union contains a pointer type, the corresponding argument can be a 14211 null pointer constant or a void pointer expression; and if the 14212 union contains a void pointer type, the corresponding argument can 14213 be any pointer expression. If the union member type is a pointer, 14214 qualifiers like `const' on the referenced type must be respected, 14215 just as with normal pointer conversions. 14216 14217 Second, the argument is passed to the function using the calling 14218 conventions of the first member of the transparent union, not the 14219 calling conventions of the union itself. All members of the union 14220 must have the same machine representation; this is necessary for 14221 this argument passing to work properly. 14222 14223 Transparent unions are designed for library functions that have 14224 multiple interfaces for compatibility reasons. For example, 14225 suppose the `wait' function must accept either a value of type 14226 `int *' to comply with Posix, or a value of type `union wait *' to 14227 comply with the 4.1BSD interface. If `wait''s parameter were 14228 `void *', `wait' would accept both kinds of arguments, but it 14229 would also accept any other pointer type and this would make 14230 argument type checking less useful. Instead, `<sys/wait.h>' might 14231 define the interface as follows: 14232 14233 typedef union 14234 { 14235 int *__ip; 14236 union wait *__up; 14237 } wait_status_ptr_t __attribute__ ((__transparent_union__)); 14238 14239 pid_t wait (wait_status_ptr_t); 14240 14241 This interface allows either `int *' or `union wait *' arguments 14242 to be passed, using the `int *' calling convention. The program 14243 can call `wait' with arguments of either type: 14244 14245 int w1 () { int w; return wait (&w); } 14246 int w2 () { union wait w; return wait (&w); } 14247 14248 With this interface, `wait''s implementation might look like this: 14249 14250 pid_t wait (wait_status_ptr_t p) 14251 { 14252 return waitpid (-1, p.__ip, 0); 14253 } 14254 14255`unused' 14256 When attached to a type (including a `union' or a `struct'), this 14257 attribute means that variables of that type are meant to appear 14258 possibly unused. GCC will not produce a warning for any variables 14259 of that type, even if the variable appears to do nothing. This is 14260 often the case with lock or thread classes, which are usually 14261 defined and then not referenced, but contain constructors and 14262 destructors that have nontrivial bookkeeping functions. 14263 14264`deprecated' 14265 The `deprecated' attribute results in a warning if the type is 14266 used anywhere in the source file. This is useful when identifying 14267 types that are expected to be removed in a future version of a 14268 program. If possible, the warning also includes the location of 14269 the declaration of the deprecated type, to enable users to easily 14270 find further information about why the type is deprecated, or what 14271 they should do instead. Note that the warnings only occur for 14272 uses and then only if the type is being applied to an identifier 14273 that itself is not being declared as deprecated. 14274 14275 typedef int T1 __attribute__ ((deprecated)); 14276 T1 x; 14277 typedef T1 T2; 14278 T2 y; 14279 typedef T1 T3 __attribute__ ((deprecated)); 14280 T3 z __attribute__ ((deprecated)); 14281 14282 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 14283 warning is issued for line 4 because T2 is not explicitly 14284 deprecated. Line 5 has no warning because T3 is explicitly 14285 deprecated. Similarly for line 6. 14286 14287 The `deprecated' attribute can also be used for functions and 14288 variables (*note Function Attributes::, *note Variable 14289 Attributes::.) 14290 14291`may_alias' 14292 Accesses to objects with types with this attribute are not 14293 subjected to type-based alias analysis, but are instead assumed to 14294 be able to alias any other type of objects, just like the `char' 14295 type. See `-fstrict-aliasing' for more information on aliasing 14296 issues. 14297 14298 Example of use: 14299 14300 typedef short __attribute__((__may_alias__)) short_a; 14301 14302 int 14303 main (void) 14304 { 14305 int a = 0x12345678; 14306 short_a *b = (short_a *) &a; 14307 14308 b[1] = 0; 14309 14310 if (a == 0x12345678) 14311 abort(); 14312 14313 exit(0); 14314 } 14315 14316 If you replaced `short_a' with `short' in the variable 14317 declaration, the above program would abort when compiled with 14318 `-fstrict-aliasing', which is on by default at `-O2' or above in 14319 recent GCC versions. 14320 143215.33.1 i386 Type Attributes 14322--------------------------- 14323 14324 Two attributes are currently defined for i386 configurations: 14325`ms_struct' and `gcc_struct' 14326 14327`ms_struct' 14328`gcc_struct' 14329 If `packed' is used on a structure, or if bit-fields are used it 14330 may be that the Microsoft ABI packs them differently than GCC 14331 would normally pack them. Particularly when moving packed data 14332 between functions compiled with GCC and the native Microsoft 14333 compiler (either via function call or as data in a file), it may 14334 be necessary to access either format. 14335 14336 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 14337 Windows X86 compilers to match the native Microsoft compiler. 14338 14339 To specify multiple attributes, separate them by commas within the 14340double parentheses: for example, `__attribute__ ((aligned (16), 14341packed))'. 14342 14343 14344File: gcc.info, Node: Inline, Next: Extended Asm, Prev: Alignment, Up: C Extensions 14345 143465.34 An Inline Function is As Fast As a Macro 14347============================================= 14348 14349By declaring a function `inline', you can direct GCC to integrate that 14350function's code into the code for its callers. This makes execution 14351faster by eliminating the function-call overhead; in addition, if any 14352of the actual argument values are constant, their known values may 14353permit simplifications at compile time so that not all of the inline 14354function's code needs to be included. The effect on code size is less 14355predictable; object code may be larger or smaller with function 14356inlining, depending on the particular case. Inlining of functions is an 14357optimization and it really "works" only in optimizing compilation. If 14358you don't use `-O', no function is really inline. 14359 14360 Inline functions are included in the ISO C99 standard, but there are 14361currently substantial differences between what GCC implements and what 14362the ISO C99 standard requires. 14363 14364 To declare a function inline, use the `inline' keyword in its 14365declaration, like this: 14366 14367 inline int 14368 inc (int *a) 14369 { 14370 (*a)++; 14371 } 14372 14373 (If you are writing a header file to be included in ISO C programs, 14374write `__inline__' instead of `inline'. *Note Alternate Keywords::.) 14375You can also make all "simple enough" functions inline with the option 14376`-finline-functions'. 14377 14378 Note that certain usages in a function definition can make it 14379unsuitable for inline substitution. Among these usages are: use of 14380varargs, use of alloca, use of variable sized data types (*note 14381Variable Length::), use of computed goto (*note Labels as Values::), 14382use of nonlocal goto, and nested functions (*note Nested Functions::). 14383Using `-Winline' will warn when a function marked `inline' could not be 14384substituted, and will give the reason for the failure. 14385 14386 Note that in C and Objective-C, unlike C++, the `inline' keyword does 14387not affect the linkage of the function. 14388 14389 GCC automatically inlines member functions defined within the class 14390body of C++ programs even if they are not explicitly declared `inline'. 14391(You can override this with `-fno-default-inline'; *note Options 14392Controlling C++ Dialect: C++ Dialect Options.) 14393 14394 When a function is both inline and `static', if all calls to the 14395function are integrated into the caller, and the function's address is 14396never used, then the function's own assembler code is never referenced. 14397In this case, GCC does not actually output assembler code for the 14398function, unless you specify the option `-fkeep-inline-functions'. 14399Some calls cannot be integrated for various reasons (in particular, 14400calls that precede the function's definition cannot be integrated, and 14401neither can recursive calls within the definition). If there is a 14402nonintegrated call, then the function is compiled to assembler code as 14403usual. The function must also be compiled as usual if the program 14404refers to its address, because that can't be inlined. 14405 14406 When an inline function is not `static', then the compiler must assume 14407that there may be calls from other source files; since a global symbol 14408can be defined only once in any program, the function must not be 14409defined in the other source files, so the calls therein cannot be 14410integrated. Therefore, a non-`static' inline function is always 14411compiled on its own in the usual fashion. 14412 14413 If you specify both `inline' and `extern' in the function definition, 14414then the definition is used only for inlining. In no case is the 14415function compiled on its own, not even if you refer to its address 14416explicitly. Such an address becomes an external reference, as if you 14417had only declared the function, and had not defined it. 14418 14419 This combination of `inline' and `extern' has almost the effect of a 14420macro. The way to use it is to put a function definition in a header 14421file with these keywords, and put another copy of the definition 14422(lacking `inline' and `extern') in a library file. The definition in 14423the header file will cause most calls to the function to be inlined. 14424If any uses of the function remain, they will refer to the single copy 14425in the library. 14426 14427 Since GCC eventually will implement ISO C99 semantics for inline 14428functions, it is best to use `static inline' only to guarantee 14429compatibility. (The existing semantics will remain available when 14430`-std=gnu89' is specified, but eventually the default will be 14431`-std=gnu99' and that will implement the C99 semantics, though it does 14432not do so yet.) 14433 14434 GCC does not inline any functions when not optimizing unless you 14435specify the `always_inline' attribute for the function, like this: 14436 14437 /* Prototype. */ 14438 inline void foo (const char) __attribute__((always_inline)); 14439 14440 14441File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Inline, Up: C Extensions 14442 144435.35 Assembler Instructions with C Expression Operands 14444====================================================== 14445 14446In an assembler instruction using `asm', you can specify the operands 14447of the instruction using C expressions. This means you need not guess 14448which registers or memory locations will contain the data you want to 14449use. 14450 14451 You must specify an assembler instruction template much like what 14452appears in a machine description, plus an operand constraint string for 14453each operand. 14454 14455 For example, here is how to use the 68881's `fsinx' instruction: 14456 14457 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 14458 14459Here `angle' is the C expression for the input operand while `result' 14460is that of the output operand. Each has `"f"' as its operand 14461constraint, saying that a floating point register is required. The `=' 14462in `=f' indicates that the operand is an output; all output operands' 14463constraints must use `='. The constraints use the same language used 14464in the machine description (*note Constraints::). 14465 14466 Each operand is described by an operand-constraint string followed by 14467the C expression in parentheses. A colon separates the assembler 14468template from the first output operand and another separates the last 14469output operand from the first input, if any. Commas separate the 14470operands within each group. The total number of operands is currently 14471limited to 30; this limitation may be lifted in some future version of 14472GCC. 14473 14474 If there are no output operands but there are input operands, you must 14475place two consecutive colons surrounding the place where the output 14476operands would go. 14477 14478 As of GCC version 3.1, it is also possible to specify input and output 14479operands using symbolic names which can be referenced within the 14480assembler code. These names are specified inside square brackets 14481preceding the constraint string, and can be referenced inside the 14482assembler code using `%[NAME]' instead of a percentage sign followed by 14483the operand number. Using named operands the above example could look 14484like: 14485 14486 asm ("fsinx %[angle],%[output]" 14487 : [output] "=f" (result) 14488 : [angle] "f" (angle)); 14489 14490Note that the symbolic operand names have no relation whatsoever to 14491other C identifiers. You may use any name you like, even those of 14492existing C symbols, but you must ensure that no two operands within the 14493same assembler construct use the same symbolic name. 14494 14495 Output operand expressions must be lvalues; the compiler can check 14496this. The input operands need not be lvalues. The compiler cannot 14497check whether the operands have data types that are reasonable for the 14498instruction being executed. It does not parse the assembler instruction 14499template and does not know what it means or even whether it is valid 14500assembler input. The extended `asm' feature is most often used for 14501machine instructions the compiler itself does not know exist. If the 14502output expression cannot be directly addressed (for example, it is a 14503bit-field), your constraint must allow a register. In that case, GCC 14504will use the register as the output of the `asm', and then store that 14505register into the output. 14506 14507 The ordinary output operands must be write-only; GCC will assume that 14508the values in these operands before the instruction are dead and need 14509not be generated. Extended asm supports input-output or read-write 14510operands. Use the constraint character `+' to indicate such an operand 14511and list it with the output operands. You should only use read-write 14512operands when the constraints for the operand (or the operand in which 14513only some of the bits are to be changed) allow a register. 14514 14515 You may, as an alternative, logically split its function into two 14516separate operands, one input operand and one write-only output operand. 14517The connection between them is expressed by constraints which say they 14518need to be in the same location when the instruction executes. You can 14519use the same C expression for both operands, or different expressions. 14520For example, here we write the (fictitious) `combine' instruction with 14521`bar' as its read-only source operand and `foo' as its read-write 14522destination: 14523 14524 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 14525 14526The constraint `"0"' for operand 1 says that it must occupy the same 14527location as operand 0. A number in constraint is allowed only in an 14528input operand and it must refer to an output operand. 14529 14530 Only a number in the constraint can guarantee that one operand will be 14531in the same place as another. The mere fact that `foo' is the value of 14532both operands is not enough to guarantee that they will be in the same 14533place in the generated assembler code. The following would not work 14534reliably: 14535 14536 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 14537 14538 Various optimizations or reloading could cause operands 0 and 1 to be 14539in different registers; GCC knows no reason not to do so. For example, 14540the compiler might find a copy of the value of `foo' in one register and 14541use it for operand 1, but generate the output operand 0 in a different 14542register (copying it afterward to `foo''s own address). Of course, 14543since the register for operand 1 is not even mentioned in the assembler 14544code, the result will not work, but GCC can't tell that. 14545 14546 As of GCC version 3.1, one may write `[NAME]' instead of the operand 14547number for a matching constraint. For example: 14548 14549 asm ("cmoveq %1,%2,%[result]" 14550 : [result] "=r"(result) 14551 : "r" (test), "r"(new), "[result]"(old)); 14552 14553 Some instructions clobber specific hard registers. To describe this, 14554write a third colon after the input operands, followed by the names of 14555the clobbered hard registers (given as strings). Here is a realistic 14556example for the VAX: 14557 14558 asm volatile ("movc3 %0,%1,%2" 14559 : /* no outputs */ 14560 : "g" (from), "g" (to), "g" (count) 14561 : "r0", "r1", "r2", "r3", "r4", "r5"); 14562 14563 You may not write a clobber description in a way that overlaps with an 14564input or output operand. For example, you may not have an operand 14565describing a register class with one member if you mention that register 14566in the clobber list. Variables declared to live in specific registers 14567(*note Explicit Reg Vars::), and used as asm input or output operands 14568must have no part mentioned in the clobber description. There is no 14569way for you to specify that an input operand is modified without also 14570specifying it as an output operand. Note that if all the output 14571operands you specify are for this purpose (and hence unused), you will 14572then also need to specify `volatile' for the `asm' construct, as 14573described below, to prevent GCC from deleting the `asm' statement as 14574unused. 14575 14576 If you refer to a particular hardware register from the assembler code, 14577you will probably have to list the register after the third colon to 14578tell the compiler the register's value is modified. In some assemblers, 14579the register names begin with `%'; to produce one `%' in the assembler 14580code, you must write `%%' in the input. 14581 14582 If your assembler instruction can alter the condition code register, 14583add `cc' to the list of clobbered registers. GCC on some machines 14584represents the condition codes as a specific hardware register; `cc' 14585serves to name this register. On other machines, the condition code is 14586handled differently, and specifying `cc' has no effect. But it is 14587valid no matter what the machine. 14588 14589 If your assembler instructions access memory in an unpredictable 14590fashion, add `memory' to the list of clobbered registers. This will 14591cause GCC to not keep memory values cached in registers across the 14592assembler instruction and not optimize stores or loads to that memory. 14593You will also want to add the `volatile' keyword if the memory affected 14594is not listed in the inputs or outputs of the `asm', as the `memory' 14595clobber does not count as a side-effect of the `asm'. If you know how 14596large the accessed memory is, you can add it as input or output but if 14597this is not known, you should add `memory'. As an example, if you 14598access ten bytes of a string, you can use a memory input like: 14599 14600 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 14601 14602 Note that in the following example the memory input is necessary, 14603otherwise GCC might optimize the store to `x' away: 14604 int foo () 14605 { 14606 int x = 42; 14607 int *y = &x; 14608 int result; 14609 asm ("magic stuff accessing an 'int' pointed to by '%1'" 14610 "=&d" (r) : "a" (y), "m" (*y)); 14611 return result; 14612 } 14613 14614 You can put multiple assembler instructions together in a single `asm' 14615template, separated by the characters normally used in assembly code 14616for the system. A combination that works in most places is a newline 14617to break the line, plus a tab character to move to the instruction field 14618(written as `\n\t'). Sometimes semicolons can be used, if the 14619assembler allows semicolons as a line-breaking character. Note that 14620some assembler dialects use semicolons to start a comment. The input 14621operands are guaranteed not to use any of the clobbered registers, and 14622neither will the output operands' addresses, so you can read and write 14623the clobbered registers as many times as you like. Here is an example 14624of multiple instructions in a template; it assumes the subroutine 14625`_foo' accepts arguments in registers 9 and 10: 14626 14627 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 14628 : /* no outputs */ 14629 : "g" (from), "g" (to) 14630 : "r9", "r10"); 14631 14632 Unless an output operand has the `&' constraint modifier, GCC may 14633allocate it in the same register as an unrelated input operand, on the 14634assumption the inputs are consumed before the outputs are produced. 14635This assumption may be false if the assembler code actually consists of 14636more than one instruction. In such a case, use `&' for each output 14637operand that may not overlap an input. *Note Modifiers::. 14638 14639 If you want to test the condition code produced by an assembler 14640instruction, you must include a branch and a label in the `asm' 14641construct, as follows: 14642 14643 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 14644 : "g" (result) 14645 : "g" (input)); 14646 14647This assumes your assembler supports local labels, as the GNU assembler 14648and most Unix assemblers do. 14649 14650 Speaking of labels, jumps from one `asm' to another are not supported. 14651The compiler's optimizers do not know about these jumps, and therefore 14652they cannot take account of them when deciding how to optimize. 14653 14654 Usually the most convenient way to use these `asm' instructions is to 14655encapsulate them in macros that look like functions. For example, 14656 14657 #define sin(x) \ 14658 ({ double __value, __arg = (x); \ 14659 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 14660 __value; }) 14661 14662Here the variable `__arg' is used to make sure that the instruction 14663operates on a proper `double' value, and to accept only those arguments 14664`x' which can convert automatically to a `double'. 14665 14666 Another way to make sure the instruction operates on the correct data 14667type is to use a cast in the `asm'. This is different from using a 14668variable `__arg' in that it converts more different types. For 14669example, if the desired type were `int', casting the argument to `int' 14670would accept a pointer with no complaint, while assigning the argument 14671to an `int' variable named `__arg' would warn about using a pointer 14672unless the caller explicitly casts it. 14673 14674 If an `asm' has output operands, GCC assumes for optimization purposes 14675the instruction has no side effects except to change the output 14676operands. This does not mean instructions with a side effect cannot be 14677used, but you must be careful, because the compiler may eliminate them 14678if the output operands aren't used, or move them out of loops, or 14679replace two with one if they constitute a common subexpression. Also, 14680if your instruction does have a side effect on a variable that otherwise 14681appears not to change, the old value of the variable may be reused later 14682if it happens to be found in a register. 14683 14684 You can prevent an `asm' instruction from being deleted, moved 14685significantly, or combined, by writing the keyword `volatile' after the 14686`asm'. For example: 14687 14688 #define get_and_set_priority(new) \ 14689 ({ int __old; \ 14690 asm volatile ("get_and_set_priority %0, %1" \ 14691 : "=g" (__old) : "g" (new)); \ 14692 __old; }) 14693 14694If you write an `asm' instruction with no outputs, GCC will know the 14695instruction has side-effects and will not delete the instruction or 14696move it outside of loops. 14697 14698 The `volatile' keyword indicates that the instruction has important 14699side-effects. GCC will not delete a volatile `asm' if it is reachable. 14700(The instruction can still be deleted if GCC can prove that 14701control-flow will never reach the location of the instruction.) In 14702addition, GCC will not reschedule instructions across a volatile `asm' 14703instruction. For example: 14704 14705 *(volatile int *)addr = foo; 14706 asm volatile ("eieio" : : ); 14707 14708Assume `addr' contains the address of a memory mapped device register. 14709The PowerPC `eieio' instruction (Enforce In-order Execution of I/O) 14710tells the CPU to make sure that the store to that device register 14711happens before it issues any other I/O. 14712 14713 Note that even a volatile `asm' instruction can be moved in ways that 14714appear insignificant to the compiler, such as across jump instructions. 14715You can't expect a sequence of volatile `asm' instructions to remain 14716perfectly consecutive. If you want consecutive output, use a single 14717`asm'. Also, GCC will perform some optimizations across a volatile 14718`asm' instruction; GCC does not "forget everything" when it encounters 14719a volatile `asm' instruction the way some other compilers do. 14720 14721 An `asm' instruction without any operands or clobbers (an "old style" 14722`asm') will be treated identically to a volatile `asm' instruction. 14723 14724 It is a natural idea to look for a way to give access to the condition 14725code left by the assembler instruction. However, when we attempted to 14726implement this, we found no way to make it work reliably. The problem 14727is that output operands might need reloading, which would result in 14728additional following "store" instructions. On most machines, these 14729instructions would alter the condition code before there was time to 14730test it. This problem doesn't arise for ordinary "test" and "compare" 14731instructions because they don't have any output operands. 14732 14733 For reasons similar to those described above, it is not possible to 14734give an assembler instruction access to the condition code left by 14735previous instructions. 14736 14737 If you are writing a header file that should be includable in ISO C 14738programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::. 14739 147405.35.1 Size of an `asm' 14741----------------------- 14742 14743Some targets require that GCC track the size of each instruction used in 14744order to generate correct code. Because the final length of an `asm' 14745is only known by the assembler, GCC must make an estimate as to how big 14746it will be. The estimate is formed by counting the number of 14747statements in the pattern of the `asm' and multiplying that by the 14748length of the longest instruction on that processor. Statements in the 14749`asm' are identified by newline characters and whatever statement 14750separator characters are supported by the assembler; on most processors 14751this is the ``;'' character. 14752 14753 Normally, GCC's estimate is perfectly adequate to ensure that correct 14754code is generated, but it is possible to confuse the compiler if you use 14755pseudo instructions or assembler macros that expand into multiple real 14756instructions or if you use assembler directives that expand to more 14757space in the object file than would be needed for a single instruction. 14758If this happens then the assembler will produce a diagnostic saying that 14759a label is unreachable. 14760 147615.35.2 i386 floating point asm operands 14762--------------------------------------- 14763 14764There are several rules on the usage of stack-like regs in asm_operands 14765insns. These rules apply only to the operands that are stack-like regs: 14766 14767 1. Given a set of input regs that die in an asm_operands, it is 14768 necessary to know which are implicitly popped by the asm, and 14769 which must be explicitly popped by gcc. 14770 14771 An input reg that is implicitly popped by the asm must be 14772 explicitly clobbered, unless it is constrained to match an output 14773 operand. 14774 14775 2. For any input reg that is implicitly popped by an asm, it is 14776 necessary to know how to adjust the stack to compensate for the 14777 pop. If any non-popped input is closer to the top of the 14778 reg-stack than the implicitly popped reg, it would not be possible 14779 to know what the stack looked like--it's not clear how the rest of 14780 the stack "slides up". 14781 14782 All implicitly popped input regs must be closer to the top of the 14783 reg-stack than any input that is not implicitly popped. 14784 14785 It is possible that if an input dies in an insn, reload might use 14786 the input reg for an output reload. Consider this example: 14787 14788 asm ("foo" : "=t" (a) : "f" (b)); 14789 14790 This asm says that input B is not popped by the asm, and that the 14791 asm pushes a result onto the reg-stack, i.e., the stack is one 14792 deeper after the asm than it was before. But, it is possible that 14793 reload will think that it can use the same reg for both the input 14794 and the output, if input B dies in this insn. 14795 14796 If any input operand uses the `f' constraint, all output reg 14797 constraints must use the `&' earlyclobber. 14798 14799 The asm above would be written as 14800 14801 asm ("foo" : "=&t" (a) : "f" (b)); 14802 14803 3. Some operands need to be in particular places on the stack. All 14804 output operands fall in this category--there is no other way to 14805 know which regs the outputs appear in unless the user indicates 14806 this in the constraints. 14807 14808 Output operands must specifically indicate which reg an output 14809 appears in after an asm. `=f' is not allowed: the operand 14810 constraints must select a class with a single reg. 14811 14812 4. Output operands may not be "inserted" between existing stack regs. 14813 Since no 387 opcode uses a read/write operand, all output operands 14814 are dead before the asm_operands, and are pushed by the 14815 asm_operands. It makes no sense to push anywhere but the top of 14816 the reg-stack. 14817 14818 Output operands must start at the top of the reg-stack: output 14819 operands may not "skip" a reg. 14820 14821 5. Some asm statements may need extra stack space for internal 14822 calculations. This can be guaranteed by clobbering stack registers 14823 unrelated to the inputs and outputs. 14824 14825 14826 Here are a couple of reasonable asms to want to write. This asm takes 14827one input, which is internally popped, and produces two outputs. 14828 14829 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 14830 14831 This asm takes two inputs, which are popped by the `fyl2xp1' opcode, 14832and replaces them with one output. The user must code the `st(1)' 14833clobber for reg-stack.c to know that `fyl2xp1' pops both inputs. 14834 14835 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 14836 14837 14838File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 14839 148405.36 Constraints for `asm' Operands 14841=================================== 14842 14843Here are specific details on what constraint letters you can use with 14844`asm' operands. Constraints can say whether an operand may be in a 14845register, and which kinds of register; whether the operand can be a 14846memory reference, and which kinds of address; whether the operand may 14847be an immediate constant, and which possible values it may have. 14848Constraints can also require two operands to match. 14849 14850* Menu: 14851 14852* Simple Constraints:: Basic use of constraints. 14853* Multi-Alternative:: When an insn has two alternative constraint-patterns. 14854* Modifiers:: More precise control over effects of constraints. 14855* Machine Constraints:: Special constraints for some particular machines. 14856 14857 14858File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 14859 148605.36.1 Simple Constraints 14861------------------------- 14862 14863The simplest kind of constraint is a string full of letters, each of 14864which describes one kind of operand that is permitted. Here are the 14865letters that are allowed: 14866 14867whitespace 14868 Whitespace characters are ignored and can be inserted at any 14869 position except the first. This enables each alternative for 14870 different operands to be visually aligned in the machine 14871 description even if they have different number of constraints and 14872 modifiers. 14873 14874`m' 14875 A memory operand is allowed, with any kind of address that the 14876 machine supports in general. 14877 14878`o' 14879 A memory operand is allowed, but only if the address is 14880 "offsettable". This means that adding a small integer (actually, 14881 the width in bytes of the operand, as determined by its machine 14882 mode) may be added to the address and the result is also a valid 14883 memory address. 14884 14885 For example, an address which is constant is offsettable; so is an 14886 address that is the sum of a register and a constant (as long as a 14887 slightly larger constant is also within the range of 14888 address-offsets supported by the machine); but an autoincrement or 14889 autodecrement address is not offsettable. More complicated 14890 indirect/indexed addresses may or may not be offsettable depending 14891 on the other addressing modes that the machine supports. 14892 14893 Note that in an output operand which can be matched by another 14894 operand, the constraint letter `o' is valid only when accompanied 14895 by both `<' (if the target machine has predecrement addressing) 14896 and `>' (if the target machine has preincrement addressing). 14897 14898`V' 14899 A memory operand that is not offsettable. In other words, 14900 anything that would fit the `m' constraint but not the `o' 14901 constraint. 14902 14903`<' 14904 A memory operand with autodecrement addressing (either 14905 predecrement or postdecrement) is allowed. 14906 14907`>' 14908 A memory operand with autoincrement addressing (either 14909 preincrement or postincrement) is allowed. 14910 14911`r' 14912 A register operand is allowed provided that it is in a general 14913 register. 14914 14915`i' 14916 An immediate integer operand (one with constant value) is allowed. 14917 This includes symbolic constants whose values will be known only at 14918 assembly time. 14919 14920`n' 14921 An immediate integer operand with a known numeric value is allowed. 14922 Many systems cannot support assembly-time constants for operands 14923 less than a word wide. Constraints for these operands should use 14924 `n' rather than `i'. 14925 14926`I', `J', `K', ... `P' 14927 Other letters in the range `I' through `P' may be defined in a 14928 machine-dependent fashion to permit immediate integer operands with 14929 explicit integer values in specified ranges. For example, on the 14930 68000, `I' is defined to stand for the range of values 1 to 8. 14931 This is the range permitted as a shift count in the shift 14932 instructions. 14933 14934`E' 14935 An immediate floating operand (expression code `const_double') is 14936 allowed, but only if the target floating point format is the same 14937 as that of the host machine (on which the compiler is running). 14938 14939`F' 14940 An immediate floating operand (expression code `const_double' or 14941 `const_vector') is allowed. 14942 14943`G', `H' 14944 `G' and `H' may be defined in a machine-dependent fashion to 14945 permit immediate floating operands in particular ranges of values. 14946 14947`s' 14948 An immediate integer operand whose value is not an explicit 14949 integer is allowed. 14950 14951 This might appear strange; if an insn allows a constant operand 14952 with a value not known at compile time, it certainly must allow 14953 any known value. So why use `s' instead of `i'? Sometimes it 14954 allows better code to be generated. 14955 14956 For example, on the 68000 in a fullword instruction it is possible 14957 to use an immediate operand; but if the immediate value is between 14958 -128 and 127, better code results from loading the value into a 14959 register and using the register. This is because the load into 14960 the register can be done with a `moveq' instruction. We arrange 14961 for this to happen by defining the letter `K' to mean "any integer 14962 outside the range -128 to 127", and then specifying `Ks' in the 14963 operand constraints. 14964 14965`g' 14966 Any register, memory or immediate integer operand is allowed, 14967 except for registers that are not general registers. 14968 14969`X' 14970 Any operand whatsoever is allowed. 14971 14972`0', `1', `2', ... `9' 14973 An operand that matches the specified operand number is allowed. 14974 If a digit is used together with letters within the same 14975 alternative, the digit should come last. 14976 14977 This number is allowed to be more than a single digit. If multiple 14978 digits are encountered consecutively, they are interpreted as a 14979 single decimal integer. There is scant chance for ambiguity, 14980 since to-date it has never been desirable that `10' be interpreted 14981 as matching either operand 1 _or_ operand 0. Should this be 14982 desired, one can use multiple alternatives instead. 14983 14984 This is called a "matching constraint" and what it really means is 14985 that the assembler has only a single operand that fills two roles 14986 which `asm' distinguishes. For example, an add instruction uses 14987 two input operands and an output operand, but on most CISC 14988 machines an add instruction really has only two operands, one of 14989 them an input-output operand: 14990 14991 addl #35,r12 14992 14993 Matching constraints are used in these circumstances. More 14994 precisely, the two operands that match must include one input-only 14995 operand and one output-only operand. Moreover, the digit must be a 14996 smaller number than the number of the operand that uses it in the 14997 constraint. 14998 14999`p' 15000 An operand that is a valid memory address is allowed. This is for 15001 "load address" and "push address" instructions. 15002 15003 `p' in the constraint must be accompanied by `address_operand' as 15004 the predicate in the `match_operand'. This predicate interprets 15005 the mode specified in the `match_operand' as the mode of the memory 15006 reference for which the address would be valid. 15007 15008OTHER-LETTERS 15009 Other letters can be defined in machine-dependent fashion to stand 15010 for particular classes of registers or other arbitrary operand 15011 types. `d', `a' and `f' are defined on the 68000/68020 to stand 15012 for data, address and floating point registers. 15013 15014 15015 15016File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 15017 150185.36.2 Multiple Alternative Constraints 15019--------------------------------------- 15020 15021Sometimes a single instruction has multiple alternative sets of possible 15022operands. For example, on the 68000, a logical-or instruction can 15023combine register or an immediate value into memory, or it can combine 15024any kind of operand into a register; but it cannot combine one memory 15025location into another. 15026 15027 These constraints are represented as multiple alternatives. An 15028alternative can be described by a series of letters for each operand. 15029The overall constraint for an operand is made from the letters for this 15030operand from the first alternative, a comma, the letters for this 15031operand from the second alternative, a comma, and so on until the last 15032alternative. 15033 15034 If all the operands fit any one alternative, the instruction is valid. 15035Otherwise, for each alternative, the compiler counts how many 15036instructions must be added to copy the operands so that that 15037alternative applies. The alternative requiring the least copying is 15038chosen. If two alternatives need the same amount of copying, the one 15039that comes first is chosen. These choices can be altered with the `?' 15040and `!' characters: 15041 15042`?' 15043 Disparage slightly the alternative that the `?' appears in, as a 15044 choice when no alternative applies exactly. The compiler regards 15045 this alternative as one unit more costly for each `?' that appears 15046 in it. 15047 15048`!' 15049 Disparage severely the alternative that the `!' appears in. This 15050 alternative can still be used if it fits without reloading, but if 15051 reloading is needed, some other alternative will be used. 15052 15053 15054File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 15055 150565.36.3 Constraint Modifier Characters 15057------------------------------------- 15058 15059Here are constraint modifier characters. 15060 15061`=' 15062 Means that this operand is write-only for this instruction: the 15063 previous value is discarded and replaced by output data. 15064 15065`+' 15066 Means that this operand is both read and written by the 15067 instruction. 15068 15069 When the compiler fixes up the operands to satisfy the constraints, 15070 it needs to know which operands are inputs to the instruction and 15071 which are outputs from it. `=' identifies an output; `+' 15072 identifies an operand that is both input and output; all other 15073 operands are assumed to be input only. 15074 15075 If you specify `=' or `+' in a constraint, you put it in the first 15076 character of the constraint string. 15077 15078`&' 15079 Means (in a particular alternative) that this operand is an 15080 "earlyclobber" operand, which is modified before the instruction is 15081 finished using the input operands. Therefore, this operand may 15082 not lie in a register that is used as an input operand or as part 15083 of any memory address. 15084 15085 `&' applies only to the alternative in which it is written. In 15086 constraints with multiple alternatives, sometimes one alternative 15087 requires `&' while others do not. See, for example, the `movdf' 15088 insn of the 68000. 15089 15090 An input operand can be tied to an earlyclobber operand if its only 15091 use as an input occurs before the early result is written. Adding 15092 alternatives of this form often allows GCC to produce better code 15093 when only some of the inputs can be affected by the earlyclobber. 15094 See, for example, the `mulsi3' insn of the ARM. 15095 15096 `&' does not obviate the need to write `='. 15097 15098`%' 15099 Declares the instruction to be commutative for this operand and the 15100 following operand. This means that the compiler may interchange 15101 the two operands if that is the cheapest way to make all operands 15102 fit the constraints. GCC can only handle one commutative pair in 15103 an asm; if you use more, the compiler may fail. 15104 15105`#' 15106 Says that all following characters, up to the next comma, are to be 15107 ignored as a constraint. They are significant only for choosing 15108 register preferences. 15109 15110`*' 15111 Says that the following character should be ignored when choosing 15112 register preferences. `*' has no effect on the meaning of the 15113 constraint as a constraint, and no effect on reloading. 15114 15115 15116 15117File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 15118 151195.36.4 Constraints for Particular Machines 15120------------------------------------------ 15121 15122Whenever possible, you should use the general-purpose constraint letters 15123in `asm' arguments, since they will convey meaning more readily to 15124people reading your code. Failing that, use the constraint letters 15125that usually have very similar meanings across architectures. The most 15126commonly used constraints are `m' and `r' (for memory and 15127general-purpose registers respectively; *note Simple Constraints::), and 15128`I', usually the letter indicating the most common immediate-constant 15129format. 15130 15131 For each machine architecture, the `config/MACHINE/MACHINE.h' file 15132defines additional constraints. These constraints are used by the 15133compiler itself for instruction generation, as well as for `asm' 15134statements; therefore, some of the constraints are not particularly 15135interesting for `asm'. The constraints are defined through these 15136macros: 15137 15138`REG_CLASS_FROM_LETTER' 15139 Register class constraints (usually lowercase). 15140 15141`CONST_OK_FOR_LETTER_P' 15142 Immediate constant constraints, for non-floating point constants of 15143 word size or smaller precision (usually uppercase). 15144 15145`CONST_DOUBLE_OK_FOR_LETTER_P' 15146 Immediate constant constraints, for all floating point constants 15147 and for constants of greater than word size precision (usually 15148 uppercase). 15149 15150`EXTRA_CONSTRAINT' 15151 Special cases of registers or memory. This macro is not required, 15152 and is only defined for some machines. 15153 15154 Inspecting these macro definitions in the compiler source for your 15155machine is the best way to be certain you have the right constraints. 15156However, here is a summary of the machine-dependent constraints 15157available on some particular machines. 15158 15159_ARM family--`arm.h'_ 15160 15161 `f' 15162 Floating-point register 15163 15164 `F' 15165 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 15166 4.0, 5.0 or 10.0 15167 15168 `G' 15169 Floating-point constant that would satisfy the constraint `F' 15170 if it were negated 15171 15172 `I' 15173 Integer that is valid as an immediate operand in a data 15174 processing instruction. That is, an integer in the range 0 15175 to 255 rotated by a multiple of 2 15176 15177 `J' 15178 Integer in the range -4095 to 4095 15179 15180 `K' 15181 Integer that satisfies constraint `I' when inverted (ones 15182 complement) 15183 15184 `L' 15185 Integer that satisfies constraint `I' when negated (twos 15186 complement) 15187 15188 `M' 15189 Integer in the range 0 to 32 15190 15191 `Q' 15192 A memory reference where the exact address is in a single 15193 register (``m'' is preferable for `asm' statements) 15194 15195 `R' 15196 An item in the constant pool 15197 15198 `S' 15199 A symbol in the text segment of the current file 15200 15201_AVR family--`avr.h'_ 15202 15203 `l' 15204 Registers from r0 to r15 15205 15206 `a' 15207 Registers from r16 to r23 15208 15209 `d' 15210 Registers from r16 to r31 15211 15212 `w' 15213 Registers from r24 to r31. These registers can be used in 15214 `adiw' command 15215 15216 `e' 15217 Pointer register (r26-r31) 15218 15219 `b' 15220 Base pointer register (r28-r31) 15221 15222 `q' 15223 Stack pointer register (SPH:SPL) 15224 15225 `t' 15226 Temporary register r0 15227 15228 `x' 15229 Register pair X (r27:r26) 15230 15231 `y' 15232 Register pair Y (r29:r28) 15233 15234 `z' 15235 Register pair Z (r31:r30) 15236 15237 `I' 15238 Constant greater than -1, less than 64 15239 15240 `J' 15241 Constant greater than -64, less than 1 15242 15243 `K' 15244 Constant integer 2 15245 15246 `L' 15247 Constant integer 0 15248 15249 `M' 15250 Constant that fits in 8 bits 15251 15252 `N' 15253 Constant integer -1 15254 15255 `O' 15256 Constant integer 8, 16, or 24 15257 15258 `P' 15259 Constant integer 1 15260 15261 `G' 15262 A floating point constant 0.0 15263 15264_PowerPC and IBM RS6000--`rs6000.h'_ 15265 15266 `b' 15267 Address base register 15268 15269 `f' 15270 Floating point register 15271 15272 `v' 15273 Vector register 15274 15275 `h' 15276 `MQ', `CTR', or `LINK' register 15277 15278 `q' 15279 `MQ' register 15280 15281 `c' 15282 `CTR' register 15283 15284 `l' 15285 `LINK' register 15286 15287 `x' 15288 `CR' register (condition register) number 0 15289 15290 `y' 15291 `CR' register (condition register) 15292 15293 `z' 15294 `FPMEM' stack memory for FPR-GPR transfers 15295 15296 `I' 15297 Signed 16-bit constant 15298 15299 `J' 15300 Unsigned 16-bit constant shifted left 16 bits (use `L' 15301 instead for `SImode' constants) 15302 15303 `K' 15304 Unsigned 16-bit constant 15305 15306 `L' 15307 Signed 16-bit constant shifted left 16 bits 15308 15309 `M' 15310 Constant larger than 31 15311 15312 `N' 15313 Exact power of 2 15314 15315 `O' 15316 Zero 15317 15318 `P' 15319 Constant whose negation is a signed 16-bit constant 15320 15321 `G' 15322 Floating point constant that can be loaded into a register 15323 with one instruction per word 15324 15325 `Q' 15326 Memory operand that is an offset from a register (`m' is 15327 preferable for `asm' statements) 15328 15329 `R' 15330 AIX TOC entry 15331 15332 `S' 15333 Constant suitable as a 64-bit mask operand 15334 15335 `T' 15336 Constant suitable as a 32-bit mask operand 15337 15338 `U' 15339 System V Release 4 small data area reference 15340 15341_Intel 386--`i386.h'_ 15342 15343 `q' 15344 `a', `b', `c', or `d' register for the i386. For x86-64 it 15345 is equivalent to `r' class. (for 8-bit instructions that do 15346 not use upper halves) 15347 15348 `Q' 15349 `a', `b', `c', or `d' register. (for 8-bit instructions, that 15350 do use upper halves) 15351 15352 `R' 15353 Legacy register--equivalent to `r' class in i386 mode. (for 15354 non-8-bit registers used together with 8-bit upper halves in 15355 a single instruction) 15356 15357 `A' 15358 Specifies the `a' or `d' registers. This is primarily useful 15359 for 64-bit integer values (when in 32-bit mode) intended to 15360 be returned with the `d' register holding the most 15361 significant bits and the `a' register holding the least 15362 significant bits. 15363 15364 `f' 15365 Floating point register 15366 15367 `t' 15368 First (top of stack) floating point register 15369 15370 `u' 15371 Second floating point register 15372 15373 `a' 15374 `a' register 15375 15376 `b' 15377 `b' register 15378 15379 `c' 15380 `c' register 15381 15382 `C' 15383 Specifies constant that can be easily constructed in SSE 15384 register without loading it from memory. 15385 15386 `d' 15387 `d' register 15388 15389 `D' 15390 `di' register 15391 15392 `S' 15393 `si' register 15394 15395 `x' 15396 `xmm' SSE register 15397 15398 `y' 15399 MMX register 15400 15401 `I' 15402 Constant in range 0 to 31 (for 32-bit shifts) 15403 15404 `J' 15405 Constant in range 0 to 63 (for 64-bit shifts) 15406 15407 `K' 15408 `0xff' 15409 15410 `L' 15411 `0xffff' 15412 15413 `M' 15414 0, 1, 2, or 3 (shifts for `lea' instruction) 15415 15416 `N' 15417 Constant in range 0 to 255 (for `out' instruction) 15418 15419 `Z' 15420 Constant in range 0 to `0xffffffff' or symbolic reference 15421 known to fit specified range. (for using immediates in zero 15422 extending 32-bit to 64-bit x86-64 instructions) 15423 15424 `e' 15425 Constant in range -2147483648 to 2147483647 or symbolic 15426 reference known to fit specified range. (for using 15427 immediates in 64-bit x86-64 instructions) 15428 15429 `G' 15430 Standard 80387 floating point constant 15431 15432_Intel 960--`i960.h'_ 15433 15434 `f' 15435 Floating point register (`fp0' to `fp3') 15436 15437 `l' 15438 Local register (`r0' to `r15') 15439 15440 `b' 15441 Global register (`g0' to `g15') 15442 15443 `d' 15444 Any local or global register 15445 15446 `I' 15447 Integers from 0 to 31 15448 15449 `J' 15450 0 15451 15452 `K' 15453 Integers from -31 to 0 15454 15455 `G' 15456 Floating point 0 15457 15458 `H' 15459 Floating point 1 15460 15461_Intel IA-64--`ia64.h'_ 15462 15463 `a' 15464 General register `r0' to `r3' for `addl' instruction 15465 15466 `b' 15467 Branch register 15468 15469 `c' 15470 Predicate register (`c' as in "conditional") 15471 15472 `d' 15473 Application register residing in M-unit 15474 15475 `e' 15476 Application register residing in I-unit 15477 15478 `f' 15479 Floating-point register 15480 15481 `m' 15482 Memory operand. Remember that `m' allows postincrement and 15483 postdecrement which require printing with `%Pn' on IA-64. 15484 Use `S' to disallow postincrement and postdecrement. 15485 15486 `G' 15487 Floating-point constant 0.0 or 1.0 15488 15489 `I' 15490 14-bit signed integer constant 15491 15492 `J' 15493 22-bit signed integer constant 15494 15495 `K' 15496 8-bit signed integer constant for logical instructions 15497 15498 `L' 15499 8-bit adjusted signed integer constant for compare pseudo-ops 15500 15501 `M' 15502 6-bit unsigned integer constant for shift counts 15503 15504 `N' 15505 9-bit signed integer constant for load and store 15506 postincrements 15507 15508 `O' 15509 The constant zero 15510 15511 `P' 15512 0 or -1 for `dep' instruction 15513 15514 `Q' 15515 Non-volatile memory for floating-point loads and stores 15516 15517 `R' 15518 Integer constant in the range 1 to 4 for `shladd' instruction 15519 15520 `S' 15521 Memory operand except postincrement and postdecrement 15522 15523_FRV--`frv.h'_ 15524 15525 `a' 15526 Register in the class `ACC_REGS' (`acc0' to `acc7'). 15527 15528 `b' 15529 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 15530 15531 `c' 15532 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 15533 to `icc3'). 15534 15535 `d' 15536 Register in the class `GPR_REGS' (`gr0' to `gr63'). 15537 15538 `e' 15539 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 15540 registers are excluded not in the class but through the use 15541 of a machine mode larger than 4 bytes. 15542 15543 `f' 15544 Register in the class `FPR_REGS' (`fr0' to `fr63'). 15545 15546 `h' 15547 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 15548 registers are excluded not in the class but through the use 15549 of a machine mode larger than 4 bytes. 15550 15551 `l' 15552 Register in the class `LR_REG' (the `lr' register). 15553 15554 `q' 15555 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 15556 Register numbers not divisible by 4 are excluded not in the 15557 class but through the use of a machine mode larger than 8 15558 bytes. 15559 15560 `t' 15561 Register in the class `ICC_REGS' (`icc0' to `icc3'). 15562 15563 `u' 15564 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 15565 15566 `v' 15567 Register in the class `ICR_REGS' (`cc4' to `cc7'). 15568 15569 `w' 15570 Register in the class `FCR_REGS' (`cc0' to `cc3'). 15571 15572 `x' 15573 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 15574 Register numbers not divisible by 4 are excluded not in the 15575 class but through the use of a machine mode larger than 8 15576 bytes. 15577 15578 `z' 15579 Register in the class `SPR_REGS' (`lcr' and `lr'). 15580 15581 `A' 15582 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 15583 15584 `B' 15585 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 15586 15587 `C' 15588 Register in the class `CR_REGS' (`cc0' to `cc7'). 15589 15590 `G' 15591 Floating point constant zero 15592 15593 `I' 15594 6-bit signed integer constant 15595 15596 `J' 15597 10-bit signed integer constant 15598 15599 `L' 15600 16-bit signed integer constant 15601 15602 `M' 15603 16-bit unsigned integer constant 15604 15605 `N' 15606 12-bit signed integer constant that is negative--i.e. in the 15607 range of -2048 to -1 15608 15609 `O' 15610 Constant zero 15611 15612 `P' 15613 12-bit signed integer constant that is greater than 15614 zero--i.e. in the range of 1 to 2047. 15615 15616 15617_IP2K--`ip2k.h'_ 15618 15619 `a' 15620 `DP' or `IP' registers (general address) 15621 15622 `f' 15623 `IP' register 15624 15625 `j' 15626 `IPL' register 15627 15628 `k' 15629 `IPH' register 15630 15631 `b' 15632 `DP' register 15633 15634 `y' 15635 `DPH' register 15636 15637 `z' 15638 `DPL' register 15639 15640 `q' 15641 `SP' register 15642 15643 `c' 15644 `DP' or `SP' registers (offsettable address) 15645 15646 `d' 15647 Non-pointer registers (not `SP', `DP', `IP') 15648 15649 `u' 15650 Non-SP registers (everything except `SP') 15651 15652 `R' 15653 Indirect through `IP' - Avoid this except for `QImode', since 15654 we can't access extra bytes 15655 15656 `S' 15657 Indirect through `SP' or `DP' with short displacement (0..127) 15658 15659 `T' 15660 Data-section immediate value 15661 15662 `I' 15663 Integers from -255 to -1 15664 15665 `J' 15666 Integers from 0 to 7--valid bit number in a register 15667 15668 `K' 15669 Integers from 0 to 127--valid displacement for addressing mode 15670 15671 `L' 15672 Integers from 1 to 127 15673 15674 `M' 15675 Integer -1 15676 15677 `N' 15678 Integer 1 15679 15680 `O' 15681 Zero 15682 15683 `P' 15684 Integers from 0 to 255 15685 15686_MIPS--`mips.h'_ 15687 15688 `d' 15689 General-purpose integer register 15690 15691 `f' 15692 Floating-point register (if available) 15693 15694 `h' 15695 `Hi' register 15696 15697 `l' 15698 `Lo' register 15699 15700 `x' 15701 `Hi' or `Lo' register 15702 15703 `y' 15704 General-purpose integer register 15705 15706 `z' 15707 Floating-point status register 15708 15709 `I' 15710 Signed 16-bit constant (for arithmetic instructions) 15711 15712 `J' 15713 Zero 15714 15715 `K' 15716 Zero-extended 16-bit constant (for logic instructions) 15717 15718 `L' 15719 Constant with low 16 bits zero (can be loaded with `lui') 15720 15721 `M' 15722 32-bit constant which requires two instructions to load (a 15723 constant which is not `I', `K', or `L') 15724 15725 `N' 15726 Negative 16-bit constant 15727 15728 `O' 15729 Exact power of two 15730 15731 `P' 15732 Positive 16-bit constant 15733 15734 `G' 15735 Floating point zero 15736 15737 `Q' 15738 Memory reference that can be loaded with more than one 15739 instruction (`m' is preferable for `asm' statements) 15740 15741 `R' 15742 Memory reference that can be loaded with one instruction (`m' 15743 is preferable for `asm' statements) 15744 15745 `S' 15746 Memory reference in external OSF/rose PIC format (`m' is 15747 preferable for `asm' statements) 15748 15749_Motorola 680x0--`m68k.h'_ 15750 15751 `a' 15752 Address register 15753 15754 `d' 15755 Data register 15756 15757 `f' 15758 68881 floating-point register, if available 15759 15760 `I' 15761 Integer in the range 1 to 8 15762 15763 `J' 15764 16-bit signed number 15765 15766 `K' 15767 Signed number whose magnitude is greater than 0x80 15768 15769 `L' 15770 Integer in the range -8 to -1 15771 15772 `M' 15773 Signed number whose magnitude is greater than 0x100 15774 15775 `G' 15776 Floating point constant that is not a 68881 constant 15777 15778_Motorola 68HC11 & 68HC12 families--`m68hc11.h'_ 15779 15780 `a' 15781 Register 'a' 15782 15783 `b' 15784 Register 'b' 15785 15786 `d' 15787 Register 'd' 15788 15789 `q' 15790 An 8-bit register 15791 15792 `t' 15793 Temporary soft register _.tmp 15794 15795 `u' 15796 A soft register _.d1 to _.d31 15797 15798 `w' 15799 Stack pointer register 15800 15801 `x' 15802 Register 'x' 15803 15804 `y' 15805 Register 'y' 15806 15807 `z' 15808 Pseudo register 'z' (replaced by 'x' or 'y' at the end) 15809 15810 `A' 15811 An address register: x, y or z 15812 15813 `B' 15814 An address register: x or y 15815 15816 `D' 15817 Register pair (x:d) to form a 32-bit value 15818 15819 `L' 15820 Constants in the range -65536 to 65535 15821 15822 `M' 15823 Constants whose 16-bit low part is zero 15824 15825 `N' 15826 Constant integer 1 or -1 15827 15828 `O' 15829 Constant integer 16 15830 15831 `P' 15832 Constants in the range -8 to 2 15833 15834 15835_SPARC--`sparc.h'_ 15836 15837 `f' 15838 Floating-point register on the SPARC-V8 architecture and 15839 lower floating-point register on the SPARC-V9 architecture. 15840 15841 `e' 15842 Floating-point register. It is equivalent to `f' on the 15843 SPARC-V8 architecture and contains both lower and upper 15844 floating-point registers on the SPARC-V9 architecture. 15845 15846 `c' 15847 Floating-point condition code register. 15848 15849 `d' 15850 Lower floating-point register. It is only valid on the 15851 SPARC-V9 architecture when the Visual Instruction Set is 15852 available. 15853 15854 `b' 15855 Floating-point register. It is only valid on the SPARC-V9 15856 architecture when the Visual Instruction Set is available. 15857 15858 `h' 15859 64-bit global or out register for the SPARC-V8+ architecture. 15860 15861 `I' 15862 Signed 13-bit constant 15863 15864 `J' 15865 Zero 15866 15867 `K' 15868 32-bit constant with the low 12 bits clear (a constant that 15869 can be loaded with the `sethi' instruction) 15870 15871 `L' 15872 A constant in the range supported by `movcc' instructions 15873 15874 `M' 15875 A constant in the range supported by `movrcc' instructions 15876 15877 `N' 15878 Same as `K', except that it verifies that bits that are not 15879 in the lower 32-bit range are all zero. Must be used instead 15880 of `K' for modes wider than `SImode' 15881 15882 `O' 15883 The constant 4096 15884 15885 `G' 15886 Floating-point zero 15887 15888 `H' 15889 Signed 13-bit constant, sign-extended to 32 or 64 bits 15890 15891 `Q' 15892 Floating-point constant whose integral representation can be 15893 moved into an integer register using a single sethi 15894 instruction 15895 15896 `R' 15897 Floating-point constant whose integral representation can be 15898 moved into an integer register using a single mov instruction 15899 15900 `S' 15901 Floating-point constant whose integral representation can be 15902 moved into an integer register using a high/lo_sum 15903 instruction sequence 15904 15905 `T' 15906 Memory address aligned to an 8-byte boundary 15907 15908 `U' 15909 Even register 15910 15911 `W' 15912 Memory address for `e' constraint registers. 15913 15914 15915_TMS320C3x/C4x--`c4x.h'_ 15916 15917 `a' 15918 Auxiliary (address) register (ar0-ar7) 15919 15920 `b' 15921 Stack pointer register (sp) 15922 15923 `c' 15924 Standard (32-bit) precision integer register 15925 15926 `f' 15927 Extended (40-bit) precision register (r0-r11) 15928 15929 `k' 15930 Block count register (bk) 15931 15932 `q' 15933 Extended (40-bit) precision low register (r0-r7) 15934 15935 `t' 15936 Extended (40-bit) precision register (r0-r1) 15937 15938 `u' 15939 Extended (40-bit) precision register (r2-r3) 15940 15941 `v' 15942 Repeat count register (rc) 15943 15944 `x' 15945 Index register (ir0-ir1) 15946 15947 `y' 15948 Status (condition code) register (st) 15949 15950 `z' 15951 Data page register (dp) 15952 15953 `G' 15954 Floating-point zero 15955 15956 `H' 15957 Immediate 16-bit floating-point constant 15958 15959 `I' 15960 Signed 16-bit constant 15961 15962 `J' 15963 Signed 8-bit constant 15964 15965 `K' 15966 Signed 5-bit constant 15967 15968 `L' 15969 Unsigned 16-bit constant 15970 15971 `M' 15972 Unsigned 8-bit constant 15973 15974 `N' 15975 Ones complement of unsigned 16-bit constant 15976 15977 `O' 15978 High 16-bit constant (32-bit constant with 16 LSBs zero) 15979 15980 `Q' 15981 Indirect memory reference with signed 8-bit or index register 15982 displacement 15983 15984 `R' 15985 Indirect memory reference with unsigned 5-bit displacement 15986 15987 `S' 15988 Indirect memory reference with 1 bit or index register 15989 displacement 15990 15991 `T' 15992 Direct memory reference 15993 15994 `U' 15995 Symbolic address 15996 15997 15998_S/390 and zSeries--`s390.h'_ 15999 16000 `a' 16001 Address register (general purpose register except r0) 16002 16003 `d' 16004 Data register (arbitrary general purpose register) 16005 16006 `f' 16007 Floating-point register 16008 16009 `I' 16010 Unsigned 8-bit constant (0-255) 16011 16012 `J' 16013 Unsigned 12-bit constant (0-4095) 16014 16015 `K' 16016 Signed 16-bit constant (-32768-32767) 16017 16018 `L' 16019 Value appropriate as displacement. 16020 `(0..4095)' 16021 for short displacement 16022 16023 `(-524288..524287)' 16024 for long displacement 16025 16026 `M' 16027 Constant integer with a value of 0x7fffffff. 16028 16029 `N' 16030 Multiple letter constraint followed by 4 parameter letters. 16031 `0..9:' 16032 number of the part counting from most to least 16033 significant 16034 16035 `H,Q:' 16036 mode of the part 16037 16038 `D,S,H:' 16039 mode of the containing operand 16040 16041 `0,F:' 16042 value of the other parts (F - all bits set) 16043 The constraint matches if the specified part of a constant 16044 has a value different from it's other parts. 16045 16046 `Q' 16047 Memory reference without index register and with short 16048 displacement. 16049 16050 `R' 16051 Memory reference with index register and short displacement. 16052 16053 `S' 16054 Memory reference without index register but with long 16055 displacement. 16056 16057 `T' 16058 Memory reference with index register and long displacement. 16059 16060 `U' 16061 Pointer with short displacement. 16062 16063 `W' 16064 Pointer with long displacement. 16065 16066 `Y' 16067 Shift count operand. 16068 16069 16070_Xstormy16--`stormy16.h'_ 16071 16072 `a' 16073 Register r0. 16074 16075 `b' 16076 Register r1. 16077 16078 `c' 16079 Register r2. 16080 16081 `d' 16082 Register r8. 16083 16084 `e' 16085 Registers r0 through r7. 16086 16087 `t' 16088 Registers r0 and r1. 16089 16090 `y' 16091 The carry register. 16092 16093 `z' 16094 Registers r8 and r9. 16095 16096 `I' 16097 A constant between 0 and 3 inclusive. 16098 16099 `J' 16100 A constant that has exactly one bit set. 16101 16102 `K' 16103 A constant that has exactly one bit clear. 16104 16105 `L' 16106 A constant between 0 and 255 inclusive. 16107 16108 `M' 16109 A constant between -255 and 0 inclusive. 16110 16111 `N' 16112 A constant between -3 and 0 inclusive. 16113 16114 `O' 16115 A constant between 1 and 4 inclusive. 16116 16117 `P' 16118 A constant between -4 and -1 inclusive. 16119 16120 `Q' 16121 A memory reference that is a stack push. 16122 16123 `R' 16124 A memory reference that is a stack pop. 16125 16126 `S' 16127 A memory reference that refers to a constant address of known 16128 value. 16129 16130 `T' 16131 The register indicated by Rx (not implemented yet). 16132 16133 `U' 16134 A constant that is not between 2 and 15 inclusive. 16135 16136 `Z' 16137 The constant 0. 16138 16139 16140_Xtensa--`xtensa.h'_ 16141 16142 `a' 16143 General-purpose 32-bit register 16144 16145 `b' 16146 One-bit boolean register 16147 16148 `A' 16149 MAC16 40-bit accumulator register 16150 16151 `I' 16152 Signed 12-bit integer constant, for use in MOVI instructions 16153 16154 `J' 16155 Signed 8-bit integer constant, for use in ADDI instructions 16156 16157 `K' 16158 Integer constant valid for BccI instructions 16159 16160 `L' 16161 Unsigned constant valid for BccUI instructions 16162 16163 16164 16165 16166File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 16167 161685.37 Controlling Names Used in Assembler Code 16169============================================= 16170 16171You can specify the name to be used in the assembler code for a C 16172function or variable by writing the `asm' (or `__asm__') keyword after 16173the declarator as follows: 16174 16175 int foo asm ("myfoo") = 2; 16176 16177This specifies that the name to be used for the variable `foo' in the 16178assembler code should be `myfoo' rather than the usual `_foo'. 16179 16180 On systems where an underscore is normally prepended to the name of a C 16181function or variable, this feature allows you to define names for the 16182linker that do not start with an underscore. 16183 16184 It does not make sense to use this feature with a non-static local 16185variable since such variables do not have assembler names. If you are 16186trying to put the variable in a particular register, see *Note Explicit 16187Reg Vars::. GCC presently accepts such code with a warning, but will 16188probably be changed to issue an error, rather than a warning, in the 16189future. 16190 16191 You cannot use `asm' in this way in a function _definition_; but you 16192can get the same effect by writing a declaration for the function 16193before its definition and putting `asm' there, like this: 16194 16195 extern func () asm ("FUNC"); 16196 16197 func (x, y) 16198 int x, y; 16199 /* ... */ 16200 16201 It is up to you to make sure that the assembler names you choose do not 16202conflict with any other assembler symbols. Also, you must not use a 16203register name; that would produce completely invalid assembler code. 16204GCC does not as yet have the ability to store static variables in 16205registers. Perhaps that will be added. 16206 16207 16208File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 16209 162105.38 Variables in Specified Registers 16211===================================== 16212 16213GNU C allows you to put a few global variables into specified hardware 16214registers. You can also specify the register in which an ordinary 16215register variable should be allocated. 16216 16217 * Global register variables reserve registers throughout the program. 16218 This may be useful in programs such as programming language 16219 interpreters which have a couple of global variables that are 16220 accessed very often. 16221 16222 * Local register variables in specific registers do not reserve the 16223 registers. The compiler's data flow analysis is capable of 16224 determining where the specified registers contain live values, and 16225 where they are available for other uses. Stores into local 16226 register variables may be deleted when they appear to be dead 16227 according to dataflow analysis. References to local register 16228 variables may be deleted or moved or simplified. 16229 16230 These local variables are sometimes convenient for use with the 16231 extended `asm' feature (*note Extended Asm::), if you want to 16232 write one output of the assembler instruction directly into a 16233 particular register. (This will work provided the register you 16234 specify fits the constraints specified for that operand in the 16235 `asm'.) 16236 16237* Menu: 16238 16239* Global Reg Vars:: 16240* Local Reg Vars:: 16241 16242 16243File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 16244 162455.38.1 Defining Global Register Variables 16246----------------------------------------- 16247 16248You can define a global register variable in GNU C like this: 16249 16250 register int *foo asm ("a5"); 16251 16252Here `a5' is the name of the register which should be used. Choose a 16253register which is normally saved and restored by function calls on your 16254machine, so that library routines will not clobber it. 16255 16256 Naturally the register name is cpu-dependent, so you would need to 16257conditionalize your program according to cpu type. The register `a5' 16258would be a good choice on a 68000 for a variable of pointer type. On 16259machines with register windows, be sure to choose a "global" register 16260that is not affected magically by the function call mechanism. 16261 16262 In addition, operating systems on one type of cpu may differ in how 16263they name the registers; then you would need additional conditionals. 16264For example, some 68000 operating systems call this register `%a5'. 16265 16266 Eventually there may be a way of asking the compiler to choose a 16267register automatically, but first we need to figure out how it should 16268choose and how to enable you to guide the choice. No solution is 16269evident. 16270 16271 Defining a global register variable in a certain register reserves that 16272register entirely for this use, at least within the current compilation. 16273The register will not be allocated for any other purpose in the 16274functions in the current compilation. The register will not be saved 16275and restored by these functions. Stores into this register are never 16276deleted even if they would appear to be dead, but references may be 16277deleted or moved or simplified. 16278 16279 It is not safe to access the global register variables from signal 16280handlers, or from more than one thread of control, because the system 16281library routines may temporarily use the register for other things 16282(unless you recompile them specially for the task at hand). 16283 16284 It is not safe for one function that uses a global register variable to 16285call another such function `foo' by way of a third function `lose' that 16286was compiled without knowledge of this variable (i.e. in a different 16287source file in which the variable wasn't declared). This is because 16288`lose' might save the register and put some other value there. For 16289example, you can't expect a global register variable to be available in 16290the comparison-function that you pass to `qsort', since `qsort' might 16291have put something else in that register. (If you are prepared to 16292recompile `qsort' with the same global register variable, you can solve 16293this problem.) 16294 16295 If you want to recompile `qsort' or other source files which do not 16296actually use your global register variable, so that they will not use 16297that register for any other purpose, then it suffices to specify the 16298compiler option `-ffixed-REG'. You need not actually add a global 16299register declaration to their source code. 16300 16301 A function which can alter the value of a global register variable 16302cannot safely be called from a function compiled without this variable, 16303because it could clobber the value the caller expects to find there on 16304return. Therefore, the function which is the entry point into the part 16305of the program that uses the global register variable must explicitly 16306save and restore the value which belongs to its caller. 16307 16308 On most machines, `longjmp' will restore to each global register 16309variable the value it had at the time of the `setjmp'. On some 16310machines, however, `longjmp' will not change the value of global 16311register variables. To be portable, the function that called `setjmp' 16312should make other arrangements to save the values of the global register 16313variables, and to restore them in a `longjmp'. This way, the same 16314thing will happen regardless of what `longjmp' does. 16315 16316 All global register variable declarations must precede all function 16317definitions. If such a declaration could appear after function 16318definitions, the declaration would be too late to prevent the register 16319from being used for other purposes in the preceding functions. 16320 16321 Global register variables may not have initial values, because an 16322executable file has no means to supply initial contents for a register. 16323 16324 On the SPARC, there are reports that g3 ... g7 are suitable registers, 16325but certain library functions, such as `getwd', as well as the 16326subroutines for division and remainder, modify g3 and g4. g1 and g2 16327are local temporaries. 16328 16329 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 16330course, it will not do to use more than a few of those. 16331 16332 16333File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 16334 163355.38.2 Specifying Registers for Local Variables 16336----------------------------------------------- 16337 16338You can define a local register variable with a specified register like 16339this: 16340 16341 register int *foo asm ("a5"); 16342 16343Here `a5' is the name of the register which should be used. Note that 16344this is the same syntax used for defining global register variables, 16345but for a local variable it would appear within a function. 16346 16347 Naturally the register name is cpu-dependent, but this is not a 16348problem, since specific registers are most often useful with explicit 16349assembler instructions (*note Extended Asm::). Both of these things 16350generally require that you conditionalize your program according to cpu 16351type. 16352 16353 In addition, operating systems on one type of cpu may differ in how 16354they name the registers; then you would need additional conditionals. 16355For example, some 68000 operating systems call this register `%a5'. 16356 16357 Defining such a register variable does not reserve the register; it 16358remains available for other uses in places where flow control determines 16359the variable's value is not live. However, these registers are made 16360unavailable for use in the reload pass; excessive use of this feature 16361leaves the compiler too few available registers to compile certain 16362functions. 16363 16364 This option does not guarantee that GCC will generate code that has 16365this variable in the register you specify at all times. You may not 16366code an explicit reference to this register in an `asm' statement and 16367assume it will always refer to this variable. 16368 16369 Stores into local register variables may be deleted when they appear 16370to be dead according to dataflow analysis. References to local 16371register variables may be deleted or moved or simplified. 16372 16373 16374File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 16375 163765.39 Alternate Keywords 16377======================= 16378 16379`-ansi' and the various `-std' options disable certain keywords. This 16380causes trouble when you want to use GNU C extensions, or a 16381general-purpose header file that should be usable by all programs, 16382including ISO C programs. The keywords `asm', `typeof' and `inline' 16383are not available in programs compiled with `-ansi' or `-std' (although 16384`inline' can be used in a program compiled with `-std=c99'). The ISO 16385C99 keyword `restrict' is only available when `-std=gnu99' (which will 16386eventually be the default) or `-std=c99' (or the equivalent 16387`-std=iso9899:1999') is used. 16388 16389 The way to solve these problems is to put `__' at the beginning and 16390end of each problematical keyword. For example, use `__asm__' instead 16391of `asm', and `__inline__' instead of `inline'. 16392 16393 Other C compilers won't accept these alternative keywords; if you want 16394to compile with another compiler, you can define the alternate keywords 16395as macros to replace them with the customary keywords. It looks like 16396this: 16397 16398 #ifndef __GNUC__ 16399 #define __asm__ asm 16400 #endif 16401 16402 `-pedantic' and other options cause warnings for many GNU C extensions. 16403You can prevent such warnings within one expression by writing 16404`__extension__' before the expression. `__extension__' has no effect 16405aside from this. 16406 16407 16408File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 16409 164105.40 Incomplete `enum' Types 16411============================ 16412 16413You can define an `enum' tag without specifying its possible values. 16414This results in an incomplete type, much like what you get if you write 16415`struct foo' without describing the elements. A later declaration 16416which does specify the possible values completes the type. 16417 16418 You can't allocate variables or storage using the type while it is 16419incomplete. However, you can work with pointers to that type. 16420 16421 This extension may not be very useful, but it makes the handling of 16422`enum' more consistent with the way `struct' and `union' are handled. 16423 16424 This extension is not supported by GNU C++. 16425 16426 16427File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 16428 164295.41 Function Names as Strings 16430============================== 16431 16432GCC provides three magic variables which hold the name of the current 16433function, as a string. The first of these is `__func__', which is part 16434of the C99 standard: 16435 16436 The identifier `__func__' is implicitly declared by the translator 16437 as if, immediately following the opening brace of each function 16438 definition, the declaration 16439 static const char __func__[] = "function-name"; 16440 16441 appeared, where function-name is the name of the lexically-enclosing 16442 function. This name is the unadorned name of the function. 16443 16444 `__FUNCTION__' is another name for `__func__'. Older versions of GCC 16445recognize only this name. However, it is not standardized. For 16446maximum portability, we recommend you use `__func__', but provide a 16447fallback definition with the preprocessor: 16448 16449 #if __STDC_VERSION__ < 199901L 16450 # if __GNUC__ >= 2 16451 # define __func__ __FUNCTION__ 16452 # else 16453 # define __func__ "<unknown>" 16454 # endif 16455 #endif 16456 16457 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 16458However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 16459the function as well as its bare name. For example, this program: 16460 16461 extern "C" { 16462 extern int printf (char *, ...); 16463 } 16464 16465 class a { 16466 public: 16467 void sub (int i) 16468 { 16469 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 16470 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 16471 } 16472 }; 16473 16474 int 16475 main (void) 16476 { 16477 a ax; 16478 ax.sub (0); 16479 return 0; 16480 } 16481 16482gives this output: 16483 16484 __FUNCTION__ = sub 16485 __PRETTY_FUNCTION__ = void a::sub(int) 16486 16487 These identifiers are not preprocessor macros. In GCC 3.3 and 16488earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were 16489treated as string literals; they could be used to initialize `char' 16490arrays, and they could be concatenated with other string literals. GCC 164913.4 and later treat them as variables, like `__func__'. In C++, 16492`__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables. 16493 16494 16495File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 16496 164975.42 Getting the Return or Frame Address of a Function 16498====================================================== 16499 16500These functions may be used to get information about the callers of a 16501function. 16502 16503 -- Built-in Function: void * __builtin_return_address (unsigned int 16504 LEVEL) 16505 This function returns the return address of the current function, 16506 or of one of its callers. The LEVEL argument is number of frames 16507 to scan up the call stack. A value of `0' yields the return 16508 address of the current function, a value of `1' yields the return 16509 address of the caller of the current function, and so forth. When 16510 inlining the expected behavior is that the function will return 16511 the address of the function that will be returned to. To work 16512 around this behavior use the `noinline' function attribute. 16513 16514 The LEVEL argument must be a constant integer. 16515 16516 On some machines it may be impossible to determine the return 16517 address of any function other than the current one; in such cases, 16518 or when the top of the stack has been reached, this function will 16519 return `0' or a random value. In addition, 16520 `__builtin_frame_address' may be used to determine if the top of 16521 the stack has been reached. 16522 16523 This function should only be used with a nonzero argument for 16524 debugging purposes. 16525 16526 -- Built-in Function: void * __builtin_frame_address (unsigned int 16527 LEVEL) 16528 This function is similar to `__builtin_return_address', but it 16529 returns the address of the function frame rather than the return 16530 address of the function. Calling `__builtin_frame_address' with a 16531 value of `0' yields the frame address of the current function, a 16532 value of `1' yields the frame address of the caller of the current 16533 function, and so forth. 16534 16535 The frame is the area on the stack which holds local variables and 16536 saved registers. The frame address is normally the address of the 16537 first word pushed on to the stack by the function. However, the 16538 exact definition depends upon the processor and the calling 16539 convention. If the processor has a dedicated frame pointer 16540 register, and the function has a frame, then 16541 `__builtin_frame_address' will return the value of the frame 16542 pointer register. 16543 16544 On some machines it may be impossible to determine the frame 16545 address of any function other than the current one; in such cases, 16546 or when the top of the stack has been reached, this function will 16547 return `0' if the first frame pointer is properly initialized by 16548 the startup code. 16549 16550 This function should only be used with a nonzero argument for 16551 debugging purposes. 16552 16553 16554File: gcc.info, Node: Vector Extensions, Next: Other Builtins, Prev: Return Address, Up: C Extensions 16555 165565.43 Using vector instructions through built-in functions 16557========================================================= 16558 16559On some targets, the instruction set contains SIMD vector instructions 16560that operate on multiple values contained in one large register at the 16561same time. For example, on the i386 the MMX, 3Dnow! and SSE extensions 16562can be used this way. 16563 16564 The first step in using these extensions is to provide the necessary 16565data types. This should be done using an appropriate `typedef': 16566 16567 typedef int v4si __attribute__ ((mode(V4SI))); 16568 16569 The base type `int' is effectively ignored by the compiler, the actual 16570properties of the new type `v4si' are defined by the `__attribute__'. 16571It defines the machine mode to be used; for vector types these have the 16572form `VNB'; N should be the number of elements in the vector, and B 16573should be the base mode of the individual elements. The following can 16574be used as base modes: 16575 16576`QI' 16577 An integer that is as wide as the smallest addressable unit, 16578 usually 8 bits. 16579 16580`HI' 16581 An integer, twice as wide as a QI mode integer, usually 16 bits. 16582 16583`SI' 16584 An integer, four times as wide as a QI mode integer, usually 32 16585 bits. 16586 16587`DI' 16588 An integer, eight times as wide as a QI mode integer, usually 64 16589 bits. 16590 16591`SF' 16592 A floating point value, as wide as a SI mode integer, usually 32 16593 bits. 16594 16595`DF' 16596 A floating point value, as wide as a DI mode integer, usually 64 16597 bits. 16598 16599 Specifying a combination that is not valid for the current architecture 16600will cause GCC to synthesize the instructions using a narrower mode. 16601For example, if you specify a variable of type `V4SI' and your 16602architecture does not allow for this specific SIMD type, GCC will 16603produce code that uses 4 `SIs'. 16604 16605 The types defined in this manner can be used with a subset of normal C 16606operations. Currently, GCC will allow using the following operators on 16607these types: `+, -, *, /, unary minus, ^, |, &, ~'. 16608 16609 The operations behave like C++ `valarrays'. Addition is defined as 16610the addition of the corresponding elements of the operands. For 16611example, in the code below, each of the 4 elements in A will be added 16612to the corresponding 4 elements in B and the resulting vector will be 16613stored in C. 16614 16615 typedef int v4si __attribute__ ((mode(V4SI))); 16616 16617 v4si a, b, c; 16618 16619 c = a + b; 16620 16621 Subtraction, multiplication, division, and the logical operations 16622operate in a similar manner. Likewise, the result of using the unary 16623minus or complement operators on a vector type is a vector whose 16624elements are the negative or complemented values of the corresponding 16625elements in the operand. 16626 16627 You can declare variables and use them in function calls and returns, 16628as well as in assignments and some casts. You can specify a vector 16629type as a return type for a function. Vector types can also be used as 16630function arguments. It is possible to cast from one vector type to 16631another, provided they are of the same size (in fact, you can also cast 16632vectors to and from other datatypes of the same size). 16633 16634 You cannot operate between vectors of different lengths or different 16635signedness without a cast. 16636 16637 A port that supports hardware vector operations, usually provides a set 16638of built-in functions that can be used to operate on vectors. For 16639example, a function to add two vectors and multiply the result by a 16640third could look like this: 16641 16642 v4si f (v4si a, v4si b, v4si c) 16643 { 16644 v4si tmp = __builtin_addv4si (a, b); 16645 return __builtin_mulv4si (tmp, c); 16646 } 16647 16648 16649File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Vector Extensions, Up: C Extensions 16650 166515.44 Other built-in functions provided by GCC 16652============================================= 16653 16654GCC provides a large number of built-in functions other than the ones 16655mentioned above. Some of these are for internal use in the processing 16656of exceptions or variable-length argument lists and will not be 16657documented here because they may change from time to time; we do not 16658recommend general use of these functions. 16659 16660 The remaining functions are provided for optimization purposes. 16661 16662 GCC includes built-in versions of many of the functions in the standard 16663C library. The versions prefixed with `__builtin_' will always be 16664treated as having the same meaning as the C library function even if you 16665specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 16666these functions are only optimized in certain cases; if they are not 16667optimized in a particular case, a call to the library function will be 16668emitted. 16669 16670 Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the 16671functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext', 16672`dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl', 16673`ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal', 16674`gamma', `gettext', `index', `j0f', `j0l', `j0', `j1f', `j1l', `j1', 16675`jnf', `jnl', `jn', `mempcpy', `pow10f', `pow10l', `pow10', 16676`printf_unlocked', `rindex', `scalbf', `scalbl', `scalb', 16677`significandf', `significandl', `significand', `sincosf', `sincosl', 16678`sincos', `stpcpy', `strdup', `strfmon', `y0f', `y0l', `y0', `y1f', 16679`y1l', `y1', `ynf', `ynl' and `yn' may be handled as built-in functions. 16680All these functions have corresponding versions prefixed with 16681`__builtin_', which may be used even in strict C89 mode. 16682 16683 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 16684`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 16685`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 16686`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 16687`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 16688`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 16689`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 16690`cimag', `conjf', `conjl', `conj', `copysignf', `copysignl', 16691`copysign', `cpowf', `cpowl', `cpow', `cprojf', `cprojl', `cproj', 16692`crealf', `creall', `creal', `csinf', `csinhf', `csinhl', `csinh', 16693`csinl', `csin', `csqrtf', `csqrtl', `csqrt', `ctanf', `ctanhf', 16694`ctanhl', `ctanh', `ctanl', `ctan', `erfcf', `erfcl', `erfc', `erff', 16695`erfl', `erf', `exp2f', `exp2l', `exp2', `expm1f', `expm1l', `expm1', 16696`fdimf', `fdiml', `fdim', `fmaf', `fmal', `fmaxf', `fmaxl', `fmax', 16697`fma', `fminf', `fminl', `fmin', `hypotf', `hypotl', `hypot', `ilogbf', 16698`ilogbl', `ilogb', `imaxabs', `lgammaf', `lgammal', `lgamma', `llabs', 16699`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 16700`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', `logbl', 16701`logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', `lround', 16702`nearbyintf', `nearbyintl', `nearbyint', `nextafterf', `nextafterl', 16703`nextafter', `nexttowardf', `nexttowardl', `nexttoward', `remainderf', 16704`remainderl', `remainder', `remquof', `remquol', `remquo', `rintf', 16705`rintl', `rint', `roundf', `roundl', `round', `scalblnf', `scalblnl', 16706`scalbln', `scalbnf', `scalbnl', `scalbn', `snprintf', `tgammaf', 16707`tgammal', `tgamma', `truncf', `truncl', `trunc', `vfscanf', `vscanf', 16708`vsnprintf' and `vsscanf' are handled as built-in functions except in 16709strict ISO C90 mode (`-ansi' or `-std=c89'). 16710 16711 There are also built-in versions of the ISO C99 functions `acosf', 16712`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 16713`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 16714`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 16715`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 16716`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 16717`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 16718recognized in any mode since ISO C90 reserves these names for the 16719purpose to which ISO C99 puts them. All these functions have 16720corresponding versions prefixed with `__builtin_'. 16721 16722 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 16723`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 16724`fprintf', `fputs', `frexp', `fscanf', `labs', `ldexp', `log10', `log', 16725`malloc', `memcmp', `memcpy', `memset', `modf', `pow', `printf', 16726`putchar', `puts', `scanf', `sinh', `sin', `snprintf', `sprintf', 16727`sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', `strcspn', 16728`strlen', `strncat', `strncmp', `strncpy', `strpbrk', `strrchr', 16729`strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and `vsprintf' 16730are all recognized as built-in functions unless `-fno-builtin' is 16731specified (or `-fno-builtin-FUNCTION' is specified for an individual 16732function). All of these functions have corresponding versions prefixed 16733with `__builtin_'. 16734 16735 GCC provides built-in versions of the ISO C99 floating point comparison 16736macros that avoid raising exceptions for unordered operands. They have 16737the same names as the standard macros ( `isgreater', `isgreaterequal', 16738`isless', `islessequal', `islessgreater', and `isunordered') , with 16739`__builtin_' prefixed. We intend for a library implementor to be able 16740to simply `#define' each standard macro to its built-in equivalent. 16741 16742 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 16743 You can use the built-in function `__builtin_types_compatible_p' to 16744 determine whether two types are the same. 16745 16746 This built-in function returns 1 if the unqualified versions of the 16747 types TYPE1 and TYPE2 (which are types, not expressions) are 16748 compatible, 0 otherwise. The result of this built-in function can 16749 be used in integer constant expressions. 16750 16751 This built-in function ignores top level qualifiers (e.g., `const', 16752 `volatile'). For example, `int' is equivalent to `const int'. 16753 16754 The type `int[]' and `int[5]' are compatible. On the other hand, 16755 `int' and `char *' are not compatible, even if the size of their 16756 types, on the particular architecture are the same. Also, the 16757 amount of pointer indirection is taken into account when 16758 determining similarity. Consequently, `short *' is not similar to 16759 `short **'. Furthermore, two types that are typedefed are 16760 considered compatible if their underlying types are compatible. 16761 16762 An `enum' type is not considered to be compatible with another 16763 `enum' type even if both are compatible with the same integer 16764 type; this is what the C standard specifies. For example, `enum 16765 {foo, bar}' is not similar to `enum {hot, dog}'. 16766 16767 You would typically use this function in code whose execution 16768 varies depending on the arguments' types. For example: 16769 16770 #define foo(x) \ 16771 ({ \ 16772 typeof (x) tmp; \ 16773 if (__builtin_types_compatible_p (typeof (x), long double)) \ 16774 tmp = foo_long_double (tmp); \ 16775 else if (__builtin_types_compatible_p (typeof (x), double)) \ 16776 tmp = foo_double (tmp); \ 16777 else if (__builtin_types_compatible_p (typeof (x), float)) \ 16778 tmp = foo_float (tmp); \ 16779 else \ 16780 abort (); \ 16781 tmp; \ 16782 }) 16783 16784 _Note:_ This construct is only available for C. 16785 16786 16787 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 16788 EXP2) 16789 You can use the built-in function `__builtin_choose_expr' to 16790 evaluate code depending on the value of a constant expression. 16791 This built-in function returns EXP1 if CONST_EXP, which is a 16792 constant expression that must be able to be determined at compile 16793 time, is nonzero. Otherwise it returns 0. 16794 16795 This built-in function is analogous to the `? :' operator in C, 16796 except that the expression returned has its type unaltered by 16797 promotion rules. Also, the built-in function does not evaluate 16798 the expression that was not chosen. For example, if CONST_EXP 16799 evaluates to true, EXP2 is not evaluated even if it has 16800 side-effects. 16801 16802 This built-in function can return an lvalue if the chosen argument 16803 is an lvalue. 16804 16805 If EXP1 is returned, the return type is the same as EXP1's type. 16806 Similarly, if EXP2 is returned, its return type is the same as 16807 EXP2. 16808 16809 Example: 16810 16811 #define foo(x) \ 16812 __builtin_choose_expr ( \ 16813 __builtin_types_compatible_p (typeof (x), double), \ 16814 foo_double (x), \ 16815 __builtin_choose_expr ( \ 16816 __builtin_types_compatible_p (typeof (x), float), \ 16817 foo_float (x), \ 16818 /* The void expression results in a compile-time error \ 16819 when assigning the result to something. */ \ 16820 (void)0)) 16821 16822 _Note:_ This construct is only available for C. Furthermore, the 16823 unused expression (EXP1 or EXP2 depending on the value of 16824 CONST_EXP) may still generate syntax errors. This may change in 16825 future revisions. 16826 16827 16828 -- Built-in Function: int __builtin_constant_p (EXP) 16829 You can use the built-in function `__builtin_constant_p' to 16830 determine if a value is known to be constant at compile-time and 16831 hence that GCC can perform constant-folding on expressions 16832 involving that value. The argument of the function is the value 16833 to test. The function returns the integer 1 if the argument is 16834 known to be a compile-time constant and 0 if it is not known to be 16835 a compile-time constant. A return of 0 does not indicate that the 16836 value is _not_ a constant, but merely that GCC cannot prove it is 16837 a constant with the specified value of the `-O' option. 16838 16839 You would typically use this function in an embedded application 16840 where memory was a critical resource. If you have some complex 16841 calculation, you may want it to be folded if it involves 16842 constants, but need to call a function if it does not. For 16843 example: 16844 16845 #define Scale_Value(X) \ 16846 (__builtin_constant_p (X) \ 16847 ? ((X) * SCALE + OFFSET) : Scale (X)) 16848 16849 You may use this built-in function in either a macro or an inline 16850 function. However, if you use it in an inlined function and pass 16851 an argument of the function as the argument to the built-in, GCC 16852 will never return 1 when you call the inline function with a 16853 string constant or compound literal (*note Compound Literals::) 16854 and will not return 1 when you pass a constant numeric value to 16855 the inline function unless you specify the `-O' option. 16856 16857 You may also use `__builtin_constant_p' in initializers for static 16858 data. For instance, you can write 16859 16860 static const int table[] = { 16861 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 16862 /* ... */ 16863 }; 16864 16865 This is an acceptable initializer even if EXPRESSION is not a 16866 constant expression. GCC must be more conservative about 16867 evaluating the built-in in this case, because it has no 16868 opportunity to perform optimization. 16869 16870 Previous versions of GCC did not accept this built-in in data 16871 initializers. The earliest version where it is completely safe is 16872 3.0.1. 16873 16874 -- Built-in Function: long __builtin_expect (long EXP, long C) 16875 You may use `__builtin_expect' to provide the compiler with branch 16876 prediction information. In general, you should prefer to use 16877 actual profile feedback for this (`-fprofile-arcs'), as 16878 programmers are notoriously bad at predicting how their programs 16879 actually perform. However, there are applications in which this 16880 data is hard to collect. 16881 16882 The return value is the value of EXP, which should be an integral 16883 expression. The value of C must be a compile-time constant. The 16884 semantics of the built-in are that it is expected that EXP == C. 16885 For example: 16886 16887 if (__builtin_expect (x, 0)) 16888 foo (); 16889 16890 would indicate that we do not expect to call `foo', since we 16891 expect `x' to be zero. Since you are limited to integral 16892 expressions for EXP, you should use constructions such as 16893 16894 if (__builtin_expect (ptr != NULL, 1)) 16895 error (); 16896 16897 when testing pointer or floating-point values. 16898 16899 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 16900 This function is used to minimize cache-miss latency by moving 16901 data into a cache before it is accessed. You can insert calls to 16902 `__builtin_prefetch' into code for which you know addresses of 16903 data in memory that is likely to be accessed soon. If the target 16904 supports them, data prefetch instructions will be generated. If 16905 the prefetch is done early enough before the access then the data 16906 will be in the cache by the time it is accessed. 16907 16908 The value of ADDR is the address of the memory to prefetch. There 16909 are two optional arguments, RW and LOCALITY. The value of RW is a 16910 compile-time constant one or zero; one means that the prefetch is 16911 preparing for a write to the memory address and zero, the default, 16912 means that the prefetch is preparing for a read. The value 16913 LOCALITY must be a compile-time constant integer between zero and 16914 three. A value of zero means that the data has no temporal 16915 locality, so it need not be left in the cache after the access. A 16916 value of three means that the data has a high degree of temporal 16917 locality and should be left in all levels of cache possible. 16918 Values of one and two mean, respectively, a low or moderate degree 16919 of temporal locality. The default is three. 16920 16921 for (i = 0; i < n; i++) 16922 { 16923 a[i] = a[i] + b[i]; 16924 __builtin_prefetch (&a[i+j], 1, 1); 16925 __builtin_prefetch (&b[i+j], 0, 1); 16926 /* ... */ 16927 } 16928 16929 Data prefetch does not generate faults if ADDR is invalid, but the 16930 address expression itself must be valid. For example, a prefetch 16931 of `p->next' will not fault if `p->next' is not a valid address, 16932 but evaluation will fault if `p' is not a valid address. 16933 16934 If the target does not support data prefetch, the address 16935 expression is evaluated if it includes side effects but no other 16936 code is generated and GCC does not issue a warning. 16937 16938 -- Built-in Function: double __builtin_huge_val (void) 16939 Returns a positive infinity, if supported by the floating-point 16940 format, else `DBL_MAX'. This function is suitable for 16941 implementing the ISO C macro `HUGE_VAL'. 16942 16943 -- Built-in Function: float __builtin_huge_valf (void) 16944 Similar to `__builtin_huge_val', except the return type is `float'. 16945 16946 -- Built-in Function: long double __builtin_huge_vall (void) 16947 Similar to `__builtin_huge_val', except the return type is `long 16948 double'. 16949 16950 -- Built-in Function: double __builtin_inf (void) 16951 Similar to `__builtin_huge_val', except a warning is generated if 16952 the target floating-point format does not support infinities. 16953 This function is suitable for implementing the ISO C99 macro 16954 `INFINITY'. 16955 16956 -- Built-in Function: float __builtin_inff (void) 16957 Similar to `__builtin_inf', except the return type is `float'. 16958 16959 -- Built-in Function: long double __builtin_infl (void) 16960 Similar to `__builtin_inf', except the return type is `long 16961 double'. 16962 16963 -- Built-in Function: double __builtin_nan (const char *str) 16964 This is an implementation of the ISO C99 function `nan'. 16965 16966 Since ISO C99 defines this function in terms of `strtod', which we 16967 do not implement, a description of the parsing is in order. The 16968 string is parsed as by `strtol'; that is, the base is recognized by 16969 leading `0' or `0x' prefixes. The number parsed is placed in the 16970 significand such that the least significant bit of the number is 16971 at the least significant bit of the significand. The number is 16972 truncated to fit the significand field provided. The significand 16973 is forced to be a quiet NaN. 16974 16975 This function, if given a string literal, is evaluated early enough 16976 that it is considered a compile-time constant. 16977 16978 -- Built-in Function: float __builtin_nanf (const char *str) 16979 Similar to `__builtin_nan', except the return type is `float'. 16980 16981 -- Built-in Function: long double __builtin_nanl (const char *str) 16982 Similar to `__builtin_nan', except the return type is `long 16983 double'. 16984 16985 -- Built-in Function: double __builtin_nans (const char *str) 16986 Similar to `__builtin_nan', except the significand is forced to be 16987 a signaling NaN. The `nans' function is proposed by WG14 N965. 16988 16989 -- Built-in Function: float __builtin_nansf (const char *str) 16990 Similar to `__builtin_nans', except the return type is `float'. 16991 16992 -- Built-in Function: long double __builtin_nansl (const char *str) 16993 Similar to `__builtin_nans', except the return type is `long 16994 double'. 16995 16996 -- Built-in Function: int __builtin_ffs (unsigned int x) 16997 Returns one plus the index of the least significant 1-bit of X, or 16998 if X is zero, returns zero. 16999 17000 -- Built-in Function: int __builtin_clz (unsigned int x) 17001 Returns the number of leading 0-bits in X, starting at the most 17002 significant bit position. If X is 0, the result is undefined. 17003 17004 -- Built-in Function: int __builtin_ctz (unsigned int x) 17005 Returns the number of trailing 0-bits in X, starting at the least 17006 significant bit position. If X is 0, the result is undefined. 17007 17008 -- Built-in Function: int __builtin_popcount (unsigned int x) 17009 Returns the number of 1-bits in X. 17010 17011 -- Built-in Function: int __builtin_parity (unsigned int x) 17012 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 17013 17014 -- Built-in Function: int __builtin_ffsl (unsigned long) 17015 Similar to `__builtin_ffs', except the argument type is `unsigned 17016 long'. 17017 17018 -- Built-in Function: int __builtin_clzl (unsigned long) 17019 Similar to `__builtin_clz', except the argument type is `unsigned 17020 long'. 17021 17022 -- Built-in Function: int __builtin_ctzl (unsigned long) 17023 Similar to `__builtin_ctz', except the argument type is `unsigned 17024 long'. 17025 17026 -- Built-in Function: int __builtin_popcountl (unsigned long) 17027 Similar to `__builtin_popcount', except the argument type is 17028 `unsigned long'. 17029 17030 -- Built-in Function: int __builtin_parityl (unsigned long) 17031 Similar to `__builtin_parity', except the argument type is 17032 `unsigned long'. 17033 17034 -- Built-in Function: int __builtin_ffsll (unsigned long long) 17035 Similar to `__builtin_ffs', except the argument type is `unsigned 17036 long long'. 17037 17038 -- Built-in Function: int __builtin_clzll (unsigned long long) 17039 Similar to `__builtin_clz', except the argument type is `unsigned 17040 long long'. 17041 17042 -- Built-in Function: int __builtin_ctzll (unsigned long long) 17043 Similar to `__builtin_ctz', except the argument type is `unsigned 17044 long long'. 17045 17046 -- Built-in Function: int __builtin_popcountll (unsigned long long) 17047 Similar to `__builtin_popcount', except the argument type is 17048 `unsigned long long'. 17049 17050 -- Built-in Function: int __builtin_parityll (unsigned long long) 17051 Similar to `__builtin_parity', except the argument type is 17052 `unsigned long long'. 17053 17054 17055File: gcc.info, Node: Target Builtins, Next: Pragmas, Prev: Other Builtins, Up: C Extensions 17056 170575.45 Built-in Functions Specific to Particular Target Machines 17058============================================================== 17059 17060On some target machines, GCC supports many built-in functions specific 17061to those machines. Generally these generate calls to specific machine 17062instructions, but allow the compiler to schedule those calls. 17063 17064* Menu: 17065 17066* Alpha Built-in Functions:: 17067* ARM Built-in Functions:: 17068* X86 Built-in Functions:: 17069* PowerPC AltiVec Built-in Functions:: 17070 17071 17072File: gcc.info, Node: Alpha Built-in Functions, Next: ARM Built-in Functions, Up: Target Builtins 17073 170745.45.1 Alpha Built-in Functions 17075------------------------------- 17076 17077These built-in functions are available for the Alpha family of 17078processors, depending on the command-line switches used. 17079 17080 The following built-in functions are always available. They all 17081generate the machine instruction that is part of the name. 17082 17083 long __builtin_alpha_implver (void) 17084 long __builtin_alpha_rpcc (void) 17085 long __builtin_alpha_amask (long) 17086 long __builtin_alpha_cmpbge (long, long) 17087 long __builtin_alpha_extbl (long, long) 17088 long __builtin_alpha_extwl (long, long) 17089 long __builtin_alpha_extll (long, long) 17090 long __builtin_alpha_extql (long, long) 17091 long __builtin_alpha_extwh (long, long) 17092 long __builtin_alpha_extlh (long, long) 17093 long __builtin_alpha_extqh (long, long) 17094 long __builtin_alpha_insbl (long, long) 17095 long __builtin_alpha_inswl (long, long) 17096 long __builtin_alpha_insll (long, long) 17097 long __builtin_alpha_insql (long, long) 17098 long __builtin_alpha_inswh (long, long) 17099 long __builtin_alpha_inslh (long, long) 17100 long __builtin_alpha_insqh (long, long) 17101 long __builtin_alpha_mskbl (long, long) 17102 long __builtin_alpha_mskwl (long, long) 17103 long __builtin_alpha_mskll (long, long) 17104 long __builtin_alpha_mskql (long, long) 17105 long __builtin_alpha_mskwh (long, long) 17106 long __builtin_alpha_msklh (long, long) 17107 long __builtin_alpha_mskqh (long, long) 17108 long __builtin_alpha_umulh (long, long) 17109 long __builtin_alpha_zap (long, long) 17110 long __builtin_alpha_zapnot (long, long) 17111 17112 The following built-in functions are always with `-mmax' or 17113`-mcpu=CPU' where CPU is `pca56' or later. They all generate the 17114machine instruction that is part of the name. 17115 17116 long __builtin_alpha_pklb (long) 17117 long __builtin_alpha_pkwb (long) 17118 long __builtin_alpha_unpkbl (long) 17119 long __builtin_alpha_unpkbw (long) 17120 long __builtin_alpha_minub8 (long, long) 17121 long __builtin_alpha_minsb8 (long, long) 17122 long __builtin_alpha_minuw4 (long, long) 17123 long __builtin_alpha_minsw4 (long, long) 17124 long __builtin_alpha_maxub8 (long, long) 17125 long __builtin_alpha_maxsb8 (long, long) 17126 long __builtin_alpha_maxuw4 (long, long) 17127 long __builtin_alpha_maxsw4 (long, long) 17128 long __builtin_alpha_perr (long, long) 17129 17130 The following built-in functions are always with `-mcix' or 17131`-mcpu=CPU' where CPU is `ev67' or later. They all generate the 17132machine instruction that is part of the name. 17133 17134 long __builtin_alpha_cttz (long) 17135 long __builtin_alpha_ctlz (long) 17136 long __builtin_alpha_ctpop (long) 17137 17138 The following builtins are available on systems that use the OSF/1 17139PALcode. Normally they invoke the `rduniq' and `wruniq' PAL calls, but 17140when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'. 17141 17142 void *__builtin_thread_pointer (void) 17143 void __builtin_set_thread_pointer (void *) 17144 17145 17146File: gcc.info, Node: ARM Built-in Functions, Next: X86 Built-in Functions, Prev: Alpha Built-in Functions, Up: Target Builtins 17147 171485.45.2 ARM Built-in Functions 17149----------------------------- 17150 17151These built-in functions are available for the ARM family of 17152processors, when the `-mcpu=iwmmxt' switch is used: 17153 17154 typedef int v2si __attribute__ ((vector_size (8))); 17155 typedef short v4hi __attribute__ ((vector_size (8))); 17156 typedef char v8qi __attribute__ ((vector_size (8))); 17157 17158 int __builtin_arm_getwcx (int) 17159 void __builtin_arm_setwcx (int, int) 17160 int __builtin_arm_textrmsb (v8qi, int) 17161 int __builtin_arm_textrmsh (v4hi, int) 17162 int __builtin_arm_textrmsw (v2si, int) 17163 int __builtin_arm_textrmub (v8qi, int) 17164 int __builtin_arm_textrmuh (v4hi, int) 17165 int __builtin_arm_textrmuw (v2si, int) 17166 v8qi __builtin_arm_tinsrb (v8qi, int) 17167 v4hi __builtin_arm_tinsrh (v4hi, int) 17168 v2si __builtin_arm_tinsrw (v2si, int) 17169 long long __builtin_arm_tmia (long long, int, int) 17170 long long __builtin_arm_tmiabb (long long, int, int) 17171 long long __builtin_arm_tmiabt (long long, int, int) 17172 long long __builtin_arm_tmiaph (long long, int, int) 17173 long long __builtin_arm_tmiatb (long long, int, int) 17174 long long __builtin_arm_tmiatt (long long, int, int) 17175 int __builtin_arm_tmovmskb (v8qi) 17176 int __builtin_arm_tmovmskh (v4hi) 17177 int __builtin_arm_tmovmskw (v2si) 17178 long long __builtin_arm_waccb (v8qi) 17179 long long __builtin_arm_wacch (v4hi) 17180 long long __builtin_arm_waccw (v2si) 17181 v8qi __builtin_arm_waddb (v8qi, v8qi) 17182 v8qi __builtin_arm_waddbss (v8qi, v8qi) 17183 v8qi __builtin_arm_waddbus (v8qi, v8qi) 17184 v4hi __builtin_arm_waddh (v4hi, v4hi) 17185 v4hi __builtin_arm_waddhss (v4hi, v4hi) 17186 v4hi __builtin_arm_waddhus (v4hi, v4hi) 17187 v2si __builtin_arm_waddw (v2si, v2si) 17188 v2si __builtin_arm_waddwss (v2si, v2si) 17189 v2si __builtin_arm_waddwus (v2si, v2si) 17190 v8qi __builtin_arm_walign (v8qi, v8qi, int) 17191 long long __builtin_arm_wand(long long, long long) 17192 long long __builtin_arm_wandn (long long, long long) 17193 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 17194 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 17195 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 17196 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 17197 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 17198 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 17199 v2si __builtin_arm_wcmpeqw (v2si, v2si) 17200 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 17201 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 17202 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 17203 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 17204 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 17205 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 17206 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 17207 long long __builtin_arm_wmacsz (v4hi, v4hi) 17208 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 17209 long long __builtin_arm_wmacuz (v4hi, v4hi) 17210 v4hi __builtin_arm_wmadds (v4hi, v4hi) 17211 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 17212 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 17213 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 17214 v2si __builtin_arm_wmaxsw (v2si, v2si) 17215 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 17216 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 17217 v2si __builtin_arm_wmaxuw (v2si, v2si) 17218 v8qi __builtin_arm_wminsb (v8qi, v8qi) 17219 v4hi __builtin_arm_wminsh (v4hi, v4hi) 17220 v2si __builtin_arm_wminsw (v2si, v2si) 17221 v8qi __builtin_arm_wminub (v8qi, v8qi) 17222 v4hi __builtin_arm_wminuh (v4hi, v4hi) 17223 v2si __builtin_arm_wminuw (v2si, v2si) 17224 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 17225 v4hi __builtin_arm_wmulul (v4hi, v4hi) 17226 v4hi __builtin_arm_wmulum (v4hi, v4hi) 17227 long long __builtin_arm_wor (long long, long long) 17228 v2si __builtin_arm_wpackdss (long long, long long) 17229 v2si __builtin_arm_wpackdus (long long, long long) 17230 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 17231 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 17232 v4hi __builtin_arm_wpackwss (v2si, v2si) 17233 v4hi __builtin_arm_wpackwus (v2si, v2si) 17234 long long __builtin_arm_wrord (long long, long long) 17235 long long __builtin_arm_wrordi (long long, int) 17236 v4hi __builtin_arm_wrorh (v4hi, long long) 17237 v4hi __builtin_arm_wrorhi (v4hi, int) 17238 v2si __builtin_arm_wrorw (v2si, long long) 17239 v2si __builtin_arm_wrorwi (v2si, int) 17240 v2si __builtin_arm_wsadb (v8qi, v8qi) 17241 v2si __builtin_arm_wsadbz (v8qi, v8qi) 17242 v2si __builtin_arm_wsadh (v4hi, v4hi) 17243 v2si __builtin_arm_wsadhz (v4hi, v4hi) 17244 v4hi __builtin_arm_wshufh (v4hi, int) 17245 long long __builtin_arm_wslld (long long, long long) 17246 long long __builtin_arm_wslldi (long long, int) 17247 v4hi __builtin_arm_wsllh (v4hi, long long) 17248 v4hi __builtin_arm_wsllhi (v4hi, int) 17249 v2si __builtin_arm_wsllw (v2si, long long) 17250 v2si __builtin_arm_wsllwi (v2si, int) 17251 long long __builtin_arm_wsrad (long long, long long) 17252 long long __builtin_arm_wsradi (long long, int) 17253 v4hi __builtin_arm_wsrah (v4hi, long long) 17254 v4hi __builtin_arm_wsrahi (v4hi, int) 17255 v2si __builtin_arm_wsraw (v2si, long long) 17256 v2si __builtin_arm_wsrawi (v2si, int) 17257 long long __builtin_arm_wsrld (long long, long long) 17258 long long __builtin_arm_wsrldi (long long, int) 17259 v4hi __builtin_arm_wsrlh (v4hi, long long) 17260 v4hi __builtin_arm_wsrlhi (v4hi, int) 17261 v2si __builtin_arm_wsrlw (v2si, long long) 17262 v2si __builtin_arm_wsrlwi (v2si, int) 17263 v8qi __builtin_arm_wsubb (v8qi, v8qi) 17264 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 17265 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 17266 v4hi __builtin_arm_wsubh (v4hi, v4hi) 17267 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 17268 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 17269 v2si __builtin_arm_wsubw (v2si, v2si) 17270 v2si __builtin_arm_wsubwss (v2si, v2si) 17271 v2si __builtin_arm_wsubwus (v2si, v2si) 17272 v4hi __builtin_arm_wunpckehsb (v8qi) 17273 v2si __builtin_arm_wunpckehsh (v4hi) 17274 long long __builtin_arm_wunpckehsw (v2si) 17275 v4hi __builtin_arm_wunpckehub (v8qi) 17276 v2si __builtin_arm_wunpckehuh (v4hi) 17277 long long __builtin_arm_wunpckehuw (v2si) 17278 v4hi __builtin_arm_wunpckelsb (v8qi) 17279 v2si __builtin_arm_wunpckelsh (v4hi) 17280 long long __builtin_arm_wunpckelsw (v2si) 17281 v4hi __builtin_arm_wunpckelub (v8qi) 17282 v2si __builtin_arm_wunpckeluh (v4hi) 17283 long long __builtin_arm_wunpckeluw (v2si) 17284 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 17285 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 17286 v2si __builtin_arm_wunpckihw (v2si, v2si) 17287 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 17288 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 17289 v2si __builtin_arm_wunpckilw (v2si, v2si) 17290 long long __builtin_arm_wxor (long long, long long) 17291 long long __builtin_arm_wzero () 17292 17293 17294File: gcc.info, Node: X86 Built-in Functions, Next: PowerPC AltiVec Built-in Functions, Prev: ARM Built-in Functions, Up: Target Builtins 17295 172965.45.3 X86 Built-in Functions 17297----------------------------- 17298 17299These built-in functions are available for the i386 and x86-64 family 17300of computers, depending on the command-line switches used. 17301 17302 The following machine modes are available for use with MMX built-in 17303functions (*note Vector Extensions::): `V2SI' for a vector of two 1730432-bit integers, `V4HI' for a vector of four 16-bit integers, and 17305`V8QI' for a vector of eight 8-bit integers. Some of the built-in 17306functions operate on MMX registers as a whole 64-bit entity, these use 17307`DI' as their mode. 17308 17309 If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector 17310of two 32-bit floating point values. 17311 17312 If SSE extensions are enabled, `V4SF' is used for a vector of four 1731332-bit floating point values. Some instructions use a vector of four 1731432-bit integers, these use `V4SI'. Finally, some instructions operate 17315on an entire vector register, interpreting it as a 128-bit integer, 17316these use mode `TI'. 17317 17318 The following built-in functions are made available by `-mmmx'. All 17319of them generate the machine instruction that is part of the name. 17320 17321 v8qi __builtin_ia32_paddb (v8qi, v8qi) 17322 v4hi __builtin_ia32_paddw (v4hi, v4hi) 17323 v2si __builtin_ia32_paddd (v2si, v2si) 17324 v8qi __builtin_ia32_psubb (v8qi, v8qi) 17325 v4hi __builtin_ia32_psubw (v4hi, v4hi) 17326 v2si __builtin_ia32_psubd (v2si, v2si) 17327 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 17328 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 17329 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 17330 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 17331 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 17332 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 17333 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 17334 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 17335 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 17336 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 17337 di __builtin_ia32_pand (di, di) 17338 di __builtin_ia32_pandn (di,di) 17339 di __builtin_ia32_por (di, di) 17340 di __builtin_ia32_pxor (di, di) 17341 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 17342 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 17343 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 17344 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 17345 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 17346 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 17347 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 17348 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 17349 v2si __builtin_ia32_punpckhdq (v2si, v2si) 17350 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 17351 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 17352 v2si __builtin_ia32_punpckldq (v2si, v2si) 17353 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 17354 v4hi __builtin_ia32_packssdw (v2si, v2si) 17355 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 17356 17357 The following built-in functions are made available either with 17358`-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 17359of them generate the machine instruction that is part of the name. 17360 17361 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 17362 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 17363 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 17364 v4hi __builtin_ia32_psadbw (v8qi, v8qi) 17365 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 17366 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 17367 v8qi __builtin_ia32_pminub (v8qi, v8qi) 17368 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 17369 int __builtin_ia32_pextrw (v4hi, int) 17370 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 17371 int __builtin_ia32_pmovmskb (v8qi) 17372 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 17373 void __builtin_ia32_movntq (di *, di) 17374 void __builtin_ia32_sfence (void) 17375 17376 The following built-in functions are available when `-msse' is used. 17377All of them generate the machine instruction that is part of the name. 17378 17379 int __builtin_ia32_comieq (v4sf, v4sf) 17380 int __builtin_ia32_comineq (v4sf, v4sf) 17381 int __builtin_ia32_comilt (v4sf, v4sf) 17382 int __builtin_ia32_comile (v4sf, v4sf) 17383 int __builtin_ia32_comigt (v4sf, v4sf) 17384 int __builtin_ia32_comige (v4sf, v4sf) 17385 int __builtin_ia32_ucomieq (v4sf, v4sf) 17386 int __builtin_ia32_ucomineq (v4sf, v4sf) 17387 int __builtin_ia32_ucomilt (v4sf, v4sf) 17388 int __builtin_ia32_ucomile (v4sf, v4sf) 17389 int __builtin_ia32_ucomigt (v4sf, v4sf) 17390 int __builtin_ia32_ucomige (v4sf, v4sf) 17391 v4sf __builtin_ia32_addps (v4sf, v4sf) 17392 v4sf __builtin_ia32_subps (v4sf, v4sf) 17393 v4sf __builtin_ia32_mulps (v4sf, v4sf) 17394 v4sf __builtin_ia32_divps (v4sf, v4sf) 17395 v4sf __builtin_ia32_addss (v4sf, v4sf) 17396 v4sf __builtin_ia32_subss (v4sf, v4sf) 17397 v4sf __builtin_ia32_mulss (v4sf, v4sf) 17398 v4sf __builtin_ia32_divss (v4sf, v4sf) 17399 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 17400 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 17401 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 17402 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 17403 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 17404 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 17405 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 17406 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 17407 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 17408 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 17409 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 17410 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 17411 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 17412 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 17413 v4si __builtin_ia32_cmpless (v4sf, v4sf) 17414 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 17415 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 17416 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 17417 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 17418 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 17419 v4sf __builtin_ia32_maxps (v4sf, v4sf) 17420 v4sf __builtin_ia32_maxss (v4sf, v4sf) 17421 v4sf __builtin_ia32_minps (v4sf, v4sf) 17422 v4sf __builtin_ia32_minss (v4sf, v4sf) 17423 v4sf __builtin_ia32_andps (v4sf, v4sf) 17424 v4sf __builtin_ia32_andnps (v4sf, v4sf) 17425 v4sf __builtin_ia32_orps (v4sf, v4sf) 17426 v4sf __builtin_ia32_xorps (v4sf, v4sf) 17427 v4sf __builtin_ia32_movss (v4sf, v4sf) 17428 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 17429 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 17430 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 17431 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 17432 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 17433 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 17434 v2si __builtin_ia32_cvtps2pi (v4sf) 17435 int __builtin_ia32_cvtss2si (v4sf) 17436 v2si __builtin_ia32_cvttps2pi (v4sf) 17437 int __builtin_ia32_cvttss2si (v4sf) 17438 v4sf __builtin_ia32_rcpps (v4sf) 17439 v4sf __builtin_ia32_rsqrtps (v4sf) 17440 v4sf __builtin_ia32_sqrtps (v4sf) 17441 v4sf __builtin_ia32_rcpss (v4sf) 17442 v4sf __builtin_ia32_rsqrtss (v4sf) 17443 v4sf __builtin_ia32_sqrtss (v4sf) 17444 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 17445 void __builtin_ia32_movntps (float *, v4sf) 17446 int __builtin_ia32_movmskps (v4sf) 17447 17448 The following built-in functions are available when `-msse' is used. 17449 17450`v4sf __builtin_ia32_loadaps (float *)' 17451 Generates the `movaps' machine instruction as a load from memory. 17452 17453`void __builtin_ia32_storeaps (float *, v4sf)' 17454 Generates the `movaps' machine instruction as a store to memory. 17455 17456`v4sf __builtin_ia32_loadups (float *)' 17457 Generates the `movups' machine instruction as a load from memory. 17458 17459`void __builtin_ia32_storeups (float *, v4sf)' 17460 Generates the `movups' machine instruction as a store to memory. 17461 17462`v4sf __builtin_ia32_loadsss (float *)' 17463 Generates the `movss' machine instruction as a load from memory. 17464 17465`void __builtin_ia32_storess (float *, v4sf)' 17466 Generates the `movss' machine instruction as a store to memory. 17467 17468`v4sf __builtin_ia32_loadhps (v4sf, v2si *)' 17469 Generates the `movhps' machine instruction as a load from memory. 17470 17471`v4sf __builtin_ia32_loadlps (v4sf, v2si *)' 17472 Generates the `movlps' machine instruction as a load from memory 17473 17474`void __builtin_ia32_storehps (v4sf, v2si *)' 17475 Generates the `movhps' machine instruction as a store to memory. 17476 17477`void __builtin_ia32_storelps (v4sf, v2si *)' 17478 Generates the `movlps' machine instruction as a store to memory. 17479 17480 The following built-in functions are available when `-msse3' is used. 17481All of them generate the machine instruction that is part of the name. 17482 17483 v2df __builtin_ia32_addsubpd (v2df, v2df) 17484 v2df __builtin_ia32_addsubps (v2df, v2df) 17485 v2df __builtin_ia32_haddpd (v2df, v2df) 17486 v2df __builtin_ia32_haddps (v2df, v2df) 17487 v2df __builtin_ia32_hsubpd (v2df, v2df) 17488 v2df __builtin_ia32_hsubps (v2df, v2df) 17489 v16qi __builtin_ia32_lddqu (char const *) 17490 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 17491 v2df __builtin_ia32_movddup (v2df) 17492 v4sf __builtin_ia32_movshdup (v4sf) 17493 v4sf __builtin_ia32_movsldup (v4sf) 17494 void __builtin_ia32_mwait (unsigned int, unsigned int) 17495 17496 The following built-in functions are available when `-msse3' is used. 17497 17498`v2df __builtin_ia32_loadddup (double const *)' 17499 Generates the `movddup' machine instruction as a load from memory. 17500 17501 The following built-in functions are available when `-m3dnow' is used. 17502All of them generate the machine instruction that is part of the name. 17503 17504 void __builtin_ia32_femms (void) 17505 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 17506 v2si __builtin_ia32_pf2id (v2sf) 17507 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 17508 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 17509 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 17510 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 17511 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 17512 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 17513 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 17514 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 17515 v2sf __builtin_ia32_pfrcp (v2sf) 17516 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 17517 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 17518 v2sf __builtin_ia32_pfrsqrt (v2sf) 17519 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 17520 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 17521 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 17522 v2sf __builtin_ia32_pi2fd (v2si) 17523 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 17524 17525 The following built-in functions are available when both `-m3dnow' and 17526`-march=athlon' are used. All of them generate the machine instruction 17527that is part of the name. 17528 17529 v2si __builtin_ia32_pf2iw (v2sf) 17530 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 17531 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 17532 v2sf __builtin_ia32_pi2fw (v2si) 17533 v2sf __builtin_ia32_pswapdsf (v2sf) 17534 v2si __builtin_ia32_pswapdsi (v2si) 17535 17536 17537File: gcc.info, Node: PowerPC AltiVec Built-in Functions, Prev: X86 Built-in Functions, Up: Target Builtins 17538 175395.45.4 PowerPC AltiVec Built-in Functions 17540----------------------------------------- 17541 17542GCC provides an interface for the PowerPC family of processors to access 17543the AltiVec operations described in Motorola's AltiVec Programming 17544Interface Manual. The interface is made available by including 17545`<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 17546supports the following vector types. 17547 17548 vector unsigned char 17549 vector signed char 17550 vector bool char 17551 17552 vector unsigned short 17553 vector signed short 17554 vector bool short 17555 vector pixel 17556 17557 vector unsigned int 17558 vector signed int 17559 vector bool int 17560 vector float 17561 17562 GCC's implementation of the high-level language interface available 17563from C and C++ code differs from Motorola's documentation in several 17564ways. 17565 17566 * A vector constant is a list of constant expressions within curly 17567 braces. 17568 17569 * A vector initializer requires no cast if the vector constant is of 17570 the same type as the variable it is initializing. 17571 17572 * If `signed' or `unsigned' is omitted, the vector type defaults to 17573 `signed' for `vector int' or `vector short' and to `unsigned' for 17574 `vector char'. 17575 17576 * Compiling with `-maltivec' adds keywords `__vector', `__pixel', 17577 and `__bool'. Macros `vector', `pixel', and `bool' are defined in 17578 `<altivec.h>' and can be undefined. 17579 17580 * GCC allows using a `typedef' name as the type specifier for a 17581 vector type. 17582 17583 * For C, overloaded functions are implemented with macros so the 17584 following does not work: 17585 17586 vec_add ((vector signed int){1, 2, 3, 4}, foo); 17587 17588 Since `vec_add' is a macro, the vector constant in the example is 17589 treated as four separate arguments. Wrap the entire argument in 17590 parentheses for this to work. 17591 17592 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 17593GCC uses built-in functions to achieve the functionality in the 17594aforementioned header file, but they are not supported and are subject 17595to change without notice. 17596 17597 The following interfaces are supported for the generic and specific 17598AltiVec operations and the AltiVec predicates. In cases where there is 17599a direct mapping between generic and specific operations, only the 17600generic names are shown here, although the specific operations can also 17601be used. 17602 17603 Arguments that are documented as `const int' require literal integral 17604values within the range required for that operation. 17605 17606 vector signed char vec_abs (vector signed char); 17607 vector signed short vec_abs (vector signed short); 17608 vector signed int vec_abs (vector signed int); 17609 vector float vec_abs (vector float); 17610 17611 vector signed char vec_abss (vector signed char); 17612 vector signed short vec_abss (vector signed short); 17613 vector signed int vec_abss (vector signed int); 17614 17615 vector signed char vec_add (vector bool char, vector signed char); 17616 vector signed char vec_add (vector signed char, vector bool char); 17617 vector signed char vec_add (vector signed char, vector signed char); 17618 vector unsigned char vec_add (vector bool char, vector unsigned char); 17619 vector unsigned char vec_add (vector unsigned char, vector bool char); 17620 vector unsigned char vec_add (vector unsigned char, 17621 vector unsigned char); 17622 vector signed short vec_add (vector bool short, vector signed short); 17623 vector signed short vec_add (vector signed short, vector bool short); 17624 vector signed short vec_add (vector signed short, vector signed short); 17625 vector unsigned short vec_add (vector bool short, 17626 vector unsigned short); 17627 vector unsigned short vec_add (vector unsigned short, 17628 vector bool short); 17629 vector unsigned short vec_add (vector unsigned short, 17630 vector unsigned short); 17631 vector signed int vec_add (vector bool int, vector signed int); 17632 vector signed int vec_add (vector signed int, vector bool int); 17633 vector signed int vec_add (vector signed int, vector signed int); 17634 vector unsigned int vec_add (vector bool int, vector unsigned int); 17635 vector unsigned int vec_add (vector unsigned int, vector bool int); 17636 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 17637 vector float vec_add (vector float, vector float); 17638 17639 vector float vec_vaddfp (vector float, vector float); 17640 17641 vector signed int vec_vadduwm (vector bool int, vector signed int); 17642 vector signed int vec_vadduwm (vector signed int, vector bool int); 17643 vector signed int vec_vadduwm (vector signed int, vector signed int); 17644 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 17645 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 17646 vector unsigned int vec_vadduwm (vector unsigned int, 17647 vector unsigned int); 17648 17649 vector signed short vec_vadduhm (vector bool short, 17650 vector signed short); 17651 vector signed short vec_vadduhm (vector signed short, 17652 vector bool short); 17653 vector signed short vec_vadduhm (vector signed short, 17654 vector signed short); 17655 vector unsigned short vec_vadduhm (vector bool short, 17656 vector unsigned short); 17657 vector unsigned short vec_vadduhm (vector unsigned short, 17658 vector bool short); 17659 vector unsigned short vec_vadduhm (vector unsigned short, 17660 vector unsigned short); 17661 17662 vector signed char vec_vaddubm (vector bool char, vector signed char); 17663 vector signed char vec_vaddubm (vector signed char, vector bool char); 17664 vector signed char vec_vaddubm (vector signed char, vector signed char); 17665 vector unsigned char vec_vaddubm (vector bool char, 17666 vector unsigned char); 17667 vector unsigned char vec_vaddubm (vector unsigned char, 17668 vector bool char); 17669 vector unsigned char vec_vaddubm (vector unsigned char, 17670 vector unsigned char); 17671 17672 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 17673 17674 vector unsigned char vec_adds (vector bool char, vector unsigned char); 17675 vector unsigned char vec_adds (vector unsigned char, vector bool char); 17676 vector unsigned char vec_adds (vector unsigned char, 17677 vector unsigned char); 17678 vector signed char vec_adds (vector bool char, vector signed char); 17679 vector signed char vec_adds (vector signed char, vector bool char); 17680 vector signed char vec_adds (vector signed char, vector signed char); 17681 vector unsigned short vec_adds (vector bool short, 17682 vector unsigned short); 17683 vector unsigned short vec_adds (vector unsigned short, 17684 vector bool short); 17685 vector unsigned short vec_adds (vector unsigned short, 17686 vector unsigned short); 17687 vector signed short vec_adds (vector bool short, vector signed short); 17688 vector signed short vec_adds (vector signed short, vector bool short); 17689 vector signed short vec_adds (vector signed short, vector signed short); 17690 vector unsigned int vec_adds (vector bool int, vector unsigned int); 17691 vector unsigned int vec_adds (vector unsigned int, vector bool int); 17692 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 17693 vector signed int vec_adds (vector bool int, vector signed int); 17694 vector signed int vec_adds (vector signed int, vector bool int); 17695 vector signed int vec_adds (vector signed int, vector signed int); 17696 17697 vector signed int vec_vaddsws (vector bool int, vector signed int); 17698 vector signed int vec_vaddsws (vector signed int, vector bool int); 17699 vector signed int vec_vaddsws (vector signed int, vector signed int); 17700 17701 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 17702 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 17703 vector unsigned int vec_vadduws (vector unsigned int, 17704 vector unsigned int); 17705 17706 vector signed short vec_vaddshs (vector bool short, 17707 vector signed short); 17708 vector signed short vec_vaddshs (vector signed short, 17709 vector bool short); 17710 vector signed short vec_vaddshs (vector signed short, 17711 vector signed short); 17712 17713 vector unsigned short vec_vadduhs (vector bool short, 17714 vector unsigned short); 17715 vector unsigned short vec_vadduhs (vector unsigned short, 17716 vector bool short); 17717 vector unsigned short vec_vadduhs (vector unsigned short, 17718 vector unsigned short); 17719 17720 vector signed char vec_vaddsbs (vector bool char, vector signed char); 17721 vector signed char vec_vaddsbs (vector signed char, vector bool char); 17722 vector signed char vec_vaddsbs (vector signed char, vector signed char); 17723 17724 vector unsigned char vec_vaddubs (vector bool char, 17725 vector unsigned char); 17726 vector unsigned char vec_vaddubs (vector unsigned char, 17727 vector bool char); 17728 vector unsigned char vec_vaddubs (vector unsigned char, 17729 vector unsigned char); 17730 17731 vector float vec_and (vector float, vector float); 17732 vector float vec_and (vector float, vector bool int); 17733 vector float vec_and (vector bool int, vector float); 17734 vector bool int vec_and (vector bool int, vector bool int); 17735 vector signed int vec_and (vector bool int, vector signed int); 17736 vector signed int vec_and (vector signed int, vector bool int); 17737 vector signed int vec_and (vector signed int, vector signed int); 17738 vector unsigned int vec_and (vector bool int, vector unsigned int); 17739 vector unsigned int vec_and (vector unsigned int, vector bool int); 17740 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 17741 vector bool short vec_and (vector bool short, vector bool short); 17742 vector signed short vec_and (vector bool short, vector signed short); 17743 vector signed short vec_and (vector signed short, vector bool short); 17744 vector signed short vec_and (vector signed short, vector signed short); 17745 vector unsigned short vec_and (vector bool short, 17746 vector unsigned short); 17747 vector unsigned short vec_and (vector unsigned short, 17748 vector bool short); 17749 vector unsigned short vec_and (vector unsigned short, 17750 vector unsigned short); 17751 vector signed char vec_and (vector bool char, vector signed char); 17752 vector bool char vec_and (vector bool char, vector bool char); 17753 vector signed char vec_and (vector signed char, vector bool char); 17754 vector signed char vec_and (vector signed char, vector signed char); 17755 vector unsigned char vec_and (vector bool char, vector unsigned char); 17756 vector unsigned char vec_and (vector unsigned char, vector bool char); 17757 vector unsigned char vec_and (vector unsigned char, 17758 vector unsigned char); 17759 17760 vector float vec_andc (vector float, vector float); 17761 vector float vec_andc (vector float, vector bool int); 17762 vector float vec_andc (vector bool int, vector float); 17763 vector bool int vec_andc (vector bool int, vector bool int); 17764 vector signed int vec_andc (vector bool int, vector signed int); 17765 vector signed int vec_andc (vector signed int, vector bool int); 17766 vector signed int vec_andc (vector signed int, vector signed int); 17767 vector unsigned int vec_andc (vector bool int, vector unsigned int); 17768 vector unsigned int vec_andc (vector unsigned int, vector bool int); 17769 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 17770 vector bool short vec_andc (vector bool short, vector bool short); 17771 vector signed short vec_andc (vector bool short, vector signed short); 17772 vector signed short vec_andc (vector signed short, vector bool short); 17773 vector signed short vec_andc (vector signed short, vector signed short); 17774 vector unsigned short vec_andc (vector bool short, 17775 vector unsigned short); 17776 vector unsigned short vec_andc (vector unsigned short, 17777 vector bool short); 17778 vector unsigned short vec_andc (vector unsigned short, 17779 vector unsigned short); 17780 vector signed char vec_andc (vector bool char, vector signed char); 17781 vector bool char vec_andc (vector bool char, vector bool char); 17782 vector signed char vec_andc (vector signed char, vector bool char); 17783 vector signed char vec_andc (vector signed char, vector signed char); 17784 vector unsigned char vec_andc (vector bool char, vector unsigned char); 17785 vector unsigned char vec_andc (vector unsigned char, vector bool char); 17786 vector unsigned char vec_andc (vector unsigned char, 17787 vector unsigned char); 17788 17789 vector unsigned char vec_avg (vector unsigned char, 17790 vector unsigned char); 17791 vector signed char vec_avg (vector signed char, vector signed char); 17792 vector unsigned short vec_avg (vector unsigned short, 17793 vector unsigned short); 17794 vector signed short vec_avg (vector signed short, vector signed short); 17795 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 17796 vector signed int vec_avg (vector signed int, vector signed int); 17797 17798 vector signed int vec_vavgsw (vector signed int, vector signed int); 17799 17800 vector unsigned int vec_vavguw (vector unsigned int, 17801 vector unsigned int); 17802 17803 vector signed short vec_vavgsh (vector signed short, 17804 vector signed short); 17805 17806 vector unsigned short vec_vavguh (vector unsigned short, 17807 vector unsigned short); 17808 17809 vector signed char vec_vavgsb (vector signed char, vector signed char); 17810 17811 vector unsigned char vec_vavgub (vector unsigned char, 17812 vector unsigned char); 17813 17814 vector float vec_ceil (vector float); 17815 17816 vector signed int vec_cmpb (vector float, vector float); 17817 17818 vector bool char vec_cmpeq (vector signed char, vector signed char); 17819 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 17820 vector bool short vec_cmpeq (vector signed short, vector signed short); 17821 vector bool short vec_cmpeq (vector unsigned short, 17822 vector unsigned short); 17823 vector bool int vec_cmpeq (vector signed int, vector signed int); 17824 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 17825 vector bool int vec_cmpeq (vector float, vector float); 17826 17827 vector bool int vec_vcmpeqfp (vector float, vector float); 17828 17829 vector bool int vec_vcmpequw (vector signed int, vector signed int); 17830 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 17831 17832 vector bool short vec_vcmpequh (vector signed short, 17833 vector signed short); 17834 vector bool short vec_vcmpequh (vector unsigned short, 17835 vector unsigned short); 17836 17837 vector bool char vec_vcmpequb (vector signed char, vector signed char); 17838 vector bool char vec_vcmpequb (vector unsigned char, 17839 vector unsigned char); 17840 17841 vector bool int vec_cmpge (vector float, vector float); 17842 17843 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 17844 vector bool char vec_cmpgt (vector signed char, vector signed char); 17845 vector bool short vec_cmpgt (vector unsigned short, 17846 vector unsigned short); 17847 vector bool short vec_cmpgt (vector signed short, vector signed short); 17848 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 17849 vector bool int vec_cmpgt (vector signed int, vector signed int); 17850 vector bool int vec_cmpgt (vector float, vector float); 17851 17852 vector bool int vec_vcmpgtfp (vector float, vector float); 17853 17854 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 17855 17856 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 17857 17858 vector bool short vec_vcmpgtsh (vector signed short, 17859 vector signed short); 17860 17861 vector bool short vec_vcmpgtuh (vector unsigned short, 17862 vector unsigned short); 17863 17864 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 17865 17866 vector bool char vec_vcmpgtub (vector unsigned char, 17867 vector unsigned char); 17868 17869 vector bool int vec_cmple (vector float, vector float); 17870 17871 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 17872 vector bool char vec_cmplt (vector signed char, vector signed char); 17873 vector bool short vec_cmplt (vector unsigned short, 17874 vector unsigned short); 17875 vector bool short vec_cmplt (vector signed short, vector signed short); 17876 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 17877 vector bool int vec_cmplt (vector signed int, vector signed int); 17878 vector bool int vec_cmplt (vector float, vector float); 17879 17880 vector float vec_ctf (vector unsigned int, const int); 17881 vector float vec_ctf (vector signed int, const int); 17882 17883 vector float vec_vcfsx (vector signed int, const int); 17884 17885 vector float vec_vcfux (vector unsigned int, const int); 17886 17887 vector signed int vec_cts (vector float, const int); 17888 17889 vector unsigned int vec_ctu (vector float, const int); 17890 17891 void vec_dss (const int); 17892 17893 void vec_dssall (void); 17894 17895 void vec_dst (const vector unsigned char *, int, const int); 17896 void vec_dst (const vector signed char *, int, const int); 17897 void vec_dst (const vector bool char *, int, const int); 17898 void vec_dst (const vector unsigned short *, int, const int); 17899 void vec_dst (const vector signed short *, int, const int); 17900 void vec_dst (const vector bool short *, int, const int); 17901 void vec_dst (const vector pixel *, int, const int); 17902 void vec_dst (const vector unsigned int *, int, const int); 17903 void vec_dst (const vector signed int *, int, const int); 17904 void vec_dst (const vector bool int *, int, const int); 17905 void vec_dst (const vector float *, int, const int); 17906 void vec_dst (const unsigned char *, int, const int); 17907 void vec_dst (const signed char *, int, const int); 17908 void vec_dst (const unsigned short *, int, const int); 17909 void vec_dst (const short *, int, const int); 17910 void vec_dst (const unsigned int *, int, const int); 17911 void vec_dst (const int *, int, const int); 17912 void vec_dst (const unsigned long *, int, const int); 17913 void vec_dst (const long *, int, const int); 17914 void vec_dst (const float *, int, const int); 17915 17916 void vec_dstst (const vector unsigned char *, int, const int); 17917 void vec_dstst (const vector signed char *, int, const int); 17918 void vec_dstst (const vector bool char *, int, const int); 17919 void vec_dstst (const vector unsigned short *, int, const int); 17920 void vec_dstst (const vector signed short *, int, const int); 17921 void vec_dstst (const vector bool short *, int, const int); 17922 void vec_dstst (const vector pixel *, int, const int); 17923 void vec_dstst (const vector unsigned int *, int, const int); 17924 void vec_dstst (const vector signed int *, int, const int); 17925 void vec_dstst (const vector bool int *, int, const int); 17926 void vec_dstst (const vector float *, int, const int); 17927 void vec_dstst (const unsigned char *, int, const int); 17928 void vec_dstst (const signed char *, int, const int); 17929 void vec_dstst (const unsigned short *, int, const int); 17930 void vec_dstst (const short *, int, const int); 17931 void vec_dstst (const unsigned int *, int, const int); 17932 void vec_dstst (const int *, int, const int); 17933 void vec_dstst (const unsigned long *, int, const int); 17934 void vec_dstst (const long *, int, const int); 17935 void vec_dstst (const float *, int, const int); 17936 17937 void vec_dststt (const vector unsigned char *, int, const int); 17938 void vec_dststt (const vector signed char *, int, const int); 17939 void vec_dststt (const vector bool char *, int, const int); 17940 void vec_dststt (const vector unsigned short *, int, const int); 17941 void vec_dststt (const vector signed short *, int, const int); 17942 void vec_dststt (const vector bool short *, int, const int); 17943 void vec_dststt (const vector pixel *, int, const int); 17944 void vec_dststt (const vector unsigned int *, int, const int); 17945 void vec_dststt (const vector signed int *, int, const int); 17946 void vec_dststt (const vector bool int *, int, const int); 17947 void vec_dststt (const vector float *, int, const int); 17948 void vec_dststt (const unsigned char *, int, const int); 17949 void vec_dststt (const signed char *, int, const int); 17950 void vec_dststt (const unsigned short *, int, const int); 17951 void vec_dststt (const short *, int, const int); 17952 void vec_dststt (const unsigned int *, int, const int); 17953 void vec_dststt (const int *, int, const int); 17954 void vec_dststt (const unsigned long *, int, const int); 17955 void vec_dststt (const long *, int, const int); 17956 void vec_dststt (const float *, int, const int); 17957 17958 void vec_dstt (const vector unsigned char *, int, const int); 17959 void vec_dstt (const vector signed char *, int, const int); 17960 void vec_dstt (const vector bool char *, int, const int); 17961 void vec_dstt (const vector unsigned short *, int, const int); 17962 void vec_dstt (const vector signed short *, int, const int); 17963 void vec_dstt (const vector bool short *, int, const int); 17964 void vec_dstt (const vector pixel *, int, const int); 17965 void vec_dstt (const vector unsigned int *, int, const int); 17966 void vec_dstt (const vector signed int *, int, const int); 17967 void vec_dstt (const vector bool int *, int, const int); 17968 void vec_dstt (const vector float *, int, const int); 17969 void vec_dstt (const unsigned char *, int, const int); 17970 void vec_dstt (const signed char *, int, const int); 17971 void vec_dstt (const unsigned short *, int, const int); 17972 void vec_dstt (const short *, int, const int); 17973 void vec_dstt (const unsigned int *, int, const int); 17974 void vec_dstt (const int *, int, const int); 17975 void vec_dstt (const unsigned long *, int, const int); 17976 void vec_dstt (const long *, int, const int); 17977 void vec_dstt (const float *, int, const int); 17978 17979 vector float vec_expte (vector float); 17980 17981 vector float vec_floor (vector float); 17982 17983 vector float vec_ld (int, const vector float *); 17984 vector float vec_ld (int, const float *); 17985 vector bool int vec_ld (int, const vector bool int *); 17986 vector signed int vec_ld (int, const vector signed int *); 17987 vector signed int vec_ld (int, const int *); 17988 vector signed int vec_ld (int, const long *); 17989 vector unsigned int vec_ld (int, const vector unsigned int *); 17990 vector unsigned int vec_ld (int, const unsigned int *); 17991 vector unsigned int vec_ld (int, const unsigned long *); 17992 vector bool short vec_ld (int, const vector bool short *); 17993 vector pixel vec_ld (int, const vector pixel *); 17994 vector signed short vec_ld (int, const vector signed short *); 17995 vector signed short vec_ld (int, const short *); 17996 vector unsigned short vec_ld (int, const vector unsigned short *); 17997 vector unsigned short vec_ld (int, const unsigned short *); 17998 vector bool char vec_ld (int, const vector bool char *); 17999 vector signed char vec_ld (int, const vector signed char *); 18000 vector signed char vec_ld (int, const signed char *); 18001 vector unsigned char vec_ld (int, const vector unsigned char *); 18002 vector unsigned char vec_ld (int, const unsigned char *); 18003 18004 vector signed char vec_lde (int, const signed char *); 18005 vector unsigned char vec_lde (int, const unsigned char *); 18006 vector signed short vec_lde (int, const short *); 18007 vector unsigned short vec_lde (int, const unsigned short *); 18008 vector float vec_lde (int, const float *); 18009 vector signed int vec_lde (int, const int *); 18010 vector unsigned int vec_lde (int, const unsigned int *); 18011 vector signed int vec_lde (int, const long *); 18012 vector unsigned int vec_lde (int, const unsigned long *); 18013 18014 vector float vec_lvewx (int, float *); 18015 vector signed int vec_lvewx (int, int *); 18016 vector unsigned int vec_lvewx (int, unsigned int *); 18017 vector signed int vec_lvewx (int, long *); 18018 vector unsigned int vec_lvewx (int, unsigned long *); 18019 18020 vector signed short vec_lvehx (int, short *); 18021 vector unsigned short vec_lvehx (int, unsigned short *); 18022 18023 vector signed char vec_lvebx (int, char *); 18024 vector unsigned char vec_lvebx (int, unsigned char *); 18025 18026 vector float vec_ldl (int, const vector float *); 18027 vector float vec_ldl (int, const float *); 18028 vector bool int vec_ldl (int, const vector bool int *); 18029 vector signed int vec_ldl (int, const vector signed int *); 18030 vector signed int vec_ldl (int, const int *); 18031 vector signed int vec_ldl (int, const long *); 18032 vector unsigned int vec_ldl (int, const vector unsigned int *); 18033 vector unsigned int vec_ldl (int, const unsigned int *); 18034 vector unsigned int vec_ldl (int, const unsigned long *); 18035 vector bool short vec_ldl (int, const vector bool short *); 18036 vector pixel vec_ldl (int, const vector pixel *); 18037 vector signed short vec_ldl (int, const vector signed short *); 18038 vector signed short vec_ldl (int, const short *); 18039 vector unsigned short vec_ldl (int, const vector unsigned short *); 18040 vector unsigned short vec_ldl (int, const unsigned short *); 18041 vector bool char vec_ldl (int, const vector bool char *); 18042 vector signed char vec_ldl (int, const vector signed char *); 18043 vector signed char vec_ldl (int, const signed char *); 18044 vector unsigned char vec_ldl (int, const vector unsigned char *); 18045 vector unsigned char vec_ldl (int, const unsigned char *); 18046 18047 vector float vec_loge (vector float); 18048 18049 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 18050 vector unsigned char vec_lvsl (int, const volatile signed char *); 18051 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 18052 vector unsigned char vec_lvsl (int, const volatile short *); 18053 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 18054 vector unsigned char vec_lvsl (int, const volatile int *); 18055 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 18056 vector unsigned char vec_lvsl (int, const volatile long *); 18057 vector unsigned char vec_lvsl (int, const volatile float *); 18058 18059 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 18060 vector unsigned char vec_lvsr (int, const volatile signed char *); 18061 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 18062 vector unsigned char vec_lvsr (int, const volatile short *); 18063 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 18064 vector unsigned char vec_lvsr (int, const volatile int *); 18065 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 18066 vector unsigned char vec_lvsr (int, const volatile long *); 18067 vector unsigned char vec_lvsr (int, const volatile float *); 18068 18069 vector float vec_madd (vector float, vector float, vector float); 18070 18071 vector signed short vec_madds (vector signed short, 18072 vector signed short, 18073 vector signed short); 18074 18075 vector unsigned char vec_max (vector bool char, vector unsigned char); 18076 vector unsigned char vec_max (vector unsigned char, vector bool char); 18077 vector unsigned char vec_max (vector unsigned char, 18078 vector unsigned char); 18079 vector signed char vec_max (vector bool char, vector signed char); 18080 vector signed char vec_max (vector signed char, vector bool char); 18081 vector signed char vec_max (vector signed char, vector signed char); 18082 vector unsigned short vec_max (vector bool short, 18083 vector unsigned short); 18084 vector unsigned short vec_max (vector unsigned short, 18085 vector bool short); 18086 vector unsigned short vec_max (vector unsigned short, 18087 vector unsigned short); 18088 vector signed short vec_max (vector bool short, vector signed short); 18089 vector signed short vec_max (vector signed short, vector bool short); 18090 vector signed short vec_max (vector signed short, vector signed short); 18091 vector unsigned int vec_max (vector bool int, vector unsigned int); 18092 vector unsigned int vec_max (vector unsigned int, vector bool int); 18093 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 18094 vector signed int vec_max (vector bool int, vector signed int); 18095 vector signed int vec_max (vector signed int, vector bool int); 18096 vector signed int vec_max (vector signed int, vector signed int); 18097 vector float vec_max (vector float, vector float); 18098 18099 vector float vec_vmaxfp (vector float, vector float); 18100 18101 vector signed int vec_vmaxsw (vector bool int, vector signed int); 18102 vector signed int vec_vmaxsw (vector signed int, vector bool int); 18103 vector signed int vec_vmaxsw (vector signed int, vector signed int); 18104 18105 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 18106 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 18107 vector unsigned int vec_vmaxuw (vector unsigned int, 18108 vector unsigned int); 18109 18110 vector signed short vec_vmaxsh (vector bool short, vector signed short); 18111 vector signed short vec_vmaxsh (vector signed short, vector bool short); 18112 vector signed short vec_vmaxsh (vector signed short, 18113 vector signed short); 18114 18115 vector unsigned short vec_vmaxuh (vector bool short, 18116 vector unsigned short); 18117 vector unsigned short vec_vmaxuh (vector unsigned short, 18118 vector bool short); 18119 vector unsigned short vec_vmaxuh (vector unsigned short, 18120 vector unsigned short); 18121 18122 vector signed char vec_vmaxsb (vector bool char, vector signed char); 18123 vector signed char vec_vmaxsb (vector signed char, vector bool char); 18124 vector signed char vec_vmaxsb (vector signed char, vector signed char); 18125 18126 vector unsigned char vec_vmaxub (vector bool char, 18127 vector unsigned char); 18128 vector unsigned char vec_vmaxub (vector unsigned char, 18129 vector bool char); 18130 vector unsigned char vec_vmaxub (vector unsigned char, 18131 vector unsigned char); 18132 18133 vector bool char vec_mergeh (vector bool char, vector bool char); 18134 vector signed char vec_mergeh (vector signed char, vector signed char); 18135 vector unsigned char vec_mergeh (vector unsigned char, 18136 vector unsigned char); 18137 vector bool short vec_mergeh (vector bool short, vector bool short); 18138 vector pixel vec_mergeh (vector pixel, vector pixel); 18139 vector signed short vec_mergeh (vector signed short, 18140 vector signed short); 18141 vector unsigned short vec_mergeh (vector unsigned short, 18142 vector unsigned short); 18143 vector float vec_mergeh (vector float, vector float); 18144 vector bool int vec_mergeh (vector bool int, vector bool int); 18145 vector signed int vec_mergeh (vector signed int, vector signed int); 18146 vector unsigned int vec_mergeh (vector unsigned int, 18147 vector unsigned int); 18148 18149 vector float vec_vmrghw (vector float, vector float); 18150 vector bool int vec_vmrghw (vector bool int, vector bool int); 18151 vector signed int vec_vmrghw (vector signed int, vector signed int); 18152 vector unsigned int vec_vmrghw (vector unsigned int, 18153 vector unsigned int); 18154 18155 vector bool short vec_vmrghh (vector bool short, vector bool short); 18156 vector signed short vec_vmrghh (vector signed short, 18157 vector signed short); 18158 vector unsigned short vec_vmrghh (vector unsigned short, 18159 vector unsigned short); 18160 vector pixel vec_vmrghh (vector pixel, vector pixel); 18161 18162 vector bool char vec_vmrghb (vector bool char, vector bool char); 18163 vector signed char vec_vmrghb (vector signed char, vector signed char); 18164 vector unsigned char vec_vmrghb (vector unsigned char, 18165 vector unsigned char); 18166 18167 vector bool char vec_mergel (vector bool char, vector bool char); 18168 vector signed char vec_mergel (vector signed char, vector signed char); 18169 vector unsigned char vec_mergel (vector unsigned char, 18170 vector unsigned char); 18171 vector bool short vec_mergel (vector bool short, vector bool short); 18172 vector pixel vec_mergel (vector pixel, vector pixel); 18173 vector signed short vec_mergel (vector signed short, 18174 vector signed short); 18175 vector unsigned short vec_mergel (vector unsigned short, 18176 vector unsigned short); 18177 vector float vec_mergel (vector float, vector float); 18178 vector bool int vec_mergel (vector bool int, vector bool int); 18179 vector signed int vec_mergel (vector signed int, vector signed int); 18180 vector unsigned int vec_mergel (vector unsigned int, 18181 vector unsigned int); 18182 18183 vector float vec_vmrglw (vector float, vector float); 18184 vector signed int vec_vmrglw (vector signed int, vector signed int); 18185 vector unsigned int vec_vmrglw (vector unsigned int, 18186 vector unsigned int); 18187 vector bool int vec_vmrglw (vector bool int, vector bool int); 18188 18189 vector bool short vec_vmrglh (vector bool short, vector bool short); 18190 vector signed short vec_vmrglh (vector signed short, 18191 vector signed short); 18192 vector unsigned short vec_vmrglh (vector unsigned short, 18193 vector unsigned short); 18194 vector pixel vec_vmrglh (vector pixel, vector pixel); 18195 18196 vector bool char vec_vmrglb (vector bool char, vector bool char); 18197 vector signed char vec_vmrglb (vector signed char, vector signed char); 18198 vector unsigned char vec_vmrglb (vector unsigned char, 18199 vector unsigned char); 18200 18201 vector unsigned short vec_mfvscr (void); 18202 18203 vector unsigned char vec_min (vector bool char, vector unsigned char); 18204 vector unsigned char vec_min (vector unsigned char, vector bool char); 18205 vector unsigned char vec_min (vector unsigned char, 18206 vector unsigned char); 18207 vector signed char vec_min (vector bool char, vector signed char); 18208 vector signed char vec_min (vector signed char, vector bool char); 18209 vector signed char vec_min (vector signed char, vector signed char); 18210 vector unsigned short vec_min (vector bool short, 18211 vector unsigned short); 18212 vector unsigned short vec_min (vector unsigned short, 18213 vector bool short); 18214 vector unsigned short vec_min (vector unsigned short, 18215 vector unsigned short); 18216 vector signed short vec_min (vector bool short, vector signed short); 18217 vector signed short vec_min (vector signed short, vector bool short); 18218 vector signed short vec_min (vector signed short, vector signed short); 18219 vector unsigned int vec_min (vector bool int, vector unsigned int); 18220 vector unsigned int vec_min (vector unsigned int, vector bool int); 18221 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 18222 vector signed int vec_min (vector bool int, vector signed int); 18223 vector signed int vec_min (vector signed int, vector bool int); 18224 vector signed int vec_min (vector signed int, vector signed int); 18225 vector float vec_min (vector float, vector float); 18226 18227 vector float vec_vminfp (vector float, vector float); 18228 18229 vector signed int vec_vminsw (vector bool int, vector signed int); 18230 vector signed int vec_vminsw (vector signed int, vector bool int); 18231 vector signed int vec_vminsw (vector signed int, vector signed int); 18232 18233 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 18234 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 18235 vector unsigned int vec_vminuw (vector unsigned int, 18236 vector unsigned int); 18237 18238 vector signed short vec_vminsh (vector bool short, vector signed short); 18239 vector signed short vec_vminsh (vector signed short, vector bool short); 18240 vector signed short vec_vminsh (vector signed short, 18241 vector signed short); 18242 18243 vector unsigned short vec_vminuh (vector bool short, 18244 vector unsigned short); 18245 vector unsigned short vec_vminuh (vector unsigned short, 18246 vector bool short); 18247 vector unsigned short vec_vminuh (vector unsigned short, 18248 vector unsigned short); 18249 18250 vector signed char vec_vminsb (vector bool char, vector signed char); 18251 vector signed char vec_vminsb (vector signed char, vector bool char); 18252 vector signed char vec_vminsb (vector signed char, vector signed char); 18253 18254 vector unsigned char vec_vminub (vector bool char, 18255 vector unsigned char); 18256 vector unsigned char vec_vminub (vector unsigned char, 18257 vector bool char); 18258 vector unsigned char vec_vminub (vector unsigned char, 18259 vector unsigned char); 18260 18261 vector signed short vec_mladd (vector signed short, 18262 vector signed short, 18263 vector signed short); 18264 vector signed short vec_mladd (vector signed short, 18265 vector unsigned short, 18266 vector unsigned short); 18267 vector signed short vec_mladd (vector unsigned short, 18268 vector signed short, 18269 vector signed short); 18270 vector unsigned short vec_mladd (vector unsigned short, 18271 vector unsigned short, 18272 vector unsigned short); 18273 18274 vector signed short vec_mradds (vector signed short, 18275 vector signed short, 18276 vector signed short); 18277 18278 vector unsigned int vec_msum (vector unsigned char, 18279 vector unsigned char, 18280 vector unsigned int); 18281 vector signed int vec_msum (vector signed char, 18282 vector unsigned char, 18283 vector signed int); 18284 vector unsigned int vec_msum (vector unsigned short, 18285 vector unsigned short, 18286 vector unsigned int); 18287 vector signed int vec_msum (vector signed short, 18288 vector signed short, 18289 vector signed int); 18290 18291 vector signed int vec_vmsumshm (vector signed short, 18292 vector signed short, 18293 vector signed int); 18294 18295 vector unsigned int vec_vmsumuhm (vector unsigned short, 18296 vector unsigned short, 18297 vector unsigned int); 18298 18299 vector signed int vec_vmsummbm (vector signed char, 18300 vector unsigned char, 18301 vector signed int); 18302 18303 vector unsigned int vec_vmsumubm (vector unsigned char, 18304 vector unsigned char, 18305 vector unsigned int); 18306 18307 vector unsigned int vec_msums (vector unsigned short, 18308 vector unsigned short, 18309 vector unsigned int); 18310 vector signed int vec_msums (vector signed short, 18311 vector signed short, 18312 vector signed int); 18313 18314 vector signed int vec_vmsumshs (vector signed short, 18315 vector signed short, 18316 vector signed int); 18317 18318 vector unsigned int vec_vmsumuhs (vector unsigned short, 18319 vector unsigned short, 18320 vector unsigned int); 18321 18322 void vec_mtvscr (vector signed int); 18323 void vec_mtvscr (vector unsigned int); 18324 void vec_mtvscr (vector bool int); 18325 void vec_mtvscr (vector signed short); 18326 void vec_mtvscr (vector unsigned short); 18327 void vec_mtvscr (vector bool short); 18328 void vec_mtvscr (vector pixel); 18329 void vec_mtvscr (vector signed char); 18330 void vec_mtvscr (vector unsigned char); 18331 void vec_mtvscr (vector bool char); 18332 18333 vector unsigned short vec_mule (vector unsigned char, 18334 vector unsigned char); 18335 vector signed short vec_mule (vector signed char, 18336 vector signed char); 18337 vector unsigned int vec_mule (vector unsigned short, 18338 vector unsigned short); 18339 vector signed int vec_mule (vector signed short, vector signed short); 18340 18341 vector signed int vec_vmulesh (vector signed short, 18342 vector signed short); 18343 18344 vector unsigned int vec_vmuleuh (vector unsigned short, 18345 vector unsigned short); 18346 18347 vector signed short vec_vmulesb (vector signed char, 18348 vector signed char); 18349 18350 vector unsigned short vec_vmuleub (vector unsigned char, 18351 vector unsigned char); 18352 18353 vector unsigned short vec_mulo (vector unsigned char, 18354 vector unsigned char); 18355 vector signed short vec_mulo (vector signed char, vector signed char); 18356 vector unsigned int vec_mulo (vector unsigned short, 18357 vector unsigned short); 18358 vector signed int vec_mulo (vector signed short, vector signed short); 18359 18360 vector signed int vec_vmulosh (vector signed short, 18361 vector signed short); 18362 18363 vector unsigned int vec_vmulouh (vector unsigned short, 18364 vector unsigned short); 18365 18366 vector signed short vec_vmulosb (vector signed char, 18367 vector signed char); 18368 18369 vector unsigned short vec_vmuloub (vector unsigned char, 18370 vector unsigned char); 18371 18372 vector float vec_nmsub (vector float, vector float, vector float); 18373 18374 vector float vec_nor (vector float, vector float); 18375 vector signed int vec_nor (vector signed int, vector signed int); 18376 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 18377 vector bool int vec_nor (vector bool int, vector bool int); 18378 vector signed short vec_nor (vector signed short, vector signed short); 18379 vector unsigned short vec_nor (vector unsigned short, 18380 vector unsigned short); 18381 vector bool short vec_nor (vector bool short, vector bool short); 18382 vector signed char vec_nor (vector signed char, vector signed char); 18383 vector unsigned char vec_nor (vector unsigned char, 18384 vector unsigned char); 18385 vector bool char vec_nor (vector bool char, vector bool char); 18386 18387 vector float vec_or (vector float, vector float); 18388 vector float vec_or (vector float, vector bool int); 18389 vector float vec_or (vector bool int, vector float); 18390 vector bool int vec_or (vector bool int, vector bool int); 18391 vector signed int vec_or (vector bool int, vector signed int); 18392 vector signed int vec_or (vector signed int, vector bool int); 18393 vector signed int vec_or (vector signed int, vector signed int); 18394 vector unsigned int vec_or (vector bool int, vector unsigned int); 18395 vector unsigned int vec_or (vector unsigned int, vector bool int); 18396 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 18397 vector bool short vec_or (vector bool short, vector bool short); 18398 vector signed short vec_or (vector bool short, vector signed short); 18399 vector signed short vec_or (vector signed short, vector bool short); 18400 vector signed short vec_or (vector signed short, vector signed short); 18401 vector unsigned short vec_or (vector bool short, vector unsigned short); 18402 vector unsigned short vec_or (vector unsigned short, vector bool short); 18403 vector unsigned short vec_or (vector unsigned short, 18404 vector unsigned short); 18405 vector signed char vec_or (vector bool char, vector signed char); 18406 vector bool char vec_or (vector bool char, vector bool char); 18407 vector signed char vec_or (vector signed char, vector bool char); 18408 vector signed char vec_or (vector signed char, vector signed char); 18409 vector unsigned char vec_or (vector bool char, vector unsigned char); 18410 vector unsigned char vec_or (vector unsigned char, vector bool char); 18411 vector unsigned char vec_or (vector unsigned char, 18412 vector unsigned char); 18413 18414 vector signed char vec_pack (vector signed short, vector signed short); 18415 vector unsigned char vec_pack (vector unsigned short, 18416 vector unsigned short); 18417 vector bool char vec_pack (vector bool short, vector bool short); 18418 vector signed short vec_pack (vector signed int, vector signed int); 18419 vector unsigned short vec_pack (vector unsigned int, 18420 vector unsigned int); 18421 vector bool short vec_pack (vector bool int, vector bool int); 18422 18423 vector bool short vec_vpkuwum (vector bool int, vector bool int); 18424 vector signed short vec_vpkuwum (vector signed int, vector signed int); 18425 vector unsigned short vec_vpkuwum (vector unsigned int, 18426 vector unsigned int); 18427 18428 vector bool char vec_vpkuhum (vector bool short, vector bool short); 18429 vector signed char vec_vpkuhum (vector signed short, 18430 vector signed short); 18431 vector unsigned char vec_vpkuhum (vector unsigned short, 18432 vector unsigned short); 18433 18434 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 18435 18436 vector unsigned char vec_packs (vector unsigned short, 18437 vector unsigned short); 18438 vector signed char vec_packs (vector signed short, vector signed short); 18439 vector unsigned short vec_packs (vector unsigned int, 18440 vector unsigned int); 18441 vector signed short vec_packs (vector signed int, vector signed int); 18442 18443 vector signed short vec_vpkswss (vector signed int, vector signed int); 18444 18445 vector unsigned short vec_vpkuwus (vector unsigned int, 18446 vector unsigned int); 18447 18448 vector signed char vec_vpkshss (vector signed short, 18449 vector signed short); 18450 18451 vector unsigned char vec_vpkuhus (vector unsigned short, 18452 vector unsigned short); 18453 18454 vector unsigned char vec_packsu (vector unsigned short, 18455 vector unsigned short); 18456 vector unsigned char vec_packsu (vector signed short, 18457 vector signed short); 18458 vector unsigned short vec_packsu (vector unsigned int, 18459 vector unsigned int); 18460 vector unsigned short vec_packsu (vector signed int, vector signed int); 18461 18462 vector unsigned short vec_vpkswus (vector signed int, 18463 vector signed int); 18464 18465 vector unsigned char vec_vpkshus (vector signed short, 18466 vector signed short); 18467 18468 vector float vec_perm (vector float, 18469 vector float, 18470 vector unsigned char); 18471 vector signed int vec_perm (vector signed int, 18472 vector signed int, 18473 vector unsigned char); 18474 vector unsigned int vec_perm (vector unsigned int, 18475 vector unsigned int, 18476 vector unsigned char); 18477 vector bool int vec_perm (vector bool int, 18478 vector bool int, 18479 vector unsigned char); 18480 vector signed short vec_perm (vector signed short, 18481 vector signed short, 18482 vector unsigned char); 18483 vector unsigned short vec_perm (vector unsigned short, 18484 vector unsigned short, 18485 vector unsigned char); 18486 vector bool short vec_perm (vector bool short, 18487 vector bool short, 18488 vector unsigned char); 18489 vector pixel vec_perm (vector pixel, 18490 vector pixel, 18491 vector unsigned char); 18492 vector signed char vec_perm (vector signed char, 18493 vector signed char, 18494 vector unsigned char); 18495 vector unsigned char vec_perm (vector unsigned char, 18496 vector unsigned char, 18497 vector unsigned char); 18498 vector bool char vec_perm (vector bool char, 18499 vector bool char, 18500 vector unsigned char); 18501 18502 vector float vec_re (vector float); 18503 18504 vector signed char vec_rl (vector signed char, 18505 vector unsigned char); 18506 vector unsigned char vec_rl (vector unsigned char, 18507 vector unsigned char); 18508 vector signed short vec_rl (vector signed short, vector unsigned short); 18509 vector unsigned short vec_rl (vector unsigned short, 18510 vector unsigned short); 18511 vector signed int vec_rl (vector signed int, vector unsigned int); 18512 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 18513 18514 vector signed int vec_vrlw (vector signed int, vector unsigned int); 18515 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 18516 18517 vector signed short vec_vrlh (vector signed short, 18518 vector unsigned short); 18519 vector unsigned short vec_vrlh (vector unsigned short, 18520 vector unsigned short); 18521 18522 vector signed char vec_vrlb (vector signed char, vector unsigned char); 18523 vector unsigned char vec_vrlb (vector unsigned char, 18524 vector unsigned char); 18525 18526 vector float vec_round (vector float); 18527 18528 vector float vec_rsqrte (vector float); 18529 18530 vector float vec_sel (vector float, vector float, vector bool int); 18531 vector float vec_sel (vector float, vector float, vector unsigned int); 18532 vector signed int vec_sel (vector signed int, 18533 vector signed int, 18534 vector bool int); 18535 vector signed int vec_sel (vector signed int, 18536 vector signed int, 18537 vector unsigned int); 18538 vector unsigned int vec_sel (vector unsigned int, 18539 vector unsigned int, 18540 vector bool int); 18541 vector unsigned int vec_sel (vector unsigned int, 18542 vector unsigned int, 18543 vector unsigned int); 18544 vector bool int vec_sel (vector bool int, 18545 vector bool int, 18546 vector bool int); 18547 vector bool int vec_sel (vector bool int, 18548 vector bool int, 18549 vector unsigned int); 18550 vector signed short vec_sel (vector signed short, 18551 vector signed short, 18552 vector bool short); 18553 vector signed short vec_sel (vector signed short, 18554 vector signed short, 18555 vector unsigned short); 18556 vector unsigned short vec_sel (vector unsigned short, 18557 vector unsigned short, 18558 vector bool short); 18559 vector unsigned short vec_sel (vector unsigned short, 18560 vector unsigned short, 18561 vector unsigned short); 18562 vector bool short vec_sel (vector bool short, 18563 vector bool short, 18564 vector bool short); 18565 vector bool short vec_sel (vector bool short, 18566 vector bool short, 18567 vector unsigned short); 18568 vector signed char vec_sel (vector signed char, 18569 vector signed char, 18570 vector bool char); 18571 vector signed char vec_sel (vector signed char, 18572 vector signed char, 18573 vector unsigned char); 18574 vector unsigned char vec_sel (vector unsigned char, 18575 vector unsigned char, 18576 vector bool char); 18577 vector unsigned char vec_sel (vector unsigned char, 18578 vector unsigned char, 18579 vector unsigned char); 18580 vector bool char vec_sel (vector bool char, 18581 vector bool char, 18582 vector bool char); 18583 vector bool char vec_sel (vector bool char, 18584 vector bool char, 18585 vector unsigned char); 18586 18587 vector signed char vec_sl (vector signed char, 18588 vector unsigned char); 18589 vector unsigned char vec_sl (vector unsigned char, 18590 vector unsigned char); 18591 vector signed short vec_sl (vector signed short, vector unsigned short); 18592 vector unsigned short vec_sl (vector unsigned short, 18593 vector unsigned short); 18594 vector signed int vec_sl (vector signed int, vector unsigned int); 18595 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 18596 18597 vector signed int vec_vslw (vector signed int, vector unsigned int); 18598 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 18599 18600 vector signed short vec_vslh (vector signed short, 18601 vector unsigned short); 18602 vector unsigned short vec_vslh (vector unsigned short, 18603 vector unsigned short); 18604 18605 vector signed char vec_vslb (vector signed char, vector unsigned char); 18606 vector unsigned char vec_vslb (vector unsigned char, 18607 vector unsigned char); 18608 18609 vector float vec_sld (vector float, vector float, const int); 18610 vector signed int vec_sld (vector signed int, 18611 vector signed int, 18612 const int); 18613 vector unsigned int vec_sld (vector unsigned int, 18614 vector unsigned int, 18615 const int); 18616 vector bool int vec_sld (vector bool int, 18617 vector bool int, 18618 const int); 18619 vector signed short vec_sld (vector signed short, 18620 vector signed short, 18621 const int); 18622 vector unsigned short vec_sld (vector unsigned short, 18623 vector unsigned short, 18624 const int); 18625 vector bool short vec_sld (vector bool short, 18626 vector bool short, 18627 const int); 18628 vector pixel vec_sld (vector pixel, 18629 vector pixel, 18630 const int); 18631 vector signed char vec_sld (vector signed char, 18632 vector signed char, 18633 const int); 18634 vector unsigned char vec_sld (vector unsigned char, 18635 vector unsigned char, 18636 const int); 18637 vector bool char vec_sld (vector bool char, 18638 vector bool char, 18639 const int); 18640 18641 vector signed int vec_sll (vector signed int, 18642 vector unsigned int); 18643 vector signed int vec_sll (vector signed int, 18644 vector unsigned short); 18645 vector signed int vec_sll (vector signed int, 18646 vector unsigned char); 18647 vector unsigned int vec_sll (vector unsigned int, 18648 vector unsigned int); 18649 vector unsigned int vec_sll (vector unsigned int, 18650 vector unsigned short); 18651 vector unsigned int vec_sll (vector unsigned int, 18652 vector unsigned char); 18653 vector bool int vec_sll (vector bool int, 18654 vector unsigned int); 18655 vector bool int vec_sll (vector bool int, 18656 vector unsigned short); 18657 vector bool int vec_sll (vector bool int, 18658 vector unsigned char); 18659 vector signed short vec_sll (vector signed short, 18660 vector unsigned int); 18661 vector signed short vec_sll (vector signed short, 18662 vector unsigned short); 18663 vector signed short vec_sll (vector signed short, 18664 vector unsigned char); 18665 vector unsigned short vec_sll (vector unsigned short, 18666 vector unsigned int); 18667 vector unsigned short vec_sll (vector unsigned short, 18668 vector unsigned short); 18669 vector unsigned short vec_sll (vector unsigned short, 18670 vector unsigned char); 18671 vector bool short vec_sll (vector bool short, vector unsigned int); 18672 vector bool short vec_sll (vector bool short, vector unsigned short); 18673 vector bool short vec_sll (vector bool short, vector unsigned char); 18674 vector pixel vec_sll (vector pixel, vector unsigned int); 18675 vector pixel vec_sll (vector pixel, vector unsigned short); 18676 vector pixel vec_sll (vector pixel, vector unsigned char); 18677 vector signed char vec_sll (vector signed char, vector unsigned int); 18678 vector signed char vec_sll (vector signed char, vector unsigned short); 18679 vector signed char vec_sll (vector signed char, vector unsigned char); 18680 vector unsigned char vec_sll (vector unsigned char, 18681 vector unsigned int); 18682 vector unsigned char vec_sll (vector unsigned char, 18683 vector unsigned short); 18684 vector unsigned char vec_sll (vector unsigned char, 18685 vector unsigned char); 18686 vector bool char vec_sll (vector bool char, vector unsigned int); 18687 vector bool char vec_sll (vector bool char, vector unsigned short); 18688 vector bool char vec_sll (vector bool char, vector unsigned char); 18689 18690 vector float vec_slo (vector float, vector signed char); 18691 vector float vec_slo (vector float, vector unsigned char); 18692 vector signed int vec_slo (vector signed int, vector signed char); 18693 vector signed int vec_slo (vector signed int, vector unsigned char); 18694 vector unsigned int vec_slo (vector unsigned int, vector signed char); 18695 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 18696 vector signed short vec_slo (vector signed short, vector signed char); 18697 vector signed short vec_slo (vector signed short, vector unsigned char); 18698 vector unsigned short vec_slo (vector unsigned short, 18699 vector signed char); 18700 vector unsigned short vec_slo (vector unsigned short, 18701 vector unsigned char); 18702 vector pixel vec_slo (vector pixel, vector signed char); 18703 vector pixel vec_slo (vector pixel, vector unsigned char); 18704 vector signed char vec_slo (vector signed char, vector signed char); 18705 vector signed char vec_slo (vector signed char, vector unsigned char); 18706 vector unsigned char vec_slo (vector unsigned char, vector signed char); 18707 vector unsigned char vec_slo (vector unsigned char, 18708 vector unsigned char); 18709 18710 vector signed char vec_splat (vector signed char, const int); 18711 vector unsigned char vec_splat (vector unsigned char, const int); 18712 vector bool char vec_splat (vector bool char, const int); 18713 vector signed short vec_splat (vector signed short, const int); 18714 vector unsigned short vec_splat (vector unsigned short, const int); 18715 vector bool short vec_splat (vector bool short, const int); 18716 vector pixel vec_splat (vector pixel, const int); 18717 vector float vec_splat (vector float, const int); 18718 vector signed int vec_splat (vector signed int, const int); 18719 vector unsigned int vec_splat (vector unsigned int, const int); 18720 vector bool int vec_splat (vector bool int, const int); 18721 18722 vector float vec_vspltw (vector float, const int); 18723 vector signed int vec_vspltw (vector signed int, const int); 18724 vector unsigned int vec_vspltw (vector unsigned int, const int); 18725 vector bool int vec_vspltw (vector bool int, const int); 18726 18727 vector bool short vec_vsplth (vector bool short, const int); 18728 vector signed short vec_vsplth (vector signed short, const int); 18729 vector unsigned short vec_vsplth (vector unsigned short, const int); 18730 vector pixel vec_vsplth (vector pixel, const int); 18731 18732 vector signed char vec_vspltb (vector signed char, const int); 18733 vector unsigned char vec_vspltb (vector unsigned char, const int); 18734 vector bool char vec_vspltb (vector bool char, const int); 18735 18736 vector signed char vec_splat_s8 (const int); 18737 18738 vector signed short vec_splat_s16 (const int); 18739 18740 vector signed int vec_splat_s32 (const int); 18741 18742 vector unsigned char vec_splat_u8 (const int); 18743 18744 vector unsigned short vec_splat_u16 (const int); 18745 18746 vector unsigned int vec_splat_u32 (const int); 18747 18748 vector signed char vec_sr (vector signed char, vector unsigned char); 18749 vector unsigned char vec_sr (vector unsigned char, 18750 vector unsigned char); 18751 vector signed short vec_sr (vector signed short, 18752 vector unsigned short); 18753 vector unsigned short vec_sr (vector unsigned short, 18754 vector unsigned short); 18755 vector signed int vec_sr (vector signed int, vector unsigned int); 18756 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 18757 18758 vector signed int vec_vsrw (vector signed int, vector unsigned int); 18759 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 18760 18761 vector signed short vec_vsrh (vector signed short, 18762 vector unsigned short); 18763 vector unsigned short vec_vsrh (vector unsigned short, 18764 vector unsigned short); 18765 18766 vector signed char vec_vsrb (vector signed char, vector unsigned char); 18767 vector unsigned char vec_vsrb (vector unsigned char, 18768 vector unsigned char); 18769 18770 vector signed char vec_sra (vector signed char, vector unsigned char); 18771 vector unsigned char vec_sra (vector unsigned char, 18772 vector unsigned char); 18773 vector signed short vec_sra (vector signed short, 18774 vector unsigned short); 18775 vector unsigned short vec_sra (vector unsigned short, 18776 vector unsigned short); 18777 vector signed int vec_sra (vector signed int, vector unsigned int); 18778 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 18779 18780 vector signed int vec_vsraw (vector signed int, vector unsigned int); 18781 vector unsigned int vec_vsraw (vector unsigned int, 18782 vector unsigned int); 18783 18784 vector signed short vec_vsrah (vector signed short, 18785 vector unsigned short); 18786 vector unsigned short vec_vsrah (vector unsigned short, 18787 vector unsigned short); 18788 18789 vector signed char vec_vsrab (vector signed char, vector unsigned char); 18790 vector unsigned char vec_vsrab (vector unsigned char, 18791 vector unsigned char); 18792 18793 vector signed int vec_srl (vector signed int, vector unsigned int); 18794 vector signed int vec_srl (vector signed int, vector unsigned short); 18795 vector signed int vec_srl (vector signed int, vector unsigned char); 18796 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 18797 vector unsigned int vec_srl (vector unsigned int, 18798 vector unsigned short); 18799 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 18800 vector bool int vec_srl (vector bool int, vector unsigned int); 18801 vector bool int vec_srl (vector bool int, vector unsigned short); 18802 vector bool int vec_srl (vector bool int, vector unsigned char); 18803 vector signed short vec_srl (vector signed short, vector unsigned int); 18804 vector signed short vec_srl (vector signed short, 18805 vector unsigned short); 18806 vector signed short vec_srl (vector signed short, vector unsigned char); 18807 vector unsigned short vec_srl (vector unsigned short, 18808 vector unsigned int); 18809 vector unsigned short vec_srl (vector unsigned short, 18810 vector unsigned short); 18811 vector unsigned short vec_srl (vector unsigned short, 18812 vector unsigned char); 18813 vector bool short vec_srl (vector bool short, vector unsigned int); 18814 vector bool short vec_srl (vector bool short, vector unsigned short); 18815 vector bool short vec_srl (vector bool short, vector unsigned char); 18816 vector pixel vec_srl (vector pixel, vector unsigned int); 18817 vector pixel vec_srl (vector pixel, vector unsigned short); 18818 vector pixel vec_srl (vector pixel, vector unsigned char); 18819 vector signed char vec_srl (vector signed char, vector unsigned int); 18820 vector signed char vec_srl (vector signed char, vector unsigned short); 18821 vector signed char vec_srl (vector signed char, vector unsigned char); 18822 vector unsigned char vec_srl (vector unsigned char, 18823 vector unsigned int); 18824 vector unsigned char vec_srl (vector unsigned char, 18825 vector unsigned short); 18826 vector unsigned char vec_srl (vector unsigned char, 18827 vector unsigned char); 18828 vector bool char vec_srl (vector bool char, vector unsigned int); 18829 vector bool char vec_srl (vector bool char, vector unsigned short); 18830 vector bool char vec_srl (vector bool char, vector unsigned char); 18831 18832 vector float vec_sro (vector float, vector signed char); 18833 vector float vec_sro (vector float, vector unsigned char); 18834 vector signed int vec_sro (vector signed int, vector signed char); 18835 vector signed int vec_sro (vector signed int, vector unsigned char); 18836 vector unsigned int vec_sro (vector unsigned int, vector signed char); 18837 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 18838 vector signed short vec_sro (vector signed short, vector signed char); 18839 vector signed short vec_sro (vector signed short, vector unsigned char); 18840 vector unsigned short vec_sro (vector unsigned short, 18841 vector signed char); 18842 vector unsigned short vec_sro (vector unsigned short, 18843 vector unsigned char); 18844 vector pixel vec_sro (vector pixel, vector signed char); 18845 vector pixel vec_sro (vector pixel, vector unsigned char); 18846 vector signed char vec_sro (vector signed char, vector signed char); 18847 vector signed char vec_sro (vector signed char, vector unsigned char); 18848 vector unsigned char vec_sro (vector unsigned char, vector signed char); 18849 vector unsigned char vec_sro (vector unsigned char, 18850 vector unsigned char); 18851 18852 void vec_st (vector float, int, vector float *); 18853 void vec_st (vector float, int, float *); 18854 void vec_st (vector signed int, int, vector signed int *); 18855 void vec_st (vector signed int, int, int *); 18856 void vec_st (vector unsigned int, int, vector unsigned int *); 18857 void vec_st (vector unsigned int, int, unsigned int *); 18858 void vec_st (vector bool int, int, vector bool int *); 18859 void vec_st (vector bool int, int, unsigned int *); 18860 void vec_st (vector bool int, int, int *); 18861 void vec_st (vector signed short, int, vector signed short *); 18862 void vec_st (vector signed short, int, short *); 18863 void vec_st (vector unsigned short, int, vector unsigned short *); 18864 void vec_st (vector unsigned short, int, unsigned short *); 18865 void vec_st (vector bool short, int, vector bool short *); 18866 void vec_st (vector bool short, int, unsigned short *); 18867 void vec_st (vector pixel, int, vector pixel *); 18868 void vec_st (vector pixel, int, unsigned short *); 18869 void vec_st (vector pixel, int, short *); 18870 void vec_st (vector bool short, int, short *); 18871 void vec_st (vector signed char, int, vector signed char *); 18872 void vec_st (vector signed char, int, signed char *); 18873 void vec_st (vector unsigned char, int, vector unsigned char *); 18874 void vec_st (vector unsigned char, int, unsigned char *); 18875 void vec_st (vector bool char, int, vector bool char *); 18876 void vec_st (vector bool char, int, unsigned char *); 18877 void vec_st (vector bool char, int, signed char *); 18878 18879 void vec_ste (vector signed char, int, signed char *); 18880 void vec_ste (vector unsigned char, int, unsigned char *); 18881 void vec_ste (vector bool char, int, signed char *); 18882 void vec_ste (vector bool char, int, unsigned char *); 18883 void vec_ste (vector signed short, int, short *); 18884 void vec_ste (vector unsigned short, int, unsigned short *); 18885 void vec_ste (vector bool short, int, short *); 18886 void vec_ste (vector bool short, int, unsigned short *); 18887 void vec_ste (vector pixel, int, short *); 18888 void vec_ste (vector pixel, int, unsigned short *); 18889 void vec_ste (vector float, int, float *); 18890 void vec_ste (vector signed int, int, int *); 18891 void vec_ste (vector unsigned int, int, unsigned int *); 18892 void vec_ste (vector bool int, int, int *); 18893 void vec_ste (vector bool int, int, unsigned int *); 18894 18895 void vec_stvewx (vector float, int, float *); 18896 void vec_stvewx (vector signed int, int, int *); 18897 void vec_stvewx (vector unsigned int, int, unsigned int *); 18898 void vec_stvewx (vector bool int, int, int *); 18899 void vec_stvewx (vector bool int, int, unsigned int *); 18900 18901 void vec_stvehx (vector signed short, int, short *); 18902 void vec_stvehx (vector unsigned short, int, unsigned short *); 18903 void vec_stvehx (vector bool short, int, short *); 18904 void vec_stvehx (vector bool short, int, unsigned short *); 18905 void vec_stvehx (vector pixel, int, short *); 18906 void vec_stvehx (vector pixel, int, unsigned short *); 18907 18908 void vec_stvebx (vector signed char, int, signed char *); 18909 void vec_stvebx (vector unsigned char, int, unsigned char *); 18910 void vec_stvebx (vector bool char, int, signed char *); 18911 void vec_stvebx (vector bool char, int, unsigned char *); 18912 18913 void vec_stl (vector float, int, vector float *); 18914 void vec_stl (vector float, int, float *); 18915 void vec_stl (vector signed int, int, vector signed int *); 18916 void vec_stl (vector signed int, int, int *); 18917 void vec_stl (vector unsigned int, int, vector unsigned int *); 18918 void vec_stl (vector unsigned int, int, unsigned int *); 18919 void vec_stl (vector bool int, int, vector bool int *); 18920 void vec_stl (vector bool int, int, unsigned int *); 18921 void vec_stl (vector bool int, int, int *); 18922 void vec_stl (vector signed short, int, vector signed short *); 18923 void vec_stl (vector signed short, int, short *); 18924 void vec_stl (vector unsigned short, int, vector unsigned short *); 18925 void vec_stl (vector unsigned short, int, unsigned short *); 18926 void vec_stl (vector bool short, int, vector bool short *); 18927 void vec_stl (vector bool short, int, unsigned short *); 18928 void vec_stl (vector bool short, int, short *); 18929 void vec_stl (vector pixel, int, vector pixel *); 18930 void vec_stl (vector pixel, int, unsigned short *); 18931 void vec_stl (vector pixel, int, short *); 18932 void vec_stl (vector signed char, int, vector signed char *); 18933 void vec_stl (vector signed char, int, signed char *); 18934 void vec_stl (vector unsigned char, int, vector unsigned char *); 18935 void vec_stl (vector unsigned char, int, unsigned char *); 18936 void vec_stl (vector bool char, int, vector bool char *); 18937 void vec_stl (vector bool char, int, unsigned char *); 18938 void vec_stl (vector bool char, int, signed char *); 18939 18940 vector signed char vec_sub (vector bool char, vector signed char); 18941 vector signed char vec_sub (vector signed char, vector bool char); 18942 vector signed char vec_sub (vector signed char, vector signed char); 18943 vector unsigned char vec_sub (vector bool char, vector unsigned char); 18944 vector unsigned char vec_sub (vector unsigned char, vector bool char); 18945 vector unsigned char vec_sub (vector unsigned char, 18946 vector unsigned char); 18947 vector signed short vec_sub (vector bool short, vector signed short); 18948 vector signed short vec_sub (vector signed short, vector bool short); 18949 vector signed short vec_sub (vector signed short, vector signed short); 18950 vector unsigned short vec_sub (vector bool short, 18951 vector unsigned short); 18952 vector unsigned short vec_sub (vector unsigned short, 18953 vector bool short); 18954 vector unsigned short vec_sub (vector unsigned short, 18955 vector unsigned short); 18956 vector signed int vec_sub (vector bool int, vector signed int); 18957 vector signed int vec_sub (vector signed int, vector bool int); 18958 vector signed int vec_sub (vector signed int, vector signed int); 18959 vector unsigned int vec_sub (vector bool int, vector unsigned int); 18960 vector unsigned int vec_sub (vector unsigned int, vector bool int); 18961 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 18962 vector float vec_sub (vector float, vector float); 18963 18964 vector float vec_vsubfp (vector float, vector float); 18965 18966 vector signed int vec_vsubuwm (vector bool int, vector signed int); 18967 vector signed int vec_vsubuwm (vector signed int, vector bool int); 18968 vector signed int vec_vsubuwm (vector signed int, vector signed int); 18969 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 18970 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 18971 vector unsigned int vec_vsubuwm (vector unsigned int, 18972 vector unsigned int); 18973 18974 vector signed short vec_vsubuhm (vector bool short, 18975 vector signed short); 18976 vector signed short vec_vsubuhm (vector signed short, 18977 vector bool short); 18978 vector signed short vec_vsubuhm (vector signed short, 18979 vector signed short); 18980 vector unsigned short vec_vsubuhm (vector bool short, 18981 vector unsigned short); 18982 vector unsigned short vec_vsubuhm (vector unsigned short, 18983 vector bool short); 18984 vector unsigned short vec_vsubuhm (vector unsigned short, 18985 vector unsigned short); 18986 18987 vector signed char vec_vsububm (vector bool char, vector signed char); 18988 vector signed char vec_vsububm (vector signed char, vector bool char); 18989 vector signed char vec_vsububm (vector signed char, vector signed char); 18990 vector unsigned char vec_vsububm (vector bool char, 18991 vector unsigned char); 18992 vector unsigned char vec_vsububm (vector unsigned char, 18993 vector bool char); 18994 vector unsigned char vec_vsububm (vector unsigned char, 18995 vector unsigned char); 18996 18997 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 18998 18999 vector unsigned char vec_subs (vector bool char, vector unsigned char); 19000 vector unsigned char vec_subs (vector unsigned char, vector bool char); 19001 vector unsigned char vec_subs (vector unsigned char, 19002 vector unsigned char); 19003 vector signed char vec_subs (vector bool char, vector signed char); 19004 vector signed char vec_subs (vector signed char, vector bool char); 19005 vector signed char vec_subs (vector signed char, vector signed char); 19006 vector unsigned short vec_subs (vector bool short, 19007 vector unsigned short); 19008 vector unsigned short vec_subs (vector unsigned short, 19009 vector bool short); 19010 vector unsigned short vec_subs (vector unsigned short, 19011 vector unsigned short); 19012 vector signed short vec_subs (vector bool short, vector signed short); 19013 vector signed short vec_subs (vector signed short, vector bool short); 19014 vector signed short vec_subs (vector signed short, vector signed short); 19015 vector unsigned int vec_subs (vector bool int, vector unsigned int); 19016 vector unsigned int vec_subs (vector unsigned int, vector bool int); 19017 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 19018 vector signed int vec_subs (vector bool int, vector signed int); 19019 vector signed int vec_subs (vector signed int, vector bool int); 19020 vector signed int vec_subs (vector signed int, vector signed int); 19021 19022 vector signed int vec_vsubsws (vector bool int, vector signed int); 19023 vector signed int vec_vsubsws (vector signed int, vector bool int); 19024 vector signed int vec_vsubsws (vector signed int, vector signed int); 19025 19026 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 19027 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 19028 vector unsigned int vec_vsubuws (vector unsigned int, 19029 vector unsigned int); 19030 19031 vector signed short vec_vsubshs (vector bool short, 19032 vector signed short); 19033 vector signed short vec_vsubshs (vector signed short, 19034 vector bool short); 19035 vector signed short vec_vsubshs (vector signed short, 19036 vector signed short); 19037 19038 vector unsigned short vec_vsubuhs (vector bool short, 19039 vector unsigned short); 19040 vector unsigned short vec_vsubuhs (vector unsigned short, 19041 vector bool short); 19042 vector unsigned short vec_vsubuhs (vector unsigned short, 19043 vector unsigned short); 19044 19045 vector signed char vec_vsubsbs (vector bool char, vector signed char); 19046 vector signed char vec_vsubsbs (vector signed char, vector bool char); 19047 vector signed char vec_vsubsbs (vector signed char, vector signed char); 19048 19049 vector unsigned char vec_vsububs (vector bool char, 19050 vector unsigned char); 19051 vector unsigned char vec_vsububs (vector unsigned char, 19052 vector bool char); 19053 vector unsigned char vec_vsububs (vector unsigned char, 19054 vector unsigned char); 19055 19056 vector unsigned int vec_sum4s (vector unsigned char, 19057 vector unsigned int); 19058 vector signed int vec_sum4s (vector signed char, vector signed int); 19059 vector signed int vec_sum4s (vector signed short, vector signed int); 19060 19061 vector signed int vec_vsum4shs (vector signed short, vector signed int); 19062 19063 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 19064 19065 vector unsigned int vec_vsum4ubs (vector unsigned char, 19066 vector unsigned int); 19067 19068 vector signed int vec_sum2s (vector signed int, vector signed int); 19069 19070 vector signed int vec_sums (vector signed int, vector signed int); 19071 19072 vector float vec_trunc (vector float); 19073 19074 vector signed short vec_unpackh (vector signed char); 19075 vector bool short vec_unpackh (vector bool char); 19076 vector signed int vec_unpackh (vector signed short); 19077 vector bool int vec_unpackh (vector bool short); 19078 vector unsigned int vec_unpackh (vector pixel); 19079 19080 vector bool int vec_vupkhsh (vector bool short); 19081 vector signed int vec_vupkhsh (vector signed short); 19082 19083 vector unsigned int vec_vupkhpx (vector pixel); 19084 19085 vector bool short vec_vupkhsb (vector bool char); 19086 vector signed short vec_vupkhsb (vector signed char); 19087 19088 vector signed short vec_unpackl (vector signed char); 19089 vector bool short vec_unpackl (vector bool char); 19090 vector unsigned int vec_unpackl (vector pixel); 19091 vector signed int vec_unpackl (vector signed short); 19092 vector bool int vec_unpackl (vector bool short); 19093 19094 vector unsigned int vec_vupklpx (vector pixel); 19095 19096 vector bool int vec_vupklsh (vector bool short); 19097 vector signed int vec_vupklsh (vector signed short); 19098 19099 vector bool short vec_vupklsb (vector bool char); 19100 vector signed short vec_vupklsb (vector signed char); 19101 19102 vector float vec_xor (vector float, vector float); 19103 vector float vec_xor (vector float, vector bool int); 19104 vector float vec_xor (vector bool int, vector float); 19105 vector bool int vec_xor (vector bool int, vector bool int); 19106 vector signed int vec_xor (vector bool int, vector signed int); 19107 vector signed int vec_xor (vector signed int, vector bool int); 19108 vector signed int vec_xor (vector signed int, vector signed int); 19109 vector unsigned int vec_xor (vector bool int, vector unsigned int); 19110 vector unsigned int vec_xor (vector unsigned int, vector bool int); 19111 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 19112 vector bool short vec_xor (vector bool short, vector bool short); 19113 vector signed short vec_xor (vector bool short, vector signed short); 19114 vector signed short vec_xor (vector signed short, vector bool short); 19115 vector signed short vec_xor (vector signed short, vector signed short); 19116 vector unsigned short vec_xor (vector bool short, 19117 vector unsigned short); 19118 vector unsigned short vec_xor (vector unsigned short, 19119 vector bool short); 19120 vector unsigned short vec_xor (vector unsigned short, 19121 vector unsigned short); 19122 vector signed char vec_xor (vector bool char, vector signed char); 19123 vector bool char vec_xor (vector bool char, vector bool char); 19124 vector signed char vec_xor (vector signed char, vector bool char); 19125 vector signed char vec_xor (vector signed char, vector signed char); 19126 vector unsigned char vec_xor (vector bool char, vector unsigned char); 19127 vector unsigned char vec_xor (vector unsigned char, vector bool char); 19128 vector unsigned char vec_xor (vector unsigned char, 19129 vector unsigned char); 19130 19131 int vec_all_eq (vector signed char, vector bool char); 19132 int vec_all_eq (vector signed char, vector signed char); 19133 int vec_all_eq (vector unsigned char, vector bool char); 19134 int vec_all_eq (vector unsigned char, vector unsigned char); 19135 int vec_all_eq (vector bool char, vector bool char); 19136 int vec_all_eq (vector bool char, vector unsigned char); 19137 int vec_all_eq (vector bool char, vector signed char); 19138 int vec_all_eq (vector signed short, vector bool short); 19139 int vec_all_eq (vector signed short, vector signed short); 19140 int vec_all_eq (vector unsigned short, vector bool short); 19141 int vec_all_eq (vector unsigned short, vector unsigned short); 19142 int vec_all_eq (vector bool short, vector bool short); 19143 int vec_all_eq (vector bool short, vector unsigned short); 19144 int vec_all_eq (vector bool short, vector signed short); 19145 int vec_all_eq (vector pixel, vector pixel); 19146 int vec_all_eq (vector signed int, vector bool int); 19147 int vec_all_eq (vector signed int, vector signed int); 19148 int vec_all_eq (vector unsigned int, vector bool int); 19149 int vec_all_eq (vector unsigned int, vector unsigned int); 19150 int vec_all_eq (vector bool int, vector bool int); 19151 int vec_all_eq (vector bool int, vector unsigned int); 19152 int vec_all_eq (vector bool int, vector signed int); 19153 int vec_all_eq (vector float, vector float); 19154 19155 int vec_all_ge (vector bool char, vector unsigned char); 19156 int vec_all_ge (vector unsigned char, vector bool char); 19157 int vec_all_ge (vector unsigned char, vector unsigned char); 19158 int vec_all_ge (vector bool char, vector signed char); 19159 int vec_all_ge (vector signed char, vector bool char); 19160 int vec_all_ge (vector signed char, vector signed char); 19161 int vec_all_ge (vector bool short, vector unsigned short); 19162 int vec_all_ge (vector unsigned short, vector bool short); 19163 int vec_all_ge (vector unsigned short, vector unsigned short); 19164 int vec_all_ge (vector signed short, vector signed short); 19165 int vec_all_ge (vector bool short, vector signed short); 19166 int vec_all_ge (vector signed short, vector bool short); 19167 int vec_all_ge (vector bool int, vector unsigned int); 19168 int vec_all_ge (vector unsigned int, vector bool int); 19169 int vec_all_ge (vector unsigned int, vector unsigned int); 19170 int vec_all_ge (vector bool int, vector signed int); 19171 int vec_all_ge (vector signed int, vector bool int); 19172 int vec_all_ge (vector signed int, vector signed int); 19173 int vec_all_ge (vector float, vector float); 19174 19175 int vec_all_gt (vector bool char, vector unsigned char); 19176 int vec_all_gt (vector unsigned char, vector bool char); 19177 int vec_all_gt (vector unsigned char, vector unsigned char); 19178 int vec_all_gt (vector bool char, vector signed char); 19179 int vec_all_gt (vector signed char, vector bool char); 19180 int vec_all_gt (vector signed char, vector signed char); 19181 int vec_all_gt (vector bool short, vector unsigned short); 19182 int vec_all_gt (vector unsigned short, vector bool short); 19183 int vec_all_gt (vector unsigned short, vector unsigned short); 19184 int vec_all_gt (vector bool short, vector signed short); 19185 int vec_all_gt (vector signed short, vector bool short); 19186 int vec_all_gt (vector signed short, vector signed short); 19187 int vec_all_gt (vector bool int, vector unsigned int); 19188 int vec_all_gt (vector unsigned int, vector bool int); 19189 int vec_all_gt (vector unsigned int, vector unsigned int); 19190 int vec_all_gt (vector bool int, vector signed int); 19191 int vec_all_gt (vector signed int, vector bool int); 19192 int vec_all_gt (vector signed int, vector signed int); 19193 int vec_all_gt (vector float, vector float); 19194 19195 int vec_all_in (vector float, vector float); 19196 19197 int vec_all_le (vector bool char, vector unsigned char); 19198 int vec_all_le (vector unsigned char, vector bool char); 19199 int vec_all_le (vector unsigned char, vector unsigned char); 19200 int vec_all_le (vector bool char, vector signed char); 19201 int vec_all_le (vector signed char, vector bool char); 19202 int vec_all_le (vector signed char, vector signed char); 19203 int vec_all_le (vector bool short, vector unsigned short); 19204 int vec_all_le (vector unsigned short, vector bool short); 19205 int vec_all_le (vector unsigned short, vector unsigned short); 19206 int vec_all_le (vector bool short, vector signed short); 19207 int vec_all_le (vector signed short, vector bool short); 19208 int vec_all_le (vector signed short, vector signed short); 19209 int vec_all_le (vector bool int, vector unsigned int); 19210 int vec_all_le (vector unsigned int, vector bool int); 19211 int vec_all_le (vector unsigned int, vector unsigned int); 19212 int vec_all_le (vector bool int, vector signed int); 19213 int vec_all_le (vector signed int, vector bool int); 19214 int vec_all_le (vector signed int, vector signed int); 19215 int vec_all_le (vector float, vector float); 19216 19217 int vec_all_lt (vector bool char, vector unsigned char); 19218 int vec_all_lt (vector unsigned char, vector bool char); 19219 int vec_all_lt (vector unsigned char, vector unsigned char); 19220 int vec_all_lt (vector bool char, vector signed char); 19221 int vec_all_lt (vector signed char, vector bool char); 19222 int vec_all_lt (vector signed char, vector signed char); 19223 int vec_all_lt (vector bool short, vector unsigned short); 19224 int vec_all_lt (vector unsigned short, vector bool short); 19225 int vec_all_lt (vector unsigned short, vector unsigned short); 19226 int vec_all_lt (vector bool short, vector signed short); 19227 int vec_all_lt (vector signed short, vector bool short); 19228 int vec_all_lt (vector signed short, vector signed short); 19229 int vec_all_lt (vector bool int, vector unsigned int); 19230 int vec_all_lt (vector unsigned int, vector bool int); 19231 int vec_all_lt (vector unsigned int, vector unsigned int); 19232 int vec_all_lt (vector bool int, vector signed int); 19233 int vec_all_lt (vector signed int, vector bool int); 19234 int vec_all_lt (vector signed int, vector signed int); 19235 int vec_all_lt (vector float, vector float); 19236 19237 int vec_all_nan (vector float); 19238 19239 int vec_all_ne (vector signed char, vector bool char); 19240 int vec_all_ne (vector signed char, vector signed char); 19241 int vec_all_ne (vector unsigned char, vector bool char); 19242 int vec_all_ne (vector unsigned char, vector unsigned char); 19243 int vec_all_ne (vector bool char, vector bool char); 19244 int vec_all_ne (vector bool char, vector unsigned char); 19245 int vec_all_ne (vector bool char, vector signed char); 19246 int vec_all_ne (vector signed short, vector bool short); 19247 int vec_all_ne (vector signed short, vector signed short); 19248 int vec_all_ne (vector unsigned short, vector bool short); 19249 int vec_all_ne (vector unsigned short, vector unsigned short); 19250 int vec_all_ne (vector bool short, vector bool short); 19251 int vec_all_ne (vector bool short, vector unsigned short); 19252 int vec_all_ne (vector bool short, vector signed short); 19253 int vec_all_ne (vector pixel, vector pixel); 19254 int vec_all_ne (vector signed int, vector bool int); 19255 int vec_all_ne (vector signed int, vector signed int); 19256 int vec_all_ne (vector unsigned int, vector bool int); 19257 int vec_all_ne (vector unsigned int, vector unsigned int); 19258 int vec_all_ne (vector bool int, vector bool int); 19259 int vec_all_ne (vector bool int, vector unsigned int); 19260 int vec_all_ne (vector bool int, vector signed int); 19261 int vec_all_ne (vector float, vector float); 19262 19263 int vec_all_nge (vector float, vector float); 19264 19265 int vec_all_ngt (vector float, vector float); 19266 19267 int vec_all_nle (vector float, vector float); 19268 19269 int vec_all_nlt (vector float, vector float); 19270 19271 int vec_all_numeric (vector float); 19272 19273 int vec_any_eq (vector signed char, vector bool char); 19274 int vec_any_eq (vector signed char, vector signed char); 19275 int vec_any_eq (vector unsigned char, vector bool char); 19276 int vec_any_eq (vector unsigned char, vector unsigned char); 19277 int vec_any_eq (vector bool char, vector bool char); 19278 int vec_any_eq (vector bool char, vector unsigned char); 19279 int vec_any_eq (vector bool char, vector signed char); 19280 int vec_any_eq (vector signed short, vector bool short); 19281 int vec_any_eq (vector signed short, vector signed short); 19282 int vec_any_eq (vector unsigned short, vector bool short); 19283 int vec_any_eq (vector unsigned short, vector unsigned short); 19284 int vec_any_eq (vector bool short, vector bool short); 19285 int vec_any_eq (vector bool short, vector unsigned short); 19286 int vec_any_eq (vector bool short, vector signed short); 19287 int vec_any_eq (vector pixel, vector pixel); 19288 int vec_any_eq (vector signed int, vector bool int); 19289 int vec_any_eq (vector signed int, vector signed int); 19290 int vec_any_eq (vector unsigned int, vector bool int); 19291 int vec_any_eq (vector unsigned int, vector unsigned int); 19292 int vec_any_eq (vector bool int, vector bool int); 19293 int vec_any_eq (vector bool int, vector unsigned int); 19294 int vec_any_eq (vector bool int, vector signed int); 19295 int vec_any_eq (vector float, vector float); 19296 19297 int vec_any_ge (vector signed char, vector bool char); 19298 int vec_any_ge (vector unsigned char, vector bool char); 19299 int vec_any_ge (vector unsigned char, vector unsigned char); 19300 int vec_any_ge (vector signed char, vector signed char); 19301 int vec_any_ge (vector bool char, vector unsigned char); 19302 int vec_any_ge (vector bool char, vector signed char); 19303 int vec_any_ge (vector unsigned short, vector bool short); 19304 int vec_any_ge (vector unsigned short, vector unsigned short); 19305 int vec_any_ge (vector signed short, vector signed short); 19306 int vec_any_ge (vector signed short, vector bool short); 19307 int vec_any_ge (vector bool short, vector unsigned short); 19308 int vec_any_ge (vector bool short, vector signed short); 19309 int vec_any_ge (vector signed int, vector bool int); 19310 int vec_any_ge (vector unsigned int, vector bool int); 19311 int vec_any_ge (vector unsigned int, vector unsigned int); 19312 int vec_any_ge (vector signed int, vector signed int); 19313 int vec_any_ge (vector bool int, vector unsigned int); 19314 int vec_any_ge (vector bool int, vector signed int); 19315 int vec_any_ge (vector float, vector float); 19316 19317 int vec_any_gt (vector bool char, vector unsigned char); 19318 int vec_any_gt (vector unsigned char, vector bool char); 19319 int vec_any_gt (vector unsigned char, vector unsigned char); 19320 int vec_any_gt (vector bool char, vector signed char); 19321 int vec_any_gt (vector signed char, vector bool char); 19322 int vec_any_gt (vector signed char, vector signed char); 19323 int vec_any_gt (vector bool short, vector unsigned short); 19324 int vec_any_gt (vector unsigned short, vector bool short); 19325 int vec_any_gt (vector unsigned short, vector unsigned short); 19326 int vec_any_gt (vector bool short, vector signed short); 19327 int vec_any_gt (vector signed short, vector bool short); 19328 int vec_any_gt (vector signed short, vector signed short); 19329 int vec_any_gt (vector bool int, vector unsigned int); 19330 int vec_any_gt (vector unsigned int, vector bool int); 19331 int vec_any_gt (vector unsigned int, vector unsigned int); 19332 int vec_any_gt (vector bool int, vector signed int); 19333 int vec_any_gt (vector signed int, vector bool int); 19334 int vec_any_gt (vector signed int, vector signed int); 19335 int vec_any_gt (vector float, vector float); 19336 19337 int vec_any_le (vector bool char, vector unsigned char); 19338 int vec_any_le (vector unsigned char, vector bool char); 19339 int vec_any_le (vector unsigned char, vector unsigned char); 19340 int vec_any_le (vector bool char, vector signed char); 19341 int vec_any_le (vector signed char, vector bool char); 19342 int vec_any_le (vector signed char, vector signed char); 19343 int vec_any_le (vector bool short, vector unsigned short); 19344 int vec_any_le (vector unsigned short, vector bool short); 19345 int vec_any_le (vector unsigned short, vector unsigned short); 19346 int vec_any_le (vector bool short, vector signed short); 19347 int vec_any_le (vector signed short, vector bool short); 19348 int vec_any_le (vector signed short, vector signed short); 19349 int vec_any_le (vector bool int, vector unsigned int); 19350 int vec_any_le (vector unsigned int, vector bool int); 19351 int vec_any_le (vector unsigned int, vector unsigned int); 19352 int vec_any_le (vector bool int, vector signed int); 19353 int vec_any_le (vector signed int, vector bool int); 19354 int vec_any_le (vector signed int, vector signed int); 19355 int vec_any_le (vector float, vector float); 19356 19357 int vec_any_lt (vector bool char, vector unsigned char); 19358 int vec_any_lt (vector unsigned char, vector bool char); 19359 int vec_any_lt (vector unsigned char, vector unsigned char); 19360 int vec_any_lt (vector bool char, vector signed char); 19361 int vec_any_lt (vector signed char, vector bool char); 19362 int vec_any_lt (vector signed char, vector signed char); 19363 int vec_any_lt (vector bool short, vector unsigned short); 19364 int vec_any_lt (vector unsigned short, vector bool short); 19365 int vec_any_lt (vector unsigned short, vector unsigned short); 19366 int vec_any_lt (vector bool short, vector signed short); 19367 int vec_any_lt (vector signed short, vector bool short); 19368 int vec_any_lt (vector signed short, vector signed short); 19369 int vec_any_lt (vector bool int, vector unsigned int); 19370 int vec_any_lt (vector unsigned int, vector bool int); 19371 int vec_any_lt (vector unsigned int, vector unsigned int); 19372 int vec_any_lt (vector bool int, vector signed int); 19373 int vec_any_lt (vector signed int, vector bool int); 19374 int vec_any_lt (vector signed int, vector signed int); 19375 int vec_any_lt (vector float, vector float); 19376 19377 int vec_any_nan (vector float); 19378 19379 int vec_any_ne (vector signed char, vector bool char); 19380 int vec_any_ne (vector signed char, vector signed char); 19381 int vec_any_ne (vector unsigned char, vector bool char); 19382 int vec_any_ne (vector unsigned char, vector unsigned char); 19383 int vec_any_ne (vector bool char, vector bool char); 19384 int vec_any_ne (vector bool char, vector unsigned char); 19385 int vec_any_ne (vector bool char, vector signed char); 19386 int vec_any_ne (vector signed short, vector bool short); 19387 int vec_any_ne (vector signed short, vector signed short); 19388 int vec_any_ne (vector unsigned short, vector bool short); 19389 int vec_any_ne (vector unsigned short, vector unsigned short); 19390 int vec_any_ne (vector bool short, vector bool short); 19391 int vec_any_ne (vector bool short, vector unsigned short); 19392 int vec_any_ne (vector bool short, vector signed short); 19393 int vec_any_ne (vector pixel, vector pixel); 19394 int vec_any_ne (vector signed int, vector bool int); 19395 int vec_any_ne (vector signed int, vector signed int); 19396 int vec_any_ne (vector unsigned int, vector bool int); 19397 int vec_any_ne (vector unsigned int, vector unsigned int); 19398 int vec_any_ne (vector bool int, vector bool int); 19399 int vec_any_ne (vector bool int, vector unsigned int); 19400 int vec_any_ne (vector bool int, vector signed int); 19401 int vec_any_ne (vector float, vector float); 19402 19403 int vec_any_nge (vector float, vector float); 19404 19405 int vec_any_ngt (vector float, vector float); 19406 19407 int vec_any_nle (vector float, vector float); 19408 19409 int vec_any_nlt (vector float, vector float); 19410 19411 int vec_any_numeric (vector float); 19412 19413 int vec_any_out (vector float, vector float); 19414 19415 19416File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Builtins, Up: C Extensions 19417 194185.46 Pragmas Accepted by GCC 19419============================ 19420 19421GCC supports several types of pragmas, primarily in order to compile 19422code originally written for other compilers. Note that in general we 19423do not recommend the use of pragmas; *Note Function Attributes::, for 19424further explanation. 19425 19426* Menu: 19427 19428* ARM Pragmas:: 19429* RS/6000 and PowerPC Pragmas:: 19430* Darwin Pragmas:: 19431* Solaris Pragmas:: 19432* Tru64 Pragmas:: 19433 19434 19435File: gcc.info, Node: ARM Pragmas, Next: RS/6000 and PowerPC Pragmas, Up: Pragmas 19436 194375.46.1 ARM Pragmas 19438------------------ 19439 19440The ARM target defines pragmas for controlling the default addition of 19441`long_call' and `short_call' attributes to functions. *Note Function 19442Attributes::, for information about the effects of these attributes. 19443 19444`long_calls' 19445 Set all subsequent functions to have the `long_call' attribute. 19446 19447`no_long_calls' 19448 Set all subsequent functions to have the `short_call' attribute. 19449 19450`long_calls_off' 19451 Do not affect the `long_call' or `short_call' attributes of 19452 subsequent functions. 19453 19454 19455File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: ARM Pragmas, Up: Pragmas 19456 194575.46.2 RS/6000 and PowerPC Pragmas 19458---------------------------------- 19459 19460The RS/6000 and PowerPC targets define one pragma for controlling 19461whether or not the `longcall' attribute is added to function 19462declarations by default. This pragma overrides the `-mlongcall' 19463option, but not the `longcall' and `shortcall' attributes. *Note 19464RS/6000 and PowerPC Options::, for more information about when long 19465calls are and are not necessary. 19466 19467`longcall (1)' 19468 Apply the `longcall' attribute to all subsequent function 19469 declarations. 19470 19471`longcall (0)' 19472 Do not apply the `longcall' attribute to subsequent function 19473 declarations. 19474 19475 19476File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 19477 194785.46.3 Darwin Pragmas 19479--------------------- 19480 19481The following pragmas are available for all architectures running the 19482Darwin operating system. These are useful for compatibility with other 19483Mac OS compilers. 19484 19485`mark TOKENS...' 19486 This pragma is accepted, but has no effect. 19487 19488`options align=ALIGNMENT' 19489 This pragma sets the alignment of fields in structures. The 19490 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 19491 `power', to emulate PowerPC alignment. Uses of this pragma nest 19492 properly; to restore the previous setting, use `reset' for the 19493 ALIGNMENT. 19494 19495`segment TOKENS...' 19496 This pragma is accepted, but has no effect. 19497 19498`unused (VAR [, VAR]...)' 19499 This pragma declares variables to be possibly unused. GCC will not 19500 produce warnings for the listed variables. The effect is similar 19501 to that of the `unused' attribute, except that this pragma may 19502 appear anywhere within the variables' scopes. 19503 19504 19505File: gcc.info, Node: Solaris Pragmas, Next: Tru64 Pragmas, Prev: Darwin Pragmas, Up: Pragmas 19506 195075.46.4 Solaris Pragmas 19508---------------------- 19509 19510For compatibility with the SunPRO compiler, the following pragma is 19511supported. 19512 19513`redefine_extname OLDNAME NEWNAME' 19514 This pragma gives the C function OLDNAME the assembler label 19515 NEWNAME. The pragma must appear before the function declaration. 19516 This pragma is equivalent to the asm labels extension (*note Asm 19517 Labels::). The preprocessor defines `__PRAGMA_REDEFINE_EXTNAME' 19518 if the pragma is available. 19519 19520 19521File: gcc.info, Node: Tru64 Pragmas, Prev: Solaris Pragmas, Up: Pragmas 19522 195235.46.5 Tru64 Pragmas 19524-------------------- 19525 19526For compatibility with the Compaq C compiler, the following pragma is 19527supported. 19528 19529`extern_prefix STRING' 19530 This pragma renames all subsequent function and variable 19531 declarations such that STRING is prepended to the name. This 19532 effect may be terminated by using another `extern_prefix' pragma 19533 with the empty string. 19534 19535 This pragma is similar in intent to to the asm labels extension 19536 (*note Asm Labels::) in that the system programmer wants to change 19537 the assembly-level ABI without changing the source-level API. The 19538 preprocessor defines `__PRAGMA_EXTERN_PREFIX' if the pragma is 19539 available. 19540 19541 19542File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 19543 195445.47 Unnamed struct/union fields within structs/unions. 19545======================================================= 19546 19547For compatibility with other compilers, GCC allows you to define a 19548structure or union that contains, as fields, structures and unions 19549without names. For example: 19550 19551 struct { 19552 int a; 19553 union { 19554 int b; 19555 float c; 19556 }; 19557 int d; 19558 } foo; 19559 19560 In this example, the user would be able to access members of the 19561unnamed union with code like `foo.b'. Note that only unnamed structs 19562and unions are allowed, you may not have, for example, an unnamed `int'. 19563 19564 You must never create such structures that cause ambiguous field 19565definitions. For example, this structure: 19566 19567 struct { 19568 int a; 19569 struct { 19570 int a; 19571 }; 19572 } foo; 19573 19574 It is ambiguous which `a' is being referred to with `foo.a'. Such 19575constructs are not supported and must be avoided. In the future, such 19576constructs may be detected and treated as compilation errors. 19577 19578 19579File: gcc.info, Node: Thread-Local, Prev: Unnamed Fields, Up: C Extensions 19580 195815.48 Thread-Local Storage 19582========================= 19583 19584Thread-local storage (TLS) is a mechanism by which variables are 19585allocated such that there is one instance of the variable per extant 19586thread. The run-time model GCC uses to implement this originates in 19587the IA-64 processor-specific ABI, but has since been migrated to other 19588processors as well. It requires significant support from the linker 19589(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 19590`libpthread.so'), so it is not available everywhere. 19591 19592 At the user level, the extension is visible with a new storage class 19593keyword: `__thread'. For example: 19594 19595 __thread int i; 19596 extern __thread struct state s; 19597 static __thread char *p; 19598 19599 The `__thread' specifier may be used alone, with the `extern' or 19600`static' specifiers, but with no other storage class specifier. When 19601used with `extern' or `static', `__thread' must appear immediately 19602after the other storage class specifier. 19603 19604 The `__thread' specifier may be applied to any global, file-scoped 19605static, function-scoped static, or static data member of a class. It 19606may not be applied to block-scoped automatic or non-static data member. 19607 19608 When the address-of operator is applied to a thread-local variable, it 19609is evaluated at run-time and returns the address of the current thread's 19610instance of that variable. An address so obtained may be used by any 19611thread. When a thread terminates, any pointers to thread-local 19612variables in that thread become invalid. 19613 19614 No static initialization may refer to the address of a thread-local 19615variable. 19616 19617 In C++, if an initializer is present for a thread-local variable, it 19618must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 19619standard. 19620 19621 See ELF Handling For Thread-Local Storage 19622(http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of 19623the four thread-local storage addressing models, and how the run-time 19624is expected to function. 19625 19626* Menu: 19627 19628* C99 Thread-Local Edits:: 19629* C++98 Thread-Local Edits:: 19630 19631 19632File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 19633 196345.48.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 19635------------------------------------------------------- 19636 19637The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 19638document the exact semantics of the language extension. 19639 19640 * `5.1.2 Execution environments' 19641 19642 Add new text after paragraph 1 19643 19644 Within either execution environment, a "thread" is a flow of 19645 control within a program. It is implementation defined 19646 whether or not there may be more than one thread associated 19647 with a program. It is implementation defined how threads 19648 beyond the first are created, the name and type of the 19649 function called at thread startup, and how threads may be 19650 terminated. However, objects with thread storage duration 19651 shall be initialized before thread startup. 19652 19653 * `6.2.4 Storage durations of objects' 19654 19655 Add new text before paragraph 3 19656 19657 An object whose identifier is declared with the storage-class 19658 specifier `__thread' has "thread storage duration". Its 19659 lifetime is the entire execution of the thread, and its 19660 stored value is initialized only once, prior to thread 19661 startup. 19662 19663 * `6.4.1 Keywords' 19664 19665 Add `__thread'. 19666 19667 * `6.7.1 Storage-class specifiers' 19668 19669 Add `__thread' to the list of storage class specifiers in 19670 paragraph 1. 19671 19672 Change paragraph 2 to 19673 19674 With the exception of `__thread', at most one storage-class 19675 specifier may be given [...]. The `__thread' specifier may 19676 be used alone, or immediately following `extern' or `static'. 19677 19678 Add new text after paragraph 6 19679 19680 The declaration of an identifier for a variable that has 19681 block scope that specifies `__thread' shall also specify 19682 either `extern' or `static'. 19683 19684 The `__thread' specifier shall be used only with variables. 19685 19686 19687File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 19688 196895.48.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 19690-------------------------------------------------------- 19691 19692The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 19693that document the exact semantics of the language extension. 19694 19695 * [intro.execution] 19696 19697 New text after paragraph 4 19698 19699 A "thread" is a flow of control within the abstract machine. 19700 It is implementation defined whether or not there may be more 19701 than one thread. 19702 19703 New text after paragraph 7 19704 19705 It is unspecified whether additional action must be taken to 19706 ensure when and whether side effects are visible to other 19707 threads. 19708 19709 * [lex.key] 19710 19711 Add `__thread'. 19712 19713 * [basic.start.main] 19714 19715 Add after paragraph 5 19716 19717 The thread that begins execution at the `main' function is 19718 called the "main thread". It is implementation defined how 19719 functions beginning threads other than the main thread are 19720 designated or typed. A function so designated, as well as 19721 the `main' function, is called a "thread startup function". 19722 It is implementation defined what happens if a thread startup 19723 function returns. It is implementation defined what happens 19724 to other threads when any thread calls `exit'. 19725 19726 * [basic.start.init] 19727 19728 Add after paragraph 4 19729 19730 The storage for an object of thread storage duration shall be 19731 statically initialized before the first statement of the 19732 thread startup function. An object of thread storage 19733 duration shall not require dynamic initialization. 19734 19735 * [basic.start.term] 19736 19737 Add after paragraph 3 19738 19739 The type of an object with thread storage duration shall not 19740 have a non-trivial destructor, nor shall it be an array type 19741 whose elements (directly or indirectly) have non-trivial 19742 destructors. 19743 19744 * [basic.stc] 19745 19746 Add "thread storage duration" to the list in paragraph 1. 19747 19748 Change paragraph 2 19749 19750 Thread, static, and automatic storage durations are 19751 associated with objects introduced by declarations [...]. 19752 19753 Add `__thread' to the list of specifiers in paragraph 3. 19754 19755 * [basic.stc.thread] 19756 19757 New section before [basic.stc.static] 19758 19759 The keyword `__thread' applied to a non-local object gives the 19760 object thread storage duration. 19761 19762 A local variable or class data member declared both `static' 19763 and `__thread' gives the variable or member thread storage 19764 duration. 19765 19766 * [basic.stc.static] 19767 19768 Change paragraph 1 19769 19770 All objects which have neither thread storage duration, 19771 dynamic storage duration nor are local [...]. 19772 19773 * [dcl.stc] 19774 19775 Add `__thread' to the list in paragraph 1. 19776 19777 Change paragraph 1 19778 19779 With the exception of `__thread', at most one 19780 STORAGE-CLASS-SPECIFIER shall appear in a given 19781 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 19782 alone, or immediately following the `extern' or `static' 19783 specifiers. [...] 19784 19785 Add after paragraph 5 19786 19787 The `__thread' specifier can be applied only to the names of 19788 objects and to anonymous unions. 19789 19790 * [class.mem] 19791 19792 Add after paragraph 6 19793 19794 Non-`static' members shall not be `__thread'. 19795 19796 19797File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 19798 197996 Extensions to the C++ Language 19800******************************** 19801 19802The GNU compiler provides these extensions to the C++ language (and you 19803can also use most of the C language extensions in your C++ programs). 19804If you want to write code that checks whether these features are 19805available, you can test for the GNU compiler the same way as for C 19806programs: check for a predefined macro `__GNUC__'. You can also use 19807`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 19808(cpp)Common Predefined Macros.). 19809 19810* Menu: 19811 19812* Min and Max:: C++ Minimum and maximum operators. 19813* Volatiles:: What constitutes an access to a volatile object. 19814* Restricted Pointers:: C99 restricted pointers and references. 19815* Vague Linkage:: Where G++ puts inlines, vtables and such. 19816* C++ Interface:: You can use a single C++ header file for both 19817 declarations and definitions. 19818* Template Instantiation:: Methods for ensuring that exactly one copy of 19819 each needed template instantiation is emitted. 19820* Bound member functions:: You can extract a function pointer to the 19821 method denoted by a `->*' or `.*' expression. 19822* C++ Attributes:: Variable, function, and type attributes for C++ only. 19823* Strong Using:: Strong using-directives for namespace composition. 19824* Offsetof:: Special syntax for implementing `offsetof'. 19825* Java Exceptions:: Tweaking exception handling to work with Java. 19826* Deprecated Features:: Things will disappear from g++. 19827* Backwards Compatibility:: Compatibilities with earlier definitions of C++. 19828 19829 19830File: gcc.info, Node: Min and Max, Next: Volatiles, Up: C++ Extensions 19831 198326.1 Minimum and Maximum Operators in C++ 19833======================================== 19834 19835It is very convenient to have operators which return the "minimum" or 19836the "maximum" of two arguments. In GNU C++ (but not in GNU C), 19837 19838`A <? B' 19839 is the "minimum", returning the smaller of the numeric values A 19840 and B; 19841 19842`A >? B' 19843 is the "maximum", returning the larger of the numeric values A and 19844 B. 19845 19846 These operations are not primitive in ordinary C++, since you can use 19847a macro to return the minimum of two things in C++, as in the following 19848example. 19849 19850 #define MIN(X,Y) ((X) < (Y) ? : (X) : (Y)) 19851 19852You might then use `int min = MIN (i, j);' to set MIN to the minimum 19853value of variables I and J. 19854 19855 However, side effects in `X' or `Y' may cause unintended behavior. 19856For example, `MIN (i++, j++)' will fail, incrementing the smaller 19857counter twice. The GNU C `typeof' extension allows you to write safe 19858macros that avoid this kind of problem (*note Typeof::). However, 19859writing `MIN' and `MAX' as macros also forces you to use function-call 19860notation for a fundamental arithmetic operation. Using GNU C++ 19861extensions, you can write `int min = i <? j;' instead. 19862 19863 Since `<?' and `>?' are built into the compiler, they properly handle 19864expressions with side-effects; `int min = i++ <? j++;' works correctly. 19865 19866 19867File: gcc.info, Node: Volatiles, Next: Restricted Pointers, Prev: Min and Max, Up: C++ Extensions 19868 198696.2 When is a Volatile Object Accessed? 19870======================================= 19871 19872Both the C and C++ standard have the concept of volatile objects. These 19873are normally accessed by pointers and used for accessing hardware. The 19874standards encourage compilers to refrain from optimizations concerning 19875accesses to volatile objects that it might perform on non-volatile 19876objects. The C standard leaves it implementation defined as to what 19877constitutes a volatile access. The C++ standard omits to specify this, 19878except to say that C++ should behave in a similar manner to C with 19879respect to volatiles, where possible. The minimum either standard 19880specifies is that at a sequence point all previous accesses to volatile 19881objects have stabilized and no subsequent accesses have occurred. Thus 19882an implementation is free to reorder and combine volatile accesses 19883which occur between sequence points, but cannot do so for accesses 19884across a sequence point. The use of volatiles does not allow you to 19885violate the restriction on updating objects multiple times within a 19886sequence point. 19887 19888 In most expressions, it is intuitively obvious what is a read and what 19889is a write. For instance 19890 19891 volatile int *dst = SOMEVALUE; 19892 volatile int *src = SOMEOTHERVALUE; 19893 *dst = *src; 19894 19895will cause a read of the volatile object pointed to by SRC and stores 19896the value into the volatile object pointed to by DST. There is no 19897guarantee that these reads and writes are atomic, especially for objects 19898larger than `int'. 19899 19900 Less obvious expressions are where something which looks like an access 19901is used in a void context. An example would be, 19902 19903 volatile int *src = SOMEVALUE; 19904 *src; 19905 19906 With C, such expressions are rvalues, and as rvalues cause a read of 19907the object, GCC interprets this as a read of the volatile being pointed 19908to. The C++ standard specifies that such expressions do not undergo 19909lvalue to rvalue conversion, and that the type of the dereferenced 19910object may be incomplete. The C++ standard does not specify explicitly 19911that it is this lvalue to rvalue conversion which is responsible for 19912causing an access. However, there is reason to believe that it is, 19913because otherwise certain simple expressions become undefined. However, 19914because it would surprise most programmers, G++ treats dereferencing a 19915pointer to volatile object of complete type in a void context as a read 19916of the object. When the object has incomplete type, G++ issues a 19917warning. 19918 19919 struct S; 19920 struct T {int m;}; 19921 volatile S *ptr1 = SOMEVALUE; 19922 volatile T *ptr2 = SOMEVALUE; 19923 *ptr1; 19924 *ptr2; 19925 19926 In this example, a warning is issued for `*ptr1', and `*ptr2' causes a 19927read of the object pointed to. If you wish to force an error on the 19928first case, you must force a conversion to rvalue with, for instance a 19929static cast, `static_cast<S>(*ptr1)'. 19930 19931 When using a reference to volatile, G++ does not treat equivalent 19932expressions as accesses to volatiles, but instead issues a warning that 19933no volatile is accessed. The rationale for this is that otherwise it 19934becomes difficult to determine where volatile access occur, and not 19935possible to ignore the return value from functions returning volatile 19936references. Again, if you wish to force a read, cast the reference to 19937an rvalue. 19938 19939 19940File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: Volatiles, Up: C++ Extensions 19941 199426.3 Restricting Pointer Aliasing 19943================================ 19944 19945As with the C front end, G++ understands the C99 feature of restricted 19946pointers, specified with the `__restrict__', or `__restrict' type 19947qualifier. Because you cannot compile C++ by specifying the `-std=c99' 19948language flag, `restrict' is not a keyword in C++. 19949 19950 In addition to allowing restricted pointers, you can specify restricted 19951references, which indicate that the reference is not aliased in the 19952local context. 19953 19954 void fn (int *__restrict__ rptr, int &__restrict__ rref) 19955 { 19956 /* ... */ 19957 } 19958 19959In the body of `fn', RPTR points to an unaliased integer and RREF 19960refers to a (different) unaliased integer. 19961 19962 You may also specify whether a member function's THIS pointer is 19963unaliased by using `__restrict__' as a member function qualifier. 19964 19965 void T::fn () __restrict__ 19966 { 19967 /* ... */ 19968 } 19969 19970Within the body of `T::fn', THIS will have the effective definition `T 19971*__restrict__ const this'. Notice that the interpretation of a 19972`__restrict__' member function qualifier is different to that of 19973`const' or `volatile' qualifier, in that it is applied to the pointer 19974rather than the object. This is consistent with other compilers which 19975implement restricted pointers. 19976 19977 As with all outermost parameter qualifiers, `__restrict__' is ignored 19978in function definition matching. This means you only need to specify 19979`__restrict__' in a function definition, rather than in a function 19980prototype as well. 19981 19982 19983File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 19984 199856.4 Vague Linkage 19986================= 19987 19988There are several constructs in C++ which require space in the object 19989file but are not clearly tied to a single translation unit. We say that 19990these constructs have "vague linkage". Typically such constructs are 19991emitted wherever they are needed, though sometimes we can be more 19992clever. 19993 19994Inline Functions 19995 Inline functions are typically defined in a header file which can 19996 be included in many different compilations. Hopefully they can 19997 usually be inlined, but sometimes an out-of-line copy is 19998 necessary, if the address of the function is taken or if inlining 19999 fails. In general, we emit an out-of-line copy in all translation 20000 units where one is needed. As an exception, we only emit inline 20001 virtual functions with the vtable, since it will always require a 20002 copy. 20003 20004 Local static variables and string constants used in an inline 20005 function are also considered to have vague linkage, since they 20006 must be shared between all inlined and out-of-line instances of 20007 the function. 20008 20009VTables 20010 C++ virtual functions are implemented in most compilers using a 20011 lookup table, known as a vtable. The vtable contains pointers to 20012 the virtual functions provided by a class, and each object of the 20013 class contains a pointer to its vtable (or vtables, in some 20014 multiple-inheritance situations). If the class declares any 20015 non-inline, non-pure virtual functions, the first one is chosen as 20016 the "key method" for the class, and the vtable is only emitted in 20017 the translation unit where the key method is defined. 20018 20019 _Note:_ If the chosen key method is later defined as inline, the 20020 vtable will still be emitted in every translation unit which 20021 defines it. Make sure that any inline virtuals are declared 20022 inline in the class body, even if they are not defined there. 20023 20024type_info objects 20025 C++ requires information about types to be written out in order to 20026 implement `dynamic_cast', `typeid' and exception handling. For 20027 polymorphic classes (classes with virtual functions), the type_info 20028 object is written out along with the vtable so that `dynamic_cast' 20029 can determine the dynamic type of a class object at runtime. For 20030 all other types, we write out the type_info object when it is 20031 used: when applying `typeid' to an expression, throwing an object, 20032 or referring to a type in a catch clause or exception 20033 specification. 20034 20035Template Instantiations 20036 Most everything in this section also applies to template 20037 instantiations, but there are other options as well. *Note 20038 Where's the Template?: Template Instantiation. 20039 20040 20041 When used with GNU ld version 2.8 or later on an ELF system such as 20042GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 20043these constructs will be discarded at link time. This is known as 20044COMDAT support. 20045 20046 On targets that don't support COMDAT, but do support weak symbols, GCC 20047will use them. This way one copy will override all the others, but the 20048unused copies will still take up space in the executable. 20049 20050 For targets which do not support either COMDAT or weak symbols, most 20051entities with vague linkage will be emitted as local symbols to avoid 20052duplicate definition errors from the linker. This will not happen for 20053local statics in inlines, however, as having multiple copies will 20054almost certainly break things. 20055 20056 *Note Declarations and Definitions in One Header: C++ Interface, for 20057another way to control placement of these constructs. 20058 20059 20060File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 20061 200626.5 #pragma interface and implementation 20063======================================== 20064 20065`#pragma interface' and `#pragma implementation' provide the user with 20066a way of explicitly directing the compiler to emit entities with vague 20067linkage (and debugging information) in a particular translation unit. 20068 20069 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most 20070cases, because of COMDAT support and the "key method" heuristic 20071mentioned in *Note Vague Linkage::. Using them can actually cause your 20072program to grow due to unnecesary out-of-line copies of inline 20073functions. Currently the only benefit of these `#pragma's is reduced 20074duplication of debugging information, and that should be addressed soon 20075on DWARF 2 targets with the use of COMDAT sections. 20076 20077`#pragma interface' 20078`#pragma interface "SUBDIR/OBJECTS.h"' 20079 Use this directive in _header files_ that define object classes, 20080 to save space in most of the object files that use those classes. 20081 Normally, local copies of certain information (backup copies of 20082 inline member functions, debugging information, and the internal 20083 tables that implement virtual functions) must be kept in each 20084 object file that includes class definitions. You can use this 20085 pragma to avoid such duplication. When a header file containing 20086 `#pragma interface' is included in a compilation, this auxiliary 20087 information will not be generated (unless the main input source 20088 file itself uses `#pragma implementation'). Instead, the object 20089 files will contain references to be resolved at link time. 20090 20091 The second form of this directive is useful for the case where you 20092 have multiple headers with the same name in different directories. 20093 If you use this form, you must specify the same string to `#pragma 20094 implementation'. 20095 20096`#pragma implementation' 20097`#pragma implementation "OBJECTS.h"' 20098 Use this pragma in a _main input file_, when you want full output 20099 from included header files to be generated (and made globally 20100 visible). The included header file, in turn, should use `#pragma 20101 interface'. Backup copies of inline member functions, debugging 20102 information, and the internal tables used to implement virtual 20103 functions are all generated in implementation files. 20104 20105 If you use `#pragma implementation' with no argument, it applies to 20106 an include file with the same basename(1) as your source file. 20107 For example, in `allclass.cc', giving just `#pragma implementation' 20108 by itself is equivalent to `#pragma implementation "allclass.h"'. 20109 20110 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as 20111 an implementation file whenever you would include it from 20112 `allclass.cc' even if you never specified `#pragma 20113 implementation'. This was deemed to be more trouble than it was 20114 worth, however, and disabled. 20115 20116 Use the string argument if you want a single implementation file to 20117 include code from multiple header files. (You must also use 20118 `#include' to include the header file; `#pragma implementation' 20119 only specifies how to use the file--it doesn't actually include 20120 it.) 20121 20122 There is no way to split up the contents of a single header file 20123 into multiple implementation files. 20124 20125 `#pragma implementation' and `#pragma interface' also have an effect 20126on function inlining. 20127 20128 If you define a class in a header file marked with `#pragma 20129interface', the effect on an inline function defined in that class is 20130similar to an explicit `extern' declaration--the compiler emits no code 20131at all to define an independent version of the function. Its 20132definition is used only for inlining with its callers. 20133 20134 Conversely, when you include the same header file in a main source file 20135that declares it as `#pragma implementation', the compiler emits code 20136for the function itself; this defines a version of the function that 20137can be found via pointers (or by callers compiled without inlining). 20138If all calls to the function can be inlined, you can avoid emitting the 20139function by compiling with `-fno-implement-inlines'. If any calls were 20140not inlined, you will get linker errors. 20141 20142 ---------- Footnotes ---------- 20143 20144 (1) A file's "basename" was the name stripped of all leading path 20145information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 20146 20147 20148File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 20149 201506.6 Where's the Template? 20151========================= 20152 20153C++ templates are the first language feature to require more 20154intelligence from the environment than one usually finds on a UNIX 20155system. Somehow the compiler and linker have to make sure that each 20156template instance occurs exactly once in the executable if it is needed, 20157and not at all otherwise. There are two basic approaches to this 20158problem, which are referred to as the Borland model and the Cfront 20159model. 20160 20161Borland model 20162 Borland C++ solved the template instantiation problem by adding 20163 the code equivalent of common blocks to their linker; the compiler 20164 emits template instances in each translation unit that uses them, 20165 and the linker collapses them together. The advantage of this 20166 model is that the linker only has to consider the object files 20167 themselves; there is no external complexity to worry about. This 20168 disadvantage is that compilation time is increased because the 20169 template code is being compiled repeatedly. Code written for this 20170 model tends to include definitions of all templates in the header 20171 file, since they must be seen to be instantiated. 20172 20173Cfront model 20174 The AT&T C++ translator, Cfront, solved the template instantiation 20175 problem by creating the notion of a template repository, an 20176 automatically maintained place where template instances are 20177 stored. A more modern version of the repository works as follows: 20178 As individual object files are built, the compiler places any 20179 template definitions and instantiations encountered in the 20180 repository. At link time, the link wrapper adds in the objects in 20181 the repository and compiles any needed instances that were not 20182 previously emitted. The advantages of this model are more optimal 20183 compilation speed and the ability to use the system linker; to 20184 implement the Borland model a compiler vendor also needs to 20185 replace the linker. The disadvantages are vastly increased 20186 complexity, and thus potential for error; for some code this can be 20187 just as transparent, but in practice it can been very difficult to 20188 build multiple programs in one directory and one program in 20189 multiple directories. Code written for this model tends to 20190 separate definitions of non-inline member templates into a 20191 separate file, which should be compiled separately. 20192 20193 When used with GNU ld version 2.8 or later on an ELF system such as 20194GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 20195Borland model. On other systems, G++ implements neither automatic 20196model. 20197 20198 A future version of G++ will support a hybrid model whereby the 20199compiler will emit any instantiations for which the template definition 20200is included in the compile, and store template definitions and 20201instantiation context information into the object file for the rest. 20202The link wrapper will extract that information as necessary and invoke 20203the compiler to produce the remaining instantiations. The linker will 20204then combine duplicate instantiations. 20205 20206 In the mean time, you have the following options for dealing with 20207template instantiations: 20208 20209 1. Compile your template-using code with `-frepo'. The compiler will 20210 generate files with the extension `.rpo' listing all of the 20211 template instantiations used in the corresponding object files 20212 which could be instantiated there; the link wrapper, `collect2', 20213 will then update the `.rpo' files to tell the compiler where to 20214 place those instantiations and rebuild any affected object files. 20215 The link-time overhead is negligible after the first pass, as the 20216 compiler will continue to place the instantiations in the same 20217 files. 20218 20219 This is your best option for application code written for the 20220 Borland model, as it will just work. Code written for the Cfront 20221 model will need to be modified so that the template definitions 20222 are available at one or more points of instantiation; usually this 20223 is as simple as adding `#include <tmethods.cc>' to the end of each 20224 template header. 20225 20226 For library code, if you want the library to provide all of the 20227 template instantiations it needs, just try to link all of its 20228 object files together; the link will fail, but cause the 20229 instantiations to be generated as a side effect. Be warned, 20230 however, that this may cause conflicts if multiple libraries try 20231 to provide the same instantiations. For greater control, use 20232 explicit instantiation as described in the next option. 20233 20234 2. Compile your code with `-fno-implicit-templates' to disable the 20235 implicit generation of template instances, and explicitly 20236 instantiate all the ones you use. This approach requires more 20237 knowledge of exactly which instances you need than do the others, 20238 but it's less mysterious and allows greater control. You can 20239 scatter the explicit instantiations throughout your program, 20240 perhaps putting them in the translation units where the instances 20241 are used or the translation units that define the templates 20242 themselves; you can put all of the explicit instantiations you 20243 need into one big file; or you can create small files like 20244 20245 #include "Foo.h" 20246 #include "Foo.cc" 20247 20248 template class Foo<int>; 20249 template ostream& operator << 20250 (ostream&, const Foo<int>&); 20251 20252 for each of the instances you need, and create a template 20253 instantiation library from those. 20254 20255 If you are using Cfront-model code, you can probably get away with 20256 not using `-fno-implicit-templates' when compiling files that don't 20257 `#include' the member template definitions. 20258 20259 If you use one big file to do the instantiations, you may want to 20260 compile it without `-fno-implicit-templates' so you get all of the 20261 instances required by your explicit instantiations (but not by any 20262 other files) without having to specify them as well. 20263 20264 G++ has extended the template instantiation syntax given in the ISO 20265 standard to allow forward declaration of explicit instantiations 20266 (with `extern'), instantiation of the compiler support data for a 20267 template class (i.e. the vtable) without instantiating any of its 20268 members (with `inline'), and instantiation of only the static data 20269 members of a template class, without the support data or member 20270 functions (with (`static'): 20271 20272 extern template int max (int, int); 20273 inline template class Foo<int>; 20274 static template class Foo<int>; 20275 20276 3. Do nothing. Pretend G++ does implement automatic instantiation 20277 management. Code written for the Borland model will work fine, but 20278 each translation unit will contain instances of each of the 20279 templates it uses. In a large program, this can lead to an 20280 unacceptable amount of code duplication. 20281 20282 20283File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 20284 202856.7 Extracting the function pointer from a bound pointer to member function 20286=========================================================================== 20287 20288In C++, pointer to member functions (PMFs) are implemented using a wide 20289pointer of sorts to handle all the possible call mechanisms; the PMF 20290needs to store information about how to adjust the `this' pointer, and 20291if the function pointed to is virtual, where to find the vtable, and 20292where in the vtable to look for the member function. If you are using 20293PMFs in an inner loop, you should really reconsider that decision. If 20294that is not an option, you can extract the pointer to the function that 20295would be called for a given object/PMF pair and call it directly inside 20296the inner loop, to save a bit of time. 20297 20298 Note that you will still be paying the penalty for the call through a 20299function pointer; on most modern architectures, such a call defeats the 20300branch prediction features of the CPU. This is also true of normal 20301virtual function calls. 20302 20303 The syntax for this extension is 20304 20305 extern A a; 20306 extern int (A::*fp)(); 20307 typedef int (*fptr)(A *); 20308 20309 fptr p = (fptr)(a.*fp); 20310 20311 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 20312object is needed to obtain the address of the function. They can be 20313converted to function pointers directly: 20314 20315 fptr p1 = (fptr)(&A::foo); 20316 20317 You must specify `-Wno-pmf-conversions' to use this extension. 20318 20319 20320File: gcc.info, Node: C++ Attributes, Next: Strong Using, Prev: Bound member functions, Up: C++ Extensions 20321 203226.8 C++-Specific Variable, Function, and Type Attributes 20323======================================================== 20324 20325Some attributes only make sense for C++ programs. 20326 20327`init_priority (PRIORITY)' 20328 In Standard C++, objects defined at namespace scope are guaranteed 20329 to be initialized in an order in strict accordance with that of 20330 their definitions _in a given translation unit_. No guarantee is 20331 made for initializations across translation units. However, GNU 20332 C++ allows users to control the order of initialization of objects 20333 defined at namespace scope with the `init_priority' attribute by 20334 specifying a relative PRIORITY, a constant integral expression 20335 currently bounded between 101 and 65535 inclusive. Lower numbers 20336 indicate a higher priority. 20337 20338 In the following example, `A' would normally be created before 20339 `B', but the `init_priority' attribute has reversed that order: 20340 20341 Some_Class A __attribute__ ((init_priority (2000))); 20342 Some_Class B __attribute__ ((init_priority (543))); 20343 20344 Note that the particular values of PRIORITY do not matter; only 20345 their relative ordering. 20346 20347`java_interface' 20348 This type attribute informs C++ that the class is a Java 20349 interface. It may only be applied to classes declared within an 20350 `extern "Java"' block. Calls to methods declared in this 20351 interface will be dispatched using GCJ's interface table 20352 mechanism, instead of regular virtual table dispatch. 20353 20354 20355 See also *Note Strong Using::. 20356 20357 20358File: gcc.info, Node: Strong Using, Next: Offsetof, Prev: C++ Attributes, Up: C++ Extensions 20359 203606.9 Strong Using 20361================ 20362 20363*Caution:* The semantics of this extension are not fully defined. 20364Users should refrain from using this extension as its semantics may 20365change subtly over time. It is possible that this extension wil be 20366removed in future versions of G++. 20367 20368 A using-directive with `__attribute ((strong))' is stronger than a 20369normal using-directive in two ways: 20370 20371 * Templates from the used namespace can be specialized as though 20372 they were members of the using namespace. 20373 20374 * The using namespace is considered an associated namespace of all 20375 templates in the used namespace for purposes of argument-dependent 20376 name lookup. 20377 20378 This is useful for composing a namespace transparently from 20379implementation namespaces. For example: 20380 20381 namespace std { 20382 namespace debug { 20383 template <class T> struct A { }; 20384 } 20385 using namespace debug __attribute ((__strong__)); 20386 template <> struct A<int> { }; // ok to specialize 20387 20388 template <class T> void f (A<T>); 20389 } 20390 20391 int main() 20392 { 20393 f (std::A<float>()); // lookup finds std::f 20394 f (std::A<int>()); 20395 } 20396 20397 20398File: gcc.info, Node: Offsetof, Next: Java Exceptions, Prev: Strong Using, Up: C++ Extensions 20399 204006.10 Offsetof 20401============= 20402 20403G++ uses a syntactic extension to implement the `offsetof' macro. 20404 20405 In particular: 20406 20407 __offsetof__ (expression) 20408 20409 is equivalent to the parenthesized expression, except that the 20410expression is considered an integral constant expression even if it 20411contains certain operators that are not normally permitted in an 20412integral constant expression. Users should never use `__offsetof__' 20413directly; the only valid use of `__offsetof__' is to implement the 20414`offsetof' macro in `<stddef.h>'. 20415 20416 20417File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Offsetof, Up: C++ Extensions 20418 204196.11 Java Exceptions 20420==================== 20421 20422The Java language uses a slightly different exception handling model 20423from C++. Normally, GNU C++ will automatically detect when you are 20424writing C++ code that uses Java exceptions, and handle them 20425appropriately. However, if C++ code only needs to execute destructors 20426when Java exceptions are thrown through it, GCC will guess incorrectly. 20427Sample problematic code is: 20428 20429 struct S { ~S(); }; 20430 extern void bar(); // is written in Java, and may throw exceptions 20431 void foo() 20432 { 20433 S s; 20434 bar(); 20435 } 20436 20437The usual effect of an incorrect guess is a link failure, complaining of 20438a missing routine called `__gxx_personality_v0'. 20439 20440 You can inform the compiler that Java exceptions are to be used in a 20441translation unit, irrespective of what it might think, by writing 20442`#pragma GCC java_exceptions' at the head of the file. This `#pragma' 20443must appear before any functions that throw or catch exceptions, or run 20444destructors when exceptions are thrown through them. 20445 20446 You cannot mix Java and C++ exceptions in the same translation unit. 20447It is believed to be safe to throw a C++ exception from one file through 20448another file compiled for the Java exception model, or vice versa, but 20449there may be bugs in this area. 20450 20451 20452File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 20453 204546.12 Deprecated Features 20455======================== 20456 20457In the past, the GNU C++ compiler was extended to experiment with new 20458features, at a time when the C++ language was still evolving. Now that 20459the C++ standard is complete, some of those features are superseded by 20460superior alternatives. Using the old features might cause a warning in 20461some cases that the feature will be dropped in the future. In other 20462cases, the feature might be gone already. 20463 20464 While the list below is not exhaustive, it documents some of the 20465options that are now deprecated: 20466 20467`-fexternal-templates' 20468`-falt-external-templates' 20469 These are two of the many ways for G++ to implement template 20470 instantiation. *Note Template Instantiation::. The C++ standard 20471 clearly defines how template definitions have to be organized 20472 across implementation units. G++ has an implicit instantiation 20473 mechanism that should work just fine for standard-conforming code. 20474 20475`-fstrict-prototype' 20476`-fno-strict-prototype' 20477 Previously it was possible to use an empty prototype parameter 20478 list to indicate an unspecified number of parameters (like C), 20479 rather than no parameters, as C++ demands. This feature has been 20480 removed, except where it is required for backwards compatibility 20481 *Note Backwards Compatibility::. 20482 20483 The named return value extension has been deprecated, and is now 20484removed from G++. 20485 20486 The use of initializer lists with new expressions has been deprecated, 20487and is now removed from G++. 20488 20489 Floating and complex non-type template parameters have been deprecated, 20490and are now removed from G++. 20491 20492 The implicit typename extension has been deprecated and is now removed 20493from G++. 20494 20495 The use of default arguments in function pointers, function typedefs 20496and and other places where they are not permitted by the standard is 20497deprecated and will be removed from a future version of G++. 20498 20499 20500File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 20501 205026.13 Backwards Compatibility 20503============================ 20504 20505Now that there is a definitive ISO standard C++, G++ has a specification 20506to adhere to. The C++ language evolved over time, and features that 20507used to be acceptable in previous drafts of the standard, such as the 20508ARM [Annotated C++ Reference Manual], are no longer accepted. In order 20509to allow compilation of C++ written to such drafts, G++ contains some 20510backwards compatibilities. _All such backwards compatibility features 20511are liable to disappear in future versions of G++._ They should be 20512considered deprecated *Note Deprecated Features::. 20513 20514`For scope' 20515 If a variable is declared at for scope, it used to remain in scope 20516 until the end of the scope which contained the for statement 20517 (rather than just within the for scope). G++ retains this, but 20518 issues a warning, if such a variable is accessed outside the for 20519 scope. 20520 20521`Implicit C language' 20522 Old C system header files did not contain an `extern "C" {...}' 20523 scope to set the language. On such systems, all header files are 20524 implicitly scoped inside a C language scope. Also, an empty 20525 prototype `()' will be treated as an unspecified number of 20526 arguments, rather than no arguments, as C++ demands. 20527 20528 20529File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 20530 205317 GNU Objective-C runtime features 20532********************************** 20533 20534This document is meant to describe some of the GNU Objective-C runtime 20535features. It is not intended to teach you Objective-C, there are 20536several resources on the Internet that present the language. Questions 20537and comments about this document to Ovidiu Predescu <ovidiu@cup.hp.com>. 20538 20539* Menu: 20540 20541* Executing code before main:: 20542* Type encoding:: 20543* Garbage Collection:: 20544* Constant string objects:: 20545* compatibility_alias:: 20546 20547 20548File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: Objective-C, Up: Objective-C 20549 205507.1 `+load': Executing code before main 20551======================================= 20552 20553The GNU Objective-C runtime provides a way that allows you to execute 20554code before the execution of the program enters the `main' function. 20555The code is executed on a per-class and a per-category basis, through a 20556special class method `+load'. 20557 20558 This facility is very useful if you want to initialize global variables 20559which can be accessed by the program directly, without sending a message 20560to the class first. The usual way to initialize global variables, in 20561the `+initialize' method, might not be useful because `+initialize' is 20562only called when the first message is sent to a class object, which in 20563some cases could be too late. 20564 20565 Suppose for example you have a `FileStream' class that declares 20566`Stdin', `Stdout' and `Stderr' as global variables, like below: 20567 20568 20569 FileStream *Stdin = nil; 20570 FileStream *Stdout = nil; 20571 FileStream *Stderr = nil; 20572 20573 @implementation FileStream 20574 20575 + (void)initialize 20576 { 20577 Stdin = [[FileStream new] initWithFd:0]; 20578 Stdout = [[FileStream new] initWithFd:1]; 20579 Stderr = [[FileStream new] initWithFd:2]; 20580 } 20581 20582 /* Other methods here */ 20583 @end 20584 20585 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 20586in `+initialize' occurs too late. The programmer can send a message to 20587one of these objects before the variables are actually initialized, 20588thus sending messages to the `nil' object. The `+initialize' method 20589which actually initializes the global variables is not invoked until 20590the first message is sent to the class object. The solution would 20591require these variables to be initialized just before entering `main'. 20592 20593 The correct solution of the above problem is to use the `+load' method 20594instead of `+initialize': 20595 20596 20597 @implementation FileStream 20598 20599 + (void)load 20600 { 20601 Stdin = [[FileStream new] initWithFd:0]; 20602 Stdout = [[FileStream new] initWithFd:1]; 20603 Stderr = [[FileStream new] initWithFd:2]; 20604 } 20605 20606 /* Other methods here */ 20607 @end 20608 20609 The `+load' is a method that is not overridden by categories. If a 20610class and a category of it both implement `+load', both methods are 20611invoked. This allows some additional initializations to be performed in 20612a category. 20613 20614 This mechanism is not intended to be a replacement for `+initialize'. 20615You should be aware of its limitations when you decide to use it 20616instead of `+initialize'. 20617 20618* Menu: 20619 20620* What you can and what you cannot do in +load:: 20621 20622 20623File: gcc.info, Node: What you can and what you cannot do in +load, Prev: Executing code before main, Up: Executing code before main 20624 206257.1.1 What you can and what you cannot do in `+load' 20626---------------------------------------------------- 20627 20628The `+load' implementation in the GNU runtime guarantees you the 20629following things: 20630 20631 * you can write whatever C code you like; 20632 20633 * you can send messages to Objective-C constant strings (`@"this is a 20634 constant string"'); 20635 20636 * you can allocate and send messages to objects whose class is 20637 implemented in the same file; 20638 20639 * the `+load' implementation of all super classes of a class are 20640 executed before the `+load' of that class is executed; 20641 20642 * the `+load' implementation of a class is executed before the 20643 `+load' implementation of any category. 20644 20645 20646 In particular, the following things, even if they can work in a 20647particular case, are not guaranteed: 20648 20649 * allocation of or sending messages to arbitrary objects; 20650 20651 * allocation of or sending messages to objects whose classes have a 20652 category implemented in the same file; 20653 20654 20655 You should make no assumptions about receiving `+load' in sibling 20656classes when you write `+load' of a class. The order in which sibling 20657classes receive `+load' is not guaranteed. 20658 20659 The order in which `+load' and `+initialize' are called could be 20660problematic if this matters. If you don't allocate objects inside 20661`+load', it is guaranteed that `+load' is called before `+initialize'. 20662If you create an object inside `+load' the `+initialize' method of 20663object's class is invoked even if `+load' was not invoked. Note if you 20664explicitly call `+load' on a class, `+initialize' will be called first. 20665To avoid possible problems try to implement only one of these methods. 20666 20667 The `+load' method is also invoked when a bundle is dynamically loaded 20668into your running program. This happens automatically without any 20669intervening operation from you. When you write bundles and you need to 20670write `+load' you can safely create and send messages to objects whose 20671classes already exist in the running program. The same restrictions as 20672above apply to classes defined in bundle. 20673 20674 20675File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 20676 206777.2 Type encoding 20678================= 20679 20680The Objective-C compiler generates type encodings for all the types. 20681These type encodings are used at runtime to find out information about 20682selectors and methods and about objects and classes. 20683 20684 The types are encoded in the following way: 20685 20686`char' `c' 20687`unsigned char' `C' 20688`short' `s' 20689`unsigned short' `S' 20690`int' `i' 20691`unsigned int' `I' 20692`long' `l' 20693`unsigned long' `L' 20694`long long' `q' 20695`unsigned long `Q' 20696long' 20697`float' `f' 20698`double' `d' 20699`void' `v' 20700`id' `@' 20701`Class' `#' 20702`SEL' `:' 20703`char*' `*' 20704unknown type `?' 20705bit-fields `b' followed by the starting position of the 20706 bit-field, the type of the bit-field and the size of 20707 the bit-field (the bit-fields encoding was changed 20708 from the NeXT's compiler encoding, see below) 20709 20710 The encoding of bit-fields has changed to allow bit-fields to be 20711properly handled by the runtime functions that compute sizes and 20712alignments of types that contain bit-fields. The previous encoding 20713contained only the size of the bit-field. Using only this information 20714it is not possible to reliably compute the size occupied by the 20715bit-field. This is very important in the presence of the Boehm's 20716garbage collector because the objects are allocated using the typed 20717memory facility available in this collector. The typed memory 20718allocation requires information about where the pointers are located 20719inside the object. 20720 20721 The position in the bit-field is the position, counting in bits, of the 20722bit closest to the beginning of the structure. 20723 20724 The non-atomic types are encoded as follows: 20725 20726pointers `^' followed by the pointed type. 20727arrays `[' followed by the number of elements in the array 20728 followed by the type of the elements followed by `]' 20729structures `{' followed by the name of the structure (or `?' if the 20730 structure is unnamed), the `=' sign, the type of the 20731 members and by `}' 20732unions `(' followed by the name of the structure (or `?' if the 20733 union is unnamed), the `=' sign, the type of the members 20734 followed by `)' 20735 20736 Here are some types and their encodings, as they are generated by the 20737compiler on an i386 machine: 20738 20739 20740Objective-C type Compiler encoding 20741 int a[10]; `[10i]' 20742 struct { `{?=i[3f]b128i3b131i2c}' 20743 int i; 20744 float f[3]; 20745 int a:3; 20746 int b:2; 20747 char c; 20748 } 20749 20750 20751 In addition to the types the compiler also encodes the type 20752specifiers. The table below describes the encoding of the current 20753Objective-C type specifiers: 20754 20755 20756Specifier Encoding 20757`const' `r' 20758`in' `n' 20759`inout' `N' 20760`out' `o' 20761`bycopy' `O' 20762`oneway' `V' 20763 20764 20765 The type specifiers are encoded just before the type. Unlike types 20766however, the type specifiers are only encoded when they appear in method 20767argument types. 20768 20769 20770File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 20771 207727.3 Garbage Collection 20773====================== 20774 20775Support for a new memory management policy has been added by using a 20776powerful conservative garbage collector, known as the 20777Boehm-Demers-Weiser conservative garbage collector. It is available 20778from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'. 20779 20780 To enable the support for it you have to configure the compiler using 20781an additional argument, `--enable-objc-gc'. You need to have garbage 20782collector installed before building the compiler. This will build an 20783additional runtime library which has several enhancements to support 20784the garbage collector. The new library has a new name, `libobjc_gc.a' 20785to not conflict with the non-garbage-collected library. 20786 20787 When the garbage collector is used, the objects are allocated using the 20788so-called typed memory allocation mechanism available in the 20789Boehm-Demers-Weiser collector. This mode requires precise information 20790on where pointers are located inside objects. This information is 20791computed once per class, immediately after the class has been 20792initialized. 20793 20794 There is a new runtime function `class_ivar_set_gcinvisible()' which 20795can be used to declare a so-called "weak pointer" reference. Such a 20796pointer is basically hidden for the garbage collector; this can be 20797useful in certain situations, especially when you want to keep track of 20798the allocated objects, yet allow them to be collected. This kind of 20799pointers can only be members of objects, you cannot declare a global 20800pointer as a weak reference. Every type which is a pointer type can be 20801declared a weak pointer, including `id', `Class' and `SEL'. 20802 20803 Here is an example of how to use this feature. Suppose you want to 20804implement a class whose instances hold a weak pointer reference; the 20805following class does this: 20806 20807 20808 @interface WeakPointer : Object 20809 { 20810 const void* weakPointer; 20811 } 20812 20813 - initWithPointer:(const void*)p; 20814 - (const void*)weakPointer; 20815 @end 20816 20817 20818 @implementation WeakPointer 20819 20820 + (void)initialize 20821 { 20822 class_ivar_set_gcinvisible (self, "weakPointer", YES); 20823 } 20824 20825 - initWithPointer:(const void*)p 20826 { 20827 weakPointer = p; 20828 return self; 20829 } 20830 20831 - (const void*)weakPointer 20832 { 20833 return weakPointer; 20834 } 20835 20836 @end 20837 20838 Weak pointers are supported through a new type character specifier 20839represented by the `!' character. The `class_ivar_set_gcinvisible()' 20840function adds or removes this specifier to the string type description 20841of the instance variable named as argument. 20842 20843 20844File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 20845 208467.4 Constant string objects 20847=========================== 20848 20849GNU Objective-C provides constant string objects that are generated 20850directly by the compiler. You declare a constant string object by 20851prefixing a C constant string with the character `@': 20852 20853 id myString = @"this is a constant string object"; 20854 20855 The constant string objects are by default instances of the 20856`NXConstantString' class which is provided by the GNU Objective-C 20857runtime. To get the definition of this class you must include the 20858`objc/NXConstStr.h' header file. 20859 20860 User defined libraries may want to implement their own constant string 20861class. To be able to support them, the GNU Objective-C compiler 20862provides a new command line options 20863`-fconstant-string-class=CLASS-NAME'. The provided class should adhere 20864to a strict structure, the same as `NXConstantString''s structure: 20865 20866 20867 @interface MyConstantStringClass 20868 { 20869 Class isa; 20870 char *c_string; 20871 unsigned int len; 20872 } 20873 @end 20874 20875 `NXConstantString' inherits from `Object'; user class libraries may 20876choose to inherit the customized constant string class from a different 20877class than `Object'. There is no requirement in the methods the 20878constant string class has to implement, but the final ivar layout of 20879the class must be the compatible with the given structure. 20880 20881 When the compiler creates the statically allocated constant string 20882object, the `c_string' field will be filled by the compiler with the 20883string; the `length' field will be filled by the compiler with the 20884string length; the `isa' pointer will be filled with `NULL' by the 20885compiler, and it will later be fixed up automatically at runtime by the 20886GNU Objective-C runtime library to point to the class which was set by 20887the `-fconstant-string-class' option when the object file is loaded (if 20888you wonder how it works behind the scenes, the name of the class to 20889use, and the list of static objects to fixup, are stored by the 20890compiler in the object file in a place where the GNU runtime library 20891will find them at runtime). 20892 20893 As a result, when a file is compiled with the 20894`-fconstant-string-class' option, all the constant string objects will 20895be instances of the class specified as argument to this option. It is 20896possible to have multiple compilation units referring to different 20897constant string classes, neither the compiler nor the linker impose any 20898restrictions in doing this. 20899 20900 20901File: gcc.info, Node: compatibility_alias, Prev: Constant string objects, Up: Objective-C 20902 209037.5 compatibility_alias 20904======================= 20905 20906This is a feature of the Objective-C compiler rather than of the 20907runtime, anyway since it is documented nowhere and its existence was 20908forgotten, we are documenting it here. 20909 20910 The keyword `@compatibility_alias' allows you to define a class name 20911as equivalent to another class name. For example: 20912 20913 @compatibility_alias WOApplication GSWApplication; 20914 20915 tells the compiler that each time it encounters `WOApplication' as a 20916class name, it should replace it with `GSWApplication' (that is, 20917`WOApplication' is just an alias for `GSWApplication'). 20918 20919 There are some constraints on how this can be used-- 20920 20921 * `WOApplication' (the alias) must not be an existing class; 20922 20923 * `GSWApplication' (the real class) must be an existing class. 20924 20925 20926 20927File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 20928 209298 Binary Compatibility 20930********************** 20931 20932Binary compatibility encompasses several related concepts: 20933 20934"application binary interface (ABI)" 20935 The set of runtime conventions followed by all of the tools that 20936 deal with binary representations of a program, including 20937 compilers, assemblers, linkers, and language runtime support. 20938 Some ABIs are formal with a written specification, possibly 20939 designed by multiple interested parties. Others are simply the 20940 way things are actually done by a particular set of tools. 20941 20942"ABI conformance" 20943 A compiler conforms to an ABI if it generates code that follows 20944 all of the specifications enumerated by that ABI. A library 20945 conforms to an ABI if it is implemented according to that ABI. An 20946 application conforms to an ABI if it is built using tools that 20947 conform to that ABI and does not contain source code that 20948 specifically changes behavior specified by the ABI. 20949 20950"calling conventions" 20951 Calling conventions are a subset of an ABI that specify of how 20952 arguments are passed and function results are returned. 20953 20954"interoperability" 20955 Different sets of tools are interoperable if they generate files 20956 that can be used in the same program. The set of tools includes 20957 compilers, assemblers, linkers, libraries, header files, startup 20958 files, and debuggers. Binaries produced by different sets of 20959 tools are not interoperable unless they implement the same ABI. 20960 This applies to different versions of the same tools as well as 20961 tools from different vendors. 20962 20963"intercallability" 20964 Whether a function in a binary built by one set of tools can call a 20965 function in a binary built by a different set of tools is a subset 20966 of interoperability. 20967 20968"implementation-defined features" 20969 Language standards include lists of implementation-defined 20970 features whose behavior can vary from one implementation to 20971 another. Some of these features are normally covered by a 20972 platform's ABI and others are not. The features that are not 20973 covered by an ABI generally affect how a program behaves, but not 20974 intercallability. 20975 20976"compatibility" 20977 Conformance to the same ABI and the same behavior of 20978 implementation-defined features are both relevant for 20979 compatibility. 20980 20981 The application binary interface implemented by a C or C++ compiler 20982affects code generation and runtime support for: 20983 20984 * size and alignment of data types 20985 20986 * layout of structured types 20987 20988 * calling conventions 20989 20990 * register usage conventions 20991 20992 * interfaces for runtime arithmetic support 20993 20994 * object file formats 20995 20996 In addition, the application binary interface implemented by a C++ 20997compiler affects code generation and runtime support for: 20998 * name mangling 20999 21000 * exception handling 21001 21002 * invoking constructors and destructors 21003 21004 * layout, alignment, and padding of classes 21005 21006 * layout and alignment of virtual tables 21007 21008 Some GCC compilation options cause the compiler to generate code that 21009does not conform to the platform's default ABI. Other options cause 21010different program behavior for implementation-defined features that are 21011not covered by an ABI. These options are provided for consistency with 21012other compilers that do not follow the platform's default ABI or the 21013usual behavior of implementation-defined features for the platform. Be 21014very careful about using such options. 21015 21016 Most platforms have a well-defined ABI that covers C code, but ABIs 21017that cover C++ functionality are not yet common. 21018 21019 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 21020written, vendor-neutral C++ ABI that was designed to be specific to 2102164-bit Itanium but also includes generic specifications that apply to 21022any platform. This C++ ABI is also implemented by other compiler 21023vendors on some platforms, notably GNU/Linux and BSD systems. We have 21024tried hard to provide a stable ABI that will be compatible with future 21025GCC releases, but it is possible that we will encounter problems that 21026make this difficult. Such problems could include different 21027interpretations of the C++ ABI by different vendors, bugs in the ABI, or 21028bugs in the implementation of the ABI in different compilers. GCC's 21029`-Wabi' switch warns when G++ generates code that is probably not 21030compatible with the C++ ABI. 21031 21032 The C++ library used with a C++ compiler includes the Standard C++ 21033Library, with functionality defined in the C++ Standard, plus language 21034runtime support. The runtime support is included in a C++ ABI, but 21035there is no formal ABI for the Standard C++ Library. Two 21036implementations of that library are interoperable if one follows the 21037de-facto ABI of the other and if they are both built with the same 21038compiler, or with compilers that conform to the same ABI for C++ 21039compiler and runtime support. 21040 21041 When G++ and another C++ compiler conform to the same C++ ABI, but the 21042implementations of the Standard C++ Library that they normally use do 21043not follow the same ABI for the Standard C++ Library, object files 21044built with those compilers can be used in the same program only if they 21045use the same C++ library. This requires specifying the location of the 21046C++ library header files when invoking the compiler whose usual library 21047is not being used. The location of GCC's C++ header files depends on 21048how the GCC build was configured, but can be seen by using the G++ `-v' 21049option. With default configuration options for G++ 3.3 the compile 21050line for a different C++ compiler needs to include 21051 21052 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 21053 21054 Similarly, compiling code with G++ that must use a C++ library other 21055than the GNU C++ library requires specifying the location of the header 21056files for that other library. 21057 21058 The most straightforward way to link a program to use a particular C++ 21059library is to use a C++ driver that specifies that C++ library by 21060default. The `g++' driver, for example, tells the linker where to find 21061GCC's C++ library (`libstdc++') plus the other libraries and startup 21062files it needs, in the proper order. 21063 21064 If a program must use a different C++ library and it's not possible to 21065do the final link using a C++ driver that uses that library by default, 21066it is necessary to tell `g++' the location and name of that library. 21067It might also be necessary to specify different startup files and other 21068runtime support libraries, and to suppress the use of GCC's support 21069libraries with one or more of the options `-nostdlib', `-nostartfiles', 21070and `-nodefaultlibs'. 21071 21072 21073File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 21074 210759 `gcov'--a Test Coverage Program 21076********************************* 21077 21078`gcov' is a tool you can use in conjunction with GCC to test code 21079coverage in your programs. 21080 21081* Menu: 21082 21083* Gcov Intro:: Introduction to gcov. 21084* Invoking Gcov:: How to use gcov. 21085* Gcov and Optimization:: Using gcov with GCC optimization. 21086* Gcov Data Files:: The files used by gcov. 21087 21088 21089File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 21090 210919.1 Introduction to `gcov' 21092========================== 21093 21094`gcov' is a test coverage program. Use it in concert with GCC to 21095analyze your programs to help create more efficient, faster running 21096code and to discover untested parts of your program. You can use 21097`gcov' as a profiling tool to help discover where your optimization 21098efforts will best affect your code. You can also use `gcov' along with 21099the other profiling tool, `gprof', to assess which parts of your code 21100use the greatest amount of computing time. 21101 21102 Profiling tools help you analyze your code's performance. Using a 21103profiler such as `gcov' or `gprof', you can find out some basic 21104performance statistics, such as: 21105 21106 * how often each line of code executes 21107 21108 * what lines of code are actually executed 21109 21110 * how much computing time each section of code uses 21111 21112 Once you know these things about how your code works when compiled, you 21113can look at each module to see which modules should be optimized. 21114`gcov' helps you determine where to work on optimization. 21115 21116 Software developers also use coverage testing in concert with 21117testsuites, to make sure software is actually good enough for a release. 21118Testsuites can verify that a program works as expected; a coverage 21119program tests to see how much of the program is exercised by the 21120testsuite. Developers can then determine what kinds of test cases need 21121to be added to the testsuites to create both better testing and a better 21122final product. 21123 21124 You should compile your code without optimization if you plan to use 21125`gcov' because the optimization, by combining some lines of code into 21126one function, may not give you as much information as you need to look 21127for `hot spots' where the code is using a great deal of computer time. 21128Likewise, because `gcov' accumulates statistics by line (at the lowest 21129resolution), it works best with a programming style that places only 21130one statement on each line. If you use complicated macros that expand 21131to loops or to other control structures, the statistics are less 21132helpful--they only report on the line where the macro call appears. If 21133your complex macros behave like functions, you can replace them with 21134inline functions to solve this problem. 21135 21136 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 21137many times each line of a source file `SOURCEFILE.c' has executed. You 21138can use these logfiles along with `gprof' to aid in fine-tuning the 21139performance of your programs. `gprof' gives timing information you can 21140use along with the information you get from `gcov'. 21141 21142 `gcov' works only on code compiled with GCC. It is not compatible 21143with any other profiling or test coverage mechanism. 21144 21145 21146File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 21147 211489.2 Invoking gcov 21149================= 21150 21151 gcov [OPTIONS] SOURCEFILE 21152 21153 `gcov' accepts the following options: 21154 21155`-h' 21156`--help' 21157 Display help about using `gcov' (on the standard output), and exit 21158 without doing any further processing. 21159 21160`-v' 21161`--version' 21162 Display the `gcov' version number (on the standard output), and 21163 exit without doing any further processing. 21164 21165`-a' 21166`--all-blocks' 21167 Write individual execution counts for every basic block. Normally 21168 gcov outputs execution counts only for the main blocks of a line. 21169 With this option you can determine if blocks within a single line 21170 are not being executed. 21171 21172`-b' 21173`--branch-probabilities' 21174 Write branch frequencies to the output file, and write branch 21175 summary info to the standard output. This option allows you to 21176 see how often each branch in your program was taken. Unconditional 21177 branches will not be shown, unless the `-u' option is given. 21178 21179`-c' 21180`--branch-counts' 21181 Write branch frequencies as the number of branches taken, rather 21182 than the percentage of branches taken. 21183 21184`-n' 21185`--no-output' 21186 Do not create the `gcov' output file. 21187 21188`-l' 21189`--long-file-names' 21190 Create long file names for included source files. For example, if 21191 the header file `x.h' contains code, and was included in the file 21192 `a.c', then running `gcov' on the file `a.c' will produce an 21193 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 21194 can be useful if `x.h' is included in multiple source files. If 21195 you uses the `-p' option, both the including and included file 21196 names will be complete path names. 21197 21198`-p' 21199`--preserve-paths' 21200 Preserve complete path information in the names of generated 21201 `.gcov' files. Without this option, just the filename component is 21202 used. With this option, all directories are used, with '/' 21203 characters translated to '#' characters, '.' directory components 21204 removed and '..' components renamed to '^'. This is useful if 21205 sourcefiles are in several different directories. It also affects 21206 the `-l' option. 21207 21208`-f' 21209`--function-summaries' 21210 Output summaries for each function in addition to the file level 21211 summary. 21212 21213`-o DIRECTORY|FILE' 21214`--object-directory DIRECTORY' 21215`--object-file FILE' 21216 Specify either the directory containing the gcov data files, or the 21217 object path name. The `.gcno', and `.gcda' data files are searched 21218 for using this option. If a directory is specified, the data files 21219 are in that directory and named after the source file name, 21220 without its extension. If a file is specified here, the data files 21221 are named after that file, without its extension. If this option 21222 is not supplied, it defaults to the current directory. 21223 21224`-u' 21225`--unconditional-branches' 21226 When branch counts are given, include those of unconditional 21227 branches. Unconditional branches are normally not interesting. 21228 21229 21230 `gcov' should be run with the current directory the same as that when 21231you invoked the compiler. Otherwise it will not be able to locate the 21232source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 21233current directory. These contain the coverage information of the source 21234file they correspond to. One `.gcov' file is produced for each source 21235file containing code, which was compiled to produce the data files. The 21236MANGLEDNAME part of the output file name is usually simply the source 21237file name, but can be something more complicated if the `-l' or `-p' 21238options are given. Refer to those options for details. 21239 21240 The `.gcov' files contain the ':' separated fields along with program 21241source code. The format is 21242 21243 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 21244 21245 Additional block information may succeed each line, when requested by 21246command line option. The EXECUTION_COUNT is `-' for lines containing no 21247code and `#####' for lines which were never executed. Some lines of 21248information at the start have LINE_NUMBER of zero. 21249 21250 When printing percentages, 0% and 100% are only printed when the values 21251are _exactly_ 0% and 100% respectively. Other values which would 21252conventionally be rounded to 0% or 100% are instead printed as the 21253nearest non-boundary value. 21254 21255 When using `gcov', you must first compile your program with two 21256special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 21257compiler to generate additional information needed by gcov (basically a 21258flow graph of the program) and also includes additional code in the 21259object files for generating the extra profiling information needed by 21260gcov. These additional files are placed in the directory where the 21261object file is located. 21262 21263 Running the program will cause profile output to be generated. For 21264each source file compiled with `-fprofile-arcs', an accompanying 21265`.gcda' file will be placed in the object file directory. 21266 21267 Running `gcov' with your program's source file names as arguments will 21268now produce a listing of the code along with frequency of execution for 21269each line. For example, if your program is called `tmp.c', this is 21270what you see when you use the basic `gcov' facility: 21271 21272 $ gcc -fprofile-arcs -ftest-coverage tmp.c 21273 $ a.out 21274 $ gcov tmp.c 21275 90.00% of 10 source lines executed in file tmp.c 21276 Creating tmp.c.gcov. 21277 21278 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 21279 21280 -: 0:Source:tmp.c 21281 -: 0:Graph:tmp.gcno 21282 -: 0:Data:tmp.gcda 21283 -: 0:Runs:1 21284 -: 0:Programs:1 21285 -: 1:#include <stdio.h> 21286 -: 2: 21287 -: 3:int main (void) 21288 function main called 1 returned 1 blocks executed 75% 21289 1: 4:{ 21290 1: 5: int i, total; 21291 -: 6: 21292 1: 7: total = 0; 21293 -: 8: 21294 11: 9: for (i = 0; i < 10; i++) 21295 10: 10: total += i; 21296 -: 11: 21297 1: 12: if (total != 45) 21298 #####: 13: printf ("Failure\n"); 21299 -: 14: else 21300 1: 15: printf ("Success\n"); 21301 1: 16: return 0; 21302 -: 17:} 21303 21304 When you use the `-a' option, you will get individual block counts, 21305and the output looks like this: 21306 21307 -: 0:Source:tmp.c 21308 -: 0:Graph:tmp.gcno 21309 -: 0:Data:tmp.gcda 21310 -: 0:Runs:1 21311 -: 0:Programs:1 21312 -: 1:#include <stdio.h> 21313 -: 2: 21314 -: 3:int main (void) 21315 function main called 1 returned 1 blocks executed 75% 21316 1: 4:{ 21317 1: 4-block 0 21318 1: 5: int i, total; 21319 -: 6: 21320 1: 7: total = 0; 21321 -: 8: 21322 11: 9: for (i = 0; i < 10; i++) 21323 11: 9-block 0 21324 10: 10: total += i; 21325 10: 10-block 0 21326 -: 11: 21327 1: 12: if (total != 45) 21328 1: 12-block 0 21329 #####: 13: printf ("Failure\n"); 21330 $$$$$: 13-block 0 21331 -: 14: else 21332 1: 15: printf ("Success\n"); 21333 1: 15-block 0 21334 1: 16: return 0; 21335 1: 16-block 0 21336 -: 17:} 21337 21338 In this mode, each basic block is only shown on one line - the last 21339line of the block. A multi-line block will only contribute to the 21340execution count of that last line, and other lines will not be shown to 21341contain code, unless previous blocks end on those lines. The total 21342execution count of a line is shown and subsequent lines show the 21343execution counts for individual blocks that end on that line. After each 21344block, the branch and call counts of the block will be shown, if the 21345`-b' option is given. 21346 21347 Because of the way GCC instruments calls, a call count can be shown 21348after a line with no individual blocks. As you can see, line 13 21349contains a basic block that was not executed. 21350 21351 When you use the `-b' option, your output looks like this: 21352 21353 $ gcov -b tmp.c 21354 90.00% of 10 source lines executed in file tmp.c 21355 80.00% of 5 branches executed in file tmp.c 21356 80.00% of 5 branches taken at least once in file tmp.c 21357 50.00% of 2 calls executed in file tmp.c 21358 Creating tmp.c.gcov. 21359 21360 Here is a sample of a resulting `tmp.c.gcov' file: 21361 21362 -: 0:Source:tmp.c 21363 -: 0:Graph:tmp.gcno 21364 -: 0:Data:tmp.gcda 21365 -: 0:Runs:1 21366 -: 0:Programs:1 21367 -: 1:#include <stdio.h> 21368 -: 2: 21369 -: 3:int main (void) 21370 function main called 1 returned 1 blocks executed 75% 21371 1: 4:{ 21372 1: 5: int i, total; 21373 -: 6: 21374 1: 7: total = 0; 21375 -: 8: 21376 11: 9: for (i = 0; i < 10; i++) 21377 branch 0 taken 91% (fallthrough) 21378 branch 1 taken 9% 21379 10: 10: total += i; 21380 -: 11: 21381 1: 12: if (total != 45) 21382 branch 0 taken 0% (fallthrough) 21383 branch 1 taken 100% 21384 #####: 13: printf ("Failure\n"); 21385 call 0 never executed 21386 -: 14: else 21387 1: 15: printf ("Success\n"); 21388 call 0 called 1 returned 100% 21389 1: 16: return 0; 21390 -: 17:} 21391 21392 For each basic block, a line is printed after the last line of the 21393basic block describing the branch or call that ends the basic block. 21394There can be multiple branches and calls listed for a single source 21395line if there are multiple basic blocks that end on that line. In this 21396case, the branches and calls are each given a number. There is no 21397simple way to map these branches and calls back to source constructs. 21398In general, though, the lowest numbered branch or call will correspond 21399to the leftmost construct on the source line. 21400 21401 For a branch, if it was executed at least once, then a percentage 21402indicating the number of times the branch was taken divided by the 21403number of times the branch was executed will be printed. Otherwise, the 21404message "never executed" is printed. 21405 21406 For a call, if it was executed at least once, then a percentage 21407indicating the number of times the call returned divided by the number 21408of times the call was executed will be printed. This will usually be 21409100%, but may be less for functions call `exit' or `longjmp', and thus 21410may not return every time they are called. 21411 21412 The execution counts are cumulative. If the example program were 21413executed again without removing the `.gcda' file, the count for the 21414number of times each line in the source was executed would be added to 21415the results of the previous run(s). This is potentially useful in 21416several ways. For example, it could be used to accumulate data over a 21417number of program runs as part of a test verification suite, or to 21418provide more accurate long-term information over a large number of 21419program runs. 21420 21421 The data in the `.gcda' files is saved immediately before the program 21422exits. For each source file compiled with `-fprofile-arcs', the 21423profiling code first attempts to read in an existing `.gcda' file; if 21424the file doesn't match the executable (differing number of basic block 21425counts) it will ignore the contents of the file. It then adds in the 21426new execution counts and finally writes the data to the file. 21427 21428 21429File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 21430 214319.3 Using `gcov' with GCC Optimization 21432====================================== 21433 21434If you plan to use `gcov' to help optimize your code, you must first 21435compile your program with two special GCC options: `-fprofile-arcs 21436-ftest-coverage'. Aside from that, you can use any other GCC options; 21437but if you want to prove that every single line in your program was 21438executed, you should not compile with optimization at the same time. 21439On some machines the optimizer can eliminate some simple code lines by 21440combining them with other lines. For example, code like this: 21441 21442 if (a != b) 21443 c = 1; 21444 else 21445 c = 0; 21446 21447can be compiled into one instruction on some machines. In this case, 21448there is no way for `gcov' to calculate separate execution counts for 21449each line because there isn't separate code for each line. Hence the 21450`gcov' output looks like this if you compiled the program with 21451optimization: 21452 21453 100: 12:if (a != b) 21454 100: 13: c = 1; 21455 100: 14:else 21456 100: 15: c = 0; 21457 21458 The output shows that this block of code, combined by optimization, 21459executed 100 times. In one sense this result is correct, because there 21460was only one instruction representing all four of these lines. However, 21461the output does not indicate how many times the result was 0 and how 21462many times the result was 1. 21463 21464 Inlineable functions can create unexpected line counts. Line counts 21465are shown for the source code of the inlineable function, but what is 21466shown depends on where the function is inlined, or if it is not inlined 21467at all. 21468 21469 If the function is not inlined, the compiler must emit an out of line 21470copy of the function, in any object file that needs it. If `fileA.o' 21471and `fileB.o' both contain out of line bodies of a particular 21472inlineable function, they will also both contain coverage counts for 21473that function. When `fileA.o' and `fileB.o' are linked together, the 21474linker will, on many systems, select one of those out of line bodies 21475for all calls to that function, and remove or ignore the other. 21476Unfortunately, it will not remove the coverage counters for the unused 21477function body. Hence when instrumented, all but one use of that 21478function will show zero counts. 21479 21480 If the function is inlined in several places, the block structure in 21481each location might not be the same. For instance, a condition might 21482now be calculable at compile time in some instances. Because the 21483coverage of all the uses of the inline function will be shown for the 21484same source lines, the line counts themselves might seem inconsistent. 21485 21486 21487File: gcc.info, Node: Gcov Data Files, Prev: Gcov and Optimization, Up: Gcov 21488 214899.4 Brief description of `gcov' data files 21490========================================== 21491 21492`gcov' uses two files for profiling. The names of these files are 21493derived from the original _object_ file by substituting the file suffix 21494with either `.gcno', or `.gcda'. All of these files are placed in the 21495same directory as the object file, and contain data stored in a 21496platform-independent format. 21497 21498 The `.gcno' file is generated when the source file is compiled with 21499the GCC `-ftest-coverage' option. It contains information to 21500reconstruct the basic block graphs and assign source line numbers to 21501blocks. 21502 21503 The `.gcda' file is generated when a program containing object files 21504built with the GCC `-fprofile-arcs' option is executed. A separate 21505`.gcda' file is created for each object file compiled with this option. 21506It contains arc transition counts, and some summary information. 21507 21508 The full details of the file format is specified in `gcov-io.h', and 21509functions provided in that header file should be used to access the 21510coverage files. 21511 21512 21513File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 21514 2151510 Known Causes of Trouble with GCC 21516*********************************** 21517 21518This section describes known problems that affect users of GCC. Most 21519of these are not GCC bugs per se--if they were, we would fix them. But 21520the result for a user may be like the result of a bug. 21521 21522 Some of these problems are due to bugs in other software, some are 21523missing features that are too much work to add, and some are places 21524where people's opinions differ as to what is best. 21525 21526* Menu: 21527 21528* Actual Bugs:: Bugs we will fix later. 21529* Cross-Compiler Problems:: Common problems of cross compiling with GCC. 21530* Interoperation:: Problems using GCC with other compilers, 21531 and with certain linkers, assemblers and debuggers. 21532* External Bugs:: Problems compiling certain programs. 21533* Incompatibilities:: GCC is incompatible with traditional C. 21534* Fixed Headers:: GCC uses corrected versions of system header files. 21535 This is necessary, but doesn't always work smoothly. 21536* Standard Libraries:: GCC uses the system C library, which might not be 21537 compliant with the ISO C standard. 21538* Disappointments:: Regrettable things we can't change, but not quite bugs. 21539* C++ Misunderstandings:: Common misunderstandings with GNU C++. 21540* Protoize Caveats:: Things to watch out for when using `protoize'. 21541* Non-bugs:: Things we think are right, but some others disagree. 21542* Warnings and Errors:: Which problems in your code get warnings, 21543 and which get errors. 21544 21545 21546File: gcc.info, Node: Actual Bugs, Next: Cross-Compiler Problems, Up: Trouble 21547 2154810.1 Actual Bugs We Haven't Fixed Yet 21549===================================== 21550 21551 * The `fixincludes' script interacts badly with automounters; if the 21552 directory of system header files is automounted, it tends to be 21553 unmounted while `fixincludes' is running. This would seem to be a 21554 bug in the automounter. We don't know any good way to work around 21555 it. 21556 21557 * The `fixproto' script will sometimes add prototypes for the 21558 `sigsetjmp' and `siglongjmp' functions that reference the 21559 `jmp_buf' type before that type is defined. To work around this, 21560 edit the offending file and place the typedef in front of the 21561 prototypes. 21562 21563 * When `-pedantic-errors' is specified, GCC will incorrectly give an 21564 error message when a function name is specified in an expression 21565 involving the comma operator. 21566 21567 21568File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Actual Bugs, Up: Trouble 21569 2157010.2 Cross-Compiler Problems 21571============================ 21572 21573You may run into problems with cross compilation on certain machines, 21574for several reasons. 21575 21576 * Cross compilation can run into trouble for certain machines because 21577 some target machines' assemblers require floating point numbers to 21578 be written as _integer_ constants in certain contexts. 21579 21580 The compiler writes these integer constants by examining the 21581 floating point value as an integer and printing that integer, 21582 because this is simple to write and independent of the details of 21583 the floating point representation. But this does not work if the 21584 compiler is running on a different machine with an incompatible 21585 floating point format, or even a different byte-ordering. 21586 21587 In addition, correct constant folding of floating point values 21588 requires representing them in the target machine's format. (The C 21589 standard does not quite require this, but in practice it is the 21590 only way to win.) 21591 21592 It is now possible to overcome these problems by defining macros 21593 such as `REAL_VALUE_TYPE'. But doing so is a substantial amount of 21594 work for each target machine. *Note Cross Compilation and 21595 Floating Point: (gccint)Cross-compilation. 21596 21597 * At present, the program `mips-tfile' which adds debug support to 21598 object files on MIPS systems does not work in a cross compile 21599 environment. 21600 21601 21602File: gcc.info, Node: Interoperation, Next: External Bugs, Prev: Cross-Compiler Problems, Up: Trouble 21603 2160410.3 Interoperation 21605=================== 21606 21607This section lists various difficulties encountered in using GCC 21608together with other compilers or with the assemblers, linkers, 21609libraries and debuggers on certain systems. 21610 21611 * On many platforms, GCC supports a different ABI for C++ than do 21612 other compilers, so the object files compiled by GCC cannot be 21613 used with object files generated by another C++ compiler. 21614 21615 An area where the difference is most apparent is name mangling. 21616 The use of different name mangling is intentional, to protect you 21617 from more subtle problems. Compilers differ as to many internal 21618 details of C++ implementation, including: how class instances are 21619 laid out, how multiple inheritance is implemented, and how virtual 21620 function calls are handled. If the name encoding were made the 21621 same, your programs would link against libraries provided from 21622 other compilers--but the programs would then crash when run. 21623 Incompatible libraries are then detected at link time, rather than 21624 at run time. 21625 21626 * Older GDB versions sometimes fail to read the output of GCC version 21627 2. If you have trouble, get GDB version 4.4 or later. 21628 21629 * DBX rejects some files produced by GCC, though it accepts similar 21630 constructs in output from PCC. Until someone can supply a coherent 21631 description of what is valid DBX input and what is not, there is 21632 nothing that can be done about these problems. 21633 21634 * The GNU assembler (GAS) does not support PIC. To generate PIC 21635 code, you must use some other assembler, such as `/bin/as'. 21636 21637 * On some BSD systems, including some versions of Ultrix, use of 21638 profiling causes static variable destructors (currently used only 21639 in C++) not to be run. 21640 21641 * On some SGI systems, when you use `-lgl_s' as an option, it gets 21642 translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this 21643 does not happen when you use GCC. You must specify all three 21644 options explicitly. 21645 21646 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 21647 boundary, and it expects every `double' to be so aligned. The Sun 21648 compiler usually gives `double' values 8-byte alignment, with one 21649 exception: function arguments of type `double' may not be aligned. 21650 21651 As a result, if a function compiled with Sun CC takes the address 21652 of an argument of type `double' and passes this pointer of type 21653 `double *' to a function compiled with GCC, dereferencing the 21654 pointer may cause a fatal signal. 21655 21656 One way to solve this problem is to compile your entire program 21657 with GCC. Another solution is to modify the function that is 21658 compiled with Sun CC to copy the argument into a local variable; 21659 local variables are always properly aligned. A third solution is 21660 to modify the function that uses the pointer to dereference it via 21661 the following function `access_double' instead of directly with 21662 `*': 21663 21664 inline double 21665 access_double (double *unaligned_ptr) 21666 { 21667 union d2i { double d; int i[2]; }; 21668 21669 union d2i *p = (union d2i *) unaligned_ptr; 21670 union d2i u; 21671 21672 u.i[0] = p->i[0]; 21673 u.i[1] = p->i[1]; 21674 21675 return u.d; 21676 } 21677 21678 Storing into the pointer can be done likewise with the same union. 21679 21680 * On Solaris, the `malloc' function in the `libmalloc.a' library may 21681 allocate memory that is only 4 byte aligned. Since GCC on the 21682 SPARC assumes that doubles are 8 byte aligned, this may result in a 21683 fatal signal if doubles are stored in memory allocated by the 21684 `libmalloc.a' library. 21685 21686 The solution is to not use the `libmalloc.a' library. Use instead 21687 `malloc' and related functions from `libc.a'; they do not have 21688 this problem. 21689 21690 * Sun forgot to include a static version of `libdl.a' with some 21691 versions of SunOS (mainly 4.1). This results in undefined symbols 21692 when linking static binaries (that is, if you use `-static'). If 21693 you see undefined symbols `_dlclose', `_dlsym' or `_dlopen' when 21694 linking, compile and link against the file `mit/util/misc/dlsym.c' 21695 from the MIT version of X windows. 21696 21697 * The 128-bit long double format that the SPARC port supports 21698 currently works by using the architecturally defined quad-word 21699 floating point instructions. Since there is no hardware that 21700 supports these instructions they must be emulated by the operating 21701 system. Long doubles do not work in Sun OS versions 4.0.3 and 21702 earlier, because the kernel emulator uses an obsolete and 21703 incompatible format. Long doubles do not work in Sun OS version 21704 4.1.1 due to a problem in a Sun library. Long doubles do work on 21705 Sun OS versions 4.1.2 and higher, but GCC does not enable them by 21706 default. Long doubles appear to work in Sun OS 5.x (Solaris 2.x). 21707 21708 * On HP-UX version 9.01 on the HP PA, the HP compiler `cc' does not 21709 compile GCC correctly. We do not yet know why. However, GCC 21710 compiled on earlier HP-UX versions works properly on HP-UX 9.01 21711 and can compile itself properly on 9.01. 21712 21713 * On the HP PA machine, ADB sometimes fails to work on functions 21714 compiled with GCC. Specifically, it fails to work on functions 21715 that use `alloca' or variable-size arrays. This is because GCC 21716 doesn't generate HP-UX unwind descriptors for such functions. It 21717 may even be impossible to generate them. 21718 21719 * Debugging (`-g') is not supported on the HP PA machine, unless you 21720 use the preliminary GNU tools. 21721 21722 * Taking the address of a label may generate errors from the HP-UX 21723 PA assembler. GAS for the PA does not have this problem. 21724 21725 * Using floating point parameters for indirect calls to static 21726 functions will not work when using the HP assembler. There simply 21727 is no way for GCC to specify what registers hold arguments for 21728 static functions when using the HP assembler. GAS for the PA does 21729 not have this problem. 21730 21731 * In extremely rare cases involving some very large functions you may 21732 receive errors from the HP linker complaining about an out of 21733 bounds unconditional branch offset. This used to occur more often 21734 in previous versions of GCC, but is now exceptionally rare. If 21735 you should run into it, you can work around by making your 21736 function smaller. 21737 21738 * GCC compiled code sometimes emits warnings from the HP-UX 21739 assembler of the form: 21740 21741 (warning) Use of GR3 when 21742 frame >= 8192 may cause conflict. 21743 21744 These warnings are harmless and can be safely ignored. 21745 21746 * On the IBM RS/6000, compiling code of the form 21747 21748 extern int foo; 21749 21750 ... foo ... 21751 21752 static int foo; 21753 21754 will cause the linker to report an undefined symbol `foo'. 21755 Although this behavior differs from most other systems, it is not a 21756 bug because redefining an `extern' variable as `static' is 21757 undefined in ISO C. 21758 21759 * In extremely rare cases involving some very large functions you may 21760 receive errors from the AIX Assembler complaining about a 21761 displacement that is too large. If you should run into it, you 21762 can work around by making your function smaller. 21763 21764 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 21765 semantics which merges global symbols between libraries and 21766 applications, especially necessary for C++ streams functionality. 21767 This is not the default behavior of AIX shared libraries and 21768 dynamic linking. `libstdc++.a' is built on AIX with 21769 "runtime-linking" enabled so that symbol merging can occur. To 21770 utilize this feature, the application linked with `libstdc++.a' 21771 must include the `-Wl,-brtl' flag on the link line. G++ cannot 21772 impose this because this option may interfere with the semantics 21773 of the user program and users may not always use `g++' to link his 21774 or her application. Applications are not required to use the 21775 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 21776 library which is not dependent on the symbol merging semantics 21777 will continue to function correctly. 21778 21779 * An application can interpose its own definition of functions for 21780 functions invoked by `libstdc++.a' with "runtime-linking" enabled 21781 on AIX. To accomplish this the application must be linked with 21782 "runtime-linking" option and the functions explicitly must be 21783 exported by the application (`-Wl,-brtl,-bE:exportfile'). 21784 21785 * AIX on the RS/6000 provides support (NLS) for environments outside 21786 of the United States. Compilers and assemblers use NLS to support 21787 locale-specific representations of various objects including 21788 floating-point numbers (`.' vs `,' for separating decimal 21789 fractions). There have been problems reported where the library 21790 linked with GCC does not produce the same floating-point formats 21791 that the assembler accepts. If you have this problem, set the 21792 `LANG' environment variable to `C' or `En_US'. 21793 21794 * Even if you specify `-fdollars-in-identifiers', you cannot 21795 successfully use `$' in identifiers on the RS/6000 due to a 21796 restriction in the IBM assembler. GAS supports these identifiers. 21797 21798 * On Ultrix, the Fortran compiler expects registers 2 through 5 to 21799 be saved by function calls. However, the C compiler uses 21800 conventions compatible with BSD Unix: registers 2 through 5 may be 21801 clobbered by function calls. 21802 21803 GCC uses the same convention as the Ultrix C compiler. You can use 21804 these options to produce code compatible with the Fortran compiler: 21805 21806 -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5 21807 21808 * On the Alpha, you may get assembler errors about invalid syntax as 21809 a result of floating point constants. This is due to a bug in the 21810 C library functions `ecvt', `fcvt' and `gcvt'. Given valid 21811 floating point numbers, they sometimes print `NaN'. 21812 21813 21814File: gcc.info, Node: External Bugs, Next: Incompatibilities, Prev: Interoperation, Up: Trouble 21815 2181610.4 Problems Compiling Certain Programs 21817======================================== 21818 21819Certain programs have problems compiling. 21820 21821 * Parse errors may occur compiling X11 on a Decstation running 21822 Ultrix 4.2 because of problems in DEC's versions of the X11 header 21823 files `X11/Xlib.h' and `X11/Xutil.h'. People recommend adding 21824 `-I/usr/include/mit' to use the MIT versions of the header files, 21825 or fixing the header files by adding this: 21826 21827 #ifdef __STDC__ 21828 #define NeedFunctionPrototypes 0 21829 #endif 21830 21831 * On various 386 Unix systems derived from System V, including SCO, 21832 ISC, and ESIX, you may get error messages about running out of 21833 virtual memory while compiling certain programs. 21834 21835 You can prevent this problem by linking GCC with the GNU malloc 21836 (which thus replaces the malloc that comes with the system). GNU 21837 malloc is available as a separate package, and also in the file 21838 `src/gmalloc.c' in the GNU Emacs 19 distribution. 21839 21840 If you have installed GNU malloc as a separate library package, 21841 use this option when you relink GCC: 21842 21843 MALLOC=/usr/local/lib/libgmalloc.a 21844 21845 Alternatively, if you have compiled `gmalloc.c' from Emacs 19, copy 21846 the object file to `gmalloc.o' and use this option when you relink 21847 GCC: 21848 21849 MALLOC=gmalloc.o 21850 21851 21852File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: External Bugs, Up: Trouble 21853 2185410.5 Incompatibilities of GCC 21855============================= 21856 21857There are several noteworthy incompatibilities between GNU C and K&R 21858(non-ISO) versions of C. 21859 21860 * GCC normally makes string constants read-only. If several 21861 identical-looking string constants are used, GCC stores only one 21862 copy of the string. 21863 21864 One consequence is that you cannot call `mktemp' with a string 21865 constant argument. The function `mktemp' always alters the string 21866 its argument points to. 21867 21868 Another consequence is that `sscanf' does not work on some systems 21869 when passed a string constant as its format control string or 21870 input. This is because `sscanf' incorrectly tries to write into 21871 the string constant. Likewise `fscanf' and `scanf'. 21872 21873 The best solution to these problems is to change the program to use 21874 `char'-array variables with initialization strings for these 21875 purposes instead of string constants. But if this is not possible, 21876 you can use the `-fwritable-strings' flag, which directs GCC to 21877 handle string constants the same way most C compilers do. 21878 21879 * `-2147483648' is positive. 21880 21881 This is because 2147483648 cannot fit in the type `int', so 21882 (following the ISO C rules) its data type is `unsigned long int'. 21883 Negating this value yields 2147483648 again. 21884 21885 * GCC does not substitute macro arguments when they appear inside of 21886 string constants. For example, the following macro in GCC 21887 21888 #define foo(a) "a" 21889 21890 will produce output `"a"' regardless of what the argument A is. 21891 21892 * When you use `setjmp' and `longjmp', the only automatic variables 21893 guaranteed to remain valid are those declared `volatile'. This is 21894 a consequence of automatic register allocation. Consider this 21895 function: 21896 21897 jmp_buf j; 21898 21899 foo () 21900 { 21901 int a, b; 21902 21903 a = fun1 (); 21904 if (setjmp (j)) 21905 return a; 21906 21907 a = fun2 (); 21908 /* `longjmp (j)' may occur in `fun3'. */ 21909 return a + fun3 (); 21910 } 21911 21912 Here `a' may or may not be restored to its first value when the 21913 `longjmp' occurs. If `a' is allocated in a register, then its 21914 first value is restored; otherwise, it keeps the last value stored 21915 in it. 21916 21917 If you use the `-W' option with the `-O' option, you will get a 21918 warning when GCC thinks such a problem might be possible. 21919 21920 * Programs that use preprocessing directives in the middle of macro 21921 arguments do not work with GCC. For example, a program like this 21922 will not work: 21923 21924 foobar ( 21925 #define luser 21926 hack) 21927 21928 ISO C does not permit such a construct. 21929 21930 * K&R compilers allow comments to cross over an inclusion boundary 21931 (i.e. started in an include file and ended in the including file). 21932 21933 * Declarations of external variables and functions within a block 21934 apply only to the block containing the declaration. In other 21935 words, they have the same scope as any other declaration in the 21936 same place. 21937 21938 In some other C compilers, a `extern' declaration affects all the 21939 rest of the file even if it happens within a block. 21940 21941 * In traditional C, you can combine `long', etc., with a typedef 21942 name, as shown here: 21943 21944 typedef int foo; 21945 typedef long foo bar; 21946 21947 In ISO C, this is not allowed: `long' and other type modifiers 21948 require an explicit `int'. 21949 21950 * PCC allows typedef names to be used as function parameters. 21951 21952 * Traditional C allows the following erroneous pair of declarations 21953 to appear together in a given scope: 21954 21955 typedef int foo; 21956 typedef foo foo; 21957 21958 * GCC treats all characters of identifiers as significant. 21959 According to K&R-1 (2.2), "No more than the first eight characters 21960 are significant, although more may be used.". Also according to 21961 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 21962 the first character must be a letter. The underscore _ counts as 21963 a letter.", but GCC also allows dollar signs in identifiers. 21964 21965 * PCC allows whitespace in the middle of compound assignment 21966 operators such as `+='. GCC, following the ISO standard, does not 21967 allow this. 21968 21969 * GCC complains about unterminated character constants inside of 21970 preprocessing conditionals that fail. Some programs have English 21971 comments enclosed in conditionals that are guaranteed to fail; if 21972 these comments contain apostrophes, GCC will probably report an 21973 error. For example, this code would produce an error: 21974 21975 #if 0 21976 You can't expect this to work. 21977 #endif 21978 21979 The best solution to such a problem is to put the text into an 21980 actual C comment delimited by `/*...*/'. 21981 21982 * Many user programs contain the declaration `long time ();'. In the 21983 past, the system header files on many systems did not actually 21984 declare `time', so it did not matter what type your program 21985 declared it to return. But in systems with ISO C headers, `time' 21986 is declared to return `time_t', and if that is not the same as 21987 `long', then `long time ();' is erroneous. 21988 21989 The solution is to change your program to use appropriate system 21990 headers (`<time.h>' on systems with ISO C headers) and not to 21991 declare `time' if the system header files declare it, or failing 21992 that to use `time_t' as the return type of `time'. 21993 21994 * When compiling functions that return `float', PCC converts it to a 21995 double. GCC actually returns a `float'. If you are concerned 21996 with PCC compatibility, you should declare your functions to return 21997 `double'; you might as well say what you mean. 21998 21999 * When compiling functions that return structures or unions, GCC 22000 output code normally uses a method different from that used on most 22001 versions of Unix. As a result, code compiled with GCC cannot call 22002 a structure-returning function compiled with PCC, and vice versa. 22003 22004 The method used by GCC is as follows: a structure or union which is 22005 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 22006 union with any other size is stored into an address supplied by 22007 the caller (usually in a special, fixed register, but on some 22008 machines it is passed on the stack). The target hook 22009 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 22010 22011 By contrast, PCC on most target machines returns structures and 22012 unions of any size by copying the data into an area of static 22013 storage, and then returning the address of that storage as if it 22014 were a pointer value. The caller must copy the data from that 22015 memory area to the place where the value is wanted. GCC does not 22016 use this method because it is slower and nonreentrant. 22017 22018 On some newer machines, PCC uses a reentrant convention for all 22019 structure and union returning. GCC on most of these machines uses 22020 a compatible convention when returning structures and unions in 22021 memory, but still returns small structures and unions in registers. 22022 22023 You can tell GCC to use a compatible convention for all structure 22024 and union returning with the option `-fpcc-struct-return'. 22025 22026 * GCC complains about program fragments such as `0x74ae-0x4000' 22027 which appear to be two hexadecimal constants separated by the minus 22028 operator. Actually, this string is a single "preprocessing token". 22029 Each such token must correspond to one token in C. Since this 22030 does not, GCC prints an error message. Although it may appear 22031 obvious that what is meant is an operator and two values, the ISO 22032 C standard specifically requires that this be treated as erroneous. 22033 22034 A "preprocessing token" is a "preprocessing number" if it begins 22035 with a digit and is followed by letters, underscores, digits, 22036 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 22037 character sequences. (In strict C89 mode, the sequences `p+', 22038 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 22039 22040 To make the above program fragment valid, place whitespace in 22041 front of the minus sign. This whitespace will end the 22042 preprocessing number. 22043 22044 22045File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 22046 2204710.6 Fixed Header Files 22048======================= 22049 22050GCC needs to install corrected versions of some system header files. 22051This is because most target systems have some header files that won't 22052work with GCC unless they are changed. Some have bugs, some are 22053incompatible with ISO C, and some depend on special features of other 22054compilers. 22055 22056 Installing GCC automatically creates and installs the fixed header 22057files, by running a program called `fixincludes' (or for certain 22058targets an alternative such as `fixinc.svr4'). Normally, you don't 22059need to pay attention to this. But there are cases where it doesn't do 22060the right thing automatically. 22061 22062 * If you update the system's header files, such as by installing a 22063 new system version, the fixed header files of GCC are not 22064 automatically updated. The easiest way to update them is to 22065 reinstall GCC. (If you want to be clever, look in the makefile 22066 and you can find a shortcut.) 22067 22068 * On some systems, in particular SunOS 4, header file directories 22069 contain machine-specific symbolic links in certain places. This 22070 makes it possible to share most of the header files among hosts 22071 running the same version of SunOS 4 on different machine models. 22072 22073 The programs that fix the header files do not understand this 22074 special way of using symbolic links; therefore, the directory of 22075 fixed header files is good only for the machine model used to 22076 build it. 22077 22078 In SunOS 4, only programs that look inside the kernel will notice 22079 the difference between machine models. Therefore, for most 22080 purposes, you need not be concerned about this. 22081 22082 It is possible to make separate sets of fixed header files for the 22083 different machine models, and arrange a structure of symbolic 22084 links so as to use the proper set, but you'll have to do this by 22085 hand. 22086 22087 * On Lynxos, GCC by default does not fix the header files. This is 22088 because bugs in the shell cause the `fixincludes' script to fail. 22089 22090 This means you will encounter problems due to bugs in the system 22091 header files. It may be no comfort that they aren't GCC's fault, 22092 but it does mean that there's nothing for us to do about them. 22093 22094 22095File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 22096 2209710.7 Standard Libraries 22098======================= 22099 22100GCC by itself attempts to be a conforming freestanding implementation. 22101*Note Language Standards Supported by GCC: Standards, for details of 22102what this means. Beyond the library facilities required of such an 22103implementation, the rest of the C library is supplied by the vendor of 22104the operating system. If that C library doesn't conform to the C 22105standards, then your programs might get warnings (especially when using 22106`-Wall') that you don't expect. 22107 22108 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 22109while the C standard says that `sprintf' returns an `int'. The 22110`fixincludes' program could make the prototype for this function match 22111the Standard, but that would be wrong, since the function will still 22112return `char *'. 22113 22114 If you need a Standard compliant library, then you need to find one, as 22115GCC does not provide one. The GNU C library (called `glibc') provides 22116ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 22117HURD-based GNU systems; no recent version of it supports other systems, 22118though some very old versions did. Version 2.2 of the GNU C library 22119includes nearly complete C99 support. You could also ask your 22120operating system vendor if newer libraries are available. 22121 22122 22123File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 22124 2212510.8 Disappointments and Misunderstandings 22126========================================== 22127 22128These problems are perhaps regrettable, but we don't know any practical 22129way around them. 22130 22131 * Certain local variables aren't recognized by debuggers when you 22132 compile with optimization. 22133 22134 This occurs because sometimes GCC optimizes the variable out of 22135 existence. There is no way to tell the debugger how to compute the 22136 value such a variable "would have had", and it is not clear that 22137 would be desirable anyway. So GCC simply does not mention the 22138 eliminated variable when it writes debugging information. 22139 22140 You have to expect a certain amount of disagreement between the 22141 executable and your source code, when you use optimization. 22142 22143 * Users often think it is a bug when GCC reports an error for code 22144 like this: 22145 22146 int foo (struct mumble *); 22147 22148 struct mumble { ... }; 22149 22150 int foo (struct mumble *x) 22151 { ... } 22152 22153 This code really is erroneous, because the scope of `struct 22154 mumble' in the prototype is limited to the argument list 22155 containing it. It does not refer to the `struct mumble' defined 22156 with file scope immediately below--they are two unrelated types 22157 with similar names in different scopes. 22158 22159 But in the definition of `foo', the file-scope type is used 22160 because that is available to be inherited. Thus, the definition 22161 and the prototype do not match, and you get an error. 22162 22163 This behavior may seem silly, but it's what the ISO standard 22164 specifies. It is easy enough for you to make your code work by 22165 moving the definition of `struct mumble' above the prototype. 22166 It's not worth being incompatible with ISO C just to avoid an 22167 error for the example shown above. 22168 22169 * Accesses to bit-fields even in volatile objects works by accessing 22170 larger objects, such as a byte or a word. You cannot rely on what 22171 size of object is accessed in order to read or write the 22172 bit-field; it may even vary for a given bit-field according to the 22173 precise usage. 22174 22175 If you care about controlling the amount of memory that is 22176 accessed, use volatile but do not use bit-fields. 22177 22178 * GCC comes with shell scripts to fix certain known problems in 22179 system header files. They install corrected copies of various 22180 header files in a special directory where only GCC will normally 22181 look for them. The scripts adapt to various systems by searching 22182 all the system header files for the problem cases that we know 22183 about. 22184 22185 If new system header files are installed, nothing automatically 22186 arranges to update the corrected header files. You will have to 22187 reinstall GCC to fix the new header files. More specifically, go 22188 to the build directory and delete the files `stmp-fixinc' and 22189 `stmp-headers', and the subdirectory `include'; then do `make 22190 install' again. 22191 22192 * On 68000 and x86 systems, for instance, you can get paradoxical 22193 results if you test the precise values of floating point numbers. 22194 For example, you can find that a floating point value which is not 22195 a NaN is not equal to itself. This results from the fact that the 22196 floating point registers hold a few more bits of precision than 22197 fit in a `double' in memory. Compiled code moves values between 22198 memory and floating point registers at its convenience, and moving 22199 them into memory truncates them. 22200 22201 You can partially avoid this problem by using the `-ffloat-store' 22202 option (*note Optimize Options::). 22203 22204 * On AIX and other platforms without weak symbol support, templates 22205 need to be instantiated explicitly and symbols for static members 22206 of templates will not be generated. 22207 22208 * On AIX, GCC scans object files and library archives for static 22209 constructors and destructors when linking an application before the 22210 linker prunes unreferenced symbols. This is necessary to prevent 22211 the AIX linker from mistakenly assuming that static constructor or 22212 destructor are unused and removing them before the scanning can 22213 occur. All static constructors and destructors found will be 22214 referenced even though the modules in which they occur may not be 22215 used by the program. This may lead to both increased executable 22216 size and unexpected symbol references. 22217 22218 22219File: gcc.info, Node: C++ Misunderstandings, Next: Protoize Caveats, Prev: Disappointments, Up: Trouble 22220 2222110.9 Common Misunderstandings with GNU C++ 22222========================================== 22223 22224C++ is a complex language and an evolving one, and its standard 22225definition (the ISO C++ standard) was only recently completed. As a 22226result, your C++ compiler may occasionally surprise you, even when its 22227behavior is correct. This section discusses some areas that frequently 22228give rise to questions of this sort. 22229 22230* Menu: 22231 22232* Static Definitions:: Static member declarations are not definitions 22233* Name lookup:: Name lookup, templates, and accessing members of base classes 22234* Temporaries:: Temporaries may vanish before you expect 22235* Copy Assignment:: Copy Assignment operators copy virtual bases twice 22236 22237 22238File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 22239 2224010.9.1 Declare _and_ Define Static Members 22241------------------------------------------ 22242 22243When a class has static data members, it is not enough to _declare_ the 22244static member; you must also _define_ it. For example: 22245 22246 class Foo 22247 { 22248 ... 22249 void method(); 22250 static int bar; 22251 }; 22252 22253 This declaration only establishes that the class `Foo' has an `int' 22254named `Foo::bar', and a member function named `Foo::method'. But you 22255still need to define _both_ `method' and `bar' elsewhere. According to 22256the ISO standard, you must supply an initializer in one (and only one) 22257source file, such as: 22258 22259 int Foo::bar = 0; 22260 22261 Other C++ compilers may not correctly implement the standard behavior. 22262As a result, when you switch to `g++' from one of these compilers, you 22263may discover that a program that appeared to work correctly in fact 22264does not conform to the standard: `g++' reports as undefined symbols 22265any static data members that lack definitions. 22266 22267 22268File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 22269 2227010.9.2 Name lookup, templates, and accessing members of base classes 22271-------------------------------------------------------------------- 22272 22273The C++ standard prescribes that all names that are not dependent on 22274template parameters are bound to their present definitions when parsing 22275a template function or class.(1) Only names that are dependent are 22276looked up at the point of instantiation. For example, consider 22277 22278 void foo(double); 22279 22280 struct A { 22281 template <typename T> 22282 void f () { 22283 foo (1); // 1 22284 int i = N; // 2 22285 T t; 22286 t.bar(); // 3 22287 foo (t); // 4 22288 } 22289 22290 static const int N; 22291 }; 22292 22293 Here, the names `foo' and `N' appear in a context that does not depend 22294on the type of `T'. The compiler will thus require that they are 22295defined in the context of use in the template, not only before the 22296point of instantiation, and will here use `::foo(double)' and `A::N', 22297respectively. In particular, it will convert the integer value to a 22298`double' when passing it to `::foo(double)'. 22299 22300 Conversely, `bar' and the call to `foo' in the fourth marked line are 22301used in contexts that do depend on the type of `T', so they are only 22302looked up at the point of instantiation, and you can provide 22303declarations for them after declaring the template, but before 22304instantiating it. In particular, if you instantiate `A::f<int>', the 22305last line will call an overloaded `::foo(int)' if one was provided, 22306even if after the declaration of `struct A'. 22307 22308 This distinction between lookup of dependent and non-dependent names is 22309called two-stage (or dependent) name lookup. G++ implements it since 22310version 3.4. 22311 22312 Two-stage name lookup sometimes leads to situations with behavior 22313different from non-template codes. The most common is probably this: 22314 22315 template <typename T> struct Base { 22316 int i; 22317 }; 22318 22319 template <typename T> struct Derived : public Base<T> { 22320 int get_i() { return i; } 22321 }; 22322 22323 In `get_i()', `i' is not used in a dependent context, so the compiler 22324will look for a name declared at the enclosing namespace scope (which 22325is the global scope here). It will not look into the base class, since 22326that is dependent and you may declare specializations of `Base' even 22327after declaring `Derived', so the compiler can't really know what `i' 22328would refer to. If there is no global variable `i', then you will get 22329an error message. 22330 22331 In order to make it clear that you want the member of the base class, 22332you need to defer lookup until instantiation time, at which the base 22333class is known. For this, you need to access `i' in a dependent 22334context, by either using `this->i' (remember that `this' is of type 22335`Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 22336Alternatively, `Base<T>::i' might be brought into scope by a 22337`using'-declaration. 22338 22339 Another, similar example involves calling member functions of a base 22340class: 22341 22342 template <typename T> struct Base { 22343 int f(); 22344 }; 22345 22346 template <typename T> struct Derived : Base<T> { 22347 int g() { return f(); }; 22348 }; 22349 22350 Again, the call to `f()' is not dependent on template arguments (there 22351are no arguments that depend on the type `T', and it is also not 22352otherwise specified that the call should be in a dependent context). 22353Thus a global declaration of such a function must be available, since 22354the one in the base class is not visible until instantiation time. The 22355compiler will consequently produce the following error message: 22356 22357 x.cc: In member function `int Derived<T>::g()': 22358 x.cc:6: error: there are no arguments to `f' that depend on a template 22359 parameter, so a declaration of `f' must be available 22360 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 22361 allowing the use of an undeclared name is deprecated) 22362 22363 To make the code valid either use `this->f()', or `Base<T>::f()'. 22364Using the `-fpermissive' flag will also let the compiler accept the 22365code, by marking all function calls for which no declaration is visible 22366at the time of definition of the template for later lookup at 22367instantiation time, as if it were a dependent call. We do not 22368recommend using `-fpermissive' to work around invalid code, and it will 22369also only catch cases where functions in base classes are called, not 22370where variables in base classes are used (as in the example above). 22371 22372 Note that some compilers (including G++ versions prior to 3.4) get 22373these examples wrong and accept above code without an error. Those 22374compilers do not implement two-stage name lookup correctly. 22375 22376 ---------- Footnotes ---------- 22377 22378 (1) The C++ standard just uses the term "dependent" for names that 22379depend on the type or value of template parameters. This shorter term 22380will also be used in the rest of this section. 22381 22382 22383File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 22384 2238510.9.3 Temporaries May Vanish Before You Expect 22386----------------------------------------------- 22387 22388It is dangerous to use pointers or references to _portions_ of a 22389temporary object. The compiler may very well delete the object before 22390you expect it to, leaving a pointer to garbage. The most common place 22391where this problem crops up is in classes like string classes, 22392especially ones that define a conversion function to type `char *' or 22393`const char *'--which is one reason why the standard `string' class 22394requires you to call the `c_str' member function. However, any class 22395that returns a pointer to some internal structure is potentially 22396subject to this problem. 22397 22398 For example, a program may use a function `strfunc' that returns 22399`string' objects, and another function `charfunc' that operates on 22400pointers to `char': 22401 22402 string strfunc (); 22403 void charfunc (const char *); 22404 22405 void 22406 f () 22407 { 22408 const char *p = strfunc().c_str(); 22409 ... 22410 charfunc (p); 22411 ... 22412 charfunc (p); 22413 } 22414 22415In this situation, it may seem reasonable to save a pointer to the C 22416string returned by the `c_str' member function and use that rather than 22417call `c_str' repeatedly. However, the temporary string created by the 22418call to `strfunc' is destroyed after `p' is initialized, at which point 22419`p' is left pointing to freed memory. 22420 22421 Code like this may run successfully under some other compilers, 22422particularly obsolete cfront-based compilers that delete temporaries 22423along with normal local variables. However, the GNU C++ behavior is 22424standard-conforming, so if your program depends on late destruction of 22425temporaries it is not portable. 22426 22427 The safe way to write such code is to give the temporary a name, which 22428forces it to remain until the end of the scope of the name. For 22429example: 22430 22431 const string& tmp = strfunc (); 22432 charfunc (tmp.c_str ()); 22433 22434 22435File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 22436 2243710.9.4 Implicit Copy-Assignment for Virtual Bases 22438------------------------------------------------- 22439 22440When a base class is virtual, only one subobject of the base class 22441belongs to each full object. Also, the constructors and destructors are 22442invoked only once, and called from the most-derived class. However, 22443such objects behave unspecified when being assigned. For example: 22444 22445 struct Base{ 22446 char *name; 22447 Base(char *n) : name(strdup(n)){} 22448 Base& operator= (const Base& other){ 22449 free (name); 22450 name = strdup (other.name); 22451 } 22452 }; 22453 22454 struct A:virtual Base{ 22455 int val; 22456 A():Base("A"){} 22457 }; 22458 22459 struct B:virtual Base{ 22460 int bval; 22461 B():Base("B"){} 22462 }; 22463 22464 struct Derived:public A, public B{ 22465 Derived():Base("Derived"){} 22466 }; 22467 22468 void func(Derived &d1, Derived &d2) 22469 { 22470 d1 = d2; 22471 } 22472 22473 The C++ standard specifies that `Base::Base' is only called once when 22474constructing or copy-constructing a Derived object. It is unspecified 22475whether `Base::operator=' is called more than once when the implicit 22476copy-assignment for Derived objects is invoked (as it is inside `func' 22477in the example). 22478 22479 G++ implements the "intuitive" algorithm for copy-assignment: assign 22480all direct bases, then assign all members. In that algorithm, the 22481virtual base subobject can be encountered more than once. In the 22482example, copying proceeds in the following order: `val', `name' (via 22483`strdup'), `bval', and `name' again. 22484 22485 If application code relies on copy-assignment, a user-defined 22486copy-assignment operator removes any uncertainties. With such an 22487operator, the application can define whether and how the virtual base 22488subobject is assigned. 22489 22490 22491File: gcc.info, Node: Protoize Caveats, Next: Non-bugs, Prev: C++ Misunderstandings, Up: Trouble 22492 2249310.10 Caveats of using `protoize' 22494================================= 22495 22496The conversion programs `protoize' and `unprotoize' can sometimes 22497change a source file in a way that won't work unless you rearrange it. 22498 22499 * `protoize' can insert references to a type name or type tag before 22500 the definition, or in a file where they are not defined. 22501 22502 If this happens, compiler error messages should show you where the 22503 new references are, so fixing the file by hand is straightforward. 22504 22505 * There are some C constructs which `protoize' cannot figure out. 22506 For example, it can't determine argument types for declaring a 22507 pointer-to-function variable; this you must do by hand. `protoize' 22508 inserts a comment containing `???' each time it finds such a 22509 variable; so you can find all such variables by searching for this 22510 string. ISO C does not require declaring the argument types of 22511 pointer-to-function types. 22512 22513 * Using `unprotoize' can easily introduce bugs. If the program 22514 relied on prototypes to bring about conversion of arguments, these 22515 conversions will not take place in the program without prototypes. 22516 One case in which you can be sure `unprotoize' is safe is when you 22517 are removing prototypes that were made with `protoize'; if the 22518 program worked before without any prototypes, it will work again 22519 without them. 22520 22521 You can find all the places where this problem might occur by 22522 compiling the program with the `-Wconversion' option. It prints a 22523 warning whenever an argument is converted. 22524 22525 * Both conversion programs can be confused if there are macro calls 22526 in and around the text to be converted. In other words, the 22527 standard syntax for a declaration or definition must not result 22528 from expanding a macro. This problem is inherent in the design of 22529 C and cannot be fixed. If only a few functions have confusing 22530 macro calls, you can easily convert them manually. 22531 22532 * `protoize' cannot get the argument types for a function whose 22533 definition was not actually compiled due to preprocessing 22534 conditionals. When this happens, `protoize' changes nothing in 22535 regard to such a function. `protoize' tries to detect such 22536 instances and warn about them. 22537 22538 You can generally work around this problem by using `protoize' step 22539 by step, each time specifying a different set of `-D' options for 22540 compilation, until all of the functions have been converted. 22541 There is no automatic way to verify that you have got them all, 22542 however. 22543 22544 * Confusion may result if there is an occasion to convert a function 22545 declaration or definition in a region of source code where there 22546 is more than one formal parameter list present. Thus, attempts to 22547 convert code containing multiple (conditionally compiled) versions 22548 of a single function header (in the same vicinity) may not produce 22549 the desired (or expected) results. 22550 22551 If you plan on converting source files which contain such code, it 22552 is recommended that you first make sure that each conditionally 22553 compiled region of source code which contains an alternative 22554 function header also contains at least one additional follower 22555 token (past the final right parenthesis of the function header). 22556 This should circumvent the problem. 22557 22558 * `unprotoize' can become confused when trying to convert a function 22559 definition or declaration which contains a declaration for a 22560 pointer-to-function formal argument which has the same name as the 22561 function being defined or declared. We recommend you avoid such 22562 choices of formal parameter names. 22563 22564 * You might also want to correct some of the indentation by hand and 22565 break long lines. (The conversion programs don't write lines 22566 longer than eighty characters in any case.) 22567 22568 22569File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Protoize Caveats, Up: Trouble 22570 2257110.11 Certain Changes We Don't Want to Make 22572=========================================== 22573 22574This section lists changes that people frequently request, but which we 22575do not make because we think GCC is better without them. 22576 22577 * Checking the number and type of arguments to a function which has 22578 an old-fashioned definition and no prototype. 22579 22580 Such a feature would work only occasionally--only for calls that 22581 appear in the same file as the called function, following the 22582 definition. The only way to check all calls reliably is to add a 22583 prototype for the function. But adding a prototype eliminates the 22584 motivation for this feature. So the feature is not worthwhile. 22585 22586 * Warning about using an expression whose type is signed as a shift 22587 count. 22588 22589 Shift count operands are probably signed more often than unsigned. 22590 Warning about this would cause far more annoyance than good. 22591 22592 * Warning about assigning a signed value to an unsigned variable. 22593 22594 Such assignments must be very common; warning about them would 22595 cause more annoyance than good. 22596 22597 * Warning when a non-void function value is ignored. 22598 22599 C contains many standard functions that return a value that most 22600 programs choose to ignore. One obvious example is `printf'. 22601 Warning about this practice only leads the defensive programmer to 22602 clutter programs with dozens of casts to `void'. Such casts are 22603 required so frequently that they become visual noise. Writing 22604 those casts becomes so automatic that they no longer convey useful 22605 information about the intentions of the programmer. For functions 22606 where the return value should never be ignored, use the 22607 `warn_unused_result' function attribute (*note Function 22608 Attributes::). 22609 22610 * Making `-fshort-enums' the default. 22611 22612 This would cause storage layout to be incompatible with most other 22613 C compilers. And it doesn't seem very important, given that you 22614 can get the same result in other ways. The case where it matters 22615 most is when the enumeration-valued object is inside a structure, 22616 and in that case you can specify a field width explicitly. 22617 22618 * Making bit-fields unsigned by default on particular machines where 22619 "the ABI standard" says to do so. 22620 22621 The ISO C standard leaves it up to the implementation whether a 22622 bit-field declared plain `int' is signed or not. This in effect 22623 creates two alternative dialects of C. 22624 22625 The GNU C compiler supports both dialects; you can specify the 22626 signed dialect with `-fsigned-bitfields' and the unsigned dialect 22627 with `-funsigned-bitfields'. However, this leaves open the 22628 question of which dialect to use by default. 22629 22630 Currently, the preferred dialect makes plain bit-fields signed, 22631 because this is simplest. Since `int' is the same as `signed int' 22632 in every other context, it is cleanest for them to be the same in 22633 bit-fields as well. 22634 22635 Some computer manufacturers have published Application Binary 22636 Interface standards which specify that plain bit-fields should be 22637 unsigned. It is a mistake, however, to say anything about this 22638 issue in an ABI. This is because the handling of plain bit-fields 22639 distinguishes two dialects of C. Both dialects are meaningful on 22640 every type of machine. Whether a particular object file was 22641 compiled using signed bit-fields or unsigned is of no concern to 22642 other object files, even if they access the same bit-fields in the 22643 same data structures. 22644 22645 A given program is written in one or the other of these two 22646 dialects. The program stands a chance to work on most any machine 22647 if it is compiled with the proper dialect. It is unlikely to work 22648 at all if compiled with the wrong dialect. 22649 22650 Many users appreciate the GNU C compiler because it provides an 22651 environment that is uniform across machines. These users would be 22652 inconvenienced if the compiler treated plain bit-fields 22653 differently on certain machines. 22654 22655 Occasionally users write programs intended only for a particular 22656 machine type. On these occasions, the users would benefit if the 22657 GNU C compiler were to support by default the same dialect as the 22658 other compilers on that machine. But such applications are rare. 22659 And users writing a program to run on more than one type of 22660 machine cannot possibly benefit from this kind of compatibility. 22661 22662 This is why GCC does and will treat plain bit-fields in the same 22663 fashion on all types of machines (by default). 22664 22665 There are some arguments for making bit-fields unsigned by default 22666 on all machines. If, for example, this becomes a universal de 22667 facto standard, it would make sense for GCC to go along with it. 22668 This is something to be considered in the future. 22669 22670 (Of course, users strongly concerned about portability should 22671 indicate explicitly in each bit-field whether it is signed or not. 22672 In this way, they write programs which have the same meaning in 22673 both C dialects.) 22674 22675 * Undefining `__STDC__' when `-ansi' is not used. 22676 22677 Currently, GCC defines `__STDC__' unconditionally. This provides 22678 good results in practice. 22679 22680 Programmers normally use conditionals on `__STDC__' to ask whether 22681 it is safe to use certain features of ISO C, such as function 22682 prototypes or ISO token concatenation. Since plain `gcc' supports 22683 all the features of ISO C, the correct answer to these questions is 22684 "yes". 22685 22686 Some users try to use `__STDC__' to check for the availability of 22687 certain library facilities. This is actually incorrect usage in 22688 an ISO C program, because the ISO C standard says that a conforming 22689 freestanding implementation should define `__STDC__' even though it 22690 does not have the library facilities. `gcc -ansi -pedantic' is a 22691 conforming freestanding implementation, and it is therefore 22692 required to define `__STDC__', even though it does not come with 22693 an ISO C library. 22694 22695 Sometimes people say that defining `__STDC__' in a compiler that 22696 does not completely conform to the ISO C standard somehow violates 22697 the standard. This is illogical. The standard is a standard for 22698 compilers that claim to support ISO C, such as `gcc -ansi'--not 22699 for other compilers such as plain `gcc'. Whatever the ISO C 22700 standard says is relevant to the design of plain `gcc' without 22701 `-ansi' only for pragmatic reasons, not as a requirement. 22702 22703 GCC normally defines `__STDC__' to be 1, and in addition defines 22704 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 22705 option for strict conformance to some version of ISO C. On some 22706 hosts, system include files use a different convention, where 22707 `__STDC__' is normally 0, but is 1 if the user specifies strict 22708 conformance to the C Standard. GCC follows the host convention 22709 when processing system include files, but when processing user 22710 files it follows the usual GNU C convention. 22711 22712 * Undefining `__STDC__' in C++. 22713 22714 Programs written to compile with C++-to-C translators get the 22715 value of `__STDC__' that goes with the C compiler that is 22716 subsequently used. These programs must test `__STDC__' to 22717 determine what kind of C preprocessor that compiler uses: whether 22718 they should concatenate tokens in the ISO C fashion or in the 22719 traditional fashion. 22720 22721 These programs work properly with GNU C++ if `__STDC__' is defined. 22722 They would not work otherwise. 22723 22724 In addition, many header files are written to provide prototypes 22725 in ISO C but not in traditional C. Many of these header files can 22726 work without change in C++ provided `__STDC__' is defined. If 22727 `__STDC__' is not defined, they will all fail, and will all need 22728 to be changed to test explicitly for C++ as well. 22729 22730 * Deleting "empty" loops. 22731 22732 Historically, GCC has not deleted "empty" loops under the 22733 assumption that the most likely reason you would put one in a 22734 program is to have a delay, so deleting them will not make real 22735 programs run any faster. 22736 22737 However, the rationale here is that optimization of a nonempty loop 22738 cannot produce an empty one, which holds for C but is not always 22739 the case for C++. 22740 22741 Moreover, with `-funroll-loops' small "empty" loops are already 22742 removed, so the current behavior is both sub-optimal and 22743 inconsistent and will change in the future. 22744 22745 * Making side effects happen in the same order as in some other 22746 compiler. 22747 22748 It is never safe to depend on the order of evaluation of side 22749 effects. For example, a function call like this may very well 22750 behave differently from one compiler to another: 22751 22752 void func (int, int); 22753 22754 int i = 2; 22755 func (i++, i++); 22756 22757 There is no guarantee (in either the C or the C++ standard language 22758 definitions) that the increments will be evaluated in any 22759 particular order. Either increment might happen first. `func' 22760 might get the arguments `2, 3', or it might get `3, 2', or even 22761 `2, 2'. 22762 22763 * Not allowing structures with volatile fields in registers. 22764 22765 Strictly speaking, there is no prohibition in the ISO C standard 22766 against allowing structures with volatile fields in registers, but 22767 it does not seem to make any sense and is probably not what you 22768 wanted to do. So the compiler will give an error message in this 22769 case. 22770 22771 * Making certain warnings into errors by default. 22772 22773 Some ISO C testsuites report failure when the compiler does not 22774 produce an error message for a certain program. 22775 22776 ISO C requires a "diagnostic" message for certain kinds of invalid 22777 programs, but a warning is defined by GCC to count as a 22778 diagnostic. If GCC produces a warning but not an error, that is 22779 correct ISO C support. If testsuites call this "failure", they 22780 should be run with the GCC option `-pedantic-errors', which will 22781 turn these warnings into errors. 22782 22783 22784 22785File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 22786 2278710.12 Warning Messages and Error Messages 22788========================================= 22789 22790The GNU compiler can produce two kinds of diagnostics: errors and 22791warnings. Each kind has a different purpose: 22792 22793 "Errors" report problems that make it impossible to compile your 22794 program. GCC reports errors with the source file name and line 22795 number where the problem is apparent. 22796 22797 "Warnings" report other unusual conditions in your code that _may_ 22798 indicate a problem, although compilation can (and does) proceed. 22799 Warning messages also report the source file name and line number, 22800 but include the text `warning:' to distinguish them from error 22801 messages. 22802 22803 Warnings may indicate danger points where you should check to make sure 22804that your program really does what you intend; or the use of obsolete 22805features; or the use of nonstandard features of GNU C or C++. Many 22806warnings are issued only if you ask for them, with one of the `-W' 22807options (for instance, `-Wall' requests a variety of useful warnings). 22808 22809 GCC always tries to compile your program if possible; it never 22810gratuitously rejects a program whose meaning is clear merely because 22811(for instance) it fails to conform to a standard. In some cases, 22812however, the C and C++ standards specify that certain extensions are 22813forbidden, and a diagnostic _must_ be issued by a conforming compiler. 22814The `-pedantic' option tells GCC to issue warnings in such cases; 22815`-pedantic-errors' says to make them errors instead. This does not 22816mean that _all_ non-ISO constructs get warnings or errors. 22817 22818 *Note Options to Request or Suppress Warnings: Warning Options, for 22819more detail on these and related command-line options. 22820 22821 22822File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 22823 2282411 Reporting Bugs 22825***************** 22826 22827Your bug reports play an essential role in making GCC reliable. 22828 22829 When you encounter a problem, the first thing to do is to see if it is 22830already known. *Note Trouble::. If it isn't known, then you should 22831report the problem. 22832 22833* Menu: 22834 22835* Criteria: Bug Criteria. Have you really found a bug? 22836* Reporting: Bug Reporting. How to report a bug effectively. 22837* Known: Trouble. Known problems. 22838* Help: Service. Where to ask for help. 22839 22840 22841File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 22842 2284311.1 Have You Found a Bug? 22844========================== 22845 22846If you are not sure whether you have found a bug, here are some 22847guidelines: 22848 22849 * If the compiler gets a fatal signal, for any input whatever, that 22850 is a compiler bug. Reliable compilers never crash. 22851 22852 * If the compiler produces invalid assembly code, for any input 22853 whatever (except an `asm' statement), that is a compiler bug, 22854 unless the compiler reports errors (not just warnings) which would 22855 ordinarily prevent the assembler from being run. 22856 22857 * If the compiler produces valid assembly code that does not 22858 correctly execute the input source code, that is a compiler bug. 22859 22860 However, you must double-check to make sure, because you may have a 22861 program whose behavior is undefined, which happened by chance to 22862 give the desired results with another C or C++ compiler. 22863 22864 For example, in many nonoptimizing compilers, you can write `x;' 22865 at the end of a function instead of `return x;', with the same 22866 results. But the value of the function is undefined if `return' 22867 is omitted; it is not a bug when GCC produces different results. 22868 22869 Problems often result from expressions with two increment 22870 operators, as in `f (*p++, *p++)'. Your previous compiler might 22871 have interpreted that expression the way you intended; GCC might 22872 interpret it another way. Neither compiler is wrong. The bug is 22873 in your code. 22874 22875 After you have localized the error to a single source line, it 22876 should be easy to check for these things. If your program is 22877 correct and well defined, you have found a compiler bug. 22878 22879 * If the compiler produces an error message for valid input, that is 22880 a compiler bug. 22881 22882 * If the compiler does not produce an error message for invalid 22883 input, that is a compiler bug. However, you should note that your 22884 idea of "invalid input" might be someone else's idea of "an 22885 extension" or "support for traditional practice". 22886 22887 * If you are an experienced user of one of the languages GCC 22888 supports, your suggestions for improvement of GCC are welcome in 22889 any case. 22890 22891 22892File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 22893 2289411.2 How and where to Report Bugs 22895================================= 22896 22897Bugs should be reported to the GCC bug database. Please refer to 22898`http://gcc.gnu.org/bugs.html' for up-to-date instructions how to 22899submit bug reports. Copies of this file in HTML (`bugs.html') and 22900plain text (`BUGS') are also part of GCC releases. 22901 22902 22903File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 22904 2290512 How To Get Help with GCC 22906*************************** 22907 22908If you need help installing, using or changing GCC, there are two ways 22909to find it: 22910 22911 * Send a message to a suitable network mailing list. First try 22912 <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if 22913 that brings no response, try <gcc@gcc.gnu.org>. For help changing 22914 GCC, ask <gcc@gcc.gnu.org>. If you think you have found a bug in 22915 GCC, please report it following the instructions at *note Bug 22916 Reporting::. 22917 22918 * Look in the service directory for someone who might help you for a 22919 fee. The service directory is found at 22920 `http://www.gnu.org/prep/service.html'. 22921 22922 For further information, see `http://gcc.gnu.org/faq.html#support'. 22923 22924 22925File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 22926 2292713 Contributing to GCC Development 22928********************************** 22929 22930If you would like to help pretest GCC releases to assure they work well, 22931current development sources are available by CVS (see 22932`http://gcc.gnu.org/cvs.html'). Source and binary snapshots are also 22933available for FTP; see `http://gcc.gnu.org/snapshots.html'. 22934 22935 If you would like to work on improvements to GCC, please read the 22936advice at these URLs: 22937 22938 `http://gcc.gnu.org/contribute.html' 22939 `http://gcc.gnu.org/contributewhy.html' 22940 22941for information on how to make useful contributions and avoid 22942duplication of effort. Suggested projects are listed at 22943`http://gcc.gnu.org/projects/'. 22944 22945 22946File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 22947 22948Funding Free Software 22949********************* 22950 22951If you want to have more free software a few years from now, it makes 22952sense for you to help encourage people to contribute funds for its 22953development. The most effective approach known is to encourage 22954commercial redistributors to donate. 22955 22956 Users of free software systems can boost the pace of development by 22957encouraging for-a-fee distributors to donate part of their selling price 22958to free software developers--the Free Software Foundation, and others. 22959 22960 The way to convince distributors to do this is to demand it and expect 22961it from them. So when you compare distributors, judge them partly by 22962how much they give to free software development. Show distributors 22963they must compete to be the one who gives the most. 22964 22965 To make this approach work, you must insist on numbers that you can 22966compare, such as, "We will donate ten dollars to the Frobnitz project 22967for each disk sold." Don't be satisfied with a vague promise, such as 22968"A portion of the profits are donated," since it doesn't give a basis 22969for comparison. 22970 22971 Even a precise fraction "of the profits from this disk" is not very 22972meaningful, since creative accounting and unrelated business decisions 22973can greatly alter what fraction of the sales price counts as profit. 22974If the price you pay is $50, ten percent of the profit is probably less 22975than a dollar; it might be a few cents, or nothing at all. 22976 22977 Some redistributors do development work themselves. This is useful 22978too; but to keep everyone honest, you need to inquire how much they do, 22979and what kind. Some kinds of development make much more long-term 22980difference than others. For example, maintaining a separate version of 22981a program contributes very little; maintaining the standard version of a 22982program for the whole community contributes much. Easy new ports 22983contribute little, since someone else would surely do them; difficult 22984ports such as adding a new CPU to the GNU Compiler Collection 22985contribute more; major new features or packages contribute the most. 22986 22987 By establishing the idea that supporting further development is "the 22988proper thing to do" when distributing free software for a fee, we can 22989assure a steady flow of resources into making more free software. 22990 22991 Copyright (C) 1994 Free Software Foundation, Inc. 22992 Verbatim copying and redistribution of this section is permitted 22993 without royalty; alteration is not permitted. 22994 22995 22996File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 22997 22998The GNU Project and GNU/Linux 22999***************************** 23000 23001The GNU Project was launched in 1984 to develop a complete Unix-like 23002operating system which is free software: the GNU system. (GNU is a 23003recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 23004Variants of the GNU operating system, which use the kernel Linux, are 23005now widely used; though these systems are often referred to as "Linux", 23006they are more accurately called GNU/Linux systems. 23007 23008 For more information, see: 23009 `http://www.gnu.org/' 23010 `http://www.gnu.org/gnu/linux-and-gnu.html' 23011 23012 23013File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 23014 23015GNU GENERAL PUBLIC LICENSE 23016************************** 23017 23018 Version 2, June 1991 23019 23020 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 23021 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 23022 23023 Everyone is permitted to copy and distribute verbatim copies 23024 of this license document, but changing it is not allowed. 23025 23026Preamble 23027======== 23028 23029The licenses for most software are designed to take away your freedom 23030to share and change it. By contrast, the GNU General Public License is 23031intended to guarantee your freedom to share and change free 23032software--to make sure the software is free for all its users. This 23033General Public License applies to most of the Free Software 23034Foundation's software and to any other program whose authors commit to 23035using it. (Some other Free Software Foundation software is covered by 23036the GNU Library General Public License instead.) You can apply it to 23037your programs, too. 23038 23039 When we speak of free software, we are referring to freedom, not 23040price. Our General Public Licenses are designed to make sure that you 23041have the freedom to distribute copies of free software (and charge for 23042this service if you wish), that you receive source code or can get it 23043if you want it, that you can change the software or use pieces of it in 23044new free programs; and that you know you can do these things. 23045 23046 To protect your rights, we need to make restrictions that forbid 23047anyone to deny you these rights or to ask you to surrender the rights. 23048These restrictions translate to certain responsibilities for you if you 23049distribute copies of the software, or if you modify it. 23050 23051 For example, if you distribute copies of such a program, whether 23052gratis or for a fee, you must give the recipients all the rights that 23053you have. You must make sure that they, too, receive or can get the 23054source code. And you must show them these terms so they know their 23055rights. 23056 23057 We protect your rights with two steps: (1) copyright the software, and 23058(2) offer you this license which gives you legal permission to copy, 23059distribute and/or modify the software. 23060 23061 Also, for each author's protection and ours, we want to make certain 23062that everyone understands that there is no warranty for this free 23063software. If the software is modified by someone else and passed on, we 23064want its recipients to know that what they have is not the original, so 23065that any problems introduced by others will not reflect on the original 23066authors' reputations. 23067 23068 Finally, any free program is threatened constantly by software 23069patents. We wish to avoid the danger that redistributors of a free 23070program will individually obtain patent licenses, in effect making the 23071program proprietary. To prevent this, we have made it clear that any 23072patent must be licensed for everyone's free use or not licensed at all. 23073 23074 The precise terms and conditions for copying, distribution and 23075modification follow. 23076 23077 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 23078 0. This License applies to any program or other work which contains a 23079 notice placed by the copyright holder saying it may be distributed 23080 under the terms of this General Public License. The "Program", 23081 below, refers to any such program or work, and a "work based on 23082 the Program" means either the Program or any derivative work under 23083 copyright law: that is to say, a work containing the Program or a 23084 portion of it, either verbatim or with modifications and/or 23085 translated into another language. (Hereinafter, translation is 23086 included without limitation in the term "modification".) Each 23087 licensee is addressed as "you". 23088 23089 Activities other than copying, distribution and modification are 23090 not covered by this License; they are outside its scope. The act 23091 of running the Program is not restricted, and the output from the 23092 Program is covered only if its contents constitute a work based on 23093 the Program (independent of having been made by running the 23094 Program). Whether that is true depends on what the Program does. 23095 23096 1. You may copy and distribute verbatim copies of the Program's 23097 source code as you receive it, in any medium, provided that you 23098 conspicuously and appropriately publish on each copy an appropriate 23099 copyright notice and disclaimer of warranty; keep intact all the 23100 notices that refer to this License and to the absence of any 23101 warranty; and give any other recipients of the Program a copy of 23102 this License along with the Program. 23103 23104 You may charge a fee for the physical act of transferring a copy, 23105 and you may at your option offer warranty protection in exchange 23106 for a fee. 23107 23108 2. You may modify your copy or copies of the Program or any portion 23109 of it, thus forming a work based on the Program, and copy and 23110 distribute such modifications or work under the terms of Section 1 23111 above, provided that you also meet all of these conditions: 23112 23113 a. You must cause the modified files to carry prominent notices 23114 stating that you changed the files and the date of any change. 23115 23116 b. You must cause any work that you distribute or publish, that 23117 in whole or in part contains or is derived from the Program 23118 or any part thereof, to be licensed as a whole at no charge 23119 to all third parties under the terms of this License. 23120 23121 c. If the modified program normally reads commands interactively 23122 when run, you must cause it, when started running for such 23123 interactive use in the most ordinary way, to print or display 23124 an announcement including an appropriate copyright notice and 23125 a notice that there is no warranty (or else, saying that you 23126 provide a warranty) and that users may redistribute the 23127 program under these conditions, and telling the user how to 23128 view a copy of this License. (Exception: if the Program 23129 itself is interactive but does not normally print such an 23130 announcement, your work based on the Program is not required 23131 to print an announcement.) 23132 23133 These requirements apply to the modified work as a whole. If 23134 identifiable sections of that work are not derived from the 23135 Program, and can be reasonably considered independent and separate 23136 works in themselves, then this License, and its terms, do not 23137 apply to those sections when you distribute them as separate 23138 works. But when you distribute the same sections as part of a 23139 whole which is a work based on the Program, the distribution of 23140 the whole must be on the terms of this License, whose permissions 23141 for other licensees extend to the entire whole, and thus to each 23142 and every part regardless of who wrote it. 23143 23144 Thus, it is not the intent of this section to claim rights or 23145 contest your rights to work written entirely by you; rather, the 23146 intent is to exercise the right to control the distribution of 23147 derivative or collective works based on the Program. 23148 23149 In addition, mere aggregation of another work not based on the 23150 Program with the Program (or with a work based on the Program) on 23151 a volume of a storage or distribution medium does not bring the 23152 other work under the scope of this License. 23153 23154 3. You may copy and distribute the Program (or a work based on it, 23155 under Section 2) in object code or executable form under the terms 23156 of Sections 1 and 2 above provided that you also do one of the 23157 following: 23158 23159 a. Accompany it with the complete corresponding machine-readable 23160 source code, which must be distributed under the terms of 23161 Sections 1 and 2 above on a medium customarily used for 23162 software interchange; or, 23163 23164 b. Accompany it with a written offer, valid for at least three 23165 years, to give any third party, for a charge no more than your 23166 cost of physically performing source distribution, a complete 23167 machine-readable copy of the corresponding source code, to be 23168 distributed under the terms of Sections 1 and 2 above on a 23169 medium customarily used for software interchange; or, 23170 23171 c. Accompany it with the information you received as to the offer 23172 to distribute corresponding source code. (This alternative is 23173 allowed only for noncommercial distribution and only if you 23174 received the program in object code or executable form with 23175 such an offer, in accord with Subsection b above.) 23176 23177 The source code for a work means the preferred form of the work for 23178 making modifications to it. For an executable work, complete 23179 source code means all the source code for all modules it contains, 23180 plus any associated interface definition files, plus the scripts 23181 used to control compilation and installation of the executable. 23182 However, as a special exception, the source code distributed need 23183 not include anything that is normally distributed (in either 23184 source or binary form) with the major components (compiler, 23185 kernel, and so on) of the operating system on which the executable 23186 runs, unless that component itself accompanies the executable. 23187 23188 If distribution of executable or object code is made by offering 23189 access to copy from a designated place, then offering equivalent 23190 access to copy the source code from the same place counts as 23191 distribution of the source code, even though third parties are not 23192 compelled to copy the source along with the object code. 23193 23194 4. You may not copy, modify, sublicense, or distribute the Program 23195 except as expressly provided under this License. Any attempt 23196 otherwise to copy, modify, sublicense or distribute the Program is 23197 void, and will automatically terminate your rights under this 23198 License. However, parties who have received copies, or rights, 23199 from you under this License will not have their licenses 23200 terminated so long as such parties remain in full compliance. 23201 23202 5. You are not required to accept this License, since you have not 23203 signed it. However, nothing else grants you permission to modify 23204 or distribute the Program or its derivative works. These actions 23205 are prohibited by law if you do not accept this License. 23206 Therefore, by modifying or distributing the Program (or any work 23207 based on the Program), you indicate your acceptance of this 23208 License to do so, and all its terms and conditions for copying, 23209 distributing or modifying the Program or works based on it. 23210 23211 6. Each time you redistribute the Program (or any work based on the 23212 Program), the recipient automatically receives a license from the 23213 original licensor to copy, distribute or modify the Program 23214 subject to these terms and conditions. You may not impose any 23215 further restrictions on the recipients' exercise of the rights 23216 granted herein. You are not responsible for enforcing compliance 23217 by third parties to this License. 23218 23219 7. If, as a consequence of a court judgment or allegation of patent 23220 infringement or for any other reason (not limited to patent 23221 issues), conditions are imposed on you (whether by court order, 23222 agreement or otherwise) that contradict the conditions of this 23223 License, they do not excuse you from the conditions of this 23224 License. If you cannot distribute so as to satisfy simultaneously 23225 your obligations under this License and any other pertinent 23226 obligations, then as a consequence you may not distribute the 23227 Program at all. For example, if a patent license would not permit 23228 royalty-free redistribution of the Program by all those who 23229 receive copies directly or indirectly through you, then the only 23230 way you could satisfy both it and this License would be to refrain 23231 entirely from distribution of the Program. 23232 23233 If any portion of this section is held invalid or unenforceable 23234 under any particular circumstance, the balance of the section is 23235 intended to apply and the section as a whole is intended to apply 23236 in other circumstances. 23237 23238 It is not the purpose of this section to induce you to infringe any 23239 patents or other property right claims or to contest validity of 23240 any such claims; this section has the sole purpose of protecting 23241 the integrity of the free software distribution system, which is 23242 implemented by public license practices. Many people have made 23243 generous contributions to the wide range of software distributed 23244 through that system in reliance on consistent application of that 23245 system; it is up to the author/donor to decide if he or she is 23246 willing to distribute software through any other system and a 23247 licensee cannot impose that choice. 23248 23249 This section is intended to make thoroughly clear what is believed 23250 to be a consequence of the rest of this License. 23251 23252 8. If the distribution and/or use of the Program is restricted in 23253 certain countries either by patents or by copyrighted interfaces, 23254 the original copyright holder who places the Program under this 23255 License may add an explicit geographical distribution limitation 23256 excluding those countries, so that distribution is permitted only 23257 in or among countries not thus excluded. In such case, this 23258 License incorporates the limitation as if written in the body of 23259 this License. 23260 23261 9. The Free Software Foundation may publish revised and/or new 23262 versions of the General Public License from time to time. Such 23263 new versions will be similar in spirit to the present version, but 23264 may differ in detail to address new problems or concerns. 23265 23266 Each version is given a distinguishing version number. If the 23267 Program specifies a version number of this License which applies 23268 to it and "any later version", you have the option of following 23269 the terms and conditions either of that version or of any later 23270 version published by the Free Software Foundation. If the Program 23271 does not specify a version number of this License, you may choose 23272 any version ever published by the Free Software Foundation. 23273 23274 10. If you wish to incorporate parts of the Program into other free 23275 programs whose distribution conditions are different, write to the 23276 author to ask for permission. For software which is copyrighted 23277 by the Free Software Foundation, write to the Free Software 23278 Foundation; we sometimes make exceptions for this. Our decision 23279 will be guided by the two goals of preserving the free status of 23280 all derivatives of our free software and of promoting the sharing 23281 and reuse of software generally. 23282 23283 NO WARRANTY 23284 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO 23285 WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE 23286 LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 23287 HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT 23288 WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT 23289 NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 23290 FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE 23291 QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 23292 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY 23293 SERVICING, REPAIR OR CORRECTION. 23294 23295 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 23296 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY 23297 MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE 23298 LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, 23299 INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR 23300 INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 23301 DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU 23302 OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY 23303 OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN 23304 ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 23305 23306 END OF TERMS AND CONDITIONS 23307How to Apply These Terms to Your New Programs 23308============================================= 23309 23310If you develop a new program, and you want it to be of the greatest 23311possible use to the public, the best way to achieve this is to make it 23312free software which everyone can redistribute and change under these 23313terms. 23314 23315 To do so, attach the following notices to the program. It is safest 23316to attach them to the start of each source file to most effectively 23317convey the exclusion of warranty; and each file should have at least 23318the "copyright" line and a pointer to where the full notice is found. 23319 23320 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 23321 Copyright (C) YEAR NAME OF AUTHOR 23322 23323 This program is free software; you can redistribute it and/or modify 23324 it under the terms of the GNU General Public License as published by 23325 the Free Software Foundation; either version 2 of the License, or 23326 (at your option) any later version. 23327 23328 This program is distributed in the hope that it will be useful, 23329 but WITHOUT ANY WARRANTY; without even the implied warranty of 23330 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23331 GNU General Public License for more details. 23332 23333 You should have received a copy of the GNU General Public License 23334 along with this program; if not, write to the Free Software Foundation, 23335 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 23336 23337 Also add information on how to contact you by electronic and paper 23338mail. 23339 23340 If the program is interactive, make it output a short notice like this 23341when it starts in an interactive mode: 23342 23343 Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR 23344 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details 23345 type `show w'. 23346 This is free software, and you are welcome to redistribute it 23347 under certain conditions; type `show c' for details. 23348 23349 The hypothetical commands `show w' and `show c' should show the 23350appropriate parts of the General Public License. Of course, the 23351commands you use may be called something other than `show w' and `show 23352c'; they could even be mouse-clicks or menu items--whatever suits your 23353program. 23354 23355 You should also get your employer (if you work as a programmer) or your 23356school, if any, to sign a "copyright disclaimer" for the program, if 23357necessary. Here is a sample; alter the names: 23358 23359 Yoyodyne, Inc., hereby disclaims all copyright interest in the program 23360 `Gnomovision' (which makes passes at compilers) written by James Hacker. 23361 23362 SIGNATURE OF TY COON, 1 April 1989 23363 Ty Coon, President of Vice 23364 23365 This General Public License does not permit incorporating your program 23366into proprietary programs. If your program is a subroutine library, 23367you may consider it more useful to permit linking proprietary 23368applications with the library. If this is what you want to do, use the 23369GNU Library General Public License instead of this License. 23370 23371 23372File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 23373 23374GNU Free Documentation License 23375****************************** 23376 23377 Version 1.2, November 2002 23378 23379 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 23380 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA 23381 23382 Everyone is permitted to copy and distribute verbatim copies 23383 of this license document, but changing it is not allowed. 23384 23385 0. PREAMBLE 23386 23387 The purpose of this License is to make a manual, textbook, or other 23388 functional and useful document "free" in the sense of freedom: to 23389 assure everyone the effective freedom to copy and redistribute it, 23390 with or without modifying it, either commercially or 23391 noncommercially. Secondarily, this License preserves for the 23392 author and publisher a way to get credit for their work, while not 23393 being considered responsible for modifications made by others. 23394 23395 This License is a kind of "copyleft", which means that derivative 23396 works of the document must themselves be free in the same sense. 23397 It complements the GNU General Public License, which is a copyleft 23398 license designed for free software. 23399 23400 We have designed this License in order to use it for manuals for 23401 free software, because free software needs free documentation: a 23402 free program should come with manuals providing the same freedoms 23403 that the software does. But this License is not limited to 23404 software manuals; it can be used for any textual work, regardless 23405 of subject matter or whether it is published as a printed book. 23406 We recommend this License principally for works whose purpose is 23407 instruction or reference. 23408 23409 1. APPLICABILITY AND DEFINITIONS 23410 23411 This License applies to any manual or other work, in any medium, 23412 that contains a notice placed by the copyright holder saying it 23413 can be distributed under the terms of this License. Such a notice 23414 grants a world-wide, royalty-free license, unlimited in duration, 23415 to use that work under the conditions stated herein. The 23416 "Document", below, refers to any such manual or work. Any member 23417 of the public is a licensee, and is addressed as "you". You 23418 accept the license if you copy, modify or distribute the work in a 23419 way requiring permission under copyright law. 23420 23421 A "Modified Version" of the Document means any work containing the 23422 Document or a portion of it, either copied verbatim, or with 23423 modifications and/or translated into another language. 23424 23425 A "Secondary Section" is a named appendix or a front-matter section 23426 of the Document that deals exclusively with the relationship of the 23427 publishers or authors of the Document to the Document's overall 23428 subject (or to related matters) and contains nothing that could 23429 fall directly within that overall subject. (Thus, if the Document 23430 is in part a textbook of mathematics, a Secondary Section may not 23431 explain any mathematics.) The relationship could be a matter of 23432 historical connection with the subject or with related matters, or 23433 of legal, commercial, philosophical, ethical or political position 23434 regarding them. 23435 23436 The "Invariant Sections" are certain Secondary Sections whose 23437 titles are designated, as being those of Invariant Sections, in 23438 the notice that says that the Document is released under this 23439 License. If a section does not fit the above definition of 23440 Secondary then it is not allowed to be designated as Invariant. 23441 The Document may contain zero Invariant Sections. If the Document 23442 does not identify any Invariant Sections then there are none. 23443 23444 The "Cover Texts" are certain short passages of text that are 23445 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 23446 that says that the Document is released under this License. A 23447 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 23448 be at most 25 words. 23449 23450 A "Transparent" copy of the Document means a machine-readable copy, 23451 represented in a format whose specification is available to the 23452 general public, that is suitable for revising the document 23453 straightforwardly with generic text editors or (for images 23454 composed of pixels) generic paint programs or (for drawings) some 23455 widely available drawing editor, and that is suitable for input to 23456 text formatters or for automatic translation to a variety of 23457 formats suitable for input to text formatters. A copy made in an 23458 otherwise Transparent file format whose markup, or absence of 23459 markup, has been arranged to thwart or discourage subsequent 23460 modification by readers is not Transparent. An image format is 23461 not Transparent if used for any substantial amount of text. A 23462 copy that is not "Transparent" is called "Opaque". 23463 23464 Examples of suitable formats for Transparent copies include plain 23465 ASCII without markup, Texinfo input format, LaTeX input format, 23466 SGML or XML using a publicly available DTD, and 23467 standard-conforming simple HTML, PostScript or PDF designed for 23468 human modification. Examples of transparent image formats include 23469 PNG, XCF and JPG. Opaque formats include proprietary formats that 23470 can be read and edited only by proprietary word processors, SGML or 23471 XML for which the DTD and/or processing tools are not generally 23472 available, and the machine-generated HTML, PostScript or PDF 23473 produced by some word processors for output purposes only. 23474 23475 The "Title Page" means, for a printed book, the title page itself, 23476 plus such following pages as are needed to hold, legibly, the 23477 material this License requires to appear in the title page. For 23478 works in formats which do not have any title page as such, "Title 23479 Page" means the text near the most prominent appearance of the 23480 work's title, preceding the beginning of the body of the text. 23481 23482 A section "Entitled XYZ" means a named subunit of the Document 23483 whose title either is precisely XYZ or contains XYZ in parentheses 23484 following text that translates XYZ in another language. (Here XYZ 23485 stands for a specific section name mentioned below, such as 23486 "Acknowledgements", "Dedications", "Endorsements", or "History".) 23487 To "Preserve the Title" of such a section when you modify the 23488 Document means that it remains a section "Entitled XYZ" according 23489 to this definition. 23490 23491 The Document may include Warranty Disclaimers next to the notice 23492 which states that this License applies to the Document. These 23493 Warranty Disclaimers are considered to be included by reference in 23494 this License, but only as regards disclaiming warranties: any other 23495 implication that these Warranty Disclaimers may have is void and 23496 has no effect on the meaning of this License. 23497 23498 2. VERBATIM COPYING 23499 23500 You may copy and distribute the Document in any medium, either 23501 commercially or noncommercially, provided that this License, the 23502 copyright notices, and the license notice saying this License 23503 applies to the Document are reproduced in all copies, and that you 23504 add no other conditions whatsoever to those of this License. You 23505 may not use technical measures to obstruct or control the reading 23506 or further copying of the copies you make or distribute. However, 23507 you may accept compensation in exchange for copies. If you 23508 distribute a large enough number of copies you must also follow 23509 the conditions in section 3. 23510 23511 You may also lend copies, under the same conditions stated above, 23512 and you may publicly display copies. 23513 23514 3. COPYING IN QUANTITY 23515 23516 If you publish printed copies (or copies in media that commonly 23517 have printed covers) of the Document, numbering more than 100, and 23518 the Document's license notice requires Cover Texts, you must 23519 enclose the copies in covers that carry, clearly and legibly, all 23520 these Cover Texts: Front-Cover Texts on the front cover, and 23521 Back-Cover Texts on the back cover. Both covers must also clearly 23522 and legibly identify you as the publisher of these copies. The 23523 front cover must present the full title with all words of the 23524 title equally prominent and visible. You may add other material 23525 on the covers in addition. Copying with changes limited to the 23526 covers, as long as they preserve the title of the Document and 23527 satisfy these conditions, can be treated as verbatim copying in 23528 other respects. 23529 23530 If the required texts for either cover are too voluminous to fit 23531 legibly, you should put the first ones listed (as many as fit 23532 reasonably) on the actual cover, and continue the rest onto 23533 adjacent pages. 23534 23535 If you publish or distribute Opaque copies of the Document 23536 numbering more than 100, you must either include a 23537 machine-readable Transparent copy along with each Opaque copy, or 23538 state in or with each Opaque copy a computer-network location from 23539 which the general network-using public has access to download 23540 using public-standard network protocols a complete Transparent 23541 copy of the Document, free of added material. If you use the 23542 latter option, you must take reasonably prudent steps, when you 23543 begin distribution of Opaque copies in quantity, to ensure that 23544 this Transparent copy will remain thus accessible at the stated 23545 location until at least one year after the last time you 23546 distribute an Opaque copy (directly or through your agents or 23547 retailers) of that edition to the public. 23548 23549 It is requested, but not required, that you contact the authors of 23550 the Document well before redistributing any large number of 23551 copies, to give them a chance to provide you with an updated 23552 version of the Document. 23553 23554 4. MODIFICATIONS 23555 23556 You may copy and distribute a Modified Version of the Document 23557 under the conditions of sections 2 and 3 above, provided that you 23558 release the Modified Version under precisely this License, with 23559 the Modified Version filling the role of the Document, thus 23560 licensing distribution and modification of the Modified Version to 23561 whoever possesses a copy of it. In addition, you must do these 23562 things in the Modified Version: 23563 23564 A. Use in the Title Page (and on the covers, if any) a title 23565 distinct from that of the Document, and from those of 23566 previous versions (which should, if there were any, be listed 23567 in the History section of the Document). You may use the 23568 same title as a previous version if the original publisher of 23569 that version gives permission. 23570 23571 B. List on the Title Page, as authors, one or more persons or 23572 entities responsible for authorship of the modifications in 23573 the Modified Version, together with at least five of the 23574 principal authors of the Document (all of its principal 23575 authors, if it has fewer than five), unless they release you 23576 from this requirement. 23577 23578 C. State on the Title page the name of the publisher of the 23579 Modified Version, as the publisher. 23580 23581 D. Preserve all the copyright notices of the Document. 23582 23583 E. Add an appropriate copyright notice for your modifications 23584 adjacent to the other copyright notices. 23585 23586 F. Include, immediately after the copyright notices, a license 23587 notice giving the public permission to use the Modified 23588 Version under the terms of this License, in the form shown in 23589 the Addendum below. 23590 23591 G. Preserve in that license notice the full lists of Invariant 23592 Sections and required Cover Texts given in the Document's 23593 license notice. 23594 23595 H. Include an unaltered copy of this License. 23596 23597 I. Preserve the section Entitled "History", Preserve its Title, 23598 and add to it an item stating at least the title, year, new 23599 authors, and publisher of the Modified Version as given on 23600 the Title Page. If there is no section Entitled "History" in 23601 the Document, create one stating the title, year, authors, 23602 and publisher of the Document as given on its Title Page, 23603 then add an item describing the Modified Version as stated in 23604 the previous sentence. 23605 23606 J. Preserve the network location, if any, given in the Document 23607 for public access to a Transparent copy of the Document, and 23608 likewise the network locations given in the Document for 23609 previous versions it was based on. These may be placed in 23610 the "History" section. You may omit a network location for a 23611 work that was published at least four years before the 23612 Document itself, or if the original publisher of the version 23613 it refers to gives permission. 23614 23615 K. For any section Entitled "Acknowledgements" or "Dedications", 23616 Preserve the Title of the section, and preserve in the 23617 section all the substance and tone of each of the contributor 23618 acknowledgements and/or dedications given therein. 23619 23620 L. Preserve all the Invariant Sections of the Document, 23621 unaltered in their text and in their titles. Section numbers 23622 or the equivalent are not considered part of the section 23623 titles. 23624 23625 M. Delete any section Entitled "Endorsements". Such a section 23626 may not be included in the Modified Version. 23627 23628 N. Do not retitle any existing section to be Entitled 23629 "Endorsements" or to conflict in title with any Invariant 23630 Section. 23631 23632 O. Preserve any Warranty Disclaimers. 23633 23634 If the Modified Version includes new front-matter sections or 23635 appendices that qualify as Secondary Sections and contain no 23636 material copied from the Document, you may at your option 23637 designate some or all of these sections as invariant. To do this, 23638 add their titles to the list of Invariant Sections in the Modified 23639 Version's license notice. These titles must be distinct from any 23640 other section titles. 23641 23642 You may add a section Entitled "Endorsements", provided it contains 23643 nothing but endorsements of your Modified Version by various 23644 parties--for example, statements of peer review or that the text 23645 has been approved by an organization as the authoritative 23646 definition of a standard. 23647 23648 You may add a passage of up to five words as a Front-Cover Text, 23649 and a passage of up to 25 words as a Back-Cover Text, to the end 23650 of the list of Cover Texts in the Modified Version. Only one 23651 passage of Front-Cover Text and one of Back-Cover Text may be 23652 added by (or through arrangements made by) any one entity. If the 23653 Document already includes a cover text for the same cover, 23654 previously added by you or by arrangement made by the same entity 23655 you are acting on behalf of, you may not add another; but you may 23656 replace the old one, on explicit permission from the previous 23657 publisher that added the old one. 23658 23659 The author(s) and publisher(s) of the Document do not by this 23660 License give permission to use their names for publicity for or to 23661 assert or imply endorsement of any Modified Version. 23662 23663 5. COMBINING DOCUMENTS 23664 23665 You may combine the Document with other documents released under 23666 this License, under the terms defined in section 4 above for 23667 modified versions, provided that you include in the combination 23668 all of the Invariant Sections of all of the original documents, 23669 unmodified, and list them all as Invariant Sections of your 23670 combined work in its license notice, and that you preserve all 23671 their Warranty Disclaimers. 23672 23673 The combined work need only contain one copy of this License, and 23674 multiple identical Invariant Sections may be replaced with a single 23675 copy. If there are multiple Invariant Sections with the same name 23676 but different contents, make the title of each such section unique 23677 by adding at the end of it, in parentheses, the name of the 23678 original author or publisher of that section if known, or else a 23679 unique number. Make the same adjustment to the section titles in 23680 the list of Invariant Sections in the license notice of the 23681 combined work. 23682 23683 In the combination, you must combine any sections Entitled 23684 "History" in the various original documents, forming one section 23685 Entitled "History"; likewise combine any sections Entitled 23686 "Acknowledgements", and any sections Entitled "Dedications". You 23687 must delete all sections Entitled "Endorsements." 23688 23689 6. COLLECTIONS OF DOCUMENTS 23690 23691 You may make a collection consisting of the Document and other 23692 documents released under this License, and replace the individual 23693 copies of this License in the various documents with a single copy 23694 that is included in the collection, provided that you follow the 23695 rules of this License for verbatim copying of each of the 23696 documents in all other respects. 23697 23698 You may extract a single document from such a collection, and 23699 distribute it individually under this License, provided you insert 23700 a copy of this License into the extracted document, and follow 23701 this License in all other respects regarding verbatim copying of 23702 that document. 23703 23704 7. AGGREGATION WITH INDEPENDENT WORKS 23705 23706 A compilation of the Document or its derivatives with other 23707 separate and independent documents or works, in or on a volume of 23708 a storage or distribution medium, is called an "aggregate" if the 23709 copyright resulting from the compilation is not used to limit the 23710 legal rights of the compilation's users beyond what the individual 23711 works permit. When the Document is included an aggregate, this 23712 License does not apply to the other works in the aggregate which 23713 are not themselves derivative works of the Document. 23714 23715 If the Cover Text requirement of section 3 is applicable to these 23716 copies of the Document, then if the Document is less than one half 23717 of the entire aggregate, the Document's Cover Texts may be placed 23718 on covers that bracket the Document within the aggregate, or the 23719 electronic equivalent of covers if the Document is in electronic 23720 form. Otherwise they must appear on printed covers that bracket 23721 the whole aggregate. 23722 23723 8. TRANSLATION 23724 23725 Translation is considered a kind of modification, so you may 23726 distribute translations of the Document under the terms of section 23727 4. Replacing Invariant Sections with translations requires special 23728 permission from their copyright holders, but you may include 23729 translations of some or all Invariant Sections in addition to the 23730 original versions of these Invariant Sections. You may include a 23731 translation of this License, and all the license notices in the 23732 Document, and any Warrany Disclaimers, provided that you also 23733 include the original English version of this License and the 23734 original versions of those notices and disclaimers. In case of a 23735 disagreement between the translation and the original version of 23736 this License or a notice or disclaimer, the original version will 23737 prevail. 23738 23739 If a section in the Document is Entitled "Acknowledgements", 23740 "Dedications", or "History", the requirement (section 4) to 23741 Preserve its Title (section 1) will typically require changing the 23742 actual title. 23743 23744 9. TERMINATION 23745 23746 You may not copy, modify, sublicense, or distribute the Document 23747 except as expressly provided for under this License. Any other 23748 attempt to copy, modify, sublicense or distribute the Document is 23749 void, and will automatically terminate your rights under this 23750 License. However, parties who have received copies, or rights, 23751 from you under this License will not have their licenses 23752 terminated so long as such parties remain in full compliance. 23753 23754 10. FUTURE REVISIONS OF THIS LICENSE 23755 23756 The Free Software Foundation may publish new, revised versions of 23757 the GNU Free Documentation License from time to time. Such new 23758 versions will be similar in spirit to the present version, but may 23759 differ in detail to address new problems or concerns. See 23760 `http://www.gnu.org/copyleft/'. 23761 23762 Each version of the License is given a distinguishing version 23763 number. If the Document specifies that a particular numbered 23764 version of this License "or any later version" applies to it, you 23765 have the option of following the terms and conditions either of 23766 that specified version or of any later version that has been 23767 published (not as a draft) by the Free Software Foundation. If 23768 the Document does not specify a version number of this License, 23769 you may choose any version ever published (not as a draft) by the 23770 Free Software Foundation. 23771 23772ADDENDUM: How to use this License for your documents 23773==================================================== 23774 23775To use this License in a document you have written, include a copy of 23776the License in the document and put the following copyright and license 23777notices just after the title page: 23778 23779 Copyright (C) YEAR YOUR NAME. 23780 Permission is granted to copy, distribute and/or modify this document 23781 under the terms of the GNU Free Documentation License, Version 1.2 23782 or any later version published by the Free Software Foundation; 23783 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. 23784 A copy of the license is included in the section entitled ``GNU 23785 Free Documentation License''. 23786 23787 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 23788replace the "with...Texts." line with this: 23789 23790 with the Invariant Sections being LIST THEIR TITLES, with 23791 the Front-Cover Texts being LIST, and with the Back-Cover Texts 23792 being LIST. 23793 23794 If you have Invariant Sections without Cover Texts, or some other 23795combination of the three, merge those two alternatives to suit the 23796situation. 23797 23798 If your document contains nontrivial examples of program code, we 23799recommend releasing these examples in parallel under your choice of 23800free software license, such as the GNU General Public License, to 23801permit their use in free software. 23802 23803 23804File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 23805 23806Contributors to GCC 23807******************* 23808 23809The GCC project would like to thank its many contributors. Without 23810them the project would not have been nearly as successful as it has 23811been. Any omissions in this list are accidental. Feel free to contact 23812<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 23813some of your contributions are not listed. Please keep this list in 23814alphabetical order. 23815 23816 * Analog Devices helped implement the support for complex data types 23817 and iterators. 23818 23819 * John David Anglin for threading-related fixes and improvements to 23820 libstdc++-v3, and the HP-UX port. 23821 23822 * James van Artsdalen wrote the code that makes efficient use of the 23823 Intel 80387 register stack. 23824 23825 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 23826 Series port. 23827 23828 * Alasdair Baird for various bug fixes. 23829 23830 * Giovanni Bajo for analyzing lots of complicated C++ problem 23831 reports. 23832 23833 * Peter Barada for his work to improve code generation for new 23834 ColdFire cores. 23835 23836 * Gerald Baumgartner added the signature extension to the C++ front 23837 end. 23838 23839 * Godmar Back for his Java improvements and encouragement. 23840 23841 * Scott Bambrough for help porting the Java compiler. 23842 23843 * Wolfgang Bangerth for processing tons of bug reports. 23844 23845 * Jon Beniston for his Microsoft Windows port of Java. 23846 23847 * Daniel Berlin for better DWARF2 support, faster/better 23848 optimizations, improved alias analysis, plus migrating GCC to 23849 Bugzilla. 23850 23851 * Geoff Berry for his Java object serialization work and various 23852 patches. 23853 23854 * Eric Blake for helping to make GCJ and libgcj conform to the 23855 specifications. 23856 23857 * Segher Boessenkool for various fixes. 23858 23859 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 23860 other Java work. 23861 23862 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 23863 miscellaneous clean-ups. 23864 23865 * Eric Botcazou for fixing middle- and backend bugs left and right. 23866 23867 * Per Bothner for his direction via the steering committee and 23868 various improvements to the infrastructure for supporting new 23869 languages. Chill front end implementation. Initial 23870 implementations of cpplib, fix-header, config.guess, libio, and 23871 past C++ library (libg++) maintainer. Dreaming up, designing and 23872 implementing much of GCJ. 23873 23874 * Devon Bowen helped port GCC to the Tahoe. 23875 23876 * Don Bowman for mips-vxworks contributions. 23877 23878 * Dave Brolley for work on cpplib and Chill. 23879 23880 * Robert Brown implemented the support for Encore 32000 systems. 23881 23882 * Christian Bruel for improvements to local store elimination. 23883 23884 * Herman A.J. ten Brugge for various fixes. 23885 23886 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 23887 FAQ. 23888 23889 * Joe Buck for his direction via the steering committee. 23890 23891 * Craig Burley for leadership of the Fortran effort. 23892 23893 * Stephan Buys for contributing Doxygen notes for libstdc++. 23894 23895 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 23896 to the C++ strings, streambufs and formatted I/O, hard detective 23897 work on the frustrating localization issues, and keeping up with 23898 the problem reports. 23899 23900 * John Carr for his alias work, SPARC hacking, infrastructure 23901 improvements, previous contributions to the steering committee, 23902 loop optimizations, etc. 23903 23904 * Stephane Carrez for 68HC11 and 68HC12 ports. 23905 23906 * Steve Chamberlain for support for the Renesas SH and H8 processors 23907 and the PicoJava processor, and for GCJ config fixes. 23908 23909 * Glenn Chambers for help with the GCJ FAQ. 23910 23911 * John-Marc Chandonia for various libgcj patches. 23912 23913 * Scott Christley for his Objective-C contributions. 23914 23915 * Eric Christopher for his Java porting help and clean-ups. 23916 23917 * Branko Cibej for more warning contributions. 23918 23919 * The GNU Classpath project for all of their merged runtime code. 23920 23921 * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and 23922 other random hacking. 23923 23924 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 23925 23926 * R. Kelley Cook for making GCC buildable from a read-only directory 23927 as well as other miscellaneous build process and documentation 23928 clean-ups. 23929 23930 * Ralf Corsepius for SH testing and minor bugfixing. 23931 23932 * Stan Cox for care and feeding of the x86 port and lots of behind 23933 the scenes hacking. 23934 23935 * Alex Crain provided changes for the 3b1. 23936 23937 * Ian Dall for major improvements to the NS32k port. 23938 23939 * Paul Dale for his work to add uClinux platform support to the m68k 23940 backend. 23941 23942 * Dario Dariol contributed the four varieties of sample programs 23943 that print a copy of their source. 23944 23945 * Russell Davidson for fstream and stringstream fixes in libstdc++. 23946 23947 * Mo DeJong for GCJ and libgcj bug fixes. 23948 23949 * DJ Delorie for the DJGPP port, build and libiberty maintenance, and 23950 various bug fixes. 23951 23952 * Gabriel Dos Reis for contributions to G++, contributions and 23953 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 23954 including valarray<>, complex<>, maintaining the numerics library 23955 (including that pesky <limits> :-) and keeping up-to-date anything 23956 to do with numbers. 23957 23958 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 23959 ISO C99 support, CFG dumping support, etc., plus support of the 23960 C++ runtime libraries including for all kinds of C interface 23961 issues, contributing and maintaining complex<>, sanity checking 23962 and disbursement, configuration architecture, libio maintenance, 23963 and early math work. 23964 23965 * Zdenek Dvorak for a new loop unroller and various fixes. 23966 23967 * Richard Earnshaw for his ongoing work with the ARM. 23968 23969 * David Edelsohn for his direction via the steering committee, 23970 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 23971 loop changes, doing the entire AIX port of libstdc++ with his bare 23972 hands, and for ensuring GCC properly keeps working on AIX. 23973 23974 * Kevin Ediger for the floating point formatting of num_put::do_put 23975 in libstdc++. 23976 23977 * Phil Edwards for libstdc++ work including configuration hackery, 23978 documentation maintainer, chief breaker of the web pages, the 23979 occasional iostream bug fix, and work on shared library symbol 23980 versioning. 23981 23982 * Paul Eggert for random hacking all over GCC. 23983 23984 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 23985 configuration support for locales and fstream-related fixes. 23986 23987 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 23988 iostreams. 23989 23990 * Christian Ehrhardt for dealing with bug reports. 23991 23992 * Ben Elliston for his work to move the Objective-C runtime into its 23993 own subdirectory and for his work on autoconf. 23994 23995 * Marc Espie for OpenBSD support. 23996 23997 * Doug Evans for much of the global optimization framework, arc, 23998 m32r, and SPARC work. 23999 24000 * Christopher Faylor for his work on the Cygwin port and for caring 24001 and feeding the gcc.gnu.org box and saving its users tons of spam. 24002 24003 * Fred Fish for BeOS support and Ada fixes. 24004 24005 * Ivan Fontes Garcia for the Portugese translation of the GCJ FAQ. 24006 24007 * Peter Gerwinski for various bug fixes and the Pascal front end. 24008 24009 * Kaveh Ghazi for his direction via the steering committee, amazing 24010 work to make `-W -Wall' useful, and continuously testing GCC on a 24011 plethora of platforms. 24012 24013 * John Gilmore for a donation to the FSF earmarked improving GNU 24014 Java. 24015 24016 * Judy Goldberg for c++ contributions. 24017 24018 * Torbjorn Granlund for various fixes and the c-torture testsuite, 24019 multiply- and divide-by-constant optimization, improved long long 24020 support, improved leaf function register allocation, and his 24021 direction via the steering committee. 24022 24023 * Anthony Green for his `-Os' contributions and Java front end work. 24024 24025 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 24026 Java code. 24027 24028 * Michael K. Gschwind contributed the port to the PDP-11. 24029 24030 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 24031 the support for Dwarf symbolic debugging information, and much of 24032 the support for System V Release 4. He has also worked heavily on 24033 the Intel 386 and 860 support. 24034 24035 * Bruno Haible for improvements in the runtime overhead for EH, new 24036 warnings and assorted bug fixes. 24037 24038 * Andrew Haley for his amazing Java compiler and library efforts. 24039 24040 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 24041 series 300. 24042 24043 * Michael Hayes for various thankless work he's done trying to get 24044 the c30/c40 ports functional. Lots of loop and unroll 24045 improvements and fixes. 24046 24047 * Dara Hazeghi for wading through myriads of target-specific bug 24048 reports. 24049 24050 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 24051 24052 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 24053 work, loop opts, and generally fixing lots of old problems we've 24054 ignored for years, flow rewrite and lots of further stuff, 24055 including reviewing tons of patches. 24056 24057 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 24058 various fixes. 24059 24060 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 24061 contributed the support for the Sony NEWS machine. 24062 24063 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 24064 various fixes. 24065 24066 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 24067 of testing and bug fixing, particularly of GCC configury code. 24068 24069 * Steve Holmgren for MachTen patches. 24070 24071 * Jan Hubicka for his x86 port improvements. 24072 24073 * Falk Hueffner for working on C and optimization bug reports. 24074 24075 * Bernardo Innocenti for his m68k work, including merging of 24076 ColdFire improvements and uClinux support. 24077 24078 * Christian Iseli for various bug fixes. 24079 24080 * Kamil Iskra for general m68k hacking. 24081 24082 * Lee Iverson for random fixes and MIPS testing. 24083 24084 * Andreas Jaeger for testing and benchmarking of GCC and various bug 24085 fixes. 24086 24087 * Jakub Jelinek for his SPARC work and sibling call optimizations as 24088 well as lots of bug fixes and test cases, and for improving the 24089 Java build system. 24090 24091 * Janis Johnson for ia64 testing and fixes, her quality improvement 24092 sidetracks, and web page maintenance. 24093 24094 * Kean Johnston for SCO OpenServer support and various fixes. 24095 24096 * Tim Josling for the sample language treelang based originally on 24097 Richard Kenner's ""toy" language". 24098 24099 * Nicolai Josuttis for additional libstdc++ documentation. 24100 24101 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 24102 target. 24103 24104 * David Kashtan of SRI adapted GCC to VMS. 24105 24106 * Ryszard Kabatek for many, many libstdc++ bug fixes and 24107 optimizations of strings, especially member functions, and for 24108 auto_ptr fixes. 24109 24110 * Geoffrey Keating for his ongoing work to make the PPC work for 24111 GNU/Linux and his automatic regression tester. 24112 24113 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 24114 work in just about every part of libstdc++. 24115 24116 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 24117 MIL-STD-1750A. 24118 24119 * Richard Kenner of the New York University Ultracomputer Research 24120 Laboratory wrote the machine descriptions for the AMD 29000, the 24121 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 24122 support for instruction attributes. He also made changes to 24123 better support RISC processors including changes to common 24124 subexpression elimination, strength reduction, function calling 24125 sequence handling, and condition code support, in addition to 24126 generalizing the code for frame pointer elimination and delay slot 24127 scheduling. Richard Kenner was also the head maintainer of GCC 24128 for several years. 24129 24130 * Mumit Khan for various contributions to the Cygwin and Mingw32 24131 ports and maintaining binary releases for Microsoft Windows hosts, 24132 and for massive libstdc++ porting work to Cygwin/Mingw32. 24133 24134 * Robin Kirkham for cpu32 support. 24135 24136 * Mark Klein for PA improvements. 24137 24138 * Thomas Koenig for various bug fixes. 24139 24140 * Bruce Korb for the new and improved fixincludes code. 24141 24142 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 24143 effort. 24144 24145 * Charles LaBrec contributed the support for the Integrated Solutions 24146 68020 system. 24147 24148 * Jeff Law for his direction via the steering committee, 24149 coordinating the entire egcs project and GCC 2.95, rolling out 24150 snapshots and releases, handling merges from GCC2, reviewing tons 24151 of patches that might have fallen through the cracks else, and 24152 random but extensive hacking. 24153 24154 * Marc Lehmann for his direction via the steering committee and 24155 helping with analysis and improvements of x86 performance. 24156 24157 * Ted Lemon wrote parts of the RTL reader and printer. 24158 24159 * Kriang Lerdsuwanakij for C++ improvements including template as 24160 template parameter support, and many C++ fixes. 24161 24162 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 24163 and random work on the Java front end. 24164 24165 * Alain Lichnewsky ported GCC to the MIPS CPU. 24166 24167 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 24168 and patches. 24169 24170 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 24171 24172 * Weiwen Liu for testing and various bug fixes. 24173 24174 * Dave Love for his ongoing work with the Fortran front end and 24175 runtime libraries. 24176 24177 * Martin von Lo"wis for internal consistency checking infrastructure, 24178 various C++ improvements including namespace support, and tons of 24179 assistance with libstdc++/compiler merges. 24180 24181 * H.J. Lu for his previous contributions to the steering committee, 24182 many x86 bug reports, prototype patches, and keeping the GNU/Linux 24183 ports working. 24184 24185 * Greg McGary for random fixes and (someday) bounded pointers. 24186 24187 * Andrew MacLeod for his ongoing work in building a real EH system, 24188 various code generation improvements, work on the global 24189 optimizer, etc. 24190 24191 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 24192 hacking improvements to compile-time performance, overall 24193 knowledge and direction in the area of instruction scheduling, and 24194 design and implementation of the automaton based instruction 24195 scheduler. 24196 24197 * Bob Manson for his behind the scenes work on dejagnu. 24198 24199 * Philip Martin for lots of libstdc++ string and vector iterator 24200 fixes and improvements, and string clean up and testsuites. 24201 24202 * All of the Mauve project contributors, for Java test code. 24203 24204 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 24205 24206 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 24207 24208 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 24209 powerpc, haifa, ECOFF debug support, and other assorted hacking. 24210 24211 * Jason Merrill for his direction via the steering committee and 24212 leading the G++ effort. 24213 24214 * David Miller for his direction via the steering committee, lots of 24215 SPARC work, improvements in jump.c and interfacing with the Linux 24216 kernel developers. 24217 24218 * Gary Miller ported GCC to Charles River Data Systems machines. 24219 24220 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 24221 the entire libstdc++ testsuite namespace-compatible. 24222 24223 * Mark Mitchell for his direction via the steering committee, 24224 mountains of C++ work, load/store hoisting out of loops, alias 24225 analysis improvements, ISO C `restrict' support, and serving as 24226 release manager for GCC 3.x. 24227 24228 * Alan Modra for various GNU/Linux bits and testing. 24229 24230 * Toon Moene for his direction via the steering committee, Fortran 24231 maintenance, and his ongoing work to make us make Fortran run fast. 24232 24233 * Jason Molenda for major help in the care and feeding of all the 24234 services on the gcc.gnu.org (formerly egcs.cygnus.com) 24235 machine--mail, web services, ftp services, etc etc. Doing all 24236 this work on scrap paper and the backs of envelopes would have 24237 been... difficult. 24238 24239 * Catherine Moore for fixing various ugly problems we have sent her 24240 way, including the haifa bug which was killing the Alpha & PowerPC 24241 Linux kernels. 24242 24243 * Mike Moreton for his various Java patches. 24244 24245 * David Mosberger-Tang for various Alpha improvements, and for the 24246 initial IA-64 port. 24247 24248 * Stephen Moshier contributed the floating point emulator that 24249 assists in cross-compilation and permits support for floating 24250 point numbers wider than 64 bits and for ISO C99 support. 24251 24252 * Bill Moyer for his behind the scenes work on various issues. 24253 24254 * Philippe De Muyter for his work on the m68k port. 24255 24256 * Joseph S. Myers for his work on the PDP-11 port, format checking 24257 and ISO C99 support, and continuous emphasis on (and contributions 24258 to) documentation. 24259 24260 * Nathan Myers for his work on libstdc++-v3: architecture and 24261 authorship through the first three snapshots, including 24262 implementation of locale infrastructure, string, shadow C headers, 24263 and the initial project documentation (DESIGN, CHECKLIST, and so 24264 forth). Later, more work on MT-safe string and shadow headers. 24265 24266 * Felix Natter for documentation on porting libstdc++. 24267 24268 * Nathanael Nerode for cleaning up the configuration/build process. 24269 24270 * NeXT, Inc. donated the front end that supports the Objective-C 24271 language. 24272 24273 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 24274 the search engine setup, various documentation fixes and other 24275 small fixes. 24276 24277 * Geoff Noer for this work on getting cygwin native builds working. 24278 24279 * Diego Novillo for his SPEC performance tracking web pages and 24280 assorted fixes in the middle end and various back ends. 24281 24282 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 24283 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 24284 related infrastructure improvements. 24285 24286 * Alexandre Oliva for various build infrastructure improvements, 24287 scripts and amazing testing work, including keeping libtool issues 24288 sane and happy. 24289 24290 * Melissa O'Neill for various NeXT fixes. 24291 24292 * Rainer Orth for random MIPS work, including improvements to GCC's 24293 o32 ABI support, improvements to dejagnu's MIPS support, Java 24294 configuration clean-ups and porting work, etc. 24295 24296 * Hartmut Penner for work on the s390 port. 24297 24298 * Paul Petersen wrote the machine description for the Alliant FX/8. 24299 24300 * Alexandre Petit-Bianco for implementing much of the Java compiler 24301 and continued Java maintainership. 24302 24303 * Matthias Pfaller for major improvements to the NS32k port. 24304 24305 * Gerald Pfeifer for his direction via the steering committee, 24306 pointing out lots of problems we need to solve, maintenance of the 24307 web pages, and taking care of documentation maintenance in general. 24308 24309 * Andrew Pinski for processing bug reports by the dozen. 24310 24311 * Ovidiu Predescu for his work on the Objective-C front end and 24312 runtime libraries. 24313 24314 * Jerry Quinn for major performance improvements in C++ formatted 24315 I/O. 24316 24317 * Ken Raeburn for various improvements to checker, MIPS ports and 24318 various cleanups in the compiler. 24319 24320 * Rolf W. Rasmussen for hacking on AWT. 24321 24322 * David Reese of Sun Microsystems contributed to the Solaris on 24323 PowerPC port. 24324 24325 * Volker Reichelt for keeping up with the problem reports. 24326 24327 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 24328 hacking. 24329 24330 * Loren J. Rittle for improvements to libstdc++-v3 including the 24331 FreeBSD port, threading fixes, thread-related configury changes, 24332 critical threading documentation, and solutions to really tricky 24333 I/O problems, as well as keeping GCC properly working on FreeBSD 24334 and continuous testing. 24335 24336 * Craig Rodrigues for processing tons of bug reports. 24337 24338 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 24339 24340 * Ken Rose for fixes to GCC's delay slot filling code. 24341 24342 * Paul Rubin wrote most of the preprocessor. 24343 24344 * Pe'tur Runo'lfsson for major performance improvements in C++ 24345 formatted I/O and large file support in C++ filebuf. 24346 24347 * Chip Salzenberg for libstdc++ patches and improvements to locales, 24348 traits, Makefiles, libio, libtool hackery, and "long long" support. 24349 24350 * Juha Sarlin for improvements to the H8 code generator. 24351 24352 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 24353 300. 24354 24355 * Roger Sayle for improvements to constant folding and GCC's RTL 24356 optimizers as well as for fixing numerous bugs. 24357 24358 * Bradley Schatz for his work on the GCJ FAQ. 24359 24360 * Peter Schauer wrote the code to allow debugging to work on the 24361 Alpha. 24362 24363 * William Schelter did most of the work on the Intel 80386 support. 24364 24365 * Bernd Schmidt for various code generation improvements and major 24366 work in the reload pass as well a serving as release manager for 24367 GCC 2.95.3. 24368 24369 * Peter Schmid for constant testing of libstdc++ - especially 24370 application testing, going above and beyond what was requested for 24371 the release criteria - and libstdc++ header file tweaks. 24372 24373 * Jason Schroeder for jcf-dump patches. 24374 24375 * Andreas Schwab for his work on the m68k port. 24376 24377 * Joel Sherrill for his direction via the steering committee, RTEMS 24378 contributions and RTEMS testing. 24379 24380 * Nathan Sidwell for many C++ fixes/improvements. 24381 24382 * Jeffrey Siegal for helping RMS with the original design of GCC, 24383 some code which handles the parse tree and RTL data structures, 24384 constant folding and help with the original VAX & m68k ports. 24385 24386 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 24387 from the LWG (thereby keeping GCC in line with updates from the 24388 ISO). 24389 24390 * Franz Sirl for his ongoing work with making the PPC port stable 24391 for GNU/Linux. 24392 24393 * Andrey Slepuhin for assorted AIX hacking. 24394 24395 * Christopher Smith did the port for Convex machines. 24396 24397 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 24398 24399 * Randy Smith finished the Sun FPA support. 24400 24401 * Scott Snyder for queue, iterator, istream, and string fixes and 24402 libstdc++ testsuite entries. 24403 24404 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 24405 24406 * Richard Stallman, for writing the original GCC and launching the 24407 GNU project. 24408 24409 * Jan Stein of the Chalmers Computer Society provided support for 24410 Genix, as well as part of the 32000 machine description. 24411 24412 * Nigel Stephens for various mips16 related fixes/improvements. 24413 24414 * Jonathan Stone wrote the machine description for the Pyramid 24415 computer. 24416 24417 * Graham Stott for various infrastructure improvements. 24418 24419 * John Stracke for his Java HTTP protocol fixes. 24420 24421 * Mike Stump for his Elxsi port, G++ contributions over the years 24422 and more recently his vxworks contributions 24423 24424 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 24425 24426 * Shigeya Suzuki for this fixes for the bsdi platforms. 24427 24428 * Ian Lance Taylor for his mips16 work, general configury hacking, 24429 fixincludes, etc. 24430 24431 * Holger Teutsch provided the support for the Clipper CPU. 24432 24433 * Gary Thomas for his ongoing work to make the PPC work for 24434 GNU/Linux. 24435 24436 * Philipp Thomas for random bug fixes throughout the compiler 24437 24438 * Jason Thorpe for thread support in libstdc++ on NetBSD. 24439 24440 * Kresten Krab Thorup wrote the run time support for the Objective-C 24441 language and the fantastic Java bytecode interpreter. 24442 24443 * Michael Tiemann for random bug fixes, the first instruction 24444 scheduler, initial C++ support, function integration, NS32k, SPARC 24445 and M88k machine description work, delay slot scheduling. 24446 24447 * Andreas Tobler for his work porting libgcj to Darwin. 24448 24449 * Teemu Torma for thread safe exception handling support. 24450 24451 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 24452 definitions, and of the VAX machine description. 24453 24454 * Tom Tromey for internationalization support and for his many Java 24455 contributions and libgcj maintainership. 24456 24457 * Lassi Tuura for improvements to config.guess to determine HP 24458 processor types. 24459 24460 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 24461 24462 * Brent Verner for work with the libstdc++ cshadow files and their 24463 associated configure steps. 24464 24465 * Todd Vierling for contributions for NetBSD ports. 24466 24467 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 24468 guidance. 24469 24470 * Dean Wakerley for converting the install documentation from HTML 24471 to texinfo in time for GCC 3.0. 24472 24473 * Krister Walfridsson for random bug fixes. 24474 24475 * Stephen M. Webb for time and effort on making libstdc++ shadow 24476 files work with the tricky Solaris 8+ headers, and for pushing the 24477 build-time header tree. 24478 24479 * John Wehle for various improvements for the x86 code generator, 24480 related infrastructure improvements to help x86 code generation, 24481 value range propagation and other work, WE32k port. 24482 24483 * Ulrich Weigand for work on the s390 port. 24484 24485 * Zack Weinberg for major work on cpplib and various other bug fixes. 24486 24487 * Matt Welsh for help with Linux Threads support in GCJ. 24488 24489 * Urban Widmark for help fixing java.io. 24490 24491 * Mark Wielaard for new Java library code and his work integrating 24492 with Classpath. 24493 24494 * Dale Wiles helped port GCC to the Tahoe. 24495 24496 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 24497 24498 * Jim Wilson for his direction via the steering committee, tackling 24499 hard problems in various places that nobody else wanted to work 24500 on, strength reduction and other loop optimizations. 24501 24502 * Carlo Wood for various fixes. 24503 24504 * Tom Wood for work on the m88k port. 24505 24506 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 24507 description for the Tron architecture (specifically, the Gmicro). 24508 24509 * Kevin Zachmann helped ported GCC to the Tahoe. 24510 24511 * Gilles Zunino for help porting Java to Irix. 24512 24513 24514 In addition to the above, all of which also contributed time and 24515energy in testing GCC, we would like to thank the following for their 24516contributions to testing: 24517 24518 * Michael Abd-El-Malek 24519 24520 * Thomas Arend 24521 24522 * Bonzo Armstrong 24523 24524 * Steven Ashe 24525 24526 * Chris Baldwin 24527 24528 * David Billinghurst 24529 24530 * Jim Blandy 24531 24532 * Stephane Bortzmeyer 24533 24534 * Horst von Brand 24535 24536 * Frank Braun 24537 24538 * Rodney Brown 24539 24540 * Sidney Cadot 24541 24542 * Bradford Castalia 24543 24544 * Ralph Doncaster 24545 24546 * Richard Emberson 24547 24548 * Levente Farkas 24549 24550 * Graham Fawcett 24551 24552 * Robert A. French 24553 24554 * Jo"rgen Freyh 24555 24556 * Mark K. Gardner 24557 24558 * Charles-Antoine Gauthier 24559 24560 * Yung Shing Gene 24561 24562 * David Gilbert 24563 24564 * Simon Gornall 24565 24566 * Fred Gray 24567 24568 * John Griffin 24569 24570 * Patrik Hagglund 24571 24572 * Phil Hargett 24573 24574 * Amancio Hasty 24575 24576 * Bryan W. Headley 24577 24578 * Kevin B. Hendricks 24579 24580 * Joep Jansen 24581 24582 * Christian Joensson 24583 24584 * David Kidd 24585 24586 * Tobias Kuipers 24587 24588 * Anand Krishnaswamy 24589 24590 * llewelly 24591 24592 * Damon Love 24593 24594 * Brad Lucier 24595 24596 * Matthias Klose 24597 24598 * Martin Knoblauch 24599 24600 * Jesse Macnish 24601 24602 * Stefan Morrell 24603 24604 * Anon A. Mous 24605 24606 * Matthias Mueller 24607 24608 * Pekka Nikander 24609 24610 * Jon Olson 24611 24612 * Magnus Persson 24613 24614 * Chris Pollard 24615 24616 * Richard Polton 24617 24618 * David Rees 24619 24620 * Paul Reilly 24621 24622 * Tom Reilly 24623 24624 * Torsten Rueger 24625 24626 * Danny Sadinoff 24627 24628 * Marc Schifer 24629 24630 * David Schuler 24631 24632 * Vin Shelton 24633 24634 * Tim Souder 24635 24636 * Adam Sulmicki 24637 24638 * George Talbot 24639 24640 * Gregory Warnes 24641 24642 * David E. Young 24643 24644 * And many others 24645 24646 And finally we'd like to thank everyone who uses the compiler, submits 24647bug reports and generally reminds us why we're doing this work in the 24648first place. 24649 24650 24651File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 24652 24653Option Index 24654************ 24655 24656GCC's command line options are indexed here without any initial `-' or 24657`--'. Where an option has both positive and negative forms (such as 24658`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 24659indexed under the most appropriate form; it may sometimes be useful to 24660look up both forms. 24661 24662[index] 24663* Menu: 24664 24665* ###: Overall Options. (line 174) 24666* -mf930: SPARC Options. (line 122) 24667* -mf934: SPARC Options. (line 122) 24668* A: Preprocessor Options. 24669 (line 474) 24670* all_load: Darwin Options. (line 11) 24671* allowable_client: Darwin Options. (line 87) 24672* ansi <1>: Non-bugs. (line 107) 24673* ansi <2>: Other Builtins. (line 22) 24674* ansi <3>: Preprocessor Options. 24675 (line 308) 24676* ansi <4>: C Dialect Options. (line 10) 24677* ansi: Standards. (line 13) 24678* arch_errors_fatal: Darwin Options. (line 15) 24679* arch_only: Darwin Options. (line 87) 24680* aux-info: C Dialect Options. (line 97) 24681* b: Target Options. (line 13) 24682* B: Directory Options. (line 55) 24683* bcopy-builtin: PDP-11 Options. (line 32) 24684* bind_at_load: Darwin Options. (line 19) 24685* bundle: Darwin Options. (line 24) 24686* bundle_loader: Darwin Options. (line 28) 24687* c: Link Options. (line 20) 24688* C: Preprocessor Options. 24689 (line 521) 24690* c: Overall Options. (line 126) 24691* client_name: Darwin Options. (line 87) 24692* compatibility_version: Darwin Options. (line 87) 24693* crossjumping: Optimize Options. (line 382) 24694* current_version: Darwin Options. (line 87) 24695* D: Preprocessor Options. 24696 (line 33) 24697* d: Debugging Options. (line 199) 24698* da: Debugging Options. (line 327) 24699* dA: Debugging Options. (line 210) 24700* dB: Debugging Options. (line 217) 24701* db: Debugging Options. (line 214) 24702* dC: Debugging Options. (line 224) 24703* dc: Debugging Options. (line 220) 24704* dD <1>: Preprocessor Options. 24705 (line 502) 24706* dD: Debugging Options. (line 234) 24707* dd: Debugging Options. (line 229) 24708* dE: Debugging Options. (line 238) 24709* dependency-file: Darwin Options. (line 87) 24710* dF: Debugging Options. (line 245) 24711* df: Debugging Options. (line 241) 24712* dG: Debugging Options. (line 251) 24713* dg: Debugging Options. (line 248) 24714* dH: Debugging Options. (line 330) 24715* dh: Debugging Options. (line 255) 24716* dI: Preprocessor Options. 24717 (line 511) 24718* di: Debugging Options. (line 258) 24719* dj: Debugging Options. (line 261) 24720* dk: Debugging Options. (line 264) 24721* dL: Debugging Options. (line 271) 24722* dl: Debugging Options. (line 268) 24723* dM: Preprocessor Options. 24724 (line 490) 24725* dm: Debugging Options. (line 333) 24726* dM: Debugging Options. (line 275) 24727* dN <1>: Preprocessor Options. 24728 (line 508) 24729* dN: Debugging Options. (line 282) 24730* dn: Debugging Options. (line 279) 24731* do: Debugging Options. (line 285) 24732* dP: Debugging Options. (line 342) 24733* dp: Debugging Options. (line 337) 24734* dR: Debugging Options. (line 291) 24735* dr: Debugging Options. (line 288) 24736* dS: Debugging Options. (line 298) 24737* ds: Debugging Options. (line 294) 24738* dT: Debugging Options. (line 305) 24739* dt: Debugging Options. (line 301) 24740* dU: Debugging Options. (line 311) 24741* du: Debugging Options. (line 308) 24742* dumpmachine: Debugging Options. (line 504) 24743* dumpspecs: Debugging Options. (line 512) 24744* dumpversion: Debugging Options. (line 508) 24745* dv: Debugging Options. (line 346) 24746* dV: Debugging Options. (line 314) 24747* dw: Debugging Options. (line 318) 24748* dx: Debugging Options. (line 351) 24749* dy: Debugging Options. (line 355) 24750* dylib_file: Darwin Options. (line 87) 24751* dylinker_install_name: Darwin Options. (line 87) 24752* dynamic: Darwin Options. (line 87) 24753* dynamiclib: Darwin Options. (line 87) 24754* dZ: Debugging Options. (line 324) 24755* dz: Debugging Options. (line 321) 24756* E <1>: Link Options. (line 20) 24757* E: Overall Options. (line 147) 24758* EB <1>: ARC Options. (line 12) 24759* EB: MIPS Options. (line 7) 24760* EL <1>: ARC Options. (line 9) 24761* EL: MIPS Options. (line 10) 24762* exported_symbols_list: Darwin Options. (line 87) 24763* fabi-version: C++ Dialect Options. 24764 (line 20) 24765* falign-functions: Optimize Options. (line 644) 24766* falign-jumps: Optimize Options. (line 694) 24767* falign-labels: Optimize Options. (line 662) 24768* falign-loops: Optimize Options. (line 680) 24769* fargument-alias: Code Gen Options. (line 314) 24770* fargument-noalias: Code Gen Options. (line 314) 24771* fargument-noalias-global: Code Gen Options. (line 314) 24772* fbounds-check: Code Gen Options. (line 15) 24773* fbranch-probabilities: Optimize Options. (line 876) 24774* fbranch-target-load-optimize: Optimize Options. (line 1004) 24775* fbranch-target-load-optimize2: Optimize Options. (line 1010) 24776* fcall-saved <1>: Interoperation. (line 197) 24777* fcall-saved: Code Gen Options. (line 230) 24778* fcall-used: Code Gen Options. (line 216) 24779* fcaller-saves: Optimize Options. (line 516) 24780* fcheck-new: C++ Dialect Options. 24781 (line 34) 24782* fcommon: Variable Attributes. 24783 (line 92) 24784* fcond-mismatch: C Dialect Options. (line 197) 24785* fconserve-space: C++ Dialect Options. 24786 (line 44) 24787* fconstant-string-class: Objective-C Dialect Options. 24788 (line 24) 24789* fcse-follow-jumps: Optimize Options. (line 311) 24790* fcse-skip-blocks: Optimize Options. (line 320) 24791* fdata-sections: Optimize Options. (line 985) 24792* fdelayed-branch: Optimize Options. (line 435) 24793* fdelete-null-pointer-checks: Optimize Options. (line 404) 24794* fdiagnostics-show-location: Language Independent Options. 24795 (line 21) 24796* fdollars-in-identifiers <1>: Interoperation. (line 193) 24797* fdollars-in-identifiers: Preprocessor Options. 24798 (line 409) 24799* fdump-class-hierarchy: Debugging Options. (line 374) 24800* fdump-translation-unit: Debugging Options. (line 366) 24801* fdump-tree: Debugging Options. (line 382) 24802* fdump-unnumbered: Debugging Options. (line 358) 24803* feliminate-dwarf2-dups: Debugging Options. (line 112) 24804* feliminate-unused-debug-symbols: Debugging Options. (line 53) 24805* feliminate-unused-debug-types: Debugging Options. (line 516) 24806* fexceptions: Code Gen Options. (line 34) 24807* fexec-charset: Preprocessor Options. 24808 (line 431) 24809* fexpensive-optimizations: Optimize Options. (line 417) 24810* ffast-math: Optimize Options. (line 767) 24811* ffinite-math-only: Optimize Options. (line 807) 24812* ffixed: Code Gen Options. (line 204) 24813* ffloat-store <1>: Disappointments. (line 79) 24814* ffloat-store: Optimize Options. (line 753) 24815* ffor-scope: C++ Dialect Options. 24816 (line 81) 24817* fforce-addr: Optimize Options. (line 141) 24818* fforce-mem: Optimize Options. (line 132) 24819* ffreestanding <1>: Function Attributes. 24820 (line 168) 24821* ffreestanding <2>: C Dialect Options. (line 162) 24822* ffreestanding: Standards. (line 81) 24823* ffunction-sections: Optimize Options. (line 985) 24824* fgcse: Optimize Options. (line 339) 24825* fgcse-las: Optimize Options. (line 368) 24826* fgcse-lm: Optimize Options. (line 350) 24827* fgcse-sm: Optimize Options. (line 359) 24828* fgnu-runtime: Objective-C Dialect Options. 24829 (line 33) 24830* fhosted: C Dialect Options. (line 155) 24831* filelist: Darwin Options. (line 87) 24832* finhibit-size-directive: Code Gen Options. (line 154) 24833* finline-functions: Optimize Options. (line 173) 24834* finline-limit: Optimize Options. (line 184) 24835* finput-charset: Preprocessor Options. 24836 (line 444) 24837* finstrument-functions <1>: Function Attributes. 24838 (line 244) 24839* finstrument-functions: Code Gen Options. (line 255) 24840* fkeep-inline-functions <1>: Inline. (line 51) 24841* fkeep-inline-functions: Optimize Options. (line 222) 24842* fkeep-static-consts: Optimize Options. (line 228) 24843* flat_namespace: Darwin Options. (line 87) 24844* fleading-underscore: Code Gen Options. (line 329) 24845* floop-optimize: Optimize Options. (line 375) 24846* fmem-report: Debugging Options. (line 137) 24847* fmessage-length: Language Independent Options. 24848 (line 15) 24849* fmove-all-movables: Optimize Options. (line 529) 24850* fms-extensions <1>: C++ Dialect Options. 24851 (line 116) 24852* fms-extensions: C Dialect Options. (line 172) 24853* fnew-ra: Optimize Options. (line 257) 24854* fnext-runtime: Objective-C Dialect Options. 24855 (line 37) 24856* fno-access-control: C++ Dialect Options. 24857 (line 30) 24858* fno-asm: C Dialect Options. (line 113) 24859* fno-branch-count-reg: Optimize Options. (line 262) 24860* fno-builtin <1>: Other Builtins. (line 14) 24861* fno-builtin: C Dialect Options. (line 127) 24862* fno-common <1>: Variable Attributes. 24863 (line 92) 24864* fno-common: Code Gen Options. (line 142) 24865* fno-const-strings: C++ Dialect Options. 24866 (line 56) 24867* fno-cprop-registers: Optimize Options. (line 725) 24868* fno-default-inline <1>: Inline. (line 46) 24869* fno-default-inline <2>: Optimize Options. (line 117) 24870* fno-default-inline: C++ Dialect Options. 24871 (line 187) 24872* fno-defer-pop: Optimize Options. (line 124) 24873* fno-elide-constructors: C++ Dialect Options. 24874 (line 67) 24875* fno-enforce-eh-specs: C++ Dialect Options. 24876 (line 73) 24877* fno-for-scope: C++ Dialect Options. 24878 (line 81) 24879* fno-function-cse: Optimize Options. (line 273) 24880* fno-gnu-keywords: C++ Dialect Options. 24881 (line 93) 24882* fno-guess-branch-probability: Optimize Options. (line 563) 24883* fno-ident: Code Gen Options. (line 151) 24884* fno-implement-inlines <1>: C++ Interface. (line 75) 24885* fno-implement-inlines: C++ Dialect Options. 24886 (line 110) 24887* fno-implicit-inline-templates: C++ Dialect Options. 24888 (line 104) 24889* fno-implicit-templates <1>: Template Instantiation. 24890 (line 87) 24891* fno-implicit-templates: C++ Dialect Options. 24892 (line 98) 24893* fno-inline: Optimize Options. (line 167) 24894* fno-math-errno: Optimize Options. (line 780) 24895* fno-nil-receivers: Objective-C Dialect Options. 24896 (line 43) 24897* fno-nonansi-builtins: C++ Dialect Options. 24898 (line 121) 24899* fno-operator-names: C++ Dialect Options. 24900 (line 126) 24901* fno-optional-diags: C++ Dialect Options. 24902 (line 130) 24903* fno-peephole: Optimize Options. (line 554) 24904* fno-peephole2: Optimize Options. (line 554) 24905* fno-rtti: C++ Dialect Options. 24906 (line 145) 24907* fno-sched-interblock: Optimize Options. (line 461) 24908* fno-sched-spec: Optimize Options. (line 466) 24909* fno-show-column: Preprocessor Options. 24910 (line 469) 24911* fno-signed-bitfields: C Dialect Options. (line 230) 24912* fno-stack-limit: Code Gen Options. (line 298) 24913* fno-trapping-math: Optimize Options. (line 817) 24914* fno-unsigned-bitfields: C Dialect Options. (line 230) 24915* fno-weak: C++ Dialect Options. 24916 (line 172) 24917* fno-working-directory: Preprocessor Options. 24918 (line 454) 24919* fno-zero-initialized-in-bss: Optimize Options. (line 284) 24920* fnon-call-exceptions: Code Gen Options. (line 48) 24921* fobjc-exceptions: Objective-C Dialect Options. 24922 (line 50) 24923* fold-unroll-all-loops: Optimize Options. (line 960) 24924* fold-unroll-loops: Optimize Options. (line 952) 24925* fomit-frame-pointer: Optimize Options. (line 146) 24926* foptimize-register-move: Optimize Options. (line 424) 24927* foptimize-sibling-calls: Optimize Options. (line 162) 24928* force_cpusubtype_ALL: Darwin Options. (line 87) 24929* force_flat_namespace: Darwin Options. (line 87) 24930* fpack-struct: Code Gen Options. (line 247) 24931* fpcc-struct-return <1>: Incompatibilities. (line 172) 24932* fpcc-struct-return: Code Gen Options. (line 70) 24933* fpch-deps: Preprocessor Options. 24934 (line 281) 24935* fpeel-loops: Optimize Options. (line 941) 24936* fpermissive: C++ Dialect Options. 24937 (line 135) 24938* fPIC: Code Gen Options. (line 188) 24939* fpic: Code Gen Options. (line 170) 24940* fPIE: Code Gen Options. (line 198) 24941* fpie: Code Gen Options. (line 198) 24942* fprefetch-loop-arrays: Optimize Options. (line 977) 24943* fpreprocessed: Preprocessor Options. 24944 (line 412) 24945* fprofile-arcs <1>: Other Builtins. (line 227) 24946* fprofile-arcs: Debugging Options. (line 141) 24947* fprofile-generate: Optimize Options. (line 732) 24948* fprofile-use: Optimize Options. (line 741) 24949* fprofile-values: Optimize Options. (line 895) 24950* frandom-string: Debugging Options. (line 415) 24951* freduce-all-givs: Optimize Options. (line 533) 24952* freg-struct-return: Code Gen Options. (line 88) 24953* fregmove: Optimize Options. (line 424) 24954* frename-registers: Optimize Options. (line 707) 24955* freorder-blocks: Optimize Options. (line 581) 24956* freorder-functions: Optimize Options. (line 587) 24957* freplace-objc-classes: Objective-C Dialect Options. 24958 (line 135) 24959* frepo <1>: Template Instantiation. 24960 (line 62) 24961* frepo: C++ Dialect Options. 24962 (line 140) 24963* frerun-cse-after-loop: Optimize Options. (line 328) 24964* frerun-loop-opt: Optimize Options. (line 334) 24965* frounding-math: Optimize Options. (line 832) 24966* fsched-spec-load: Optimize Options. (line 471) 24967* fsched-spec-load-dangerous: Optimize Options. (line 476) 24968* fsched-stalled-insns: Optimize Options. (line 481) 24969* fsched-stalled-insns-dep: Optimize Options. (line 486) 24970* fsched-verbose: Debugging Options. (line 425) 24971* fsched2-use-superblocks: Optimize Options. (line 493) 24972* fsched2-use-traces: Optimize Options. (line 504) 24973* fschedule-insns: Optimize Options. (line 442) 24974* fschedule-insns2: Optimize Options. (line 452) 24975* fshared-data: Code Gen Options. (line 135) 24976* fshort-double: Code Gen Options. (line 117) 24977* fshort-enums <1>: Non-bugs. (line 42) 24978* fshort-enums <2>: Type Attributes. (line 112) 24979* fshort-enums: Code Gen Options. (line 106) 24980* fshort-wchar: Code Gen Options. (line 125) 24981* fsignaling-nans: Optimize Options. (line 852) 24982* fsigned-bitfields <1>: Non-bugs. (line 57) 24983* fsigned-bitfields: C Dialect Options. (line 230) 24984* fsigned-char: C Dialect Options. (line 220) 24985* fsingle-precision-constant: Optimize Options. (line 867) 24986* fstack-check: Code Gen Options. (line 283) 24987* fstack-limit-register: Code Gen Options. (line 298) 24988* fstack-limit-symbol: Code Gen Options. (line 298) 24989* fstats: C++ Dialect Options. 24990 (line 153) 24991* fstrength-reduce: Optimize Options. (line 296) 24992* fstrict-aliasing: Optimize Options. (line 601) 24993* fsyntax-only: Warning Options. (line 22) 24994* ftabstop: Preprocessor Options. 24995 (line 425) 24996* ftemplate-depth: C++ Dialect Options. 24997 (line 158) 24998* ftest-coverage: Debugging Options. (line 190) 24999* fthread-jumps: Optimize Options. (line 302) 25000* ftime-report: Debugging Options. (line 133) 25001* ftracer: Optimize Options. (line 917) 25002* ftrapv: Code Gen Options. (line 22) 25003* funit-at-a-time: Optimize Options. (line 922) 25004* funroll-all-loops: Optimize Options. (line 935) 25005* funroll-loops <1>: Non-bugs. (line 173) 25006* funroll-loops: Optimize Options. (line 927) 25007* funsafe-math-optimizations: Optimize Options. (line 793) 25008* funsigned-bitfields <1>: Non-bugs. (line 57) 25009* funsigned-bitfields: C Dialect Options. (line 230) 25010* funsigned-char: C Dialect Options. (line 202) 25011* funswitch-loops: Optimize Options. (line 947) 25012* funwind-tables: Code Gen Options. (line 57) 25013* fuse-cxa-atexit: C++ Dialect Options. 25014 (line 165) 25015* fverbose-asm: Code Gen Options. (line 161) 25016* fvpt: Optimize Options. (line 903) 25017* fweb: Optimize Options. (line 714) 25018* fwide-exec-charset: Preprocessor Options. 25019 (line 436) 25020* fworking-directory: Preprocessor Options. 25021 (line 454) 25022* fwrapv: Code Gen Options. (line 26) 25023* fwritable-strings <1>: Incompatibilities. (line 22) 25024* fwritable-strings: C Dialect Options. (line 236) 25025* fzero-link: Objective-C Dialect Options. 25026 (line 145) 25027* G <1>: System V Options. (line 10) 25028* G <2>: MIPS Options. (line 177) 25029* G <3>: RS/6000 and PowerPC Options. 25030 (line 508) 25031* G: M32R/D Options. (line 57) 25032* g: Debugging Options. (line 10) 25033* gcoff: Debugging Options. (line 63) 25034* gdwarf-2: Debugging Options. (line 81) 25035* gen-decls: Objective-C Dialect Options. 25036 (line 155) 25037* ggdb: Debugging Options. (line 39) 25038* gnu-ld: HPPA Options. (line 110) 25039* gstabs: Debugging Options. (line 45) 25040* gstabs+: Debugging Options. (line 57) 25041* gvms: Debugging Options. (line 85) 25042* gxcoff: Debugging Options. (line 68) 25043* gxcoff+: Debugging Options. (line 73) 25044* H: Preprocessor Options. 25045 (line 576) 25046* headerpad_max_install_names: Darwin Options. (line 87) 25047* help <1>: Preprocessor Options. 25048 (line 568) 25049* help: Overall Options. (line 185) 25050* hp-ld: HPPA Options. (line 120) 25051* I <1>: Directory Options. (line 10) 25052* I: Preprocessor Options. 25053 (line 65) 25054* I- <1>: Directory Options. (line 31) 25055* I-: Preprocessor Options. 25056 (line 345) 25057* idirafter: Preprocessor Options. 25058 (line 386) 25059* if-conversion: Optimize Options. (line 389) 25060* if-conversion2: Optimize Options. (line 398) 25061* imacros: Preprocessor Options. 25062 (line 377) 25063* image_base: Darwin Options. (line 87) 25064* include: Preprocessor Options. 25065 (line 366) 25066* init: Darwin Options. (line 87) 25067* install_name: Darwin Options. (line 87) 25068* iprefix: Preprocessor Options. 25069 (line 391) 25070* isystem: Preprocessor Options. 25071 (line 403) 25072* iwithprefix: Preprocessor Options. 25073 (line 397) 25074* iwithprefixbefore: Preprocessor Options. 25075 (line 397) 25076* keep_private_externs: Darwin Options. (line 87) 25077* L: Directory Options. (line 51) 25078* l: Link Options. (line 26) 25079* lobjc: Link Options. (line 53) 25080* M: Preprocessor Options. 25081 (line 174) 25082* m1: SH Options. (line 9) 25083* m10: PDP-11 Options. (line 29) 25084* m128bit-long-double: i386 and x86-64 Options. 25085 (line 216) 25086* m16-bit: CRIS Options. (line 69) 25087* m2: SH Options. (line 12) 25088* m210: MCore Options. (line 43) 25089* m3: SH Options. (line 18) 25090* m31: S/390 and zSeries Options. 25091 (line 35) 25092* m32 <1>: i386 and x86-64 Options. 25093 (line 391) 25094* m32: SPARC Options. (line 218) 25095* m32-bit: CRIS Options. (line 69) 25096* m32032: NS32K Options. (line 13) 25097* m32081: NS32K Options. (line 27) 25098* m32332: NS32K Options. (line 18) 25099* m32381: NS32K Options. (line 31) 25100* m32532: NS32K Options. (line 23) 25101* m32r: M32R/D Options. (line 15) 25102* m32r2: M32R/D Options. (line 9) 25103* m32rx: M32R/D Options. (line 12) 25104* m340: MCore Options. (line 43) 25105* m386: i386 and x86-64 Options. 25106 (line 107) 25107* m3dnow: i386 and x86-64 Options. 25108 (line 323) 25109* m3e: SH Options. (line 21) 25110* m4: SH Options. (line 35) 25111* m4-nofpu: SH Options. (line 24) 25112* m4-single: SH Options. (line 31) 25113* m4-single-only: SH Options. (line 27) 25114* m40: PDP-11 Options. (line 23) 25115* m45: PDP-11 Options. (line 26) 25116* m486: i386 and x86-64 Options. 25117 (line 107) 25118* m4byte-functions: MCore Options. (line 27) 25119* m5200: M680x0 Options. (line 59) 25120* m64 <1>: S/390 and zSeries Options. 25121 (line 35) 25122* m64 <2>: i386 and x86-64 Options. 25123 (line 391) 25124* m64: SPARC Options. (line 218) 25125* m68000: M680x0 Options. (line 13) 25126* m68020: M680x0 Options. (line 21) 25127* m68020-40: M680x0 Options. (line 66) 25128* m68020-60: M680x0 Options. (line 73) 25129* m68030: M680x0 Options. (line 30) 25130* m68040: M680x0 Options. (line 34) 25131* m68060: M680x0 Options. (line 42) 25132* m6811: M68hc1x Options. (line 13) 25133* m6812: M68hc1x Options. (line 18) 25134* m68881: M680x0 Options. (line 25) 25135* m68hc11: M68hc1x Options. (line 13) 25136* m68hc12: M68hc1x Options. (line 18) 25137* m68hcs12: M68hc1x Options. (line 23) 25138* m68S12: M68hc1x Options. (line 23) 25139* m8-bit: CRIS Options. (line 69) 25140* m96bit-long-double: i386 and x86-64 Options. 25141 (line 216) 25142* mabi-mmixware: MMIX Options. (line 20) 25143* mabi=32: MIPS Options. (line 87) 25144* mabi=64: MIPS Options. (line 87) 25145* mabi=altivec: RS/6000 and PowerPC Options. 25146 (line 403) 25147* mabi=eabi: MIPS Options. (line 87) 25148* mabi=gnu: MMIX Options. (line 20) 25149* mabi=n32: MIPS Options. (line 87) 25150* mabi=no-altivec: RS/6000 and PowerPC Options. 25151 (line 408) 25152* mabi=no-spe: RS/6000 and PowerPC Options. 25153 (line 146) 25154* mabi=o64: MIPS Options. (line 87) 25155* mabi=spe: RS/6000 and PowerPC Options. 25156 (line 141) 25157* mabicalls: MIPS Options. (line 95) 25158* mabort-on-noreturn: ARM Options. (line 171) 25159* mabshi: PDP-11 Options. (line 55) 25160* mac0: PDP-11 Options. (line 16) 25161* macc-4: FRV Options. (line 59) 25162* macc-8: FRV Options. (line 62) 25163* maccumulate-outgoing-args: i386 and x86-64 Options. 25164 (line 342) 25165* mads: RS/6000 and PowerPC Options. 25166 (line 433) 25167* maix-struct-return: RS/6000 and PowerPC Options. 25168 (line 396) 25169* maix32: RS/6000 and PowerPC Options. 25170 (line 196) 25171* maix64: RS/6000 and PowerPC Options. 25172 (line 196) 25173* malign-300: H8/300 Options. (line 31) 25174* malign-double: i386 and x86-64 Options. 25175 (line 202) 25176* malign-int: M680x0 Options. (line 125) 25177* malign-loops: M32R/D Options. (line 73) 25178* malign-natural: RS/6000 and PowerPC Options. 25179 (line 229) 25180* malign-power: RS/6000 and PowerPC Options. 25181 (line 229) 25182* malignment-traps: ARM Options. (line 87) 25183* malloc-cc: FRV Options. (line 25) 25184* malpha-as: DEC Alpha Options. (line 159) 25185* maltivec: RS/6000 and PowerPC Options. 25186 (line 135) 25187* mam33: MN10300 Options. (line 17) 25188* maout: CRIS Options. (line 92) 25189* mapcs: ARM Options. (line 18) 25190* mapcs-26: ARM Options. (line 21) 25191* mapcs-32: ARM Options. (line 29) 25192* mapcs-frame: ARM Options. (line 10) 25193* mapp-regs <1>: V850 Options. (line 57) 25194* mapp-regs: SPARC Options. (line 10) 25195* march <1>: CRIS Options. (line 10) 25196* march <2>: S/390 and zSeries Options. 25197 (line 63) 25198* march <3>: HPPA Options. (line 9) 25199* march <4>: i386 and x86-64 Options. 25200 (line 96) 25201* march <5>: MIPS Options. (line 14) 25202* march: ARM Options. (line 144) 25203* masm-compat: Intel 960 Options. (line 58) 25204* masm-optimize: D30V Options. (line 24) 25205* masm=DIALECT: i386 and x86-64 Options. 25206 (line 159) 25207* mauto-incdec: M68hc1x Options. (line 26) 25208* mauto-pic: IA-64 Options. (line 53) 25209* mb: SH Options. (line 38) 25210* mb-step: IA-64 Options. (line 36) 25211* mbackchain: S/390 and zSeries Options. 25212 (line 20) 25213* mbase-addresses: MMIX Options. (line 54) 25214* mbcopy: PDP-11 Options. (line 36) 25215* mbig <1>: TMS320C3x/C4x Options. 25216 (line 18) 25217* mbig: RS/6000 and PowerPC Options. 25218 (line 328) 25219* mbig-endian <1>: IA-64 Options. (line 9) 25220* mbig-endian <2>: MCore Options. (line 39) 25221* mbig-endian <3>: RS/6000 and PowerPC Options. 25222 (line 328) 25223* mbig-endian: ARM Options. (line 75) 25224* mbig-memory: TMS320C3x/C4x Options. 25225 (line 18) 25226* mbig-switch <1>: V850 Options. (line 52) 25227* mbig-switch: HPPA Options. (line 27) 25228* mbigtable: SH Options. (line 54) 25229* mbit-align: RS/6000 and PowerPC Options. 25230 (line 282) 25231* mbitfield <1>: NS32K Options. (line 66) 25232* mbitfield: M680x0 Options. (line 97) 25233* mbk: TMS320C3x/C4x Options. 25234 (line 27) 25235* mbranch-cheap: PDP-11 Options. (line 65) 25236* mbranch-cost: D30V Options. (line 29) 25237* mbranch-cost=NUMBER: M32R/D Options. (line 82) 25238* mbranch-expensive: PDP-11 Options. (line 61) 25239* mbranch-likely: MIPS Options. (line 291) 25240* mbranch-predict: MMIX Options. (line 49) 25241* mbuild-constants: DEC Alpha Options. (line 142) 25242* mbwx: DEC Alpha Options. (line 171) 25243* mc68000: M680x0 Options. (line 13) 25244* mc68020: M680x0 Options. (line 21) 25245* mca: Intel 960 Options. (line 9) 25246* mcall-gnu: RS/6000 and PowerPC Options. 25247 (line 388) 25248* mcall-linux: RS/6000 and PowerPC Options. 25249 (line 384) 25250* mcall-netbsd: RS/6000 and PowerPC Options. 25251 (line 392) 25252* mcall-prologues: AVR Options. (line 43) 25253* mcall-solaris: RS/6000 and PowerPC Options. 25254 (line 380) 25255* mcall-sysv: RS/6000 and PowerPC Options. 25256 (line 367) 25257* mcall-sysv-eabi: RS/6000 and PowerPC Options. 25258 (line 374) 25259* mcall-sysv-noeabi: RS/6000 and PowerPC Options. 25260 (line 377) 25261* mcallee-super-interworking: ARM Options. (line 261) 25262* mcaller-super-interworking: ARM Options. (line 267) 25263* mcallgraph-data: MCore Options. (line 31) 25264* mcc-init: CRIS Options. (line 46) 25265* mcf: Intel 960 Options. (line 9) 25266* mcheck-zero-division: MIPS Options. (line 235) 25267* mcirrus-fix-invalid-insns: ARM Options. (line 214) 25268* mcix: DEC Alpha Options. (line 171) 25269* mcmodel=embmedany: SPARC Options. (line 240) 25270* mcmodel=kernel: i386 and x86-64 Options. 25271 (line 412) 25272* mcmodel=large: i386 and x86-64 Options. 25273 (line 424) 25274* mcmodel=medany: SPARC Options. (line 234) 25275* mcmodel=medium: i386 and x86-64 Options. 25276 (line 417) 25277* mcmodel=medlow: SPARC Options. (line 223) 25278* mcmodel=medmid: SPARC Options. (line 228) 25279* mcmodel=small: i386 and x86-64 Options. 25280 (line 406) 25281* mcode-align: Intel 960 Options. (line 47) 25282* mcomplex-addr: Intel 960 Options. (line 39) 25283* mcond-exec <1>: FRV Options. (line 98) 25284* mcond-exec: D30V Options. (line 34) 25285* mcond-move: FRV Options. (line 74) 25286* mconst-align: CRIS Options. (line 60) 25287* mconst16: Xtensa Options. (line 10) 25288* mconstant-gp: IA-64 Options. (line 49) 25289* mcpu <1>: FRV Options. (line 150) 25290* mcpu <2>: CRIS Options. (line 10) 25291* mcpu <3>: ARC Options. (line 23) 25292* mcpu <4>: TMS320C3x/C4x Options. 25293 (line 9) 25294* mcpu <5>: DEC Alpha Options. (line 223) 25295* mcpu <6>: i386 and x86-64 Options. 25296 (line 101) 25297* mcpu <7>: RS/6000 and PowerPC Options. 25298 (line 82) 25299* mcpu <8>: ARM Options. (line 121) 25300* mcpu: SPARC Options. (line 127) 25301* mcpu32: M680x0 Options. (line 51) 25302* mcypress: SPARC Options. (line 122) 25303* MD: Preprocessor Options. 25304 (line 262) 25305* mdalign: SH Options. (line 44) 25306* mdata: ARC Options. (line 30) 25307* mdata-align: CRIS Options. (line 60) 25308* mdb: TMS320C3x/C4x Options. 25309 (line 32) 25310* mdebug <1>: S/390 and zSeries Options. 25311 (line 59) 25312* mdebug: M32R/D Options. (line 69) 25313* mdec-asm: PDP-11 Options. (line 78) 25314* mdisable-callt: V850 Options. (line 80) 25315* mdisable-fpregs: HPPA Options. (line 37) 25316* mdisable-indexing: HPPA Options. (line 44) 25317* mdiv: MCore Options. (line 15) 25318* mdouble: FRV Options. (line 38) 25319* mdouble-float: MIPS Options. (line 154) 25320* mdp-isr-reload: TMS320C3x/C4x Options. 25321 (line 45) 25322* mdwarf2-asm: IA-64 Options. (line 74) 25323* mdword: FRV Options. (line 32) 25324* mdynamic-no-pic: RS/6000 and PowerPC Options. 25325 (line 333) 25326* meabi: RS/6000 and PowerPC Options. 25327 (line 456) 25328* mearly-stop-bits: IA-64 Options. (line 87) 25329* melf <1>: MMIX Options. (line 44) 25330* melf: CRIS Options. (line 95) 25331* melinux: CRIS Options. (line 99) 25332* melinux-stacksize: CRIS Options. (line 25) 25333* memb: RS/6000 and PowerPC Options. 25334 (line 451) 25335* membedded-data: MIPS Options. (line 186) 25336* membedded-pic: MIPS Options. (line 124) 25337* mep: V850 Options. (line 16) 25338* mepsilon: MMIX Options. (line 15) 25339* mesa: S/390 and zSeries Options. 25340 (line 43) 25341* metrax100: CRIS Options. (line 31) 25342* metrax4: CRIS Options. (line 31) 25343* mexplicit-relocs <1>: DEC Alpha Options. (line 184) 25344* mexplicit-relocs: MIPS Options. (line 206) 25345* mextmem: D30V Options. (line 9) 25346* mextmemory: D30V Options. (line 14) 25347* MF: Preprocessor Options. 25348 (line 208) 25349* mfast-fix: TMS320C3x/C4x Options. 25350 (line 62) 25351* mfast-indirect-calls: HPPA Options. (line 56) 25352* mfaster-structs: SPARC Options. (line 88) 25353* mfix: DEC Alpha Options. (line 171) 25354* mfix-sb1: MIPS Options. (line 275) 25355* mfixed-cc: FRV Options. (line 28) 25356* mfixed-range: IA-64 Options. (line 79) 25357* mflat: SPARC Options. (line 59) 25358* mfloat-gprs: RS/6000 and PowerPC Options. 25359 (line 160) 25360* mfloat-ieee: DEC Alpha Options. (line 179) 25361* mfloat-vax: DEC Alpha Options. (line 179) 25362* mfloat32: PDP-11 Options. (line 52) 25363* mfloat64: PDP-11 Options. (line 48) 25364* mflush-func: MIPS Options. (line 281) 25365* mflush-func=NAME: M32R/D Options. (line 94) 25366* mflush-trap=NUMBER: M32R/D Options. (line 87) 25367* mfmovd: SH Options. (line 58) 25368* mfp: ARM Options. (line 153) 25369* mfp-reg: DEC Alpha Options. (line 25) 25370* mfp-rounding-mode: DEC Alpha Options. (line 85) 25371* mfp-trap-mode: DEC Alpha Options. (line 63) 25372* mfp32: MIPS Options. (line 137) 25373* mfp64: MIPS Options. (line 140) 25374* mfpe: ARM Options. (line 153) 25375* mfpr-32: FRV Options. (line 13) 25376* mfpr-64: FRV Options. (line 16) 25377* mfpu <1>: PDP-11 Options. (line 9) 25378* mfpu: SPARC Options. (line 20) 25379* mfull-toc: RS/6000 and PowerPC Options. 25380 (line 169) 25381* mfused-madd <1>: Xtensa Options. (line 19) 25382* mfused-madd <2>: S/390 and zSeries Options. 25383 (line 77) 25384* mfused-madd <3>: MIPS Options. (line 260) 25385* mfused-madd: RS/6000 and PowerPC Options. 25386 (line 276) 25387* mg: VAX Options. (line 17) 25388* MG: Preprocessor Options. 25389 (line 217) 25390* mgas <1>: DEC Alpha Options. (line 159) 25391* mgas: HPPA Options. (line 72) 25392* mgnu: VAX Options. (line 13) 25393* mgnu-as: IA-64 Options. (line 18) 25394* mgnu-ld: IA-64 Options. (line 23) 25395* mgotplt: CRIS Options. (line 86) 25396* mgp32: MIPS Options. (line 131) 25397* mgp64: MIPS Options. (line 134) 25398* mgpr-32: FRV Options. (line 7) 25399* mgpr-64: FRV Options. (line 10) 25400* mh: H8/300 Options. (line 14) 25401* mhard-float <1>: FRV Options. (line 19) 25402* mhard-float <2>: S/390 and zSeries Options. 25403 (line 11) 25404* mhard-float <3>: MIPS Options. (line 143) 25405* mhard-float <4>: RS/6000 and PowerPC Options. 25406 (line 238) 25407* mhard-float <5>: ARM Options. (line 53) 25408* mhard-float: SPARC Options. (line 20) 25409* mhard-quad-float: SPARC Options. (line 41) 25410* mhardlit: MCore Options. (line 10) 25411* mhimem: NS32K Options. (line 111) 25412* mhitachi: SH Options. (line 61) 25413* mic-compat: Intel 960 Options. (line 54) 25414* mic2.0-compat: Intel 960 Options. (line 54) 25415* mic3.0-compat: Intel 960 Options. (line 54) 25416* mieee <1>: SH Options. (line 68) 25417* mieee: DEC Alpha Options. (line 39) 25418* mieee-compare: NS32K Options. (line 55) 25419* mieee-conformant: DEC Alpha Options. (line 134) 25420* mieee-fp: i386 and x86-64 Options. 25421 (line 164) 25422* mieee-with-inexact: DEC Alpha Options. (line 52) 25423* mimpure-text: SPARC Options. (line 98) 25424* minit-stack: AVR Options. (line 35) 25425* minline-all-stringops: i386 and x86-64 Options. 25426 (line 363) 25427* minline-float-divide-max-throughput: IA-64 Options. (line 61) 25428* minline-float-divide-min-latency: IA-64 Options. (line 57) 25429* minline-int-divide-max-throughput: IA-64 Options. (line 69) 25430* minline-int-divide-min-latency: IA-64 Options. (line 65) 25431* minmax: M68hc1x Options. (line 31) 25432* minsert-sched-nops: RS/6000 and PowerPC Options. 25433 (line 355) 25434* mint16: PDP-11 Options. (line 40) 25435* mint32 <1>: PDP-11 Options. (line 44) 25436* mint32: H8/300 Options. (line 28) 25437* mint64: MIPS Options. (line 158) 25438* mintel-asm: Intel 960 Options. (line 58) 25439* mips1: MIPS Options. (line 58) 25440* mips16: MIPS Options. (line 80) 25441* mips2: MIPS Options. (line 61) 25442* mips3: MIPS Options. (line 64) 25443* mips32: MIPS Options. (line 70) 25444* mips32r2: MIPS Options. (line 73) 25445* mips4: MIPS Options. (line 67) 25446* mips64: MIPS Options. (line 76) 25447* misel: RS/6000 and PowerPC Options. 25448 (line 150) 25449* misize: SH Options. (line 71) 25450* missue-rate=NUMBER: M32R/D Options. (line 79) 25451* mjump-in-delay: HPPA Options. (line 32) 25452* mka: Intel 960 Options. (line 9) 25453* mkb: Intel 960 Options. (line 9) 25454* mknuthdiv: MMIX Options. (line 33) 25455* ml: SH Options. (line 41) 25456* mlarge-data: DEC Alpha Options. (line 195) 25457* mlarge-text: DEC Alpha Options. (line 213) 25458* mleaf-procedures: Intel 960 Options. (line 22) 25459* mlibfuncs: MMIX Options. (line 10) 25460* mlibrary-pic: FRV Options. (line 56) 25461* mlinker-opt: HPPA Options. (line 82) 25462* mlinux: CRIS Options. (line 104) 25463* mlittle: RS/6000 and PowerPC Options. 25464 (line 322) 25465* mlittle-endian <1>: IA-64 Options. (line 13) 25466* mlittle-endian <2>: MCore Options. (line 39) 25467* mlittle-endian <3>: RS/6000 and PowerPC Options. 25468 (line 322) 25469* mlittle-endian <4>: ARM Options. (line 71) 25470* mlittle-endian: SPARC Options. (line 212) 25471* mlong-calls <1>: V850 Options. (line 10) 25472* mlong-calls <2>: MIPS Options. (line 246) 25473* mlong-calls <3>: ARM Options. (line 176) 25474* mlong-calls: M68hc1x Options. (line 35) 25475* mlong-double-64: Intel 960 Options. (line 70) 25476* mlong-load-store: HPPA Options. (line 63) 25477* mlong32: MIPS Options. (line 168) 25478* mlong64: MIPS Options. (line 163) 25479* mlongcall: RS/6000 and PowerPC Options. 25480 (line 522) 25481* mlongcalls: Xtensa Options. (line 60) 25482* mloop-unsigned: TMS320C3x/C4x Options. 25483 (line 94) 25484* MM: Preprocessor Options. 25485 (line 198) 25486* mmad: MIPS Options. (line 255) 25487* mmangle-cpu: ARC Options. (line 15) 25488* mmax: DEC Alpha Options. (line 171) 25489* mmax-stack-frame: CRIS Options. (line 22) 25490* mmc: Intel 960 Options. (line 9) 25491* mmcu: AVR Options. (line 9) 25492* MMD: Preprocessor Options. 25493 (line 277) 25494* mmedia: FRV Options. (line 44) 25495* mmemcpy: MIPS Options. (line 240) 25496* mmemory-latency: DEC Alpha Options. (line 266) 25497* mmemparm: TMS320C3x/C4x Options. 25498 (line 109) 25499* mminimal-toc: RS/6000 and PowerPC Options. 25500 (line 169) 25501* mmmx: i386 and x86-64 Options. 25502 (line 323) 25503* mmodel=large: M32R/D Options. (line 33) 25504* mmodel=medium: M32R/D Options. (line 27) 25505* mmodel=small: M32R/D Options. (line 18) 25506* mmpyi: TMS320C3x/C4x Options. 25507 (line 53) 25508* mmul-bug-workaround: CRIS Options. (line 36) 25509* mmuladd: FRV Options. (line 50) 25510* mmult-bug: MN10300 Options. (line 9) 25511* mmulti-add: NS32K Options. (line 37) 25512* mmulti-cond-exec: FRV Options. (line 122) 25513* mmultiple: RS/6000 and PowerPC Options. 25514 (line 244) 25515* mmvcle: S/390 and zSeries Options. 25516 (line 53) 25517* mmvme: RS/6000 and PowerPC Options. 25518 (line 428) 25519* mn: H8/300 Options. (line 20) 25520* mnested-cond-exec: FRV Options. (line 135) 25521* mnew-mnemonics: RS/6000 and PowerPC Options. 25522 (line 67) 25523* mno-3dnow: i386 and x86-64 Options. 25524 (line 323) 25525* mno-4byte-functions: MCore Options. (line 27) 25526* mno-abicalls: MIPS Options. (line 95) 25527* mno-abshi: PDP-11 Options. (line 58) 25528* mno-ac0: PDP-11 Options. (line 20) 25529* mno-align-double: i386 and x86-64 Options. 25530 (line 202) 25531* mno-align-int: M680x0 Options. (line 125) 25532* mno-align-loops: M32R/D Options. (line 76) 25533* mno-align-stringops: i386 and x86-64 Options. 25534 (line 358) 25535* mno-alignment-traps: ARM Options. (line 104) 25536* mno-altivec: RS/6000 and PowerPC Options. 25537 (line 135) 25538* mno-am33: MN10300 Options. (line 20) 25539* mno-app-regs <1>: V850 Options. (line 61) 25540* mno-app-regs: SPARC Options. (line 10) 25541* mno-asm-optimize: D30V Options. (line 24) 25542* mno-backchain: S/390 and zSeries Options. 25543 (line 20) 25544* mno-base-addresses: MMIX Options. (line 54) 25545* mno-bit-align: RS/6000 and PowerPC Options. 25546 (line 282) 25547* mno-bk: TMS320C3x/C4x Options. 25548 (line 27) 25549* mno-branch-likely: MIPS Options. (line 291) 25550* mno-branch-predict: MMIX Options. (line 49) 25551* mno-bwx: DEC Alpha Options. (line 171) 25552* mno-callgraph-data: MCore Options. (line 31) 25553* mno-check-zero-division: MIPS Options. (line 235) 25554* mno-cirrus-fix-invalid-insns: ARM Options. (line 214) 25555* mno-cix: DEC Alpha Options. (line 171) 25556* mno-code-align: Intel 960 Options. (line 47) 25557* mno-complex-addr: Intel 960 Options. (line 39) 25558* mno-cond-exec: FRV Options. (line 104) 25559* mno-cond-move: FRV Options. (line 80) 25560* mno-const-align: CRIS Options. (line 60) 25561* mno-const16: Xtensa Options. (line 10) 25562* mno-crt0: MN10300 Options. (line 24) 25563* mno-data-align: CRIS Options. (line 60) 25564* mno-db: TMS320C3x/C4x Options. 25565 (line 32) 25566* mno-debug: S/390 and zSeries Options. 25567 (line 59) 25568* mno-div: MCore Options. (line 15) 25569* mno-double: FRV Options. (line 41) 25570* mno-dwarf2-asm: IA-64 Options. (line 74) 25571* mno-dword: FRV Options. (line 35) 25572* mno-eabi: RS/6000 and PowerPC Options. 25573 (line 456) 25574* mno-early-stop-bits: IA-64 Options. (line 87) 25575* mno-eflags: FRV Options. (line 71) 25576* mno-embedded-data: MIPS Options. (line 186) 25577* mno-embedded-pic: MIPS Options. (line 124) 25578* mno-ep: V850 Options. (line 16) 25579* mno-epsilon: MMIX Options. (line 15) 25580* mno-explicit-relocs <1>: DEC Alpha Options. (line 184) 25581* mno-explicit-relocs: MIPS Options. (line 206) 25582* mno-fancy-math-387: i386 and x86-64 Options. 25583 (line 191) 25584* mno-fast-fix: TMS320C3x/C4x Options. 25585 (line 62) 25586* mno-faster-structs: SPARC Options. (line 88) 25587* mno-fix: DEC Alpha Options. (line 171) 25588* mno-flat: SPARC Options. (line 59) 25589* mno-float32: PDP-11 Options. (line 48) 25590* mno-float64: PDP-11 Options. (line 52) 25591* mno-flush-func: M32R/D Options. (line 99) 25592* mno-flush-trap: M32R/D Options. (line 91) 25593* mno-fp-in-toc: RS/6000 and PowerPC Options. 25594 (line 169) 25595* mno-fp-regs: DEC Alpha Options. (line 25) 25596* mno-fp-ret-in-387: i386 and x86-64 Options. 25597 (line 181) 25598* mno-fpu: SPARC Options. (line 25) 25599* mno-fused-madd <1>: Xtensa Options. (line 19) 25600* mno-fused-madd <2>: S/390 and zSeries Options. 25601 (line 77) 25602* mno-fused-madd <3>: MIPS Options. (line 260) 25603* mno-fused-madd: RS/6000 and PowerPC Options. 25604 (line 276) 25605* mno-gnu-as: IA-64 Options. (line 18) 25606* mno-gnu-ld: IA-64 Options. (line 23) 25607* mno-gotplt: CRIS Options. (line 86) 25608* mno-hardlit: MCore Options. (line 10) 25609* mno-ieee-compare: NS32K Options. (line 55) 25610* mno-ieee-fp: i386 and x86-64 Options. 25611 (line 164) 25612* mno-int16: PDP-11 Options. (line 44) 25613* mno-int32: PDP-11 Options. (line 40) 25614* mno-interrupts: AVR Options. (line 39) 25615* mno-knuthdiv: MMIX Options. (line 33) 25616* mno-leaf-procedures: Intel 960 Options. (line 22) 25617* mno-libfuncs: MMIX Options. (line 10) 25618* mno-long-calls <1>: V850 Options. (line 10) 25619* mno-long-calls <2>: HPPA Options. (line 131) 25620* mno-long-calls <3>: MIPS Options. (line 246) 25621* mno-long-calls <4>: ARM Options. (line 176) 25622* mno-long-calls: M68hc1x Options. (line 35) 25623* mno-longcall: RS/6000 and PowerPC Options. 25624 (line 522) 25625* mno-longcalls: Xtensa Options. (line 60) 25626* mno-loop-unsigned: TMS320C3x/C4x Options. 25627 (line 94) 25628* mno-mad: MIPS Options. (line 255) 25629* mno-max: DEC Alpha Options. (line 171) 25630* mno-media: FRV Options. (line 47) 25631* mno-memcpy: MIPS Options. (line 240) 25632* mno-mips16: MIPS Options. (line 80) 25633* mno-mmx: i386 and x86-64 Options. 25634 (line 323) 25635* mno-mpyi: TMS320C3x/C4x Options. 25636 (line 53) 25637* mno-mul-bug-workaround: CRIS Options. (line 36) 25638* mno-muladd: FRV Options. (line 53) 25639* mno-mult-bug: MN10300 Options. (line 13) 25640* mno-multi-cond-exec: FRV Options. (line 129) 25641* mno-multiple: RS/6000 and PowerPC Options. 25642 (line 244) 25643* mno-mvcle: S/390 and zSeries Options. 25644 (line 53) 25645* mno-nested-cond-exec: FRV Options. (line 141) 25646* mno-pack: FRV Options. (line 68) 25647* mno-parallel-insns: TMS320C3x/C4x Options. 25648 (line 115) 25649* mno-parallel-mpy: TMS320C3x/C4x Options. 25650 (line 120) 25651* mno-pic: IA-64 Options. (line 26) 25652* mno-power: RS/6000 and PowerPC Options. 25653 (line 19) 25654* mno-power2: RS/6000 and PowerPC Options. 25655 (line 19) 25656* mno-powerpc: RS/6000 and PowerPC Options. 25657 (line 19) 25658* mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 25659 (line 19) 25660* mno-powerpc-gpopt: RS/6000 and PowerPC Options. 25661 (line 19) 25662* mno-powerpc64: RS/6000 and PowerPC Options. 25663 (line 19) 25664* mno-prolog-function: V850 Options. (line 23) 25665* mno-prologue-epilogue: CRIS Options. (line 76) 25666* mno-prototype: RS/6000 and PowerPC Options. 25667 (line 412) 25668* mno-push-args: i386 and x86-64 Options. 25669 (line 335) 25670* mno-register-names: IA-64 Options. (line 40) 25671* mno-regnames: RS/6000 and PowerPC Options. 25672 (line 516) 25673* mno-relax-immediate: MCore Options. (line 19) 25674* mno-relocatable: RS/6000 and PowerPC Options. 25675 (line 299) 25676* mno-relocatable-lib: RS/6000 and PowerPC Options. 25677 (line 307) 25678* mno-rnames: MIPS Options. (line 227) 25679* mno-rptb: TMS320C3x/C4x Options. 25680 (line 72) 25681* mno-rpts: TMS320C3x/C4x Options. 25682 (line 81) 25683* mno-scc: FRV Options. (line 92) 25684* mno-sched-prolog: ARM Options. (line 44) 25685* mno-sdata <1>: IA-64 Options. (line 45) 25686* mno-sdata: RS/6000 and PowerPC Options. 25687 (line 503) 25688* mno-side-effects: CRIS Options. (line 51) 25689* mno-single-exit: MMIX Options. (line 66) 25690* mno-slow-bytes: MCore Options. (line 35) 25691* mno-small-exec: S/390 and zSeries Options. 25692 (line 28) 25693* mno-soft-float: DEC Alpha Options. (line 10) 25694* mno-space-regs: HPPA Options. (line 49) 25695* mno-split: PDP-11 Options. (line 71) 25696* mno-split-addresses: MIPS Options. (line 200) 25697* mno-sse: i386 and x86-64 Options. 25698 (line 323) 25699* mno-stack-align: CRIS Options. (line 60) 25700* mno-stack-bias: SPARC Options. (line 249) 25701* mno-strict-align <1>: Intel 960 Options. (line 62) 25702* mno-strict-align <2>: RS/6000 and PowerPC Options. 25703 (line 294) 25704* mno-strict-align: M680x0 Options. (line 145) 25705* mno-string: RS/6000 and PowerPC Options. 25706 (line 255) 25707* mno-sum-in-toc: RS/6000 and PowerPC Options. 25708 (line 169) 25709* mno-svr3-shlib: i386 and x86-64 Options. 25710 (line 243) 25711* mno-tablejump: AVR Options. (line 47) 25712* mno-tail-call: Intel 960 Options. (line 31) 25713* mno-target-align: Xtensa Options. (line 47) 25714* mno-text-section-literals: Xtensa Options. (line 35) 25715* mno-toc: RS/6000 and PowerPC Options. 25716 (line 316) 25717* mno-toplevel-symbols: MMIX Options. (line 40) 25718* mno-unaligned-doubles: SPARC Options. (line 76) 25719* mno-uninit-const-in-rodata: MIPS Options. (line 194) 25720* mno-update: RS/6000 and PowerPC Options. 25721 (line 266) 25722* mno-v8plus: SPARC Options. (line 197) 25723* mno-vis: SPARC Options. (line 204) 25724* mno-vliw-branch: FRV Options. (line 116) 25725* mno-volatile-asm-stop: IA-64 Options. (line 32) 25726* mno-wide-bitfields: MCore Options. (line 23) 25727* mno-xgot: MIPS Options. (line 100) 25728* mno-xl-call: RS/6000 and PowerPC Options. 25729 (line 204) 25730* mno-zero-extend: MMIX Options. (line 27) 25731* mnobitfield <1>: NS32K Options. (line 61) 25732* mnobitfield: M680x0 Options. (line 93) 25733* mnohimem: NS32K Options. (line 118) 25734* mnomacsave: SH Options. (line 64) 25735* mnominmax: M68hc1x Options. (line 31) 25736* mnomulti-add: NS32K Options. (line 46) 25737* mnop-fun-dllimport: ARM Options. (line 201) 25738* mnoregparam: NS32K Options. (line 97) 25739* mnosb: NS32K Options. (line 105) 25740* mnumerics: Intel 960 Options. (line 16) 25741* mold-align: Intel 960 Options. (line 65) 25742* mold-mnemonics: RS/6000 and PowerPC Options. 25743 (line 67) 25744* momit-leaf-frame-pointer: i386 and x86-64 Options. 25745 (line 370) 25746* monchip: D30V Options. (line 17) 25747* MP: Preprocessor Options. 25748 (line 227) 25749* mpa-risc-1-0: HPPA Options. (line 23) 25750* mpa-risc-1-1: HPPA Options. (line 23) 25751* mpa-risc-2-0: HPPA Options. (line 23) 25752* mpack: FRV Options. (line 65) 25753* mpadstruct: SH Options. (line 74) 25754* mparallel-insns: TMS320C3x/C4x Options. 25755 (line 115) 25756* mparallel-mpy: TMS320C3x/C4x Options. 25757 (line 120) 25758* mparanoid: TMS320C3x/C4x Options. 25759 (line 45) 25760* mpcrel: M680x0 Options. (line 137) 25761* mpdebug: CRIS Options. (line 40) 25762* mpe: RS/6000 and PowerPC Options. 25763 (line 218) 25764* mpentium: i386 and x86-64 Options. 25765 (line 107) 25766* mpentiumpro: i386 and x86-64 Options. 25767 (line 107) 25768* mpic-register: ARM Options. (line 210) 25769* mpoke-function-name: ARM Options. (line 224) 25770* mportable-runtime: HPPA Options. (line 68) 25771* mpower: RS/6000 and PowerPC Options. 25772 (line 19) 25773* mpower2: RS/6000 and PowerPC Options. 25774 (line 19) 25775* mpowerpc: RS/6000 and PowerPC Options. 25776 (line 19) 25777* mpowerpc-gfxopt: RS/6000 and PowerPC Options. 25778 (line 19) 25779* mpowerpc-gpopt: RS/6000 and PowerPC Options. 25780 (line 19) 25781* mpowerpc64: RS/6000 and PowerPC Options. 25782 (line 19) 25783* mprefergot: SH Options. (line 81) 25784* mpreferred-stack-boundary: i386 and x86-64 Options. 25785 (line 283) 25786* mprioritize-restricted-insns: RS/6000 and PowerPC Options. 25787 (line 339) 25788* mprolog-function: V850 Options. (line 23) 25789* mprologue-epilogue: CRIS Options. (line 76) 25790* mprototype: RS/6000 and PowerPC Options. 25791 (line 412) 25792* mpush-args: i386 and x86-64 Options. 25793 (line 335) 25794* MQ: Preprocessor Options. 25795 (line 253) 25796* mregister-names: IA-64 Options. (line 40) 25797* mregnames: RS/6000 and PowerPC Options. 25798 (line 516) 25799* mregparam: NS32K Options. (line 89) 25800* mregparm <1>: TMS320C3x/C4x Options. 25801 (line 109) 25802* mregparm: i386 and x86-64 Options. 25803 (line 272) 25804* mrelax <1>: SH Options. (line 50) 25805* mrelax <2>: H8/300 Options. (line 9) 25806* mrelax: MN10300 Options. (line 27) 25807* mrelax-immediate: MCore Options. (line 19) 25808* mrelocatable: RS/6000 and PowerPC Options. 25809 (line 299) 25810* mrelocatable-lib: RS/6000 and PowerPC Options. 25811 (line 307) 25812* mrnames: MIPS Options. (line 227) 25813* mrodata: ARC Options. (line 30) 25814* mrptb: TMS320C3x/C4x Options. 25815 (line 72) 25816* mrpts: TMS320C3x/C4x Options. 25817 (line 81) 25818* mrtd <1>: Function Attributes. 25819 (line 423) 25820* mrtd <2>: NS32K Options. (line 70) 25821* mrtd <3>: i386 and x86-64 Options. 25822 (line 248) 25823* mrtd: M680x0 Options. (line 102) 25824* ms: H8/300 Options. (line 17) 25825* ms2600: H8/300 Options. (line 24) 25826* msa: Intel 960 Options. (line 9) 25827* msb <1>: NS32K Options. (line 101) 25828* msb: Intel 960 Options. (line 9) 25829* mscc: FRV Options. (line 86) 25830* msched-costly-dep: RS/6000 and PowerPC Options. 25831 (line 346) 25832* mschedule: HPPA Options. (line 75) 25833* msda: V850 Options. (line 40) 25834* msdata <1>: IA-64 Options. (line 45) 25835* msdata: RS/6000 and PowerPC Options. 25836 (line 490) 25837* msdata-data: RS/6000 and PowerPC Options. 25838 (line 495) 25839* msdata=default: RS/6000 and PowerPC Options. 25840 (line 490) 25841* msdata=eabi: RS/6000 and PowerPC Options. 25842 (line 470) 25843* msdata=none <1>: RS/6000 and PowerPC Options. 25844 (line 503) 25845* msdata=none: M32R/D Options. (line 40) 25846* msdata=sdata: M32R/D Options. (line 49) 25847* msdata=sysv: RS/6000 and PowerPC Options. 25848 (line 481) 25849* msdata=use: M32R/D Options. (line 53) 25850* mshort <1>: M68hc1x Options. (line 40) 25851* mshort: M680x0 Options. (line 90) 25852* msim <1>: Xstormy16 Options. (line 9) 25853* msim: RS/6000 and PowerPC Options. 25854 (line 422) 25855* msingle-exit: MMIX Options. (line 66) 25856* msingle-float: MIPS Options. (line 150) 25857* msingle-pic-base: ARM Options. (line 204) 25858* msio: HPPA Options. (line 104) 25859* msize: AVR Options. (line 32) 25860* mslow-bytes: MCore Options. (line 35) 25861* msmall: TMS320C3x/C4x Options. 25862 (line 18) 25863* msmall-data: DEC Alpha Options. (line 195) 25864* msmall-exec: S/390 and zSeries Options. 25865 (line 28) 25866* msmall-memory: TMS320C3x/C4x Options. 25867 (line 18) 25868* msmall-text: DEC Alpha Options. (line 213) 25869* msoft-float <1>: FRV Options. (line 22) 25870* msoft-float <2>: PDP-11 Options. (line 13) 25871* msoft-float <3>: S/390 and zSeries Options. 25872 (line 11) 25873* msoft-float <4>: NS32K Options. (line 50) 25874* msoft-float <5>: DEC Alpha Options. (line 10) 25875* msoft-float <6>: Intel 960 Options. (line 16) 25876* msoft-float <7>: HPPA Options. (line 88) 25877* msoft-float <8>: i386 and x86-64 Options. 25878 (line 169) 25879* msoft-float <9>: MIPS Options. (line 146) 25880* msoft-float <10>: RS/6000 and PowerPC Options. 25881 (line 238) 25882* msoft-float <11>: ARM Options. (line 57) 25883* msoft-float <12>: SPARC Options. (line 25) 25884* msoft-float: M680x0 Options. (line 80) 25885* msoft-quad-float: SPARC Options. (line 45) 25886* msoft-reg-count: M68hc1x Options. (line 43) 25887* mspace <1>: V850 Options. (line 30) 25888* mspace: SH Options. (line 78) 25889* msparclite: SPARC Options. (line 114) 25890* mspe: RS/6000 and PowerPC Options. 25891 (line 155) 25892* msplit: PDP-11 Options. (line 68) 25893* msplit-addresses: MIPS Options. (line 200) 25894* msse: i386 and x86-64 Options. 25895 (line 323) 25896* mstack-align: CRIS Options. (line 60) 25897* mstack-bias: SPARC Options. (line 249) 25898* mstrict-align <1>: Intel 960 Options. (line 62) 25899* mstrict-align <2>: RS/6000 and PowerPC Options. 25900 (line 294) 25901* mstrict-align: M680x0 Options. (line 145) 25902* mstring: RS/6000 and PowerPC Options. 25903 (line 255) 25904* mstructure-size-boundary: ARM Options. (line 159) 25905* msupersparc: SPARC Options. (line 122) 25906* msvr3-shlib: i386 and x86-64 Options. 25907 (line 243) 25908* msvr4-struct-return: RS/6000 and PowerPC Options. 25909 (line 399) 25910* MT: Preprocessor Options. 25911 (line 239) 25912* mtail-call: Intel 960 Options. (line 31) 25913* mtarget-align: Xtensa Options. (line 47) 25914* mtda: V850 Options. (line 34) 25915* mtext: ARC Options. (line 30) 25916* mtext-section-literals: Xtensa Options. (line 35) 25917* mthreads: i386 and x86-64 Options. 25918 (line 350) 25919* mthumb: ARM Options. (line 245) 25920* mthumb-interwork: ARM Options. (line 37) 25921* mti: TMS320C3x/C4x Options. 25922 (line 102) 25923* mtiny-stack: AVR Options. (line 50) 25924* mtls-direct-seg-refs: i386 and x86-64 Options. 25925 (line 378) 25926* mtoc: RS/6000 and PowerPC Options. 25927 (line 316) 25928* mtomcat-stats: FRV Options. (line 147) 25929* mtoplevel-symbols: MMIX Options. (line 40) 25930* mtpcs-frame: ARM Options. (line 249) 25931* mtpcs-leaf-frame: ARM Options. (line 255) 25932* mtrap-precision: DEC Alpha Options. (line 109) 25933* mtune <1>: CRIS Options. (line 16) 25934* mtune <2>: S/390 and zSeries Options. 25935 (line 70) 25936* mtune <3>: DEC Alpha Options. (line 262) 25937* mtune <4>: i386 and x86-64 Options. 25938 (line 10) 25939* mtune <5>: MIPS Options. (line 43) 25940* mtune <6>: RS/6000 and PowerPC Options. 25941 (line 125) 25942* mtune <7>: ARM Options. (line 134) 25943* mtune: SPARC Options. (line 185) 25944* multi_module: Darwin Options. (line 87) 25945* multiply_defined: Darwin Options. (line 87) 25946* multiply_defined_unused: Darwin Options. (line 87) 25947* munaligned-doubles: SPARC Options. (line 76) 25948* muninit-const-in-rodata: MIPS Options. (line 194) 25949* munix: VAX Options. (line 9) 25950* munix-asm: PDP-11 Options. (line 74) 25951* mupdate: RS/6000 and PowerPC Options. 25952 (line 266) 25953* musermode: SH Options. (line 86) 25954* mv8: SPARC Options. (line 114) 25955* mv850: V850 Options. (line 49) 25956* mv850e: V850 Options. (line 69) 25957* mv850e1: V850 Options. (line 64) 25958* mv8plus: SPARC Options. (line 197) 25959* mvis: SPARC Options. (line 204) 25960* mvliw-branch: FRV Options. (line 110) 25961* mvms-return-codes: DEC Alpha/VMS Options. 25962 (line 9) 25963* mvolatile-asm-stop: IA-64 Options. (line 32) 25964* mvxworks: RS/6000 and PowerPC Options. 25965 (line 443) 25966* mwide-bitfields: MCore Options. (line 23) 25967* mwindiss: RS/6000 and PowerPC Options. 25968 (line 447) 25969* mwords-little-endian: ARM Options. (line 79) 25970* mxgot: MIPS Options. (line 100) 25971* mxl-call: RS/6000 and PowerPC Options. 25972 (line 204) 25973* myellowknife: RS/6000 and PowerPC Options. 25974 (line 438) 25975* mzarch: S/390 and zSeries Options. 25976 (line 43) 25977* mzda: V850 Options. (line 45) 25978* mzero-extend: MMIX Options. (line 27) 25979* no-integrated-cpp: C Dialect Options. (line 179) 25980* no-red-zone: i386 and x86-64 Options. 25981 (line 398) 25982* noall_load: Darwin Options. (line 87) 25983* nocpp: MIPS Options. (line 270) 25984* nodefaultlibs: Link Options. (line 62) 25985* nofixprebinding: Darwin Options. (line 87) 25986* nolibdld: HPPA Options. (line 157) 25987* nomultidefs: Darwin Options. (line 87) 25988* noprebind: Darwin Options. (line 87) 25989* noseglinkedit: Darwin Options. (line 87) 25990* nostartfiles: Link Options. (line 57) 25991* nostdinc: Preprocessor Options. 25992 (line 356) 25993* nostdinc++ <1>: Preprocessor Options. 25994 (line 361) 25995* nostdinc++: C++ Dialect Options. 25996 (line 179) 25997* nostdlib: Link Options. (line 72) 25998* o: Preprocessor Options. 25999 (line 73) 26000* O: Optimize Options. (line 32) 26001* o: Overall Options. (line 154) 26002* O0: Optimize Options. (line 91) 26003* O1: Optimize Options. (line 32) 26004* O2: Optimize Options. (line 54) 26005* O3: Optimize Options. (line 86) 26006* Os: Optimize Options. (line 94) 26007* P: Preprocessor Options. 26008 (line 515) 26009* p: Debugging Options. (line 117) 26010* pagezero_size: Darwin Options. (line 87) 26011* param: Optimize Options. (line 1014) 26012* pass-exit-codes: Overall Options. (line 113) 26013* pedantic <1>: Warnings and Errors. 26014 (line 25) 26015* pedantic <2>: Alternate Keywords. (line 29) 26016* pedantic <3>: C Extensions. (line 6) 26017* pedantic <4>: Preprocessor Options. 26018 (line 164) 26019* pedantic <5>: Warning Options. (line 26) 26020* pedantic: Standards. (line 13) 26021* pedantic-errors <1>: Warnings and Errors. 26022 (line 25) 26023* pedantic-errors <2>: Non-bugs. (line 208) 26024* pedantic-errors <3>: Actual Bugs. (line 18) 26025* pedantic-errors <4>: Preprocessor Options. 26026 (line 169) 26027* pedantic-errors <5>: Warning Options. (line 68) 26028* pedantic-errors: Standards. (line 13) 26029* pg: Debugging Options. (line 123) 26030* pie: Link Options. (line 94) 26031* pipe: Overall Options. (line 179) 26032* prebind: Darwin Options. (line 87) 26033* prebind_all_twolevel_modules: Darwin Options. (line 87) 26034* preprocessor: Preprocessor Options. 26035 (line 24) 26036* print-file-name: Debugging Options. (line 462) 26037* print-libgcc-file-name: Debugging Options. (line 483) 26038* print-multi-directory: Debugging Options. (line 468) 26039* print-multi-lib: Debugging Options. (line 473) 26040* print-objc-runtime-info: Objective-C Dialect Options. 26041 (line 193) 26042* print-prog-name: Debugging Options. (line 480) 26043* print-search-dirs: Debugging Options. (line 491) 26044* private_bundle: Darwin Options. (line 87) 26045* pthread: RS/6000 and PowerPC Options. 26046 (line 543) 26047* pthreads: SPARC Options. (line 263) 26048* Q: Debugging Options. (line 129) 26049* Qn: System V Options. (line 18) 26050* Qy: System V Options. (line 14) 26051* read_only_relocs: Darwin Options. (line 87) 26052* remap: Preprocessor Options. 26053 (line 563) 26054* s: Link Options. (line 100) 26055* S <1>: Link Options. (line 20) 26056* S: Overall Options. (line 137) 26057* save-temps: Debugging Options. (line 440) 26058* sectalign: Darwin Options. (line 87) 26059* sectcreate: Darwin Options. (line 87) 26060* sectobjectsymbols: Darwin Options. (line 87) 26061* sectorder: Darwin Options. (line 87) 26062* seg1addr: Darwin Options. (line 87) 26063* seg_addr_table: Darwin Options. (line 87) 26064* seg_addr_table_filename: Darwin Options. (line 87) 26065* seglinkedit: Darwin Options. (line 87) 26066* segprot: Darwin Options. (line 87) 26067* segs_read_only_addr: Darwin Options. (line 87) 26068* segs_read_write_addr: Darwin Options. (line 87) 26069* shared: Link Options. (line 109) 26070* shared-libgcc: Link Options. (line 117) 26071* sim: CRIS Options. (line 108) 26072* sim2: CRIS Options. (line 114) 26073* single_module: Darwin Options. (line 87) 26074* specs: Directory Options. (line 98) 26075* static <1>: HPPA Options. (line 161) 26076* static <2>: Darwin Options. (line 87) 26077* static: Link Options. (line 104) 26078* static-libgcc: Link Options. (line 117) 26079* std <1>: Non-bugs. (line 107) 26080* std <2>: Other Builtins. (line 22) 26081* std <3>: C Dialect Options. (line 46) 26082* std: Standards. (line 13) 26083* std=: Preprocessor Options. 26084 (line 308) 26085* sub_library: Darwin Options. (line 87) 26086* sub_umbrella: Darwin Options. (line 87) 26087* symbolic: Link Options. (line 152) 26088* target-help <1>: Preprocessor Options. 26089 (line 568) 26090* target-help: Overall Options. (line 194) 26091* threads <1>: HPPA Options. (line 174) 26092* threads: SPARC Options. (line 257) 26093* time: Debugging Options. (line 448) 26094* traditional <1>: Incompatibilities. (line 6) 26095* traditional: C Dialect Options. (line 191) 26096* traditional-cpp <1>: Preprocessor Options. 26097 (line 546) 26098* traditional-cpp: C Dialect Options. (line 191) 26099* trigraphs <1>: Preprocessor Options. 26100 (line 550) 26101* trigraphs: C Dialect Options. (line 175) 26102* twolevel_namespace: Darwin Options. (line 87) 26103* u: Link Options. (line 174) 26104* U: Preprocessor Options. 26105 (line 57) 26106* umbrella: Darwin Options. (line 87) 26107* undef: Preprocessor Options. 26108 (line 61) 26109* undefined: Darwin Options. (line 87) 26110* unexported_symbols_list: Darwin Options. (line 87) 26111* V: Target Options. (line 22) 26112* v <1>: Preprocessor Options. 26113 (line 572) 26114* v: Overall Options. (line 168) 26115* version <1>: Preprocessor Options. 26116 (line 585) 26117* version: Overall Options. (line 198) 26118* W: Incompatibilities. (line 66) 26119* w: Preprocessor Options. 26120 (line 160) 26121* W: Warning Options. (line 456) 26122* w: Warning Options. (line 72) 26123* Wa: Assembler Options. (line 9) 26124* Wabi: C++ Dialect Options. 26125 (line 193) 26126* Waggregate-return: Warning Options. (line 724) 26127* Wall <1>: Standard Libraries. (line 6) 26128* Wall <2>: Preprocessor Options. 26129 (line 79) 26130* Wall: Warning Options. (line 441) 26131* Wbad-function-cast: Warning Options. (line 678) 26132* Wcast-align: Warning Options. (line 687) 26133* Wcast-qual: Warning Options. (line 682) 26134* Wchar-subscripts: Warning Options. (line 78) 26135* Wcomment <1>: Preprocessor Options. 26136 (line 87) 26137* Wcomment: Warning Options. (line 83) 26138* Wcomments: Preprocessor Options. 26139 (line 87) 26140* Wconversion <1>: Protoize Caveats. (line 31) 26141* Wconversion: Warning Options. (line 704) 26142* Wctor-dtor-privacy: C++ Dialect Options. 26143 (line 271) 26144* Wdeclaration-after-statement: Warning Options. (line 651) 26145* Wdisabled-optimization: Warning Options. (line 872) 26146* Wdiv-by-zero: Warning Options. (line 543) 26147* weak_reference_mismatches: Darwin Options. (line 87) 26148* Weffc++: C++ Dialect Options. 26149 (line 297) 26150* Wendif-labels <1>: Preprocessor Options. 26151 (line 137) 26152* Wendif-labels: Warning Options. (line 661) 26153* Werror <1>: Preprocessor Options. 26154 (line 150) 26155* Werror: Warning Options. (line 881) 26156* Werror-implicit-function-declaration: Warning Options. (line 185) 26157* Wextra: Warning Options. (line 456) 26158* Wfloat-equal: Warning Options. (line 559) 26159* Wformat <1>: Function Attributes. 26160 (line 135) 26161* Wformat: Warning Options. (line 87) 26162* Wformat-nonliteral <1>: Function Attributes. 26163 (line 183) 26164* Wformat-nonliteral: Warning Options. (line 139) 26165* Wformat-security: Warning Options. (line 144) 26166* Wformat-y2k: Warning Options. (line 117) 26167* Wformat=2: Warning Options. (line 155) 26168* whatsloaded: Darwin Options. (line 87) 26169* whyload: Darwin Options. (line 87) 26170* Wimplicit: Warning Options. (line 189) 26171* Wimplicit-function-declaration: Warning Options. (line 185) 26172* Wimplicit-int: Warning Options. (line 181) 26173* Wimport: Preprocessor Options. 26174 (line 110) 26175* Winit-self: Warning Options. (line 167) 26176* Winline <1>: Inline. (line 35) 26177* Winline: Warning Options. (line 835) 26178* Winvalid-pch: Warning Options. (line 862) 26179* Wl: Link Options. (line 170) 26180* Wlarger-than: Warning Options. (line 669) 26181* Wlong-long: Warning Options. (line 866) 26182* Wmain: Warning Options. (line 192) 26183* Wmissing-braces: Warning Options. (line 197) 26184* Wmissing-declarations: Warning Options. (line 745) 26185* Wmissing-format-attribute: Warning Options. (line 759) 26186* Wmissing-noreturn: Warning Options. (line 751) 26187* Wmissing-prototypes: Warning Options. (line 739) 26188* Wmultichar: Warning Options. (line 769) 26189* Wnested-externs: Warning Options. (line 810) 26190* Wno-deprecated: C++ Dialect Options. 26191 (line 327) 26192* Wno-deprecated-declarations: Warning Options. (line 775) 26193* Wno-div-by-zero: Warning Options. (line 543) 26194* Wno-format-extra-args: Warning Options. (line 121) 26195* Wno-format-zero-length: Warning Options. (line 135) 26196* Wno-import: Warning Options. (line 75) 26197* Wno-invalid-offsetof: Warning Options. (line 848) 26198* Wno-long-long: Warning Options. (line 866) 26199* Wno-multichar: Warning Options. (line 769) 26200* Wno-non-template-friend: C++ Dialect Options. 26201 (line 331) 26202* Wno-pmf-conversions <1>: Bound member functions. 26203 (line 35) 26204* Wno-pmf-conversions: C++ Dialect Options. 26205 (line 372) 26206* Wno-protocol: Objective-C Dialect Options. 26207 (line 159) 26208* Wnon-virtual-dtor: C++ Dialect Options. 26209 (line 276) 26210* Wnonnull: Warning Options. (line 160) 26211* Wold-style-cast: C++ Dialect Options. 26212 (line 347) 26213* Wold-style-definition: Warning Options. (line 735) 26214* Woverloaded-virtual: C++ Dialect Options. 26215 (line 353) 26216* Wp: Preprocessor Options. 26217 (line 13) 26218* Wpacked: Warning Options. (line 781) 26219* Wpadded: Warning Options. (line 798) 26220* Wparentheses: Warning Options. (line 205) 26221* Wpointer-arith <1>: Pointer Arith. (line 13) 26222* Wpointer-arith: Warning Options. (line 672) 26223* Wredundant-decls: Warning Options. (line 805) 26224* Wreorder: C++ Dialect Options. 26225 (line 281) 26226* Wreturn-type: Warning Options. (line 290) 26227* Wselector: Objective-C Dialect Options. 26228 (line 169) 26229* Wsequence-point: Warning Options. (line 243) 26230* Wshadow: Warning Options. (line 664) 26231* Wsign-compare: Warning Options. (line 717) 26232* Wsign-promo: C++ Dialect Options. 26233 (line 376) 26234* Wstrict-aliasing: Warning Options. (line 434) 26235* Wstrict-prototypes: Warning Options. (line 729) 26236* Wswitch: Warning Options. (line 300) 26237* Wswitch-enum: Warning Options. (line 310) 26238* Wswitch-switch: Warning Options. (line 307) 26239* Wsynth: C++ Dialect Options. 26240 (line 383) 26241* Wsystem-headers <1>: Preprocessor Options. 26242 (line 154) 26243* Wsystem-headers: Warning Options. (line 548) 26244* Wtraditional <1>: Preprocessor Options. 26245 (line 104) 26246* Wtraditional: Warning Options. (line 574) 26247* Wtrigraphs <1>: Preprocessor Options. 26248 (line 92) 26249* Wtrigraphs: Warning Options. (line 316) 26250* Wundeclared-selector: Objective-C Dialect Options. 26251 (line 181) 26252* Wundef <1>: Preprocessor Options. 26253 (line 113) 26254* Wundef: Warning Options. (line 658) 26255* Wuninitialized: Warning Options. (line 358) 26256* Wunknown-pragmas: Warning Options. (line 427) 26257* Wunreachable-code: Warning Options. (line 813) 26258* Wunused: Warning Options. (line 351) 26259* Wunused-function: Warning Options. (line 321) 26260* Wunused-label: Warning Options. (line 325) 26261* Wunused-macros: Preprocessor Options. 26262 (line 118) 26263* Wunused-parameter: Warning Options. (line 331) 26264* Wunused-value: Warning Options. (line 345) 26265* Wunused-variable: Warning Options. (line 338) 26266* Wwrite-strings: Warning Options. (line 693) 26267* x <1>: Preprocessor Options. 26268 (line 292) 26269* x: Overall Options. (line 90) 26270* Xassembler: Assembler Options. (line 13) 26271* Xlinker: Link Options. (line 158) 26272* Ym: System V Options. (line 26) 26273* YP: System V Options. (line 22) 26274 26275 26276File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 26277 26278Keyword Index 26279************* 26280 26281[index] 26282* Menu: 26283 26284* ! in constraint: Multi-Alternative. (line 33) 26285* # in constraint: Modifiers. (line 52) 26286* #pragma: Pragmas. (line 6) 26287* #pragma implementation: C++ Interface. (line 39) 26288* #pragma implementation, implied: C++ Interface. (line 46) 26289* #pragma interface: C++ Interface. (line 20) 26290* #pragma, reason for not using: Function Attributes. (line 654) 26291* $: Dollar Signs. (line 6) 26292* % in constraint: Modifiers. (line 45) 26293* %include: Spec Files. (line 27) 26294* %include_noerr: Spec Files. (line 31) 26295* %rename: Spec Files. (line 35) 26296* & in constraint: Modifiers. (line 25) 26297* ': Incompatibilities. (line 118) 26298* * in constraint: Modifiers. (line 57) 26299* + in constraint: Modifiers. (line 12) 26300* -lgcc, use with -nodefaultlibs: Link Options. (line 81) 26301* -lgcc, use with -nostdlib: Link Options. (line 81) 26302* -nodefaultlibs and unresolved references: Link Options. (line 81) 26303* -nostdlib and unresolved references: Link Options. (line 81) 26304* .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 26305 (line 508) 26306* //: C++ Comments. (line 6) 26307* 0 in constraint: Simple Constraints. (line 115) 26308* < in constraint: Simple Constraints. (line 46) 26309* <?: Min and Max. (line 10) 26310* = in constraint: Modifiers. (line 8) 26311* > in constraint: Simple Constraints. (line 50) 26312* >?: Min and Max. (line 14) 26313* ? in constraint: Multi-Alternative. (line 27) 26314* ?: extensions <1>: Conditionals. (line 6) 26315* ?: extensions: Lvalues. (line 6) 26316* ?: side effect: Conditionals. (line 20) 26317* _ in variables in macros: Typeof. (line 42) 26318* __builtin_apply: Constructing Calls. (line 31) 26319* __builtin_apply_args: Constructing Calls. (line 20) 26320* __builtin_choose_expr: Other Builtins. (line 141) 26321* __builtin_clz: Other Builtins. (line 353) 26322* __builtin_clzl: Other Builtins. (line 371) 26323* __builtin_clzll: Other Builtins. (line 391) 26324* __builtin_constant_p: Other Builtins. (line 181) 26325* __builtin_ctz: Other Builtins. (line 357) 26326* __builtin_ctzl: Other Builtins. (line 375) 26327* __builtin_ctzll: Other Builtins. (line 395) 26328* __builtin_expect: Other Builtins. (line 227) 26329* __builtin_ffs: Other Builtins. (line 349) 26330* __builtin_ffsl: Other Builtins. (line 367) 26331* __builtin_ffsll: Other Builtins. (line 387) 26332* __builtin_frame_address: Return Address. (line 34) 26333* __builtin_huge_val: Other Builtins. (line 291) 26334* __builtin_huge_valf: Other Builtins. (line 296) 26335* __builtin_huge_vall: Other Builtins. (line 299) 26336* __builtin_inf: Other Builtins. (line 303) 26337* __builtin_inff: Other Builtins. (line 309) 26338* __builtin_infl: Other Builtins. (line 312) 26339* __builtin_isgreater: Other Builtins. (line 6) 26340* __builtin_isgreaterequal: Other Builtins. (line 6) 26341* __builtin_isless: Other Builtins. (line 6) 26342* __builtin_islessequal: Other Builtins. (line 6) 26343* __builtin_islessgreater: Other Builtins. (line 6) 26344* __builtin_isunordered: Other Builtins. (line 6) 26345* __builtin_nan: Other Builtins. (line 316) 26346* __builtin_nanf: Other Builtins. (line 331) 26347* __builtin_nanl: Other Builtins. (line 334) 26348* __builtin_nans: Other Builtins. (line 338) 26349* __builtin_nansf: Other Builtins. (line 342) 26350* __builtin_nansl: Other Builtins. (line 345) 26351* __builtin_parity: Other Builtins. (line 364) 26352* __builtin_parityl: Other Builtins. (line 383) 26353* __builtin_parityll: Other Builtins. (line 403) 26354* __builtin_popcount: Other Builtins. (line 361) 26355* __builtin_popcountl: Other Builtins. (line 379) 26356* __builtin_popcountll: Other Builtins. (line 399) 26357* __builtin_prefetch: Other Builtins. (line 252) 26358* __builtin_return: Constructing Calls. (line 48) 26359* __builtin_return_address: Return Address. (line 11) 26360* __builtin_types_compatible_p: Other Builtins. (line 95) 26361* __complex__ keyword: Complex. (line 6) 26362* __declspec(dllexport): Function Attributes. (line 625) 26363* __declspec(dllimport): Function Attributes. (line 589) 26364* __extension__: Alternate Keywords. (line 29) 26365* __func__ identifier: Function Names. (line 6) 26366* __FUNCTION__ identifier: Function Names. (line 6) 26367* __imag__ keyword: Complex. (line 27) 26368* __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 26369* __real__ keyword: Complex. (line 27) 26370* __STDC_HOSTED__: Standards. (line 6) 26371* __thread: Thread-Local. (line 6) 26372* _Complex keyword: Complex. (line 6) 26373* _exit: Other Builtins. (line 6) 26374* _Exit: Other Builtins. (line 6) 26375* ABI: Compatibility. (line 6) 26376* abort: Other Builtins. (line 6) 26377* abs: Other Builtins. (line 6) 26378* accessing volatiles: Volatiles. (line 6) 26379* acos: Other Builtins. (line 6) 26380* acosf: Other Builtins. (line 6) 26381* acosh: Other Builtins. (line 6) 26382* acoshf: Other Builtins. (line 6) 26383* acoshl: Other Builtins. (line 6) 26384* acosl: Other Builtins. (line 6) 26385* Ada: G++ and GCC. (line 6) 26386* address constraints: Simple Constraints. (line 142) 26387* address of a label: Labels as Values. (line 6) 26388* address_operand: Simple Constraints. (line 146) 26389* alias attribute: Function Attributes. (line 341) 26390* aliasing of parameters: Code Gen Options. (line 311) 26391* aligned attribute <1>: Type Attributes. (line 30) 26392* aligned attribute: Variable Attributes. (line 23) 26393* alignment: Alignment. (line 6) 26394* alloca: Other Builtins. (line 6) 26395* alloca vs variable-length arrays: Variable Length. (line 27) 26396* alternate keywords: Alternate Keywords. (line 6) 26397* always_inline function attribute: Function Attributes. (line 74) 26398* AMD x86-64 Options: i386 and x86-64 Options. 26399 (line 6) 26400* AMD1: Standards. (line 6) 26401* ANSI C: Standards. (line 6) 26402* ANSI C standard: Standards. (line 6) 26403* ANSI C89: Standards. (line 6) 26404* ANSI support: C Dialect Options. (line 9) 26405* ANSI X3.159-1989: Standards. (line 6) 26406* apostrophes: Incompatibilities. (line 118) 26407* application binary interface: Compatibility. (line 6) 26408* ARC Options: ARC Options. (line 6) 26409* ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 26410 (line 6) 26411* ARM options: ARM Options. (line 6) 26412* arrays of length zero: Zero Length. (line 6) 26413* arrays of variable length: Variable Length. (line 6) 26414* arrays, non-lvalue: Subscripting. (line 6) 26415* asin: Other Builtins. (line 6) 26416* asinf: Other Builtins. (line 6) 26417* asinh: Other Builtins. (line 6) 26418* asinhf: Other Builtins. (line 6) 26419* asinhl: Other Builtins. (line 6) 26420* asinl: Other Builtins. (line 6) 26421* asm constraints: Constraints. (line 6) 26422* asm expressions: Extended Asm. (line 6) 26423* assembler instructions: Extended Asm. (line 6) 26424* assembler names for identifiers: Asm Labels. (line 6) 26425* assembly code, invalid: Bug Criteria. (line 12) 26426* atan: Other Builtins. (line 6) 26427* atan2: Other Builtins. (line 6) 26428* atan2f: Other Builtins. (line 6) 26429* atan2l: Other Builtins. (line 6) 26430* atanf: Other Builtins. (line 6) 26431* atanh: Other Builtins. (line 6) 26432* atanhf: Other Builtins. (line 6) 26433* atanhl: Other Builtins. (line 6) 26434* atanl: Other Builtins. (line 6) 26435* attribute of types: Type Attributes. (line 6) 26436* attribute of variables: Variable Attributes. (line 6) 26437* attribute syntax: Attribute Syntax. (line 6) 26438* autoincrement/decrement addressing: Simple Constraints. (line 28) 26439* automatic inline for C++ member fns: Inline. (line 46) 26440* AVR Options: AVR Options. (line 6) 26441* Backwards Compatibility: Backwards Compatibility. 26442 (line 6) 26443* base class members: Name lookup. (line 6) 26444* bcmp: Other Builtins. (line 6) 26445* binary compatibility: Compatibility. (line 6) 26446* bound pointer to member function: Bound member functions. 26447 (line 6) 26448* bug criteria: Bug Criteria. (line 6) 26449* bugs: Bugs. (line 6) 26450* bugs, known: Trouble. (line 6) 26451* built-in functions <1>: Other Builtins. (line 6) 26452* built-in functions: C Dialect Options. (line 127) 26453* bzero: Other Builtins. (line 6) 26454* C compilation options: Invoking GCC. (line 17) 26455* C intermediate output, nonexistent: G++ and GCC. (line 35) 26456* C language extensions: C Extensions. (line 6) 26457* C language, traditional: C Dialect Options. (line 189) 26458* C standard: Standards. (line 6) 26459* C standards: Standards. (line 6) 26460* c++: Invoking G++. (line 13) 26461* C++: G++ and GCC. (line 30) 26462* C++ comments: C++ Comments. (line 6) 26463* C++ compilation options: Invoking GCC. (line 23) 26464* C++ interface and implementation headers: C++ Interface. (line 6) 26465* C++ language extensions: C++ Extensions. (line 6) 26466* C++ member fns, automatically inline: Inline. (line 46) 26467* C++ misunderstandings: C++ Misunderstandings. 26468 (line 6) 26469* C++ options, command line: C++ Dialect Options. (line 6) 26470* C++ pragmas, effect on inlining: C++ Interface. (line 66) 26471* C++ source file suffixes: Invoking G++. (line 6) 26472* C++ static data, declaring and defining: Static Definitions. 26473 (line 6) 26474* C89: Standards. (line 6) 26475* C90: Standards. (line 6) 26476* C94: Standards. (line 6) 26477* C95: Standards. (line 6) 26478* C99: Standards. (line 6) 26479* C9X: Standards. (line 6) 26480* C_INCLUDE_PATH: Environment Variables. 26481 (line 124) 26482* cabs: Other Builtins. (line 6) 26483* cabsf: Other Builtins. (line 6) 26484* cabsl: Other Builtins. (line 6) 26485* cacos: Other Builtins. (line 6) 26486* cacosf: Other Builtins. (line 6) 26487* cacosh: Other Builtins. (line 6) 26488* cacoshf: Other Builtins. (line 6) 26489* cacoshl: Other Builtins. (line 6) 26490* cacosl: Other Builtins. (line 6) 26491* calling functions through the function vector on the H8/300 processors: Function Attributes. 26492 (line 450) 26493* calloc: Other Builtins. (line 6) 26494* carg: Other Builtins. (line 6) 26495* cargf: Other Builtins. (line 6) 26496* cargl: Other Builtins. (line 6) 26497* case labels in initializers: Designated Inits. (line 6) 26498* case ranges: Case Ranges. (line 6) 26499* casin: Other Builtins. (line 6) 26500* casinf: Other Builtins. (line 6) 26501* casinh: Other Builtins. (line 6) 26502* casinhf: Other Builtins. (line 6) 26503* casinhl: Other Builtins. (line 6) 26504* casinl: Other Builtins. (line 6) 26505* cast to a union: Cast to Union. (line 6) 26506* casts as lvalues: Lvalues. (line 6) 26507* catan: Other Builtins. (line 6) 26508* catanf: Other Builtins. (line 6) 26509* catanh: Other Builtins. (line 6) 26510* catanhf: Other Builtins. (line 6) 26511* catanhl: Other Builtins. (line 6) 26512* catanl: Other Builtins. (line 6) 26513* cbrt: Other Builtins. (line 6) 26514* cbrtf: Other Builtins. (line 6) 26515* cbrtl: Other Builtins. (line 6) 26516* ccos: Other Builtins. (line 6) 26517* ccosf: Other Builtins. (line 6) 26518* ccosh: Other Builtins. (line 6) 26519* ccoshf: Other Builtins. (line 6) 26520* ccoshl: Other Builtins. (line 6) 26521* ccosl: Other Builtins. (line 6) 26522* ceil: Other Builtins. (line 6) 26523* ceilf: Other Builtins. (line 6) 26524* ceill: Other Builtins. (line 6) 26525* cexp: Other Builtins. (line 6) 26526* cexpf: Other Builtins. (line 6) 26527* cexpl: Other Builtins. (line 6) 26528* cimag: Other Builtins. (line 6) 26529* cimagf: Other Builtins. (line 6) 26530* cimagl: Other Builtins. (line 6) 26531* cleanup attribute: Variable Attributes. (line 76) 26532* COBOL: G++ and GCC. (line 23) 26533* code generation conventions: Code Gen Options. (line 6) 26534* code, mixed with declarations: Mixed Declarations. (line 6) 26535* command options: Invoking GCC. (line 6) 26536* comments, C++ style: C++ Comments. (line 6) 26537* common attribute: Variable Attributes. (line 92) 26538* comparison of signed and unsigned values, warning: Warning Options. 26539 (line 717) 26540* compiler bugs, reporting: Bug Reporting. (line 6) 26541* compiler compared to C++ preprocessor: G++ and GCC. (line 35) 26542* compiler options, C++: C++ Dialect Options. (line 6) 26543* compiler options, Objective-C: Objective-C Dialect Options. 26544 (line 6) 26545* compiler version, specifying: Target Options. (line 6) 26546* COMPILER_PATH: Environment Variables. 26547 (line 85) 26548* complex conjugation: Complex. (line 34) 26549* complex numbers: Complex. (line 6) 26550* compound expressions as lvalues: Lvalues. (line 6) 26551* compound literals: Compound Literals. (line 6) 26552* computed gotos: Labels as Values. (line 6) 26553* conditional expressions as lvalues: Lvalues. (line 6) 26554* conditional expressions, extensions: Conditionals. (line 6) 26555* conflicting types: Disappointments. (line 21) 26556* conj: Other Builtins. (line 6) 26557* conjf: Other Builtins. (line 6) 26558* conjl: Other Builtins. (line 6) 26559* const applied to function: Function Attributes. (line 6) 26560* const function attribute: Function Attributes. (line 99) 26561* constants in constraints: Simple Constraints. (line 58) 26562* constraint modifier characters: Modifiers. (line 6) 26563* constraint, matching: Simple Constraints. (line 127) 26564* constraints, asm: Constraints. (line 6) 26565* constraints, machine specific: Machine Constraints. (line 6) 26566* constructing calls: Constructing Calls. (line 6) 26567* constructor expressions: Compound Literals. (line 6) 26568* constructor function attribute: Function Attributes. (line 266) 26569* contributors: Contributors. (line 6) 26570* copysign: Other Builtins. (line 6) 26571* copysignf: Other Builtins. (line 6) 26572* copysignl: Other Builtins. (line 6) 26573* core dump: Bug Criteria. (line 9) 26574* cos: Other Builtins. (line 6) 26575* cosf: Other Builtins. (line 6) 26576* cosh: Other Builtins. (line 6) 26577* coshf: Other Builtins. (line 6) 26578* coshl: Other Builtins. (line 6) 26579* cosl: Other Builtins. (line 6) 26580* CPATH: Environment Variables. 26581 (line 123) 26582* CPLUS_INCLUDE_PATH: Environment Variables. 26583 (line 125) 26584* cpow: Other Builtins. (line 6) 26585* cpowf: Other Builtins. (line 6) 26586* cpowl: Other Builtins. (line 6) 26587* cproj: Other Builtins. (line 6) 26588* cprojf: Other Builtins. (line 6) 26589* cprojl: Other Builtins. (line 6) 26590* creal: Other Builtins. (line 6) 26591* crealf: Other Builtins. (line 6) 26592* creall: Other Builtins. (line 6) 26593* CRIS Options: CRIS Options. (line 6) 26594* cross compiling: Target Options. (line 6) 26595* csin: Other Builtins. (line 6) 26596* csinf: Other Builtins. (line 6) 26597* csinh: Other Builtins. (line 6) 26598* csinhf: Other Builtins. (line 6) 26599* csinhl: Other Builtins. (line 6) 26600* csinl: Other Builtins. (line 6) 26601* csqrt: Other Builtins. (line 6) 26602* csqrtf: Other Builtins. (line 6) 26603* csqrtl: Other Builtins. (line 6) 26604* ctan: Other Builtins. (line 6) 26605* ctanf: Other Builtins. (line 6) 26606* ctanh: Other Builtins. (line 6) 26607* ctanhf: Other Builtins. (line 6) 26608* ctanhl: Other Builtins. (line 6) 26609* ctanl: Other Builtins. (line 6) 26610* D30V Options: D30V Options. (line 6) 26611* Darwin options: Darwin Options. (line 6) 26612* DBX: Interoperation. (line 28) 26613* dcgettext: Other Builtins. (line 6) 26614* deallocating variable length arrays: Variable Length. (line 23) 26615* debugging information options: Debugging Options. (line 6) 26616* declaration scope: Incompatibilities. (line 82) 26617* declarations inside expressions: Statement Exprs. (line 6) 26618* declarations, mixed with code: Mixed Declarations. (line 6) 26619* declaring attributes of functions: Function Attributes. (line 6) 26620* declaring static data in C++: Static Definitions. (line 6) 26621* defining static data in C++: Static Definitions. (line 6) 26622* dependencies for make as output: Environment Variables. 26623 (line 151) 26624* dependencies, make: Preprocessor Options. 26625 (line 174) 26626* DEPENDENCIES_OUTPUT: Environment Variables. 26627 (line 150) 26628* dependent name lookup: Name lookup. (line 6) 26629* deprecated attribute: Variable Attributes. (line 100) 26630* deprecated attribute.: Function Attributes. (line 287) 26631* designated initializers: Designated Inits. (line 6) 26632* designator lists: Designated Inits. (line 94) 26633* designators: Designated Inits. (line 61) 26634* destructor function attribute: Function Attributes. (line 266) 26635* dgettext: Other Builtins. (line 6) 26636* diagnostic messages: Language Independent Options. 26637 (line 6) 26638* dialect options: C Dialect Options. (line 6) 26639* digits in constraint: Simple Constraints. (line 115) 26640* directory options: Directory Options. (line 6) 26641* dollar signs in identifier names: Dollar Signs. (line 6) 26642* double-word arithmetic: Long Long. (line 6) 26643* downward funargs: Nested Functions. (line 6) 26644* drem: Other Builtins. (line 6) 26645* dremf: Other Builtins. (line 6) 26646* dreml: Other Builtins. (line 6) 26647* E in constraint: Simple Constraints. (line 77) 26648* earlyclobber operand: Modifiers. (line 25) 26649* eight bit data on the H8/300, H8/300H, and H8S: Function Attributes. 26650 (line 504) 26651* empty structures: Empty Structures. (line 6) 26652* environment variables: Environment Variables. 26653 (line 6) 26654* erf: Other Builtins. (line 6) 26655* erfc: Other Builtins. (line 6) 26656* erfcf: Other Builtins. (line 6) 26657* erfcl: Other Builtins. (line 6) 26658* erff: Other Builtins. (line 6) 26659* erfl: Other Builtins. (line 6) 26660* error messages: Warnings and Errors. (line 6) 26661* escaped newlines: Escaped Newlines. (line 6) 26662* exclamation point: Multi-Alternative. (line 33) 26663* exit: Other Builtins. (line 6) 26664* exp: Other Builtins. (line 6) 26665* exp10: Other Builtins. (line 6) 26666* exp10f: Other Builtins. (line 6) 26667* exp10l: Other Builtins. (line 6) 26668* exp2: Other Builtins. (line 6) 26669* exp2f: Other Builtins. (line 6) 26670* exp2l: Other Builtins. (line 6) 26671* expf: Other Builtins. (line 6) 26672* expl: Other Builtins. (line 6) 26673* explicit register variables: Explicit Reg Vars. (line 6) 26674* expm1: Other Builtins. (line 6) 26675* expm1f: Other Builtins. (line 6) 26676* expm1l: Other Builtins. (line 6) 26677* expressions containing statements: Statement Exprs. (line 6) 26678* expressions, compound, as lvalues: Lvalues. (line 6) 26679* expressions, conditional, as lvalues: Lvalues. (line 6) 26680* expressions, constructor: Compound Literals. (line 6) 26681* extended asm: Extended Asm. (line 6) 26682* extensible constraints: Simple Constraints. (line 151) 26683* extensions, ?: <1>: Conditionals. (line 6) 26684* extensions, ?:: Lvalues. (line 6) 26685* extensions, C language: C Extensions. (line 6) 26686* extensions, C++ language: C++ Extensions. (line 6) 26687* external declaration scope: Incompatibilities. (line 82) 26688* F in constraint: Simple Constraints. (line 82) 26689* fabs: Other Builtins. (line 6) 26690* fabsf: Other Builtins. (line 6) 26691* fabsl: Other Builtins. (line 6) 26692* fatal signal: Bug Criteria. (line 9) 26693* fdim: Other Builtins. (line 6) 26694* fdimf: Other Builtins. (line 6) 26695* fdiml: Other Builtins. (line 6) 26696* FDL, GNU Free Documentation License: GNU Free Documentation License. 26697 (line 6) 26698* ffs: Other Builtins. (line 6) 26699* file name suffix: Overall Options. (line 14) 26700* file names: Link Options. (line 10) 26701* flexible array members: Zero Length. (line 6) 26702* float as function value type: Incompatibilities. (line 143) 26703* floating point precision <1>: Disappointments. (line 70) 26704* floating point precision: Optimize Options. (line 757) 26705* floor: Other Builtins. (line 6) 26706* floorf: Other Builtins. (line 6) 26707* floorl: Other Builtins. (line 6) 26708* fma: Other Builtins. (line 6) 26709* fmaf: Other Builtins. (line 6) 26710* fmal: Other Builtins. (line 6) 26711* fmax: Other Builtins. (line 6) 26712* fmaxf: Other Builtins. (line 6) 26713* fmaxl: Other Builtins. (line 6) 26714* fmin: Other Builtins. (line 6) 26715* fminf: Other Builtins. (line 6) 26716* fminl: Other Builtins. (line 6) 26717* fmod: Other Builtins. (line 6) 26718* fmodf: Other Builtins. (line 6) 26719* fmodl: Other Builtins. (line 6) 26720* format function attribute: Function Attributes. (line 135) 26721* format_arg function attribute: Function Attributes. (line 183) 26722* Fortran: G++ and GCC. (line 6) 26723* forwarding calls: Constructing Calls. (line 6) 26724* fprintf: Other Builtins. (line 6) 26725* fprintf_unlocked: Other Builtins. (line 6) 26726* fputs: Other Builtins. (line 6) 26727* fputs_unlocked: Other Builtins. (line 6) 26728* freestanding environment: Standards. (line 6) 26729* freestanding implementation: Standards. (line 6) 26730* frexp: Other Builtins. (line 6) 26731* frexpf: Other Builtins. (line 6) 26732* frexpl: Other Builtins. (line 6) 26733* FRV Options: FRV Options. (line 6) 26734* fscanf: Other Builtins. (line 6) 26735* fscanf, and constant strings: Incompatibilities. (line 17) 26736* function addressability on the M32R/D: Function Attributes. (line 539) 26737* function attributes: Function Attributes. (line 6) 26738* function pointers, arithmetic: Pointer Arith. (line 6) 26739* function prototype declarations: Function Prototypes. (line 6) 26740* function without a prologue/epilogue code: Function Attributes. 26741 (line 533) 26742* function, size of pointer to: Pointer Arith. (line 6) 26743* functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 26744 (line 429) 26745* functions in arbitrary sections: Function Attributes. (line 6) 26746* functions that are passed arguments in registers on the 386: Function Attributes. 26747 (line 6) 26748* functions that behave like malloc: Function Attributes. (line 6) 26749* functions that do not pop the argument stack on the 386: Function Attributes. 26750 (line 6) 26751* functions that do pop the argument stack on the 386: Function Attributes. 26752 (line 423) 26753* functions that have no side effects: Function Attributes. (line 6) 26754* functions that never return: Function Attributes. (line 6) 26755* functions that pop the argument stack on the 386: Function Attributes. 26756 (line 6) 26757* functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 26758 (line 583) 26759* functions which handle memory bank switching: Function Attributes. 26760 (line 567) 26761* functions with non-null pointer arguments: Function Attributes. 26762 (line 6) 26763* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 26764 (line 6) 26765* g in constraint: Simple Constraints. (line 108) 26766* G in constraint: Simple Constraints. (line 86) 26767* g++: Invoking G++. (line 13) 26768* G++: G++ and GCC. (line 30) 26769* gamma: Other Builtins. (line 6) 26770* gammaf: Other Builtins. (line 6) 26771* gammal: Other Builtins. (line 6) 26772* GCC: G++ and GCC. (line 6) 26773* GCC command options: Invoking GCC. (line 6) 26774* GCC_EXEC_PREFIX: Environment Variables. 26775 (line 52) 26776* gcc_struct: Type Attributes. (line 266) 26777* gcc_struct attribute: Variable Attributes. (line 296) 26778* generalized lvalues: Lvalues. (line 6) 26779* gettext: Other Builtins. (line 6) 26780* global offset table: Code Gen Options. (line 170) 26781* global register after longjmp: Global Reg Vars. (line 66) 26782* global register variables: Global Reg Vars. (line 6) 26783* GNAT: G++ and GCC. (line 30) 26784* GNU C Compiler: G++ and GCC. (line 6) 26785* GNU Compiler Collection: G++ and GCC. (line 6) 26786* goto with computed label: Labels as Values. (line 6) 26787* gp-relative references (MIPS): MIPS Options. (line 177) 26788* gprof: Debugging Options. (line 122) 26789* grouping options: Invoking GCC. (line 26) 26790* H in constraint: Simple Constraints. (line 86) 26791* hardware models and configurations, specifying: Submodel Options. 26792 (line 6) 26793* hex floats: Hex Floats. (line 6) 26794* hosted environment <1>: C Dialect Options. (line 155) 26795* hosted environment: Standards. (line 6) 26796* hosted implementation: Standards. (line 6) 26797* HPPA Options: HPPA Options. (line 6) 26798* hypot: Other Builtins. (line 6) 26799* hypotf: Other Builtins. (line 6) 26800* hypotl: Other Builtins. (line 6) 26801* I in constraint: Simple Constraints. (line 69) 26802* i in constraint: Simple Constraints. (line 58) 26803* i386 Options: i386 and x86-64 Options. 26804 (line 6) 26805* IA-64 Options: IA-64 Options. (line 6) 26806* IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 26807 (line 6) 26808* identifier names, dollar signs in: Dollar Signs. (line 6) 26809* identifiers, names in assembler code: Asm Labels. (line 6) 26810* ilogb: Other Builtins. (line 6) 26811* ilogbf: Other Builtins. (line 6) 26812* ilogbl: Other Builtins. (line 6) 26813* imaxabs: Other Builtins. (line 6) 26814* implementation-defined behavior, C language: C Implementation. 26815 (line 6) 26816* implied #pragma implementation: C++ Interface. (line 46) 26817* incompatibilities of GCC: Incompatibilities. (line 6) 26818* increment operators: Bug Criteria. (line 17) 26819* index: Other Builtins. (line 6) 26820* indirect calls on ARM: Function Attributes. (line 440) 26821* init_priority attribute: C++ Attributes. (line 9) 26822* initializations in expressions: Compound Literals. (line 6) 26823* initializers with labeled elements: Designated Inits. (line 6) 26824* initializers, non-constant: Initializers. (line 6) 26825* inline automatic for C++ member fns: Inline. (line 46) 26826* inline functions: Inline. (line 6) 26827* inline functions, omission of: Inline. (line 51) 26828* inlining and C++ pragmas: C++ Interface. (line 66) 26829* installation trouble: Trouble. (line 6) 26830* integrating function code: Inline. (line 6) 26831* Intel 386 Options: i386 and x86-64 Options. 26832 (line 6) 26833* interface and implementation headers, C++: C++ Interface. (line 6) 26834* intermediate C version, nonexistent: G++ and GCC. (line 35) 26835* interrupt handler functions: Function Attributes. (line 461) 26836* interrupt handler functions on the m68k, H8/300 and SH processors: Function Attributes. 26837 (line 483) 26838* introduction: Top. (line 6) 26839* invalid assembly code: Bug Criteria. (line 12) 26840* invalid input: Bug Criteria. (line 42) 26841* invoking g++: Invoking G++. (line 23) 26842* ISO 9899: Standards. (line 6) 26843* ISO C: Standards. (line 6) 26844* ISO C standard: Standards. (line 6) 26845* ISO C90: Standards. (line 6) 26846* ISO C94: Standards. (line 6) 26847* ISO C95: Standards. (line 6) 26848* ISO C99: Standards. (line 6) 26849* ISO C9X: Standards. (line 6) 26850* ISO support: C Dialect Options. (line 9) 26851* ISO/IEC 9899: Standards. (line 6) 26852* j0: Other Builtins. (line 6) 26853* j0f: Other Builtins. (line 6) 26854* j0l: Other Builtins. (line 6) 26855* j1: Other Builtins. (line 6) 26856* j1f: Other Builtins. (line 6) 26857* j1l: Other Builtins. (line 6) 26858* Java: G++ and GCC. (line 6) 26859* java_interface attribute: C++ Attributes. (line 29) 26860* jn: Other Builtins. (line 6) 26861* jnf: Other Builtins. (line 6) 26862* jnl: Other Builtins. (line 6) 26863* keywords, alternate: Alternate Keywords. (line 6) 26864* known causes of trouble: Trouble. (line 6) 26865* labeled elements in initializers: Designated Inits. (line 6) 26866* labels as values: Labels as Values. (line 6) 26867* labs: Other Builtins. (line 6) 26868* LANG: Environment Variables. 26869 (line 21) 26870* language dialect options: C Dialect Options. (line 6) 26871* LC_ALL: Environment Variables. 26872 (line 21) 26873* LC_CTYPE: Environment Variables. 26874 (line 21) 26875* LC_MESSAGES: Environment Variables. 26876 (line 21) 26877* ldexp: Other Builtins. (line 6) 26878* ldexpf: Other Builtins. (line 6) 26879* ldexpl: Other Builtins. (line 6) 26880* length-zero arrays: Zero Length. (line 6) 26881* lgamma: Other Builtins. (line 6) 26882* lgammaf: Other Builtins. (line 6) 26883* lgammal: Other Builtins. (line 6) 26884* Libraries: Link Options. (line 24) 26885* LIBRARY_PATH: Environment Variables. 26886 (line 91) 26887* link options: Link Options. (line 6) 26888* LL integer suffix: Long Long. (line 6) 26889* llabs: Other Builtins. (line 6) 26890* llrint: Other Builtins. (line 6) 26891* llrintf: Other Builtins. (line 6) 26892* llrintl: Other Builtins. (line 6) 26893* llround: Other Builtins. (line 6) 26894* llroundf: Other Builtins. (line 6) 26895* llroundl: Other Builtins. (line 6) 26896* load address instruction: Simple Constraints. (line 142) 26897* local labels: Local Labels. (line 6) 26898* local variables in macros: Typeof. (line 42) 26899* local variables, specifying registers: Local Reg Vars. (line 6) 26900* locale: Environment Variables. 26901 (line 21) 26902* locale definition: Environment Variables. 26903 (line 100) 26904* log: Other Builtins. (line 6) 26905* log10: Other Builtins. (line 6) 26906* log10f: Other Builtins. (line 6) 26907* log10l: Other Builtins. (line 6) 26908* log1p: Other Builtins. (line 6) 26909* log1pf: Other Builtins. (line 6) 26910* log1pl: Other Builtins. (line 6) 26911* log2: Other Builtins. (line 6) 26912* log2f: Other Builtins. (line 6) 26913* log2l: Other Builtins. (line 6) 26914* logb: Other Builtins. (line 6) 26915* logbf: Other Builtins. (line 6) 26916* logbl: Other Builtins. (line 6) 26917* logf: Other Builtins. (line 6) 26918* logl: Other Builtins. (line 6) 26919* long long data types: Long Long. (line 6) 26920* longjmp: Global Reg Vars. (line 66) 26921* longjmp incompatibilities: Incompatibilities. (line 41) 26922* longjmp warnings: Warning Options. (line 412) 26923* lrint: Other Builtins. (line 6) 26924* lrintf: Other Builtins. (line 6) 26925* lrintl: Other Builtins. (line 6) 26926* lround: Other Builtins. (line 6) 26927* lroundf: Other Builtins. (line 6) 26928* lroundl: Other Builtins. (line 6) 26929* lvalues, generalized: Lvalues. (line 6) 26930* m in constraint: Simple Constraints. (line 17) 26931* M32R/D options: M32R/D Options. (line 6) 26932* M680x0 options: M680x0 Options. (line 6) 26933* M68hc1x options: M68hc1x Options. (line 6) 26934* machine dependent options: Submodel Options. (line 6) 26935* machine specific constraints: Machine Constraints. (line 6) 26936* macro with variable arguments: Variadic Macros. (line 6) 26937* macros containing asm: Extended Asm. (line 214) 26938* macros, inline alternative: Inline. (line 6) 26939* macros, local labels: Local Labels. (line 6) 26940* macros, local variables in: Typeof. (line 42) 26941* macros, statements in expressions: Statement Exprs. (line 6) 26942* macros, types of arguments: Typeof. (line 6) 26943* make: Preprocessor Options. 26944 (line 174) 26945* malloc: Other Builtins. (line 6) 26946* malloc attribute: Function Attributes. (line 331) 26947* matching constraint: Simple Constraints. (line 127) 26948* maximum operator: Min and Max. (line 14) 26949* MCore options: MCore Options. (line 6) 26950* member fns, automatically inline: Inline. (line 46) 26951* memcmp: Other Builtins. (line 6) 26952* memcpy: Other Builtins. (line 6) 26953* memory references in constraints: Simple Constraints. (line 17) 26954* mempcpy: Other Builtins. (line 6) 26955* memset: Other Builtins. (line 6) 26956* Mercury: G++ and GCC. (line 23) 26957* message formatting: Language Independent Options. 26958 (line 6) 26959* messages, warning: Warning Options. (line 6) 26960* messages, warning and error: Warnings and Errors. (line 6) 26961* middle-operands, omitted: Conditionals. (line 6) 26962* minimum operator: Min and Max. (line 10) 26963* MIPS options: MIPS Options. (line 6) 26964* misunderstandings in C++: C++ Misunderstandings. 26965 (line 6) 26966* mixed declarations and code: Mixed Declarations. (line 6) 26967* mktemp, and constant strings: Incompatibilities. (line 13) 26968* MMIX Options: MMIX Options. (line 6) 26969* MN10300 options: MN10300 Options. (line 6) 26970* mode attribute: Variable Attributes. (line 118) 26971* modf: Other Builtins. (line 6) 26972* modff: Other Builtins. (line 6) 26973* modfl: Other Builtins. (line 6) 26974* modifiers in constraints: Modifiers. (line 6) 26975* ms_struct: Type Attributes. (line 266) 26976* ms_struct attribute: Variable Attributes. (line 296) 26977* multiple alternative constraints: Multi-Alternative. (line 6) 26978* multiprecision arithmetic: Long Long. (line 6) 26979* n in constraint: Simple Constraints. (line 63) 26980* names used in assembler code: Asm Labels. (line 6) 26981* naming convention, implementation headers: C++ Interface. (line 46) 26982* nearbyint: Other Builtins. (line 6) 26983* nearbyintf: Other Builtins. (line 6) 26984* nearbyintl: Other Builtins. (line 6) 26985* nested functions: Nested Functions. (line 6) 26986* newlines (escaped): Escaped Newlines. (line 6) 26987* nextafter: Other Builtins. (line 6) 26988* nextafterf: Other Builtins. (line 6) 26989* nextafterl: Other Builtins. (line 6) 26990* nexttoward: Other Builtins. (line 6) 26991* nexttowardf: Other Builtins. (line 6) 26992* nexttowardl: Other Builtins. (line 6) 26993* no_instrument_function function attribute: Function Attributes. 26994 (line 244) 26995* nocommon attribute: Variable Attributes. (line 92) 26996* noinline function attribute: Function Attributes. (line 70) 26997* non-constant initializers: Initializers. (line 6) 26998* non-static inline function: Inline. (line 63) 26999* nonnull function attribute: Function Attributes. (line 221) 27000* noreturn function attribute: Function Attributes. (line 30) 27001* nothrow function attribute: Function Attributes. (line 126) 27002* NS32K options: NS32K Options. (line 6) 27003* o in constraint: Simple Constraints. (line 21) 27004* OBJC_INCLUDE_PATH: Environment Variables. 27005 (line 126) 27006* Objective-C: G++ and GCC. (line 6) 27007* Objective-C options, command line: Objective-C Dialect Options. 27008 (line 6) 27009* offsettable address: Simple Constraints. (line 21) 27010* old-style function definitions: Function Prototypes. (line 6) 27011* omitted middle-operands: Conditionals. (line 6) 27012* open coding: Inline. (line 6) 27013* operand constraints, asm: Constraints. (line 6) 27014* optimize options: Optimize Options. (line 6) 27015* options to control diagnostics formatting: Language Independent Options. 27016 (line 6) 27017* options to control warnings: Warning Options. (line 6) 27018* options, C++: C++ Dialect Options. (line 6) 27019* options, code generation: Code Gen Options. (line 6) 27020* options, debugging: Debugging Options. (line 6) 27021* options, dialect: C Dialect Options. (line 6) 27022* options, directory search: Directory Options. (line 6) 27023* options, GCC command: Invoking GCC. (line 6) 27024* options, grouping: Invoking GCC. (line 26) 27025* options, linking: Link Options. (line 6) 27026* options, Objective-C: Objective-C Dialect Options. 27027 (line 6) 27028* options, optimization: Optimize Options. (line 6) 27029* options, order: Invoking GCC. (line 30) 27030* options, preprocessor: Preprocessor Options. 27031 (line 6) 27032* order of evaluation, side effects: Non-bugs. (line 180) 27033* order of options: Invoking GCC. (line 30) 27034* other register constraints: Simple Constraints. (line 151) 27035* output file option: Overall Options. (line 153) 27036* overloaded virtual fn, warning: C++ Dialect Options. (line 353) 27037* p in constraint: Simple Constraints. (line 142) 27038* packed attribute: Variable Attributes. (line 129) 27039* parameter forward declaration: Variable Length. (line 60) 27040* parameters, aliased: Code Gen Options. (line 311) 27041* Pascal: G++ and GCC. (line 23) 27042* PDP-11 Options: PDP-11 Options. (line 6) 27043* PIC: Code Gen Options. (line 170) 27044* pmf: Bound member functions. 27045 (line 6) 27046* pointer arguments: Function Attributes. (line 107) 27047* pointer to member function: Bound member functions. 27048 (line 6) 27049* portions of temporary objects, pointers to: Temporaries. (line 6) 27050* pow: Other Builtins. (line 6) 27051* pow10: Other Builtins. (line 6) 27052* pow10f: Other Builtins. (line 6) 27053* pow10l: Other Builtins. (line 6) 27054* powf: Other Builtins. (line 6) 27055* powl: Other Builtins. (line 6) 27056* pragma, extern_prefix: Tru64 Pragmas. (line 10) 27057* pragma, long_calls: ARM Pragmas. (line 11) 27058* pragma, long_calls_off: ARM Pragmas. (line 17) 27059* pragma, longcall: RS/6000 and PowerPC Pragmas. 27060 (line 14) 27061* pragma, mark: Darwin Pragmas. (line 11) 27062* pragma, no_long_calls: ARM Pragmas. (line 14) 27063* pragma, options align: Darwin Pragmas. (line 14) 27064* pragma, reason for not using: Function Attributes. (line 654) 27065* pragma, redefine_extname: Solaris Pragmas. (line 10) 27066* pragma, segment: Darwin Pragmas. (line 21) 27067* pragma, unused: Darwin Pragmas. (line 24) 27068* pragmas: Pragmas. (line 6) 27069* pragmas in C++, effect on inlining: C++ Interface. (line 66) 27070* pragmas, interface and implementation: C++ Interface. (line 6) 27071* pragmas, warning of unknown: Warning Options. (line 427) 27072* precompiled headers: Precompiled Headers. (line 6) 27073* preprocessing numbers: Incompatibilities. (line 175) 27074* preprocessing tokens: Incompatibilities. (line 175) 27075* preprocessor options: Preprocessor Options. 27076 (line 6) 27077* printf: Other Builtins. (line 6) 27078* printf_unlocked: Other Builtins. (line 6) 27079* prof: Debugging Options. (line 116) 27080* promotion of formal parameters: Function Prototypes. (line 6) 27081* pure function attribute: Function Attributes. (line 79) 27082* push address instruction: Simple Constraints. (line 142) 27083* putchar: Other Builtins. (line 6) 27084* puts: Other Builtins. (line 6) 27085* qsort, and global register variables: Global Reg Vars. (line 42) 27086* question mark: Multi-Alternative. (line 27) 27087* r in constraint: Simple Constraints. (line 54) 27088* ranges in case statements: Case Ranges. (line 6) 27089* read-only strings: Incompatibilities. (line 9) 27090* register variable after longjmp: Global Reg Vars. (line 66) 27091* registers: Extended Asm. (line 6) 27092* registers for local variables: Local Reg Vars. (line 6) 27093* registers in constraints: Simple Constraints. (line 54) 27094* registers, global allocation: Explicit Reg Vars. (line 6) 27095* registers, global variables in: Global Reg Vars. (line 6) 27096* regparm attribute: Function Attributes. (line 394) 27097* relocation truncated to fit (MIPS): MIPS Options. (line 108) 27098* remainder: Other Builtins. (line 6) 27099* remainderf: Other Builtins. (line 6) 27100* remainderl: Other Builtins. (line 6) 27101* remquo: Other Builtins. (line 6) 27102* remquof: Other Builtins. (line 6) 27103* remquol: Other Builtins. (line 6) 27104* reordering, warning: C++ Dialect Options. (line 281) 27105* reporting bugs: Bugs. (line 6) 27106* rest argument (in macro): Variadic Macros. (line 6) 27107* restricted pointers: Restricted Pointers. (line 6) 27108* restricted references: Restricted Pointers. (line 6) 27109* restricted this pointer: Restricted Pointers. (line 6) 27110* rindex: Other Builtins. (line 6) 27111* rint: Other Builtins. (line 6) 27112* rintf: Other Builtins. (line 6) 27113* rintl: Other Builtins. (line 6) 27114* round: Other Builtins. (line 6) 27115* roundf: Other Builtins. (line 6) 27116* roundl: Other Builtins. (line 6) 27117* RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 27118 (line 6) 27119* RTTI: Vague Linkage. (line 43) 27120* run-time options: Code Gen Options. (line 6) 27121* s in constraint: Simple Constraints. (line 90) 27122* S/390 and zSeries Options: S/390 and zSeries Options. 27123 (line 6) 27124* save all registers on the H8/300, H8/300H, and H8S: Function Attributes. 27125 (line 521) 27126* scalb: Other Builtins. (line 6) 27127* scalbf: Other Builtins. (line 6) 27128* scalbl: Other Builtins. (line 6) 27129* scalbln: Other Builtins. (line 6) 27130* scalblnf: Other Builtins. (line 6) 27131* scalbn: Other Builtins. (line 6) 27132* scalbnf: Other Builtins. (line 6) 27133* scanf, and constant strings: Incompatibilities. (line 17) 27134* scanfnl: Other Builtins. (line 6) 27135* scope of a variable length array: Variable Length. (line 23) 27136* scope of declaration: Disappointments. (line 21) 27137* scope of external declarations: Incompatibilities. (line 82) 27138* search path: Directory Options. (line 6) 27139* section function attribute: Function Attributes. (line 249) 27140* section variable attribute: Variable Attributes. (line 144) 27141* setjmp: Global Reg Vars. (line 66) 27142* setjmp incompatibilities: Incompatibilities. (line 41) 27143* shared strings: Incompatibilities. (line 9) 27144* shared variable attribute: Variable Attributes. (line 189) 27145* side effect in ?:: Conditionals. (line 20) 27146* side effects, macro argument: Statement Exprs. (line 35) 27147* side effects, order of evaluation: Non-bugs. (line 180) 27148* signal handler functions on the AVR processors: Function Attributes. 27149 (line 526) 27150* signed and unsigned values, comparison warning: Warning Options. 27151 (line 717) 27152* significand: Other Builtins. (line 6) 27153* significandf: Other Builtins. (line 6) 27154* significandl: Other Builtins. (line 6) 27155* simple constraints: Simple Constraints. (line 6) 27156* sin: Other Builtins. (line 6) 27157* sincos: Other Builtins. (line 6) 27158* sincosf: Other Builtins. (line 6) 27159* sincosl: Other Builtins. (line 6) 27160* sinf: Other Builtins. (line 6) 27161* sinh: Other Builtins. (line 6) 27162* sinhf: Other Builtins. (line 6) 27163* sinhl: Other Builtins. (line 6) 27164* sinl: Other Builtins. (line 6) 27165* sizeof: Typeof. (line 6) 27166* smaller data references: M32R/D Options. (line 57) 27167* smaller data references (MIPS): MIPS Options. (line 177) 27168* smaller data references (PowerPC): RS/6000 and PowerPC Options. 27169 (line 508) 27170* snprintf: Other Builtins. (line 6) 27171* SPARC options: SPARC Options. (line 6) 27172* Spec Files: Spec Files. (line 6) 27173* specified registers: Explicit Reg Vars. (line 6) 27174* specifying compiler version and target machine: Target Options. 27175 (line 6) 27176* specifying hardware config: Submodel Options. (line 6) 27177* specifying machine version: Target Options. (line 6) 27178* specifying registers for local variables: Local Reg Vars. (line 6) 27179* speed of compilation: Precompiled Headers. (line 6) 27180* sprintf: Other Builtins. (line 6) 27181* sqrt: Other Builtins. (line 6) 27182* sqrtf: Other Builtins. (line 6) 27183* sqrtl: Other Builtins. (line 6) 27184* sscanf: Other Builtins. (line 6) 27185* sscanf, and constant strings: Incompatibilities. (line 17) 27186* statements inside expressions: Statement Exprs. (line 6) 27187* static data in C++, declaring and defining: Static Definitions. 27188 (line 6) 27189* stpcpy: Other Builtins. (line 6) 27190* strcat: Other Builtins. (line 6) 27191* strchr: Other Builtins. (line 6) 27192* strcmp: Other Builtins. (line 6) 27193* strcpy: Other Builtins. (line 6) 27194* strcspn: Other Builtins. (line 6) 27195* strdup: Other Builtins. (line 6) 27196* strfmon: Other Builtins. (line 6) 27197* strftime: Other Builtins. (line 6) 27198* string constants: Incompatibilities. (line 9) 27199* strlen: Other Builtins. (line 6) 27200* strncat: Other Builtins. (line 6) 27201* strncmp: Other Builtins. (line 6) 27202* strncpy: Other Builtins. (line 6) 27203* strpbrk: Other Builtins. (line 6) 27204* strrchr: Other Builtins. (line 6) 27205* strspn: Other Builtins. (line 6) 27206* strstr: Other Builtins. (line 6) 27207* struct: Unnamed Fields. (line 6) 27208* structures: Incompatibilities. (line 148) 27209* structures, constructor expression: Compound Literals. (line 6) 27210* submodel options: Submodel Options. (line 6) 27211* subscripting: Subscripting. (line 6) 27212* subscripting and function values: Subscripting. (line 6) 27213* suffixes for C++ source: Invoking G++. (line 6) 27214* SUNPRO_DEPENDENCIES: Environment Variables. 27215 (line 166) 27216* suppressing warnings: Warning Options. (line 6) 27217* surprises in C++: C++ Misunderstandings. 27218 (line 6) 27219* syntax checking: Warning Options. (line 21) 27220* synthesized methods, warning: C++ Dialect Options. (line 383) 27221* system headers, warnings from: Warning Options. (line 548) 27222* tan: Other Builtins. (line 6) 27223* tanf: Other Builtins. (line 6) 27224* tanh: Other Builtins. (line 6) 27225* tanhf: Other Builtins. (line 6) 27226* tanhl: Other Builtins. (line 6) 27227* tanl: Other Builtins. (line 6) 27228* target machine, specifying: Target Options. (line 6) 27229* target options: Target Options. (line 6) 27230* TC1: Standards. (line 6) 27231* TC2: Standards. (line 6) 27232* Technical Corrigenda: Standards. (line 6) 27233* Technical Corrigendum 1: Standards. (line 6) 27234* Technical Corrigendum 2: Standards. (line 6) 27235* template instantiation: Template Instantiation. 27236 (line 6) 27237* temporaries, lifetime of: Temporaries. (line 6) 27238* tgamma: Other Builtins. (line 6) 27239* tgammaf: Other Builtins. (line 6) 27240* tgammal: Other Builtins. (line 6) 27241* Thread-Local Storage: Thread-Local. (line 6) 27242* thunks: Nested Functions. (line 6) 27243* tiny data section on the H8/300H and H8S: Function Attributes. 27244 (line 514) 27245* TLS: Thread-Local. (line 6) 27246* tls_model attribute: Variable Attributes. (line 213) 27247* TMPDIR: Environment Variables. 27248 (line 45) 27249* TMS320C3x/C4x Options: TMS320C3x/C4x Options. 27250 (line 6) 27251* traditional C language: C Dialect Options. (line 189) 27252* treelang <1>: Standards. (line 124) 27253* treelang: G++ and GCC. (line 6) 27254* trunc: Other Builtins. (line 6) 27255* truncf: Other Builtins. (line 6) 27256* truncl: Other Builtins. (line 6) 27257* two-stage name lookup: Name lookup. (line 6) 27258* type alignment: Alignment. (line 6) 27259* type attributes: Type Attributes. (line 6) 27260* type_info: Vague Linkage. (line 43) 27261* typedef names as function parameters: Incompatibilities. (line 99) 27262* typeof: Typeof. (line 6) 27263* ULL integer suffix: Long Long. (line 6) 27264* Ultrix calling convention: Interoperation. (line 197) 27265* undefined behavior: Bug Criteria. (line 17) 27266* undefined function value: Bug Criteria. (line 17) 27267* underscores in variables in macros: Typeof. (line 42) 27268* union: Unnamed Fields. (line 6) 27269* union, casting to a: Cast to Union. (line 6) 27270* unions: Incompatibilities. (line 148) 27271* unknown pragmas, warning: Warning Options. (line 427) 27272* unresolved references and -nodefaultlibs: Link Options. (line 81) 27273* unresolved references and -nostdlib: Link Options. (line 81) 27274* unused attribute.: Function Attributes. (line 276) 27275* used attribute.: Function Attributes. (line 281) 27276* V in constraint: Simple Constraints. (line 41) 27277* V850 Options: V850 Options. (line 6) 27278* vague linkage: Vague Linkage. (line 6) 27279* value after longjmp: Global Reg Vars. (line 66) 27280* variable addressability on the IA-64: Function Attributes. (line 539) 27281* variable addressability on the M32R/D: Variable Attributes. (line 277) 27282* variable alignment: Alignment. (line 6) 27283* variable attributes: Variable Attributes. (line 6) 27284* variable number of arguments: Variadic Macros. (line 6) 27285* variable-length array scope: Variable Length. (line 23) 27286* variable-length arrays: Variable Length. (line 6) 27287* variables in specified registers: Explicit Reg Vars. (line 6) 27288* variables, local, in macros: Typeof. (line 42) 27289* variadic macros: Variadic Macros. (line 6) 27290* VAX calling convention: Interoperation. (line 197) 27291* VAX options: VAX Options. (line 6) 27292* vfprintf: Other Builtins. (line 6) 27293* vfscanf: Other Builtins. (line 6) 27294* visibility attribute: Function Attributes. (line 353) 27295* VLAs: Variable Length. (line 6) 27296* void pointers, arithmetic: Pointer Arith. (line 6) 27297* void, size of pointer to: Pointer Arith. (line 6) 27298* volatile access: Volatiles. (line 6) 27299* volatile applied to function: Function Attributes. (line 6) 27300* volatile read: Volatiles. (line 6) 27301* volatile write: Volatiles. (line 6) 27302* vprintf: Other Builtins. (line 6) 27303* vscanf: Other Builtins. (line 6) 27304* vsnprintf: Other Builtins. (line 6) 27305* vsprintf: Other Builtins. (line 6) 27306* vsscanf: Other Builtins. (line 6) 27307* vtable: Vague Linkage. (line 28) 27308* warn_unused_result attribute: Function Attributes. (line 306) 27309* warning for comparison of signed and unsigned values: Warning Options. 27310 (line 717) 27311* warning for overloaded virtual fn: C++ Dialect Options. (line 353) 27312* warning for reordering of member initializers: C++ Dialect Options. 27313 (line 281) 27314* warning for synthesized methods: C++ Dialect Options. (line 383) 27315* warning for unknown pragmas: Warning Options. (line 427) 27316* warning messages: Warning Options. (line 6) 27317* warnings from system headers: Warning Options. (line 548) 27318* warnings vs errors: Warnings and Errors. (line 6) 27319* weak attribute: Function Attributes. (line 323) 27320* whitespace: Incompatibilities. (line 114) 27321* X in constraint: Simple Constraints. (line 112) 27322* X3.159-1989: Standards. (line 6) 27323* x86-64 Options: i386 and x86-64 Options. 27324 (line 6) 27325* Xstormy16 Options: Xstormy16 Options. (line 6) 27326* Xtensa Options: Xtensa Options. (line 6) 27327* y0: Other Builtins. (line 6) 27328* y0f: Other Builtins. (line 6) 27329* y0l: Other Builtins. (line 6) 27330* y1: Other Builtins. (line 6) 27331* y1f: Other Builtins. (line 6) 27332* y1l: Other Builtins. (line 6) 27333* yn: Other Builtins. (line 6) 27334* ynf: Other Builtins. (line 6) 27335* ynl: Other Builtins. (line 6) 27336* zero-length arrays: Zero Length. (line 6) 27337* zero-size structures: Empty Structures. (line 6) 27338 27339 27340 27341Tag Table: 27342Node: Top2030 27343Node: G++ and GCC3712 27344Node: Standards5748 27345Node: Invoking GCC12910 27346Node: Option Summary16620 27347Node: Overall Options40553 27348Node: Invoking G++47682 27349Node: C Dialect Options49304 27350Node: C++ Dialect Options59990 27351Node: Objective-C Dialect Options76269 27352Node: Language Independent Options85342 27353Node: Warning Options87135 27354Node: Debugging Options125575 27355Node: Optimize Options146564 27356Node: Preprocessor Options199595 27357Ref: Wtrigraphs203620 27358Ref: dashMF208377 27359Ref: fdollars-in-identifiers216197 27360Node: Assembler Options224057 27361Node: Link Options224762 27362Ref: Link Options-Footnote-1233137 27363Node: Directory Options233471 27364Node: Spec Files238466 27365Node: Target Options257827 27366Node: Submodel Options259133 27367Node: M680x0 Options260841 27368Node: M68hc1x Options267891 27369Node: VAX Options269455 27370Node: SPARC Options270002 27371Node: ARM Options281801 27372Node: MN10300 Options294261 27373Node: M32R/D Options295319 27374Node: RS/6000 and PowerPC Options298920 27375Node: Darwin Options323029 27376Node: MIPS Options325126 27377Node: i386 and x86-64 Options336360 27378Node: HPPA Options354092 27379Node: Intel 960 Options361988 27380Node: DEC Alpha Options364944 27381Node: DEC Alpha/VMS Options376427 27382Node: H8/300 Options376817 27383Node: SH Options377882 27384Node: System V Options380252 27385Node: TMS320C3x/C4x Options381083 27386Node: V850 Options386608 27387Node: ARC Options389753 27388Node: NS32K Options390968 27389Node: AVR Options395506 27390Node: MCore Options397320 27391Node: IA-64 Options398338 27392Node: D30V Options401315 27393Node: S/390 and zSeries Options402571 27394Node: CRIS Options405911 27395Node: MMIX Options410142 27396Node: PDP-11 Options412623 27397Node: Xstormy16 Options414461 27398Node: FRV Options414750 27399Node: Xtensa Options418711 27400Node: Code Gen Options422547 27401Node: Environment Variables438183 27402Node: Precompiled Headers445832 27403Node: Running Protoize451064 27404Node: C Implementation457401 27405Node: Translation implementation458336 27406Node: Environment implementation458779 27407Node: Identifiers implementation459077 27408Node: Characters implementation459698 27409Node: Integers implementation461563 27410Node: Floating point implementation462526 27411Node: Arrays and pointers implementation464383 27412Ref: Arrays and pointers implementation-Footnote-1465692 27413Node: Hints implementation465816 27414Node: Structures unions enumerations and bit-fields implementation467263 27415Node: Qualifiers implementation468080 27416Node: Preprocessing directives implementation468401 27417Node: Library functions implementation470210 27418Node: Architecture implementation470542 27419Node: Locale-specific behavior implementation471117 27420Node: C Extensions471422 27421Node: Statement Exprs475524 27422Node: Local Labels479001 27423Node: Labels as Values481979 27424Ref: Labels as Values-Footnote-1484033 27425Node: Nested Functions484216 27426Node: Constructing Calls488082 27427Node: Typeof490418 27428Node: Lvalues493579 27429Node: Conditionals496079 27430Node: Long Long496971 27431Node: Complex498472 27432Node: Hex Floats501040 27433Node: Zero Length502075 27434Node: Empty Structures505352 27435Node: Variable Length505768 27436Node: Variadic Macros508535 27437Node: Escaped Newlines510917 27438Node: Subscripting511756 27439Node: Pointer Arith512479 27440Node: Initializers513047 27441Node: Compound Literals513543 27442Node: Designated Inits515705 27443Node: Case Ranges519360 27444Node: Cast to Union520043 27445Node: Mixed Declarations521139 27446Node: Function Attributes521645 27447Node: Attribute Syntax552738 27448Node: Function Prototypes563346 27449Node: C++ Comments565127 27450Node: Dollar Signs565646 27451Node: Character Escapes566111 27452Node: Alignment566405 27453Node: Variable Attributes567722 27454Node: Type Attributes580704 27455Node: Inline593419 27456Node: Extended Asm598123 27457Node: Constraints617160 27458Node: Simple Constraints618010 27459Node: Multi-Alternative624529 27460Node: Modifiers626246 27461Node: Machine Constraints628788 27462Node: Asm Labels650995 27463Node: Explicit Reg Vars652671 27464Node: Global Reg Vars654132 27465Node: Local Reg Vars658682 27466Node: Alternate Keywords660483 27467Node: Incomplete Enums661911 27468Node: Function Names662668 27469Node: Return Address664858 27470Node: Vector Extensions667653 27471Node: Other Builtins671255 27472Node: Target Builtins691341 27473Node: Alpha Built-in Functions691905 27474Node: ARM Built-in Functions694897 27475Node: X86 Built-in Functions701599 27476Node: PowerPC AltiVec Built-in Functions711998 27477Node: Pragmas813172 27478Node: ARM Pragmas813677 27479Node: RS/6000 and PowerPC Pragmas814295 27480Node: Darwin Pragmas815036 27481Node: Solaris Pragmas816103 27482Node: Tru64 Pragmas816677 27483Node: Unnamed Fields817429 27484Node: Thread-Local818522 27485Node: C99 Thread-Local Edits820606 27486Node: C++98 Thread-Local Edits822618 27487Node: C++ Extensions826063 27488Node: Min and Max827755 27489Node: Volatiles829138 27490Node: Restricted Pointers832504 27491Node: Vague Linkage834098 27492Node: C++ Interface837754 27493Ref: C++ Interface-Footnote-1842046 27494Node: Template Instantiation842183 27495Node: Bound member functions849195 27496Node: C++ Attributes850738 27497Node: Strong Using852378 27498Node: Offsetof853620 27499Node: Java Exceptions854236 27500Node: Deprecated Features855630 27501Node: Backwards Compatibility857633 27502Node: Objective-C858988 27503Node: Executing code before main859569 27504Node: What you can and what you cannot do in +load862175 27505Node: Type encoding864342 27506Node: Garbage Collection867585 27507Node: Constant string objects870209 27508Node: compatibility_alias872717 27509Node: Compatibility873595 27510Node: Gcov880162 27511Node: Gcov Intro880632 27512Node: Invoking Gcov883348 27513Node: Gcov and Optimization894693 27514Node: Gcov Data Files897346 27515Node: Trouble898460 27516Node: Actual Bugs900055 27517Node: Cross-Compiler Problems900973 27518Node: Interoperation902490 27519Node: External Bugs912575 27520Node: Incompatibilities914018 27521Node: Fixed Headers922325 27522Node: Standard Libraries924639 27523Node: Disappointments926011 27524Node: C++ Misunderstandings930492 27525Node: Static Definitions931311 27526Node: Name lookup932364 27527Ref: Name lookup-Footnote-1937141 27528Node: Temporaries937328 27529Node: Copy Assignment939304 27530Node: Protoize Caveats941111 27531Node: Non-bugs945075 27532Node: Warnings and Errors955258 27533Node: Bugs957022 27534Node: Bug Criteria957586 27535Node: Bug Reporting959796 27536Node: Service960188 27537Node: Contributing961007 27538Node: Funding961747 27539Node: GNU Project964236 27540Node: Copying964882 27541Node: GNU Free Documentation License984032 27542Node: Contributors1006428 27543Node: Option Index1033954 27544Node: Keyword Index1149646 27545 27546End Tag Table 27547