1 This is doc/gcc.info, produced by makeinfo version 4.8 from 2 /home/dmitriyz/src-lcl/android2/toolchain/android-toolchain/gcc-4.2.1/gcc/doc/gcc.texi. 3 4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 5 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 6 7 Permission is granted to copy, distribute and/or modify this document 8 under the terms of the GNU Free Documentation License, Version 1.2 or 9 any later version published by the Free Software Foundation; with the 10 Invariant Sections being "GNU General Public License" and "Funding Free 11 Software", the Front-Cover texts being (a) (see below), and with the 12 Back-Cover Texts being (b) (see below). A copy of the license is 13 included 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 22 software. Copies published by the Free Software Foundation raise 23 funds for GNU development. 24 25 INFO-DIR-SECTION Software development 26 START-INFO-DIR-ENTRY 27 * gcc: (gcc). The GNU Compiler Collection. 28 END-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, 32 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 33 34 Permission is granted to copy, distribute and/or modify this document 35 under the terms of the GNU Free Documentation License, Version 1.2 or 36 any later version published by the Free Software Foundation; with the 37 Invariant Sections being "GNU General Public License" and "Funding Free 38 Software", the Front-Cover texts being (a) (see below), and with the 39 Back-Cover Texts being (b) (see below). A copy of the license is 40 included 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 49 software. Copies published by the Free Software Foundation raise 50 funds for GNU development. 51 52 53 54 File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) 55 56 Introduction 57 ************ 58 59 This manual documents how to use the GNU compilers, as well as their 60 features and incompatibilities, and how to report bugs. It corresponds 61 to GCC version 4.2.1. The internals of the GNU compilers, including 62 how to port them to new targets and some information about how to write 63 front 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 94 File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top 95 96 1 Programming Languages Supported by GCC 97 **************************************** 98 99 GCC stands for "GNU Compiler Collection". GCC is an integrated 100 distribution of compilers for several major programming languages. 101 These languages currently include C, C++, Objective-C, Objective-C++, 102 Java, Fortran, and Ada. 103 104 The abbreviation "GCC" has multiple meanings in common use. The 105 current official meaning is "GNU Compiler Collection", which refers 106 generically to the complete suite of tools. The name historically stood 107 for "GNU C Compiler", and this usage is still common when the emphasis 108 is on compiling C programs. Finally, the name is also used when 109 speaking of the "language-independent" component of GCC: code shared 110 among the compilers for all supported languages. 111 112 The language-independent component of GCC includes the majority of the 113 optimizers, as well as the "back ends" that generate machine code for 114 various processors. 115 116 The part of a compiler that is specific to a particular language is 117 called the "front end". In addition to the front ends that are 118 integrated components of GCC, there are several other front ends that 119 are maintained separately. These support languages such as Pascal, 120 Mercury, and COBOL. To use these, they must be built together with GCC 121 proper. 122 123 Most of the compilers for languages other than C have their own names. 124 The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we 125 talk about compiling one of those languages, we might refer to that 126 compiler by its own name, or as GCC. Either is correct. 127 128 Historically, compilers for many languages, including C++ and Fortran, 129 have been implemented as "preprocessors" which emit another high level 130 language such as C. None of the compilers included in GCC are 131 implemented this way; they all generate machine code directly. This 132 sort of preprocessor should not be confused with the "C preprocessor", 133 which is an integral feature of the C, C++, Objective-C and 134 Objective-C++ languages. 135 136 137 File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 138 139 2 Language Standards Supported by GCC 140 ************************************* 141 142 For each language compiled by GCC for which there is a standard, GCC 143 attempts to follow one or more versions of that standard, possibly with 144 some exceptions, and possibly with some extensions. 145 146 GCC supports three versions of the C standard, although support for 147 the most recent version is not yet complete. 148 149 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 150 published in 1990. This standard was ratified as an ISO standard 151 (ISO/IEC 9899:1990) later in 1990. There were no technical differences 152 between these publications, although the sections of the ANSI standard 153 were renumbered and became clauses in the ISO standard. This standard, 154 in both its forms, is commonly known as "C89", or occasionally as 155 "C90", from the dates of ratification. The ANSI standard, but not the 156 ISO standard, also came with a Rationale document. To select this 157 standard in GCC, use one of the options `-ansi', `-std=c89' or 158 `-std=iso9899:1990'; to obtain all the diagnostics required by the 159 standard, you should also specify `-pedantic' (or `-pedantic-errors' if 160 you want them to be errors rather than warnings). *Note Options 161 Controlling C Dialect: C Dialect Options. 162 163 Errors in the 1990 ISO C standard were corrected in two Technical 164 Corrigenda published in 1994 and 1996. GCC does not support the 165 uncorrected version. 166 167 An amendment to the 1990 standard was published in 1995. This 168 amendment added digraphs and `__STDC_VERSION__' to the language, but 169 otherwise concerned the library. This amendment is commonly known as 170 "AMD1"; the amended standard is sometimes known as "C94" or "C95". To 171 select this standard in GCC, use the option `-std=iso9899:199409' 172 (with, as for other standard versions, `-pedantic' to receive all 173 required diagnostics). 174 175 A new edition of the ISO C standard was published in 1999 as ISO/IEC 176 9899:1999, and is commonly known as "C99". GCC has incomplete support 177 for this standard version; see 178 `http://gcc.gnu.org/gcc-4.2/c99status.html' for details. To select this 179 standard, use `-std=c99' or `-std=iso9899:1999'. (While in 180 development, drafts of this standard version were referred to as "C9X".) 181 182 Errors in the 1999 ISO C standard were corrected in two Technical 183 Corrigenda published in 2001 and 2004. GCC does not support the 184 uncorrected version. 185 186 By default, GCC provides some extensions to the C language that on 187 rare occasions conflict with the C standard. *Note Extensions to the C 188 Language Family: C Extensions. Use of the `-std' options listed above 189 will disable these extensions where they conflict with the C standard 190 version selected. You may also select an extended version of the C 191 language explicitly with `-std=gnu89' (for C89 with GNU extensions) or 192 `-std=gnu99' (for C99 with GNU extensions). The default, if no C 193 language dialect options are given, is `-std=gnu89'; this will change to 194 `-std=gnu99' in some future release when the C99 support is complete. 195 Some features that are part of the C99 standard are accepted as 196 extensions in C89 mode. 197 198 The ISO C standard defines (in clause 4) two classes of conforming 199 implementation. A "conforming hosted implementation" supports the 200 whole standard including all the library facilities; a "conforming 201 freestanding implementation" is only required to provide certain 202 library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>', 203 and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99, 204 also those in `<stdbool.h>' and `<stdint.h>'. In addition, complex 205 types, added in C99, are not required for freestanding implementations. 206 The standard also defines two environments for programs, a 207 "freestanding environment", required of all implementations and which 208 may not have library facilities beyond those required of freestanding 209 implementations, where the handling of program startup and termination 210 are implementation-defined, and a "hosted environment", which is not 211 required, in which all the library facilities are provided and startup 212 is through a function `int main (void)' or `int main (int, char *[])'. 213 An OS kernel would be a freestanding environment; a program using the 214 facilities of an operating system would normally be in a hosted 215 implementation. 216 217 GCC aims towards being usable as a conforming freestanding 218 implementation, or as the compiler for a conforming hosted 219 implementation. By default, it will act as the compiler for a hosted 220 implementation, defining `__STDC_HOSTED__' as `1' and presuming that 221 when the names of ISO C functions are used, they have the semantics 222 defined in the standard. To make it act as a conforming freestanding 223 implementation for a freestanding environment, use the option 224 `-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not 225 make assumptions about the meanings of function names from the standard 226 library, with exceptions noted below. To build an OS kernel, you may 227 well still need to make your own arrangements for linking and startup. 228 *Note Options Controlling C Dialect: C Dialect Options. 229 230 GCC does not provide the library facilities required only of hosted 231 implementations, nor yet all the facilities required by C99 of 232 freestanding implementations; to use the facilities of a hosted 233 environment, you will need to find them elsewhere (for example, in the 234 GNU C library). *Note Standard Libraries: Standard Libraries. 235 236 Most of the compiler support routines used by GCC are present in 237 `libgcc', but there are a few exceptions. GCC requires the 238 freestanding environment provide `memcpy', `memmove', `memset' and 239 `memcmp'. Finally, if `__builtin_trap' is used, and the target does 240 not implement the `trap' pattern, then GCC will emit a call to `abort'. 241 242 For references to Technical Corrigenda, Rationale documents and 243 information concerning the history of C that is available online, see 244 `http://gcc.gnu.org/readings.html' 245 246 There is no formal written standard for Objective-C or Objective-C++. 247 The most authoritative manual is "Object-Oriented Programming and the 248 Objective-C Language", available at a number of web sites: 249 250 * 251 `http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/' 252 is a recent (and periodically updated) version; 253 254 * `http://www.toodarkpark.org/computers/objc/' is an older example; 255 256 * `http://www.gnustep.org' and `http://gcc.gnu.org/readings.html' 257 have additional useful information. 258 259 There is no standard for treelang, which is a sample language front end 260 for GCC. Its only purpose is as a sample for people wishing to write a 261 new language for GCC. The language is documented in 262 `gcc/treelang/treelang.texi' which can be turned into info or HTML 263 format. 264 265 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 266 conformance and compatibility of the Ada compiler. 267 268 *Note Standards: (gfortran)Standards, for details of standards 269 supported by GNU Fortran. 270 271 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 272 details of compatibility between `gcj' and the Java Platform. 273 274 275 File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 276 277 3 GCC Command Options 278 ********************* 279 280 When you invoke GCC, it normally does preprocessing, compilation, 281 assembly and linking. The "overall options" allow you to stop this 282 process at an intermediate stage. For example, the `-c' option says 283 not to run the linker. Then the output consists of object files output 284 by the assembler. 285 286 Other options are passed on to one stage of processing. Some options 287 control the preprocessor and others the compiler itself. Yet other 288 options control the assembler and linker; most of these are not 289 documented 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 292 for C programs; when an option is only useful with another language 293 (usually C++), the explanation says so explicitly. If the description 294 for a particular option does not mention a source language, you can use 295 that option with all supported languages. 296 297 *Note Compiling C++ Programs: Invoking G++, for a summary of special 298 options for compiling C++ programs. 299 300 The `gcc' program accepts options and file names as operands. Many 301 options have multi-letter names; therefore multiple single-letter 302 options 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 305 you use doesn't matter. Order does matter when you use several options 306 of the same kind; for example, if you specify `-L' more than once, the 307 directories are searched in the order specified. 308 309 Many options have long names starting with `-f' or with `-W'--for 310 example, `-fmove-loop-invariants', `-Wformat' and so on. Most of these 311 have both positive and negative forms; the negative form of `-ffoo' 312 would be `-fno-foo'. This manual documents only one of these two 313 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 and Objective-C++ Dialect Options:: Variations on Objective-C 327 and Objective-C++. 328 * Language Independent Options:: Controlling how diagnostics should be 329 formatted. 330 * Warning Options:: How picky should the compiler be? 331 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 332 * Optimize Options:: How much optimization? 333 * Preprocessor Options:: Controlling header files and macro definitions. 334 Also, getting dependency information for Make. 335 * Assembler Options:: Passing options to the assembler. 336 * Link Options:: Specifying libraries and so on. 337 * Directory Options:: Where to find header files and libraries. 338 Where to find the compiler executable files. 339 * Spec Files:: How to pass switches to sub-processes. 340 * Target Options:: Running a cross-compiler, or an old version of GCC. 341 * Submodel Options:: Specifying minor hardware or convention variations, 342 such as 68010 vs 68020. 343 * Code Gen Options:: Specifying conventions for function calls, data layout 344 and register usage. 345 * Environment Variables:: Env vars that affect GCC. 346 * Precompiled Headers:: Compiling a header once, and using it many times. 347 * Running Protoize:: Automatically adding or removing function prototypes. 348 349 350 File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 351 352 3.1 Option Summary 353 ================== 354 355 Here is a summary of all the options, grouped by type. Explanations are 356 in the following sections. 357 358 _Overall Options_ 359 *Note Options Controlling the Kind of Output: Overall Options. 360 -c -S -E -o FILE -combine -pipe -pass-exit-codes 361 -x LANGUAGE -v -### --help --target-help --version @FILE 362 363 _C Language Options_ 364 *Note Options Controlling C Dialect: C Dialect Options. 365 -ansi -std=STANDARD -fgnu89-inline 366 -aux-info FILENAME 367 -fno-asm -fno-builtin -fno-builtin-FUNCTION 368 -fhosted -ffreestanding -fopenmp -fms-extensions 369 -trigraphs -no-integrated-cpp -traditional -traditional-cpp 370 -fallow-single-precision -fcond-mismatch 371 -fsigned-bitfields -fsigned-char 372 -funsigned-bitfields -funsigned-char 373 374 _C++ Language Options_ 375 *Note Options Controlling C++ Dialect: C++ Dialect Options. 376 -fabi-version=N -fno-access-control -fcheck-new 377 -fconserve-space -ffriend-injection 378 -fno-elide-constructors 379 -fno-enforce-eh-specs 380 -ffor-scope -fno-for-scope -fno-gnu-keywords 381 -fno-implicit-templates 382 -fno-implicit-inline-templates 383 -fno-implement-inlines -fms-extensions 384 -fno-nonansi-builtins -fno-operator-names 385 -fno-optional-diags -fpermissive 386 -frepo -fno-rtti -fstats -ftemplate-depth-N 387 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ 388 -fno-default-inline -fvisibility-inlines-hidden 389 -Wabi -Wctor-dtor-privacy 390 -Wnon-virtual-dtor -Wreorder 391 -Weffc++ -Wno-deprecated -Wstrict-null-sentinel 392 -Wno-non-template-friend -Wold-style-cast 393 -Woverloaded-virtual -Wno-pmf-conversions 394 -Wsign-promo 395 396 _Objective-C and Objective-C++ Language Options_ 397 *Note Options Controlling Objective-C and Objective-C++ Dialects: 398 Objective-C and Objective-C++ Dialect Options. 399 -fconstant-string-class=CLASS-NAME 400 -fgnu-runtime -fnext-runtime 401 -fno-nil-receivers 402 -fobjc-call-cxx-cdtors 403 -fobjc-direct-dispatch 404 -fobjc-exceptions 405 -fobjc-gc 406 -freplace-objc-classes 407 -fzero-link 408 -gen-decls 409 -Wassign-intercept 410 -Wno-protocol -Wselector 411 -Wstrict-selector-match 412 -Wundeclared-selector 413 414 _Language Independent Options_ 415 *Note Options to Control Diagnostic Messages Formatting: Language 416 Independent Options. 417 -fmessage-length=N 418 -fdiagnostics-show-location=[once|every-line] 419 -fdiagnostics-show-option 420 421 _Warning Options_ 422 *Note Options to Request or Suppress Warnings: Warning Options. 423 -fsyntax-only -pedantic -pedantic-errors 424 -w -Wextra -Wall -Waddress -Waggregate-return -Wno-attributes 425 -Wc++-compat -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment 426 -Wconversion -Wno-deprecated-declarations 427 -Wdisabled-optimization -Wno-div-by-zero -Wno-endif-labels 428 -Werror -Werror=* -Werror-implicit-function-declaration 429 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 430 -Wno-format-extra-args -Wformat-nonliteral 431 -Wformat-security -Wformat-y2k 432 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 433 -Wimport -Wno-import -Winit-self -Winline 434 -Wno-int-to-pointer-cast 435 -Wno-invalid-offsetof -Winvalid-pch 436 -Wlarger-than-LEN -Wframe-larger-than-LEN 437 -Wunsafe-loop-optimizations -Wlong-long 438 -Wmain -Wmissing-braces -Wmissing-field-initializers 439 -Wmissing-format-attribute -Wmissing-include-dirs 440 -Wmissing-noreturn 441 -Wno-multichar -Wnonnull -Wno-overflow 442 -Woverlength-strings -Wpacked -Wpadded 443 -Wparentheses -Wpointer-arith -Wno-pointer-to-int-cast 444 -Wredundant-decls 445 -Wreturn-type -Wsequence-point -Wshadow 446 -Wsign-compare -Wstack-protector 447 -Wstrict-aliasing -Wstrict-aliasing=n 448 -Wstrict-overflow -Wstrict-overflow=N 449 -Wswitch -Wswitch-default -Wswitch-enum 450 -Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized 451 -Wunknown-pragmas -Wno-pragmas -Wunreachable-code 452 -Wunused -Wunused-function -Wunused-label -Wunused-parameter 453 -Wunused-value -Wunused-variable 454 -Wvariadic-macros -Wvla 455 -Wvolatile-register-var -Wwrite-strings 456 457 _C-only Warning Options_ 458 -Wbad-function-cast -Wmissing-declarations 459 -Wmissing-prototypes -Wnested-externs -Wold-style-definition 460 -Wstrict-prototypes -Wtraditional 461 -Wdeclaration-after-statement -Wpointer-sign 462 463 _Debugging Options_ 464 *Note Options for Debugging Your Program or GCC: Debugging Options. 465 -dLETTERS -dumpspecs -dumpmachine -dumpversion 466 -fdump-noaddr -fdump-unnumbered -fdump-translation-unit[-N] 467 -fdump-class-hierarchy[-N] 468 -fdump-ipa-all -fdump-ipa-cgraph 469 -fdump-tree-all 470 -fdump-tree-original[-N] 471 -fdump-tree-optimized[-N] 472 -fdump-tree-inlined[-N] 473 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias 474 -fdump-tree-ch 475 -fdump-tree-ssa[-N] -fdump-tree-pre[-N] 476 -fdump-tree-ccp[-N] -fdump-tree-dce[-N] 477 -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N] 478 -fdump-tree-dom[-N] 479 -fdump-tree-dse[-N] 480 -fdump-tree-phiopt[-N] 481 -fdump-tree-forwprop[-N] 482 -fdump-tree-copyrename[-N] 483 -fdump-tree-nrv -fdump-tree-vect 484 -fdump-tree-sink 485 -fdump-tree-sra[-N] 486 -fdump-tree-salias 487 -fdump-tree-fre[-N] 488 -fdump-tree-vrp[-N] 489 -ftree-vectorizer-verbose=N 490 -fdump-tree-storeccp[-N] 491 -feliminate-dwarf2-dups -feliminate-unused-debug-types 492 -feliminate-unused-debug-symbols -femit-class-debug-always 493 -fmem-report -fprofile-arcs 494 -frandom-seed=STRING -fsched-verbose=N 495 -ftest-coverage -ftime-report -fvar-tracking 496 -g -gLEVEL -gcoff -gdwarf-2 497 -ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ 498 -femit-struct-debug-baseonly -femit-struct-debug-reduced 499 -femit-struct-debug-detailed[=SPEC-LIST] 500 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 501 -print-multi-directory -print-multi-lib 502 -print-prog-name=PROGRAM -print-search-dirs -Q 503 -save-temps -time 504 505 _Optimization Options_ 506 *Note Options that Control Optimization: Optimize Options. 507 -falign-functions=N -falign-jumps=N 508 -falign-labels=N -falign-loops=N 509 -fbounds-check -fmudflap -fmudflapth -fmudflapir 510 -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize 511 -fbranch-target-load-optimize2 -fbtr-bb-exclusive 512 -fcaller-saves -fcprop-registers -fcse-follow-jumps 513 -fcse-skip-blocks -fcx-limited-range -fdata-sections 514 -fdelayed-branch -fdelete-null-pointer-checks -fearly-inlining 515 -fexpensive-optimizations -ffast-math -ffloat-store 516 -fforce-addr -ffunction-sections 517 -fgcse -fgcse-lm -fgcse-sm -fgcse-las -fgcse-after-reload 518 -fcrossjumping -fif-conversion -fif-conversion2 519 -finline-functions -finline-functions-called-once 520 -finline-limit=N -fkeep-inline-functions 521 -fkeep-static-consts -fmerge-constants -fmerge-all-constants 522 -fmodulo-sched -fno-branch-count-reg 523 -fno-default-inline -fno-defer-pop -fmove-loop-invariants 524 -fno-function-cse -fno-guess-branch-probability 525 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 526 -funsafe-math-optimizations -funsafe-loop-optimizations -ffinite-math-only 527 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 528 -fomit-frame-pointer -foptimize-register-move 529 -foptimize-sibling-calls -fprefetch-loop-arrays 530 -fprofile-generate -fprofile-use 531 -fregmove -frename-registers 532 -freorder-blocks -freorder-blocks-and-partition -freorder-functions 533 -frerun-cse-after-loop 534 -frounding-math -frtl-abstract-sequences 535 -fschedule-insns -fschedule-insns2 536 -fno-sched-interblock -fno-sched-spec -fsched-spec-load 537 -fsched-spec-load-dangerous 538 -fsched-stalled-insns=N -fsched-stalled-insns-dep=N 539 -fsched2-use-superblocks 540 -fsched2-use-traces -fsee -freschedule-modulo-scheduled-loops 541 -fsection-anchors -fsignaling-nans -fsingle-precision-constant 542 -fstack-protector -fstack-protector-all 543 -fstrict-aliasing -fstrict-overflow -ftracer -fthread-jumps 544 -funroll-all-loops -funroll-loops -fpeel-loops 545 -fsplit-ivs-in-unroller -funswitch-loops 546 -fvariable-expansion-in-unroller 547 -ftree-pre -ftree-ccp -ftree-dce -ftree-loop-optimize 548 -ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts 549 -ftree-dominator-opts -ftree-dse -ftree-copyrename -ftree-sink 550 -ftree-ch -ftree-sra -ftree-ter -ftree-lrs -ftree-fre -ftree-vectorize 551 -ftree-vect-loop-version -ftree-salias -fipa-pta -fweb 552 -ftree-copy-prop -ftree-store-ccp -ftree-store-copy-prop -fwhole-program 553 --param NAME=VALUE 554 -O -O0 -O1 -O2 -O3 -Os 555 556 _Preprocessor Options_ 557 *Note Options Controlling the Preprocessor: Preprocessor Options. 558 -AQUESTION=ANSWER 559 -A-QUESTION[=ANSWER] 560 -C -dD -dI -dM -dN 561 -DMACRO[=DEFN] -E -H 562 -idirafter DIR 563 -include FILE -imacros FILE 564 -iprefix FILE -iwithprefix DIR 565 -iwithprefixbefore DIR -isystem DIR 566 -imultilib DIR -isysroot DIR 567 -M -MM -MF -MG -MP -MQ -MT -nostdinc 568 -P -fworking-directory -remap 569 -trigraphs -undef -UMACRO -Wp,OPTION 570 -Xpreprocessor OPTION 571 572 _Assembler Option_ 573 *Note Passing Options to the Assembler: Assembler Options. 574 -Wa,OPTION -Xassembler OPTION 575 576 _Linker Options_ 577 *Note Options for Linking: Link Options. 578 OBJECT-FILE-NAME -lLIBRARY 579 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 580 -s -static -static-libgcc -shared -shared-libgcc -symbolic 581 -Wl,OPTION -Xlinker OPTION 582 -u SYMBOL 583 584 _Directory Options_ 585 *Note Options for Directory Search: Directory Options. 586 -BPREFIX -IDIR -iquoteDIR -LDIR 587 -specs=FILE -I- --sysroot=DIR 588 589 _Target Options_ 590 *Note Target Options::. 591 -V VERSION -b MACHINE 592 593 _Machine Dependent Options_ 594 *Note Hardware Models and Configurations: Submodel Options. 595 596 _ARC Options_ 597 -EB -EL 598 -mmangle-cpu -mcpu=CPU -mtext=TEXT-SECTION 599 -mdata=DATA-SECTION -mrodata=READONLY-DATA-SECTION 600 601 _ARM Options_ 602 -mapcs-frame -mno-apcs-frame 603 -mabi=NAME 604 -mapcs-stack-check -mno-apcs-stack-check 605 -mapcs-float -mno-apcs-float 606 -mapcs-reentrant -mno-apcs-reentrant 607 -msched-prolog -mno-sched-prolog 608 -mlittle-endian -mbig-endian -mwords-little-endian 609 -mfloat-abi=NAME -msoft-float -mhard-float -mfpe 610 -mthumb-interwork -mno-thumb-interwork 611 -mcpu=NAME -march=NAME -mfpu=NAME 612 -mstructure-size-boundary=N 613 -mabort-on-noreturn 614 -mlong-calls -mno-long-calls 615 -msingle-pic-base -mno-single-pic-base 616 -mpic-register=REG 617 -mnop-fun-dllimport 618 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns 619 -mpoke-function-name 620 -mthumb -marm 621 -mtpcs-frame -mtpcs-leaf-frame 622 -mcaller-super-interworking -mcallee-super-interworking 623 -mtp=NAME 624 625 _AVR Options_ 626 -mmcu=MCU -msize -minit-stack=N -mno-interrupts 627 -mcall-prologues -mno-tablejump -mtiny-stack -mint8 628 629 _Blackfin Options_ 630 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 631 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 632 -mlow-64k -mno-low64k -mid-shared-library 633 -mno-id-shared-library -mshared-library-id=N 634 -mlong-calls -mno-long-calls 635 636 _CRIS Options_ 637 -mcpu=CPU -march=CPU -mtune=CPU 638 -mmax-stack-frame=N -melinux-stacksize=N 639 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 640 -mstack-align -mdata-align -mconst-align 641 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 642 -melf -maout -melinux -mlinux -sim -sim2 643 -mmul-bug-workaround -mno-mul-bug-workaround 644 645 _CRX Options_ 646 -mmac -mpush-args 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 -dead_strip 653 -dependency-file -dylib_file -dylinker_install_name 654 -dynamic -dynamiclib -exported_symbols_list 655 -filelist -flat_namespace -force_cpusubtype_ALL 656 -force_flat_namespace -headerpad_max_install_names 657 -image_base -init -install_name -keep_private_externs 658 -multi_module -multiply_defined -multiply_defined_unused 659 -noall_load -no_dead_strip_inits_and_terms 660 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 661 -pagezero_size -prebind -prebind_all_twolevel_modules 662 -private_bundle -read_only_relocs -sectalign 663 -sectobjectsymbols -whyload -seg1addr 664 -sectcreate -sectobjectsymbols -sectorder 665 -segaddr -segs_read_only_addr -segs_read_write_addr 666 -seg_addr_table -seg_addr_table_filename -seglinkedit 667 -segprot -segs_read_only_addr -segs_read_write_addr 668 -single_module -static -sub_library -sub_umbrella 669 -twolevel_namespace -umbrella -undefined 670 -unexported_symbols_list -weak_reference_mismatches 671 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 672 -mkernel -mone-byte-bool 673 674 _DEC Alpha Options_ 675 -mno-fp-regs -msoft-float -malpha-as -mgas 676 -mieee -mieee-with-inexact -mieee-conformant 677 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 678 -mtrap-precision=MODE -mbuild-constants 679 -mcpu=CPU-TYPE -mtune=CPU-TYPE 680 -mbwx -mmax -mfix -mcix 681 -mfloat-vax -mfloat-ieee 682 -mexplicit-relocs -msmall-data -mlarge-data 683 -msmall-text -mlarge-text 684 -mmemory-latency=TIME 685 686 _DEC Alpha/VMS Options_ 687 -mvms-return-codes 688 689 _FRV Options_ 690 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 691 -mhard-float -msoft-float 692 -malloc-cc -mfixed-cc -mdword -mno-dword 693 -mdouble -mno-double 694 -mmedia -mno-media -mmuladd -mno-muladd 695 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 696 -mlinked-fp -mlong-calls -malign-labels 697 -mlibrary-pic -macc-4 -macc-8 698 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 699 -moptimize-membar -mno-optimize-membar 700 -mscc -mno-scc -mcond-exec -mno-cond-exec 701 -mvliw-branch -mno-vliw-branch 702 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 703 -mno-nested-cond-exec -mtomcat-stats 704 -mTLS -mtls 705 -mcpu=CPU 706 707 _GNU/Linux Options_ 708 -muclibc 709 710 _H8/300 Options_ 711 -mrelax -mh -ms -mn -mint32 -malign-300 712 713 _HPPA Options_ 714 -march=ARCHITECTURE-TYPE 715 -mbig-switch -mdisable-fpregs -mdisable-indexing 716 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 717 -mfixed-range=REGISTER-RANGE 718 -mjump-in-delay -mlinker-opt -mlong-calls 719 -mlong-load-store -mno-big-switch -mno-disable-fpregs 720 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 721 -mno-jump-in-delay -mno-long-load-store 722 -mno-portable-runtime -mno-soft-float 723 -mno-space-regs -msoft-float -mpa-risc-1-0 724 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 725 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 726 -munix=UNIX-STD -nolibdld -static -threads 727 728 _i386 and x86-64 Options_ 729 -mtune=CPU-TYPE -march=CPU-TYPE 730 -mfpmath=UNIT 731 -masm=DIALECT -mno-fancy-math-387 732 -mno-fp-ret-in-387 -msoft-float -msvr3-shlib 733 -mno-wide-multiply -mrtd -malign-double 734 -mpreferred-stack-boundary=NUM 735 -mmmx -msse -msse2 -msse3 -m3dnow 736 -mthreads -mno-align-stringops -minline-all-stringops 737 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 738 -m96bit-long-double -mregparm=NUM -msseregparm 739 -mstackrealign 740 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 741 -mcmodel=CODE-MODEL 742 -m32 -m64 -mlarge-data-threshold=NUM 743 744 _IA-64 Options_ 745 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 746 -mvolatile-asm-stop -mregister-names -mno-sdata 747 -mconstant-gp -mauto-pic -minline-float-divide-min-latency 748 -minline-float-divide-max-throughput 749 -minline-int-divide-min-latency 750 -minline-int-divide-max-throughput 751 -minline-sqrt-min-latency -minline-sqrt-max-throughput 752 -mno-dwarf2-asm -mearly-stop-bits 753 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 754 -mtune=CPU-TYPE -mt -pthread -milp32 -mlp64 755 -mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec 756 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 757 -msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose 758 -mno-sched-prefer-non-data-spec-insns 759 -mno-sched-prefer-non-control-spec-insns 760 -mno-sched-count-spec-in-critical-path 761 762 _M32R/D Options_ 763 -m32r2 -m32rx -m32r 764 -mdebug 765 -malign-loops -mno-align-loops 766 -missue-rate=NUMBER 767 -mbranch-cost=NUMBER 768 -mmodel=CODE-SIZE-MODEL-TYPE 769 -msdata=SDATA-TYPE 770 -mno-flush-func -mflush-func=NAME 771 -mno-flush-trap -mflush-trap=NUMBER 772 -G NUM 773 774 _M32C Options_ 775 -mcpu=CPU -msim -memregs=NUMBER 776 777 _M680x0 Options_ 778 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 779 -m68060 -mcpu32 -m5200 -mcfv4e -m68881 -mbitfield 780 -mc68000 -mc68020 781 -mnobitfield -mrtd -mshort -msoft-float -mpcrel 782 -malign-int -mstrict-align -msep-data -mno-sep-data 783 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 784 785 _M68hc1x Options_ 786 -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 787 -mauto-incdec -minmax -mlong-calls -mshort 788 -msoft-reg-count=COUNT 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 _MIPS Options_ 798 -EL -EB -march=ARCH -mtune=ARCH 799 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 800 -mips16 -mno-mips16 -mabi=ABI -mabicalls -mno-abicalls 801 -mshared -mno-shared -mxgot -mno-xgot -mgp32 -mgp64 802 -mfp32 -mfp64 -mhard-float -msoft-float 803 -msingle-float -mdouble-float -mdsp -mpaired-single -mips3d 804 -mlong64 -mlong32 -msym32 -mno-sym32 805 -GNUM -membedded-data -mno-embedded-data 806 -muninit-const-in-rodata -mno-uninit-const-in-rodata 807 -msplit-addresses -mno-split-addresses 808 -mexplicit-relocs -mno-explicit-relocs 809 -mcheck-zero-division -mno-check-zero-division 810 -mdivide-traps -mdivide-breaks 811 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 812 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp 813 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 814 -mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 815 -mfix-sb1 -mno-fix-sb1 816 -mflush-func=FUNC -mno-flush-func 817 -mbranch-likely -mno-branch-likely 818 -mfp-exceptions -mno-fp-exceptions 819 -mvr4130-align -mno-vr4130-align 820 821 _MMIX Options_ 822 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 823 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 824 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 825 -mno-base-addresses -msingle-exit -mno-single-exit 826 827 _MN10300 Options_ 828 -mmult-bug -mno-mult-bug 829 -mam33 -mno-am33 830 -mam33-2 -mno-am33-2 831 -mreturn-pointer-on-d0 832 -mno-crt0 -mrelax 833 834 _MT Options_ 835 -mno-crt0 -mbacc -msim 836 -march=CPU-TYPE 837 838 _PDP-11 Options_ 839 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 840 -mbcopy -mbcopy-builtin -mint32 -mno-int16 841 -mint16 -mno-int32 -mfloat32 -mno-float64 842 -mfloat64 -mno-float32 -mabshi -mno-abshi 843 -mbranch-expensive -mbranch-cheap 844 -msplit -mno-split -munix-asm -mdec-asm 845 846 _PowerPC Options_ See RS/6000 and PowerPC Options. 847 848 _RS/6000 and PowerPC Options_ 849 -mcpu=CPU-TYPE 850 -mtune=CPU-TYPE 851 -mpower -mno-power -mpower2 -mno-power2 852 -mpowerpc -mpowerpc64 -mno-powerpc 853 -maltivec -mno-altivec 854 -mpowerpc-gpopt -mno-powerpc-gpopt 855 -mpowerpc-gfxopt -mno-powerpc-gfxopt 856 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mfprnd -mno-fprnd 857 -mnew-mnemonics -mold-mnemonics 858 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 859 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 860 -malign-power -malign-natural 861 -msoft-float -mhard-float -mmultiple -mno-multiple 862 -mstring -mno-string -mupdate -mno-update 863 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 864 -mstrict-align -mno-strict-align -mrelocatable 865 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 866 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 867 -mdynamic-no-pic -maltivec -mswdiv 868 -mprioritize-restricted-insns=PRIORITY 869 -msched-costly-dep=DEPENDENCE_TYPE 870 -minsert-sched-nops=SCHEME 871 -mcall-sysv -mcall-netbsd 872 -maix-struct-return -msvr4-struct-return 873 -mabi=ABI-TYPE -msecure-plt -mbss-plt 874 -misel -mno-isel 875 -misel=yes -misel=no 876 -mspe -mno-spe 877 -mspe=yes -mspe=no 878 -mvrsave -mno-vrsave 879 -mmulhw -mno-mulhw 880 -mdlmzb -mno-dlmzb 881 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 882 -mprototype -mno-prototype 883 -msim -mmvme -mads -myellowknife -memb -msdata 884 -msdata=OPT -mvxworks -mwindiss -G NUM -pthread 885 886 _S/390 and zSeries Options_ 887 -mtune=CPU-TYPE -march=CPU-TYPE 888 -mhard-float -msoft-float -mlong-double-64 -mlong-double-128 889 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 890 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 891 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 892 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 893 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 894 895 _Score Options_ 896 -meb -mel 897 -mnhwloop 898 -muls 899 -mmac 900 -mscore5 -mscore5u -mscore7 -mscore7d 901 902 _SH Options_ 903 -m1 -m2 -m2e -m3 -m3e 904 -m4-nofpu -m4-single-only -m4-single -m4 905 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 906 -m5-64media -m5-64media-nofpu 907 -m5-32media -m5-32media-nofpu 908 -m5-compact -m5-compact-nofpu 909 -mb -ml -mdalign -mrelax 910 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 911 -mieee -misize -mpadstruct -mspace 912 -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 913 -mdivsi3_libfunc=NAME 914 -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 915 -minvalid-symbols 916 917 _SPARC Options_ 918 -mcpu=CPU-TYPE 919 -mtune=CPU-TYPE 920 -mcmodel=CODE-MODEL 921 -m32 -m64 -mapp-regs -mno-app-regs 922 -mfaster-structs -mno-faster-structs 923 -mfpu -mno-fpu -mhard-float -msoft-float 924 -mhard-quad-float -msoft-quad-float 925 -mimpure-text -mno-impure-text -mlittle-endian 926 -mstack-bias -mno-stack-bias 927 -munaligned-doubles -mno-unaligned-doubles 928 -mv8plus -mno-v8plus -mvis -mno-vis 929 -threads -pthreads -pthread 930 931 _System V Options_ 932 -Qy -Qn -YP,PATHS -Ym,DIR 933 934 _TMS320C3x/C4x Options_ 935 -mcpu=CPU -mbig -msmall -mregparm -mmemparm 936 -mfast-fix -mmpyi -mbk -mti -mdp-isr-reload 937 -mrpts=COUNT -mrptb -mdb -mloop-unsigned 938 -mparallel-insns -mparallel-mpy -mpreserve-float 939 940 _V850 Options_ 941 -mlong-calls -mno-long-calls -mep -mno-ep 942 -mprolog-function -mno-prolog-function -mspace 943 -mtda=N -msda=N -mzda=N 944 -mapp-regs -mno-app-regs 945 -mdisable-callt -mno-disable-callt 946 -mv850e1 947 -mv850e 948 -mv850 -mbig-switch 949 950 _VAX Options_ 951 -mg -mgnu -munix 952 953 _x86-64 Options_ See i386 and x86-64 Options. 954 955 _Xstormy16 Options_ 956 -msim 957 958 _Xtensa Options_ 959 -mconst16 -mno-const16 960 -mfused-madd -mno-fused-madd 961 -mtext-section-literals -mno-text-section-literals 962 -mtarget-align -mno-target-align 963 -mlongcalls -mno-longcalls 964 965 _zSeries Options_ See S/390 and zSeries Options. 966 967 _Code Generation Options_ 968 *Note Options for Code Generation Conventions: Code Gen Options. 969 -fcall-saved-REG -fcall-used-REG 970 -ffixed-REG -fexceptions 971 -fnon-call-exceptions -funwind-tables 972 -fasynchronous-unwind-tables 973 -finhibit-size-directive -finstrument-functions 974 -finstrument-functions-exclude-function-list=SYM,SYM,... 975 -finstrument-functions-exclude-file-list=FILE,FILE,... 976 -fno-common -fno-ident 977 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 978 -fno-jump-tables 979 -freg-struct-return -fshort-enums 980 -fshort-double -fshort-wchar 981 -fverbose-asm -fpack-struct[=N] -fstack-check 982 -fstack-limit-register=REG -fstack-limit-symbol=SYM 983 -fargument-alias -fargument-noalias 984 -fargument-noalias-global -fargument-noalias-anything 985 -fleading-underscore -ftls-model=MODEL 986 -ftrapv -fwrapv -fbounds-check 987 -fvisibility 988 989 990 * Menu: 991 992 * Overall Options:: Controlling the kind of output: 993 an executable, object files, assembler files, 994 or preprocessed source. 995 * C Dialect Options:: Controlling the variant of C language compiled. 996 * C++ Dialect Options:: Variations on C++. 997 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 998 and Objective-C++. 999 * Language Independent Options:: Controlling how diagnostics should be 1000 formatted. 1001 * Warning Options:: How picky should the compiler be? 1002 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 1003 * Optimize Options:: How much optimization? 1004 * Preprocessor Options:: Controlling header files and macro definitions. 1005 Also, getting dependency information for Make. 1006 * Assembler Options:: Passing options to the assembler. 1007 * Link Options:: Specifying libraries and so on. 1008 * Directory Options:: Where to find header files and libraries. 1009 Where to find the compiler executable files. 1010 * Spec Files:: How to pass switches to sub-processes. 1011 * Target Options:: Running a cross-compiler, or an old version of GCC. 1012 1013 1014 File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1015 1016 3.2 Options Controlling the Kind of Output 1017 ========================================== 1018 1019 Compilation can involve up to four stages: preprocessing, compilation 1020 proper, assembly and linking, always in that order. GCC is capable of 1021 preprocessing and compiling several files either into several assembler 1022 input files, or into one assembler input file; then each assembler 1023 input file produces an object file, and linking combines all the object 1024 files (those newly compiled, and those specified as input) into an 1025 executable file. 1026 1027 For any given input file, the file name suffix determines what kind of 1028 compilation is done: 1029 1030 `FILE.c' 1031 C source code which must be preprocessed. 1032 1033 `FILE.i' 1034 C source code which should not be preprocessed. 1035 1036 `FILE.ii' 1037 C++ source code which should not be preprocessed. 1038 1039 `FILE.m' 1040 Objective-C source code. Note that you must link with the 1041 `libobjc' library to make an Objective-C program work. 1042 1043 `FILE.mi' 1044 Objective-C source code which should not be preprocessed. 1045 1046 `FILE.mm' 1047 `FILE.M' 1048 Objective-C++ source code. Note that you must link with the 1049 `libobjc' library to make an Objective-C++ program work. Note 1050 that `.M' refers to a literal capital M. 1051 1052 `FILE.mii' 1053 Objective-C++ source code which should not be preprocessed. 1054 1055 `FILE.h' 1056 C, C++, Objective-C or Objective-C++ header file to be turned into 1057 a precompiled header. 1058 1059 `FILE.cc' 1060 `FILE.cp' 1061 `FILE.cxx' 1062 `FILE.cpp' 1063 `FILE.CPP' 1064 `FILE.c++' 1065 `FILE.C' 1066 C++ source code which must be preprocessed. Note that in `.cxx', 1067 the last two letters must both be literally `x'. Likewise, `.C' 1068 refers to a literal capital C. 1069 1070 `FILE.mm' 1071 `FILE.M' 1072 Objective-C++ source code which must be preprocessed. 1073 1074 `FILE.mii' 1075 Objective-C++ source code which should not be preprocessed. 1076 1077 `FILE.hh' 1078 `FILE.H' 1079 C++ header file to be turned into a precompiled header. 1080 1081 `FILE.f' 1082 `FILE.for' 1083 `FILE.FOR' 1084 Fixed form Fortran source code which should not be preprocessed. 1085 1086 `FILE.F' 1087 `FILE.fpp' 1088 `FILE.FPP' 1089 Fixed form Fortran source code which must be preprocessed (with 1090 the traditional preprocessor). 1091 1092 `FILE.f90' 1093 `FILE.f95' 1094 Free form Fortran source code which should not be preprocessed. 1095 1096 `FILE.F90' 1097 `FILE.F95' 1098 Free form Fortran source code which must be preprocessed (with the 1099 traditional preprocessor). 1100 1101 `FILE.ads' 1102 Ada source code file which contains a library unit declaration (a 1103 declaration of a package, subprogram, or generic, or a generic 1104 instantiation), or a library unit renaming declaration (a package, 1105 generic, or subprogram renaming declaration). Such files are also 1106 called "specs". 1107 1108 `FILE.adb' 1109 Ada source code file containing a library unit body (a subprogram 1110 or package body). Such files are also called "bodies". 1111 1112 `FILE.s' 1113 Assembler code. 1114 1115 `FILE.S' 1116 Assembler code which must be preprocessed. 1117 1118 `OTHER' 1119 An object file to be fed straight into linking. Any file name 1120 with no recognized suffix is treated this way. 1121 1122 You can specify the input language explicitly with the `-x' option: 1123 1124 `-x LANGUAGE' 1125 Specify explicitly the LANGUAGE for the following input files 1126 (rather than letting the compiler choose a default based on the 1127 file name suffix). This option applies to all following input 1128 files until the next `-x' option. Possible values for LANGUAGE 1129 are: 1130 c c-header c-cpp-output 1131 c++ c++-header c++-cpp-output 1132 objective-c objective-c-header objective-c-cpp-output 1133 objective-c++ objective-c++-header objective-c++-cpp-output 1134 assembler assembler-with-cpp 1135 ada 1136 f95 f95-cpp-input 1137 java 1138 treelang 1139 1140 `-x none' 1141 Turn off any specification of a language, so that subsequent files 1142 are handled according to their file name suffixes (as they are if 1143 `-x' has not been used at all). 1144 1145 `-pass-exit-codes' 1146 Normally the `gcc' program will exit with the code of 1 if any 1147 phase of the compiler returns a non-success return code. If you 1148 specify `-pass-exit-codes', the `gcc' program will instead return 1149 with numerically highest error produced by any phase that returned 1150 an error indication. The C, C++, and Fortran frontends return 4, 1151 if an internal compiler error is encountered. 1152 1153 If you only want some of the stages of compilation, you can use `-x' 1154 (or filename suffixes) to tell `gcc' where to start, and one of the 1155 options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1156 some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1157 do nothing at all. 1158 1159 `-c' 1160 Compile or assemble the source files, but do not link. The linking 1161 stage simply is not done. The ultimate output is in the form of an 1162 object file for each source file. 1163 1164 By default, the object file name for a source file is made by 1165 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1166 1167 Unrecognized input files, not requiring compilation or assembly, 1168 are ignored. 1169 1170 `-S' 1171 Stop after the stage of compilation proper; do not assemble. The 1172 output is in the form of an assembler code file for each 1173 non-assembler input file specified. 1174 1175 By default, the assembler file name for a source file is made by 1176 replacing the suffix `.c', `.i', etc., with `.s'. 1177 1178 Input files that don't require compilation are ignored. 1179 1180 `-E' 1181 Stop after the preprocessing stage; do not run the compiler 1182 proper. The output is in the form of preprocessed source code, 1183 which is sent to the standard output. 1184 1185 Input files which don't require preprocessing are ignored. 1186 1187 `-o FILE' 1188 Place output in file FILE. This applies regardless to whatever 1189 sort of output is being produced, whether it be an executable file, 1190 an object file, an assembler file or preprocessed C code. 1191 1192 If `-o' is not specified, the default is to put an executable file 1193 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1194 assembler file in `SOURCE.s', a precompiled header file in 1195 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1196 output. 1197 1198 `-v' 1199 Print (on standard error output) the commands executed to run the 1200 stages of compilation. Also print the version number of the 1201 compiler driver program and of the preprocessor and the compiler 1202 proper. 1203 1204 `-###' 1205 Like `-v' except the commands are not executed and all command 1206 arguments are quoted. This is useful for shell scripts to capture 1207 the driver-generated command lines. 1208 1209 `-pipe' 1210 Use pipes rather than temporary files for communication between the 1211 various stages of compilation. This fails to work on some systems 1212 where the assembler is unable to read from a pipe; but the GNU 1213 assembler has no trouble. 1214 1215 `-combine' 1216 If you are compiling multiple source files, this option tells the 1217 driver to pass all the source files to the compiler at once (for 1218 those languages for which the compiler can handle this). This 1219 will allow intermodule analysis (IMA) to be performed by the 1220 compiler. Currently the only language for which this is supported 1221 is C. If you pass source files for multiple languages to the 1222 driver, using this option, the driver will invoke the compiler(s) 1223 that support IMA once each, passing each compiler all the source 1224 files appropriate for it. For those languages that do not support 1225 IMA this option will be ignored, and the compiler will be invoked 1226 once for each source file in that language. If you use this 1227 option in conjunction with `-save-temps', the compiler will 1228 generate multiple pre-processed files (one for each source file), 1229 but only one (combined) `.o' or `.s' file. 1230 1231 `--help' 1232 Print (on the standard output) a description of the command line 1233 options understood by `gcc'. If the `-v' option is also specified 1234 then `--help' will also be passed on to the various processes 1235 invoked by `gcc', so that they can display the command line options 1236 they accept. If the `-Wextra' option is also specified then 1237 command line options which have no documentation associated with 1238 them will also be displayed. 1239 1240 `--target-help' 1241 Print (on the standard output) a description of target specific 1242 command line options for each tool. 1243 1244 `--version' 1245 Display the version number and copyrights of the invoked GCC. 1246 1247 `@FILE' 1248 Read command-line options from FILE. The options read are 1249 inserted in place of the original @FILE option. If FILE does not 1250 exist, or cannot be read, then the option will be treated 1251 literally, and not removed. 1252 1253 Options in FILE are separated by whitespace. A whitespace 1254 character may be included in an option by surrounding the entire 1255 option in either single or double quotes. Any character 1256 (including a backslash) may be included by prefixing the character 1257 to be included with a backslash. The FILE may itself contain 1258 additional @FILE options; any such options will be processed 1259 recursively. 1260 1261 1262 File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1263 1264 3.3 Compiling C++ Programs 1265 ========================== 1266 1267 C++ source files conventionally use one of the suffixes `.C', `.cc', 1268 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1269 `.hh' or `.H'; and preprocessed C++ files use the suffix `.ii'. GCC 1270 recognizes files with these names and compiles them as C++ programs 1271 even if you call the compiler the same way as for compiling C programs 1272 (usually with the name `gcc'). 1273 1274 However, the use of `gcc' does not add the C++ library. `g++' is a 1275 program that calls GCC and treats `.c', `.h' and `.i' files as C++ 1276 source files instead of C source files unless `-x' is used, and 1277 automatically specifies linking against the C++ library. This program 1278 is also useful when precompiling a C header file with a `.h' extension 1279 for use in C++ compilations. On many systems, `g++' is also installed 1280 with the name `c++'. 1281 1282 When you compile C++ programs, you may specify many of the same 1283 command-line options that you use for compiling programs in any 1284 language; or command-line options meaningful for C and related 1285 languages; or options that are meaningful only for C++ programs. *Note 1286 Options Controlling C Dialect: C Dialect Options, for explanations of 1287 options for languages related to C. *Note Options Controlling C++ 1288 Dialect: C++ Dialect Options, for explanations of options that are 1289 meaningful only for C++ programs. 1290 1291 1292 File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1293 1294 3.4 Options Controlling C Dialect 1295 ================================= 1296 1297 The following options control the dialect of C (or languages derived 1298 from C, such as C++, Objective-C and Objective-C++) that the compiler 1299 accepts: 1300 1301 `-ansi' 1302 In C mode, support all ISO C90 programs. In C++ mode, remove GNU 1303 extensions that conflict with ISO C++. 1304 1305 This turns off certain features of GCC that are incompatible with 1306 ISO C90 (when compiling C code), or of standard C++ (when 1307 compiling C++ code), such as the `asm' and `typeof' keywords, and 1308 predefined macros such as `unix' and `vax' that identify the type 1309 of system you are using. It also enables the undesirable and 1310 rarely used ISO trigraph feature. For the C compiler, it disables 1311 recognition of C++ style `//' comments as well as the `inline' 1312 keyword. 1313 1314 The alternate keywords `__asm__', `__extension__', `__inline__' 1315 and `__typeof__' continue to work despite `-ansi'. You would not 1316 want to use them in an ISO C program, of course, but it is useful 1317 to put them in header files that might be included in compilations 1318 done with `-ansi'. Alternate predefined macros such as `__unix__' 1319 and `__vax__' are also available, with or without `-ansi'. 1320 1321 The `-ansi' option does not cause non-ISO programs to be rejected 1322 gratuitously. For that, `-pedantic' is required in addition to 1323 `-ansi'. *Note Warning Options::. 1324 1325 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1326 is used. Some header files may notice this macro and refrain from 1327 declaring certain functions or defining certain macros that the 1328 ISO standard doesn't call for; this is to avoid interfering with 1329 any programs that might use these names for other things. 1330 1331 Functions which would normally be built in but do not have 1332 semantics defined by ISO C (such as `alloca' and `ffs') are not 1333 built-in functions with `-ansi' is used. *Note Other built-in 1334 functions provided by GCC: Other Builtins, for details of the 1335 functions affected. 1336 1337 `-std=' 1338 Determine the language standard. This option is currently only 1339 supported when compiling C or C++. A value for this option must be 1340 provided; possible values are 1341 1342 `c89' 1343 `iso9899:1990' 1344 ISO C90 (same as `-ansi'). 1345 1346 `iso9899:199409' 1347 ISO C90 as modified in amendment 1. 1348 1349 `c99' 1350 `c9x' 1351 `iso9899:1999' 1352 `iso9899:199x' 1353 ISO C99. Note that this standard is not yet fully supported; 1354 see `http://gcc.gnu.org/gcc-4.2/c99status.html' for more 1355 information. The names `c9x' and `iso9899:199x' are 1356 deprecated. 1357 1358 `gnu89' 1359 Default, ISO C90 plus GNU extensions (including some C99 1360 features). 1361 1362 `gnu99' 1363 `gnu9x' 1364 ISO C99 plus GNU extensions. When ISO C99 is fully 1365 implemented in GCC, this will become the default. The name 1366 `gnu9x' is deprecated. 1367 1368 `c++98' 1369 The 1998 ISO C++ standard plus amendments. 1370 1371 `gnu++98' 1372 The same as `-std=c++98' plus GNU extensions. This is the 1373 default for C++ code. 1374 1375 Even when this option is not specified, you can still use some of 1376 the features of newer standards in so far as they do not conflict 1377 with previous C standards. For example, you may use 1378 `__restrict__' even when `-std=c99' is not specified. 1379 1380 The `-std' options specifying some version of ISO C have the same 1381 effects as `-ansi', except that features that were not in ISO C90 1382 but are in the specified version (for example, `//' comments and 1383 the `inline' keyword in ISO C99) are not disabled. 1384 1385 *Note Language Standards Supported by GCC: Standards, for details 1386 of these standard versions. 1387 1388 `-fgnu89-inline' 1389 The option `-fgnu89-inline' tells GCC to use the traditional GNU 1390 semantics for `inline' functions when in C99 mode. *Note An 1391 Inline Function is As Fast As a Macro: Inline. Using this option 1392 is roughly equivalent to adding the `gnu_inline' function 1393 attribute to all inline functions (*note Function Attributes::). 1394 1395 This option is accepted by GCC versions 4.1.3 and up. In GCC 1396 versions prior to 4.3, C99 inline semantics are not supported, and 1397 thus this option is effectively assumed to be present regardless 1398 of whether or not it is specified; the only effect of specifying 1399 it explicitly is to disable warnings about using inline functions 1400 in C99 mode. Likewise, the option `-fno-gnu89-inline' is not 1401 supported in versions of GCC before 4.3. It will be supported 1402 only in C99 or gnu99 mode, not in C89 or gnu89 mode. 1403 1404 The preprocesor macros `__GNUC_GNU_INLINE__' and 1405 `__GNUC_STDC_INLINE__' may be used to check which semantics are in 1406 effect for `inline' functions. *Note Common Predefined Macros: 1407 (cpp)Common Predefined Macros. 1408 1409 `-aux-info FILENAME' 1410 Output to the given filename prototyped declarations for all 1411 functions declared and/or defined in a translation unit, including 1412 those in header files. This option is silently ignored in any 1413 language other than C. 1414 1415 Besides declarations, the file indicates, in comments, the origin 1416 of each declaration (source file and line), whether the 1417 declaration was implicit, prototyped or unprototyped (`I', `N' for 1418 new or `O' for old, respectively, in the first character after the 1419 line number and the colon), and whether it came from a declaration 1420 or a definition (`C' or `F', respectively, in the following 1421 character). In the case of function definitions, a K&R-style list 1422 of arguments followed by their declarations is also provided, 1423 inside comments, after the declaration. 1424 1425 `-fno-asm' 1426 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 1427 code can use these words as identifiers. You can use the keywords 1428 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 1429 `-fno-asm'. 1430 1431 In C++, this switch only affects the `typeof' keyword, since `asm' 1432 and `inline' are standard keywords. You may want to use the 1433 `-fno-gnu-keywords' flag instead, which has the same effect. In 1434 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 1435 the `asm' and `typeof' keywords, since `inline' is a standard 1436 keyword in ISO C99. 1437 1438 `-fno-builtin' 1439 `-fno-builtin-FUNCTION' 1440 Don't recognize built-in functions that do not begin with 1441 `__builtin_' as prefix. *Note Other built-in functions provided 1442 by GCC: Other Builtins, for details of the functions affected, 1443 including those which are not built-in functions when `-ansi' or 1444 `-std' options for strict ISO C conformance are used because they 1445 do not have an ISO standard meaning. 1446 1447 GCC normally generates special code to handle certain built-in 1448 functions more efficiently; for instance, calls to `alloca' may 1449 become single instructions that adjust the stack directly, and 1450 calls to `memcpy' may become inline copy loops. The resulting 1451 code is often both smaller and faster, but since the function 1452 calls no longer appear as such, you cannot set a breakpoint on 1453 those calls, nor can you change the behavior of the functions by 1454 linking with a different library. In addition, when a function is 1455 recognized as a built-in function, GCC may use information about 1456 that function to warn about problems with calls to that function, 1457 or to generate more efficient code, even if the resulting code 1458 still contains calls to that function. For example, warnings are 1459 given with `-Wformat' for bad calls to `printf', when `printf' is 1460 built in, and `strlen' is known not to modify global memory. 1461 1462 With the `-fno-builtin-FUNCTION' option only the built-in function 1463 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 1464 If a function is named this is not built-in in this version of 1465 GCC, this option is ignored. There is no corresponding 1466 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 1467 functions selectively when using `-fno-builtin' or 1468 `-ffreestanding', you may define macros such as: 1469 1470 #define abs(n) __builtin_abs ((n)) 1471 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 1472 1473 `-fhosted' 1474 Assert that compilation takes place in a hosted environment. This 1475 implies `-fbuiltin'. A hosted environment is one in which the 1476 entire standard library is available, and in which `main' has a 1477 return type of `int'. Examples are nearly everything except a 1478 kernel. This is equivalent to `-fno-freestanding'. 1479 1480 `-ffreestanding' 1481 Assert that compilation takes place in a freestanding environment. 1482 This implies `-fno-builtin'. A freestanding environment is one 1483 in which the standard library may not exist, and program startup 1484 may not necessarily be at `main'. The most obvious example is an 1485 OS kernel. This is equivalent to `-fno-hosted'. 1486 1487 *Note Language Standards Supported by GCC: Standards, for details 1488 of freestanding and hosted environments. 1489 1490 `-fopenmp' 1491 Enable handling of OpenMP directives `#pragma omp' in C/C++ and 1492 `!$omp' in Fortran. When `-fopenmp' is specified, the compiler 1493 generates parallel code according to the OpenMP Application 1494 Program Interface v2.5 `http://www.openmp.org/'. 1495 1496 `-fms-extensions' 1497 Accept some non-standard constructs used in Microsoft header files. 1498 1499 Some cases of unnamed fields in structures and unions are only 1500 accepted with this option. *Note Unnamed struct/union fields 1501 within structs/unions: Unnamed Fields, for details. 1502 1503 `-trigraphs' 1504 Support ISO C trigraphs. The `-ansi' option (and `-std' options 1505 for strict ISO C conformance) implies `-trigraphs'. 1506 1507 `-no-integrated-cpp' 1508 Performs a compilation in two passes: preprocessing and compiling. 1509 This option allows a user supplied "cc1", "cc1plus", or "cc1obj" 1510 via the `-B' option. The user supplied compilation step can then 1511 add in an additional preprocessing step after normal preprocessing 1512 but before compiling. The default is to use the integrated cpp 1513 (internal cpp) 1514 1515 The semantics of this option will change if "cc1", "cc1plus", and 1516 "cc1obj" are merged. 1517 1518 `-traditional' 1519 `-traditional-cpp' 1520 Formerly, these options caused GCC to attempt to emulate a 1521 pre-standard C compiler. They are now only supported with the 1522 `-E' switch. The preprocessor continues to support a pre-standard 1523 mode. See the GNU CPP manual for details. 1524 1525 `-fcond-mismatch' 1526 Allow conditional expressions with mismatched types in the second 1527 and third arguments. The value of such an expression is void. 1528 This option is not supported for C++. 1529 1530 `-funsigned-char' 1531 Let the type `char' be unsigned, like `unsigned char'. 1532 1533 Each kind of machine has a default for what `char' should be. It 1534 is either like `unsigned char' by default or like `signed char' by 1535 default. 1536 1537 Ideally, a portable program should always use `signed char' or 1538 `unsigned char' when it depends on the signedness of an object. 1539 But many programs have been written to use plain `char' and expect 1540 it to be signed, or expect it to be unsigned, depending on the 1541 machines they were written for. This option, and its inverse, let 1542 you make such a program work with the opposite default. 1543 1544 The type `char' is always a distinct type from each of `signed 1545 char' or `unsigned char', even though its behavior is always just 1546 like one of those two. 1547 1548 `-fsigned-char' 1549 Let the type `char' be signed, like `signed char'. 1550 1551 Note that this is equivalent to `-fno-unsigned-char', which is the 1552 negative form of `-funsigned-char'. Likewise, the option 1553 `-fno-signed-char' is equivalent to `-funsigned-char'. 1554 1555 `-fsigned-bitfields' 1556 `-funsigned-bitfields' 1557 `-fno-signed-bitfields' 1558 `-fno-unsigned-bitfields' 1559 These options control whether a bit-field is signed or unsigned, 1560 when the declaration does not use either `signed' or `unsigned'. 1561 By default, such a bit-field is signed, because this is 1562 consistent: the basic integer types such as `int' are signed types. 1563 1564 1565 File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 1566 1567 3.5 Options Controlling C++ Dialect 1568 =================================== 1569 1570 This section describes the command-line options that are only meaningful 1571 for C++ programs; but you can also use most of the GNU compiler options 1572 regardless of what language your program is in. For example, you might 1573 compile a file `firstClass.C' like this: 1574 1575 g++ -g -frepo -O -c firstClass.C 1576 1577 In this example, only `-frepo' is an option meant only for C++ 1578 programs; you can use the other options with any language supported by 1579 GCC. 1580 1581 Here is a list of options that are _only_ for compiling C++ programs: 1582 1583 `-fabi-version=N' 1584 Use version N of the C++ ABI. Version 2 is the version of the C++ 1585 ABI that first appeared in G++ 3.4. Version 1 is the version of 1586 the C++ ABI that first appeared in G++ 3.2. Version 0 will always 1587 be the version that conforms most closely to the C++ ABI 1588 specification. Therefore, the ABI obtained using version 0 will 1589 change as ABI bugs are fixed. 1590 1591 The default is version 2. 1592 1593 `-fno-access-control' 1594 Turn off all access checking. This switch is mainly useful for 1595 working around bugs in the access control code. 1596 1597 `-fcheck-new' 1598 Check that the pointer returned by `operator new' is non-null 1599 before attempting to modify the storage allocated. This check is 1600 normally unnecessary because the C++ standard specifies that 1601 `operator new' will only return `0' if it is declared `throw()', 1602 in which case the compiler will always check the return value even 1603 without this option. In all other cases, when `operator new' has 1604 a non-empty exception specification, memory exhaustion is 1605 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 1606 1607 `-fconserve-space' 1608 Put uninitialized or runtime-initialized global variables into the 1609 common segment, as C does. This saves space in the executable at 1610 the cost of not diagnosing duplicate definitions. If you compile 1611 with this flag and your program mysteriously crashes after 1612 `main()' has completed, you may have an object that is being 1613 destroyed twice because two definitions were merged. 1614 1615 This option is no longer useful on most targets, now that support 1616 has been added for putting variables into BSS without making them 1617 common. 1618 1619 `-ffriend-injection' 1620 Inject friend functions into the enclosing namespace, so that they 1621 are visible outside the scope of the class in which they are 1622 declared. Friend functions were documented to work this way in 1623 the old Annotated C++ Reference Manual, and versions of G++ before 1624 4.1 always worked that way. However, in ISO C++ a friend function 1625 which is not declared in an enclosing scope can only be found 1626 using argument dependent lookup. This option causes friends to be 1627 injected as they were in earlier releases. 1628 1629 This option is for compatibility, and may be removed in a future 1630 release of G++. 1631 1632 `-fno-elide-constructors' 1633 The C++ standard allows an implementation to omit creating a 1634 temporary which is only used to initialize another object of the 1635 same type. Specifying this option disables that optimization, and 1636 forces G++ to call the copy constructor in all cases. 1637 1638 `-fno-enforce-eh-specs' 1639 Don't generate code to check for violation of exception 1640 specifications at runtime. This option violates the C++ standard, 1641 but may be useful for reducing code size in production builds, 1642 much like defining `NDEBUG'. This does not give user code 1643 permission to throw exceptions in violation of the exception 1644 specifications; the compiler will still optimize based on the 1645 specifications, so throwing an unexpected exception will result in 1646 undefined behavior. 1647 1648 `-ffor-scope' 1649 `-fno-for-scope' 1650 If `-ffor-scope' is specified, the scope of variables declared in 1651 a for-init-statement is limited to the `for' loop itself, as 1652 specified by the C++ standard. If `-fno-for-scope' is specified, 1653 the scope of variables declared in a for-init-statement extends to 1654 the end of the enclosing scope, as was the case in old versions of 1655 G++, and other (traditional) implementations of C++. 1656 1657 The default if neither flag is given to follow the standard, but 1658 to allow and give a warning for old-style code that would 1659 otherwise be invalid, or have different behavior. 1660 1661 `-fno-gnu-keywords' 1662 Do not recognize `typeof' as a keyword, so that code can use this 1663 word as an identifier. You can use the keyword `__typeof__' 1664 instead. `-ansi' implies `-fno-gnu-keywords'. 1665 1666 `-fno-implicit-templates' 1667 Never emit code for non-inline templates which are instantiated 1668 implicitly (i.e. by use); only emit code for explicit 1669 instantiations. *Note Template Instantiation::, for more 1670 information. 1671 1672 `-fno-implicit-inline-templates' 1673 Don't emit code for implicit instantiations of inline templates, 1674 either. The default is to handle inlines differently so that 1675 compiles with and without optimization will need the same set of 1676 explicit instantiations. 1677 1678 `-fno-implement-inlines' 1679 To save space, do not emit out-of-line copies of inline functions 1680 controlled by `#pragma implementation'. This will cause linker 1681 errors if these functions are not inlined everywhere they are 1682 called. 1683 1684 `-fms-extensions' 1685 Disable pedantic warnings about constructs used in MFC, such as 1686 implicit int and getting a pointer to member function via 1687 non-standard syntax. 1688 1689 `-fno-nonansi-builtins' 1690 Disable built-in declarations of functions that are not mandated by 1691 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 1692 `bzero', `conjf', and other related functions. 1693 1694 `-fno-operator-names' 1695 Do not treat the operator name keywords `and', `bitand', `bitor', 1696 `compl', `not', `or' and `xor' as synonyms as keywords. 1697 1698 `-fno-optional-diags' 1699 Disable diagnostics that the standard says a compiler does not 1700 need to issue. Currently, the only such diagnostic issued by G++ 1701 is the one for a name having multiple meanings within a class. 1702 1703 `-fpermissive' 1704 Downgrade some diagnostics about nonconformant code from errors to 1705 warnings. Thus, using `-fpermissive' will allow some 1706 nonconforming code to compile. 1707 1708 `-frepo' 1709 Enable automatic template instantiation at link time. This option 1710 also implies `-fno-implicit-templates'. *Note Template 1711 Instantiation::, for more information. 1712 1713 `-fno-rtti' 1714 Disable generation of information about every class with virtual 1715 functions for use by the C++ runtime type identification features 1716 (`dynamic_cast' and `typeid'). If you don't use those parts of 1717 the language, you can save some space by using this flag. Note 1718 that exception handling uses the same information, but it will 1719 generate it as needed. The `dynamic_cast' operator can still be 1720 used for casts that do not require runtime type information, i.e. 1721 casts to `void *' or to unambiguous base classes. 1722 1723 `-fstats' 1724 Emit statistics about front-end processing at the end of the 1725 compilation. This information is generally only useful to the G++ 1726 development team. 1727 1728 `-ftemplate-depth-N' 1729 Set the maximum instantiation depth for template classes to N. A 1730 limit on the template instantiation depth is needed to detect 1731 endless recursions during template class instantiation. ANSI/ISO 1732 C++ conforming programs must not rely on a maximum depth greater 1733 than 17. 1734 1735 `-fno-threadsafe-statics' 1736 Do not emit the extra code to use the routines specified in the C++ 1737 ABI for thread-safe initialization of local statics. You can use 1738 this option to reduce code size slightly in code that doesn't need 1739 to be thread-safe. 1740 1741 `-fuse-cxa-atexit' 1742 Register destructors for objects with static storage duration with 1743 the `__cxa_atexit' function rather than the `atexit' function. 1744 This option is required for fully standards-compliant handling of 1745 static destructors, but will only work if your C library supports 1746 `__cxa_atexit'. 1747 1748 `-fno-use-cxa-get-exception-ptr' 1749 Don't use the `__cxa_get_exception_ptr' runtime routine. This 1750 will cause `std::uncaught_exception' to be incorrect, but is 1751 necessary if the runtime routine is not available. 1752 1753 `-fvisibility-inlines-hidden' 1754 This switch declares that the user does not attempt to compare 1755 pointers to inline methods where the addresses of the two functions 1756 were taken in different shared objects. 1757 1758 The effect of this is that GCC may, effectively, mark inline 1759 methods with `__attribute__ ((visibility ("hidden")))' so that 1760 they do not appear in the export table of a DSO and do not require 1761 a PLT indirection when used within the DSO. Enabling this option 1762 can have a dramatic effect on load and link times of a DSO as it 1763 massively reduces the size of the dynamic export table when the 1764 library makes heavy use of templates. 1765 1766 The behaviour of this switch is not quite the same as marking the 1767 methods as hidden directly, because it does not affect static 1768 variables local to the function or cause the compiler to deduce 1769 that the function is defined in only one shared object. 1770 1771 You may mark a method as having a visibility explicitly to negate 1772 the effect of the switch for that method. For example, if you do 1773 want to compare pointers to a particular inline method, you might 1774 mark it as having default visibility. Marking the enclosing class 1775 with explicit visibility will have no effect. 1776 1777 Explicitly instantiated inline methods are unaffected by this 1778 option as their linkage might otherwise cross a shared library 1779 boundary. *Note Template Instantiation::. 1780 1781 `-fno-weak' 1782 Do not use weak symbol support, even if it is provided by the 1783 linker. By default, G++ will use weak symbols if they are 1784 available. This option exists only for testing, and should not be 1785 used by end-users; it will result in inferior code and has no 1786 benefits. This option may be removed in a future release of G++. 1787 1788 `-nostdinc++' 1789 Do not search for header files in the standard directories 1790 specific to C++, but do still search the other standard 1791 directories. (This option is used when building the C++ library.) 1792 1793 In addition, these optimization, warning, and code generation options 1794 have meanings only for C++ programs: 1795 1796 `-fno-default-inline' 1797 Do not assume `inline' for functions defined inside a class scope. 1798 *Note Options That Control Optimization: Optimize Options. Note 1799 that these functions will have linkage like inline functions; they 1800 just won't be inlined by default. 1801 1802 `-Wabi (C++ only)' 1803 Warn when G++ generates code that is probably not compatible with 1804 the vendor-neutral C++ ABI. Although an effort has been made to 1805 warn about all such cases, there are probably some cases that are 1806 not warned about, even though G++ is generating incompatible code. 1807 There may also be cases where warnings are emitted even though 1808 the code that is generated will be compatible. 1809 1810 You should rewrite your code to avoid these warnings if you are 1811 concerned about the fact that code generated by G++ may not be 1812 binary compatible with code generated by other compilers. 1813 1814 The known incompatibilities at this point include: 1815 1816 * Incorrect handling of tail-padding for bit-fields. G++ may 1817 attempt to pack data into the same byte as a base class. For 1818 example: 1819 1820 struct A { virtual void f(); int f1 : 1; }; 1821 struct B : public A { int f2 : 1; }; 1822 1823 In this case, G++ will place `B::f2' into the same byte 1824 as`A::f1'; other compilers will not. You can avoid this 1825 problem by explicitly padding `A' so that its size is a 1826 multiple of the byte size on your platform; that will cause 1827 G++ and other compilers to layout `B' identically. 1828 1829 * Incorrect handling of tail-padding for virtual bases. G++ 1830 does not use tail padding when laying out virtual bases. For 1831 example: 1832 1833 struct A { virtual void f(); char c1; }; 1834 struct B { B(); char c2; }; 1835 struct C : public A, public virtual B {}; 1836 1837 In this case, G++ will not place `B' into the tail-padding for 1838 `A'; other compilers will. You can avoid this problem by 1839 explicitly padding `A' so that its size is a multiple of its 1840 alignment (ignoring virtual base classes); that will cause 1841 G++ and other compilers to layout `C' identically. 1842 1843 * Incorrect handling of bit-fields with declared widths greater 1844 than that of their underlying types, when the bit-fields 1845 appear in a union. For example: 1846 1847 union U { int i : 4096; }; 1848 1849 Assuming that an `int' does not have 4096 bits, G++ will make 1850 the union too small by the number of bits in an `int'. 1851 1852 * Empty classes can be placed at incorrect offsets. For 1853 example: 1854 1855 struct A {}; 1856 1857 struct B { 1858 A a; 1859 virtual void f (); 1860 }; 1861 1862 struct C : public B, public A {}; 1863 1864 G++ will place the `A' base class of `C' at a nonzero offset; 1865 it should be placed at offset zero. G++ mistakenly believes 1866 that the `A' data member of `B' is already at offset zero. 1867 1868 * Names of template functions whose types involve `typename' or 1869 template template parameters can be mangled incorrectly. 1870 1871 template <typename Q> 1872 void f(typename Q::X) {} 1873 1874 template <template <typename> class Q> 1875 void f(typename Q<int>::X) {} 1876 1877 Instantiations of these templates may be mangled incorrectly. 1878 1879 1880 `-Wctor-dtor-privacy (C++ only)' 1881 Warn when a class seems unusable because all the constructors or 1882 destructors in that class are private, and it has neither friends 1883 nor public static member functions. 1884 1885 `-Wnon-virtual-dtor (C++ only)' 1886 Warn when a class appears to be polymorphic, thereby requiring a 1887 virtual destructor, yet it declares a non-virtual one. This 1888 warning is also enabled if -Weffc++ is specified. 1889 1890 `-Wreorder (C++ only)' 1891 Warn when the order of member initializers given in the code does 1892 not match the order in which they must be executed. For instance: 1893 1894 struct A { 1895 int i; 1896 int j; 1897 A(): j (0), i (1) { } 1898 }; 1899 1900 The compiler will rearrange the member initializers for `i' and 1901 `j' to match the declaration order of the members, emitting a 1902 warning to that effect. This warning is enabled by `-Wall'. 1903 1904 The following `-W...' options are not affected by `-Wall'. 1905 1906 `-Weffc++ (C++ only)' 1907 Warn about violations of the following style guidelines from Scott 1908 Meyers' `Effective C++' book: 1909 1910 * Item 11: Define a copy constructor and an assignment 1911 operator for classes with dynamically allocated memory. 1912 1913 * Item 12: Prefer initialization to assignment in constructors. 1914 1915 * Item 14: Make destructors virtual in base classes. 1916 1917 * Item 15: Have `operator=' return a reference to `*this'. 1918 1919 * Item 23: Don't try to return a reference when you must 1920 return an object. 1921 1922 1923 Also warn about violations of the following style guidelines from 1924 Scott Meyers' `More Effective C++' book: 1925 1926 * Item 6: Distinguish between prefix and postfix forms of 1927 increment and decrement operators. 1928 1929 * Item 7: Never overload `&&', `||', or `,'. 1930 1931 1932 When selecting this option, be aware that the standard library 1933 headers do not obey all of these guidelines; use `grep -v' to 1934 filter out those warnings. 1935 1936 `-Wno-deprecated (C++ only)' 1937 Do not warn about usage of deprecated features. *Note Deprecated 1938 Features::. 1939 1940 `-Wstrict-null-sentinel (C++ only)' 1941 Warn also about the use of an uncasted `NULL' as sentinel. When 1942 compiling only with GCC this is a valid sentinel, as `NULL' is 1943 defined to `__null'. Although it is a null pointer constant not a 1944 null pointer, it is guaranteed to of the same size as a pointer. 1945 But this use is not portable across different compilers. 1946 1947 `-Wno-non-template-friend (C++ only)' 1948 Disable warnings when non-templatized friend functions are declared 1949 within a template. Since the advent of explicit template 1950 specification support in G++, if the name of the friend is an 1951 unqualified-id (i.e., `friend foo(int)'), the C++ language 1952 specification demands that the friend declare or define an 1953 ordinary, nontemplate function. (Section 14.5.3). Before G++ 1954 implemented explicit specification, unqualified-ids could be 1955 interpreted as a particular specialization of a templatized 1956 function. Because this non-conforming behavior is no longer the 1957 default behavior for G++, `-Wnon-template-friend' allows the 1958 compiler to check existing code for potential trouble spots and is 1959 on by default. This new compiler behavior can be turned off with 1960 `-Wno-non-template-friend' which keeps the conformant compiler code 1961 but disables the helpful warning. 1962 1963 `-Wold-style-cast (C++ only)' 1964 Warn if an old-style (C-style) cast to a non-void type is used 1965 within a C++ program. The new-style casts (`dynamic_cast', 1966 `static_cast', `reinterpret_cast', and `const_cast') are less 1967 vulnerable to unintended effects and much easier to search for. 1968 1969 `-Woverloaded-virtual (C++ only)' 1970 Warn when a function declaration hides virtual functions from a 1971 base class. For example, in: 1972 1973 struct A { 1974 virtual void f(); 1975 }; 1976 1977 struct B: public A { 1978 void f(int); 1979 }; 1980 1981 the `A' class version of `f' is hidden in `B', and code like: 1982 1983 B* b; 1984 b->f(); 1985 1986 will fail to compile. 1987 1988 `-Wno-pmf-conversions (C++ only)' 1989 Disable the diagnostic for converting a bound pointer to member 1990 function to a plain pointer. 1991 1992 `-Wsign-promo (C++ only)' 1993 Warn when overload resolution chooses a promotion from unsigned or 1994 enumerated type to a signed type, over a conversion to an unsigned 1995 type of the same size. Previous versions of G++ would try to 1996 preserve unsignedness, but the standard mandates the current 1997 behavior. 1998 1999 struct A { 2000 operator int (); 2001 A& operator = (int); 2002 }; 2003 2004 main () 2005 { 2006 A a,b; 2007 a = b; 2008 } 2009 2010 In this example, G++ will synthesize a default `A& operator = 2011 (const A&);', while cfront will use the user-defined `operator ='. 2012 2013 2014 File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2015 2016 3.6 Options Controlling Objective-C and Objective-C++ Dialects 2017 ============================================================== 2018 2019 (NOTE: This manual does not describe the Objective-C and Objective-C++ 2020 languages themselves. See *Note Language Standards Supported by GCC: 2021 Standards, for references.) 2022 2023 This section describes the command-line options that are only 2024 meaningful for Objective-C and Objective-C++ programs, but you can also 2025 use most of the language-independent GNU compiler options. For 2026 example, you might compile a file `some_class.m' like this: 2027 2028 gcc -g -fgnu-runtime -O -c some_class.m 2029 2030 In this example, `-fgnu-runtime' is an option meant only for 2031 Objective-C and Objective-C++ programs; you can use the other options 2032 with any language supported by GCC. 2033 2034 Note that since Objective-C is an extension of the C language, 2035 Objective-C compilations may also use options specific to the C 2036 front-end (e.g., `-Wtraditional'). Similarly, Objective-C++ 2037 compilations may use C++-specific options (e.g., `-Wabi'). 2038 2039 Here is a list of options that are _only_ for compiling Objective-C 2040 and Objective-C++ programs: 2041 2042 `-fconstant-string-class=CLASS-NAME' 2043 Use CLASS-NAME as the name of the class to instantiate for each 2044 literal string specified with the syntax `@"..."'. The default 2045 class name is `NXConstantString' if the GNU runtime is being used, 2046 and `NSConstantString' if the NeXT runtime is being used (see 2047 below). The `-fconstant-cfstrings' option, if also present, will 2048 override the `-fconstant-string-class' setting and cause `@"..."' 2049 literals to be laid out as constant CoreFoundation strings. 2050 2051 `-fgnu-runtime' 2052 Generate object code compatible with the standard GNU Objective-C 2053 runtime. This is the default for most types of systems. 2054 2055 `-fnext-runtime' 2056 Generate output compatible with the NeXT runtime. This is the 2057 default for NeXT-based systems, including Darwin and Mac OS X. 2058 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 2059 option is used. 2060 2061 `-fno-nil-receivers' 2062 Assume that all Objective-C message dispatches (e.g., `[receiver 2063 message:arg]') in this translation unit ensure that the receiver 2064 is not `nil'. This allows for more efficient entry points in the 2065 runtime to be used. Currently, this option is only available in 2066 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2067 2068 `-fobjc-call-cxx-cdtors' 2069 For each Objective-C class, check if any of its instance variables 2070 is a C++ object with a non-trivial default constructor. If so, 2071 synthesize a special `- (id) .cxx_construct' instance method that 2072 will run non-trivial default constructors on any such instance 2073 variables, in order, and then return `self'. Similarly, check if 2074 any instance variable is a C++ object with a non-trivial 2075 destructor, and if so, synthesize a special `- (void) 2076 .cxx_destruct' method that will run all such default destructors, 2077 in reverse order. 2078 2079 The `- (id) .cxx_construct' and/or `- (void) .cxx_destruct' methods 2080 thusly generated will only operate on instance variables declared 2081 in the current Objective-C class, and not those inherited from 2082 superclasses. It is the responsibility of the Objective-C runtime 2083 to invoke all such methods in an object's inheritance hierarchy. 2084 The `- (id) .cxx_construct' methods will be invoked by the runtime 2085 immediately after a new object instance is allocated; the `- 2086 (void) .cxx_destruct' methods will be invoked immediately before 2087 the runtime deallocates an object instance. 2088 2089 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 2090 later has support for invoking the `- (id) .cxx_construct' and `- 2091 (void) .cxx_destruct' methods. 2092 2093 `-fobjc-direct-dispatch' 2094 Allow fast jumps to the message dispatcher. On Darwin this is 2095 accomplished via the comm page. 2096 2097 `-fobjc-exceptions' 2098 Enable syntactic support for structured exception handling in 2099 Objective-C, similar to what is offered by C++ and Java. This 2100 option is unavailable in conjunction with the NeXT runtime on Mac 2101 OS X 10.2 and earlier. 2102 2103 @try { 2104 ... 2105 @throw expr; 2106 ... 2107 } 2108 @catch (AnObjCClass *exc) { 2109 ... 2110 @throw expr; 2111 ... 2112 @throw; 2113 ... 2114 } 2115 @catch (AnotherClass *exc) { 2116 ... 2117 } 2118 @catch (id allOthers) { 2119 ... 2120 } 2121 @finally { 2122 ... 2123 @throw expr; 2124 ... 2125 } 2126 2127 The `@throw' statement may appear anywhere in an Objective-C or 2128 Objective-C++ program; when used inside of a `@catch' block, the 2129 `@throw' may appear without an argument (as shown above), in which 2130 case the object caught by the `@catch' will be rethrown. 2131 2132 Note that only (pointers to) Objective-C objects may be thrown and 2133 caught using this scheme. When an object is thrown, it will be 2134 caught by the nearest `@catch' clause capable of handling objects 2135 of that type, analogously to how `catch' blocks work in C++ and 2136 Java. A `@catch(id ...)' clause (as shown above) may also be 2137 provided to catch any and all Objective-C exceptions not caught by 2138 previous `@catch' clauses (if any). 2139 2140 The `@finally' clause, if present, will be executed upon exit from 2141 the immediately preceding `@try ... @catch' section. This will 2142 happen regardless of whether any exceptions are thrown, caught or 2143 rethrown inside the `@try ... @catch' section, analogously to the 2144 behavior of the `finally' clause in Java. 2145 2146 There are several caveats to using the new exception mechanism: 2147 2148 * Although currently designed to be binary compatible with 2149 `NS_HANDLER'-style idioms provided by the `NSException' 2150 class, the new exceptions can only be used on Mac OS X 10.3 2151 (Panther) and later systems, due to additional functionality 2152 needed in the (NeXT) Objective-C runtime. 2153 2154 * As mentioned above, the new exceptions do not support handling 2155 types other than Objective-C objects. Furthermore, when 2156 used from Objective-C++, the Objective-C exception model does 2157 not interoperate with C++ exceptions at this time. This 2158 means you cannot `@throw' an exception from Objective-C and 2159 `catch' it in C++, or vice versa (i.e., `throw ... @catch'). 2160 2161 The `-fobjc-exceptions' switch also enables the use of 2162 synchronization blocks for thread-safe execution: 2163 2164 @synchronized (ObjCClass *guard) { 2165 ... 2166 } 2167 2168 Upon entering the `@synchronized' block, a thread of execution 2169 shall first check whether a lock has been placed on the 2170 corresponding `guard' object by another thread. If it has, the 2171 current thread shall wait until the other thread relinquishes its 2172 lock. Once `guard' becomes available, the current thread will 2173 place its own lock on it, execute the code contained in the 2174 `@synchronized' block, and finally relinquish the lock (thereby 2175 making `guard' available to other threads). 2176 2177 Unlike Java, Objective-C does not allow for entire methods to be 2178 marked `@synchronized'. Note that throwing exceptions out of 2179 `@synchronized' blocks is allowed, and will cause the guarding 2180 object to be unlocked properly. 2181 2182 `-fobjc-gc' 2183 Enable garbage collection (GC) in Objective-C and Objective-C++ 2184 programs. 2185 2186 `-freplace-objc-classes' 2187 Emit a special marker instructing `ld(1)' not to statically link in 2188 the resulting object file, and allow `dyld(1)' to load it in at 2189 run time instead. This is used in conjunction with the 2190 Fix-and-Continue debugging mode, where the object file in question 2191 may be recompiled and dynamically reloaded in the course of 2192 program execution, without the need to restart the program itself. 2193 Currently, Fix-and-Continue functionality is only available in 2194 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2195 2196 `-fzero-link' 2197 When compiling for the NeXT runtime, the compiler ordinarily 2198 replaces calls to `objc_getClass("...")' (when the name of the 2199 class is known at compile time) with static class references that 2200 get initialized at load time, which improves run-time performance. 2201 Specifying the `-fzero-link' flag suppresses this behavior and 2202 causes calls to `objc_getClass("...")' to be retained. This is 2203 useful in Zero-Link debugging mode, since it allows for individual 2204 class implementations to be modified during program execution. 2205 2206 `-gen-decls' 2207 Dump interface declarations for all classes seen in the source 2208 file to a file named `SOURCENAME.decl'. 2209 2210 `-Wassign-intercept' 2211 Warn whenever an Objective-C assignment is being intercepted by the 2212 garbage collector. 2213 2214 `-Wno-protocol' 2215 If a class is declared to implement a protocol, a warning is 2216 issued for every method in the protocol that is not implemented by 2217 the class. The default behavior is to issue a warning for every 2218 method not explicitly implemented in the class, even if a method 2219 implementation is inherited from the superclass. If you use the 2220 `-Wno-protocol' option, then methods inherited from the superclass 2221 are considered to be implemented, and no warning is issued for 2222 them. 2223 2224 `-Wselector' 2225 Warn if multiple methods of different types for the same selector 2226 are found during compilation. The check is performed on the list 2227 of methods in the final stage of compilation. Additionally, a 2228 check is performed for each selector appearing in a 2229 `@selector(...)' expression, and a corresponding method for that 2230 selector has been found during compilation. Because these checks 2231 scan the method table only at the end of compilation, these 2232 warnings are not produced if the final stage of compilation is not 2233 reached, for example because an error is found during compilation, 2234 or because the `-fsyntax-only' option is being used. 2235 2236 `-Wstrict-selector-match' 2237 Warn if multiple methods with differing argument and/or return 2238 types are found for a given selector when attempting to send a 2239 message using this selector to a receiver of type `id' or `Class'. 2240 When this flag is off (which is the default behavior), the 2241 compiler will omit such warnings if any differences found are 2242 confined to types which share the same size and alignment. 2243 2244 `-Wundeclared-selector' 2245 Warn if a `@selector(...)' expression referring to an undeclared 2246 selector is found. A selector is considered undeclared if no 2247 method with that name has been declared before the 2248 `@selector(...)' expression, either explicitly in an `@interface' 2249 or `@protocol' declaration, or implicitly in an `@implementation' 2250 section. This option always performs its checks as soon as a 2251 `@selector(...)' expression is found, while `-Wselector' only 2252 performs its checks in the final stage of compilation. This also 2253 enforces the coding style convention that methods and selectors 2254 must be declared before being used. 2255 2256 `-print-objc-runtime-info' 2257 Generate C header describing the largest structure that is passed 2258 by value, if any. 2259 2260 2261 2262 File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 2263 2264 3.7 Options to Control Diagnostic Messages Formatting 2265 ===================================================== 2266 2267 Traditionally, diagnostic messages have been formatted irrespective of 2268 the output device's aspect (e.g. its width, ...). The options described 2269 below can be used to control the diagnostic messages formatting 2270 algorithm, e.g. how many characters per line, how often source location 2271 information should be reported. Right now, only the C++ front end can 2272 honor these options. However it is expected, in the near future, that 2273 the remaining front ends would be able to digest them correctly. 2274 2275 `-fmessage-length=N' 2276 Try to format error messages so that they fit on lines of about N 2277 characters. The default is 72 characters for `g++' and 0 for the 2278 rest of the front ends supported by GCC. If N is zero, then no 2279 line-wrapping will be done; each error message will appear on a 2280 single line. 2281 2282 `-fdiagnostics-show-location=once' 2283 Only meaningful in line-wrapping mode. Instructs the diagnostic 2284 messages reporter to emit _once_ source location information; that 2285 is, in case the message is too long to fit on a single physical 2286 line and has to be wrapped, the source location won't be emitted 2287 (as prefix) again, over and over, in subsequent continuation 2288 lines. This is the default behavior. 2289 2290 `-fdiagnostics-show-location=every-line' 2291 Only meaningful in line-wrapping mode. Instructs the diagnostic 2292 messages reporter to emit the same source location information (as 2293 prefix) for physical lines that result from the process of breaking 2294 a message which is too long to fit on a single line. 2295 2296 `-fdiagnostics-show-option' 2297 This option instructs the diagnostic machinery to add text to each 2298 diagnostic emitted, which indicates which command line option 2299 directly controls that diagnostic, when such an option is known to 2300 the diagnostic machinery. 2301 2302 2303 2304 File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 2305 2306 3.8 Options to Request or Suppress Warnings 2307 =========================================== 2308 2309 Warnings are diagnostic messages that report constructions which are 2310 not inherently erroneous but which are risky or suggest there may have 2311 been an error. 2312 2313 You can request many specific warnings with options beginning `-W', 2314 for example `-Wimplicit' to request warnings on implicit declarations. 2315 Each of these specific warning options also has a negative form 2316 beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'. 2317 This manual lists only one of the two forms, whichever is not the 2318 default. 2319 2320 The following options control the amount and kinds of warnings produced 2321 by GCC; for further, language-specific options also refer to *Note C++ 2322 Dialect Options:: and *Note Objective-C and Objective-C++ Dialect 2323 Options::. 2324 2325 `-fsyntax-only' 2326 Check the code for syntax errors, but don't do anything beyond 2327 that. 2328 2329 `-pedantic' 2330 Issue all the warnings demanded by strict ISO C and ISO C++; 2331 reject all programs that use forbidden extensions, and some other 2332 programs that do not follow ISO C and ISO C++. For ISO C, follows 2333 the version of the ISO C standard specified by any `-std' option 2334 used. 2335 2336 Valid ISO C and ISO C++ programs should compile properly with or 2337 without this option (though a rare few will require `-ansi' or a 2338 `-std' option specifying the required version of ISO C). However, 2339 without this option, certain GNU extensions and traditional C and 2340 C++ features are supported as well. With this option, they are 2341 rejected. 2342 2343 `-pedantic' does not cause warning messages for use of the 2344 alternate keywords whose names begin and end with `__'. Pedantic 2345 warnings are also disabled in the expression that follows 2346 `__extension__'. However, only system header files should use 2347 these escape routes; application programs should avoid them. 2348 *Note Alternate Keywords::. 2349 2350 Some users try to use `-pedantic' to check programs for strict ISO 2351 C conformance. They soon find that it does not do quite what they 2352 want: it finds some non-ISO practices, but not all--only those for 2353 which ISO C _requires_ a diagnostic, and some others for which 2354 diagnostics have been added. 2355 2356 A feature to report any failure to conform to ISO C might be 2357 useful in some instances, but would require considerable 2358 additional work and would be quite different from `-pedantic'. We 2359 don't have plans to support such a feature in the near future. 2360 2361 Where the standard specified with `-std' represents a GNU extended 2362 dialect of C, such as `gnu89' or `gnu99', there is a corresponding 2363 "base standard", the version of ISO C on which the GNU extended 2364 dialect is based. Warnings from `-pedantic' are given where they 2365 are required by the base standard. (It would not make sense for 2366 such warnings to be given only for features not in the specified 2367 GNU C dialect, since by definition the GNU dialects of C include 2368 all features the compiler supports with the given option, and 2369 there would be nothing to warn about.) 2370 2371 `-pedantic-errors' 2372 Like `-pedantic', except that errors are produced rather than 2373 warnings. 2374 2375 `-w' 2376 Inhibit all warning messages. 2377 2378 `-Wno-import' 2379 Inhibit warning messages about the use of `#import'. 2380 2381 `-Wchar-subscripts' 2382 Warn if an array subscript has type `char'. This is a common cause 2383 of error, as programmers often forget that this type is signed on 2384 some machines. This warning is enabled by `-Wall'. 2385 2386 `-Wcomment' 2387 Warn whenever a comment-start sequence `/*' appears in a `/*' 2388 comment, or whenever a Backslash-Newline appears in a `//' comment. 2389 This warning is enabled by `-Wall'. 2390 2391 `-Wfatal-errors' 2392 This option causes the compiler to abort compilation on the first 2393 error occurred rather than trying to keep going and printing 2394 further error messages. 2395 2396 `-Wformat' 2397 Check calls to `printf' and `scanf', etc., to make sure that the 2398 arguments supplied have types appropriate to the format string 2399 specified, and that the conversions specified in the format string 2400 make sense. This includes standard functions, and others 2401 specified by format attributes (*note Function Attributes::), in 2402 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 2403 extension, not in the C standard) families (or other 2404 target-specific families). Which functions are checked without 2405 format attributes having been specified depends on the standard 2406 version selected, and such checks of functions without the 2407 attribute specified are disabled by `-ffreestanding' or 2408 `-fno-builtin'. 2409 2410 The formats are checked against the format features supported by 2411 GNU libc version 2.2. These include all ISO C90 and C99 features, 2412 as well as features from the Single Unix Specification and some 2413 BSD and GNU extensions. Other library implementations may not 2414 support all these features; GCC does not support warning about 2415 features that go beyond a particular library's limitations. 2416 However, if `-pedantic' is used with `-Wformat', warnings will be 2417 given about format features not in the selected standard version 2418 (but not for `strfmon' formats, since those are not in any version 2419 of the C standard). *Note Options Controlling C Dialect: C 2420 Dialect Options. 2421 2422 Since `-Wformat' also checks for null format arguments for several 2423 functions, `-Wformat' also implies `-Wnonnull'. 2424 2425 `-Wformat' is included in `-Wall'. For more control over some 2426 aspects of format checking, the options `-Wformat-y2k', 2427 `-Wno-format-extra-args', `-Wno-format-zero-length', 2428 `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are 2429 available, but are not included in `-Wall'. 2430 2431 `-Wformat-y2k' 2432 If `-Wformat' is specified, also warn about `strftime' formats 2433 which may yield only a two-digit year. 2434 2435 `-Wno-format-extra-args' 2436 If `-Wformat' is specified, do not warn about excess arguments to a 2437 `printf' or `scanf' format function. The C standard specifies 2438 that such arguments are ignored. 2439 2440 Where the unused arguments lie between used arguments that are 2441 specified with `$' operand number specifications, normally 2442 warnings are still given, since the implementation could not know 2443 what type to pass to `va_arg' to skip the unused arguments. 2444 However, in the case of `scanf' formats, this option will suppress 2445 the warning if the unused arguments are all pointers, since the 2446 Single Unix Specification says that such unused arguments are 2447 allowed. 2448 2449 `-Wno-format-zero-length' 2450 If `-Wformat' is specified, do not warn about zero-length formats. 2451 The C standard specifies that zero-length formats are allowed. 2452 2453 `-Wformat-nonliteral' 2454 If `-Wformat' is specified, also warn if the format string is not a 2455 string literal and so cannot be checked, unless the format function 2456 takes its format arguments as a `va_list'. 2457 2458 `-Wformat-security' 2459 If `-Wformat' is specified, also warn about uses of format 2460 functions that represent possible security problems. At present, 2461 this warns about calls to `printf' and `scanf' functions where the 2462 format string is not a string literal and there are no format 2463 arguments, as in `printf (foo);'. This may be a security hole if 2464 the format string came from untrusted input and contains `%n'. 2465 (This is currently a subset of what `-Wformat-nonliteral' warns 2466 about, but in future warnings may be added to `-Wformat-security' 2467 that are not included in `-Wformat-nonliteral'.) 2468 2469 `-Wformat=2' 2470 Enable `-Wformat' plus format checks not included in `-Wformat'. 2471 Currently equivalent to `-Wformat -Wformat-nonliteral 2472 -Wformat-security -Wformat-y2k'. 2473 2474 `-Wnonnull' 2475 Warn about passing a null pointer for arguments marked as 2476 requiring a non-null value by the `nonnull' function attribute. 2477 2478 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 2479 disabled with the `-Wno-nonnull' option. 2480 2481 `-Winit-self (C, C++, Objective-C and Objective-C++ only)' 2482 Warn about uninitialized variables which are initialized with 2483 themselves. Note this option can only be used with the 2484 `-Wuninitialized' option, which in turn only works with `-O1' and 2485 above. 2486 2487 For example, GCC will warn about `i' being uninitialized in the 2488 following snippet only when `-Winit-self' has been specified: 2489 int f() 2490 { 2491 int i = i; 2492 return i; 2493 } 2494 2495 `-Wimplicit-int' 2496 Warn when a declaration does not specify a type. This warning is 2497 enabled by `-Wall'. 2498 2499 `-Wimplicit-function-declaration' 2500 `-Werror-implicit-function-declaration' 2501 Give a warning (or error) whenever a function is used before being 2502 declared. The form `-Wno-error-implicit-function-declaration' is 2503 not supported. This warning is enabled by `-Wall' (as a warning, 2504 not an error). 2505 2506 `-Wimplicit' 2507 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 2508 This warning is enabled by `-Wall'. 2509 2510 `-Wmain' 2511 Warn if the type of `main' is suspicious. `main' should be a 2512 function with external linkage, returning int, taking either zero 2513 arguments, two, or three arguments of appropriate types. This 2514 warning is enabled by `-Wall'. 2515 2516 `-Wmissing-braces' 2517 Warn if an aggregate or union initializer is not fully bracketed. 2518 In the following example, the initializer for `a' is not fully 2519 bracketed, but that for `b' is fully bracketed. 2520 2521 int a[2][2] = { 0, 1, 2, 3 }; 2522 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 2523 2524 This warning is enabled by `-Wall'. 2525 2526 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 2527 Warn if a user-supplied include directory does not exist. 2528 2529 `-Wparentheses' 2530 Warn if parentheses are omitted in certain contexts, such as when 2531 there is an assignment in a context where a truth value is 2532 expected, or when operators are nested whose precedence people 2533 often get confused about. 2534 2535 Also warn if a comparison like `x<=y<=z' appears; this is 2536 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 2537 interpretation from that of ordinary mathematical notation. 2538 2539 Also warn about constructions where there may be confusion to which 2540 `if' statement an `else' branch belongs. Here is an example of 2541 such a case: 2542 2543 { 2544 if (a) 2545 if (b) 2546 foo (); 2547 else 2548 bar (); 2549 } 2550 2551 In C/C++, every `else' branch belongs to the innermost possible 2552 `if' statement, which in this example is `if (b)'. This is often 2553 not what the programmer expected, as illustrated in the above 2554 example by indentation the programmer chose. When there is the 2555 potential for this confusion, GCC will issue a warning when this 2556 flag is specified. To eliminate the warning, add explicit braces 2557 around the innermost `if' statement so there is no way the `else' 2558 could belong to the enclosing `if'. The resulting code would look 2559 like this: 2560 2561 { 2562 if (a) 2563 { 2564 if (b) 2565 foo (); 2566 else 2567 bar (); 2568 } 2569 } 2570 2571 This warning is enabled by `-Wall'. 2572 2573 `-Wsequence-point' 2574 Warn about code that may have undefined semantics because of 2575 violations of sequence point rules in the C and C++ standards. 2576 2577 The C and C++ standards defines the order in which expressions in 2578 a C/C++ program are evaluated in terms of "sequence points", which 2579 represent a partial ordering between the execution of parts of the 2580 program: those executed before the sequence point, and those 2581 executed after it. These occur after the evaluation of a full 2582 expression (one which is not part of a larger expression), after 2583 the evaluation of the first operand of a `&&', `||', `? :' or `,' 2584 (comma) operator, before a function is called (but after the 2585 evaluation of its arguments and the expression denoting the called 2586 function), and in certain other places. Other than as expressed 2587 by the sequence point rules, the order of evaluation of 2588 subexpressions of an expression is not specified. All these rules 2589 describe only a partial order rather than a total order, since, 2590 for example, if two functions are called within one expression 2591 with no sequence point between them, the order in which the 2592 functions are called is not specified. However, the standards 2593 committee have ruled that function calls do not overlap. 2594 2595 It is not specified when between sequence points modifications to 2596 the values of objects take effect. Programs whose behavior 2597 depends on this have undefined behavior; the C and C++ standards 2598 specify that "Between the previous and next sequence point an 2599 object shall have its stored value modified at most once by the 2600 evaluation of an expression. Furthermore, the prior value shall 2601 be read only to determine the value to be stored.". If a program 2602 breaks these rules, the results on any particular implementation 2603 are entirely unpredictable. 2604 2605 Examples of code with undefined behavior are `a = a++;', `a[n] = 2606 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 2607 diagnosed by this option, and it may give an occasional false 2608 positive result, but in general it has been found fairly effective 2609 at detecting this sort of problem in programs. 2610 2611 The standard is worded confusingly, therefore there is some debate 2612 over the precise meaning of the sequence point rules in subtle 2613 cases. Links to discussions of the problem, including proposed 2614 formal definitions, may be found on the GCC readings page, at 2615 `http://gcc.gnu.org/readings.html'. 2616 2617 This warning is enabled by `-Wall' for C and C++. 2618 2619 `-Wreturn-type' 2620 Warn whenever a function is defined with a return-type that 2621 defaults to `int'. Also warn about any `return' statement with no 2622 return-value in a function whose return-type is not `void'. 2623 2624 For C, also warn if the return type of a function has a type 2625 qualifier such as `const'. Such a type qualifier has no effect, 2626 since the value returned by a function is not an lvalue. ISO C 2627 prohibits qualified `void' return types on function definitions, 2628 so such return types always receive a warning even without this 2629 option. 2630 2631 For C++, a function without return type always produces a 2632 diagnostic message, even when `-Wno-return-type' is specified. 2633 The only exceptions are `main' and functions defined in system 2634 headers. 2635 2636 This warning is enabled by `-Wall'. 2637 2638 `-Wswitch' 2639 Warn whenever a `switch' statement has an index of enumerated type 2640 and lacks a `case' for one or more of the named codes of that 2641 enumeration. (The presence of a `default' label prevents this 2642 warning.) `case' labels outside the enumeration range also 2643 provoke warnings when this option is used. This warning is 2644 enabled by `-Wall'. 2645 2646 `-Wswitch-default' 2647 Warn whenever a `switch' statement does not have a `default' case. 2648 2649 `-Wswitch-enum' 2650 Warn whenever a `switch' statement has an index of enumerated type 2651 and lacks a `case' for one or more of the named codes of that 2652 enumeration. `case' labels outside the enumeration range also 2653 provoke warnings when this option is used. 2654 2655 `-Wtrigraphs' 2656 Warn if any trigraphs are encountered that might change the 2657 meaning of the program (trigraphs within comments are not warned 2658 about). This warning is enabled by `-Wall'. 2659 2660 `-Wunused-function' 2661 Warn whenever a static function is declared but not defined or a 2662 non-inline static function is unused. This warning is enabled by 2663 `-Wall'. 2664 2665 `-Wunused-label' 2666 Warn whenever a label is declared but not used. This warning is 2667 enabled by `-Wall'. 2668 2669 To suppress this warning use the `unused' attribute (*note 2670 Variable Attributes::). 2671 2672 `-Wunused-parameter' 2673 Warn whenever a function parameter is unused aside from its 2674 declaration. 2675 2676 To suppress this warning use the `unused' attribute (*note 2677 Variable Attributes::). 2678 2679 `-Wunused-variable' 2680 Warn whenever a local variable or non-constant static variable is 2681 unused aside from its declaration. This warning is enabled by 2682 `-Wall'. 2683 2684 To suppress this warning use the `unused' attribute (*note 2685 Variable Attributes::). 2686 2687 `-Wunused-value' 2688 Warn whenever a statement computes a result that is explicitly not 2689 used. This warning is enabled by `-Wall'. 2690 2691 To suppress this warning cast the expression to `void'. 2692 2693 `-Wunused' 2694 All the above `-Wunused' options combined. 2695 2696 In order to get a warning about an unused function parameter, you 2697 must either specify `-Wextra -Wunused' (note that `-Wall' implies 2698 `-Wunused'), or separately specify `-Wunused-parameter'. 2699 2700 `-Wuninitialized' 2701 Warn if an automatic variable is used without first being 2702 initialized or if a variable may be clobbered by a `setjmp' call. 2703 2704 These warnings are possible only in optimizing compilation, 2705 because they require data flow information that is computed only 2706 when optimizing. If you do not specify `-O', you will not get 2707 these warnings. Instead, GCC will issue a warning about 2708 `-Wuninitialized' requiring `-O'. 2709 2710 If you want to warn about code which uses the uninitialized value 2711 of the variable in its own initializer, use the `-Winit-self' 2712 option. 2713 2714 These warnings occur for individual uninitialized or clobbered 2715 elements of structure, union or array variables as well as for 2716 variables which are uninitialized or clobbered as a whole. They do 2717 not occur for variables or elements declared `volatile'. Because 2718 these warnings depend on optimization, the exact variables or 2719 elements for which there are warnings will depend on the precise 2720 optimization options and version of GCC used. 2721 2722 Note that there may be no warning about a variable that is used 2723 only to compute a value that itself is never used, because such 2724 computations may be deleted by data flow analysis before the 2725 warnings are printed. 2726 2727 These warnings are made optional because GCC is not smart enough 2728 to see all the reasons why the code might be correct despite 2729 appearing to have an error. Here is one example of how this can 2730 happen: 2731 2732 { 2733 int x; 2734 switch (y) 2735 { 2736 case 1: x = 1; 2737 break; 2738 case 2: x = 4; 2739 break; 2740 case 3: x = 5; 2741 } 2742 foo (x); 2743 } 2744 2745 If the value of `y' is always 1, 2 or 3, then `x' is always 2746 initialized, but GCC doesn't know this. Here is another common 2747 case: 2748 2749 { 2750 int save_y; 2751 if (change_y) save_y = y, y = new_y; 2752 ... 2753 if (change_y) y = save_y; 2754 } 2755 2756 This has no bug because `save_y' is used only if it is set. 2757 2758 This option also warns when a non-volatile automatic variable 2759 might be changed by a call to `longjmp'. These warnings as well 2760 are possible only in optimizing compilation. 2761 2762 The compiler sees only the calls to `setjmp'. It cannot know 2763 where `longjmp' will be called; in fact, a signal handler could 2764 call it at any point in the code. As a result, you may get a 2765 warning even when there is in fact no problem because `longjmp' 2766 cannot in fact be called at the place which would cause a problem. 2767 2768 Some spurious warnings can be avoided if you declare all the 2769 functions you use that never return as `noreturn'. *Note Function 2770 Attributes::. 2771 2772 This warning is enabled by `-Wall'. 2773 2774 `-Wunknown-pragmas' 2775 Warn when a #pragma directive is encountered which is not 2776 understood by GCC. If this command line option is used, warnings 2777 will even be issued for unknown pragmas in system header files. 2778 This is not the case if the warnings were only enabled by the 2779 `-Wall' command line option. 2780 2781 `-Wno-pragmas' 2782 Do not warn about misuses of pragmas, such as incorrect parameters, 2783 invalid syntax, or conflicts between pragmas. See also 2784 `-Wunknown-pragmas'. 2785 2786 `-Wstrict-aliasing' 2787 This option is only active when `-fstrict-aliasing' is active. It 2788 warns about code which might break the strict aliasing rules that 2789 the compiler is using for optimization. The warning does not 2790 catch all cases, but does attempt to catch the more common 2791 pitfalls. It is included in `-Wall'. It is equivalent to 2792 -Wstrict-aliasing=3 2793 2794 `-Wstrict-aliasing=n' 2795 This option is only active when `-fstrict-aliasing' is active. It 2796 warns about code which might break the strict aliasing rules that 2797 the compiler is using for optimization. Higher levels correspond 2798 to higher accuracy (fewer false positives). Higher levels also 2799 correspond to more effort, similar to the way -O works. 2800 `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=n', with 2801 n=3. 2802 2803 Level 1: Most aggressive, quick, least accurate. Possibly useful 2804 when higher levels do not warn but -fstrict-aliasing still breaks 2805 the code, as it has very few false negatives. However, it has 2806 many false positives. Warns for all pointer conversions between 2807 possibly incompatible types, even if never dereferenced. Runs in 2808 the frontend only. 2809 2810 Level 2: Aggressive, quick, not too precise. May still have many 2811 false positives (not as many as level 1 though), and few false 2812 negatives (but possibly more than level 1). Unlike level 1, it 2813 only warns when an address is taken. Warns about incomplete 2814 types. Runs in the frontend only. 2815 2816 Level 3 (default for `-Wstrict-aliasing'): Should have very few 2817 false positives and few false negatives. Slightly slower than 2818 levels 1 or 2 when optimization is enabled. Takes care of the 2819 common punn+dereference pattern in the frontend: 2820 `*(int*)&some_float'. If optimization is enabled, it also runs in 2821 the backend, where it deals with multiple statement cases using 2822 flow-sensitive points-to information. Only warns when the 2823 converted pointer is dereferenced. Does not warn about incomplete 2824 types. 2825 2826 `-Wstrict-overflow' 2827 2828 `-Wstrict-overflow=N' 2829 This option is only active when `-fstrict-overflow' is active. It 2830 warns about cases where the compiler optimizes based on the 2831 assumption that signed overflow does not occur. Note that it does 2832 not warn about all cases where the code might overflow: it only 2833 warns about cases where the compiler implements some optimization. 2834 Thus this warning depends on the optimization level. 2835 2836 An optimization which assumes that signed overflow does not occur 2837 is perfectly safe if the values of the variables involved are such 2838 that overflow never does, in fact, occur. Therefore this warning 2839 can easily give a false positive: a warning about code which is not 2840 actually a problem. To help focus on important issues, several 2841 warning levels are defined. No warnings are issued for the use of 2842 undefined signed overflow when estimating how many iterations a 2843 loop will require, in particular when determining whether a loop 2844 will be executed at all. 2845 2846 `-Wstrict-overflow=1' 2847 Warn about cases which are both questionable and easy to 2848 avoid. For example: `x + 1 > x'; with `-fstrict-overflow', 2849 the compiler will simplify this to `1'. This level of 2850 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 2851 not, and must be explicitly requested. 2852 2853 `-Wstrict-overflow=2' 2854 Also warn about other cases where a comparison is simplified 2855 to a constant. For example: `abs (x) >= 0'. This can only be 2856 simplified when `-fstrict-overflow' is in effect, because 2857 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 2858 zero. `-Wstrict-overflow' (with no level) is the same as 2859 `-Wstrict-overflow=2'. 2860 2861 `-Wstrict-overflow=3' 2862 Also warn about other cases where a comparison is simplified. 2863 For example: `x + 1 > 1' will be simplified to `x > 0'. 2864 2865 `-Wstrict-overflow=4' 2866 Also warn about other simplifications not covered by the 2867 above cases. For example: `(x * 10) / 5' will be simplified 2868 to `x * 2'. 2869 2870 `-Wstrict-overflow=5' 2871 Also warn about cases where the compiler reduces the 2872 magnitude of a constant involved in a comparison. For 2873 example: `x + 2 > y' will be simplified to `x + 1 >= y'. 2874 This is reported only at the highest warning level because 2875 this simplification applies to many comparisons, so this 2876 warning level will give a very large number of false 2877 positives. 2878 2879 `-Wall' 2880 All of the above `-W' options combined. This enables all the 2881 warnings about constructions that some users consider 2882 questionable, and that are easy to avoid (or modify to prevent the 2883 warning), even in conjunction with macros. This also enables some 2884 language-specific warnings described in *Note C++ Dialect 2885 Options:: and *Note Objective-C and Objective-C++ Dialect 2886 Options::. 2887 2888 The following `-W...' options are not implied by `-Wall'. Some of 2889 them warn about constructions that users generally do not consider 2890 questionable, but which occasionally you might wish to check for; 2891 others warn about constructions that are necessary or hard to avoid in 2892 some cases, and there is no simple way to modify the code to suppress 2893 the warning. 2894 2895 `-Wextra' 2896 (This option used to be called `-W'. The older name is still 2897 supported, but the newer name is more descriptive.) Print extra 2898 warning messages for these events: 2899 2900 * A function can return either with or without a value. 2901 (Falling off the end of the function body is considered 2902 returning without a value.) For example, this function would 2903 evoke such a warning: 2904 2905 foo (a) 2906 { 2907 if (a > 0) 2908 return a; 2909 } 2910 2911 * An expression-statement or the left-hand side of a comma 2912 expression contains no side effects. To suppress the 2913 warning, cast the unused expression to void. For example, an 2914 expression such as `x[i,j]' will cause a warning, but 2915 `x[(void)i,j]' will not. 2916 2917 * An unsigned value is compared against zero with `<' or `>='. 2918 2919 * Storage-class specifiers like `static' are not the first 2920 things in a declaration. According to the C Standard, this 2921 usage is obsolescent. 2922 2923 * If `-Wall' or `-Wunused' is also specified, warn about unused 2924 arguments. 2925 2926 * A comparison between signed and unsigned values could produce 2927 an incorrect result when the signed value is converted to 2928 unsigned. (But don't warn if `-Wno-sign-compare' is also 2929 specified.) 2930 2931 * An aggregate has an initializer which does not initialize all 2932 members. This warning can be independently controlled by 2933 `-Wmissing-field-initializers'. 2934 2935 * An initialized field without side effects is overridden when 2936 using designated initializers (*note Designated Initializers: 2937 Designated Inits.). This warning can be independently 2938 controlled by `-Woverride-init'. 2939 2940 * A function parameter is declared without a type specifier in 2941 K&R-style functions: 2942 2943 void foo(bar) { } 2944 2945 * An empty body occurs in an `if' or `else' statement. 2946 2947 * A pointer is compared against integer zero with `<', `<=', 2948 `>', or `>='. 2949 2950 * A variable might be changed by `longjmp' or `vfork'. 2951 2952 * (C++ only) An enumerator and a non-enumerator both appear in 2953 a conditional expression. 2954 2955 * (C++ only) A non-static reference or non-static `const' 2956 member appears in a class without constructors. 2957 2958 * (C++ only) Ambiguous virtual bases. 2959 2960 * (C++ only) Subscripting an array which has been declared 2961 `register'. 2962 2963 * (C++ only) Taking the address of a variable which has been 2964 declared `register'. 2965 2966 * (C++ only) A base class is not initialized in a derived 2967 class' copy constructor. 2968 2969 `-Wno-div-by-zero' 2970 Do not warn about compile-time integer division by zero. Floating 2971 point division by zero is not warned about, as it can be a 2972 legitimate way of obtaining infinities and NaNs. 2973 2974 `-Wsystem-headers' 2975 Print warning messages for constructs found in system header files. 2976 Warnings from system headers are normally suppressed, on the 2977 assumption that they usually do not indicate real problems and 2978 would only make the compiler output harder to read. Using this 2979 command line option tells GCC to emit warnings from system headers 2980 as if they occurred in user code. However, note that using 2981 `-Wall' in conjunction with this option will _not_ warn about 2982 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 2983 must also be used. 2984 2985 `-Wfloat-equal' 2986 Warn if floating point values are used in equality comparisons. 2987 2988 The idea behind this is that sometimes it is convenient (for the 2989 programmer) to consider floating-point values as approximations to 2990 infinitely precise real numbers. If you are doing this, then you 2991 need to compute (by analyzing the code, or in some other way) the 2992 maximum or likely maximum error that the computation introduces, 2993 and allow for it when performing comparisons (and when producing 2994 output, but that's a different problem). In particular, instead 2995 of testing for equality, you would check to see whether the two 2996 values have ranges that overlap; and this is done with the 2997 relational operators, so equality comparisons are probably 2998 mistaken. 2999 3000 `-Wtraditional (C only)' 3001 Warn about certain constructs that behave differently in 3002 traditional and ISO C. Also warn about ISO C constructs that have 3003 no traditional C equivalent, and/or problematic constructs which 3004 should be avoided. 3005 3006 * Macro parameters that appear within string literals in the 3007 macro body. In traditional C macro replacement takes place 3008 within string literals, but does not in ISO C. 3009 3010 * In traditional C, some preprocessor directives did not exist. 3011 Traditional preprocessors would only consider a line to be a 3012 directive if the `#' appeared in column 1 on the line. 3013 Therefore `-Wtraditional' warns about directives that 3014 traditional C understands but would ignore because the `#' 3015 does not appear as the first character on the line. It also 3016 suggests you hide directives like `#pragma' not understood by 3017 traditional C by indenting them. Some traditional 3018 implementations would not recognize `#elif', so it suggests 3019 avoiding it altogether. 3020 3021 * A function-like macro that appears without arguments. 3022 3023 * The unary plus operator. 3024 3025 * The `U' integer constant suffix, or the `F' or `L' floating 3026 point constant suffixes. (Traditional C does support the `L' 3027 suffix on integer constants.) Note, these suffixes appear in 3028 macros defined in the system headers of most modern systems, 3029 e.g. the `_MIN'/`_MAX' macros in `<limits.h>'. Use of these 3030 macros in user code might normally lead to spurious warnings, 3031 however GCC's integrated preprocessor has enough context to 3032 avoid warning in these cases. 3033 3034 * A function declared external in one block and then used after 3035 the end of the block. 3036 3037 * A `switch' statement has an operand of type `long'. 3038 3039 * A non-`static' function declaration follows a `static' one. 3040 This construct is not accepted by some traditional C 3041 compilers. 3042 3043 * The ISO type of an integer constant has a different width or 3044 signedness from its traditional type. This warning is only 3045 issued if the base of the constant is ten. I.e. hexadecimal 3046 or octal values, which typically represent bit patterns, are 3047 not warned about. 3048 3049 * Usage of ISO string concatenation is detected. 3050 3051 * Initialization of automatic aggregates. 3052 3053 * Identifier conflicts with labels. Traditional C lacks a 3054 separate namespace for labels. 3055 3056 * Initialization of unions. If the initializer is zero, the 3057 warning is omitted. This is done under the assumption that 3058 the zero initializer in user code appears conditioned on e.g. 3059 `__STDC__' to avoid missing initializer warnings and relies 3060 on default initialization to zero in the traditional C case. 3061 3062 * Conversions by prototypes between fixed/floating point values 3063 and vice versa. The absence of these prototypes when 3064 compiling with traditional C would cause serious problems. 3065 This is a subset of the possible conversion warnings, for the 3066 full set use `-Wconversion'. 3067 3068 * Use of ISO C style function definitions. This warning 3069 intentionally is _not_ issued for prototype declarations or 3070 variadic functions because these ISO C features will appear 3071 in your code when using libiberty's traditional C 3072 compatibility macros, `PARAMS' and `VPARAMS'. This warning 3073 is also bypassed for nested functions because that feature is 3074 already a GCC extension and thus not relevant to traditional 3075 C compatibility. 3076 3077 `-Wdeclaration-after-statement (C only)' 3078 Warn when a declaration is found after a statement in a block. 3079 This construct, known from C++, was introduced with ISO C99 and is 3080 by default allowed in GCC. It is not supported by ISO C90 and was 3081 not supported by GCC versions before GCC 3.0. *Note Mixed 3082 Declarations::. 3083 3084 `-Wundef' 3085 Warn if an undefined identifier is evaluated in an `#if' directive. 3086 3087 `-Wno-endif-labels' 3088 Do not warn whenever an `#else' or an `#endif' are followed by 3089 text. 3090 3091 `-Wshadow' 3092 Warn whenever a local variable shadows another local variable, 3093 parameter or global variable or whenever a built-in function is 3094 shadowed. 3095 3096 `-Wlarger-than-LEN' 3097 Warn whenever an object of larger than LEN bytes is defined. 3098 3099 `-Wframe-larger-than-LEN' 3100 Warn whenever the frame size of a function is larger than LEN 3101 bytes. 3102 3103 `-Wunsafe-loop-optimizations' 3104 Warn if the loop cannot be optimized because the compiler could not 3105 assume anything on the bounds of the loop indices. With 3106 `-funsafe-loop-optimizations' warn if the compiler made such 3107 assumptions. 3108 3109 `-Wpointer-arith' 3110 Warn about anything that depends on the "size of" a function type 3111 or of `void'. GNU C assigns these types a size of 1, for 3112 convenience in calculations with `void *' pointers and pointers to 3113 functions. 3114 3115 `-Wbad-function-cast (C only)' 3116 Warn whenever a function call is cast to a non-matching type. For 3117 example, warn if `int malloc()' is cast to `anything *'. 3118 3119 `-Wc++-compat' 3120 Warn about ISO C constructs that are outside of the common subset 3121 of ISO C and ISO C++, e.g. request for implicit conversion from 3122 `void *' to a pointer to non-`void' type. 3123 3124 `-Wcast-qual' 3125 Warn whenever a pointer is cast so as to remove a type qualifier 3126 from the target type. For example, warn if a `const char *' is 3127 cast to an ordinary `char *'. 3128 3129 `-Wcast-align' 3130 Warn whenever a pointer is cast such that the required alignment 3131 of the target is increased. For example, warn if a `char *' is 3132 cast to an `int *' on machines where integers can only be accessed 3133 at two- or four-byte boundaries. 3134 3135 `-Wwrite-strings' 3136 When compiling C, give string constants the type `const 3137 char[LENGTH]' so that copying the address of one into a 3138 non-`const' `char *' pointer will get a warning; when compiling 3139 C++, warn about the deprecated conversion from string literals to 3140 `char *'. This warning, by default, is enabled for C++ programs. 3141 These warnings will help you find at compile time code that can 3142 try to write into a string constant, but only if you have been 3143 very careful about using `const' in declarations and prototypes. 3144 Otherwise, it will just be a nuisance; this is why we did not make 3145 `-Wall' request these warnings. 3146 3147 `-Wconversion' 3148 Warn if a prototype causes a type conversion that is different 3149 from what would happen to the same argument in the absence of a 3150 prototype. This includes conversions of fixed point to floating 3151 and vice versa, and conversions changing the width or signedness 3152 of a fixed point argument except when the same as the default 3153 promotion. 3154 3155 Also, warn if a negative integer constant expression is implicitly 3156 converted to an unsigned type. For example, warn about the 3157 assignment `x = -1' if `x' is unsigned. But do not warn about 3158 explicit casts like `(unsigned) -1'. 3159 3160 `-Wsign-compare' 3161 Warn when a comparison between signed and unsigned values could 3162 produce an incorrect result when the signed value is converted to 3163 unsigned. This warning is also enabled by `-Wextra'; to get the 3164 other warnings of `-Wextra' without this warning, use `-Wextra 3165 -Wno-sign-compare'. 3166 3167 `-Waddress' 3168 Warn about suspicious uses of memory addresses. These include using 3169 the address of a function in a conditional expression, such as 3170 `void func(void); if (func)', and comparisons against the memory 3171 address of a string literal, such as `if (x == "abc")'. Such uses 3172 typically indicate a programmer error: the address of a function 3173 always evaluates to true, so their use in a conditional usually 3174 indicate that the programmer forgot the parentheses in a function 3175 call; and comparisons against string literals result in unspecified 3176 behavior and are not portable in C, so they usually indicate that 3177 the programmer intended to use `strcmp'. This warning is enabled 3178 by `-Wall'. 3179 3180 `-Waggregate-return' 3181 Warn if any functions that return structures or unions are defined 3182 or called. (In languages where you can return an array, this also 3183 elicits a warning.) 3184 3185 `-Wno-attributes' 3186 Do not warn if an unexpected `__attribute__' is used, such as 3187 unrecognized attributes, function attributes applied to variables, 3188 etc. This will not stop errors for incorrect use of supported 3189 attributes. 3190 3191 `-Wstrict-prototypes (C only)' 3192 Warn if a function is declared or defined without specifying the 3193 argument types. (An old-style function definition is permitted 3194 without a warning if preceded by a declaration which specifies the 3195 argument types.) 3196 3197 `-Wold-style-definition (C only)' 3198 Warn if an old-style function definition is used. A warning is 3199 given even if there is a previous prototype. 3200 3201 `-Wmissing-prototypes (C only)' 3202 Warn if a global function is defined without a previous prototype 3203 declaration. This warning is issued even if the definition itself 3204 provides a prototype. The aim is to detect global functions that 3205 fail to be declared in header files. 3206 3207 `-Wmissing-declarations (C only)' 3208 Warn if a global function is defined without a previous 3209 declaration. Do so even if the definition itself provides a 3210 prototype. Use this option to detect global functions that are 3211 not declared in header files. 3212 3213 `-Wmissing-field-initializers' 3214 Warn if a structure's initializer has some fields missing. For 3215 example, the following code would cause such a warning, because 3216 `x.h' is implicitly zero: 3217 3218 struct s { int f, g, h; }; 3219 struct s x = { 3, 4 }; 3220 3221 This option does not warn about designated initializers, so the 3222 following modification would not trigger a warning: 3223 3224 struct s { int f, g, h; }; 3225 struct s x = { .f = 3, .g = 4 }; 3226 3227 This warning is included in `-Wextra'. To get other `-Wextra' 3228 warnings without this one, use `-Wextra 3229 -Wno-missing-field-initializers'. 3230 3231 `-Wmissing-noreturn' 3232 Warn about functions which might be candidates for attribute 3233 `noreturn'. Note these are only possible candidates, not absolute 3234 ones. Care should be taken to manually verify functions actually 3235 do not ever return before adding the `noreturn' attribute, 3236 otherwise subtle code generation bugs could be introduced. You 3237 will not get a warning for `main' in hosted C environments. 3238 3239 `-Wmissing-format-attribute' 3240 Warn about function pointers which might be candidates for `format' 3241 attributes. Note these are only possible candidates, not absolute 3242 ones. GCC will guess that function pointers with `format' 3243 attributes that are used in assignment, initialization, parameter 3244 passing or return statements should have a corresponding `format' 3245 attribute in the resulting type. I.e. the left-hand side of the 3246 assignment or initialization, the type of the parameter variable, 3247 or the return type of the containing function respectively should 3248 also have a `format' attribute to avoid the warning. 3249 3250 GCC will also warn about function definitions which might be 3251 candidates for `format' attributes. Again, these are only 3252 possible candidates. GCC will guess that `format' attributes 3253 might be appropriate for any function that calls a function like 3254 `vprintf' or `vscanf', but this might not always be the case, and 3255 some functions for which `format' attributes are appropriate may 3256 not be detected. 3257 3258 `-Wno-multichar' 3259 Do not warn if a multicharacter constant (`'FOOF'') is used. 3260 Usually they indicate a typo in the user's code, as they have 3261 implementation-defined values, and should not be used in portable 3262 code. 3263 3264 `-Wnormalized=<none|id|nfc|nfkc>' 3265 In ISO C and ISO C++, two identifiers are different if they are 3266 different sequences of characters. However, sometimes when 3267 characters outside the basic ASCII character set are used, you can 3268 have two different character sequences that look the same. To 3269 avoid confusion, the ISO 10646 standard sets out some 3270 "normalization rules" which when applied ensure that two sequences 3271 that look the same are turned into the same sequence. GCC can 3272 warn you if you are using identifiers which have not been 3273 normalized; this option controls that warning. 3274 3275 There are four levels of warning that GCC supports. The default is 3276 `-Wnormalized=nfc', which warns about any identifier which is not 3277 in the ISO 10646 "C" normalized form, "NFC". NFC is the 3278 recommended form for most uses. 3279 3280 Unfortunately, there are some characters which ISO C and ISO C++ 3281 allow in identifiers that when turned into NFC aren't allowable as 3282 identifiers. That is, there's no way to use these symbols in 3283 portable ISO C or C++ and have all your identifiers in NFC. 3284 `-Wnormalized=id' suppresses the warning for these characters. It 3285 is hoped that future versions of the standards involved will 3286 correct this, which is why this option is not the default. 3287 3288 You can switch the warning off for all characters by writing 3289 `-Wnormalized=none'. You would only want to do this if you were 3290 using some other normalization scheme (like "D"), because 3291 otherwise you can easily create bugs that are literally impossible 3292 to see. 3293 3294 Some characters in ISO 10646 have distinct meanings but look 3295 identical in some fonts or display methodologies, especially once 3296 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 3297 LATIN SMALL LETTER N", will display just like a regular `n' which 3298 has been placed in a superscript. ISO 10646 defines the "NFKC" 3299 normalization scheme to convert all these into a standard form as 3300 well, and GCC will warn if your code is not in NFKC if you use 3301 `-Wnormalized=nfkc'. This warning is comparable to warning about 3302 every identifier that contains the letter O because it might be 3303 confused with the digit 0, and so is not the default, but may be 3304 useful as a local coding convention if the programming environment 3305 is unable to be fixed to display these characters distinctly. 3306 3307 `-Wno-deprecated-declarations' 3308 Do not warn about uses of functions (*note Function Attributes::), 3309 variables (*note Variable Attributes::), and types (*note Type 3310 Attributes::) marked as deprecated by using the `deprecated' 3311 attribute. 3312 3313 `-Wno-overflow' 3314 Do not warn about compile-time overflow in constant expressions. 3315 3316 `-Woverride-init' 3317 Warn if an initialized field without side effects is overridden 3318 when using designated initializers (*note Designated Initializers: 3319 Designated Inits.). 3320 3321 This warning is included in `-Wextra'. To get other `-Wextra' 3322 warnings without this one, use `-Wextra -Wno-override-init'. 3323 3324 `-Wpacked' 3325 Warn if a structure is given the packed attribute, but the packed 3326 attribute has no effect on the layout or size of the structure. 3327 Such structures may be mis-aligned for little benefit. For 3328 instance, in this code, the variable `f.x' in `struct bar' will be 3329 misaligned even though `struct bar' does not itself have the 3330 packed attribute: 3331 3332 struct foo { 3333 int x; 3334 char a, b, c, d; 3335 } __attribute__((packed)); 3336 struct bar { 3337 char z; 3338 struct foo f; 3339 }; 3340 3341 `-Wpadded' 3342 Warn if padding is included in a structure, either to align an 3343 element of the structure or to align the whole structure. 3344 Sometimes when this happens it is possible to rearrange the fields 3345 of the structure to reduce the padding and so make the structure 3346 smaller. 3347 3348 `-Wredundant-decls' 3349 Warn if anything is declared more than once in the same scope, 3350 even in cases where multiple declaration is valid and changes 3351 nothing. 3352 3353 `-Wnested-externs (C only)' 3354 Warn if an `extern' declaration is encountered within a function. 3355 3356 `-Wunreachable-code' 3357 Warn if the compiler detects that code will never be executed. 3358 3359 This option is intended to warn when the compiler detects that at 3360 least a whole line of source code will never be executed, because 3361 some condition is never satisfied or because it is after a 3362 procedure that never returns. 3363 3364 It is possible for this option to produce a warning even though 3365 there are circumstances under which part of the affected line can 3366 be executed, so care should be taken when removing 3367 apparently-unreachable code. 3368 3369 For instance, when a function is inlined, a warning may mean that 3370 the line is unreachable in only one inlined copy of the function. 3371 3372 This option is not made part of `-Wall' because in a debugging 3373 version of a program there is often substantial code which checks 3374 correct functioning of the program and is, hopefully, unreachable 3375 because the program does work. Another common use of unreachable 3376 code is to provide behavior which is selectable at compile-time. 3377 3378 `-Winline' 3379 Warn if a function can not be inlined and it was declared as 3380 inline. Even with this option, the compiler will not warn about 3381 failures to inline functions declared in system headers. 3382 3383 The compiler uses a variety of heuristics to determine whether or 3384 not to inline a function. For example, the compiler takes into 3385 account the size of the function being inlined and the amount of 3386 inlining that has already been done in the current function. 3387 Therefore, seemingly insignificant changes in the source program 3388 can cause the warnings produced by `-Winline' to appear or 3389 disappear. 3390 3391 `-Wno-invalid-offsetof (C++ only)' 3392 Suppress warnings from applying the `offsetof' macro to a non-POD 3393 type. According to the 1998 ISO C++ standard, applying `offsetof' 3394 to a non-POD type is undefined. In existing C++ implementations, 3395 however, `offsetof' typically gives meaningful results even when 3396 applied to certain kinds of non-POD types. (Such as a simple 3397 `struct' that fails to be a POD type only by virtue of having a 3398 constructor.) This flag is for users who are aware that they are 3399 writing nonportable code and who have deliberately chosen to 3400 ignore the warning about it. 3401 3402 The restrictions on `offsetof' may be relaxed in a future version 3403 of the C++ standard. 3404 3405 `-Wno-int-to-pointer-cast (C only)' 3406 Suppress warnings from casts to pointer type of an integer of a 3407 different size. 3408 3409 `-Wno-pointer-to-int-cast (C only)' 3410 Suppress warnings from casts from a pointer to an integer type of a 3411 different size. 3412 3413 `-Winvalid-pch' 3414 Warn if a precompiled header (*note Precompiled Headers::) is 3415 found in the search path but can't be used. 3416 3417 `-Wlong-long' 3418 Warn if `long long' type is used. This is default. To inhibit 3419 the warning messages, use `-Wno-long-long'. Flags `-Wlong-long' 3420 and `-Wno-long-long' are taken into account only when `-pedantic' 3421 flag is used. 3422 3423 `-Wvariadic-macros' 3424 Warn if variadic macros are used in pedantic ISO C90 mode, or the 3425 GNU alternate syntax when in pedantic ISO C99 mode. This is 3426 default. To inhibit the warning messages, use 3427 `-Wno-variadic-macros'. 3428 3429 `-Wvla' 3430 Warn if variable length array is used in the code. `-Wno-vla' 3431 will prevent the `-pedantic' warning of the variable length array. 3432 3433 `-Wvolatile-register-var' 3434 Warn if a register variable is declared volatile. The volatile 3435 modifier does not inhibit all optimizations that may eliminate 3436 reads and/or writes to register variables. 3437 3438 `-Wdisabled-optimization' 3439 Warn if a requested optimization pass is disabled. This warning 3440 does not generally indicate that there is anything wrong with your 3441 code; it merely indicates that GCC's optimizers were unable to 3442 handle the code effectively. Often, the problem is that your code 3443 is too big or too complex; GCC will refuse to optimize programs 3444 when the optimization itself is likely to take inordinate amounts 3445 of time. 3446 3447 `-Wpointer-sign' 3448 Warn for pointer argument passing or assignment with different 3449 signedness. This option is only supported for C and Objective-C. 3450 It is implied by `-Wall' and by `-pedantic', which can be disabled 3451 with `-Wno-pointer-sign'. 3452 3453 `-Werror' 3454 Make all warnings into errors. 3455 3456 `-Werror=' 3457 Make the specified warning into an errors. The specifier for a 3458 warning is appended, for example `-Werror=switch' turns the 3459 warnings controlled by `-Wswitch' into errors. This switch takes 3460 a negative form, to be used to negate `-Werror' for specific 3461 warnings, for example `-Wno-error=switch' makes `-Wswitch' 3462 warnings not be errors, even when `-Werror' is in effect. You can 3463 use the `-fdiagnostics-show-option' option to have each 3464 controllable warning amended with the option which controls it, to 3465 determine what to use with this option. 3466 3467 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 3468 However, `-Wno-error='FOO does not imply anything. 3469 3470 `-Wstack-protector' 3471 This option is only active when `-fstack-protector' is active. It 3472 warns about functions that will not be protected against stack 3473 smashing. 3474 3475 `-Woverlength-strings' 3476 Warn about string constants which are longer than the "minimum 3477 maximum" length specified in the C standard. Modern compilers 3478 generally allow string constants which are much longer than the 3479 standard's minimum limit, but very portable programs should avoid 3480 using longer strings. 3481 3482 The limit applies _after_ string constant concatenation, and does 3483 not count the trailing NUL. In C89, the limit was 509 characters; 3484 in C99, it was raised to 4095. C++98 does not specify a normative 3485 minimum maximum, so we do not diagnose overlength strings in C++. 3486 3487 This option is implied by `-pedantic', and can be disabled with 3488 `-Wno-overlength-strings'. 3489 3490 3491 File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 3492 3493 3.9 Options for Debugging Your Program or GCC 3494 ============================================= 3495 3496 GCC has various special options that are used for debugging either your 3497 program or GCC: 3498 3499 `-g' 3500 Produce debugging information in the operating system's native 3501 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 3502 debugging information. 3503 3504 On most systems that use stabs format, `-g' enables use of extra 3505 debugging information that only GDB can use; this extra information 3506 makes debugging work better in GDB but will probably make other 3507 debuggers crash or refuse to read the program. If you want to 3508 control for certain whether to generate the extra information, use 3509 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 3510 below). 3511 3512 GCC allows you to use `-g' with `-O'. The shortcuts taken by 3513 optimized code may occasionally produce surprising results: some 3514 variables you declared may not exist at all; flow of control may 3515 briefly move where you did not expect it; some statements may not 3516 be executed because they compute constant results or their values 3517 were already at hand; some statements may execute in different 3518 places because they were moved out of loops. 3519 3520 Nevertheless it proves possible to debug optimized output. This 3521 makes it reasonable to use the optimizer for programs that might 3522 have bugs. 3523 3524 The following options are useful when GCC is generated with the 3525 capability for more than one debugging format. 3526 3527 `-ggdb' 3528 Produce debugging information for use by GDB. This means to use 3529 the most expressive format available (DWARF 2, stabs, or the 3530 native format if neither of those are supported), including GDB 3531 extensions if at all possible. 3532 3533 `-gstabs' 3534 Produce debugging information in stabs format (if that is 3535 supported), without GDB extensions. This is the format used by 3536 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 3537 systems this option produces stabs debugging output which is not 3538 understood by DBX or SDB. On System V Release 4 systems this 3539 option requires the GNU assembler. 3540 3541 `-feliminate-unused-debug-symbols' 3542 Produce debugging information in stabs format (if that is 3543 supported), for only symbols that are actually used. 3544 3545 `-femit-class-debug-always' 3546 Instead of emitting debugging information for a C++ class in only 3547 one object file, emit it in all object files using the class. 3548 This option should be used only with debuggers that are unable to 3549 handle the way GCC normally emits debugging information for 3550 classes because using this option will increase the size of 3551 debugging information by as much as a factor of two. 3552 3553 `-gstabs+' 3554 Produce debugging information in stabs format (if that is 3555 supported), using GNU extensions understood only by the GNU 3556 debugger (GDB). The use of these extensions is likely to make 3557 other debuggers crash or refuse to read the program. 3558 3559 `-gcoff' 3560 Produce debugging information in COFF format (if that is 3561 supported). This is the format used by SDB on most System V 3562 systems prior to System V Release 4. 3563 3564 `-gxcoff' 3565 Produce debugging information in XCOFF format (if that is 3566 supported). This is the format used by the DBX debugger on IBM 3567 RS/6000 systems. 3568 3569 `-gxcoff+' 3570 Produce debugging information in XCOFF format (if that is 3571 supported), using GNU extensions understood only by the GNU 3572 debugger (GDB). The use of these extensions is likely to make 3573 other debuggers crash or refuse to read the program, and may cause 3574 assemblers other than the GNU assembler (GAS) to fail with an 3575 error. 3576 3577 `-gdwarf-2' 3578 Produce debugging information in DWARF version 2 format (if that is 3579 supported). This is the format used by DBX on IRIX 6. With this 3580 option, GCC uses features of DWARF version 3 when they are useful; 3581 version 3 is upward compatible with version 2, but may still cause 3582 problems for older debuggers. 3583 3584 `-gvms' 3585 Produce debugging information in VMS debug format (if that is 3586 supported). This is the format used by DEBUG on VMS systems. 3587 3588 `-gLEVEL' 3589 `-ggdbLEVEL' 3590 `-gstabsLEVEL' 3591 `-gcoffLEVEL' 3592 `-gxcoffLEVEL' 3593 `-gvmsLEVEL' 3594 Request debugging information and also use LEVEL to specify how 3595 much information. The default level is 2. 3596 3597 Level 1 produces minimal information, enough for making backtraces 3598 in parts of the program that you don't plan to debug. This 3599 includes descriptions of functions and external variables, but no 3600 information about local variables and no line numbers. 3601 3602 Level 3 includes extra information, such as all the macro 3603 definitions present in the program. Some debuggers support macro 3604 expansion when you use `-g3'. 3605 3606 `-gdwarf-2' does not accept a concatenated debug level, because 3607 GCC used to support an option `-gdwarf' that meant to generate 3608 debug information in version 1 of the DWARF format (which is very 3609 different from version 2), and it would have been too confusing. 3610 That debug format is long obsolete, but the option cannot be 3611 changed now. Instead use an additional `-gLEVEL' option to change 3612 the debug level for DWARF2. 3613 3614 `-feliminate-dwarf2-dups' 3615 Compress DWARF2 debugging information by eliminating duplicated 3616 information about each symbol. This option only makes sense when 3617 generating DWARF2 debugging information with `-gdwarf-2'. 3618 3619 `-femit-struct-debug-baseonly' 3620 Emit debug information for struct-like types only when the base 3621 name of the compilation source file matches the base name of file 3622 in which the struct was defined. 3623 3624 This option substantially reduces the size of debugging 3625 information, but at significant potential loss in type information 3626 to the debugger. See `-femit-struct-debug-reduced' for a less 3627 aggressive option. See `-femit-struct-debug-detailed' for more 3628 detailed control. 3629 3630 This option works only with DWARF 2. 3631 3632 `-femit-struct-debug-reduced' 3633 Emit debug information for struct-like types only when the base 3634 name of the compilation source file matches the base name of file 3635 in which the type was defined, unless the struct is a template or 3636 defined in a system header. 3637 3638 This option significantly reduces the size of debugging 3639 information, with some potential loss in type information to the 3640 debugger. See `-femit-struct-debug-baseonly' for a more 3641 aggressive option. See `-femit-struct-debug-detailed' for more 3642 detailed control. 3643 3644 This option works only with DWARF 2. 3645 3646 `-femit-struct-debug-detailed[=SPEC-LIST]' 3647 Specify the struct-like types for which the compiler will generate 3648 debug information. The intent is to reduce duplicate struct debug 3649 information between different object files within the same program. 3650 3651 This option is a detailed version of `-femit-struct-debug-reduced' 3652 and `-femit-struct-debug-baseonly', which will serve for most 3653 needs. 3654 3655 A specification has the syntax 3656 [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none') 3657 3658 The optional first word limits the specification to structs that 3659 are used directly (`dir:') or used indirectly (`ind:'). A struct 3660 type is used directly when it is the type of a variable, member. 3661 Indirect uses arise through pointers to structs. That is, when 3662 use of an incomplete struct would be legal, the use is indirect. 3663 An example is `struct one direct; struct two * indirect;'. 3664 3665 The optional second word limits the specification to ordinary 3666 structs (`ord:') or generic structs (`gen:'). Generic structs are 3667 a bit complicated to explain. For C++, these are non-explicit 3668 specializations of template classes, or non-template classes 3669 within the above. Other programming languages have generics, but 3670 `-femit-struct-debug-detailed' does not yet implement them. 3671 3672 The third word specifies the source files for those structs for 3673 which the compiler will emit debug information. The values `none' 3674 and `any' have the normal meaning. The value `base' means that 3675 the base of name of the file in which the type declaration appears 3676 must match the base of the name of the main compilation file. In 3677 practice, this means that types declared in `foo.c' and `foo.h' 3678 will have debug information, but types declared in other header 3679 will not. The value `sys' means those types satisfying `base' or 3680 declared in system or compiler headers. 3681 3682 You may need to experiment to determine the best settings for your 3683 application. 3684 3685 The default is `-femit-struct-debug-detailed=all'. 3686 3687 This option works only with DWARF 2. 3688 3689 `-p' 3690 Generate extra code to write profile information suitable for the 3691 analysis program `prof'. You must use this option when compiling 3692 the source files you want data about, and you must also use it when 3693 linking. 3694 3695 `-pg' 3696 Generate extra code to write profile information suitable for the 3697 analysis program `gprof'. You must use this option when compiling 3698 the source files you want data about, and you must also use it when 3699 linking. 3700 3701 `-Q' 3702 Makes the compiler print out each function name as it is compiled, 3703 and print some statistics about each pass when it finishes. 3704 3705 `-ftime-report' 3706 Makes the compiler print some statistics about the time consumed 3707 by each pass when it finishes. 3708 3709 `-fmem-report' 3710 Makes the compiler print some statistics about permanent memory 3711 allocation when it finishes. 3712 3713 `-fprofile-arcs' 3714 Add code so that program flow "arcs" are instrumented. During 3715 execution the program records how many times each branch and call 3716 is executed and how many times it is taken or returns. When the 3717 compiled program exits it saves this data to a file called 3718 `AUXNAME.gcda' for each source file. The data may be used for 3719 profile-directed optimizations (`-fbranch-probabilities'), or for 3720 test coverage analysis (`-ftest-coverage'). Each object file's 3721 AUXNAME is generated from the name of the output file, if 3722 explicitly specified and it is not the final executable, otherwise 3723 it is the basename of the source file. In both cases any suffix 3724 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 3725 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 3726 *Note Cross-profiling::. 3727 3728 `--coverage' 3729 This option is used to compile and link code instrumented for 3730 coverage analysis. The option is a synonym for `-fprofile-arcs' 3731 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 3732 See the documentation for those options for more details. 3733 3734 * Compile the source files with `-fprofile-arcs' plus 3735 optimization and code generation options. For test coverage 3736 analysis, use the additional `-ftest-coverage' option. You 3737 do not need to profile every source file in a program. 3738 3739 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 3740 latter implies the former). 3741 3742 * Run the program on a representative workload to generate the 3743 arc profile information. This may be repeated any number of 3744 times. You can run concurrent instances of your program, and 3745 provided that the file system supports locking, the data 3746 files will be correctly updated. Also `fork' calls are 3747 detected and correctly handled (double counting will not 3748 happen). 3749 3750 * For profile-directed optimizations, compile the source files 3751 again with the same optimization and code generation options 3752 plus `-fbranch-probabilities' (*note Options that Control 3753 Optimization: Optimize Options.). 3754 3755 * For test coverage analysis, use `gcov' to produce human 3756 readable information from the `.gcno' and `.gcda' files. 3757 Refer to the `gcov' documentation for further information. 3758 3759 3760 With `-fprofile-arcs', for each function of your program GCC 3761 creates a program flow graph, then finds a spanning tree for the 3762 graph. Only arcs that are not on the spanning tree have to be 3763 instrumented: the compiler adds code to count the number of times 3764 that these arcs are executed. When an arc is the only exit or 3765 only entrance to a block, the instrumentation code can be added to 3766 the block; otherwise, a new basic block must be created to hold 3767 the instrumentation code. 3768 3769 `-ftest-coverage' 3770 Produce a notes file that the `gcov' code-coverage utility (*note 3771 `gcov'--a Test Coverage Program: Gcov.) can use to show program 3772 coverage. Each source file's note file is called `AUXNAME.gcno'. 3773 Refer to the `-fprofile-arcs' option above for a description of 3774 AUXNAME and instructions on how to generate test coverage data. 3775 Coverage data will match the source files more closely, if you do 3776 not optimize. 3777 3778 `-dLETTERS' 3779 3780 `-fdump-rtl-PASS' 3781 Says to make debugging dumps during compilation at times specified 3782 by LETTERS. This is used for debugging the RTL-based passes of 3783 the compiler. The file names for most of the dumps are made by 3784 appending a pass number and a word to the DUMPNAME. DUMPNAME is 3785 generated from the name of the output file, if explicitly 3786 specified and it is not an executable, otherwise it is the 3787 basename of the source file. 3788 3789 Most debug dumps can be enabled either passing a letter to the `-d' 3790 option, or with a long `-fdump-rtl' switch; here are the possible 3791 letters for use in LETTERS and PASS, and their meanings: 3792 3793 `-dA' 3794 Annotate the assembler output with miscellaneous debugging 3795 information. 3796 3797 `-dB' 3798 `-fdump-rtl-bbro' 3799 Dump after block reordering, to `FILE.148r.bbro'. 3800 3801 `-dc' 3802 `-fdump-rtl-combine' 3803 Dump after instruction combination, to the file 3804 `FILE.129r.combine'. 3805 3806 `-dC' 3807 `-fdump-rtl-ce1' 3808 `-fdump-rtl-ce2' 3809 `-dC' and `-fdump-rtl-ce1' enable dumping after the first if 3810 conversion, to the file `FILE.117r.ce1'. `-dC' and 3811 `-fdump-rtl-ce2' enable dumping after the second if 3812 conversion, to the file `FILE.130r.ce2'. 3813 3814 `-dd' 3815 `-fdump-rtl-btl' 3816 `-fdump-rtl-dbr' 3817 `-dd' and `-fdump-rtl-btl' enable dumping after branch target 3818 load optimization, to `FILE.31.btl'. `-dd' and 3819 `-fdump-rtl-dbr' enable dumping after delayed branch 3820 scheduling, to `FILE.36.dbr'. 3821 3822 `-dD' 3823 Dump all macro definitions, at the end of preprocessing, in 3824 addition to normal output. 3825 3826 `-dE' 3827 `-fdump-rtl-ce3' 3828 Dump after the third if conversion, to `FILE.146r.ce3'. 3829 3830 `-df' 3831 `-fdump-rtl-cfg' 3832 `-fdump-rtl-life' 3833 `-df' and `-fdump-rtl-cfg' enable dumping after control and 3834 data flow analysis, to `FILE.116r.cfg'. `-df' and 3835 `-fdump-rtl-cfg' enable dumping dump after life analysis, to 3836 `FILE.128r.life1' and `FILE.135r.life2'. 3837 3838 `-dg' 3839 `-fdump-rtl-greg' 3840 Dump after global register allocation, to `FILE.139r.greg'. 3841 3842 `-dG' 3843 `-fdump-rtl-gcse' 3844 `-fdump-rtl-bypass' 3845 `-dG' and `-fdump-rtl-gcse' enable dumping after GCSE, to 3846 `FILE.114r.gcse'. `-dG' and `-fdump-rtl-bypass' enable 3847 dumping after jump bypassing and control flow optimizations, 3848 to `FILE.115r.bypass'. 3849 3850 `-dh' 3851 `-fdump-rtl-eh' 3852 Dump after finalization of EH handling code, to `FILE.02.eh'. 3853 3854 `-di' 3855 `-fdump-rtl-sibling' 3856 Dump after sibling call optimizations, to `FILE.106r.sibling'. 3857 3858 `-dj' 3859 `-fdump-rtl-jump' 3860 Dump after the first jump optimization, to `FILE.112r.jump'. 3861 3862 `-dk' 3863 `-fdump-rtl-stack' 3864 Dump after conversion from registers to stack, to 3865 `FILE.152r.stack'. 3866 3867 `-dl' 3868 `-fdump-rtl-lreg' 3869 Dump after local register allocation, to `FILE.138r.lreg'. 3870 3871 `-dL' 3872 `-fdump-rtl-loop2' 3873 `-dL' and `-fdump-rtl-loop2' enable dumping after the loop 3874 optimization pass, to `FILE.119r.loop2', 3875 `FILE.120r.loop2_init', `FILE.121r.loop2_invariant', and 3876 `FILE.125r.loop2_done'. 3877 3878 `-dm' 3879 `-fdump-rtl-sms' 3880 Dump after modulo scheduling, to `FILE.136r.sms'. 3881 3882 `-dM' 3883 `-fdump-rtl-mach' 3884 Dump after performing the machine dependent reorganization 3885 pass, to `FILE.155r.mach'. 3886 3887 `-dn' 3888 `-fdump-rtl-rnreg' 3889 Dump after register renumbering, to `FILE.147r.rnreg'. 3890 3891 `-dN' 3892 `-fdump-rtl-regmove' 3893 Dump after the register move pass, to `FILE.132r.regmove'. 3894 3895 `-do' 3896 `-fdump-rtl-postreload' 3897 Dump after post-reload optimizations, to `FILE.24.postreload'. 3898 3899 `-dr' 3900 `-fdump-rtl-expand' 3901 Dump after RTL generation, to `FILE.104r.expand'. 3902 3903 `-dR' 3904 `-fdump-rtl-sched2' 3905 Dump after the second scheduling pass, to `FILE.150r.sched2'. 3906 3907 `-ds' 3908 `-fdump-rtl-cse' 3909 Dump after CSE (including the jump optimization that 3910 sometimes follows CSE), to `FILE.113r.cse'. 3911 3912 `-dS' 3913 `-fdump-rtl-sched' 3914 Dump after the first scheduling pass, to `FILE.21.sched'. 3915 3916 `-dt' 3917 `-fdump-rtl-cse2' 3918 Dump after the second CSE pass (including the jump 3919 optimization that sometimes follows CSE), to `FILE.127r.cse2'. 3920 3921 `-dT' 3922 `-fdump-rtl-tracer' 3923 Dump after running tracer, to `FILE.118r.tracer'. 3924 3925 `-dV' 3926 `-fdump-rtl-vpt' 3927 `-fdump-rtl-vartrack' 3928 `-dV' and `-fdump-rtl-vpt' enable dumping after the value 3929 profile transformations, to `FILE.10.vpt'. `-dV' and 3930 `-fdump-rtl-vartrack' enable dumping after variable tracking, 3931 to `FILE.154r.vartrack'. 3932 3933 `-dw' 3934 `-fdump-rtl-flow2' 3935 Dump after the second flow pass, to `FILE.142r.flow2'. 3936 3937 `-dz' 3938 `-fdump-rtl-peephole2' 3939 Dump after the peephole pass, to `FILE.145r.peephole2'. 3940 3941 `-dZ' 3942 `-fdump-rtl-web' 3943 Dump after live range splitting, to `FILE.126r.web'. 3944 3945 `-da' 3946 `-fdump-rtl-all' 3947 Produce all the dumps listed above. 3948 3949 `-dH' 3950 Produce a core dump whenever an error occurs. 3951 3952 `-dm' 3953 Print statistics on memory usage, at the end of the run, to 3954 standard error. 3955 3956 `-dp' 3957 Annotate the assembler output with a comment indicating which 3958 pattern and alternative was used. The length of each 3959 instruction is also printed. 3960 3961 `-dP' 3962 Dump the RTL in the assembler output as a comment before each 3963 instruction. Also turns on `-dp' annotation. 3964 3965 `-dv' 3966 For each of the other indicated dump files (either with `-d' 3967 or `-fdump-rtl-PASS'), dump a representation of the control 3968 flow graph suitable for viewing with VCG to `FILE.PASS.vcg'. 3969 3970 `-dx' 3971 Just generate RTL for a function instead of compiling it. 3972 Usually used with `r' (`-fdump-rtl-expand'). 3973 3974 `-dy' 3975 Dump debugging information during parsing, to standard error. 3976 3977 `-fdump-noaddr' 3978 When doing debugging dumps (see `-d' option above), suppress 3979 address output. This makes it more feasible to use diff on 3980 debugging dumps for compiler invocations with different compiler 3981 binaries and/or different text / bss / data / heap / stack / dso 3982 start locations. 3983 3984 `-fdump-unnumbered' 3985 When doing debugging dumps (see `-d' option above), suppress 3986 instruction numbers, line number note and address output. This 3987 makes it more feasible to use diff on debugging dumps for compiler 3988 invocations with different options, in particular with and without 3989 `-g'. 3990 3991 `-fdump-translation-unit (C++ only)' 3992 `-fdump-translation-unit-OPTIONS (C++ only)' 3993 Dump a representation of the tree structure for the entire 3994 translation unit to a file. The file name is made by appending 3995 `.tu' to the source file name. If the `-OPTIONS' form is used, 3996 OPTIONS controls the details of the dump as described for the 3997 `-fdump-tree' options. 3998 3999 `-fdump-class-hierarchy (C++ only)' 4000 `-fdump-class-hierarchy-OPTIONS (C++ only)' 4001 Dump a representation of each class's hierarchy and virtual 4002 function table layout to a file. The file name is made by 4003 appending `.class' to the source file name. If the `-OPTIONS' 4004 form is used, OPTIONS controls the details of the dump as 4005 described for the `-fdump-tree' options. 4006 4007 `-fdump-ipa-SWITCH' 4008 Control the dumping at various stages of inter-procedural analysis 4009 language tree to a file. The file name is generated by appending 4010 a switch specific suffix to the source file name. The following 4011 dumps are possible: 4012 4013 `all' 4014 Enables all inter-procedural analysis dumps; currently the 4015 only produced dump is the `cgraph' dump. 4016 4017 `cgraph' 4018 Dumps information about call-graph optimization, unused 4019 function removal, and inlining decisions. 4020 4021 `-fdump-tree-SWITCH' 4022 `-fdump-tree-SWITCH-OPTIONS' 4023 Control the dumping at various stages of processing the 4024 intermediate language tree to a file. The file name is generated 4025 by appending a switch specific suffix to the source file name. If 4026 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 4027 options that control the details of the dump. Not all options are 4028 applicable to all dumps, those which are not meaningful will be 4029 ignored. The following options are available 4030 4031 `address' 4032 Print the address of each node. Usually this is not 4033 meaningful as it changes according to the environment and 4034 source file. Its primary use is for tying up a dump file 4035 with a debug environment. 4036 4037 `slim' 4038 Inhibit dumping of members of a scope or body of a function 4039 merely because that scope has been reached. Only dump such 4040 items when they are directly reachable by some other path. 4041 When dumping pretty-printed trees, this option inhibits 4042 dumping the bodies of control structures. 4043 4044 `raw' 4045 Print a raw representation of the tree. By default, trees are 4046 pretty-printed into a C-like representation. 4047 4048 `details' 4049 Enable more detailed dumps (not honored by every dump option). 4050 4051 `stats' 4052 Enable dumping various statistics about the pass (not honored 4053 by every dump option). 4054 4055 `blocks' 4056 Enable showing basic block boundaries (disabled in raw dumps). 4057 4058 `vops' 4059 Enable showing virtual operands for every statement. 4060 4061 `lineno' 4062 Enable showing line numbers for statements. 4063 4064 `uid' 4065 Enable showing the unique ID (`DECL_UID') for each variable. 4066 4067 `all' 4068 Turn on all options, except `raw', `slim' and `lineno'. 4069 4070 The following tree dumps are possible: 4071 `original' 4072 Dump before any tree based optimization, to `FILE.original'. 4073 4074 `optimized' 4075 Dump after all tree based optimization, to `FILE.optimized'. 4076 4077 `inlined' 4078 Dump after function inlining, to `FILE.inlined'. 4079 4080 `gimple' 4081 Dump each function before and after the gimplification pass 4082 to a file. The file name is made by appending `.gimple' to 4083 the source file name. 4084 4085 `cfg' 4086 Dump the control flow graph of each function to a file. The 4087 file name is made by appending `.cfg' to the source file name. 4088 4089 `vcg' 4090 Dump the control flow graph of each function to a file in VCG 4091 format. The file name is made by appending `.vcg' to the 4092 source file name. Note that if the file contains more than 4093 one function, the generated file cannot be used directly by 4094 VCG. You will need to cut and paste each function's graph 4095 into its own separate file first. 4096 4097 `ch' 4098 Dump each function after copying loop headers. The file name 4099 is made by appending `.ch' to the source file name. 4100 4101 `ssa' 4102 Dump SSA related information to a file. The file name is 4103 made by appending `.ssa' to the source file name. 4104 4105 `salias' 4106 Dump structure aliasing variable information to a file. This 4107 file name is made by appending `.salias' to the source file 4108 name. 4109 4110 `alias' 4111 Dump aliasing information for each function. The file name 4112 is made by appending `.alias' to the source file name. 4113 4114 `ccp' 4115 Dump each function after CCP. The file name is made by 4116 appending `.ccp' to the source file name. 4117 4118 `storeccp' 4119 Dump each function after STORE-CCP. The file name is made by 4120 appending `.storeccp' to the source file name. 4121 4122 `pre' 4123 Dump trees after partial redundancy elimination. The file 4124 name is made by appending `.pre' to the source file name. 4125 4126 `fre' 4127 Dump trees after full redundancy elimination. The file name 4128 is made by appending `.fre' to the source file name. 4129 4130 `copyprop' 4131 Dump trees after copy propagation. The file name is made by 4132 appending `.copyprop' to the source file name. 4133 4134 `store_copyprop' 4135 Dump trees after store copy-propagation. The file name is 4136 made by appending `.store_copyprop' to the source file name. 4137 4138 `dce' 4139 Dump each function after dead code elimination. The file 4140 name is made by appending `.dce' to the source file name. 4141 4142 `mudflap' 4143 Dump each function after adding mudflap instrumentation. The 4144 file name is made by appending `.mudflap' to the source file 4145 name. 4146 4147 `sra' 4148 Dump each function after performing scalar replacement of 4149 aggregates. The file name is made by appending `.sra' to the 4150 source file name. 4151 4152 `sink' 4153 Dump each function after performing code sinking. The file 4154 name is made by appending `.sink' to the source file name. 4155 4156 `dom' 4157 Dump each function after applying dominator tree 4158 optimizations. The file name is made by appending `.dom' to 4159 the source file name. 4160 4161 `dse' 4162 Dump each function after applying dead store elimination. 4163 The file name is made by appending `.dse' to the source file 4164 name. 4165 4166 `phiopt' 4167 Dump each function after optimizing PHI nodes into 4168 straightline code. The file name is made by appending 4169 `.phiopt' to the source file name. 4170 4171 `forwprop' 4172 Dump each function after forward propagating single use 4173 variables. The file name is made by appending `.forwprop' to 4174 the source file name. 4175 4176 `copyrename' 4177 Dump each function after applying the copy rename 4178 optimization. The file name is made by appending 4179 `.copyrename' to the source file name. 4180 4181 `nrv' 4182 Dump each function after applying the named return value 4183 optimization on generic trees. The file name is made by 4184 appending `.nrv' to the source file name. 4185 4186 `vect' 4187 Dump each function after applying vectorization of loops. 4188 The file name is made by appending `.vect' to the source file 4189 name. 4190 4191 `vrp' 4192 Dump each function after Value Range Propagation (VRP). The 4193 file name is made by appending `.vrp' to the source file name. 4194 4195 `all' 4196 Enable all the available tree dumps with the flags provided 4197 in this option. 4198 4199 `-ftree-vectorizer-verbose=N' 4200 This option controls the amount of debugging output the vectorizer 4201 prints. This information is written to standard error, unless 4202 `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which 4203 case it is output to the usual dump listing file, `.vect'. For 4204 N=0 no diagnostic information is reported. If N=1 the vectorizer 4205 reports each loop that got vectorized, and the total number of 4206 loops that got vectorized. If N=2 the vectorizer also reports 4207 non-vectorized loops that passed the first analysis phase 4208 (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb, 4209 single-entry/exit loops. This is the same verbosity level that 4210 `-fdump-tree-vect-stats' uses. Higher verbosity levels mean 4211 either more information dumped for each reported loop, or same 4212 amount of information reported for more loops: If N=3, alignment 4213 related information is added to the reports. If N=4, 4214 data-references related information (e.g. memory dependences, 4215 memory access-patterns) is added to the reports. If N=5, the 4216 vectorizer reports also non-vectorized inner-most loops that did 4217 not pass the first analysis phase (i.e. may not be countable, or 4218 may have complicated control-flow). If N=6, the vectorizer 4219 reports also non-vectorized nested loops. For N=7, all the 4220 information the vectorizer generates during its analysis and 4221 transformation is reported. This is the same verbosity level that 4222 `-fdump-tree-vect-details' uses. 4223 4224 `-frandom-seed=STRING' 4225 This option provides a seed that GCC uses when it would otherwise 4226 use random numbers. It is used to generate certain symbol names 4227 that have to be different in every compiled file. It is also used 4228 to place unique stamps in coverage data files and the object files 4229 that produce them. You can use the `-frandom-seed' option to 4230 produce reproducibly identical object files. 4231 4232 The STRING should be different for every file you compile. 4233 4234 `-fsched-verbose=N' 4235 On targets that use instruction scheduling, this option controls 4236 the amount of debugging output the scheduler prints. This 4237 information is written to standard error, unless `-dS' or `-dR' is 4238 specified, in which case it is output to the usual dump listing 4239 file, `.sched' or `.sched2' respectively. However for N greater 4240 than nine, the output is always printed to standard error. 4241 4242 For N greater than zero, `-fsched-verbose' outputs the same 4243 information as `-dRS'. For N greater than one, it also output 4244 basic block probabilities, detailed ready list information and 4245 unit/insn info. For N greater than two, it includes RTL at abort 4246 point, control-flow and regions info. And for N over four, 4247 `-fsched-verbose' also includes dependence info. 4248 4249 `-save-temps' 4250 Store the usual "temporary" intermediate files permanently; place 4251 them in the current directory and name them based on the source 4252 file. Thus, compiling `foo.c' with `-c -save-temps' would produce 4253 files `foo.i' and `foo.s', as well as `foo.o'. This creates a 4254 preprocessed `foo.i' output file even though the compiler now 4255 normally uses an integrated preprocessor. 4256 4257 When used in combination with the `-x' command line option, 4258 `-save-temps' is sensible enough to avoid over writing an input 4259 source file with the same extension as an intermediate file. The 4260 corresponding intermediate file may be obtained by renaming the 4261 source file before using `-save-temps'. 4262 4263 `-time' 4264 Report the CPU time taken by each subprocess in the compilation 4265 sequence. For C source files, this is the compiler proper and 4266 assembler (plus the linker if linking is done). The output looks 4267 like this: 4268 4269 # cc1 0.12 0.01 4270 # as 0.00 0.01 4271 4272 The first number on each line is the "user time", that is time 4273 spent executing the program itself. The second number is "system 4274 time", time spent executing operating system routines on behalf of 4275 the program. Both numbers are in seconds. 4276 4277 `-fvar-tracking' 4278 Run variable tracking pass. It computes where variables are 4279 stored at each position in code. Better debugging information is 4280 then generated (if the debugging information format supports this 4281 information). 4282 4283 It is enabled by default when compiling with optimization (`-Os', 4284 `-O', `-O2', ...), debugging information (`-g') and the debug info 4285 format supports it. 4286 4287 `-print-file-name=LIBRARY' 4288 Print the full absolute name of the library file LIBRARY that 4289 would be used when linking--and don't do anything else. With this 4290 option, GCC does not compile or link anything; it just prints the 4291 file name. 4292 4293 `-print-multi-directory' 4294 Print the directory name corresponding to the multilib selected by 4295 any other switches present in the command line. This directory is 4296 supposed to exist in `GCC_EXEC_PREFIX'. 4297 4298 `-print-multi-lib' 4299 Print the mapping from multilib directory names to compiler 4300 switches that enable them. The directory name is separated from 4301 the switches by `;', and each switch starts with an `@' instead of 4302 the `-', without spaces between multiple switches. This is 4303 supposed to ease shell-processing. 4304 4305 `-print-prog-name=PROGRAM' 4306 Like `-print-file-name', but searches for a program such as `cpp'. 4307 4308 `-print-libgcc-file-name' 4309 Same as `-print-file-name=libgcc.a'. 4310 4311 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 4312 you do want to link with `libgcc.a'. You can do 4313 4314 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 4315 4316 `-print-search-dirs' 4317 Print the name of the configured installation directory and a list 4318 of program and library directories `gcc' will search--and don't do 4319 anything else. 4320 4321 This is useful when `gcc' prints the error message `installation 4322 problem, cannot exec cpp0: No such file or directory'. To resolve 4323 this you either need to put `cpp0' and the other compiler 4324 components where `gcc' expects to find them, or you can set the 4325 environment variable `GCC_EXEC_PREFIX' to the directory where you 4326 installed them. Don't forget the trailing `/'. *Note Environment 4327 Variables::. 4328 4329 `-dumpmachine' 4330 Print the compiler's target machine (for example, 4331 `i686-pc-linux-gnu')--and don't do anything else. 4332 4333 `-dumpversion' 4334 Print the compiler version (for example, `3.0')--and don't do 4335 anything else. 4336 4337 `-dumpspecs' 4338 Print the compiler's built-in specs--and don't do anything else. 4339 (This is used when GCC itself is being built.) *Note Spec Files::. 4340 4341 `-feliminate-unused-debug-types' 4342 Normally, when producing DWARF2 output, GCC will emit debugging 4343 information for all types declared in a compilation unit, 4344 regardless of whether or not they are actually used in that 4345 compilation unit. Sometimes this is useful, such as if, in the 4346 debugger, you want to cast a value to a type that is not actually 4347 used in your program (but is declared). More often, however, this 4348 results in a significant amount of wasted space. With this 4349 option, GCC will avoid producing debug symbol output for types 4350 that are nowhere used in the source file being compiled. 4351 4352 4353 File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 4354 4355 3.10 Options That Control Optimization 4356 ====================================== 4357 4358 These options control various sorts of optimizations. 4359 4360 Without any optimization option, the compiler's goal is to reduce the 4361 cost of compilation and to make debugging produce the expected results. 4362 Statements are independent: if you stop the program with a breakpoint 4363 between statements, you can then assign a new value to any variable or 4364 change the program counter to any other statement in the function and 4365 get exactly the results you would expect from the source code. 4366 4367 Turning on optimization flags makes the compiler attempt to improve 4368 the performance and/or code size at the expense of compilation time and 4369 possibly the ability to debug the program. 4370 4371 The compiler performs optimization based on the knowledge it has of 4372 the program. Optimization levels `-O' and above, in particular, enable 4373 _unit-at-a-time_ mode, which allows the compiler to consider 4374 information gained from later functions in the file when compiling a 4375 function. Compiling multiple files at once to a single output file in 4376 _unit-at-a-time_ mode allows the compiler to use information gained 4377 from all of the files when compiling each of them. 4378 4379 Not all optimizations are controlled directly by a flag. Only 4380 optimizations that have a flag are listed. 4381 4382 `-O' 4383 `-O1' 4384 Optimize. Optimizing compilation takes somewhat more time, and a 4385 lot more memory for a large function. 4386 4387 With `-O', the compiler tries to reduce code size and execution 4388 time, without performing any optimizations that take a great deal 4389 of compilation time. 4390 4391 `-O' turns on the following optimization flags: 4392 -fdefer-pop 4393 -fdelayed-branch 4394 -fguess-branch-probability 4395 -fcprop-registers 4396 -fif-conversion 4397 -fif-conversion2 4398 -ftree-ccp 4399 -ftree-dce 4400 -ftree-dominator-opts 4401 -ftree-dse 4402 -ftree-ter 4403 -ftree-lrs 4404 -ftree-sra 4405 -ftree-copyrename 4406 -ftree-fre 4407 -ftree-ch 4408 -funit-at-a-time 4409 -fmerge-constants 4410 4411 `-O' also turns on `-fomit-frame-pointer' on machines where doing 4412 so does not interfere with debugging. 4413 4414 `-O2' 4415 Optimize even more. GCC performs nearly all supported 4416 optimizations that do not involve a space-speed tradeoff. The 4417 compiler does not perform loop unrolling or function inlining when 4418 you specify `-O2'. As compared to `-O', this option increases 4419 both compilation time and the performance of the generated code. 4420 4421 `-O2' turns on all optimization flags specified by `-O'. It also 4422 turns on the following optimization flags: 4423 -fthread-jumps 4424 -fcrossjumping 4425 -foptimize-sibling-calls 4426 -fcse-follow-jumps -fcse-skip-blocks 4427 -fgcse -fgcse-lm 4428 -fexpensive-optimizations 4429 -frerun-cse-after-loop 4430 -fcaller-saves 4431 -fpeephole2 4432 -fschedule-insns -fschedule-insns2 4433 -fsched-interblock -fsched-spec 4434 -fregmove 4435 -fstrict-aliasing -fstrict-overflow 4436 -fdelete-null-pointer-checks 4437 -freorder-blocks -freorder-functions 4438 -falign-functions -falign-jumps 4439 -falign-loops -falign-labels 4440 -ftree-vrp 4441 -ftree-pre 4442 4443 Please note the warning under `-fgcse' about invoking `-O2' on 4444 programs that use computed gotos. 4445 4446 `-O2' doesn't turn on `-ftree-vrp' for the Ada compiler. This 4447 option must be explicitly specified on the command line to be 4448 enabled for the Ada compiler. 4449 4450 `-O3' 4451 Optimize yet more. `-O3' turns on all optimizations specified by 4452 `-O2' and also turns on the `-finline-functions', 4453 `-funswitch-loops' and `-fgcse-after-reload' options. 4454 4455 `-O0' 4456 Do not optimize. This is the default. 4457 4458 `-Os' 4459 Optimize for size. `-Os' enables all `-O2' optimizations that do 4460 not typically increase code size. It also performs further 4461 optimizations designed to reduce code size. 4462 4463 `-Os' disables the following optimization flags: 4464 -falign-functions -falign-jumps -falign-loops 4465 -falign-labels -freorder-blocks -freorder-blocks-and-partition 4466 -fprefetch-loop-arrays -ftree-vect-loop-version 4467 4468 If you use multiple `-O' options, with or without level numbers, 4469 the last such option is the one that is effective. 4470 4471 Options of the form `-fFLAG' specify machine-independent flags. Most 4472 flags have both positive and negative forms; the negative form of 4473 `-ffoo' would be `-fno-foo'. In the table below, only one of the forms 4474 is listed--the one you typically will use. You can figure out the 4475 other form by either removing `no-' or adding it. 4476 4477 The following options control specific optimizations. They are either 4478 activated by `-O' options or are related to ones that are. You can use 4479 the following flags in the rare cases when "fine-tuning" of 4480 optimizations to be performed is desired. 4481 4482 `-fno-default-inline' 4483 Do not make member functions inline by default merely because they 4484 are defined inside the class scope (C++ only). Otherwise, when 4485 you specify `-O', member functions defined inside class scope are 4486 compiled inline by default; i.e., you don't need to add `inline' 4487 in front of the member function name. 4488 4489 `-fno-defer-pop' 4490 Always pop the arguments to each function call as soon as that 4491 function returns. For machines which must pop arguments after a 4492 function call, the compiler normally lets arguments accumulate on 4493 the stack for several function calls and pops them all at once. 4494 4495 Disabled at levels `-O', `-O2', `-O3', `-Os'. 4496 4497 `-fforce-mem' 4498 Force memory operands to be copied into registers before doing 4499 arithmetic on them. This produces better code by making all memory 4500 references potential common subexpressions. When they are not 4501 common subexpressions, instruction combination should eliminate 4502 the separate register-load. This option is now a nop and will be 4503 removed in 4.3. 4504 4505 `-fforce-addr' 4506 Force memory address constants to be copied into registers before 4507 doing arithmetic on them. 4508 4509 `-fomit-frame-pointer' 4510 Don't keep the frame pointer in a register for functions that 4511 don't need one. This avoids the instructions to save, set up and 4512 restore frame pointers; it also makes an extra register available 4513 in many functions. *It also makes debugging impossible on some 4514 machines.* 4515 4516 On some machines, such as the VAX, this flag has no effect, because 4517 the standard calling sequence automatically handles the frame 4518 pointer and nothing is saved by pretending it doesn't exist. The 4519 machine-description macro `FRAME_POINTER_REQUIRED' controls 4520 whether a target machine supports this flag. *Note Register 4521 Usage: (gccint)Registers. 4522 4523 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4524 4525 `-foptimize-sibling-calls' 4526 Optimize sibling and tail recursive calls. 4527 4528 Enabled at levels `-O2', `-O3', `-Os'. 4529 4530 `-fno-inline' 4531 Don't pay attention to the `inline' keyword. Normally this option 4532 is used to keep the compiler from expanding any functions inline. 4533 Note that if you are not optimizing, no functions can be expanded 4534 inline. 4535 4536 `-finline-functions' 4537 Integrate all simple functions into their callers. The compiler 4538 heuristically decides which functions are simple enough to be worth 4539 integrating in this way. 4540 4541 If all calls to a given function are integrated, and the function 4542 is declared `static', then the function is normally not output as 4543 assembler code in its own right. 4544 4545 Enabled at level `-O3'. 4546 4547 `-finline-functions-called-once' 4548 Consider all `static' functions called once for inlining into their 4549 caller even if they are not marked `inline'. If a call to a given 4550 function is integrated, then the function is not output as 4551 assembler code in its own right. 4552 4553 Enabled if `-funit-at-a-time' is enabled. 4554 4555 `-fearly-inlining' 4556 Inline functions marked by `always_inline' and functions whose 4557 body seems smaller than the function call overhead early before 4558 doing `-fprofile-generate' instrumentation and real inlining pass. 4559 Doing so makes profiling significantly cheaper and usually 4560 inlining faster on programs having large chains of nested wrapper 4561 functions. 4562 4563 Enabled by default. 4564 4565 `-finline-limit=N' 4566 By default, GCC limits the size of functions that can be inlined. 4567 This flag allows the control of this limit for functions that are 4568 explicitly marked as inline (i.e., marked with the inline keyword 4569 or defined within the class definition in c++). N is the size of 4570 functions that can be inlined in number of pseudo instructions 4571 (not counting parameter handling). The default value of N is 600. 4572 Increasing this value can result in more inlined code at the cost 4573 of compilation time and memory consumption. Decreasing usually 4574 makes the compilation faster and less code will be inlined (which 4575 presumably means slower programs). This option is particularly 4576 useful for programs that use inlining heavily such as those based 4577 on recursive templates with C++. 4578 4579 Inlining is actually controlled by a number of parameters, which 4580 may be specified individually by using `--param NAME=VALUE'. The 4581 `-finline-limit=N' option sets some of these parameters as follows: 4582 4583 `max-inline-insns-single' 4584 is set to N/2. 4585 4586 `max-inline-insns-auto' 4587 is set to N/2. 4588 4589 `min-inline-insns' 4590 is set to 130 or N/4, whichever is smaller. 4591 4592 `max-inline-insns-rtl' 4593 is set to N. 4594 4595 See below for a documentation of the individual parameters 4596 controlling inlining. 4597 4598 _Note:_ pseudo instruction represents, in this particular context, 4599 an abstract measurement of function's size. In no way does it 4600 represent a count of assembly instructions and as such its exact 4601 meaning might change from one release to an another. 4602 4603 `-fkeep-inline-functions' 4604 In C, emit `static' functions that are declared `inline' into the 4605 object file, even if the function has been inlined into all of its 4606 callers. This switch does not affect functions using the `extern 4607 inline' extension in GNU C. In C++, emit any and all inline 4608 functions into the object file. 4609 4610 `-fkeep-static-consts' 4611 Emit variables declared `static const' when optimization isn't 4612 turned on, even if the variables aren't referenced. 4613 4614 GCC enables this option by default. If you want to force the 4615 compiler to check if the variable was referenced, regardless of 4616 whether or not optimization is turned on, use the 4617 `-fno-keep-static-consts' option. 4618 4619 `-fmerge-constants' 4620 Attempt to merge identical constants (string constants and 4621 floating point constants) across compilation units. 4622 4623 This option is the default for optimized compilation if the 4624 assembler and linker support it. Use `-fno-merge-constants' to 4625 inhibit this behavior. 4626 4627 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4628 4629 `-fmerge-all-constants' 4630 Attempt to merge identical constants and identical variables. 4631 4632 This option implies `-fmerge-constants'. In addition to 4633 `-fmerge-constants' this considers e.g. even constant initialized 4634 arrays or initialized constant variables with integral or floating 4635 point types. Languages like C or C++ require each non-automatic 4636 variable to have distinct location, so using this option will 4637 result in non-conforming behavior. 4638 4639 `-fmodulo-sched' 4640 Perform swing modulo scheduling immediately before the first 4641 scheduling pass. This pass looks at innermost loops and reorders 4642 their instructions by overlapping different iterations. 4643 4644 `-fno-branch-count-reg' 4645 Do not use "decrement and branch" instructions on a count register, 4646 but instead generate a sequence of instructions that decrement a 4647 register, compare it against zero, then branch based upon the 4648 result. This option is only meaningful on architectures that 4649 support such instructions, which include x86, PowerPC, IA-64 and 4650 S/390. 4651 4652 The default is `-fbranch-count-reg'. 4653 4654 `-fno-function-cse' 4655 Do not put function addresses in registers; make each instruction 4656 that calls a constant function contain the function's address 4657 explicitly. 4658 4659 This option results in less efficient code, but some strange hacks 4660 that alter the assembler output may be confused by the 4661 optimizations performed when this option is not used. 4662 4663 The default is `-ffunction-cse' 4664 4665 `-fno-zero-initialized-in-bss' 4666 If the target supports a BSS section, GCC by default puts 4667 variables that are initialized to zero into BSS. This can save 4668 space in the resulting code. 4669 4670 This option turns off this behavior because some programs 4671 explicitly rely on variables going to the data section. E.g., so 4672 that the resulting executable can find the beginning of that 4673 section and/or make assumptions based on that. 4674 4675 The default is `-fzero-initialized-in-bss'. 4676 4677 `-fbounds-check' 4678 For front-ends that support it, generate additional code to check 4679 that indices used to access arrays are within the declared range. 4680 This is currently only supported by the Java and Fortran 4681 front-ends, where this option defaults to true and false 4682 respectively. 4683 4684 `-fmudflap -fmudflapth -fmudflapir' 4685 For front-ends that support it (C and C++), instrument all risky 4686 pointer/array dereferencing operations, some standard library 4687 string/heap functions, and some other associated constructs with 4688 range/validity tests. Modules so instrumented should be immune to 4689 buffer overflows, invalid heap use, and some other classes of C/C++ 4690 programming errors. The instrumentation relies on a separate 4691 runtime library (`libmudflap'), which will be linked into a 4692 program if `-fmudflap' is given at link time. Run-time behavior 4693 of the instrumented program is controlled by the `MUDFLAP_OPTIONS' 4694 environment variable. See `env MUDFLAP_OPTIONS=-help a.out' for 4695 its options. 4696 4697 Use `-fmudflapth' instead of `-fmudflap' to compile and to link if 4698 your program is multi-threaded. Use `-fmudflapir', in addition to 4699 `-fmudflap' or `-fmudflapth', if instrumentation should ignore 4700 pointer reads. This produces less instrumentation (and therefore 4701 faster execution) and still provides some protection against 4702 outright memory corrupting writes, but allows erroneously read 4703 data to propagate within a program. 4704 4705 `-fthread-jumps' 4706 Perform optimizations where we check to see if a jump branches to a 4707 location where another comparison subsumed by the first is found. 4708 If so, the first branch is redirected to either the destination of 4709 the second branch or a point immediately following it, depending 4710 on whether the condition is known to be true or false. 4711 4712 Enabled at levels `-O2', `-O3', `-Os'. 4713 4714 `-fcse-follow-jumps' 4715 In common subexpression elimination, scan through jump instructions 4716 when the target of the jump is not reached by any other path. For 4717 example, when CSE encounters an `if' statement with an `else' 4718 clause, CSE will follow the jump when the condition tested is 4719 false. 4720 4721 Enabled at levels `-O2', `-O3', `-Os'. 4722 4723 `-fcse-skip-blocks' 4724 This is similar to `-fcse-follow-jumps', but causes CSE to follow 4725 jumps which conditionally skip over blocks. When CSE encounters a 4726 simple `if' statement with no else clause, `-fcse-skip-blocks' 4727 causes CSE to follow the jump around the body of the `if'. 4728 4729 Enabled at levels `-O2', `-O3', `-Os'. 4730 4731 `-frerun-cse-after-loop' 4732 Re-run common subexpression elimination after loop optimizations 4733 has been performed. 4734 4735 Enabled at levels `-O2', `-O3', `-Os'. 4736 4737 `-fgcse' 4738 Perform a global common subexpression elimination pass. This pass 4739 also performs global constant and copy propagation. 4740 4741 _Note:_ When compiling a program using computed gotos, a GCC 4742 extension, you may get better runtime performance if you disable 4743 the global common subexpression elimination pass by adding 4744 `-fno-gcse' to the command line. 4745 4746 Enabled at levels `-O2', `-O3', `-Os'. 4747 4748 `-fgcse-lm' 4749 When `-fgcse-lm' is enabled, global common subexpression 4750 elimination will attempt to move loads which are only killed by 4751 stores into themselves. This allows a loop containing a 4752 load/store sequence to be changed to a load outside the loop, and 4753 a copy/store within the loop. 4754 4755 Enabled by default when gcse is enabled. 4756 4757 `-fgcse-sm' 4758 When `-fgcse-sm' is enabled, a store motion pass is run after 4759 global common subexpression elimination. This pass will attempt 4760 to move stores out of loops. When used in conjunction with 4761 `-fgcse-lm', loops containing a load/store sequence can be changed 4762 to a load before the loop and a store after the loop. 4763 4764 Not enabled at any optimization level. 4765 4766 `-fgcse-las' 4767 When `-fgcse-las' is enabled, the global common subexpression 4768 elimination pass eliminates redundant loads that come after stores 4769 to the same memory location (both partial and full redundancies). 4770 4771 Not enabled at any optimization level. 4772 4773 `-fgcse-after-reload' 4774 When `-fgcse-after-reload' is enabled, a redundant load elimination 4775 pass is performed after reload. The purpose of this pass is to 4776 cleanup redundant spilling. 4777 4778 `-funsafe-loop-optimizations' 4779 If given, the loop optimizer will assume that loop indices do not 4780 overflow, and that the loops with nontrivial exit condition are not 4781 infinite. This enables a wider range of loop optimizations even if 4782 the loop optimizer itself cannot prove that these assumptions are 4783 valid. Using `-Wunsafe-loop-optimizations', the compiler will 4784 warn you if it finds this kind of loop. 4785 4786 `-fcrossjumping' 4787 Perform cross-jumping transformation. This transformation unifies 4788 equivalent code and save code size. The resulting code may or may 4789 not perform better than without cross-jumping. 4790 4791 Enabled at levels `-O2', `-O3', `-Os'. 4792 4793 `-fif-conversion' 4794 Attempt to transform conditional jumps into branch-less 4795 equivalents. This include use of conditional moves, min, max, set 4796 flags and abs instructions, and some tricks doable by standard 4797 arithmetics. The use of conditional execution on chips where it 4798 is available is controlled by `if-conversion2'. 4799 4800 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4801 4802 `-fif-conversion2' 4803 Use conditional execution (where available) to transform 4804 conditional jumps into branch-less equivalents. 4805 4806 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4807 4808 `-fdelete-null-pointer-checks' 4809 Use global dataflow analysis to identify and eliminate useless 4810 checks for null pointers. The compiler assumes that dereferencing 4811 a null pointer would have halted the program. If a pointer is 4812 checked after it has already been dereferenced, it cannot be null. 4813 4814 In some environments, this assumption is not true, and programs can 4815 safely dereference null pointers. Use 4816 `-fno-delete-null-pointer-checks' to disable this optimization for 4817 programs which depend on that behavior. 4818 4819 Enabled at levels `-O2', `-O3', `-Os'. 4820 4821 `-fexpensive-optimizations' 4822 Perform a number of minor optimizations that are relatively 4823 expensive. 4824 4825 Enabled at levels `-O2', `-O3', `-Os'. 4826 4827 `-foptimize-register-move' 4828 `-fregmove' 4829 Attempt to reassign register numbers in move instructions and as 4830 operands of other simple instructions in order to maximize the 4831 amount of register tying. This is especially helpful on machines 4832 with two-operand instructions. 4833 4834 Note `-fregmove' and `-foptimize-register-move' are the same 4835 optimization. 4836 4837 Enabled at levels `-O2', `-O3', `-Os'. 4838 4839 `-fdelayed-branch' 4840 If supported for the target machine, attempt to reorder 4841 instructions to exploit instruction slots available after delayed 4842 branch instructions. 4843 4844 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4845 4846 `-fschedule-insns' 4847 If supported for the target machine, attempt to reorder 4848 instructions to eliminate execution stalls due to required data 4849 being unavailable. This helps machines that have slow floating 4850 point or memory load instructions by allowing other instructions 4851 to be issued until the result of the load or floating point 4852 instruction is required. 4853 4854 Enabled at levels `-O2', `-O3', `-Os'. 4855 4856 `-fschedule-insns2' 4857 Similar to `-fschedule-insns', but requests an additional pass of 4858 instruction scheduling after register allocation has been done. 4859 This is especially useful on machines with a relatively small 4860 number of registers and where memory load instructions take more 4861 than one cycle. 4862 4863 Enabled at levels `-O2', `-O3', `-Os'. 4864 4865 `-fno-sched-interblock' 4866 Don't schedule instructions across basic blocks. This is normally 4867 enabled by default when scheduling before register allocation, i.e. 4868 with `-fschedule-insns' or at `-O2' or higher. 4869 4870 `-fno-sched-spec' 4871 Don't allow speculative motion of non-load instructions. This is 4872 normally enabled by default when scheduling before register 4873 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 4874 4875 `-fsched-spec-load' 4876 Allow speculative motion of some load instructions. This only 4877 makes sense when scheduling before register allocation, i.e. with 4878 `-fschedule-insns' or at `-O2' or higher. 4879 4880 `-fsched-spec-load-dangerous' 4881 Allow speculative motion of more load instructions. This only 4882 makes sense when scheduling before register allocation, i.e. with 4883 `-fschedule-insns' or at `-O2' or higher. 4884 4885 `-fsched-stalled-insns=N' 4886 Define how many insns (if any) can be moved prematurely from the 4887 queue of stalled insns into the ready list, during the second 4888 scheduling pass. 4889 4890 `-fsched-stalled-insns-dep=N' 4891 Define how many insn groups (cycles) will be examined for a 4892 dependency on a stalled insn that is candidate for premature 4893 removal from the queue of stalled insns. Has an effect only 4894 during the second scheduling pass, and only if 4895 `-fsched-stalled-insns' is used and its value is not zero. 4896 4897 `-fsched2-use-superblocks' 4898 When scheduling after register allocation, do use superblock 4899 scheduling algorithm. Superblock scheduling allows motion across 4900 basic block boundaries resulting on faster schedules. This option 4901 is experimental, as not all machine descriptions used by GCC model 4902 the CPU closely enough to avoid unreliable results from the 4903 algorithm. 4904 4905 This only makes sense when scheduling after register allocation, 4906 i.e. with `-fschedule-insns2' or at `-O2' or higher. 4907 4908 `-fsched2-use-traces' 4909 Use `-fsched2-use-superblocks' algorithm when scheduling after 4910 register allocation and additionally perform code duplication in 4911 order to increase the size of superblocks using tracer pass. See 4912 `-ftracer' for details on trace formation. 4913 4914 This mode should produce faster but significantly longer programs. 4915 Also without `-fbranch-probabilities' the traces constructed may 4916 not match the reality and hurt the performance. This only makes 4917 sense when scheduling after register allocation, i.e. with 4918 `-fschedule-insns2' or at `-O2' or higher. 4919 4920 `-fsee' 4921 Eliminates redundant extension instructions and move the non 4922 redundant ones to optimal placement using LCM. 4923 4924 `-freschedule-modulo-scheduled-loops' 4925 The modulo scheduling comes before the traditional scheduling, if 4926 a loop was modulo scheduled we may want to prevent the later 4927 scheduling passes from changing its schedule, we use this option 4928 to control that. 4929 4930 `-fcaller-saves' 4931 Enable values to be allocated in registers that will be clobbered 4932 by function calls, by emitting extra instructions to save and 4933 restore the registers around such calls. Such allocation is done 4934 only when it seems to result in better code than would otherwise 4935 be produced. 4936 4937 This option is always enabled by default on certain machines, 4938 usually those which have no call-preserved registers to use 4939 instead. 4940 4941 Enabled at levels `-O2', `-O3', `-Os'. 4942 4943 `-ftree-pre' 4944 Perform Partial Redundancy Elimination (PRE) on trees. This flag 4945 is enabled by default at `-O2' and `-O3'. 4946 4947 `-ftree-fre' 4948 Perform Full Redundancy Elimination (FRE) on trees. The difference 4949 between FRE and PRE is that FRE only considers expressions that 4950 are computed on all paths leading to the redundant computation. 4951 This analysis faster than PRE, though it exposes fewer 4952 redundancies. This flag is enabled by default at `-O' and higher. 4953 4954 `-ftree-copy-prop' 4955 Perform copy propagation on trees. This pass eliminates 4956 unnecessary copy operations. This flag is enabled by default at 4957 `-O' and higher. 4958 4959 `-ftree-store-copy-prop' 4960 Perform copy propagation of memory loads and stores. This pass 4961 eliminates unnecessary copy operations in memory references 4962 (structures, global variables, arrays, etc). This flag is enabled 4963 by default at `-O2' and higher. 4964 4965 `-ftree-salias' 4966 Perform structural alias analysis on trees. This flag is enabled 4967 by default at `-O' and higher. 4968 4969 `-fipa-pta' 4970 Perform interprocedural pointer analysis. 4971 4972 `-ftree-sink' 4973 Perform forward store motion on trees. This flag is enabled by 4974 default at `-O' and higher. 4975 4976 `-ftree-ccp' 4977 Perform sparse conditional constant propagation (CCP) on trees. 4978 This pass only operates on local scalar variables and is enabled 4979 by default at `-O' and higher. 4980 4981 `-ftree-store-ccp' 4982 Perform sparse conditional constant propagation (CCP) on trees. 4983 This pass operates on both local scalar variables and memory 4984 stores and loads (global variables, structures, arrays, etc). 4985 This flag is enabled by default at `-O2' and higher. 4986 4987 `-ftree-dce' 4988 Perform dead code elimination (DCE) on trees. This flag is 4989 enabled by default at `-O' and higher. 4990 4991 `-ftree-dominator-opts' 4992 Perform a variety of simple scalar cleanups (constant/copy 4993 propagation, redundancy elimination, range propagation and 4994 expression simplification) based on a dominator tree traversal. 4995 This also performs jump threading (to reduce jumps to jumps). This 4996 flag is enabled by default at `-O' and higher. 4997 4998 `-ftree-ch' 4999 Perform loop header copying on trees. This is beneficial since it 5000 increases effectiveness of code motion optimizations. It also 5001 saves one jump. This flag is enabled by default at `-O' and 5002 higher. It is not enabled for `-Os', since it usually increases 5003 code size. 5004 5005 `-ftree-loop-optimize' 5006 Perform loop optimizations on trees. This flag is enabled by 5007 default at `-O' and higher. 5008 5009 `-ftree-loop-linear' 5010 Perform linear loop transformations on tree. This flag can 5011 improve cache performance and allow further loop optimizations to 5012 take place. 5013 5014 `-ftree-loop-im' 5015 Perform loop invariant motion on trees. This pass moves only 5016 invariants that would be hard to handle at RTL level (function 5017 calls, operations that expand to nontrivial sequences of insns). 5018 With `-funswitch-loops' it also moves operands of conditions that 5019 are invariant out of the loop, so that we can use just trivial 5020 invariantness analysis in loop unswitching. The pass also includes 5021 store motion. 5022 5023 `-ftree-loop-ivcanon' 5024 Create a canonical counter for number of iterations in the loop 5025 for that determining number of iterations requires complicated 5026 analysis. Later optimizations then may determine the number 5027 easily. Useful especially in connection with unrolling. 5028 5029 `-fivopts' 5030 Perform induction variable optimizations (strength reduction, 5031 induction variable merging and induction variable elimination) on 5032 trees. 5033 5034 `-ftree-sra' 5035 Perform scalar replacement of aggregates. This pass replaces 5036 structure references with scalars to prevent committing structures 5037 to memory too early. This flag is enabled by default at `-O' and 5038 higher. 5039 5040 `-ftree-copyrename' 5041 Perform copy renaming on trees. This pass attempts to rename 5042 compiler temporaries to other variables at copy locations, usually 5043 resulting in variable names which more closely resemble the 5044 original variables. This flag is enabled by default at `-O' and 5045 higher. 5046 5047 `-ftree-ter' 5048 Perform temporary expression replacement during the SSA->normal 5049 phase. Single use/single def temporaries are replaced at their 5050 use location with their defining expression. This results in 5051 non-GIMPLE code, but gives the expanders much more complex trees 5052 to work on resulting in better RTL generation. This is enabled by 5053 default at `-O' and higher. 5054 5055 `-ftree-lrs' 5056 Perform live range splitting during the SSA->normal phase. 5057 Distinct live ranges of a variable are split into unique 5058 variables, allowing for better optimization later. This is 5059 enabled by default at `-O' and higher. 5060 5061 `-ftree-vectorize' 5062 Perform loop vectorization on trees. 5063 5064 `-ftree-vect-loop-version' 5065 Perform loop versioning when doing loop vectorization on trees. 5066 When a loop appears to be vectorizable except that data alignment 5067 or data dependence cannot be determined at compile time then 5068 vectorized and non-vectorized versions of the loop are generated 5069 along with runtime checks for alignment or dependence to control 5070 which version is executed. This option is enabled by default 5071 except at level `-Os' where it is disabled. 5072 5073 `-ftree-vrp' 5074 Perform Value Range Propagation on trees. This is similar to the 5075 constant propagation pass, but instead of values, ranges of values 5076 are propagated. This allows the optimizers to remove unnecessary 5077 range checks like array bound checks and null pointer checks. 5078 This is enabled by default at `-O2' and higher. Null pointer check 5079 elimination is only done if `-fdelete-null-pointer-checks' is 5080 enabled. 5081 5082 `-ftracer' 5083 Perform tail duplication to enlarge superblock size. This 5084 transformation simplifies the control flow of the function 5085 allowing other optimizations to do better job. 5086 5087 `-funroll-loops' 5088 Unroll loops whose number of iterations can be determined at 5089 compile time or upon entry to the loop. `-funroll-loops' implies 5090 `-frerun-cse-after-loop'. This option makes code larger, and may 5091 or may not make it run faster. 5092 5093 `-funroll-all-loops' 5094 Unroll all loops, even if their number of iterations is uncertain 5095 when the loop is entered. This usually makes programs run more 5096 slowly. `-funroll-all-loops' implies the same options as 5097 `-funroll-loops', 5098 5099 `-fsplit-ivs-in-unroller' 5100 Enables expressing of values of induction variables in later 5101 iterations of the unrolled loop using the value in the first 5102 iteration. This breaks long dependency chains, thus improving 5103 efficiency of the scheduling passes. 5104 5105 Combination of `-fweb' and CSE is often sufficient to obtain the 5106 same effect. However in cases the loop body is more complicated 5107 than a single basic block, this is not reliable. It also does not 5108 work at all on some of the architectures due to restrictions in 5109 the CSE pass. 5110 5111 This optimization is enabled by default. 5112 5113 `-fvariable-expansion-in-unroller' 5114 With this option, the compiler will create multiple copies of some 5115 local variables when unrolling a loop which can result in superior 5116 code. 5117 5118 `-fprefetch-loop-arrays' 5119 If supported by the target machine, generate instructions to 5120 prefetch memory to improve the performance of loops that access 5121 large arrays. 5122 5123 This option may generate better or worse code; results are highly 5124 dependent on the structure of loops within the source code. 5125 5126 Disabled at level `-Os'. 5127 5128 `-fno-peephole' 5129 `-fno-peephole2' 5130 Disable any machine-specific peephole optimizations. The 5131 difference between `-fno-peephole' and `-fno-peephole2' is in how 5132 they are implemented in the compiler; some targets use one, some 5133 use the other, a few use both. 5134 5135 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 5136 levels `-O2', `-O3', `-Os'. 5137 5138 `-fno-guess-branch-probability' 5139 Do not guess branch probabilities using heuristics. 5140 5141 GCC will use heuristics to guess branch probabilities if they are 5142 not provided by profiling feedback (`-fprofile-arcs'). These 5143 heuristics are based on the control flow graph. If some branch 5144 probabilities are specified by `__builtin_expect', then the 5145 heuristics will be used to guess branch probabilities for the rest 5146 of the control flow graph, taking the `__builtin_expect' info into 5147 account. The interactions between the heuristics and 5148 `__builtin_expect' can be complex, and in some cases, it may be 5149 useful to disable the heuristics so that the effects of 5150 `__builtin_expect' are easier to understand. 5151 5152 The default is `-fguess-branch-probability' at levels `-O', `-O2', 5153 `-O3', `-Os'. 5154 5155 `-freorder-blocks' 5156 Reorder basic blocks in the compiled function in order to reduce 5157 number of taken branches and improve code locality. 5158 5159 Enabled at levels `-O2', `-O3'. 5160 5161 `-freorder-blocks-and-partition' 5162 In addition to reordering basic blocks in the compiled function, 5163 in order to reduce number of taken branches, partitions hot and 5164 cold basic blocks into separate sections of the assembly and .o 5165 files, to improve paging and cache locality performance. 5166 5167 This optimization is automatically turned off in the presence of 5168 exception handling, for linkonce sections, for functions with a 5169 user-defined section attribute and on any architecture that does 5170 not support named sections. 5171 5172 `-freorder-functions' 5173 Reorder functions in the object file in order to improve code 5174 locality. This is implemented by using special subsections 5175 `.text.hot' for most frequently executed functions and 5176 `.text.unlikely' for unlikely executed functions. Reordering is 5177 done by the linker so object file format must support named 5178 sections and linker must place them in a reasonable way. 5179 5180 Also profile feedback must be available in to make this option 5181 effective. See `-fprofile-arcs' for details. 5182 5183 Enabled at levels `-O2', `-O3', `-Os'. 5184 5185 `-fstrict-aliasing' 5186 Allows the compiler to assume the strictest aliasing rules 5187 applicable to the language being compiled. For C (and C++), this 5188 activates optimizations based on the type of expressions. In 5189 particular, an object of one type is assumed never to reside at 5190 the same address as an object of a different type, unless the 5191 types are almost the same. For example, an `unsigned int' can 5192 alias an `int', but not a `void*' or a `double'. A character type 5193 may alias any other type. 5194 5195 Pay special attention to code like this: 5196 union a_union { 5197 int i; 5198 double d; 5199 }; 5200 5201 int f() { 5202 a_union t; 5203 t.d = 3.0; 5204 return t.i; 5205 } 5206 The practice of reading from a different union member than the one 5207 most recently written to (called "type-punning") is common. Even 5208 with `-fstrict-aliasing', type-punning is allowed, provided the 5209 memory is accessed through the union type. So, the code above 5210 will work as expected. However, this code might not: 5211 int f() { 5212 a_union t; 5213 int* ip; 5214 t.d = 3.0; 5215 ip = &t.i; 5216 return *ip; 5217 } 5218 5219 Every language that wishes to perform language-specific alias 5220 analysis should define a function that computes, given an `tree' 5221 node, an alias set for the node. Nodes in different alias sets 5222 are not allowed to alias. For an example, see the C front-end 5223 function `c_get_alias_set'. 5224 5225 Enabled at levels `-O2', `-O3', `-Os'. 5226 5227 `-fstrict-overflow' 5228 Allow the compiler to assume strict signed overflow rules, 5229 depending on the language being compiled. For C (and C++) this 5230 means that overflow when doing arithmetic with signed numbers is 5231 undefined, which means that the compiler may assume that it will 5232 not happen. This permits various optimizations. For example, the 5233 compiler will assume that an expression like `i + 10 > i' will 5234 always be true for signed `i'. This assumption is only valid if 5235 signed overflow is undefined, as the expression is false if `i + 5236 10' overflows when using twos complement arithmetic. When this 5237 option is in effect any attempt to determine whether an operation 5238 on signed numbers will overflow must be written carefully to not 5239 actually involve overflow. 5240 5241 See also the `-fwrapv' option. Using `-fwrapv' means that signed 5242 overflow is fully defined: it wraps. When `-fwrapv' is used, 5243 there is no difference between `-fstrict-overflow' and 5244 `-fno-strict-overflow'. With `-fwrapv' certain types of overflow 5245 are permitted. For example, if the compiler gets an overflow when 5246 doing arithmetic on constants, the overflowed value can still be 5247 used with `-fwrapv', but not otherwise. 5248 5249 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 5250 `-Os'. 5251 5252 `-falign-functions' 5253 `-falign-functions=N' 5254 Align the start of functions to the next power-of-two greater than 5255 N, skipping up to N bytes. For instance, `-falign-functions=32' 5256 aligns functions to the next 32-byte boundary, but 5257 `-falign-functions=24' would align to the next 32-byte boundary 5258 only if this can be done by skipping 23 bytes or less. 5259 5260 `-fno-align-functions' and `-falign-functions=1' are equivalent 5261 and mean that functions will not be aligned. 5262 5263 Some assemblers only support this flag when N is a power of two; 5264 in that case, it is rounded up. 5265 5266 If N is not specified or is zero, use a machine-dependent default. 5267 5268 Enabled at levels `-O2', `-O3'. 5269 5270 `-falign-labels' 5271 `-falign-labels=N' 5272 Align all branch targets to a power-of-two boundary, skipping up to 5273 N bytes like `-falign-functions'. This option can easily make 5274 code slower, because it must insert dummy operations for when the 5275 branch target is reached in the usual flow of the code. 5276 5277 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 5278 that labels will not be aligned. 5279 5280 If `-falign-loops' or `-falign-jumps' are applicable and are 5281 greater than this value, then their values are used instead. 5282 5283 If N is not specified or is zero, use a machine-dependent default 5284 which is very likely to be `1', meaning no alignment. 5285 5286 Enabled at levels `-O2', `-O3'. 5287 5288 `-falign-loops' 5289 `-falign-loops=N' 5290 Align loops to a power-of-two boundary, skipping up to N bytes 5291 like `-falign-functions'. The hope is that the loop will be 5292 executed many times, which will make up for any execution of the 5293 dummy operations. 5294 5295 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 5296 that loops will not be aligned. 5297 5298 If N is not specified or is zero, use a machine-dependent default. 5299 5300 Enabled at levels `-O2', `-O3'. 5301 5302 `-falign-jumps' 5303 `-falign-jumps=N' 5304 Align branch targets to a power-of-two boundary, for branch targets 5305 where the targets can only be reached by jumping, skipping up to N 5306 bytes like `-falign-functions'. In this case, no dummy operations 5307 need be executed. 5308 5309 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 5310 that loops will not be aligned. 5311 5312 If N is not specified or is zero, use a machine-dependent default. 5313 5314 Enabled at levels `-O2', `-O3'. 5315 5316 `-funit-at-a-time' 5317 Parse the whole compilation unit before starting to produce code. 5318 This allows some extra optimizations to take place but consumes 5319 more memory (in general). There are some compatibility issues 5320 with _unit-at-a-time_ mode: 5321 * enabling _unit-at-a-time_ mode may change the order in which 5322 functions, variables, and top-level `asm' statements are 5323 emitted, and will likely break code relying on some particular 5324 ordering. The majority of such top-level `asm' statements, 5325 though, can be replaced by `section' attributes. The 5326 `fno-toplevel-reorder' option may be used to keep the ordering 5327 used in the input file, at the cost of some optimizations. 5328 5329 * _unit-at-a-time_ mode removes unreferenced static variables 5330 and functions. This may result in undefined references when 5331 an `asm' statement refers directly to variables or functions 5332 that are otherwise unused. In that case either the 5333 variable/function shall be listed as an operand of the `asm' 5334 statement operand or, in the case of top-level `asm' 5335 statements the attribute `used' shall be used on the 5336 declaration. 5337 5338 * Static functions now can use non-standard passing conventions 5339 that may break `asm' statements calling functions directly. 5340 Again, attribute `used' will prevent this behavior. 5341 5342 As a temporary workaround, `-fno-unit-at-a-time' can be used, but 5343 this scheme may not be supported by future releases of GCC. 5344 5345 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5346 5347 `-fno-toplevel-reorder' 5348 Do not reorder top-level functions, variables, and `asm' 5349 statements. Output them in the same order that they appear in the 5350 input file. When this option is used, unreferenced static 5351 variables will not be removed. This option is intended to support 5352 existing code which relies on a particular ordering. For new 5353 code, it is better to use attributes. 5354 5355 `-fweb' 5356 Constructs webs as commonly used for register allocation purposes 5357 and assign each web individual pseudo register. This allows the 5358 register allocation pass to operate on pseudos directly, but also 5359 strengthens several other optimization passes, such as CSE, loop 5360 optimizer and trivial dead code remover. It can, however, make 5361 debugging impossible, since variables will no longer stay in a 5362 "home register". 5363 5364 Enabled by default with `-funroll-loops'. 5365 5366 `-fwhole-program' 5367 Assume that the current compilation unit represents whole program 5368 being compiled. All public functions and variables with the 5369 exception of `main' and those merged by attribute 5370 `externally_visible' become static functions and in a affect gets 5371 more aggressively optimized by interprocedural optimizers. While 5372 this option is equivalent to proper use of `static' keyword for 5373 programs consisting of single file, in combination with option 5374 `--combine' this flag can be used to compile most of smaller scale 5375 C programs since the functions and variables become local for the 5376 whole combined compilation unit, not for the single source file 5377 itself. 5378 5379 `-fno-cprop-registers' 5380 After register allocation and post-register allocation instruction 5381 splitting, we perform a copy-propagation pass to try to reduce 5382 scheduling dependencies and occasionally eliminate the copy. 5383 5384 Disabled at levels `-O', `-O2', `-O3', `-Os'. 5385 5386 `-fprofile-generate' 5387 Enable options usually used for instrumenting application to 5388 produce profile useful for later recompilation with profile 5389 feedback based optimization. You must use `-fprofile-generate' 5390 both when compiling and when linking your program. 5391 5392 The following options are enabled: `-fprofile-arcs', 5393 `-fprofile-values', `-fvpt'. 5394 5395 `-fprofile-use' 5396 Enable profile feedback directed optimizations, and optimizations 5397 generally profitable only with profile feedback available. 5398 5399 The following options are enabled: `-fbranch-probabilities', 5400 `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer' 5401 5402 5403 The following options control compiler behavior regarding floating 5404 point arithmetic. These options trade off between speed and 5405 correctness. All must be specifically enabled. 5406 5407 `-ffloat-store' 5408 Do not store floating point variables in registers, and inhibit 5409 other options that might change whether a floating point value is 5410 taken from a register or memory. 5411 5412 This option prevents undesirable excess precision on machines such 5413 as the 68000 where the floating registers (of the 68881) keep more 5414 precision than a `double' is supposed to have. Similarly for the 5415 x86 architecture. For most programs, the excess precision does 5416 only good, but a few programs rely on the precise definition of 5417 IEEE floating point. Use `-ffloat-store' for such programs, after 5418 modifying them to store all pertinent intermediate computations 5419 into variables. 5420 5421 `-ffast-math' 5422 Sets `-fno-math-errno', `-funsafe-math-optimizations', 5423 `-fno-trapping-math', `-ffinite-math-only', `-fno-rounding-math', 5424 `-fno-signaling-nans' and `fcx-limited-range'. 5425 5426 This option causes the preprocessor macro `__FAST_MATH__' to be 5427 defined. 5428 5429 This option should never be turned on by any `-O' option since it 5430 can result in incorrect output for programs which depend on an 5431 exact implementation of IEEE or ISO rules/specifications for math 5432 functions. 5433 5434 `-fno-math-errno' 5435 Do not set ERRNO after calling math functions that are executed 5436 with a single instruction, e.g., sqrt. A program that relies on 5437 IEEE exceptions for math error handling may want to use this flag 5438 for speed while maintaining IEEE arithmetic compatibility. 5439 5440 This option should never be turned on by any `-O' option since it 5441 can result in incorrect output for programs which depend on an 5442 exact implementation of IEEE or ISO rules/specifications for math 5443 functions. 5444 5445 The default is `-fmath-errno'. 5446 5447 On Darwin systems, the math library never sets `errno'. There is 5448 therefore no reason for the compiler to consider the possibility 5449 that it might, and `-fno-math-errno' is the default. 5450 5451 `-funsafe-math-optimizations' 5452 Allow optimizations for floating-point arithmetic that (a) assume 5453 that arguments and results are valid and (b) may violate IEEE or 5454 ANSI standards. When used at link-time, it may include libraries 5455 or startup files that change the default FPU control word or other 5456 similar optimizations. 5457 5458 This option should never be turned on by any `-O' option since it 5459 can result in incorrect output for programs which depend on an 5460 exact implementation of IEEE or ISO rules/specifications for math 5461 functions. 5462 5463 The default is `-fno-unsafe-math-optimizations'. 5464 5465 `-ffinite-math-only' 5466 Allow optimizations for floating-point arithmetic that assume that 5467 arguments and results are not NaNs or +-Infs. 5468 5469 This option should never be turned on by any `-O' option since it 5470 can result in incorrect output for programs which depend on an 5471 exact implementation of IEEE or ISO rules/specifications. 5472 5473 The default is `-fno-finite-math-only'. 5474 5475 `-fno-trapping-math' 5476 Compile code assuming that floating-point operations cannot 5477 generate user-visible traps. These traps include division by 5478 zero, overflow, underflow, inexact result and invalid operation. 5479 This option implies `-fno-signaling-nans'. Setting this option 5480 may allow faster code if one relies on "non-stop" IEEE arithmetic, 5481 for example. 5482 5483 This option should never be turned on by any `-O' option since it 5484 can result in incorrect output for programs which depend on an 5485 exact implementation of IEEE or ISO rules/specifications for math 5486 functions. 5487 5488 The default is `-ftrapping-math'. 5489 5490 `-frounding-math' 5491 Disable transformations and optimizations that assume default 5492 floating point rounding behavior. This is round-to-zero for all 5493 floating point to integer conversions, and round-to-nearest for 5494 all other arithmetic truncations. This option should be specified 5495 for programs that change the FP rounding mode dynamically, or that 5496 may be executed with a non-default rounding mode. This option 5497 disables constant folding of floating point expressions at 5498 compile-time (which may be affected by rounding mode) and 5499 arithmetic transformations that are unsafe in the presence of 5500 sign-dependent rounding modes. 5501 5502 The default is `-fno-rounding-math'. 5503 5504 This option is experimental and does not currently guarantee to 5505 disable all GCC optimizations that are affected by rounding mode. 5506 Future versions of GCC may provide finer control of this setting 5507 using C99's `FENV_ACCESS' pragma. This command line option will 5508 be used to specify the default state for `FENV_ACCESS'. 5509 5510 `-frtl-abstract-sequences' 5511 It is a size optimization method. This option is to find identical 5512 sequences of code, which can be turned into pseudo-procedures and 5513 then replace all occurrences with calls to the newly created 5514 subroutine. It is kind of an opposite of `-finline-functions'. 5515 This optimization runs at RTL level. 5516 5517 `-fsignaling-nans' 5518 Compile code assuming that IEEE signaling NaNs may generate 5519 user-visible traps during floating-point operations. Setting this 5520 option disables optimizations that may change the number of 5521 exceptions visible with signaling NaNs. This option implies 5522 `-ftrapping-math'. 5523 5524 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 5525 defined. 5526 5527 The default is `-fno-signaling-nans'. 5528 5529 This option is experimental and does not currently guarantee to 5530 disable all GCC optimizations that affect signaling NaN behavior. 5531 5532 `-fsingle-precision-constant' 5533 Treat floating point constant as single precision constant instead 5534 of implicitly converting it to double precision constant. 5535 5536 `-fcx-limited-range' 5537 `-fno-cx-limited-range' 5538 When enabled, this option states that a range reduction step is not 5539 needed when performing complex division. The default is 5540 `-fno-cx-limited-range', but is enabled by `-ffast-math'. 5541 5542 This option controls the default setting of the ISO C99 5543 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 5544 all languages. 5545 5546 5547 The following options control optimizations that may improve 5548 performance, but are not enabled by any `-O' options. This section 5549 includes experimental options that may produce broken code. 5550 5551 `-fbranch-probabilities' 5552 After running a program compiled with `-fprofile-arcs' (*note 5553 Options for Debugging Your Program or `gcc': Debugging Options.), 5554 you can compile it a second time using `-fbranch-probabilities', 5555 to improve optimizations based on the number of times each branch 5556 was taken. When the program compiled with `-fprofile-arcs' exits 5557 it saves arc execution counts to a file called `SOURCENAME.gcda' 5558 for each source file The information in this data file is very 5559 dependent on the structure of the generated code, so you must use 5560 the same source code and the same optimization options for both 5561 compilations. 5562 5563 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 5564 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 5565 optimization. Currently, they are only used in one place: in 5566 `reorg.c', instead of guessing which path a branch is mostly to 5567 take, the `REG_BR_PROB' values are used to exactly determine which 5568 path is taken more often. 5569 5570 `-fprofile-values' 5571 If combined with `-fprofile-arcs', it adds code so that some data 5572 about values of expressions in the program is gathered. 5573 5574 With `-fbranch-probabilities', it reads back the data gathered 5575 from profiling values of expressions and adds `REG_VALUE_PROFILE' 5576 notes to instructions for their later usage in optimizations. 5577 5578 Enabled with `-fprofile-generate' and `-fprofile-use'. 5579 5580 `-fvpt' 5581 If combined with `-fprofile-arcs', it instructs the compiler to add 5582 a code to gather information about values of expressions. 5583 5584 With `-fbranch-probabilities', it reads back the data gathered and 5585 actually performs the optimizations based on them. Currently the 5586 optimizations include specialization of division operation using 5587 the knowledge about the value of the denominator. 5588 5589 `-frename-registers' 5590 Attempt to avoid false dependencies in scheduled code by making use 5591 of registers left over after register allocation. This 5592 optimization will most benefit processors with lots of registers. 5593 Depending on the debug information format adopted by the target, 5594 however, it can make debugging impossible, since variables will no 5595 longer stay in a "home register". 5596 5597 Enabled by default with `-funroll-loops'. 5598 5599 `-ftracer' 5600 Perform tail duplication to enlarge superblock size. This 5601 transformation simplifies the control flow of the function 5602 allowing other optimizations to do better job. 5603 5604 Enabled with `-fprofile-use'. 5605 5606 `-funroll-loops' 5607 Unroll loops whose number of iterations can be determined at 5608 compile time or upon entry to the loop. `-funroll-loops' implies 5609 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 5610 also turns on complete loop peeling (i.e. complete removal of 5611 loops with small constant number of iterations). This option 5612 makes code larger, and may or may not make it run faster. 5613 5614 Enabled with `-fprofile-use'. 5615 5616 `-funroll-all-loops' 5617 Unroll all loops, even if their number of iterations is uncertain 5618 when the loop is entered. This usually makes programs run more 5619 slowly. `-funroll-all-loops' implies the same options as 5620 `-funroll-loops'. 5621 5622 `-fpeel-loops' 5623 Peels the loops for that there is enough information that they do 5624 not roll much (from profile feedback). It also turns on complete 5625 loop peeling (i.e. complete removal of loops with small constant 5626 number of iterations). 5627 5628 Enabled with `-fprofile-use'. 5629 5630 `-fmove-loop-invariants' 5631 Enables the loop invariant motion pass in the RTL loop optimizer. 5632 Enabled at level `-O1' 5633 5634 `-funswitch-loops' 5635 Move branches with loop invariant conditions out of the loop, with 5636 duplicates of the loop on both branches (modified according to 5637 result of the condition). 5638 5639 `-ffunction-sections' 5640 `-fdata-sections' 5641 Place each function or data item into its own section in the output 5642 file if the target supports arbitrary sections. The name of the 5643 function or the name of the data item determines the section's name 5644 in the output file. 5645 5646 Use these options on systems where the linker can perform 5647 optimizations to improve locality of reference in the instruction 5648 space. Most systems using the ELF object format and SPARC 5649 processors running Solaris 2 have linkers with such optimizations. 5650 AIX may have these optimizations in the future. 5651 5652 Only use these options when there are significant benefits from 5653 doing so. When you specify these options, the assembler and 5654 linker will create larger object and executable files and will 5655 also be slower. You will not be able to use `gprof' on all 5656 systems if you specify this option and you may have problems with 5657 debugging if you specify both this option and `-g'. 5658 5659 `-fbranch-target-load-optimize' 5660 Perform branch target register load optimization before prologue / 5661 epilogue threading. The use of target registers can typically be 5662 exposed only during reload, thus hoisting loads out of loops and 5663 doing inter-block scheduling needs a separate optimization pass. 5664 5665 `-fbranch-target-load-optimize2' 5666 Perform branch target register load optimization after prologue / 5667 epilogue threading. 5668 5669 `-fbtr-bb-exclusive' 5670 When performing branch target register load optimization, don't 5671 reuse branch target registers in within any basic block. 5672 5673 `-fstack-protector' 5674 Emit extra code to check for buffer overflows, such as stack 5675 smashing attacks. This is done by adding a guard variable to 5676 functions with vulnerable objects. This includes functions that 5677 call alloca, and functions with buffers larger than 8 bytes. The 5678 guards are initialized when a function is entered and then checked 5679 when the function exits. If a guard check fails, an error message 5680 is printed and the program exits. 5681 5682 `-fstack-protector-all' 5683 Like `-fstack-protector' except that all functions are protected. 5684 5685 `-fsection-anchors' 5686 Try to reduce the number of symbolic address calculations by using 5687 shared "anchor" symbols to address nearby objects. This 5688 transformation can help to reduce the number of GOT entries and 5689 GOT accesses on some targets. 5690 5691 For example, the implementation of the following function `foo': 5692 5693 static int a, b, c; 5694 int foo (void) { return a + b + c; } 5695 5696 would usually calculate the addresses of all three variables, but 5697 if you compile it with `-fsection-anchors', it will access the 5698 variables from a common anchor point instead. The effect is 5699 similar to the following pseudocode (which isn't valid C): 5700 5701 int foo (void) 5702 { 5703 register int *xr = &x; 5704 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 5705 } 5706 5707 Not all targets support this option. 5708 5709 `--param NAME=VALUE' 5710 In some places, GCC uses various constants to control the amount of 5711 optimization that is done. For example, GCC will not inline 5712 functions that contain more that a certain number of instructions. 5713 You can control some of these constants on the command-line using 5714 the `--param' option. 5715 5716 The names of specific parameters, and the meaning of the values, 5717 are tied to the internals of the compiler, and are subject to 5718 change without notice in future releases. 5719 5720 In each case, the VALUE is an integer. The allowable choices for 5721 NAME are given in the following table: 5722 5723 `salias-max-implicit-fields' 5724 The maximum number of fields in a variable without direct 5725 structure accesses for which structure aliasing will consider 5726 trying to track each field. The default is 5 5727 5728 `salias-max-array-elements' 5729 The maximum number of elements an array can have and its 5730 elements still be tracked individually by structure aliasing. 5731 The default is 4 5732 5733 `sra-max-structure-size' 5734 The maximum structure size, in bytes, at which the scalar 5735 replacement of aggregates (SRA) optimization will perform 5736 block copies. The default value, 0, implies that GCC will 5737 select the most appropriate size itself. 5738 5739 `sra-field-structure-ratio' 5740 The threshold ratio (as a percentage) between instantiated 5741 fields and the complete structure size. We say that if the 5742 ratio of the number of bytes in instantiated fields to the 5743 number of bytes in the complete structure exceeds this 5744 parameter, then block copies are not used. The default is 75. 5745 5746 `max-crossjump-edges' 5747 The maximum number of incoming edges to consider for 5748 crossjumping. The algorithm used by `-fcrossjumping' is 5749 O(N^2) in the number of edges incoming to each block. 5750 Increasing values mean more aggressive optimization, making 5751 the compile time increase with probably small improvement in 5752 executable size. 5753 5754 `min-crossjump-insns' 5755 The minimum number of instructions which must be matched at 5756 the end of two blocks before crossjumping will be performed 5757 on them. This value is ignored in the case where all 5758 instructions in the block being crossjumped from are matched. 5759 The default value is 5. 5760 5761 `max-grow-copy-bb-insns' 5762 The maximum code size expansion factor when copying basic 5763 blocks instead of jumping. The expansion is relative to a 5764 jump instruction. The default value is 8. 5765 5766 `max-goto-duplication-insns' 5767 The maximum number of instructions to duplicate to a block 5768 that jumps to a computed goto. To avoid O(N^2) behavior in a 5769 number of passes, GCC factors computed gotos early in the 5770 compilation process, and unfactors them as late as possible. 5771 Only computed jumps at the end of a basic blocks with no more 5772 than max-goto-duplication-insns are unfactored. The default 5773 value is 8. 5774 5775 `max-delay-slot-insn-search' 5776 The maximum number of instructions to consider when looking 5777 for an instruction to fill a delay slot. If more than this 5778 arbitrary number of instructions is searched, the time 5779 savings from filling the delay slot will be minimal so stop 5780 searching. Increasing values mean more aggressive 5781 optimization, making the compile time increase with probably 5782 small improvement in executable run time. 5783 5784 `max-delay-slot-live-search' 5785 When trying to fill delay slots, the maximum number of 5786 instructions to consider when searching for a block with 5787 valid live register information. Increasing this arbitrarily 5788 chosen value means more aggressive optimization, increasing 5789 the compile time. This parameter should be removed when the 5790 delay slot code is rewritten to maintain the control-flow 5791 graph. 5792 5793 `max-gcse-memory' 5794 The approximate maximum amount of memory that will be 5795 allocated in order to perform the global common subexpression 5796 elimination optimization. If more memory than specified is 5797 required, the optimization will not be done. 5798 5799 `max-gcse-passes' 5800 The maximum number of passes of GCSE to run. The default is 5801 1. 5802 5803 `max-pending-list-length' 5804 The maximum number of pending dependencies scheduling will 5805 allow before flushing the current state and starting over. 5806 Large functions with few branches or calls can create 5807 excessively large lists which needlessly consume memory and 5808 resources. 5809 5810 `max-inline-insns-single' 5811 Several parameters control the tree inliner used in gcc. 5812 This number sets the maximum number of instructions (counted 5813 in GCC's internal representation) in a single function that 5814 the tree inliner will consider for inlining. This only 5815 affects functions declared inline and methods implemented in 5816 a class declaration (C++). The default value is 450. 5817 5818 `max-inline-insns-auto' 5819 When you use `-finline-functions' (included in `-O3'), a lot 5820 of functions that would otherwise not be considered for 5821 inlining by the compiler will be investigated. To those 5822 functions, a different (more restrictive) limit compared to 5823 functions declared inline can be applied. The default value 5824 is 90. 5825 5826 `large-function-insns' 5827 The limit specifying really large functions. For functions 5828 larger than this limit after inlining inlining is constrained 5829 by `--param large-function-growth'. This parameter is useful 5830 primarily to avoid extreme compilation time caused by 5831 non-linear algorithms used by the backend. This parameter is 5832 ignored when `-funit-at-a-time' is not used. The default 5833 value is 2700. 5834 5835 `large-function-growth' 5836 Specifies maximal growth of large function caused by inlining 5837 in percents. This parameter is ignored when 5838 `-funit-at-a-time' is not used. The default value is 100 5839 which limits large function growth to 2.0 times the original 5840 size. 5841 5842 `large-unit-insns' 5843 The limit specifying large translation unit. Growth caused 5844 by inlining of units larger than this limit is limited by 5845 `--param inline-unit-growth'. For small units this might be 5846 too tight (consider unit consisting of function A that is 5847 inline and B that just calls A three time. If B is small 5848 relative to A, the growth of unit is 300\% and yet such 5849 inlining is very sane. For very large units consisting of 5850 small inlininable functions however the overall unit growth 5851 limit is needed to avoid exponential explosion of code size. 5852 Thus for smaller units, the size is increased to `--param 5853 large-unit-insns' before applying `--param 5854 inline-unit-growth'. The default is 10000 5855 5856 `inline-unit-growth' 5857 Specifies maximal overall growth of the compilation unit 5858 caused by inlining. This parameter is ignored when 5859 `-funit-at-a-time' is not used. The default value is 50 5860 which limits unit growth to 1.5 times the original size. 5861 5862 `max-inline-insns-recursive' 5863 `max-inline-insns-recursive-auto' 5864 Specifies maximum number of instructions out-of-line copy of 5865 self recursive inline function can grow into by performing 5866 recursive inlining. 5867 5868 For functions declared inline `--param 5869 max-inline-insns-recursive' is taken into account. For 5870 function not declared inline, recursive inlining happens only 5871 when `-finline-functions' (included in `-O3') is enabled and 5872 `--param max-inline-insns-recursive-auto' is used. The 5873 default value is 450. 5874 5875 `max-inline-recursive-depth' 5876 `max-inline-recursive-depth-auto' 5877 Specifies maximum recursion depth used by the recursive 5878 inlining. 5879 5880 For functions declared inline `--param 5881 max-inline-recursive-depth' is taken into account. For 5882 function not declared inline, recursive inlining happens only 5883 when `-finline-functions' (included in `-O3') is enabled and 5884 `--param max-inline-recursive-depth-auto' is used. The 5885 default value is 450. 5886 5887 `min-inline-recursive-probability' 5888 Recursive inlining is profitable only for function having 5889 deep recursion in average and can hurt for function having 5890 little recursion depth by increasing the prologue size or 5891 complexity of function body to other optimizers. 5892 5893 When profile feedback is available (see `-fprofile-generate') 5894 the actual recursion depth can be guessed from probability 5895 that function will recurse via given call expression. This 5896 parameter limits inlining only to call expression whose 5897 probability exceeds given threshold (in percents). The 5898 default value is 10. 5899 5900 `inline-call-cost' 5901 Specify cost of call instruction relative to simple 5902 arithmetics operations (having cost of 1). Increasing this 5903 cost disqualifies inlining of non-leaf functions and at the 5904 same time increases size of leaf function that is believed to 5905 reduce function size by being inlined. In effect it 5906 increases amount of inlining for code having large 5907 abstraction penalty (many functions that just pass the 5908 arguments to other functions) and decrease inlining for code 5909 with low abstraction penalty. The default value is 16. 5910 5911 `max-unrolled-insns' 5912 The maximum number of instructions that a loop should have if 5913 that loop is unrolled, and if the loop is unrolled, it 5914 determines how many times the loop code is unrolled. 5915 5916 `max-average-unrolled-insns' 5917 The maximum number of instructions biased by probabilities of 5918 their execution that a loop should have if that loop is 5919 unrolled, and if the loop is unrolled, it determines how many 5920 times the loop code is unrolled. 5921 5922 `max-unroll-times' 5923 The maximum number of unrollings of a single loop. 5924 5925 `max-peeled-insns' 5926 The maximum number of instructions that a loop should have if 5927 that loop is peeled, and if the loop is peeled, it determines 5928 how many times the loop code is peeled. 5929 5930 `max-peel-times' 5931 The maximum number of peelings of a single loop. 5932 5933 `max-completely-peeled-insns' 5934 The maximum number of insns of a completely peeled loop. 5935 5936 `max-completely-peel-times' 5937 The maximum number of iterations of a loop to be suitable for 5938 complete peeling. 5939 5940 `max-unswitch-insns' 5941 The maximum number of insns of an unswitched loop. 5942 5943 `max-unswitch-level' 5944 The maximum number of branches unswitched in a single loop. 5945 5946 `lim-expensive' 5947 The minimum cost of an expensive expression in the loop 5948 invariant motion. 5949 5950 `iv-consider-all-candidates-bound' 5951 Bound on number of candidates for induction variables below 5952 that all candidates are considered for each use in induction 5953 variable optimizations. Only the most relevant candidates 5954 are considered if there are more candidates, to avoid 5955 quadratic time complexity. 5956 5957 `iv-max-considered-uses' 5958 The induction variable optimizations give up on loops that 5959 contain more induction variable uses. 5960 5961 `iv-always-prune-cand-set-bound' 5962 If number of candidates in the set is smaller than this value, 5963 we always try to remove unnecessary ivs from the set during 5964 its optimization when a new iv is added to the set. 5965 5966 `scev-max-expr-size' 5967 Bound on size of expressions used in the scalar evolutions 5968 analyzer. Large expressions slow the analyzer. 5969 5970 `vect-max-version-checks' 5971 The maximum number of runtime checks that can be performed 5972 when doing loop versioning in the vectorizer. See option 5973 ftree-vect-loop-version for more information. 5974 5975 `max-iterations-to-track' 5976 The maximum number of iterations of a loop the brute force 5977 algorithm for analysis of # of iterations of the loop tries 5978 to evaluate. 5979 5980 `hot-bb-count-fraction' 5981 Select fraction of the maximal count of repetitions of basic 5982 block in program given basic block needs to have to be 5983 considered hot. 5984 5985 `hot-bb-frequency-fraction' 5986 Select fraction of the maximal frequency of executions of 5987 basic block in function given basic block needs to have to be 5988 considered hot 5989 5990 `max-predicted-iterations' 5991 The maximum number of loop iterations we predict statically. 5992 This is useful in cases where function contain single loop 5993 with known bound and other loop with unknown. We predict the 5994 known number of iterations correctly, while the unknown 5995 number of iterations average to roughly 10. This means that 5996 the loop without bounds would appear artificially cold 5997 relative to the other one. 5998 5999 `tracer-dynamic-coverage' 6000 `tracer-dynamic-coverage-feedback' 6001 This value is used to limit superblock formation once the 6002 given percentage of executed instructions is covered. This 6003 limits unnecessary code size expansion. 6004 6005 The `tracer-dynamic-coverage-feedback' is used only when 6006 profile feedback is available. The real profiles (as opposed 6007 to statically estimated ones) are much less balanced allowing 6008 the threshold to be larger value. 6009 6010 `tracer-max-code-growth' 6011 Stop tail duplication once code growth has reached given 6012 percentage. This is rather hokey argument, as most of the 6013 duplicates will be eliminated later in cross jumping, so it 6014 may be set to much higher values than is the desired code 6015 growth. 6016 6017 `tracer-min-branch-ratio' 6018 Stop reverse growth when the reverse probability of best edge 6019 is less than this threshold (in percent). 6020 6021 `tracer-min-branch-ratio' 6022 `tracer-min-branch-ratio-feedback' 6023 Stop forward growth if the best edge do have probability 6024 lower than this threshold. 6025 6026 Similarly to `tracer-dynamic-coverage' two values are 6027 present, one for compilation for profile feedback and one for 6028 compilation without. The value for compilation with profile 6029 feedback needs to be more conservative (higher) in order to 6030 make tracer effective. 6031 6032 `max-cse-path-length' 6033 Maximum number of basic blocks on path that cse considers. 6034 The default is 10. 6035 6036 `max-cse-insns' 6037 The maximum instructions CSE process before flushing. The 6038 default is 1000. 6039 6040 `global-var-threshold' 6041 Counts the number of function calls (N) and the number of 6042 call-clobbered variables (V). If NxV is larger than this 6043 limit, a single artificial variable will be created to 6044 represent all the call-clobbered variables at function call 6045 sites. This artificial variable will then be made to alias 6046 every call-clobbered variable. (done as `int * size_t' on 6047 the host machine; beware overflow). 6048 6049 `max-aliased-vops' 6050 Maximum number of virtual operands allowed to represent 6051 aliases before triggering the alias grouping heuristic. 6052 Alias grouping reduces compile times and memory consumption 6053 needed for aliasing at the expense of precision loss in alias 6054 information. 6055 6056 `ggc-min-expand' 6057 GCC uses a garbage collector to manage its own memory 6058 allocation. This parameter specifies the minimum percentage 6059 by which the garbage collector's heap should be allowed to 6060 expand between collections. Tuning this may improve 6061 compilation speed; it has no effect on code generation. 6062 6063 The default is 30% + 70% * (RAM/1GB) with an upper bound of 6064 100% when RAM >= 1GB. If `getrlimit' is available, the 6065 notion of "RAM" is the smallest of actual RAM and 6066 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 6067 calculate RAM on a particular platform, the lower bound of 6068 30% is used. Setting this parameter and `ggc-min-heapsize' 6069 to zero causes a full collection to occur at every 6070 opportunity. This is extremely slow, but can be useful for 6071 debugging. 6072 6073 `ggc-min-heapsize' 6074 Minimum size of the garbage collector's heap before it begins 6075 bothering to collect garbage. The first collection occurs 6076 after the heap expands by `ggc-min-expand'% beyond 6077 `ggc-min-heapsize'. Again, tuning this may improve 6078 compilation speed, and has no effect on code generation. 6079 6080 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 6081 which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 6082 exceeded, but with a lower bound of 4096 (four megabytes) and 6083 an upper bound of 131072 (128 megabytes). If GCC is not able 6084 to calculate RAM on a particular platform, the lower bound is 6085 used. Setting this parameter very large effectively disables 6086 garbage collection. Setting this parameter and 6087 `ggc-min-expand' to zero causes a full collection to occur at 6088 every opportunity. 6089 6090 `max-reload-search-insns' 6091 The maximum number of instruction reload should look backward 6092 for equivalent register. Increasing values mean more 6093 aggressive optimization, making the compile time increase 6094 with probably slightly better performance. The default value 6095 is 100. 6096 6097 `max-cselib-memory-locations' 6098 The maximum number of memory locations cselib should take 6099 into account. Increasing values mean more aggressive 6100 optimization, making the compile time increase with probably 6101 slightly better performance. The default value is 500. 6102 6103 `max-flow-memory-locations' 6104 Similar as `max-cselib-memory-locations' but for dataflow 6105 liveness. The default value is 100. 6106 6107 `reorder-blocks-duplicate' 6108 `reorder-blocks-duplicate-feedback' 6109 Used by basic block reordering pass to decide whether to use 6110 unconditional branch or duplicate the code on its 6111 destination. Code is duplicated when its estimated size is 6112 smaller than this value multiplied by the estimated size of 6113 unconditional jump in the hot spots of the program. 6114 6115 The `reorder-block-duplicate-feedback' is used only when 6116 profile feedback is available and may be set to higher values 6117 than `reorder-block-duplicate' since information about the 6118 hot spots is more accurate. 6119 6120 `max-sched-ready-insns' 6121 The maximum number of instructions ready to be issued the 6122 scheduler should consider at any given time during the first 6123 scheduling pass. Increasing values mean more thorough 6124 searches, making the compilation time increase with probably 6125 little benefit. The default value is 100. 6126 6127 `max-sched-region-blocks' 6128 The maximum number of blocks in a region to be considered for 6129 interblock scheduling. The default value is 10. 6130 6131 `max-sched-region-insns' 6132 The maximum number of insns in a region to be considered for 6133 interblock scheduling. The default value is 100. 6134 6135 `min-spec-prob' 6136 The minimum probability (in percents) of reaching a source 6137 block for interblock speculative scheduling. The default 6138 value is 40. 6139 6140 `max-sched-extend-regions-iters' 6141 The maximum number of iterations through CFG to extend 6142 regions. 0 - disable region extension, N - do at most N 6143 iterations. The default value is 0. 6144 6145 `max-sched-insn-conflict-delay' 6146 The maximum conflict delay for an insn to be considered for 6147 speculative motion. The default value is 3. 6148 6149 `sched-spec-prob-cutoff' 6150 The minimal probability of speculation success (in percents), 6151 so that speculative insn will be scheduled. The default 6152 value is 40. 6153 6154 `max-last-value-rtl' 6155 The maximum size measured as number of RTLs that can be 6156 recorded in an expression in combiner for a pseudo register 6157 as last known value of that register. The default is 10000. 6158 6159 `integer-share-limit' 6160 Small integer constants can use a shared data structure, 6161 reducing the compiler's memory usage and increasing its 6162 speed. This sets the maximum value of a shared integer 6163 constant's. The default value is 256. 6164 6165 `min-virtual-mappings' 6166 Specifies the minimum number of virtual mappings in the 6167 incremental SSA updater that should be registered to trigger 6168 the virtual mappings heuristic defined by 6169 virtual-mappings-ratio. The default value is 100. 6170 6171 `virtual-mappings-ratio' 6172 If the number of virtual mappings is virtual-mappings-ratio 6173 bigger than the number of virtual symbols to be updated, then 6174 the incremental SSA updater switches to a full update for 6175 those symbols. The default ratio is 3. 6176 6177 `ssp-buffer-size' 6178 The minimum size of buffers (i.e. arrays) that will receive 6179 stack smashing protection when `-fstack-protection' is used. 6180 6181 `max-jump-thread-duplication-stmts' 6182 Maximum number of statements allowed in a block that needs to 6183 be duplicated when threading jumps. 6184 6185 `max-fields-for-field-sensitive' 6186 Maximum number of fields in a structure we will treat in a 6187 field sensitive manner during pointer analysis. 6188 6189 6190 6191 File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 6192 6193 3.11 Options Controlling the Preprocessor 6194 ========================================= 6195 6196 These options control the C preprocessor, which is run on each C source 6197 file before actual compilation. 6198 6199 If you use the `-E' option, nothing is done except preprocessing. 6200 Some of these options make sense only together with `-E' because they 6201 cause the preprocessor output to be unsuitable for actual compilation. 6202 6203 You can use `-Wp,OPTION' to bypass the compiler driver and pass 6204 OPTION directly through to the preprocessor. If OPTION contains 6205 commas, it is split into multiple options at the commas. However, 6206 many options are modified, translated or interpreted by the 6207 compiler driver before being passed to the preprocessor, and `-Wp' 6208 forcibly bypasses this phase. The preprocessor's direct interface 6209 is undocumented and subject to change, so whenever possible you 6210 should avoid using `-Wp' and let the driver handle the options 6211 instead. 6212 6213 `-Xpreprocessor OPTION' 6214 Pass OPTION as an option to the preprocessor. You can use this to 6215 supply system-specific preprocessor options which GCC does not 6216 know how to recognize. 6217 6218 If you want to pass an option that takes an argument, you must use 6219 `-Xpreprocessor' twice, once for the option and once for the 6220 argument. 6221 6222 `-D NAME' 6223 Predefine NAME as a macro, with definition `1'. 6224 6225 `-D NAME=DEFINITION' 6226 The contents of DEFINITION are tokenized and processed as if they 6227 appeared during translation phase three in a `#define' directive. 6228 In particular, the definition will be truncated by embedded 6229 newline characters. 6230 6231 If you are invoking the preprocessor from a shell or shell-like 6232 program you may need to use the shell's quoting syntax to protect 6233 characters such as spaces that have a meaning in the shell syntax. 6234 6235 If you wish to define a function-like macro on the command line, 6236 write its argument list with surrounding parentheses before the 6237 equals sign (if any). Parentheses are meaningful to most shells, 6238 so you will need to quote the option. With `sh' and `csh', 6239 `-D'NAME(ARGS...)=DEFINITION'' works. 6240 6241 `-D' and `-U' options are processed in the order they are given on 6242 the command line. All `-imacros FILE' and `-include FILE' options 6243 are processed after all `-D' and `-U' options. 6244 6245 `-U NAME' 6246 Cancel any previous definition of NAME, either built in or 6247 provided with a `-D' option. 6248 6249 `-undef' 6250 Do not predefine any system-specific or GCC-specific macros. The 6251 standard predefined macros remain defined. 6252 6253 `-I DIR' 6254 Add the directory DIR to the list of directories to be searched 6255 for header files. Directories named by `-I' are searched before 6256 the standard system include directories. If the directory DIR is 6257 a standard system include directory, the option is ignored to 6258 ensure that the default search order for system directories and 6259 the special treatment of system headers are not defeated . 6260 6261 `-o FILE' 6262 Write output to FILE. This is the same as specifying FILE as the 6263 second non-option argument to `cpp'. `gcc' has a different 6264 interpretation of a second non-option argument, so you must use 6265 `-o' to specify the output file. 6266 6267 `-Wall' 6268 Turns on all optional warnings which are desirable for normal code. 6269 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 6270 warning about integer promotion causing a change of sign in `#if' 6271 expressions. Note that many of the preprocessor's warnings are on 6272 by default and have no options to control them. 6273 6274 `-Wcomment' 6275 `-Wcomments' 6276 Warn whenever a comment-start sequence `/*' appears in a `/*' 6277 comment, or whenever a backslash-newline appears in a `//' comment. 6278 (Both forms have the same effect.) 6279 6280 `-Wtrigraphs' 6281 Most trigraphs in comments cannot affect the meaning of the 6282 program. However, a trigraph that would form an escaped newline 6283 (`??/' at the end of a line) can, by changing where the comment 6284 begins or ends. Therefore, only trigraphs that would form escaped 6285 newlines produce warnings inside a comment. 6286 6287 This option is implied by `-Wall'. If `-Wall' is not given, this 6288 option is still enabled unless trigraphs are enabled. To get 6289 trigraph conversion without warnings, but get the other `-Wall' 6290 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 6291 6292 `-Wtraditional' 6293 Warn about certain constructs that behave differently in 6294 traditional and ISO C. Also warn about ISO C constructs that have 6295 no traditional C equivalent, and problematic constructs which 6296 should be avoided. 6297 6298 `-Wimport' 6299 Warn the first time `#import' is used. 6300 6301 `-Wundef' 6302 Warn whenever an identifier which is not a macro is encountered in 6303 an `#if' directive, outside of `defined'. Such identifiers are 6304 replaced with zero. 6305 6306 `-Wunused-macros' 6307 Warn about macros defined in the main file that are unused. A 6308 macro is "used" if it is expanded or tested for existence at least 6309 once. The preprocessor will also warn if the macro has not been 6310 used at the time it is redefined or undefined. 6311 6312 Built-in macros, macros defined on the command line, and macros 6313 defined in include files are not warned about. 6314 6315 _Note:_ If a macro is actually used, but only used in skipped 6316 conditional blocks, then CPP will report it as unused. To avoid 6317 the warning in such a case, you might improve the scope of the 6318 macro's definition by, for example, moving it into the first 6319 skipped block. Alternatively, you could provide a dummy use with 6320 something like: 6321 6322 #if defined the_macro_causing_the_warning 6323 #endif 6324 6325 `-Wendif-labels' 6326 Warn whenever an `#else' or an `#endif' are followed by text. 6327 This usually happens in code of the form 6328 6329 #if FOO 6330 ... 6331 #else FOO 6332 ... 6333 #endif FOO 6334 6335 The second and third `FOO' should be in comments, but often are not 6336 in older programs. This warning is on by default. 6337 6338 `-Werror' 6339 Make all warnings into hard errors. Source code which triggers 6340 warnings will be rejected. 6341 6342 `-Wsystem-headers' 6343 Issue warnings for code in system headers. These are normally 6344 unhelpful in finding bugs in your own code, therefore suppressed. 6345 If you are responsible for the system library, you may want to see 6346 them. 6347 6348 `-w' 6349 Suppress all warnings, including those which GNU CPP issues by 6350 default. 6351 6352 `-pedantic' 6353 Issue all the mandatory diagnostics listed in the C standard. 6354 Some of them are left out by default, since they trigger 6355 frequently on harmless code. 6356 6357 `-pedantic-errors' 6358 Issue all the mandatory diagnostics, and make all mandatory 6359 diagnostics into errors. This includes mandatory diagnostics that 6360 GCC issues without `-pedantic' but treats as warnings. 6361 6362 `-M' 6363 Instead of outputting the result of preprocessing, output a rule 6364 suitable for `make' describing the dependencies of the main source 6365 file. The preprocessor outputs one `make' rule containing the 6366 object file name for that source file, a colon, and the names of 6367 all the included files, including those coming from `-include' or 6368 `-imacros' command line options. 6369 6370 Unless specified explicitly (with `-MT' or `-MQ'), the object file 6371 name consists of the basename of the source file with any suffix 6372 replaced with object file suffix. If there are many included 6373 files then the rule is split into several lines using `\'-newline. 6374 The rule has no commands. 6375 6376 This option does not suppress the preprocessor's debug output, 6377 such as `-dM'. To avoid mixing such debug output with the 6378 dependency rules you should explicitly specify the dependency 6379 output file with `-MF', or use an environment variable like 6380 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 6381 output will still be sent to the regular output stream as normal. 6382 6383 Passing `-M' to the driver implies `-E', and suppresses warnings 6384 with an implicit `-w'. 6385 6386 `-MM' 6387 Like `-M' but do not mention header files that are found in system 6388 header directories, nor header files that are included, directly 6389 or indirectly, from such a header. 6390 6391 This implies that the choice of angle brackets or double quotes in 6392 an `#include' directive does not in itself determine whether that 6393 header will appear in `-MM' dependency output. This is a slight 6394 change in semantics from GCC versions 3.0 and earlier. 6395 6396 `-MF FILE' 6397 When used with `-M' or `-MM', specifies a file to write the 6398 dependencies to. If no `-MF' switch is given the preprocessor 6399 sends the rules to the same place it would have sent preprocessed 6400 output. 6401 6402 When used with the driver options `-MD' or `-MMD', `-MF' overrides 6403 the default dependency output file. 6404 6405 `-MG' 6406 In conjunction with an option such as `-M' requesting dependency 6407 generation, `-MG' assumes missing header files are generated files 6408 and adds them to the dependency list without raising an error. 6409 The dependency filename is taken directly from the `#include' 6410 directive without prepending any path. `-MG' also suppresses 6411 preprocessed output, as a missing header file renders this useless. 6412 6413 This feature is used in automatic updating of makefiles. 6414 6415 `-MP' 6416 This option instructs CPP to add a phony target for each dependency 6417 other than the main file, causing each to depend on nothing. These 6418 dummy rules work around errors `make' gives if you remove header 6419 files without updating the `Makefile' to match. 6420 6421 This is typical output: 6422 6423 test.o: test.c test.h 6424 6425 test.h: 6426 6427 `-MT TARGET' 6428 Change the target of the rule emitted by dependency generation. By 6429 default CPP takes the name of the main input file, including any 6430 path, deletes any file suffix such as `.c', and appends the 6431 platform's usual object suffix. The result is the target. 6432 6433 An `-MT' option will set the target to be exactly the string you 6434 specify. If you want multiple targets, you can specify them as a 6435 single argument to `-MT', or use multiple `-MT' options. 6436 6437 For example, `-MT '$(objpfx)foo.o'' might give 6438 6439 $(objpfx)foo.o: foo.c 6440 6441 `-MQ TARGET' 6442 Same as `-MT', but it quotes any characters which are special to 6443 Make. `-MQ '$(objpfx)foo.o'' gives 6444 6445 $$(objpfx)foo.o: foo.c 6446 6447 The default target is automatically quoted, as if it were given 6448 with `-MQ'. 6449 6450 `-MD' 6451 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 6452 implied. The driver determines FILE based on whether an `-o' 6453 option is given. If it is, the driver uses its argument but with 6454 a suffix of `.d', otherwise it take the basename of the input file 6455 and applies a `.d' suffix. 6456 6457 If `-MD' is used in conjunction with `-E', any `-o' switch is 6458 understood to specify the dependency output file (*note -MF: 6459 dashMF.), but if used without `-E', each `-o' is understood to 6460 specify a target object file. 6461 6462 Since `-E' is not implied, `-MD' can be used to generate a 6463 dependency output file as a side-effect of the compilation process. 6464 6465 `-MMD' 6466 Like `-MD' except mention only user header files, not system 6467 header files. 6468 6469 `-fpch-deps' 6470 When using precompiled headers (*note Precompiled Headers::), this 6471 flag will cause the dependency-output flags to also list the files 6472 from the precompiled header's dependencies. If not specified only 6473 the precompiled header would be listed and not the files that were 6474 used to create it because those files are not consulted when a 6475 precompiled header is used. 6476 6477 `-fpch-preprocess' 6478 This option allows use of a precompiled header (*note Precompiled 6479 Headers::) together with `-E'. It inserts a special `#pragma', 6480 `#pragma GCC pch_preprocess "<filename>"' in the output to mark 6481 the place where the precompiled header was found, and its 6482 filename. When `-fpreprocessed' is in use, GCC recognizes this 6483 `#pragma' and loads the PCH. 6484 6485 This option is off by default, because the resulting preprocessed 6486 output is only really suitable as input to GCC. It is switched on 6487 by `-save-temps'. 6488 6489 You should not write this `#pragma' in your own code, but it is 6490 safe to edit the filename if the PCH file is available in a 6491 different location. The filename may be absolute or it may be 6492 relative to GCC's current directory. 6493 6494 `-x c' 6495 `-x c++' 6496 `-x objective-c' 6497 `-x assembler-with-cpp' 6498 Specify the source language: C, C++, Objective-C, or assembly. 6499 This has nothing to do with standards conformance or extensions; 6500 it merely selects which base syntax to expect. If you give none 6501 of these options, cpp will deduce the language from the extension 6502 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 6503 extensions for C++ and assembly are also recognized. If cpp does 6504 not recognize the extension, it will treat the file as C; this is 6505 the most generic mode. 6506 6507 _Note:_ Previous versions of cpp accepted a `-lang' option which 6508 selected both the language and the standards conformance level. 6509 This option has been removed, because it conflicts with the `-l' 6510 option. 6511 6512 `-std=STANDARD' 6513 `-ansi' 6514 Specify the standard to which the code should conform. Currently 6515 CPP knows about C and C++ standards; others may be added in the 6516 future. 6517 6518 STANDARD may be one of: 6519 `iso9899:1990' 6520 `c89' 6521 The ISO C standard from 1990. `c89' is the customary 6522 shorthand for this version of the standard. 6523 6524 The `-ansi' option is equivalent to `-std=c89'. 6525 6526 `iso9899:199409' 6527 The 1990 C standard, as amended in 1994. 6528 6529 `iso9899:1999' 6530 `c99' 6531 `iso9899:199x' 6532 `c9x' 6533 The revised ISO C standard, published in December 1999. 6534 Before publication, this was known as C9X. 6535 6536 `gnu89' 6537 The 1990 C standard plus GNU extensions. This is the default. 6538 6539 `gnu99' 6540 `gnu9x' 6541 The 1999 C standard plus GNU extensions. 6542 6543 `c++98' 6544 The 1998 ISO C++ standard plus amendments. 6545 6546 `gnu++98' 6547 The same as `-std=c++98' plus GNU extensions. This is the 6548 default for C++ code. 6549 6550 `-I-' 6551 Split the include path. Any directories specified with `-I' 6552 options before `-I-' are searched only for headers requested with 6553 `#include "FILE"'; they are not searched for `#include <FILE>'. 6554 If additional directories are specified with `-I' options after 6555 the `-I-', those directories are searched for all `#include' 6556 directives. 6557 6558 In addition, `-I-' inhibits the use of the directory of the current 6559 file directory as the first search directory for `#include "FILE"'. 6560 This option has been deprecated. 6561 6562 `-nostdinc' 6563 Do not search the standard system directories for header files. 6564 Only the directories you have specified with `-I' options (and the 6565 directory of the current file, if appropriate) are searched. 6566 6567 `-nostdinc++' 6568 Do not search for header files in the C++-specific standard 6569 directories, but do still search the other standard directories. 6570 (This option is used when building the C++ library.) 6571 6572 `-include FILE' 6573 Process FILE as if `#include "file"' appeared as the first line of 6574 the primary source file. However, the first directory searched 6575 for FILE is the preprocessor's working directory _instead of_ the 6576 directory containing the main source file. If not found there, it 6577 is searched for in the remainder of the `#include "..."' search 6578 chain as normal. 6579 6580 If multiple `-include' options are given, the files are included 6581 in the order they appear on the command line. 6582 6583 `-imacros FILE' 6584 Exactly like `-include', except that any output produced by 6585 scanning FILE is thrown away. Macros it defines remain defined. 6586 This allows you to acquire all the macros from a header without 6587 also processing its declarations. 6588 6589 All files specified by `-imacros' are processed before all files 6590 specified by `-include'. 6591 6592 `-idirafter DIR' 6593 Search DIR for header files, but do it _after_ all directories 6594 specified with `-I' and the standard system directories have been 6595 exhausted. DIR is treated as a system include directory. 6596 6597 `-iprefix PREFIX' 6598 Specify PREFIX as the prefix for subsequent `-iwithprefix' 6599 options. If the prefix represents a directory, you should include 6600 the final `/'. 6601 6602 `-iwithprefix DIR' 6603 `-iwithprefixbefore DIR' 6604 Append DIR to the prefix specified previously with `-iprefix', and 6605 add the resulting directory to the include search path. 6606 `-iwithprefixbefore' puts it in the same place `-I' would; 6607 `-iwithprefix' puts it where `-idirafter' would. 6608 6609 `-isysroot DIR' 6610 This option is like the `--sysroot' option, but applies only to 6611 header files. See the `--sysroot' option for more information. 6612 6613 `-imultilib DIR' 6614 Use DIR as a subdirectory of the directory containing 6615 target-specific C++ headers. 6616 6617 `-isystem DIR' 6618 Search DIR for header files, after all directories specified by 6619 `-I' but before the standard system directories. Mark it as a 6620 system directory, so that it gets the same special treatment as is 6621 applied to the standard system directories. 6622 6623 `-iquote DIR' 6624 Search DIR only for header files requested with `#include "FILE"'; 6625 they are not searched for `#include <FILE>', before all 6626 directories specified by `-I' and before the standard system 6627 directories. 6628 6629 `-fdirectives-only' 6630 This option provides a simplified preprocessor to improve the 6631 performance of distributed build systems such as distcc. It's 6632 behavior depends on a number of other flags. 6633 6634 If the `-E' option is enabled, it suppresses things like macro 6635 expansion, trigraph conversion, and escaped newline splicing 6636 outside of directives. All directives are processed normally, 6637 except that macro definitions are output similar to the `-dD' 6638 option. 6639 6640 If the `-fpreprocessed' option is enabled, it suppresses 6641 predefinition of most builtin and command line macros. This 6642 prevents duplicate definition of macros output with the `-E' 6643 option. 6644 6645 `-fdollars-in-identifiers' 6646 Accept `$' in identifiers. 6647 6648 `-fextended-identifiers' 6649 Accept universal character names in identifiers. This option is 6650 experimental; in a future version of GCC, it will be enabled by 6651 default for C99 and C++. 6652 6653 `-fpreprocessed' 6654 Indicate to the preprocessor that the input file has already been 6655 preprocessed. This suppresses things like macro expansion, 6656 trigraph conversion, escaped newline splicing, and processing of 6657 most directives. The preprocessor still recognizes and removes 6658 comments, so that you can pass a file preprocessed with `-C' to 6659 the compiler without problems. In this mode the integrated 6660 preprocessor is little more than a tokenizer for the front ends. 6661 6662 `-fpreprocessed' is implicit if the input file has one of the 6663 extensions `.i', `.ii' or `.mi'. These are the extensions that 6664 GCC uses for preprocessed files created by `-save-temps'. 6665 6666 `-ftabstop=WIDTH' 6667 Set the distance between tab stops. This helps the preprocessor 6668 report correct column numbers in warnings or errors, even if tabs 6669 appear on the line. If the value is less than 1 or greater than 6670 100, the option is ignored. The default is 8. 6671 6672 `-fexec-charset=CHARSET' 6673 Set the execution character set, used for string and character 6674 constants. The default is UTF-8. CHARSET can be any encoding 6675 supported by the system's `iconv' library routine. 6676 6677 `-fwide-exec-charset=CHARSET' 6678 Set the wide execution character set, used for wide string and 6679 character constants. The default is UTF-32 or UTF-16, whichever 6680 corresponds to the width of `wchar_t'. As with `-fexec-charset', 6681 CHARSET can be any encoding supported by the system's `iconv' 6682 library routine; however, you will have problems with encodings 6683 that do not fit exactly in `wchar_t'. 6684 6685 `-finput-charset=CHARSET' 6686 Set the input character set, used for translation from the 6687 character set of the input file to the source character set used 6688 by GCC. If the locale does not specify, or GCC cannot get this 6689 information from the locale, the default is UTF-8. This can be 6690 overridden by either the locale or this command line option. 6691 Currently the command line option takes precedence if there's a 6692 conflict. CHARSET can be any encoding supported by the system's 6693 `iconv' library routine. 6694 6695 `-fworking-directory' 6696 Enable generation of linemarkers in the preprocessor output that 6697 will let the compiler know the current working directory at the 6698 time of preprocessing. When this option is enabled, the 6699 preprocessor will emit, after the initial linemarker, a second 6700 linemarker with the current working directory followed by two 6701 slashes. GCC will use this directory, when it's present in the 6702 preprocessed input, as the directory emitted as the current 6703 working directory in some debugging information formats. This 6704 option is implicitly enabled if debugging information is enabled, 6705 but this can be inhibited with the negated form 6706 `-fno-working-directory'. If the `-P' flag is present in the 6707 command line, this option has no effect, since no `#line' 6708 directives are emitted whatsoever. 6709 6710 `-fno-show-column' 6711 Do not print column numbers in diagnostics. This may be necessary 6712 if diagnostics are being scanned by a program that does not 6713 understand the column numbers, such as `dejagnu'. 6714 6715 `-A PREDICATE=ANSWER' 6716 Make an assertion with the predicate PREDICATE and answer ANSWER. 6717 This form is preferred to the older form `-A PREDICATE(ANSWER)', 6718 which is still supported, because it does not use shell special 6719 characters. 6720 6721 `-A -PREDICATE=ANSWER' 6722 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 6723 6724 `-dCHARS' 6725 CHARS is a sequence of one or more of the following characters, 6726 and must not be preceded by a space. Other characters are 6727 interpreted by the compiler proper, or reserved for future 6728 versions of GCC, and so are silently ignored. If you specify 6729 characters whose behavior conflicts, the result is undefined. 6730 6731 `M' 6732 Instead of the normal output, generate a list of `#define' 6733 directives for all the macros defined during the execution of 6734 the preprocessor, including predefined macros. This gives 6735 you a way of finding out what is predefined in your version 6736 of the preprocessor. Assuming you have no file `foo.h', the 6737 command 6738 6739 touch foo.h; cpp -dM foo.h 6740 6741 will show all the predefined macros. 6742 6743 `D' 6744 Like `M' except in two respects: it does _not_ include the 6745 predefined macros, and it outputs _both_ the `#define' 6746 directives and the result of preprocessing. Both kinds of 6747 output go to the standard output file. 6748 6749 `N' 6750 Like `D', but emit only the macro names, not their expansions. 6751 6752 `I' 6753 Output `#include' directives in addition to the result of 6754 preprocessing. 6755 6756 `-P' 6757 Inhibit generation of linemarkers in the output from the 6758 preprocessor. This might be useful when running the preprocessor 6759 on something that is not C code, and will be sent to a program 6760 which might be confused by the linemarkers. 6761 6762 `-C' 6763 Do not discard comments. All comments are passed through to the 6764 output file, except for comments in processed directives, which 6765 are deleted along with the directive. 6766 6767 You should be prepared for side effects when using `-C'; it causes 6768 the preprocessor to treat comments as tokens in their own right. 6769 For example, comments appearing at the start of what would be a 6770 directive line have the effect of turning that line into an 6771 ordinary source line, since the first token on the line is no 6772 longer a `#'. 6773 6774 `-CC' 6775 Do not discard comments, including during macro expansion. This is 6776 like `-C', except that comments contained within macros are also 6777 passed through to the output file where the macro is expanded. 6778 6779 In addition to the side-effects of the `-C' option, the `-CC' 6780 option causes all C++-style comments inside a macro to be 6781 converted to C-style comments. This is to prevent later use of 6782 that macro from inadvertently commenting out the remainder of the 6783 source line. 6784 6785 The `-CC' option is generally used to support lint comments. 6786 6787 `-traditional-cpp' 6788 Try to imitate the behavior of old-fashioned C preprocessors, as 6789 opposed to ISO C preprocessors. 6790 6791 `-trigraphs' 6792 Process trigraph sequences. These are three-character sequences, 6793 all starting with `??', that are defined by ISO C to stand for 6794 single characters. For example, `??/' stands for `\', so `'??/n'' 6795 is a character constant for a newline. By default, GCC ignores 6796 trigraphs, but in standard-conforming modes it converts them. See 6797 the `-std' and `-ansi' options. 6798 6799 The nine trigraphs and their replacements are 6800 6801 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 6802 Replacement: [ ] { } # \ ^ | ~ 6803 6804 `-remap' 6805 Enable special code to work around file systems which only permit 6806 very short file names, such as MS-DOS. 6807 6808 `--help' 6809 `--target-help' 6810 Print text describing all the command line options instead of 6811 preprocessing anything. 6812 6813 `-v' 6814 Verbose mode. Print out GNU CPP's version number at the beginning 6815 of execution, and report the final form of the include path. 6816 6817 `-H' 6818 Print the name of each header file used, in addition to other 6819 normal activities. Each name is indented to show how deep in the 6820 `#include' stack it is. Precompiled header files are also 6821 printed, even if they are found to be invalid; an invalid 6822 precompiled header file is printed with `...x' and a valid one 6823 with `...!' . 6824 6825 `-version' 6826 `--version' 6827 Print out GNU CPP's version number. With one dash, proceed to 6828 preprocess as normal. With two dashes, exit immediately. 6829 6830 6831 File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 6832 6833 3.12 Passing Options to the Assembler 6834 ===================================== 6835 6836 You can pass options to the assembler. 6837 6838 `-Wa,OPTION' 6839 Pass OPTION as an option to the assembler. If OPTION contains 6840 commas, it is split into multiple options at the commas. 6841 6842 `-Xassembler OPTION' 6843 Pass OPTION as an option to the assembler. You can use this to 6844 supply system-specific assembler options which GCC does not know 6845 how to recognize. 6846 6847 If you want to pass an option that takes an argument, you must use 6848 `-Xassembler' twice, once for the option and once for the argument. 6849 6850 6851 6852 File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 6853 6854 3.13 Options for Linking 6855 ======================== 6856 6857 These options come into play when the compiler links object files into 6858 an executable output file. They are meaningless if the compiler is not 6859 doing a link step. 6860 6861 `OBJECT-FILE-NAME' 6862 A file name that does not end in a special recognized suffix is 6863 considered to name an object file or library. (Object files are 6864 distinguished from libraries by the linker according to the file 6865 contents.) If linking is done, these object files are used as 6866 input to the linker. 6867 6868 `-c' 6869 `-S' 6870 `-E' 6871 If any of these options is used, then the linker is not run, and 6872 object file names should not be used as arguments. *Note Overall 6873 Options::. 6874 6875 `-lLIBRARY' 6876 `-l LIBRARY' 6877 Search the library named LIBRARY when linking. (The second 6878 alternative with the library as a separate argument is only for 6879 POSIX compliance and is not recommended.) 6880 6881 It makes a difference where in the command you write this option; 6882 the linker searches and processes libraries and object files in 6883 the order they are specified. Thus, `foo.o -lz bar.o' searches 6884 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 6885 refers to functions in `z', those functions may not be loaded. 6886 6887 The linker searches a standard list of directories for the library, 6888 which is actually a file named `libLIBRARY.a'. The linker then 6889 uses this file as if it had been specified precisely by name. 6890 6891 The directories searched include several standard system 6892 directories plus any that you specify with `-L'. 6893 6894 Normally the files found this way are library files--archive files 6895 whose members are object files. The linker handles an archive 6896 file by scanning through it for members which define symbols that 6897 have so far been referenced but not defined. But if the file that 6898 is found is an ordinary object file, it is linked in the usual 6899 fashion. The only difference between using an `-l' option and 6900 specifying a file name is that `-l' surrounds LIBRARY with `lib' 6901 and `.a' and searches several directories. 6902 6903 `-lobjc' 6904 You need this special case of the `-l' option in order to link an 6905 Objective-C or Objective-C++ program. 6906 6907 `-nostartfiles' 6908 Do not use the standard system startup files when linking. The 6909 standard system libraries are used normally, unless `-nostdlib' or 6910 `-nodefaultlibs' is used. 6911 6912 `-nodefaultlibs' 6913 Do not use the standard system libraries when linking. Only the 6914 libraries you specify will be passed to the linker. The standard 6915 startup files are used normally, unless `-nostartfiles' is used. 6916 The compiler may generate calls to `memcmp', `memset', `memcpy' 6917 and `memmove'. These entries are usually resolved by entries in 6918 libc. These entry points should be supplied through some other 6919 mechanism when this option is specified. 6920 6921 `-nostdlib' 6922 Do not use the standard system startup files or libraries when 6923 linking. No startup files and only the libraries you specify will 6924 be passed to the linker. The compiler may generate calls to 6925 `memcmp', `memset', `memcpy' and `memmove'. These entries are 6926 usually resolved by entries in libc. These entry points should be 6927 supplied through some other mechanism when this option is 6928 specified. 6929 6930 One of the standard libraries bypassed by `-nostdlib' and 6931 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 6932 that GCC uses to overcome shortcomings of particular machines, or 6933 special needs for some languages. (*Note Interfacing to GCC 6934 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 6935 most cases, you need `libgcc.a' even when you want to avoid other 6936 standard libraries. In other words, when you specify `-nostdlib' 6937 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 6938 This ensures that you have no unresolved references to internal GCC 6939 library subroutines. (For example, `__main', used to ensure C++ 6940 constructors will be called; *note `collect2': (gccint)Collect2.) 6941 6942 `-pie' 6943 Produce a position independent executable on targets which support 6944 it. For predictable results, you must also specify the same set 6945 of options that were used to generate code (`-fpie', `-fPIE', or 6946 model suboptions) when you specify this option. 6947 6948 `-rdynamic' 6949 Pass the flag `-export-dynamic' to the ELF linker, on targets that 6950 support it. This instructs the linker to add all symbols, not only 6951 used ones, to the dynamic symbol table. This option is needed for 6952 some uses of `dlopen' or to allow obtaining backtraces from within 6953 a program. 6954 6955 `-s' 6956 Remove all symbol table and relocation information from the 6957 executable. 6958 6959 `-static' 6960 On systems that support dynamic linking, this prevents linking 6961 with the shared libraries. On other systems, this option has no 6962 effect. 6963 6964 `-shared' 6965 Produce a shared object which can then be linked with other 6966 objects to form an executable. Not all systems support this 6967 option. For predictable results, you must also specify the same 6968 set of options that were used to generate code (`-fpic', `-fPIC', 6969 or model suboptions) when you specify this option.(1) 6970 6971 `-shared-libgcc' 6972 `-static-libgcc' 6973 On systems that provide `libgcc' as a shared library, these options 6974 force the use of either the shared or static version respectively. 6975 If no shared version of `libgcc' was built when the compiler was 6976 configured, these options have no effect. 6977 6978 There are several situations in which an application should use the 6979 shared `libgcc' instead of the static version. The most common of 6980 these is when the application wishes to throw and catch exceptions 6981 across different shared libraries. In that case, each of the 6982 libraries as well as the application itself should use the shared 6983 `libgcc'. 6984 6985 Therefore, the G++ and GCJ drivers automatically add 6986 `-shared-libgcc' whenever you build a shared library or a main 6987 executable, because C++ and Java programs typically use 6988 exceptions, so this is the right thing to do. 6989 6990 If, instead, you use the GCC driver to create shared libraries, 6991 you may find that they will not always be linked with the shared 6992 `libgcc'. If GCC finds, at its configuration time, that you have 6993 a non-GNU linker or a GNU linker that does not support option 6994 `--eh-frame-hdr', it will link the shared version of `libgcc' into 6995 shared libraries by default. Otherwise, it will take advantage of 6996 the linker and optimize away the linking with the shared version 6997 of `libgcc', linking with the static version of libgcc by default. 6998 This allows exceptions to propagate through such shared 6999 libraries, without incurring relocation costs at library load time. 7000 7001 However, if a library or main executable is supposed to throw or 7002 catch exceptions, you must link it using the G++ or GCJ driver, as 7003 appropriate for the languages used in the program, or using the 7004 option `-shared-libgcc', such that it is linked with the shared 7005 `libgcc'. 7006 7007 `-symbolic' 7008 Bind references to global symbols when building a shared object. 7009 Warn about any unresolved references (unless overridden by the 7010 link editor option `-Xlinker -z -Xlinker defs'). Only a few 7011 systems support this option. 7012 7013 `-Xlinker OPTION' 7014 Pass OPTION as an option to the linker. You can use this to 7015 supply system-specific linker options which GCC does not know how 7016 to recognize. 7017 7018 If you want to pass an option that takes an argument, you must use 7019 `-Xlinker' twice, once for the option and once for the argument. 7020 For example, to pass `-assert definitions', you must write 7021 `-Xlinker -assert -Xlinker definitions'. It does not work to write 7022 `-Xlinker "-assert definitions"', because this passes the entire 7023 string as a single argument, which is not what the linker expects. 7024 7025 `-Wl,OPTION' 7026 Pass OPTION as an option to the linker. If OPTION contains 7027 commas, it is split into multiple options at the commas. 7028 7029 `-u SYMBOL' 7030 Pretend the symbol SYMBOL is undefined, to force linking of 7031 library modules to define it. You can use `-u' multiple times with 7032 different symbols to force loading of additional library modules. 7033 7034 ---------- Footnotes ---------- 7035 7036 (1) On some systems, `gcc -shared' needs to build supplementary stub 7037 code for constructors to work. On multi-libbed systems, `gcc -shared' 7038 must select the correct support libraries to link against. Failing to 7039 supply the correct flags may lead to subtle defects. Supplying them in 7040 cases where they are not necessary is innocuous. 7041 7042 7043 File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 7044 7045 3.14 Options for Directory Search 7046 ================================= 7047 7048 These options specify directories to search for header files, for 7049 libraries and for parts of the compiler: 7050 7051 `-IDIR' 7052 Add the directory DIR to the head of the list of directories to be 7053 searched for header files. This can be used to override a system 7054 header file, substituting your own version, since these 7055 directories are searched before the system header file 7056 directories. However, you should not use this option to add 7057 directories that contain vendor-supplied system header files (use 7058 `-isystem' for that). If you use more than one `-I' option, the 7059 directories are scanned in left-to-right order; the standard 7060 system directories come after. 7061 7062 If a standard system include directory, or a directory specified 7063 with `-isystem', is also specified with `-I', the `-I' option will 7064 be ignored. The directory will still be searched but as a system 7065 directory at its normal position in the system include chain. 7066 This is to ensure that GCC's procedure to fix buggy system headers 7067 and the ordering for the include_next directive are not 7068 inadvertently changed. If you really need to change the search 7069 order for system directories, use the `-nostdinc' and/or 7070 `-isystem' options. 7071 7072 `-iquoteDIR' 7073 Add the directory DIR to the head of the list of directories to be 7074 searched for header files only for the case of `#include "FILE"'; 7075 they are not searched for `#include <FILE>', otherwise just like 7076 `-I'. 7077 7078 `-LDIR' 7079 Add directory DIR to the list of directories to be searched for 7080 `-l'. 7081 7082 `-BPREFIX' 7083 This option specifies where to find the executables, libraries, 7084 include files, and data files of the compiler itself. 7085 7086 The compiler driver program runs one or more of the subprograms 7087 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 7088 program it tries to run, both with and without `MACHINE/VERSION/' 7089 (*note Target Options::). 7090 7091 For each subprogram to be run, the compiler driver first tries the 7092 `-B' prefix, if any. If that name is not found, or if `-B' was 7093 not specified, the driver tries two standard prefixes, which are 7094 `/usr/lib/gcc/' and `/usr/local/lib/gcc/'. If neither of those 7095 results in a file name that is found, the unmodified program name 7096 is searched for using the directories specified in your `PATH' 7097 environment variable. 7098 7099 The compiler will check to see if the path provided by the `-B' 7100 refers to a directory, and if necessary it will add a directory 7101 separator character at the end of the path. 7102 7103 `-B' prefixes that effectively specify directory names also apply 7104 to libraries in the linker, because the compiler translates these 7105 options into `-L' options for the linker. They also apply to 7106 includes files in the preprocessor, because the compiler 7107 translates these options into `-isystem' options for the 7108 preprocessor. In this case, the compiler appends `include' to the 7109 prefix. 7110 7111 The run-time support file `libgcc.a' can also be searched for using 7112 the `-B' prefix, if needed. If it is not found there, the two 7113 standard prefixes above are tried, and that is all. The file is 7114 left out of the link if it is not found by those means. 7115 7116 Another way to specify a prefix much like the `-B' prefix is to use 7117 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 7118 Variables::. 7119 7120 As a special kludge, if the path provided by `-B' is 7121 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 7122 will be replaced by `[dir/]include'. This is to help with 7123 boot-strapping the compiler. 7124 7125 `-specs=FILE' 7126 Process FILE after the compiler reads in the standard `specs' 7127 file, in order to override the defaults that the `gcc' driver 7128 program uses when determining what switches to pass to `cc1', 7129 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 7130 specified on the command line, and they are processed in order, 7131 from left to right. 7132 7133 `--sysroot=DIR' 7134 Use DIR as the logical root directory for headers and libraries. 7135 For example, if the compiler would normally search for headers in 7136 `/usr/include' and libraries in `/usr/lib', it will instead search 7137 `DIR/usr/include' and `DIR/usr/lib'. 7138 7139 If you use both this option and the `-isysroot' option, then the 7140 `--sysroot' option will apply to libraries, but the `-isysroot' 7141 option will apply to header files. 7142 7143 The GNU linker (beginning with version 2.16) has the necessary 7144 support for this option. If your linker does not support this 7145 option, the header file aspect of `--sysroot' will still work, but 7146 the library aspect will not. 7147 7148 `-I-' 7149 This option has been deprecated. Please use `-iquote' instead for 7150 `-I' directories before the `-I-' and remove the `-I-'. Any 7151 directories you specify with `-I' options before the `-I-' option 7152 are searched only for the case of `#include "FILE"'; they are not 7153 searched for `#include <FILE>'. 7154 7155 If additional directories are specified with `-I' options after 7156 the `-I-', these directories are searched for all `#include' 7157 directives. (Ordinarily _all_ `-I' directories are used this way.) 7158 7159 In addition, the `-I-' option inhibits the use of the current 7160 directory (where the current input file came from) as the first 7161 search directory for `#include "FILE"'. There is no way to 7162 override this effect of `-I-'. With `-I.' you can specify 7163 searching the directory which was current when the compiler was 7164 invoked. That is not exactly the same as what the preprocessor 7165 does by default, but it is often satisfactory. 7166 7167 `-I-' does not inhibit the use of the standard system directories 7168 for header files. Thus, `-I-' and `-nostdinc' are independent. 7169 7170 7171 File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 7172 7173 3.15 Specifying subprocesses and the switches to pass to them 7174 ============================================================= 7175 7176 `gcc' is a driver program. It performs its job by invoking a sequence 7177 of other programs to do the work of compiling, assembling and linking. 7178 GCC interprets its command-line parameters and uses these to deduce 7179 which programs it should invoke, and which command-line options it 7180 ought to place on their command lines. This behavior is controlled by 7181 "spec strings". In most cases there is one spec string for each 7182 program that GCC can invoke, but a few programs have multiple spec 7183 strings to control their behavior. The spec strings built into GCC can 7184 be overridden by using the `-specs=' command-line switch to specify a 7185 spec file. 7186 7187 "Spec files" are plaintext files that are used to construct spec 7188 strings. They consist of a sequence of directives separated by blank 7189 lines. The type of directive is determined by the first non-whitespace 7190 character on the line and it can be one of the following: 7191 7192 `%COMMAND' 7193 Issues a COMMAND to the spec file processor. The commands that can 7194 appear here are: 7195 7196 `%include <FILE>' 7197 Search for FILE and insert its text at the current point in 7198 the specs file. 7199 7200 `%include_noerr <FILE>' 7201 Just like `%include', but do not generate an error message if 7202 the include file cannot be found. 7203 7204 `%rename OLD_NAME NEW_NAME' 7205 Rename the spec string OLD_NAME to NEW_NAME. 7206 7207 7208 `*[SPEC_NAME]:' 7209 This tells the compiler to create, override or delete the named 7210 spec string. All lines after this directive up to the next 7211 directive or blank line are considered to be the text for the spec 7212 string. If this results in an empty string then the spec will be 7213 deleted. (Or, if the spec did not exist, then nothing will 7214 happened.) Otherwise, if the spec does not currently exist a new 7215 spec will be created. If the spec does exist then its contents 7216 will be overridden by the text of this directive, unless the first 7217 character of that text is the `+' character, in which case the 7218 text will be appended to the spec. 7219 7220 `[SUFFIX]:' 7221 Creates a new `[SUFFIX] spec' pair. All lines after this directive 7222 and up to the next directive or blank line are considered to make 7223 up the spec string for the indicated suffix. When the compiler 7224 encounters an input file with the named suffix, it will processes 7225 the spec string in order to work out how to compile that file. 7226 For example: 7227 7228 .ZZ: 7229 z-compile -input %i 7230 7231 This says that any input file whose name ends in `.ZZ' should be 7232 passed to the program `z-compile', which should be invoked with the 7233 command-line switch `-input' and with the result of performing the 7234 `%i' substitution. (See below.) 7235 7236 As an alternative to providing a spec string, the text that 7237 follows a suffix directive can be one of the following: 7238 7239 `@LANGUAGE' 7240 This says that the suffix is an alias for a known LANGUAGE. 7241 This is similar to using the `-x' command-line switch to GCC 7242 to specify a language explicitly. For example: 7243 7244 .ZZ: 7245 @c++ 7246 7247 Says that .ZZ files are, in fact, C++ source files. 7248 7249 `#NAME' 7250 This causes an error messages saying: 7251 7252 NAME compiler not installed on this system. 7253 7254 GCC already has an extensive list of suffixes built into it. This 7255 directive will add an entry to the end of the list of suffixes, but 7256 since the list is searched from the end backwards, it is 7257 effectively possible to override earlier entries using this 7258 technique. 7259 7260 7261 GCC has the following spec strings built into it. Spec files can 7262 override these strings or create their own. Note that individual 7263 targets can also add their own spec strings to this list. 7264 7265 asm Options to pass to the assembler 7266 asm_final Options to pass to the assembler post-processor 7267 cpp Options to pass to the C preprocessor 7268 cc1 Options to pass to the C compiler 7269 cc1plus Options to pass to the C++ compiler 7270 endfile Object files to include at the end of the link 7271 link Options to pass to the linker 7272 lib Libraries to include on the command line to the linker 7273 libgcc Decides which GCC support library to pass to the linker 7274 linker Sets the name of the linker 7275 predefines Defines to be passed to the C preprocessor 7276 signed_char Defines to pass to CPP to say whether `char' is signed 7277 by default 7278 startfile Object files to include at the start of the link 7279 7280 Here is a small example of a spec file: 7281 7282 %rename lib old_lib 7283 7284 *lib: 7285 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 7286 7287 This example renames the spec called `lib' to `old_lib' and then 7288 overrides the previous definition of `lib' with a new one. The new 7289 definition adds in some extra command-line options before including the 7290 text of the old definition. 7291 7292 "Spec strings" are a list of command-line options to be passed to their 7293 corresponding program. In addition, the spec strings can contain 7294 `%'-prefixed sequences to substitute variable text or to conditionally 7295 insert text into the command line. Using these constructs it is 7296 possible to generate quite complex command lines. 7297 7298 Here is a table of all defined `%'-sequences for spec strings. Note 7299 that spaces are not generated automatically around the results of 7300 expanding these sequences. Therefore you can concatenate them together 7301 or combine them with constant text in a single argument. 7302 7303 `%%' 7304 Substitute one `%' into the program name or argument. 7305 7306 `%i' 7307 Substitute the name of the input file being processed. 7308 7309 `%b' 7310 Substitute the basename of the input file being processed. This 7311 is the substring up to (and not including) the last period and not 7312 including the directory. 7313 7314 `%B' 7315 This is the same as `%b', but include the file suffix (text after 7316 the last period). 7317 7318 `%d' 7319 Marks the argument containing or following the `%d' as a temporary 7320 file name, so that that file will be deleted if GCC exits 7321 successfully. Unlike `%g', this contributes no text to the 7322 argument. 7323 7324 `%gSUFFIX' 7325 Substitute a file name that has suffix SUFFIX and is chosen once 7326 per compilation, and mark the argument in the same way as `%d'. 7327 To reduce exposure to denial-of-service attacks, the file name is 7328 now chosen in a way that is hard to predict even when previously 7329 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 7330 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 7331 matches the regexp `[.A-Za-z]*' or the special string `%O', which 7332 is treated exactly as if `%O' had been preprocessed. Previously, 7333 `%g' was simply substituted with a file name chosen once per 7334 compilation, without regard to any appended suffix (which was 7335 therefore treated just like ordinary text), making such attacks 7336 more likely to succeed. 7337 7338 `%uSUFFIX' 7339 Like `%g', but generates a new temporary file name even if 7340 `%uSUFFIX' was already seen. 7341 7342 `%USUFFIX' 7343 Substitutes the last file name generated with `%uSUFFIX', 7344 generating a new one if there is no such last file name. In the 7345 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 7346 they don't share the same suffix _space_, so `%g.s ... %U.s ... 7347 %g.s ... %U.s' would involve the generation of two distinct file 7348 names, one for each `%g.s' and another for each `%U.s'. 7349 Previously, `%U' was simply substituted with a file name chosen 7350 for the previous `%u', without regard to any appended suffix. 7351 7352 `%jSUFFIX' 7353 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 7354 writable, and if save-temps is off; otherwise, substitute the name 7355 of a temporary file, just like `%u'. This temporary file is not 7356 meant for communication between processes, but rather as a junk 7357 disposal mechanism. 7358 7359 `%|SUFFIX' 7360 `%mSUFFIX' 7361 Like `%g', except if `-pipe' is in effect. In that case `%|' 7362 substitutes a single dash and `%m' substitutes nothing at all. 7363 These are the two most common ways to instruct a program that it 7364 should read from standard input or write to standard output. If 7365 you need something more elaborate you can use an `%{pipe:`X'}' 7366 construct: see for example `f/lang-specs.h'. 7367 7368 `%.SUFFIX' 7369 Substitutes .SUFFIX for the suffixes of a matched switch's args 7370 when it is subsequently output with `%*'. SUFFIX is terminated by 7371 the next space or %. 7372 7373 `%w' 7374 Marks the argument containing or following the `%w' as the 7375 designated output file of this compilation. This puts the argument 7376 into the sequence of arguments that `%o' will substitute later. 7377 7378 `%o' 7379 Substitutes the names of all the output files, with spaces 7380 automatically placed around them. You should write spaces around 7381 the `%o' as well or the results are undefined. `%o' is for use in 7382 the specs for running the linker. Input files whose names have no 7383 recognized suffix are not compiled at all, but they are included 7384 among the output files, so they will be linked. 7385 7386 `%O' 7387 Substitutes the suffix for object files. Note that this is 7388 handled specially when it immediately follows `%g, %u, or %U', 7389 because of the need for those to form complete file names. The 7390 handling is such that `%O' is treated exactly as if it had already 7391 been substituted, except that `%g, %u, and %U' do not currently 7392 support additional SUFFIX characters following `%O' as they would 7393 following, for example, `.o'. 7394 7395 `%p' 7396 Substitutes the standard macro predefinitions for the current 7397 target machine. Use this when running `cpp'. 7398 7399 `%P' 7400 Like `%p', but puts `__' before and after the name of each 7401 predefined macro, except for macros that start with `__' or with 7402 `_L', where L is an uppercase letter. This is for ISO C. 7403 7404 `%I' 7405 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 7406 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 7407 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 7408 necessary. 7409 7410 `%s' 7411 Current argument is the name of a library or startup file of some 7412 sort. Search for that file in a standard list of directories and 7413 substitute the full name found. 7414 7415 `%eSTR' 7416 Print STR as an error message. STR is terminated by a newline. 7417 Use this when inconsistent options are detected. 7418 7419 `%(NAME)' 7420 Substitute the contents of spec string NAME at this point. 7421 7422 `%[NAME]' 7423 Like `%(...)' but put `__' around `-D' arguments. 7424 7425 `%x{OPTION}' 7426 Accumulate an option for `%X'. 7427 7428 `%X' 7429 Output the accumulated linker options specified by `-Wl' or a `%x' 7430 spec string. 7431 7432 `%Y' 7433 Output the accumulated assembler options specified by `-Wa'. 7434 7435 `%Z' 7436 Output the accumulated preprocessor options specified by `-Wp'. 7437 7438 `%a' 7439 Process the `asm' spec. This is used to compute the switches to 7440 be passed to the assembler. 7441 7442 `%A' 7443 Process the `asm_final' spec. This is a spec string for passing 7444 switches to an assembler post-processor, if such a program is 7445 needed. 7446 7447 `%l' 7448 Process the `link' spec. This is the spec for computing the 7449 command line passed to the linker. Typically it will make use of 7450 the `%L %G %S %D and %E' sequences. 7451 7452 `%D' 7453 Dump out a `-L' option for each directory that GCC believes might 7454 contain startup files. If the target supports multilibs then the 7455 current multilib directory will be prepended to each of these 7456 paths. 7457 7458 `%L' 7459 Process the `lib' spec. This is a spec string for deciding which 7460 libraries should be included on the command line to the linker. 7461 7462 `%G' 7463 Process the `libgcc' spec. This is a spec string for deciding 7464 which GCC support library should be included on the command line 7465 to the linker. 7466 7467 `%S' 7468 Process the `startfile' spec. This is a spec for deciding which 7469 object files should be the first ones passed to the linker. 7470 Typically this might be a file named `crt0.o'. 7471 7472 `%E' 7473 Process the `endfile' spec. This is a spec string that specifies 7474 the last object files that will be passed to the linker. 7475 7476 `%C' 7477 Process the `cpp' spec. This is used to construct the arguments 7478 to be passed to the C preprocessor. 7479 7480 `%1' 7481 Process the `cc1' spec. This is used to construct the options to 7482 be passed to the actual C compiler (`cc1'). 7483 7484 `%2' 7485 Process the `cc1plus' spec. This is used to construct the options 7486 to be passed to the actual C++ compiler (`cc1plus'). 7487 7488 `%*' 7489 Substitute the variable part of a matched option. See below. 7490 Note that each comma in the substituted string is replaced by a 7491 single space. 7492 7493 `%<`S'' 7494 Remove all occurrences of `-S' from the command line. Note--this 7495 command is position dependent. `%' commands in the spec string 7496 before this one will see `-S', `%' commands in the spec string 7497 after this one will not. 7498 7499 `%:FUNCTION(ARGS)' 7500 Call the named function FUNCTION, passing it ARGS. ARGS is first 7501 processed as a nested spec string, then split into an argument 7502 vector in the usual fashion. The function returns a string which 7503 is processed as if it had appeared literally as part of the 7504 current spec. 7505 7506 The following built-in spec functions are provided: 7507 7508 ``if-exists'' 7509 The `if-exists' spec function takes one argument, an absolute 7510 pathname to a file. If the file exists, `if-exists' returns 7511 the pathname. Here is a small example of its usage: 7512 7513 *startfile: 7514 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 7515 7516 ``if-exists-else'' 7517 The `if-exists-else' spec function is similar to the 7518 `if-exists' spec function, except that it takes two 7519 arguments. The first argument is an absolute pathname to a 7520 file. If the file exists, `if-exists-else' returns the 7521 pathname. If it does not exist, it returns the second 7522 argument. This way, `if-exists-else' can be used to select 7523 one file or another, based on the existence of the first. 7524 Here is a small example of its usage: 7525 7526 *startfile: 7527 crt0%O%s %:if-exists(crti%O%s) \ 7528 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 7529 7530 ``replace-outfile'' 7531 The `replace-outfile' spec function takes two arguments. It 7532 looks for the first argument in the outfiles array and 7533 replaces it with the second argument. Here is a small 7534 example of its usage: 7535 7536 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 7537 7538 7539 `%{`S'}' 7540 Substitutes the `-S' switch, if that switch was given to GCC. If 7541 that switch was not specified, this substitutes nothing. Note that 7542 the leading dash is omitted when specifying this option, and it is 7543 automatically inserted if the substitution is performed. Thus the 7544 spec string `%{foo}' would match the command-line option `-foo' 7545 and would output the command line option `-foo'. 7546 7547 `%W{`S'}' 7548 Like %{`S'} but mark last argument supplied within as a file to be 7549 deleted on failure. 7550 7551 `%{`S'*}' 7552 Substitutes all the switches specified to GCC whose names start 7553 with `-S', but which also take an argument. This is used for 7554 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 7555 being one switch whose names starts with `o'. %{o*} would 7556 substitute this text, including the space. Thus two arguments 7557 would be generated. 7558 7559 `%{`S'*&`T'*}' 7560 Like %{`S'*}, but preserve order of `S' and `T' options (the order 7561 of `S' and `T' in the spec is not significant). There can be any 7562 number of ampersand-separated variables; for each the wild card is 7563 optional. Useful for CPP as `%{D*&U*&A*}'. 7564 7565 `%{`S':`X'}' 7566 Substitutes `X', if the `-S' switch was given to GCC. 7567 7568 `%{!`S':`X'}' 7569 Substitutes `X', if the `-S' switch was _not_ given to GCC. 7570 7571 `%{`S'*:`X'}' 7572 Substitutes `X' if one or more switches whose names start with 7573 `-S' are specified to GCC. Normally `X' is substituted only once, 7574 no matter how many such switches appeared. However, if `%*' 7575 appears somewhere in `X', then `X' will be substituted once for 7576 each matching switch, with the `%*' replaced by the part of that 7577 switch that matched the `*'. 7578 7579 `%{.`S':`X'}' 7580 Substitutes `X', if processing a file with suffix `S'. 7581 7582 `%{!.`S':`X'}' 7583 Substitutes `X', if _not_ processing a file with suffix `S'. 7584 7585 `%{`S'|`P':`X'}' 7586 Substitutes `X' if either `-S' or `-P' was given to GCC. This may 7587 be combined with `!', `.', and `*' sequences as well, although 7588 they have a stronger binding than the `|'. If `%*' appears in 7589 `X', all of the alternatives must be starred, and only the first 7590 matching alternative is substituted. 7591 7592 For example, a spec string like this: 7593 7594 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 7595 7596 will output the following command-line options from the following 7597 input command-line options: 7598 7599 fred.c -foo -baz 7600 jim.d -bar -boggle 7601 -d fred.c -foo -baz -boggle 7602 -d jim.d -bar -baz -boggle 7603 7604 `%{S:X; T:Y; :D}' 7605 If `S' was given to GCC, substitutes `X'; else if `T' was given to 7606 GCC, substitutes `Y'; else substitutes `D'. There can be as many 7607 clauses as you need. This may be combined with `.', `!', `|', and 7608 `*' as needed. 7609 7610 7611 The conditional text `X' in a %{`S':`X'} or similar construct may 7612 contain other nested `%' constructs or spaces, or even newlines. They 7613 are processed as usual, as described above. Trailing white space in 7614 `X' is ignored. White space may also appear anywhere on the left side 7615 of the colon in these constructs, except between `.' or `*' and the 7616 corresponding word. 7617 7618 The `-O', `-f', `-m', and `-W' switches are handled specifically in 7619 these constructs. If another value of `-O' or the negated form of a 7620 `-f', `-m', or `-W' switch is found later in the command line, the 7621 earlier switch value is ignored, except with {`S'*} where `S' is just 7622 one letter, which passes all matching options. 7623 7624 The character `|' at the beginning of the predicate text is used to 7625 indicate that a command should be piped to the following command, but 7626 only if `-pipe' is specified. 7627 7628 It is built into GCC which switches take arguments and which do not. 7629 (You might think it would be useful to generalize this to allow each 7630 compiler's spec to say which switches take arguments. But this cannot 7631 be done in a consistent fashion. GCC cannot even decide which input 7632 files have been specified without knowing which switches take arguments, 7633 and it must know which input files to compile in order to tell which 7634 compilers to run). 7635 7636 GCC also knows implicitly that arguments starting in `-l' are to be 7637 treated as compiler output files, and passed to the linker in their 7638 proper position among the other output files. 7639 7640 7641 File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 7642 7643 3.16 Specifying Target Machine and Compiler Version 7644 =================================================== 7645 7646 The usual way to run GCC is to run the executable called `gcc', or 7647 `<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to 7648 run a version other than the one that was installed last. Sometimes 7649 this is inconvenient, so GCC provides options that will switch to 7650 another cross-compiler or version. 7651 7652 `-b MACHINE' 7653 The argument MACHINE specifies the target machine for compilation. 7654 7655 The value to use for MACHINE is the same as was specified as the 7656 machine type when configuring GCC as a cross-compiler. For 7657 example, if a cross-compiler was configured with `configure 7658 arm-elf', meaning to compile for an arm processor with elf 7659 binaries, then you would specify `-b arm-elf' to run that cross 7660 compiler. Because there are other options beginning with `-b', the 7661 configuration must contain a hyphen. 7662 7663 `-V VERSION' 7664 The argument VERSION specifies which version of GCC to run. This 7665 is useful when multiple versions are installed. For example, 7666 VERSION might be `4.0', meaning to run GCC version 4.0. 7667 7668 The `-V' and `-b' options work by running the 7669 `<machine>-gcc-<version>' executable, so there's no real reason to use 7670 them if you can just run that directly. 7671 7672 7673 File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 7674 7675 3.17 Hardware Models and Configurations 7676 ======================================= 7677 7678 Earlier we discussed the standard option `-b' which chooses among 7679 different installed compilers for completely different target machines, 7680 such as VAX vs. 68000 vs. 80386. 7681 7682 In addition, each of these target machine types can have its own 7683 special options, starting with `-m', to choose among various hardware 7684 models or configurations--for example, 68010 vs 68020, floating 7685 coprocessor or none. A single installed version of the compiler can 7686 compile for any model or configuration, according to the options 7687 specified. 7688 7689 Some configurations of the compiler also support additional special 7690 options, usually for compatibility with other compilers on the same 7691 platform. 7692 7693 * Menu: 7694 7695 * ARC Options:: 7696 * ARM Options:: 7697 * AVR Options:: 7698 * Blackfin Options:: 7699 * CRIS Options:: 7700 * CRX Options:: 7701 * Darwin Options:: 7702 * DEC Alpha Options:: 7703 * DEC Alpha/VMS Options:: 7704 * FRV Options:: 7705 * GNU/Linux Options:: 7706 * H8/300 Options:: 7707 * HPPA Options:: 7708 * i386 and x86-64 Options:: 7709 * IA-64 Options:: 7710 * M32C Options:: 7711 * M32R/D Options:: 7712 * M680x0 Options:: 7713 * M68hc1x Options:: 7714 * MCore Options:: 7715 * MIPS Options:: 7716 * MMIX Options:: 7717 * MN10300 Options:: 7718 * MT Options:: 7719 * PDP-11 Options:: 7720 * PowerPC Options:: 7721 * RS/6000 and PowerPC Options:: 7722 * S/390 and zSeries Options:: 7723 * Score Options:: 7724 * SH Options:: 7725 * SPARC Options:: 7726 * System V Options:: 7727 * TMS320C3x/C4x Options:: 7728 * V850 Options:: 7729 * VAX Options:: 7730 * x86-64 Options:: 7731 * Xstormy16 Options:: 7732 * Xtensa Options:: 7733 * zSeries Options:: 7734 7735 7736 File: gcc.info, Node: ARC Options, Next: ARM Options, Up: Submodel Options 7737 7738 3.17.1 ARC Options 7739 ------------------ 7740 7741 These options are defined for ARC implementations: 7742 7743 `-EL' 7744 Compile code for little endian mode. This is the default. 7745 7746 `-EB' 7747 Compile code for big endian mode. 7748 7749 `-mmangle-cpu' 7750 Prepend the name of the cpu to all public symbol names. In 7751 multiple-processor systems, there are many ARC variants with 7752 different instruction and register set characteristics. This flag 7753 prevents code compiled for one cpu to be linked with code compiled 7754 for another. No facility exists for handling variants that are 7755 "almost identical". This is an all or nothing option. 7756 7757 `-mcpu=CPU' 7758 Compile code for ARC variant CPU. Which variants are supported 7759 depend on the configuration. All variants support `-mcpu=base', 7760 this is the default. 7761 7762 `-mtext=TEXT-SECTION' 7763 `-mdata=DATA-SECTION' 7764 `-mrodata=READONLY-DATA-SECTION' 7765 Put functions, data, and readonly data in TEXT-SECTION, 7766 DATA-SECTION, and READONLY-DATA-SECTION respectively by default. 7767 This can be overridden with the `section' attribute. *Note 7768 Variable Attributes::. 7769 7770 7771 7772 File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 7773 7774 3.17.2 ARM Options 7775 ------------------ 7776 7777 These `-m' options are defined for Advanced RISC Machines (ARM) 7778 architectures: 7779 7780 `-mabi=NAME' 7781 Generate code for the specified ABI. Permissible values are: 7782 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 7783 7784 `-mapcs-frame' 7785 Generate a stack frame that is compliant with the ARM Procedure 7786 Call Standard for all functions, even if this is not strictly 7787 necessary for correct execution of the code. Specifying 7788 `-fomit-frame-pointer' with this option will cause the stack 7789 frames not to be generated for leaf functions. The default is 7790 `-mno-apcs-frame'. 7791 7792 `-mapcs' 7793 This is a synonym for `-mapcs-frame'. 7794 7795 `-mthumb-interwork' 7796 Generate code which supports calling between the ARM and Thumb 7797 instruction sets. Without this option the two instruction sets 7798 cannot be reliably used inside one program. The default is 7799 `-mno-thumb-interwork', since slightly larger code is generated 7800 when `-mthumb-interwork' is specified. 7801 7802 `-mno-sched-prolog' 7803 Prevent the reordering of instructions in the function prolog, or 7804 the merging of those instruction with the instructions in the 7805 function's body. This means that all functions will start with a 7806 recognizable set of instructions (or in fact one of a choice from 7807 a small set of different function prologues), and this information 7808 can be used to locate the start if functions inside an executable 7809 piece of code. The default is `-msched-prolog'. 7810 7811 `-mhard-float' 7812 Generate output containing floating point instructions. This is 7813 the default. 7814 7815 `-msoft-float' 7816 Generate output containing library calls for floating point. 7817 *Warning:* the requisite libraries are not available for all ARM 7818 targets. Normally the facilities of the machine's usual C 7819 compiler are used, but this cannot be done directly in 7820 cross-compilation. You must make your own arrangements to provide 7821 suitable library functions for cross-compilation. 7822 7823 `-msoft-float' changes the calling convention in the output file; 7824 therefore, it is only useful if you compile _all_ of a program with 7825 this option. In particular, you need to compile `libgcc.a', the 7826 library that comes with GCC, with `-msoft-float' in order for this 7827 to work. 7828 7829 `-mfloat-abi=NAME' 7830 Specifies which ABI to use for floating point values. Permissible 7831 values are: `soft', `softfp' and `hard'. 7832 7833 `soft' and `hard' are equivalent to `-msoft-float' and 7834 `-mhard-float' respectively. `softfp' allows the generation of 7835 floating point instructions, but still uses the soft-float calling 7836 conventions. 7837 7838 `-mlittle-endian' 7839 Generate code for a processor running in little-endian mode. This 7840 is the default for all standard configurations. 7841 7842 `-mbig-endian' 7843 Generate code for a processor running in big-endian mode; the 7844 default is to compile code for a little-endian processor. 7845 7846 `-mwords-little-endian' 7847 This option only applies when generating code for big-endian 7848 processors. Generate code for a little-endian word order but a 7849 big-endian byte order. That is, a byte order of the form 7850 `32107654'. Note: this option should only be used if you require 7851 compatibility with code for big-endian ARM processors generated by 7852 versions of the compiler prior to 2.8. 7853 7854 `-mcpu=NAME' 7855 This specifies the name of the target ARM processor. GCC uses 7856 this name to determine what kind of instructions it can emit when 7857 generating assembly code. Permissible names are: `arm2', `arm250', 7858 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 7859 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 7860 `arm700i', `arm710', `arm710c', `arm7100', `arm7500', `arm7500fe', 7861 `arm7tdmi', `arm7tdmi-s', `arm8', `strongarm', `strongarm110', 7862 `strongarm1100', `arm8', `arm810', `arm9', `arm9e', `arm920', 7863 `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s', 7864 `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t', 7865 `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s', 7866 `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1176jz-s', 7867 `arm1176jzf-s', `xscale', `iwmmxt', `ep9312'. 7868 7869 `-mtune=NAME' 7870 This option is very similar to the `-mcpu=' option, except that 7871 instead of specifying the actual target processor type, and hence 7872 restricting which instructions can be used, it specifies that GCC 7873 should tune the performance of the code as if the target were of 7874 the type specified in this option, but still choosing the 7875 instructions that it will generate based on the cpu specified by a 7876 `-mcpu=' option. For some ARM implementations better performance 7877 can be obtained by using this option. 7878 7879 `-march=NAME' 7880 This specifies the name of the target ARM architecture. GCC uses 7881 this name to determine what kind of instructions it can emit when 7882 generating assembly code. This option can be used in conjunction 7883 with or instead of the `-mcpu=' option. Permissible names are: 7884 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 7885 `armv5t', `armv5te', `armv6', `armv6j', `iwmmxt', `ep9312'. 7886 7887 `-mfpu=NAME' 7888 `-mfpe=NUMBER' 7889 `-mfp=NUMBER' 7890 This specifies what floating point hardware (or hardware 7891 emulation) is available on the target. Permissible names are: 7892 `fpa', `fpe2', `fpe3', `maverick', `vfp'. `-mfp' and `-mfpe' are 7893 synonyms for `-mfpu'=`fpe'NUMBER, for compatibility with older 7894 versions of GCC. 7895 7896 If `-msoft-float' is specified this specifies the format of 7897 floating point values. 7898 7899 `-mstructure-size-boundary=N' 7900 The size of all structures and unions will be rounded up to a 7901 multiple of the number of bits set by this option. Permissible 7902 values are 8, 32 and 64. The default value varies for different 7903 toolchains. For the COFF targeted toolchain the default value is 7904 8. A value of 64 is only allowed if the underlying ABI supports 7905 it. 7906 7907 Specifying the larger number can produce faster, more efficient 7908 code, but can also increase the size of the program. Different 7909 values are potentially incompatible. Code compiled with one value 7910 cannot necessarily expect to work with code or libraries compiled 7911 with another value, if they exchange information using structures 7912 or unions. 7913 7914 `-mabort-on-noreturn' 7915 Generate a call to the function `abort' at the end of a `noreturn' 7916 function. It will be executed if the function tries to return. 7917 7918 `-mlong-calls' 7919 `-mno-long-calls' 7920 Tells the compiler to perform function calls by first loading the 7921 address of the function into a register and then performing a 7922 subroutine call on this register. This switch is needed if the 7923 target function will lie outside of the 64 megabyte addressing 7924 range of the offset based version of subroutine call instruction. 7925 7926 Even if this switch is enabled, not all function calls will be 7927 turned into long calls. The heuristic is that static functions, 7928 functions which have the `short-call' attribute, functions that 7929 are inside the scope of a `#pragma no_long_calls' directive and 7930 functions whose definitions have already been compiled within the 7931 current compilation unit, will not be turned into long calls. The 7932 exception to this rule is that weak function definitions, 7933 functions with the `long-call' attribute or the `section' 7934 attribute, and functions that are within the scope of a `#pragma 7935 long_calls' directive, will always be turned into long calls. 7936 7937 This feature is not enabled by default. Specifying 7938 `-mno-long-calls' will restore the default behavior, as will 7939 placing the function calls within the scope of a `#pragma 7940 long_calls_off' directive. Note these switches have no effect on 7941 how the compiler generates code to handle function calls via 7942 function pointers. 7943 7944 `-mnop-fun-dllimport' 7945 Disable support for the `dllimport' attribute. 7946 7947 `-msingle-pic-base' 7948 Treat the register used for PIC addressing as read-only, rather 7949 than loading it in the prologue for each function. The run-time 7950 system is responsible for initializing this register with an 7951 appropriate value before execution begins. 7952 7953 `-mpic-register=REG' 7954 Specify the register to be used for PIC addressing. The default 7955 is R10 unless stack-checking is enabled, when R9 is used. 7956 7957 `-mcirrus-fix-invalid-insns' 7958 Insert NOPs into the instruction stream to in order to work around 7959 problems with invalid Maverick instruction combinations. This 7960 option is only valid if the `-mcpu=ep9312' option has been used to 7961 enable generation of instructions for the Cirrus Maverick floating 7962 point co-processor. This option is not enabled by default, since 7963 the problem is only present in older Maverick implementations. 7964 The default can be re-enabled by use of the 7965 `-mno-cirrus-fix-invalid-insns' switch. 7966 7967 `-mpoke-function-name' 7968 Write the name of each function into the text section, directly 7969 preceding the function prologue. The generated code is similar to 7970 this: 7971 7972 t0 7973 .ascii "arm_poke_function_name", 0 7974 .align 7975 t1 7976 .word 0xff000000 + (t1 - t0) 7977 arm_poke_function_name 7978 mov ip, sp 7979 stmfd sp!, {fp, ip, lr, pc} 7980 sub fp, ip, #4 7981 7982 When performing a stack backtrace, code can inspect the value of 7983 `pc' stored at `fp + 0'. If the trace function then looks at 7984 location `pc - 12' and the top 8 bits are set, then we know that 7985 there is a function name embedded immediately preceding this 7986 location and has length `((pc[-3]) & 0xff000000)'. 7987 7988 `-mthumb' 7989 Generate code for the 16-bit Thumb instruction set. The default 7990 is to use the 32-bit ARM instruction set. 7991 7992 `-mtpcs-frame' 7993 Generate a stack frame that is compliant with the Thumb Procedure 7994 Call Standard for all non-leaf functions. (A leaf function is one 7995 that does not call any other functions.) The default is 7996 `-mno-tpcs-frame'. 7997 7998 `-mtpcs-leaf-frame' 7999 Generate a stack frame that is compliant with the Thumb Procedure 8000 Call Standard for all leaf functions. (A leaf function is one 8001 that does not call any other functions.) The default is 8002 `-mno-apcs-leaf-frame'. 8003 8004 `-mcallee-super-interworking' 8005 Gives all externally visible functions in the file being compiled 8006 an ARM instruction set header which switches to Thumb mode before 8007 executing the rest of the function. This allows these functions 8008 to be called from non-interworking code. 8009 8010 `-mcaller-super-interworking' 8011 Allows calls via function pointers (including virtual functions) to 8012 execute correctly regardless of whether the target code has been 8013 compiled for interworking or not. There is a small overhead in 8014 the cost of executing a function pointer if this option is enabled. 8015 8016 `-mtp=NAME' 8017 Specify the access model for the thread local storage pointer. 8018 The valid models are `soft', which generates calls to 8019 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 8020 `cp15' directly (supported in the arm6k architecture), and `auto', 8021 which uses the best available method for the selected processor. 8022 The default setting is `auto'. 8023 8024 8025 8026 File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 8027 8028 3.17.3 AVR Options 8029 ------------------ 8030 8031 These options are defined for AVR implementations: 8032 8033 `-mmcu=MCU' 8034 Specify ATMEL AVR instruction set or MCU type. 8035 8036 Instruction set avr1 is for the minimal AVR core, not supported by 8037 the C compiler, only for assembler programs (MCU types: at90s1200, 8038 attiny10, attiny11, attiny12, attiny15, attiny28). 8039 8040 Instruction set avr2 (default) is for the classic AVR core with up 8041 to 8K program memory space (MCU types: at90s2313, at90s2323, 8042 attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, 8043 at90s8515, at90c8534, at90s8535). 8044 8045 Instruction set avr3 is for the classic AVR core with up to 128K 8046 program memory space (MCU types: atmega103, atmega603, at43usb320, 8047 at76c711). 8048 8049 Instruction set avr4 is for the enhanced AVR core with up to 8K 8050 program memory space (MCU types: atmega8, atmega83, atmega85). 8051 8052 Instruction set avr5 is for the enhanced AVR core with up to 128K 8053 program memory space (MCU types: atmega16, atmega161, atmega163, 8054 atmega32, atmega323, atmega64, atmega128, at43usb355, at94k). 8055 8056 `-msize' 8057 Output instruction sizes to the asm file. 8058 8059 `-minit-stack=N' 8060 Specify the initial stack address, which may be a symbol or 8061 numeric value, `__stack' is the default. 8062 8063 `-mno-interrupts' 8064 Generated code is not compatible with hardware interrupts. Code 8065 size will be smaller. 8066 8067 `-mcall-prologues' 8068 Functions prologues/epilogues expanded as call to appropriate 8069 subroutines. Code size will be smaller. 8070 8071 `-mno-tablejump' 8072 Do not generate tablejump insns which sometimes increase code size. 8073 8074 `-mtiny-stack' 8075 Change only the low 8 bits of the stack pointer. 8076 8077 `-mint8' 8078 Assume int to be 8 bit integer. This affects the sizes of all 8079 types: A char will be 1 byte, an int will be 1 byte, an long will 8080 be 2 bytes and long long will be 4 bytes. Please note that this 8081 option does not comply to the C standards, but it will provide you 8082 with smaller code size. 8083 8084 8085 File: gcc.info, Node: Blackfin Options, Next: CRIS Options, Prev: AVR Options, Up: Submodel Options 8086 8087 3.17.4 Blackfin Options 8088 ----------------------- 8089 8090 `-momit-leaf-frame-pointer' 8091 Don't keep the frame pointer in a register for leaf functions. 8092 This avoids the instructions to save, set up and restore frame 8093 pointers and makes an extra register available in leaf functions. 8094 The option `-fomit-frame-pointer' removes the frame pointer for 8095 all functions which might make debugging harder. 8096 8097 `-mspecld-anomaly' 8098 When enabled, the compiler will ensure that the generated code 8099 does not contain speculative loads after jump instructions. This 8100 option is enabled by default. 8101 8102 `-mno-specld-anomaly' 8103 Don't generate extra code to prevent speculative loads from 8104 occurring. 8105 8106 `-mcsync-anomaly' 8107 When enabled, the compiler will ensure that the generated code 8108 does not contain CSYNC or SSYNC instructions too soon after 8109 conditional branches. This option is enabled by default. 8110 8111 `-mno-csync-anomaly' 8112 Don't generate extra code to prevent CSYNC or SSYNC instructions 8113 from occurring too soon after a conditional branch. 8114 8115 `-mlow-64k' 8116 When enabled, the compiler is free to take advantage of the 8117 knowledge that the entire program fits into the low 64k of memory. 8118 8119 `-mno-low-64k' 8120 Assume that the program is arbitrarily large. This is the default. 8121 8122 `-mid-shared-library' 8123 Generate code that supports shared libraries via the library ID 8124 method. This allows for execute in place and shared libraries in 8125 an environment without virtual memory management. This option 8126 implies `-fPIC'. 8127 8128 `-mno-id-shared-library' 8129 Generate code that doesn't assume ID based shared libraries are 8130 being used. This is the default. 8131 8132 `-mshared-library-id=n' 8133 Specified the identification number of the ID based shared library 8134 being compiled. Specifying a value of 0 will generate more 8135 compact code, specifying other values will force the allocation of 8136 that number to the current library but is no more space or time 8137 efficient than omitting this option. 8138 8139 `-mlong-calls' 8140 `-mno-long-calls' 8141 Tells the compiler to perform function calls by first loading the 8142 address of the function into a register and then performing a 8143 subroutine call on this register. This switch is needed if the 8144 target function will lie outside of the 24 bit addressing range of 8145 the offset based version of subroutine call instruction. 8146 8147 This feature is not enabled by default. Specifying 8148 `-mno-long-calls' will restore the default behavior. Note these 8149 switches have no effect on how the compiler generates code to 8150 handle function calls via function pointers. 8151 8152 8153 File: gcc.info, Node: CRIS Options, Next: CRX Options, Prev: Blackfin Options, Up: Submodel Options 8154 8155 3.17.5 CRIS Options 8156 ------------------- 8157 8158 These options are defined specifically for the CRIS ports. 8159 8160 `-march=ARCHITECTURE-TYPE' 8161 `-mcpu=ARCHITECTURE-TYPE' 8162 Generate code for the specified architecture. The choices for 8163 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 8164 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 8165 cris-axis-linux-gnu, where the default is `v10'. 8166 8167 `-mtune=ARCHITECTURE-TYPE' 8168 Tune to ARCHITECTURE-TYPE everything applicable about the generated 8169 code, except for the ABI and the set of available instructions. 8170 The choices for ARCHITECTURE-TYPE are the same as for 8171 `-march=ARCHITECTURE-TYPE'. 8172 8173 `-mmax-stack-frame=N' 8174 Warn when the stack frame of a function exceeds N bytes. 8175 8176 `-melinux-stacksize=N' 8177 Only available with the `cris-axis-aout' target. Arranges for 8178 indications in the program to the kernel loader that the stack of 8179 the program should be set to N bytes. 8180 8181 `-metrax4' 8182 `-metrax100' 8183 The options `-metrax4' and `-metrax100' are synonyms for 8184 `-march=v3' and `-march=v8' respectively. 8185 8186 `-mmul-bug-workaround' 8187 `-mno-mul-bug-workaround' 8188 Work around a bug in the `muls' and `mulu' instructions for CPU 8189 models where it applies. This option is active by default. 8190 8191 `-mpdebug' 8192 Enable CRIS-specific verbose debug-related information in the 8193 assembly code. This option also has the effect to turn off the 8194 `#NO_APP' formatted-code indicator to the assembler at the 8195 beginning of the assembly file. 8196 8197 `-mcc-init' 8198 Do not use condition-code results from previous instruction; 8199 always emit compare and test instructions before use of condition 8200 codes. 8201 8202 `-mno-side-effects' 8203 Do not emit instructions with side-effects in addressing modes 8204 other than post-increment. 8205 8206 `-mstack-align' 8207 `-mno-stack-align' 8208 `-mdata-align' 8209 `-mno-data-align' 8210 `-mconst-align' 8211 `-mno-const-align' 8212 These options (no-options) arranges (eliminate arrangements) for 8213 the stack-frame, individual data and constants to be aligned for 8214 the maximum single data access size for the chosen CPU model. The 8215 default is to arrange for 32-bit alignment. ABI details such as 8216 structure layout are not affected by these options. 8217 8218 `-m32-bit' 8219 `-m16-bit' 8220 `-m8-bit' 8221 Similar to the stack- data- and const-align options above, these 8222 options arrange for stack-frame, writable data and constants to 8223 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 8224 alignment. 8225 8226 `-mno-prologue-epilogue' 8227 `-mprologue-epilogue' 8228 With `-mno-prologue-epilogue', the normal function prologue and 8229 epilogue that sets up the stack-frame are omitted and no return 8230 instructions or return sequences are generated in the code. Use 8231 this option only together with visual inspection of the compiled 8232 code: no warnings or errors are generated when call-saved 8233 registers must be saved, or storage for local variable needs to be 8234 allocated. 8235 8236 `-mno-gotplt' 8237 `-mgotplt' 8238 With `-fpic' and `-fPIC', don't generate (do generate) instruction 8239 sequences that load addresses for functions from the PLT part of 8240 the GOT rather than (traditional on other architectures) calls to 8241 the PLT. The default is `-mgotplt'. 8242 8243 `-maout' 8244 Legacy no-op option only recognized with the cris-axis-aout target. 8245 8246 `-melf' 8247 Legacy no-op option only recognized with the cris-axis-elf and 8248 cris-axis-linux-gnu targets. 8249 8250 `-melinux' 8251 Only recognized with the cris-axis-aout target, where it selects a 8252 GNU/linux-like multilib, include files and instruction set for 8253 `-march=v8'. 8254 8255 `-mlinux' 8256 Legacy no-op option only recognized with the cris-axis-linux-gnu 8257 target. 8258 8259 `-sim' 8260 This option, recognized for the cris-axis-aout and cris-axis-elf 8261 arranges to link with input-output functions from a simulator 8262 library. Code, initialized data and zero-initialized data are 8263 allocated consecutively. 8264 8265 `-sim2' 8266 Like `-sim', but pass linker options to locate initialized data at 8267 0x40000000 and zero-initialized data at 0x80000000. 8268 8269 8270 File: gcc.info, Node: CRX Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 8271 8272 3.17.6 CRX Options 8273 ------------------ 8274 8275 These options are defined specifically for the CRX ports. 8276 8277 `-mmac' 8278 Enable the use of multiply-accumulate instructions. Disabled by 8279 default. 8280 8281 `-mpush-args' 8282 Push instructions will be used to pass outgoing arguments when 8283 functions are called. Enabled by default. 8284 8285 8286 File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CRX Options, Up: Submodel Options 8287 8288 3.17.7 Darwin Options 8289 --------------------- 8290 8291 These options are defined for all architectures running the Darwin 8292 operating system. 8293 8294 FSF GCC on Darwin does not create "fat" object files; it will create 8295 an object file for the single architecture that it was built to target. 8296 Apple's GCC on Darwin does create "fat" files if multiple `-arch' 8297 options are used; it does so by running the compiler or linker multiple 8298 times and joining the results together with `lipo'. 8299 8300 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 8301 is determined by the flags that specify the ISA that GCC is targetting, 8302 like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 8303 used to override this. 8304 8305 The Darwin tools vary in their behavior when presented with an ISA 8306 mismatch. The assembler, `as', will only permit instructions to be 8307 used that are valid for the subtype of the file it is generating, so 8308 you cannot put 64-bit instructions in an `ppc750' object file. The 8309 linker for shared libraries, `/usr/bin/libtool', will fail and print an 8310 error if asked to create a shared library with a less restrictive 8311 subtype than its input files (for instance, trying to put a `ppc970' 8312 object file in a `ppc7400' library). The linker for executables, `ld', 8313 will quietly give the executable the most restrictive subtype of any of 8314 its input files. 8315 8316 `-FDIR' 8317 Add the framework directory DIR to the head of the list of 8318 directories to be searched for header files. These directories are 8319 interleaved with those specified by `-I' options and are scanned 8320 in a left-to-right order. 8321 8322 A framework directory is a directory with frameworks in it. A 8323 framework is a directory with a `"Headers"' and/or 8324 `"PrivateHeaders"' directory contained directly in it that ends in 8325 `".framework"'. The name of a framework is the name of this 8326 directory excluding the `".framework"'. Headers associated with 8327 the framework are found in one of those two directories, with 8328 `"Headers"' being searched first. A subframework is a framework 8329 directory that is in a framework's `"Frameworks"' directory. 8330 Includes of subframework headers can only appear in a header of a 8331 framework that contains the subframework, or in a sibling 8332 subframework header. Two subframeworks are siblings if they occur 8333 in the same framework. A subframework should not have the same 8334 name as a framework, a warning will be issued if this is violated. 8335 Currently a subframework cannot have subframeworks, in the 8336 future, the mechanism may be extended to support this. The 8337 standard frameworks can be found in `"/System/Library/Frameworks"' 8338 and `"/Library/Frameworks"'. An example include looks like 8339 `#include <Framework/header.h>', where `Framework' denotes the 8340 name of the framework and header.h is found in the 8341 `"PrivateHeaders"' or `"Headers"' directory. 8342 8343 `-gused' 8344 Emit debugging information for symbols that are used. For STABS 8345 debugging format, this enables `-feliminate-unused-debug-symbols'. 8346 This is by default ON. 8347 8348 `-gfull' 8349 Emit debugging information for all symbols and types. 8350 8351 `-mmacosx-version-min=VERSION' 8352 The earliest version of MacOS X that this executable will run on 8353 is VERSION. Typical values of VERSION include `10.1', `10.2', and 8354 `10.3.9'. 8355 8356 The default for this option is to make choices that seem to be most 8357 useful. 8358 8359 `-mkernel' 8360 Enable kernel development mode. The `-mkernel' option sets 8361 `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions', 8362 `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and 8363 `-fno-rtti' where applicable. This mode also sets `-mno-altivec', 8364 `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC 8365 targets. 8366 8367 `-mone-byte-bool' 8368 Override the defaults for `bool' so that `sizeof(bool)==1'. By 8369 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 8370 and `1' when compiling for Darwin/x86, so this option has no 8371 effect on x86. 8372 8373 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 8374 code that is not binary compatible with code generated without 8375 that switch. Using this switch may require recompiling all other 8376 modules in a program, including system libraries. Use this switch 8377 to conform to a non-default data model. 8378 8379 `-mfix-and-continue' 8380 `-ffix-and-continue' 8381 `-findirect-data' 8382 Generate code suitable for fast turn around development. Needed to 8383 enable gdb to dynamically load `.o' files into already running 8384 programs. `-findirect-data' and `-ffix-and-continue' are provided 8385 for backwards compatibility. 8386 8387 `-all_load' 8388 Loads all members of static archive libraries. See man ld(1) for 8389 more information. 8390 8391 `-arch_errors_fatal' 8392 Cause the errors having to do with files that have the wrong 8393 architecture to be fatal. 8394 8395 `-bind_at_load' 8396 Causes the output file to be marked such that the dynamic linker 8397 will bind all undefined references when the file is loaded or 8398 launched. 8399 8400 `-bundle' 8401 Produce a Mach-o bundle format file. See man ld(1) for more 8402 information. 8403 8404 `-bundle_loader EXECUTABLE' 8405 This option specifies the EXECUTABLE that will be loading the build 8406 output file being linked. See man ld(1) for more information. 8407 8408 `-dynamiclib' 8409 When passed this option, GCC will produce a dynamic library 8410 instead of an executable when linking, using the Darwin `libtool' 8411 command. 8412 8413 `-force_cpusubtype_ALL' 8414 This causes GCC's output file to have the ALL subtype, instead of 8415 one controlled by the `-mcpu' or `-march' option. 8416 8417 `-allowable_client CLIENT_NAME' 8418 `-client_name' 8419 `-compatibility_version' 8420 `-current_version' 8421 `-dead_strip' 8422 `-dependency-file' 8423 `-dylib_file' 8424 `-dylinker_install_name' 8425 `-dynamic' 8426 `-exported_symbols_list' 8427 `-filelist' 8428 `-flat_namespace' 8429 `-force_flat_namespace' 8430 `-headerpad_max_install_names' 8431 `-image_base' 8432 `-init' 8433 `-install_name' 8434 `-keep_private_externs' 8435 `-multi_module' 8436 `-multiply_defined' 8437 `-multiply_defined_unused' 8438 `-noall_load' 8439 `-no_dead_strip_inits_and_terms' 8440 `-nofixprebinding' 8441 `-nomultidefs' 8442 `-noprebind' 8443 `-noseglinkedit' 8444 `-pagezero_size' 8445 `-prebind' 8446 `-prebind_all_twolevel_modules' 8447 `-private_bundle' 8448 `-read_only_relocs' 8449 `-sectalign' 8450 `-sectobjectsymbols' 8451 `-whyload' 8452 `-seg1addr' 8453 `-sectcreate' 8454 `-sectobjectsymbols' 8455 `-sectorder' 8456 `-segaddr' 8457 `-segs_read_only_addr' 8458 `-segs_read_write_addr' 8459 `-seg_addr_table' 8460 `-seg_addr_table_filename' 8461 `-seglinkedit' 8462 `-segprot' 8463 `-segs_read_only_addr' 8464 `-segs_read_write_addr' 8465 `-single_module' 8466 `-static' 8467 `-sub_library' 8468 `-sub_umbrella' 8469 `-twolevel_namespace' 8470 `-umbrella' 8471 `-undefined' 8472 `-unexported_symbols_list' 8473 `-weak_reference_mismatches' 8474 `-whatsloaded' 8475 These options are passed to the Darwin linker. The Darwin linker 8476 man page describes them in detail. 8477 8478 8479 File: gcc.info, Node: DEC Alpha Options, Next: DEC Alpha/VMS Options, Prev: Darwin Options, Up: Submodel Options 8480 8481 3.17.8 DEC Alpha Options 8482 ------------------------ 8483 8484 These `-m' options are defined for the DEC Alpha implementations: 8485 8486 `-mno-soft-float' 8487 `-msoft-float' 8488 Use (do not use) the hardware floating-point instructions for 8489 floating-point operations. When `-msoft-float' is specified, 8490 functions in `libgcc.a' will be used to perform floating-point 8491 operations. Unless they are replaced by routines that emulate the 8492 floating-point operations, or compiled in such a way as to call 8493 such emulations routines, these routines will issue floating-point 8494 operations. If you are compiling for an Alpha without 8495 floating-point operations, you must ensure that the library is 8496 built so as not to call them. 8497 8498 Note that Alpha implementations without floating-point operations 8499 are required to have floating-point registers. 8500 8501 `-mfp-reg' 8502 `-mno-fp-regs' 8503 Generate code that uses (does not use) the floating-point register 8504 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 8505 register set is not used, floating point operands are passed in 8506 integer registers as if they were integers and floating-point 8507 results are passed in `$0' instead of `$f0'. This is a 8508 non-standard calling sequence, so any function with a 8509 floating-point argument or return value called by code compiled 8510 with `-mno-fp-regs' must also be compiled with that option. 8511 8512 A typical use of this option is building a kernel that does not 8513 use, and hence need not save and restore, any floating-point 8514 registers. 8515 8516 `-mieee' 8517 The Alpha architecture implements floating-point hardware 8518 optimized for maximum performance. It is mostly compliant with 8519 the IEEE floating point standard. However, for full compliance, 8520 software assistance is required. This option generates code fully 8521 IEEE compliant code _except_ that the INEXACT-FLAG is not 8522 maintained (see below). If this option is turned on, the 8523 preprocessor macro `_IEEE_FP' is defined during compilation. The 8524 resulting code is less efficient but is able to correctly support 8525 denormalized numbers and exceptional IEEE values such as 8526 not-a-number and plus/minus infinity. Other Alpha compilers call 8527 this option `-ieee_with_no_inexact'. 8528 8529 `-mieee-with-inexact' 8530 This is like `-mieee' except the generated code also maintains the 8531 IEEE INEXACT-FLAG. Turning on this option causes the generated 8532 code to implement fully-compliant IEEE math. In addition to 8533 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 8534 On some Alpha implementations the resulting code may execute 8535 significantly slower than the code generated by default. Since 8536 there is very little code that depends on the INEXACT-FLAG, you 8537 should normally not specify this option. Other Alpha compilers 8538 call this option `-ieee_with_inexact'. 8539 8540 `-mfp-trap-mode=TRAP-MODE' 8541 This option controls what floating-point related traps are enabled. 8542 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 8543 trap mode can be set to one of four values: 8544 8545 `n' 8546 This is the default (normal) setting. The only traps that 8547 are enabled are the ones that cannot be disabled in software 8548 (e.g., division by zero trap). 8549 8550 `u' 8551 In addition to the traps enabled by `n', underflow traps are 8552 enabled as well. 8553 8554 `su' 8555 Like `u', but the instructions are marked to be safe for 8556 software completion (see Alpha architecture manual for 8557 details). 8558 8559 `sui' 8560 Like `su', but inexact traps are enabled as well. 8561 8562 `-mfp-rounding-mode=ROUNDING-MODE' 8563 Selects the IEEE rounding mode. Other Alpha compilers call this 8564 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 8565 8566 `n' 8567 Normal IEEE rounding mode. Floating point numbers are 8568 rounded towards the nearest machine number or towards the 8569 even machine number in case of a tie. 8570 8571 `m' 8572 Round towards minus infinity. 8573 8574 `c' 8575 Chopped rounding mode. Floating point numbers are rounded 8576 towards zero. 8577 8578 `d' 8579 Dynamic rounding mode. A field in the floating point control 8580 register (FPCR, see Alpha architecture reference manual) 8581 controls the rounding mode in effect. The C library 8582 initializes this register for rounding towards plus infinity. 8583 Thus, unless your program modifies the FPCR, `d' corresponds 8584 to round towards plus infinity. 8585 8586 `-mtrap-precision=TRAP-PRECISION' 8587 In the Alpha architecture, floating point traps are imprecise. 8588 This means without software assistance it is impossible to recover 8589 from a floating trap and program execution normally needs to be 8590 terminated. GCC can generate code that can assist operating 8591 system trap handlers in determining the exact location that caused 8592 a floating point trap. Depending on the requirements of an 8593 application, different levels of precisions can be selected: 8594 8595 `p' 8596 Program precision. This option is the default and means a 8597 trap handler can only identify which program caused a 8598 floating point exception. 8599 8600 `f' 8601 Function precision. The trap handler can determine the 8602 function that caused a floating point exception. 8603 8604 `i' 8605 Instruction precision. The trap handler can determine the 8606 exact instruction that caused a floating point exception. 8607 8608 Other Alpha compilers provide the equivalent options called 8609 `-scope_safe' and `-resumption_safe'. 8610 8611 `-mieee-conformant' 8612 This option marks the generated code as IEEE conformant. You must 8613 not use this option unless you also specify `-mtrap-precision=i' 8614 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 8615 effect is to emit the line `.eflag 48' in the function prologue of 8616 the generated assembly file. Under DEC Unix, this has the effect 8617 that IEEE-conformant math library routines will be linked in. 8618 8619 `-mbuild-constants' 8620 Normally GCC examines a 32- or 64-bit integer constant to see if 8621 it can construct it from smaller constants in two or three 8622 instructions. If it cannot, it will output the constant as a 8623 literal and generate code to load it from the data segment at 8624 runtime. 8625 8626 Use this option to require GCC to construct _all_ integer constants 8627 using code, even if it takes more instructions (the maximum is 8628 six). 8629 8630 You would typically use this option to build a shared library 8631 dynamic loader. Itself a shared library, it must relocate itself 8632 in memory before it can find the variables and constants in its 8633 own data segment. 8634 8635 `-malpha-as' 8636 `-mgas' 8637 Select whether to generate code to be assembled by the 8638 vendor-supplied assembler (`-malpha-as') or by the GNU assembler 8639 `-mgas'. 8640 8641 `-mbwx' 8642 `-mno-bwx' 8643 `-mcix' 8644 `-mno-cix' 8645 `-mfix' 8646 `-mno-fix' 8647 `-mmax' 8648 `-mno-max' 8649 Indicate whether GCC should generate code to use the optional BWX, 8650 CIX, FIX and MAX instruction sets. The default is to use the 8651 instruction sets supported by the CPU type specified via `-mcpu=' 8652 option or that of the CPU on which GCC was built if none was 8653 specified. 8654 8655 `-mfloat-vax' 8656 `-mfloat-ieee' 8657 Generate code that uses (does not use) VAX F and G floating point 8658 arithmetic instead of IEEE single and double precision. 8659 8660 `-mexplicit-relocs' 8661 `-mno-explicit-relocs' 8662 Older Alpha assemblers provided no way to generate symbol 8663 relocations except via assembler macros. Use of these macros does 8664 not allow optimal instruction scheduling. GNU binutils as of 8665 version 2.12 supports a new syntax that allows the compiler to 8666 explicitly mark which relocations should apply to which 8667 instructions. This option is mostly useful for debugging, as GCC 8668 detects the capabilities of the assembler when it is built and 8669 sets the default accordingly. 8670 8671 `-msmall-data' 8672 `-mlarge-data' 8673 When `-mexplicit-relocs' is in effect, static data is accessed via 8674 "gp-relative" relocations. When `-msmall-data' is used, objects 8 8675 bytes long or smaller are placed in a "small data area" (the 8676 `.sdata' and `.sbss' sections) and are accessed via 16-bit 8677 relocations off of the `$gp' register. This limits the size of 8678 the small data area to 64KB, but allows the variables to be 8679 directly accessed via a single instruction. 8680 8681 The default is `-mlarge-data'. With this option the data area is 8682 limited to just below 2GB. Programs that require more than 2GB of 8683 data must use `malloc' or `mmap' to allocate the data in the heap 8684 instead of in the program's data segment. 8685 8686 When generating code for shared libraries, `-fpic' implies 8687 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 8688 8689 `-msmall-text' 8690 `-mlarge-text' 8691 When `-msmall-text' is used, the compiler assumes that the code of 8692 the entire program (or shared library) fits in 4MB, and is thus 8693 reachable with a branch instruction. When `-msmall-data' is used, 8694 the compiler can assume that all local symbols share the same 8695 `$gp' value, and thus reduce the number of instructions required 8696 for a function call from 4 to 1. 8697 8698 The default is `-mlarge-text'. 8699 8700 `-mcpu=CPU_TYPE' 8701 Set the instruction set and instruction scheduling parameters for 8702 machine type CPU_TYPE. You can specify either the `EV' style name 8703 or the corresponding chip number. GCC supports scheduling 8704 parameters for the EV4, EV5 and EV6 family of processors and will 8705 choose the default values for the instruction set from the 8706 processor you specify. If you do not specify a processor type, 8707 GCC will default to the processor on which the compiler was built. 8708 8709 Supported values for CPU_TYPE are 8710 8711 `ev4' 8712 `ev45' 8713 `21064' 8714 Schedules as an EV4 and has no instruction set extensions. 8715 8716 `ev5' 8717 `21164' 8718 Schedules as an EV5 and has no instruction set extensions. 8719 8720 `ev56' 8721 `21164a' 8722 Schedules as an EV5 and supports the BWX extension. 8723 8724 `pca56' 8725 `21164pc' 8726 `21164PC' 8727 Schedules as an EV5 and supports the BWX and MAX extensions. 8728 8729 `ev6' 8730 `21264' 8731 Schedules as an EV6 and supports the BWX, FIX, and MAX 8732 extensions. 8733 8734 `ev67' 8735 `21264a' 8736 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 8737 extensions. 8738 8739 `-mtune=CPU_TYPE' 8740 Set only the instruction scheduling parameters for machine type 8741 CPU_TYPE. The instruction set is not changed. 8742 8743 `-mmemory-latency=TIME' 8744 Sets the latency the scheduler should assume for typical memory 8745 references as seen by the application. This number is highly 8746 dependent on the memory access patterns used by the application 8747 and the size of the external cache on the machine. 8748 8749 Valid options for TIME are 8750 8751 `NUMBER' 8752 A decimal number representing clock cycles. 8753 8754 `L1' 8755 `L2' 8756 `L3' 8757 `main' 8758 The compiler contains estimates of the number of clock cycles 8759 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 8760 (also called Dcache, Scache, and Bcache), as well as to main 8761 memory. Note that L3 is only valid for EV5. 8762 8763 8764 8765 File: gcc.info, Node: DEC Alpha/VMS Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options 8766 8767 3.17.9 DEC Alpha/VMS Options 8768 ---------------------------- 8769 8770 These `-m' options are defined for the DEC Alpha/VMS implementations: 8771 8772 `-mvms-return-codes' 8773 Return VMS condition codes from main. The default is to return 8774 POSIX style condition (e.g. error) codes. 8775 8776 8777 File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: DEC Alpha/VMS Options, Up: Submodel Options 8778 8779 3.17.10 FRV Options 8780 ------------------- 8781 8782 `-mgpr-32' 8783 Only use the first 32 general purpose registers. 8784 8785 `-mgpr-64' 8786 Use all 64 general purpose registers. 8787 8788 `-mfpr-32' 8789 Use only the first 32 floating point registers. 8790 8791 `-mfpr-64' 8792 Use all 64 floating point registers 8793 8794 `-mhard-float' 8795 Use hardware instructions for floating point operations. 8796 8797 `-msoft-float' 8798 Use library routines for floating point operations. 8799 8800 `-malloc-cc' 8801 Dynamically allocate condition code registers. 8802 8803 `-mfixed-cc' 8804 Do not try to dynamically allocate condition code registers, only 8805 use `icc0' and `fcc0'. 8806 8807 `-mdword' 8808 Change ABI to use double word insns. 8809 8810 `-mno-dword' 8811 Do not use double word instructions. 8812 8813 `-mdouble' 8814 Use floating point double instructions. 8815 8816 `-mno-double' 8817 Do not use floating point double instructions. 8818 8819 `-mmedia' 8820 Use media instructions. 8821 8822 `-mno-media' 8823 Do not use media instructions. 8824 8825 `-mmuladd' 8826 Use multiply and add/subtract instructions. 8827 8828 `-mno-muladd' 8829 Do not use multiply and add/subtract instructions. 8830 8831 `-mfdpic' 8832 Select the FDPIC ABI, that uses function descriptors to represent 8833 pointers to functions. Without any PIC/PIE-related options, it 8834 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 8835 and small data are within a 12-bit range from the GOT base 8836 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 8837 bits. 8838 8839 `-minline-plt' 8840 Enable inlining of PLT entries in function calls to functions that 8841 are not known to bind locally. It has no effect without `-mfdpic'. 8842 It's enabled by default if optimizing for speed and compiling for 8843 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 8844 optimization option such as `-O3' or above is present in the 8845 command line. 8846 8847 `-mTLS' 8848 Assume a large TLS segment when generating thread-local code. 8849 8850 `-mtls' 8851 Do not assume a large TLS segment when generating thread-local 8852 code. 8853 8854 `-mgprel-ro' 8855 Enable the use of `GPREL' relocations in the FDPIC ABI for data 8856 that is known to be in read-only sections. It's enabled by 8857 default, except for `-fpic' or `-fpie': even though it may help 8858 make the global offset table smaller, it trades 1 instruction for 8859 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 8860 of which may be shared by multiple symbols, and it avoids the need 8861 for a GOT entry for the referenced symbol, so it's more likely to 8862 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 8863 8864 `-multilib-library-pic' 8865 Link with the (library, not FD) pic libraries. It's implied by 8866 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 8867 `-mfdpic'. You should never have to use it explicitly. 8868 8869 `-mlinked-fp' 8870 Follow the EABI requirement of always creating a frame pointer 8871 whenever a stack frame is allocated. This option is enabled by 8872 default and can be disabled with `-mno-linked-fp'. 8873 8874 `-mlong-calls' 8875 Use indirect addressing to call functions outside the current 8876 compilation unit. This allows the functions to be placed anywhere 8877 within the 32-bit address space. 8878 8879 `-malign-labels' 8880 Try to align labels to an 8-byte boundary by inserting nops into 8881 the previous packet. This option only has an effect when VLIW 8882 packing is enabled. It doesn't create new packets; it merely adds 8883 nops to existing ones. 8884 8885 `-mlibrary-pic' 8886 Generate position-independent EABI code. 8887 8888 `-macc-4' 8889 Use only the first four media accumulator registers. 8890 8891 `-macc-8' 8892 Use all eight media accumulator registers. 8893 8894 `-mpack' 8895 Pack VLIW instructions. 8896 8897 `-mno-pack' 8898 Do not pack VLIW instructions. 8899 8900 `-mno-eflags' 8901 Do not mark ABI switches in e_flags. 8902 8903 `-mcond-move' 8904 Enable the use of conditional-move instructions (default). 8905 8906 This switch is mainly for debugging the compiler and will likely 8907 be removed in a future version. 8908 8909 `-mno-cond-move' 8910 Disable the use of conditional-move instructions. 8911 8912 This switch is mainly for debugging the compiler and will likely 8913 be removed in a future version. 8914 8915 `-mscc' 8916 Enable the use of conditional set instructions (default). 8917 8918 This switch is mainly for debugging the compiler and will likely 8919 be removed in a future version. 8920 8921 `-mno-scc' 8922 Disable the use of conditional set instructions. 8923 8924 This switch is mainly for debugging the compiler and will likely 8925 be removed in a future version. 8926 8927 `-mcond-exec' 8928 Enable the use of conditional execution (default). 8929 8930 This switch is mainly for debugging the compiler and will likely 8931 be removed in a future version. 8932 8933 `-mno-cond-exec' 8934 Disable the use of conditional execution. 8935 8936 This switch is mainly for debugging the compiler and will likely 8937 be removed in a future version. 8938 8939 `-mvliw-branch' 8940 Run a pass to pack branches into VLIW instructions (default). 8941 8942 This switch is mainly for debugging the compiler and will likely 8943 be removed in a future version. 8944 8945 `-mno-vliw-branch' 8946 Do not run a pass to pack branches into VLIW instructions. 8947 8948 This switch is mainly for debugging the compiler and will likely 8949 be removed in a future version. 8950 8951 `-mmulti-cond-exec' 8952 Enable optimization of `&&' and `||' in conditional execution 8953 (default). 8954 8955 This switch is mainly for debugging the compiler and will likely 8956 be removed in a future version. 8957 8958 `-mno-multi-cond-exec' 8959 Disable optimization of `&&' and `||' in conditional execution. 8960 8961 This switch is mainly for debugging the compiler and will likely 8962 be removed in a future version. 8963 8964 `-mnested-cond-exec' 8965 Enable nested conditional execution optimizations (default). 8966 8967 This switch is mainly for debugging the compiler and will likely 8968 be removed in a future version. 8969 8970 `-mno-nested-cond-exec' 8971 Disable nested conditional execution optimizations. 8972 8973 This switch is mainly for debugging the compiler and will likely 8974 be removed in a future version. 8975 8976 `-moptimize-membar' 8977 This switch removes redundant `membar' instructions from the 8978 compiler generated code. It is enabled by default. 8979 8980 `-mno-optimize-membar' 8981 This switch disables the automatic removal of redundant `membar' 8982 instructions from the generated code. 8983 8984 `-mtomcat-stats' 8985 Cause gas to print out tomcat statistics. 8986 8987 `-mcpu=CPU' 8988 Select the processor type for which to generate code. Possible 8989 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 8990 `fr400', `fr300' and `simple'. 8991 8992 8993 8994 File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 8995 8996 3.17.11 GNU/Linux Options 8997 ------------------------- 8998 8999 These `-m' options are defined for GNU/Linux targets: 9000 9001 `-mglibc' 9002 Use the GNU C library instead of uClibc. This is the default 9003 except on `*-*-linux-*uclibc*' targets. 9004 9005 `-muclibc' 9006 Use uClibc instead of the GNU C library. This is the default on 9007 `*-*-linux-*uclibc*' targets. 9008 9009 9010 File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 9011 9012 3.17.12 H8/300 Options 9013 ---------------------- 9014 9015 These `-m' options are defined for the H8/300 implementations: 9016 9017 `-mrelax' 9018 Shorten some address references at link time, when possible; uses 9019 the linker option `-relax'. *Note `ld' and the H8/300: 9020 (ld)H8/300, for a fuller description. 9021 9022 `-mh' 9023 Generate code for the H8/300H. 9024 9025 `-ms' 9026 Generate code for the H8S. 9027 9028 `-mn' 9029 Generate code for the H8S and H8/300H in the normal mode. This 9030 switch must be used either with `-mh' or `-ms'. 9031 9032 `-ms2600' 9033 Generate code for the H8S/2600. This switch must be used with 9034 `-ms'. 9035 9036 `-mint32' 9037 Make `int' data 32 bits by default. 9038 9039 `-malign-300' 9040 On the H8/300H and H8S, use the same alignment rules as for the 9041 H8/300. The default for the H8/300H and H8S is to align longs and 9042 floats on 4 byte boundaries. `-malign-300' causes them to be 9043 aligned on 2 byte boundaries. This option has no effect on the 9044 H8/300. 9045 9046 9047 File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 9048 9049 3.17.13 HPPA Options 9050 -------------------- 9051 9052 These `-m' options are defined for the HPPA family of computers: 9053 9054 `-march=ARCHITECTURE-TYPE' 9055 Generate code for the specified architecture. The choices for 9056 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 9057 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 9058 an HP-UX system to determine the proper architecture option for 9059 your machine. Code compiled for lower numbered architectures will 9060 run on higher numbered architectures, but not the other way around. 9061 9062 `-mpa-risc-1-0' 9063 `-mpa-risc-1-1' 9064 `-mpa-risc-2-0' 9065 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 9066 respectively. 9067 9068 `-mbig-switch' 9069 Generate code suitable for big switch tables. Use this option 9070 only if the assembler/linker complain about out of range branches 9071 within a switch table. 9072 9073 `-mjump-in-delay' 9074 Fill delay slots of function calls with unconditional jump 9075 instructions by modifying the return pointer for the function call 9076 to be the target of the conditional jump. 9077 9078 `-mdisable-fpregs' 9079 Prevent floating point registers from being used in any manner. 9080 This is necessary for compiling kernels which perform lazy context 9081 switching of floating point registers. If you use this option and 9082 attempt to perform floating point operations, the compiler will 9083 abort. 9084 9085 `-mdisable-indexing' 9086 Prevent the compiler from using indexing address modes. This 9087 avoids some rather obscure problems when compiling MIG generated 9088 code under MACH. 9089 9090 `-mno-space-regs' 9091 Generate code that assumes the target has no space registers. 9092 This allows GCC to generate faster indirect calls and use unscaled 9093 index address modes. 9094 9095 Such code is suitable for level 0 PA systems and kernels. 9096 9097 `-mfast-indirect-calls' 9098 Generate code that assumes calls never cross space boundaries. 9099 This allows GCC to emit code which performs faster indirect calls. 9100 9101 This option will not work in the presence of shared libraries or 9102 nested functions. 9103 9104 `-mfixed-range=REGISTER-RANGE' 9105 Generate code treating the given register range as fixed registers. 9106 A fixed register is one that the register allocator can not use. 9107 This is useful when compiling kernel code. A register range is 9108 specified as two registers separated by a dash. Multiple register 9109 ranges can be specified separated by a comma. 9110 9111 `-mlong-load-store' 9112 Generate 3-instruction load and store sequences as sometimes 9113 required by the HP-UX 10 linker. This is equivalent to the `+k' 9114 option to the HP compilers. 9115 9116 `-mportable-runtime' 9117 Use the portable calling conventions proposed by HP for ELF 9118 systems. 9119 9120 `-mgas' 9121 Enable the use of assembler directives only GAS understands. 9122 9123 `-mschedule=CPU-TYPE' 9124 Schedule code according to the constraints for the machine type 9125 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 9126 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 9127 HP-UX system to determine the proper scheduling option for your 9128 machine. The default scheduling is `8000'. 9129 9130 `-mlinker-opt' 9131 Enable the optimization pass in the HP-UX linker. Note this makes 9132 symbolic debugging impossible. It also triggers a bug in the 9133 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 9134 messages when linking some programs. 9135 9136 `-msoft-float' 9137 Generate output containing library calls for floating point. 9138 *Warning:* the requisite libraries are not available for all HPPA 9139 targets. Normally the facilities of the machine's usual C 9140 compiler are used, but this cannot be done directly in 9141 cross-compilation. You must make your own arrangements to provide 9142 suitable library functions for cross-compilation. The embedded 9143 target `hppa1.1-*-pro' does provide software floating point 9144 support. 9145 9146 `-msoft-float' changes the calling convention in the output file; 9147 therefore, it is only useful if you compile _all_ of a program with 9148 this option. In particular, you need to compile `libgcc.a', the 9149 library that comes with GCC, with `-msoft-float' in order for this 9150 to work. 9151 9152 `-msio' 9153 Generate the predefine, `_SIO', for server IO. The default is 9154 `-mwsio'. This generates the predefines, `__hp9000s700', 9155 `__hp9000s700__' and `_WSIO', for workstation IO. These options 9156 are available under HP-UX and HI-UX. 9157 9158 `-mgnu-ld' 9159 Use GNU ld specific options. This passes `-shared' to ld when 9160 building a shared library. It is the default when GCC is 9161 configured, explicitly or implicitly, with the GNU linker. This 9162 option does not have any affect on which ld is called, it only 9163 changes what parameters are passed to that ld. The ld that is 9164 called is determined by the `--with-ld' configure option, GCC's 9165 program search path, and finally by the user's `PATH'. The linker 9166 used by GCC can be printed using `which `gcc 9167 -print-prog-name=ld`'. This option is only available on the 64 9168 bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'. 9169 9170 `-mhp-ld' 9171 Use HP ld specific options. This passes `-b' to ld when building 9172 a shared library and passes `+Accept TypeMismatch' to ld on all 9173 links. It is the default when GCC is configured, explicitly or 9174 implicitly, with the HP linker. This option does not have any 9175 affect on which ld is called, it only changes what parameters are 9176 passed to that ld. The ld that is called is determined by the 9177 `--with-ld' configure option, GCC's program search path, and 9178 finally by the user's `PATH'. The linker used by GCC can be 9179 printed using `which `gcc -print-prog-name=ld`'. This option is 9180 only available on the 64 bit HP-UX GCC, i.e. configured with 9181 `hppa*64*-*-hpux*'. 9182 9183 `-mlong-calls' 9184 Generate code that uses long call sequences. This ensures that a 9185 call is always able to reach linker generated stubs. The default 9186 is to generate long calls only when the distance from the call 9187 site to the beginning of the function or translation unit, as the 9188 case may be, exceeds a predefined limit set by the branch type 9189 being used. The limits for normal calls are 7,600,000 and 240,000 9190 bytes, respectively for the PA 2.0 and PA 1.X architectures. 9191 Sibcalls are always limited at 240,000 bytes. 9192 9193 Distances are measured from the beginning of functions when using 9194 the `-ffunction-sections' option, or when using the `-mgas' and 9195 `-mno-portable-runtime' options together under HP-UX with the SOM 9196 linker. 9197 9198 It is normally not desirable to use this option as it will degrade 9199 performance. However, it may be useful in large applications, 9200 particularly when partial linking is used to build the application. 9201 9202 The types of long calls used depends on the capabilities of the 9203 assembler and linker, and the type of code being generated. The 9204 impact on systems that support long absolute calls, and long pic 9205 symbol-difference or pc-relative calls should be relatively small. 9206 However, an indirect call is used on 32-bit ELF systems in pic code 9207 and it is quite long. 9208 9209 `-munix=UNIX-STD' 9210 Generate compiler predefines and select a startfile for the 9211 specified UNIX standard. The choices for UNIX-STD are `93', `95' 9212 and `98'. `93' is supported on all HP-UX versions. `95' is 9213 available on HP-UX 10.10 and later. `98' is available on HP-UX 9214 11.11 and later. The default values are `93' for HP-UX 10.00, 9215 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 9216 later. 9217 9218 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 9219 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 9220 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 9221 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 9222 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 9223 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 9224 9225 It is _important_ to note that this option changes the interfaces 9226 for various library routines. It also affects the operational 9227 behavior of the C library. Thus, _extreme_ care is needed in 9228 using this option. 9229 9230 Library code that is intended to operate with more than one UNIX 9231 standard must test, set and restore the variable 9232 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 9233 provide this capability. 9234 9235 `-nolibdld' 9236 Suppress the generation of link options to search libdld.sl when 9237 the `-static' option is specified on HP-UX 10 and later. 9238 9239 `-static' 9240 The HP-UX implementation of setlocale in libc has a dependency on 9241 libdld.sl. There isn't an archive version of libdld.sl. Thus, 9242 when the `-static' option is specified, special link options are 9243 needed to resolve this dependency. 9244 9245 On HP-UX 10 and later, the GCC driver adds the necessary options to 9246 link with libdld.sl when the `-static' option is specified. This 9247 causes the resulting binary to be dynamic. On the 64-bit port, 9248 the linkers generate dynamic binaries by default in any case. The 9249 `-nolibdld' option can be used to prevent the GCC driver from 9250 adding these link options. 9251 9252 `-threads' 9253 Add support for multithreading with the "dce thread" library under 9254 HP-UX. This option sets flags for both the preprocessor and 9255 linker. 9256 9257 9258 File: gcc.info, Node: i386 and x86-64 Options, Next: IA-64 Options, Prev: HPPA Options, Up: Submodel Options 9259 9260 3.17.14 Intel 386 and AMD x86-64 Options 9261 ---------------------------------------- 9262 9263 These `-m' options are defined for the i386 and x86-64 family of 9264 computers: 9265 9266 `-mtune=CPU-TYPE' 9267 Tune to CPU-TYPE everything applicable about the generated code, 9268 except for the ABI and the set of available instructions. The 9269 choices for CPU-TYPE are: 9270 _generic_ 9271 Produce code optimized for the most common IA32/AMD64/EM64T 9272 processors. If you know the CPU on which your code will run, 9273 then you should use the corresponding `-mtune' option instead 9274 of `-mtune=generic'. But, if you do not know exactly what 9275 CPU users of your application will have, then you should use 9276 this option. 9277 9278 As new processors are deployed in the marketplace, the 9279 behavior of this option will change. Therefore, if you 9280 upgrade to a newer version of GCC, the code generated option 9281 will change to reflect the processors that were most common 9282 when that version of GCC was released. 9283 9284 There is no `-march=generic' option because `-march' 9285 indicates the instruction set the compiler can use, and there 9286 is no generic instruction set applicable to all processors. 9287 In contrast, `-mtune' indicates the processor (or, in this 9288 case, collection of processors) for which the code is 9289 optimized. 9290 9291 _native_ 9292 This selects the CPU to tune for at compilation time by 9293 determining the processor type of the compiling machine. 9294 Using `-mtune=native' will produce code optimized for the 9295 local machine under the constraints of the selected 9296 instruction set. Using `-march=native' will enable all 9297 instruction subsets supported by the local machine (hence the 9298 result might not run on different machines). 9299 9300 _i386_ 9301 Original Intel's i386 CPU. 9302 9303 _i486_ 9304 Intel's i486 CPU. (No scheduling is implemented for this 9305 chip.) 9306 9307 _i586, pentium_ 9308 Intel Pentium CPU with no MMX support. 9309 9310 _pentium-mmx_ 9311 Intel PentiumMMX CPU based on Pentium core with MMX 9312 instruction set support. 9313 9314 _pentiumpro_ 9315 Intel PentiumPro CPU. 9316 9317 _i686_ 9318 Same as `generic', but when used as `march' option, PentiumPro 9319 instruction set will be used, so the code will run on all 9320 i686 family chips. 9321 9322 _pentium2_ 9323 Intel Pentium2 CPU based on PentiumPro core with MMX 9324 instruction set support. 9325 9326 _pentium3, pentium3m_ 9327 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE 9328 instruction set support. 9329 9330 _pentium-m_ 9331 Low power version of Intel Pentium3 CPU with MMX, SSE and 9332 SSE2 instruction set support. Used by Centrino notebooks. 9333 9334 _pentium4, pentium4m_ 9335 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set 9336 support. 9337 9338 _prescott_ 9339 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 9340 and SSE3 instruction set support. 9341 9342 _nocona_ 9343 Improved version of Intel Pentium4 CPU with 64-bit 9344 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 9345 9346 _k6_ 9347 AMD K6 CPU with MMX instruction set support. 9348 9349 _k6-2, k6-3_ 9350 Improved versions of AMD K6 CPU with MMX and 3dNOW! 9351 instruction set support. 9352 9353 _athlon, athlon-tbird_ 9354 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE 9355 prefetch instructions support. 9356 9357 _athlon-4, athlon-xp, athlon-mp_ 9358 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and 9359 full SSE instruction set support. 9360 9361 _k8, opteron, athlon64, athlon-fx_ 9362 AMD K8 core based CPUs with x86-64 instruction set support. 9363 (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 9364 64-bit instruction set extensions.) 9365 9366 _winchip-c6_ 9367 IDT Winchip C6 CPU, dealt in same way as i486 with additional 9368 MMX instruction set support. 9369 9370 _winchip2_ 9371 IDT Winchip2 CPU, dealt in same way as i486 with additional 9372 MMX and 3dNOW! instruction set support. 9373 9374 _c3_ 9375 Via C3 CPU with MMX and 3dNOW! instruction set support. (No 9376 scheduling is implemented for this chip.) 9377 9378 _c3-2_ 9379 Via C3-2 CPU with MMX and SSE instruction set support. (No 9380 scheduling is implemented for this chip.) 9381 9382 While picking a specific CPU-TYPE will schedule things 9383 appropriately for that particular chip, the compiler will not 9384 generate any code that does not run on the i386 without the 9385 `-march=CPU-TYPE' option being used. 9386 9387 `-march=CPU-TYPE' 9388 Generate instructions for the machine type CPU-TYPE. The choices 9389 for CPU-TYPE are the same as for `-mtune'. Moreover, specifying 9390 `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 9391 9392 `-mcpu=CPU-TYPE' 9393 A deprecated synonym for `-mtune'. 9394 9395 `-m386' 9396 `-m486' 9397 `-mpentium' 9398 `-mpentiumpro' 9399 These options are synonyms for `-mtune=i386', `-mtune=i486', 9400 `-mtune=pentium', and `-mtune=pentiumpro' respectively. These 9401 synonyms are deprecated. 9402 9403 `-mfpmath=UNIT' 9404 Generate floating point arithmetics for selected unit UNIT. The 9405 choices for UNIT are: 9406 9407 `387' 9408 Use the standard 387 floating point coprocessor present 9409 majority of chips and emulated otherwise. Code compiled with 9410 this option will run almost everywhere. The temporary 9411 results are computed in 80bit precision instead of precision 9412 specified by the type resulting in slightly different results 9413 compared to most of other chips. See `-ffloat-store' for 9414 more detailed description. 9415 9416 This is the default choice for i386 compiler. 9417 9418 `sse' 9419 Use scalar floating point instructions present in the SSE 9420 instruction set. This instruction set is supported by 9421 Pentium3 and newer chips, in the AMD line by Athlon-4, 9422 Athlon-xp and Athlon-mp chips. The earlier version of SSE 9423 instruction set supports only single precision arithmetics, 9424 thus the double and extended precision arithmetics is still 9425 done using 387. Later version, present only in Pentium4 and 9426 the future AMD x86-64 chips supports double precision 9427 arithmetics too. 9428 9429 For the i386 compiler, you need to use `-march=CPU-TYPE', 9430 `-msse' or `-msse2' switches to enable SSE extensions and 9431 make this option effective. For the x86-64 compiler, these 9432 extensions are enabled by default. 9433 9434 The resulting code should be considerably faster in the 9435 majority of cases and avoid the numerical instability 9436 problems of 387 code, but may break some existing code that 9437 expects temporaries to be 80bit. 9438 9439 This is the default choice for the x86-64 compiler. 9440 9441 `sse,387' 9442 Attempt to utilize both instruction sets at once. This 9443 effectively double the amount of available registers and on 9444 chips with separate execution units for 387 and SSE the 9445 execution resources too. Use this option with care, as it is 9446 still experimental, because the GCC register allocator does 9447 not model separate functional units well resulting in 9448 instable performance. 9449 9450 `-masm=DIALECT' 9451 Output asm instructions using selected DIALECT. Supported choices 9452 are `intel' or `att' (the default one). Darwin does not support 9453 `intel'. 9454 9455 `-mieee-fp' 9456 `-mno-ieee-fp' 9457 Control whether or not the compiler uses IEEE floating point 9458 comparisons. These handle correctly the case where the result of a 9459 comparison is unordered. 9460 9461 `-msoft-float' 9462 Generate output containing library calls for floating point. 9463 *Warning:* the requisite libraries are not part of GCC. Normally 9464 the facilities of the machine's usual C compiler are used, but 9465 this can't be done directly in cross-compilation. You must make 9466 your own arrangements to provide suitable library functions for 9467 cross-compilation. 9468 9469 On machines where a function returns floating point results in the 9470 80387 register stack, some floating point opcodes may be emitted 9471 even if `-msoft-float' is used. 9472 9473 `-mno-fp-ret-in-387' 9474 Do not use the FPU registers for return values of functions. 9475 9476 The usual calling convention has functions return values of types 9477 `float' and `double' in an FPU register, even if there is no FPU. 9478 The idea is that the operating system should emulate an FPU. 9479 9480 The option `-mno-fp-ret-in-387' causes such values to be returned 9481 in ordinary CPU registers instead. 9482 9483 `-mno-fancy-math-387' 9484 Some 387 emulators do not support the `sin', `cos' and `sqrt' 9485 instructions for the 387. Specify this option to avoid generating 9486 those instructions. This option is the default on FreeBSD, 9487 OpenBSD and NetBSD. This option is overridden when `-march' 9488 indicates that the target cpu will always have an FPU and so the 9489 instruction will not need emulation. As of revision 2.6.1, these 9490 instructions are not generated unless you also use the 9491 `-funsafe-math-optimizations' switch. 9492 9493 `-malign-double' 9494 `-mno-align-double' 9495 Control whether GCC aligns `double', `long double', and `long 9496 long' variables on a two word boundary or a one word boundary. 9497 Aligning `double' variables on a two word boundary will produce 9498 code that runs somewhat faster on a `Pentium' at the expense of 9499 more memory. 9500 9501 On x86-64, `-malign-double' is enabled by default. 9502 9503 *Warning:* if you use the `-malign-double' switch, structures 9504 containing the above types will be aligned differently than the 9505 published application binary interface specifications for the 386 9506 and will not be binary compatible with structures in code compiled 9507 without that switch. 9508 9509 `-m96bit-long-double' 9510 `-m128bit-long-double' 9511 These switches control the size of `long double' type. The i386 9512 application binary interface specifies the size to be 96 bits, so 9513 `-m96bit-long-double' is the default in 32 bit mode. 9514 9515 Modern architectures (Pentium and newer) would prefer `long double' 9516 to be aligned to an 8 or 16 byte boundary. In arrays or structures 9517 conforming to the ABI, this would not be possible. So specifying a 9518 `-m128bit-long-double' will align `long double' to a 16 byte 9519 boundary by padding the `long double' with an additional 32 bit 9520 zero. 9521 9522 In the x86-64 compiler, `-m128bit-long-double' is the default 9523 choice as its ABI specifies that `long double' is to be aligned on 9524 16 byte boundary. 9525 9526 Notice that neither of these options enable any extra precision 9527 over the x87 standard of 80 bits for a `long double'. 9528 9529 *Warning:* if you override the default value for your target ABI, 9530 the structures and arrays containing `long double' variables will 9531 change their size as well as function calling convention for 9532 function taking `long double' will be modified. Hence they will 9533 not be binary compatible with arrays or structures in code 9534 compiled without that switch. 9535 9536 `-mmlarge-data-threshold=NUMBER' 9537 When `-mcmodel=medium' is specified, the data greater than 9538 THRESHOLD are placed in large data section. This value must be the 9539 same across all object linked into the binary and defaults to 9540 65535. 9541 9542 `-msvr3-shlib' 9543 `-mno-svr3-shlib' 9544 Control whether GCC places uninitialized local variables into the 9545 `bss' or `data' segments. `-msvr3-shlib' places them into `bss'. 9546 These options are meaningful only on System V Release 3. 9547 9548 `-mrtd' 9549 Use a different function-calling convention, in which functions 9550 that take a fixed number of arguments return with the `ret' NUM 9551 instruction, which pops their arguments while returning. This 9552 saves one instruction in the caller since there is no need to pop 9553 the arguments there. 9554 9555 You can specify that an individual function is called with this 9556 calling sequence with the function attribute `stdcall'. You can 9557 also override the `-mrtd' option by using the function attribute 9558 `cdecl'. *Note Function Attributes::. 9559 9560 *Warning:* this calling convention is incompatible with the one 9561 normally used on Unix, so you cannot use it if you need to call 9562 libraries compiled with the Unix compiler. 9563 9564 Also, you must provide function prototypes for all functions that 9565 take variable numbers of arguments (including `printf'); otherwise 9566 incorrect code will be generated for calls to those functions. 9567 9568 In addition, seriously incorrect code will result if you call a 9569 function with too many arguments. (Normally, extra arguments are 9570 harmlessly ignored.) 9571 9572 `-mregparm=NUM' 9573 Control how many registers are used to pass integer arguments. By 9574 default, no registers are used to pass arguments, and at most 3 9575 registers can be used. You can control this behavior for a 9576 specific function by using the function attribute `regparm'. 9577 *Note Function Attributes::. 9578 9579 *Warning:* if you use this switch, and NUM is nonzero, then you 9580 must build all modules with the same value, including any 9581 libraries. This includes the system libraries and startup modules. 9582 9583 `-msseregparm' 9584 Use SSE register passing conventions for float and double arguments 9585 and return values. You can control this behavior for a specific 9586 function by using the function attribute `sseregparm'. *Note 9587 Function Attributes::. 9588 9589 *Warning:* if you use this switch then you must build all modules 9590 with the same value, including any libraries. This includes the 9591 system libraries and startup modules. 9592 9593 `-mstackrealign' 9594 Realign the stack at entry. On the Intel x86, the 9595 `-mstackrealign' option will generate an alternate prologue and 9596 epilogue that realigns the runtime stack. This supports mixing 9597 legacy codes that keep a 4-byte aligned stack with modern codes 9598 that keep a 16-byte stack for SSE compatibility. The alternate 9599 prologue and epilogue are slower and bigger than the regular ones, 9600 and the alternate prologue requires an extra scratch register; 9601 this lowers the number of registers available if used in 9602 conjunction with the `regparm' attribute. The `-mstackrealign' 9603 option is incompatible with the nested function prologue; this is 9604 considered a hard error. See also the attribute 9605 `force_align_arg_pointer', applicable to individual functions. 9606 9607 `-mpreferred-stack-boundary=NUM' 9608 Attempt to keep the stack boundary aligned to a 2 raised to NUM 9609 byte boundary. If `-mpreferred-stack-boundary' is not specified, 9610 the default is 4 (16 bytes or 128 bits). 9611 9612 On Pentium and PentiumPro, `double' and `long double' values 9613 should be aligned to an 8 byte boundary (see `-malign-double') or 9614 suffer significant run time performance penalties. On Pentium 9615 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 9616 work properly if it is not 16 byte aligned. 9617 9618 To ensure proper alignment of this values on the stack, the stack 9619 boundary must be as aligned as that required by any value stored 9620 on the stack. Further, every function must be generated such that 9621 it keeps the stack aligned. Thus calling a function compiled with 9622 a higher preferred stack boundary from a function compiled with a 9623 lower preferred stack boundary will most likely misalign the 9624 stack. It is recommended that libraries that use callbacks always 9625 use the default setting. 9626 9627 This extra alignment does consume extra stack space, and generally 9628 increases code size. Code that is sensitive to stack space usage, 9629 such as embedded systems and operating system kernels, may want to 9630 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 9631 9632 `-mmmx' 9633 `-mno-mmx' 9634 9635 `-msse' 9636 `-mno-sse' 9637 9638 `-msse2' 9639 `-mno-sse2' 9640 9641 `-msse3' 9642 `-mno-sse3' 9643 9644 `-m3dnow' 9645 `-mno-3dnow' 9646 These switches enable or disable the use of instructions in the 9647 MMX, SSE, SSE2 or 3DNow! extended instruction sets. These 9648 extensions are also available as built-in functions: see *Note X86 9649 Built-in Functions::, for details of the functions enabled and 9650 disabled by these switches. 9651 9652 To have SSE/SSE2 instructions generated automatically from 9653 floating-point code (as opposed to 387 instructions), see 9654 `-mfpmath=sse'. 9655 9656 These options will enable GCC to use these extended instructions in 9657 generated code, even without `-mfpmath=sse'. Applications which 9658 perform runtime CPU detection must compile separate files for each 9659 supported architecture, using the appropriate flags. In 9660 particular, the file containing the CPU detection code should be 9661 compiled without these options. 9662 9663 `-mpush-args' 9664 `-mno-push-args' 9665 Use PUSH operations to store outgoing parameters. This method is 9666 shorter and usually equally fast as method using SUB/MOV 9667 operations and is enabled by default. In some cases disabling it 9668 may improve performance because of improved scheduling and reduced 9669 dependencies. 9670 9671 `-maccumulate-outgoing-args' 9672 If enabled, the maximum amount of space required for outgoing 9673 arguments will be computed in the function prologue. This is 9674 faster on most modern CPUs because of reduced dependencies, 9675 improved scheduling and reduced stack usage when preferred stack 9676 boundary is not equal to 2. The drawback is a notable increase in 9677 code size. This switch implies `-mno-push-args'. 9678 9679 `-mthreads' 9680 Support thread-safe exception handling on `Mingw32'. Code that 9681 relies on thread-safe exception handling must compile and link all 9682 code with the `-mthreads' option. When compiling, `-mthreads' 9683 defines `-D_MT'; when linking, it links in a special thread helper 9684 library `-lmingwthrd' which cleans up per thread exception 9685 handling data. 9686 9687 `-mno-align-stringops' 9688 Do not align destination of inlined string operations. This 9689 switch reduces code size and improves performance in case the 9690 destination is already aligned, but GCC doesn't know about it. 9691 9692 `-minline-all-stringops' 9693 By default GCC inlines string operations only when destination is 9694 known to be aligned at least to 4 byte boundary. This enables 9695 more inlining, increase code size, but may improve performance of 9696 code that depends on fast memcpy, strlen and memset for short 9697 lengths. 9698 9699 `-momit-leaf-frame-pointer' 9700 Don't keep the frame pointer in a register for leaf functions. 9701 This avoids the instructions to save, set up and restore frame 9702 pointers and makes an extra register available in leaf functions. 9703 The option `-fomit-frame-pointer' removes the frame pointer for 9704 all functions which might make debugging harder. 9705 9706 `-mtls-direct-seg-refs' 9707 `-mno-tls-direct-seg-refs' 9708 Controls whether TLS variables may be accessed with offsets from 9709 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 9710 whether the thread base pointer must be added. Whether or not this 9711 is legal depends on the operating system, and whether it maps the 9712 segment to cover the entire TLS area. 9713 9714 For systems that use GNU libc, the default is on. 9715 9716 These `-m' switches are supported in addition to the above on AMD 9717 x86-64 processors in 64-bit environments. 9718 9719 `-m32' 9720 `-m64' 9721 Generate code for a 32-bit or 64-bit environment. The 32-bit 9722 environment sets int, long and pointer to 32 bits and generates 9723 code that runs on any i386 system. The 64-bit environment sets 9724 int to 32 bits and long and pointer to 64 bits and generates code 9725 for AMD's x86-64 architecture. For darwin only the -m64 option 9726 turns off the `-fno-pic' and `-mdynamic-no-pic' options. 9727 9728 `-mno-red-zone' 9729 Do not use a so called red zone for x86-64 code. The red zone is 9730 mandated by the x86-64 ABI, it is a 128-byte area beyond the 9731 location of the stack pointer that will not be modified by signal 9732 or interrupt handlers and therefore can be used for temporary data 9733 without adjusting the stack pointer. The flag `-mno-red-zone' 9734 disables this red zone. 9735 9736 `-mcmodel=small' 9737 Generate code for the small code model: the program and its 9738 symbols must be linked in the lower 2 GB of the address space. 9739 Pointers are 64 bits. Programs can be statically or dynamically 9740 linked. This is the default code model. 9741 9742 `-mcmodel=kernel' 9743 Generate code for the kernel code model. The kernel runs in the 9744 negative 2 GB of the address space. This model has to be used for 9745 Linux kernel code. 9746 9747 `-mcmodel=medium' 9748 Generate code for the medium model: The program is linked in the 9749 lower 2 GB of the address space but symbols can be located 9750 anywhere in the address space. Programs can be statically or 9751 dynamically linked, but building of shared libraries are not 9752 supported with the medium model. 9753 9754 `-mcmodel=large' 9755 Generate code for the large model: This model makes no assumptions 9756 about addresses and sizes of sections. Currently GCC does not 9757 implement this model. 9758 9759 9760 File: gcc.info, Node: IA-64 Options, Next: M32C Options, Prev: i386 and x86-64 Options, Up: Submodel Options 9761 9762 3.17.15 IA-64 Options 9763 --------------------- 9764 9765 These are the `-m' options defined for the Intel IA-64 architecture. 9766 9767 `-mbig-endian' 9768 Generate code for a big endian target. This is the default for 9769 HP-UX. 9770 9771 `-mlittle-endian' 9772 Generate code for a little endian target. This is the default for 9773 AIX5 and GNU/Linux. 9774 9775 `-mgnu-as' 9776 `-mno-gnu-as' 9777 Generate (or don't) code for the GNU assembler. This is the 9778 default. 9779 9780 `-mgnu-ld' 9781 `-mno-gnu-ld' 9782 Generate (or don't) code for the GNU linker. This is the default. 9783 9784 `-mno-pic' 9785 Generate code that does not use a global pointer register. The 9786 result is not position independent code, and violates the IA-64 9787 ABI. 9788 9789 `-mvolatile-asm-stop' 9790 `-mno-volatile-asm-stop' 9791 Generate (or don't) a stop bit immediately before and after 9792 volatile asm statements. 9793 9794 `-mregister-names' 9795 `-mno-register-names' 9796 Generate (or don't) `in', `loc', and `out' register names for the 9797 stacked registers. This may make assembler output more readable. 9798 9799 `-mno-sdata' 9800 `-msdata' 9801 Disable (or enable) optimizations that use the small data section. 9802 This may be useful for working around optimizer bugs. 9803 9804 `-mconstant-gp' 9805 Generate code that uses a single constant global pointer value. 9806 This is useful when compiling kernel code. 9807 9808 `-mauto-pic' 9809 Generate code that is self-relocatable. This implies 9810 `-mconstant-gp'. This is useful when compiling firmware code. 9811 9812 `-minline-float-divide-min-latency' 9813 Generate code for inline divides of floating point values using 9814 the minimum latency algorithm. 9815 9816 `-minline-float-divide-max-throughput' 9817 Generate code for inline divides of floating point values using 9818 the maximum throughput algorithm. 9819 9820 `-minline-int-divide-min-latency' 9821 Generate code for inline divides of integer values using the 9822 minimum latency algorithm. 9823 9824 `-minline-int-divide-max-throughput' 9825 Generate code for inline divides of integer values using the 9826 maximum throughput algorithm. 9827 9828 `-minline-sqrt-min-latency' 9829 Generate code for inline square roots using the minimum latency 9830 algorithm. 9831 9832 `-minline-sqrt-max-throughput' 9833 Generate code for inline square roots using the maximum throughput 9834 algorithm. 9835 9836 `-mno-dwarf2-asm' 9837 `-mdwarf2-asm' 9838 Don't (or do) generate assembler code for the DWARF2 line number 9839 debugging info. This may be useful when not using the GNU 9840 assembler. 9841 9842 `-mearly-stop-bits' 9843 `-mno-early-stop-bits' 9844 Allow stop bits to be placed earlier than immediately preceding the 9845 instruction that triggered the stop bit. This can improve 9846 instruction scheduling, but does not always do so. 9847 9848 `-mfixed-range=REGISTER-RANGE' 9849 Generate code treating the given register range as fixed registers. 9850 A fixed register is one that the register allocator can not use. 9851 This is useful when compiling kernel code. A register range is 9852 specified as two registers separated by a dash. Multiple register 9853 ranges can be specified separated by a comma. 9854 9855 `-mtls-size=TLS-SIZE' 9856 Specify bit size of immediate TLS offsets. Valid values are 14, 9857 22, and 64. 9858 9859 `-mtune=CPU-TYPE' 9860 Tune the instruction scheduling for a particular CPU, Valid values 9861 are itanium, itanium1, merced, itanium2, and mckinley. 9862 9863 `-mt' 9864 `-pthread' 9865 Add support for multithreading using the POSIX threads library. 9866 This option sets flags for both the preprocessor and linker. It 9867 does not affect the thread safety of object code produced by the 9868 compiler or that of libraries supplied with it. These are HP-UX 9869 specific flags. 9870 9871 `-milp32' 9872 `-mlp64' 9873 Generate code for a 32-bit or 64-bit environment. The 32-bit 9874 environment sets int, long and pointer to 32 bits. The 64-bit 9875 environment sets int to 32 bits and long and pointer to 64 bits. 9876 These are HP-UX specific flags. 9877 9878 `-mno-sched-br-data-spec' 9879 `-msched-br-data-spec' 9880 (Dis/En)able data speculative scheduling before reload. This will 9881 result in generation of the ld.a instructions and the 9882 corresponding check instructions (ld.c / chk.a). The default is 9883 'disable'. 9884 9885 `-msched-ar-data-spec' 9886 `-mno-sched-ar-data-spec' 9887 (En/Dis)able data speculative scheduling after reload. This will 9888 result in generation of the ld.a instructions and the 9889 corresponding check instructions (ld.c / chk.a). The default is 9890 'enable'. 9891 9892 `-mno-sched-control-spec' 9893 `-msched-control-spec' 9894 (Dis/En)able control speculative scheduling. This feature is 9895 available only during region scheduling (i.e. before reload). 9896 This will result in generation of the ld.s instructions and the 9897 corresponding check instructions chk.s . The default is 'disable'. 9898 9899 `-msched-br-in-data-spec' 9900 `-mno-sched-br-in-data-spec' 9901 (En/Dis)able speculative scheduling of the instructions that are 9902 dependent on the data speculative loads before reload. This is 9903 effective only with `-msched-br-data-spec' enabled. The default 9904 is 'enable'. 9905 9906 `-msched-ar-in-data-spec' 9907 `-mno-sched-ar-in-data-spec' 9908 (En/Dis)able speculative scheduling of the instructions that are 9909 dependent on the data speculative loads after reload. This is 9910 effective only with `-msched-ar-data-spec' enabled. The default 9911 is 'enable'. 9912 9913 `-msched-in-control-spec' 9914 `-mno-sched-in-control-spec' 9915 (En/Dis)able speculative scheduling of the instructions that are 9916 dependent on the control speculative loads. This is effective 9917 only with `-msched-control-spec' enabled. The default is 'enable'. 9918 9919 `-msched-ldc' 9920 `-mno-sched-ldc' 9921 (En/Dis)able use of simple data speculation checks ld.c . If 9922 disabled, only chk.a instructions will be emitted to check data 9923 speculative loads. The default is 'enable'. 9924 9925 `-mno-sched-control-ldc' 9926 `-msched-control-ldc' 9927 (Dis/En)able use of ld.c instructions to check control speculative 9928 loads. If enabled, in case of control speculative load with no 9929 speculatively scheduled dependent instructions this load will be 9930 emitted as ld.sa and ld.c will be used to check it. The default 9931 is 'disable'. 9932 9933 `-mno-sched-spec-verbose' 9934 `-msched-spec-verbose' 9935 (Dis/En)able printing of the information about speculative motions. 9936 9937 `-mno-sched-prefer-non-data-spec-insns' 9938 `-msched-prefer-non-data-spec-insns' 9939 If enabled, data speculative instructions will be chosen for 9940 schedule only if there are no other choices at the moment. This 9941 will make the use of the data speculation much more conservative. 9942 The default is 'disable'. 9943 9944 `-mno-sched-prefer-non-control-spec-insns' 9945 `-msched-prefer-non-control-spec-insns' 9946 If enabled, control speculative instructions will be chosen for 9947 schedule only if there are no other choices at the moment. This 9948 will make the use of the control speculation much more 9949 conservative. The default is 'disable'. 9950 9951 `-mno-sched-count-spec-in-critical-path' 9952 `-msched-count-spec-in-critical-path' 9953 If enabled, speculative dependencies will be considered during 9954 computation of the instructions priorities. This will make the 9955 use of the speculation a bit more conservative. The default is 9956 'disable'. 9957 9958 9959 9960 File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: IA-64 Options, Up: Submodel Options 9961 9962 3.17.16 M32C Options 9963 -------------------- 9964 9965 `-mcpu=NAME' 9966 Select the CPU for which code is generated. NAME may be one of 9967 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 9968 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 9969 series. 9970 9971 `-msim' 9972 Specifies that the program will be run on the simulator. This 9973 causes an alternate runtime library to be linked in which 9974 supports, for example, file I/O. You must not use this option 9975 when generating programs that will run on real hardware; you must 9976 provide your own runtime library for whatever I/O functions are 9977 needed. 9978 9979 `-memregs=NUMBER' 9980 Specifies the number of memory-based pseudo-registers GCC will use 9981 during code generation. These pseudo-registers will be used like 9982 real registers, so there is a tradeoff between GCC's ability to 9983 fit the code into available registers, and the performance penalty 9984 of using memory instead of registers. Note that all modules in a 9985 program must be compiled with the same value for this option. 9986 Because of that, you must not use this option with the default 9987 runtime libraries gcc builds. 9988 9989 9990 9991 File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 9992 9993 3.17.17 M32R/D Options 9994 ---------------------- 9995 9996 These `-m' options are defined for Renesas M32R/D architectures: 9997 9998 `-m32r2' 9999 Generate code for the M32R/2. 10000 10001 `-m32rx' 10002 Generate code for the M32R/X. 10003 10004 `-m32r' 10005 Generate code for the M32R. This is the default. 10006 10007 `-mmodel=small' 10008 Assume all objects live in the lower 16MB of memory (so that their 10009 addresses can be loaded with the `ld24' instruction), and assume 10010 all subroutines are reachable with the `bl' instruction. This is 10011 the default. 10012 10013 The addressability of a particular object can be set with the 10014 `model' attribute. 10015 10016 `-mmodel=medium' 10017 Assume objects may be anywhere in the 32-bit address space (the 10018 compiler will generate `seth/add3' instructions to load their 10019 addresses), and assume all subroutines are reachable with the `bl' 10020 instruction. 10021 10022 `-mmodel=large' 10023 Assume objects may be anywhere in the 32-bit address space (the 10024 compiler will generate `seth/add3' instructions to load their 10025 addresses), and assume subroutines may not be reachable with the 10026 `bl' instruction (the compiler will generate the much slower 10027 `seth/add3/jl' instruction sequence). 10028 10029 `-msdata=none' 10030 Disable use of the small data area. Variables will be put into 10031 one of `.data', `bss', or `.rodata' (unless the `section' 10032 attribute has been specified). This is the default. 10033 10034 The small data area consists of sections `.sdata' and `.sbss'. 10035 Objects may be explicitly put in the small data area with the 10036 `section' attribute using one of these sections. 10037 10038 `-msdata=sdata' 10039 Put small global and static data in the small data area, but do not 10040 generate special code to reference them. 10041 10042 `-msdata=use' 10043 Put small global and static data in the small data area, and 10044 generate special instructions to reference them. 10045 10046 `-G NUM' 10047 Put global and static objects less than or equal to NUM bytes into 10048 the small data or bss sections instead of the normal data or bss 10049 sections. The default value of NUM is 8. The `-msdata' option 10050 must be set to one of `sdata' or `use' for this option to have any 10051 effect. 10052 10053 All modules should be compiled with the same `-G NUM' value. 10054 Compiling with different values of NUM may or may not work; if it 10055 doesn't the linker will give an error message--incorrect code will 10056 not be generated. 10057 10058 `-mdebug' 10059 Makes the M32R specific code in the compiler display some 10060 statistics that might help in debugging programs. 10061 10062 `-malign-loops' 10063 Align all loops to a 32-byte boundary. 10064 10065 `-mno-align-loops' 10066 Do not enforce a 32-byte alignment for loops. This is the default. 10067 10068 `-missue-rate=NUMBER' 10069 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 10070 10071 `-mbranch-cost=NUMBER' 10072 NUMBER can only be 1 or 2. If it is 1 then branches will be 10073 preferred over conditional code, if it is 2, then the opposite will 10074 apply. 10075 10076 `-mflush-trap=NUMBER' 10077 Specifies the trap number to use to flush the cache. The default 10078 is 12. Valid numbers are between 0 and 15 inclusive. 10079 10080 `-mno-flush-trap' 10081 Specifies that the cache cannot be flushed by using a trap. 10082 10083 `-mflush-func=NAME' 10084 Specifies the name of the operating system function to call to 10085 flush the cache. The default is __flush_cache_, but a function 10086 call will only be used if a trap is not available. 10087 10088 `-mno-flush-func' 10089 Indicates that there is no OS function for flushing the cache. 10090 10091 10092 10093 File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Prev: M32R/D Options, Up: Submodel Options 10094 10095 3.17.18 M680x0 Options 10096 ---------------------- 10097 10098 These are the `-m' options defined for the 68000 series. The default 10099 values for these options depends on which style of 68000 was selected 10100 when the compiler was configured; the defaults for the most common 10101 choices are given below. 10102 10103 `-m68000' 10104 `-mc68000' 10105 Generate output for a 68000. This is the default when the 10106 compiler is configured for 68000-based systems. 10107 10108 Use this option for microcontrollers with a 68000 or EC000 core, 10109 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 10110 10111 `-m68020' 10112 `-mc68020' 10113 Generate output for a 68020. This is the default when the 10114 compiler is configured for 68020-based systems. 10115 10116 `-m68881' 10117 Generate output containing 68881 instructions for floating point. 10118 This is the default for most 68020 systems unless `--nfp' was 10119 specified when the compiler was configured. 10120 10121 `-m68030' 10122 Generate output for a 68030. This is the default when the 10123 compiler is configured for 68030-based systems. 10124 10125 `-m68040' 10126 Generate output for a 68040. This is the default when the 10127 compiler is configured for 68040-based systems. 10128 10129 This option inhibits the use of 68881/68882 instructions that have 10130 to be emulated by software on the 68040. Use this option if your 10131 68040 does not have code to emulate those instructions. 10132 10133 `-m68060' 10134 Generate output for a 68060. This is the default when the 10135 compiler is configured for 68060-based systems. 10136 10137 This option inhibits the use of 68020 and 68881/68882 instructions 10138 that have to be emulated by software on the 68060. Use this 10139 option if your 68060 does not have code to emulate those 10140 instructions. 10141 10142 `-mcpu32' 10143 Generate output for a CPU32. This is the default when the 10144 compiler is configured for CPU32-based systems. 10145 10146 Use this option for microcontrollers with a CPU32 or CPU32+ core, 10147 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 10148 68341, 68349 and 68360. 10149 10150 `-m5200' 10151 Generate output for a 520X "coldfire" family cpu. This is the 10152 default when the compiler is configured for 520X-based systems. 10153 10154 Use this option for microcontroller with a 5200 core, including 10155 the MCF5202, MCF5203, MCF5204 and MCF5202. 10156 10157 `-mcfv4e' 10158 Generate output for a ColdFire V4e family cpu (e.g. 547x/548x). 10159 This includes use of hardware floating point instructions. 10160 10161 `-m68020-40' 10162 Generate output for a 68040, without using any of the new 10163 instructions. This results in code which can run relatively 10164 efficiently on either a 68020/68881 or a 68030 or a 68040. The 10165 generated code does use the 68881 instructions that are emulated 10166 on the 68040. 10167 10168 `-m68020-60' 10169 Generate output for a 68060, without using any of the new 10170 instructions. This results in code which can run relatively 10171 efficiently on either a 68020/68881 or a 68030 or a 68040. The 10172 generated code does use the 68881 instructions that are emulated 10173 on the 68060. 10174 10175 `-msoft-float' 10176 Generate output containing library calls for floating point. 10177 *Warning:* the requisite libraries are not available for all m68k 10178 targets. Normally the facilities of the machine's usual C 10179 compiler are used, but this can't be done directly in 10180 cross-compilation. You must make your own arrangements to provide 10181 suitable library functions for cross-compilation. The embedded 10182 targets `m68k-*-aout' and `m68k-*-coff' do provide software 10183 floating point support. 10184 10185 `-mshort' 10186 Consider type `int' to be 16 bits wide, like `short int'. 10187 Additionally, parameters passed on the stack are also aligned to a 10188 16-bit boundary even on targets whose API mandates promotion to 10189 32-bit. 10190 10191 `-mnobitfield' 10192 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 10193 and `-m5200' options imply `-mnobitfield'. 10194 10195 `-mbitfield' 10196 Do use the bit-field instructions. The `-m68020' option implies 10197 `-mbitfield'. This is the default if you use a configuration 10198 designed for a 68020. 10199 10200 `-mrtd' 10201 Use a different function-calling convention, in which functions 10202 that take a fixed number of arguments return with the `rtd' 10203 instruction, which pops their arguments while returning. This 10204 saves one instruction in the caller since there is no need to pop 10205 the arguments there. 10206 10207 This calling convention is incompatible with the one normally used 10208 on Unix, so you cannot use it if you need to call libraries 10209 compiled with the Unix compiler. 10210 10211 Also, you must provide function prototypes for all functions that 10212 take variable numbers of arguments (including `printf'); otherwise 10213 incorrect code will be generated for calls to those functions. 10214 10215 In addition, seriously incorrect code will result if you call a 10216 function with too many arguments. (Normally, extra arguments are 10217 harmlessly ignored.) 10218 10219 The `rtd' instruction is supported by the 68010, 68020, 68030, 10220 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 10221 10222 `-malign-int' 10223 `-mno-align-int' 10224 Control whether GCC aligns `int', `long', `long long', `float', 10225 `double', and `long double' variables on a 32-bit boundary 10226 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 10227 variables on 32-bit boundaries produces code that runs somewhat 10228 faster on processors with 32-bit busses at the expense of more 10229 memory. 10230 10231 *Warning:* if you use the `-malign-int' switch, GCC will align 10232 structures containing the above types differently than most 10233 published application binary interface specifications for the m68k. 10234 10235 `-mpcrel' 10236 Use the pc-relative addressing mode of the 68000 directly, instead 10237 of using a global offset table. At present, this option implies 10238 `-fpic', allowing at most a 16-bit offset for pc-relative 10239 addressing. `-fPIC' is not presently supported with `-mpcrel', 10240 though this could be supported for 68020 and higher processors. 10241 10242 `-mno-strict-align' 10243 `-mstrict-align' 10244 Do not (do) assume that unaligned memory references will be 10245 handled by the system. 10246 10247 `-msep-data' 10248 Generate code that allows the data segment to be located in a 10249 different area of memory from the text segment. This allows for 10250 execute in place in an environment without virtual memory 10251 management. This option implies `-fPIC'. 10252 10253 `-mno-sep-data' 10254 Generate code that assumes that the data segment follows the text 10255 segment. This is the default. 10256 10257 `-mid-shared-library' 10258 Generate code that supports shared libraries via the library ID 10259 method. This allows for execute in place and shared libraries in 10260 an environment without virtual memory management. This option 10261 implies `-fPIC'. 10262 10263 `-mno-id-shared-library' 10264 Generate code that doesn't assume ID based shared libraries are 10265 being used. This is the default. 10266 10267 `-mshared-library-id=n' 10268 Specified the identification number of the ID based shared library 10269 being compiled. Specifying a value of 0 will generate more 10270 compact code, specifying other values will force the allocation of 10271 that number to the current library but is no more space or time 10272 efficient than omitting this option. 10273 10274 10275 10276 File: gcc.info, Node: M68hc1x Options, Next: MCore Options, Prev: M680x0 Options, Up: Submodel Options 10277 10278 3.17.19 M68hc1x Options 10279 ----------------------- 10280 10281 These are the `-m' options defined for the 68hc11 and 68hc12 10282 microcontrollers. The default values for these options depends on 10283 which style of microcontroller was selected when the compiler was 10284 configured; the defaults for the most common choices are given below. 10285 10286 `-m6811' 10287 `-m68hc11' 10288 Generate output for a 68HC11. This is the default when the 10289 compiler is configured for 68HC11-based systems. 10290 10291 `-m6812' 10292 `-m68hc12' 10293 Generate output for a 68HC12. This is the default when the 10294 compiler is configured for 68HC12-based systems. 10295 10296 `-m68S12' 10297 `-m68hcs12' 10298 Generate output for a 68HCS12. 10299 10300 `-mauto-incdec' 10301 Enable the use of 68HC12 pre and post auto-increment and 10302 auto-decrement addressing modes. 10303 10304 `-minmax' 10305 `-nominmax' 10306 Enable the use of 68HC12 min and max instructions. 10307 10308 `-mlong-calls' 10309 `-mno-long-calls' 10310 Treat all calls as being far away (near). If calls are assumed to 10311 be far away, the compiler will use the `call' instruction to call 10312 a function and the `rtc' instruction for returning. 10313 10314 `-mshort' 10315 Consider type `int' to be 16 bits wide, like `short int'. 10316 10317 `-msoft-reg-count=COUNT' 10318 Specify the number of pseudo-soft registers which are used for the 10319 code generation. The maximum number is 32. Using more pseudo-soft 10320 register may or may not result in better code depending on the 10321 program. The default is 4 for 68HC11 and 2 for 68HC12. 10322 10323 10324 10325 File: gcc.info, Node: MCore Options, Next: MIPS Options, Prev: M68hc1x Options, Up: Submodel Options 10326 10327 3.17.20 MCore Options 10328 --------------------- 10329 10330 These are the `-m' options defined for the Motorola M*Core processors. 10331 10332 `-mhardlit' 10333 `-mno-hardlit' 10334 Inline constants into the code stream if it can be done in two 10335 instructions or less. 10336 10337 `-mdiv' 10338 `-mno-div' 10339 Use the divide instruction. (Enabled by default). 10340 10341 `-mrelax-immediate' 10342 `-mno-relax-immediate' 10343 Allow arbitrary sized immediates in bit operations. 10344 10345 `-mwide-bitfields' 10346 `-mno-wide-bitfields' 10347 Always treat bit-fields as int-sized. 10348 10349 `-m4byte-functions' 10350 `-mno-4byte-functions' 10351 Force all functions to be aligned to a four byte boundary. 10352 10353 `-mcallgraph-data' 10354 `-mno-callgraph-data' 10355 Emit callgraph information. 10356 10357 `-mslow-bytes' 10358 `-mno-slow-bytes' 10359 Prefer word access when reading byte quantities. 10360 10361 `-mlittle-endian' 10362 `-mbig-endian' 10363 Generate code for a little endian target. 10364 10365 `-m210' 10366 `-m340' 10367 Generate code for the 210 processor. 10368 10369 10370 File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MCore Options, Up: Submodel Options 10371 10372 3.17.21 MIPS Options 10373 -------------------- 10374 10375 `-EB' 10376 Generate big-endian code. 10377 10378 `-EL' 10379 Generate little-endian code. This is the default for `mips*el-*-*' 10380 configurations. 10381 10382 `-march=ARCH' 10383 Generate code that will run on ARCH, which can be the name of a 10384 generic MIPS ISA, or the name of a particular processor. The ISA 10385 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 10386 `mips32r2', and `mips64'. The processor names are: `4kc', `4km', 10387 `4kp', `5kc', `5kf', `20kc', `24k', `24kc', `24kf', `24kx', `m4k', 10388 `orion', `r2000', `r3000', `r3900', `r4000', `r4400', `r4600', 10389 `r4650', `r6000', `r8000', `rm7000', `rm9000', `sb1', `sr71000', 10390 `vr4100', `vr4111', `vr4120', `vr4130', `vr4300', `vr5000', 10391 `vr5400' and `vr5500'. The special value `from-abi' selects the 10392 most compatible architecture for the selected ABI (that is, 10393 `mips1' for 32-bit ABIs and `mips3' for 64-bit ABIs). 10394 10395 In processor names, a final `000' can be abbreviated as `k' (for 10396 example, `-march=r2k'). Prefixes are optional, and `vr' may be 10397 written `r'. 10398 10399 GCC defines two macros based on the value of this option. The 10400 first is `_MIPS_ARCH', which gives the name of target 10401 architecture, as a string. The second has the form 10402 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 10403 `_MIPS_ARCH'. For example, `-march=r2000' will set `_MIPS_ARCH' 10404 to `"r2000"' and define the macro `_MIPS_ARCH_R2000'. 10405 10406 Note that the `_MIPS_ARCH' macro uses the processor names given 10407 above. In other words, it will have the full prefix and will not 10408 abbreviate `000' as `k'. In the case of `from-abi', the macro 10409 names the resolved architecture (either `"mips1"' or `"mips3"'). 10410 It names the default architecture when no `-march' option is given. 10411 10412 `-mtune=ARCH' 10413 Optimize for ARCH. Among other things, this option controls the 10414 way instructions are scheduled, and the perceived cost of 10415 arithmetic operations. The list of ARCH values is the same as for 10416 `-march'. 10417 10418 When this option is not used, GCC will optimize for the processor 10419 specified by `-march'. By using `-march' and `-mtune' together, 10420 it is possible to generate code that will run on a family of 10421 processors, but optimize the code for one particular member of 10422 that family. 10423 10424 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 10425 which work in the same way as the `-march' ones described above. 10426 10427 `-mips1' 10428 Equivalent to `-march=mips1'. 10429 10430 `-mips2' 10431 Equivalent to `-march=mips2'. 10432 10433 `-mips3' 10434 Equivalent to `-march=mips3'. 10435 10436 `-mips4' 10437 Equivalent to `-march=mips4'. 10438 10439 `-mips32' 10440 Equivalent to `-march=mips32'. 10441 10442 `-mips32r2' 10443 Equivalent to `-march=mips32r2'. 10444 10445 `-mips64' 10446 Equivalent to `-march=mips64'. 10447 10448 `-mips16' 10449 `-mno-mips16' 10450 Generate (do not generate) MIPS16 code. If GCC is targetting a 10451 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE. 10452 10453 `-mabi=32' 10454 `-mabi=o64' 10455 `-mabi=n32' 10456 `-mabi=64' 10457 `-mabi=eabi' 10458 Generate code for the given ABI. 10459 10460 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 10461 generates 64-bit code when you select a 64-bit architecture, but 10462 you can use `-mgp32' to get 32-bit code instead. 10463 10464 For information about the O64 ABI, see 10465 `http://gcc.gnu.org/projects/mipso64-abi.html'. 10466 10467 `-mabicalls' 10468 `-mno-abicalls' 10469 Generate (do not generate) code that is suitable for SVR4-style 10470 dynamic objects. `-mabicalls' is the default for SVR4-based 10471 systems. 10472 10473 `-mshared' 10474 `-mno-shared' 10475 Generate (do not generate) code that is fully position-independent, 10476 and that can therefore be linked into shared libraries. This 10477 option only affects `-mabicalls'. 10478 10479 All `-mabicalls' code has traditionally been position-independent, 10480 regardless of options like `-fPIC' and `-fpic'. However, as an 10481 extension, the GNU toolchain allows executables to use absolute 10482 accesses for locally-binding symbols. It can also use shorter GP 10483 initialization sequences and generate direct calls to 10484 locally-defined functions. This mode is selected by `-mno-shared'. 10485 10486 `-mno-shared' depends on binutils 2.16 or higher and generates 10487 objects that can only be linked by the GNU linker. However, the 10488 option does not affect the ABI of the final executable; it only 10489 affects the ABI of relocatable objects. Using `-mno-shared' will 10490 generally make executables both smaller and quicker. 10491 10492 `-mshared' is the default. 10493 10494 `-mxgot' 10495 `-mno-xgot' 10496 Lift (do not lift) the usual restrictions on the size of the global 10497 offset table. 10498 10499 GCC normally uses a single instruction to load values from the GOT. 10500 While this is relatively efficient, it will only work if the GOT 10501 is smaller than about 64k. Anything larger will cause the linker 10502 to report an error such as: 10503 10504 relocation truncated to fit: R_MIPS_GOT16 foobar 10505 10506 If this happens, you should recompile your code with `-mxgot'. It 10507 should then work with very large GOTs, although it will also be 10508 less efficient, since it will take three instructions to fetch the 10509 value of a global symbol. 10510 10511 Note that some linkers can create multiple GOTs. If you have such 10512 a linker, you should only need to use `-mxgot' when a single object 10513 file accesses more than 64k's worth of GOT entries. Very few do. 10514 10515 These options have no effect unless GCC is generating position 10516 independent code. 10517 10518 `-mgp32' 10519 Assume that general-purpose registers are 32 bits wide. 10520 10521 `-mgp64' 10522 Assume that general-purpose registers are 64 bits wide. 10523 10524 `-mfp32' 10525 Assume that floating-point registers are 32 bits wide. 10526 10527 `-mfp64' 10528 Assume that floating-point registers are 64 bits wide. 10529 10530 `-mhard-float' 10531 Use floating-point coprocessor instructions. 10532 10533 `-msoft-float' 10534 Do not use floating-point coprocessor instructions. Implement 10535 floating-point calculations using library calls instead. 10536 10537 `-msingle-float' 10538 Assume that the floating-point coprocessor only supports 10539 single-precision operations. 10540 10541 `-mdouble-float' 10542 Assume that the floating-point coprocessor supports 10543 double-precision operations. This is the default. 10544 10545 `-mdsp' 10546 `-mno-dsp' 10547 Use (do not use) the MIPS DSP ASE. *Note MIPS DSP Built-in 10548 Functions::. 10549 10550 `-mpaired-single' 10551 `-mno-paired-single' 10552 Use (do not use) paired-single floating-point instructions. *Note 10553 MIPS Paired-Single Support::. This option can only be used when 10554 generating 64-bit code and requires hardware floating-point 10555 support to be enabled. 10556 10557 `-mips3d' 10558 `-mno-mips3d' 10559 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 10560 Functions::. The option `-mips3d' implies `-mpaired-single'. 10561 10562 `-mlong64' 10563 Force `long' types to be 64 bits wide. See `-mlong32' for an 10564 explanation of the default and the way that the pointer size is 10565 determined. 10566 10567 `-mlong32' 10568 Force `long', `int', and pointer types to be 32 bits wide. 10569 10570 The default size of `int's, `long's and pointers depends on the 10571 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 10572 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 10573 `long's. Pointers are the same size as `long's, or the same size 10574 as integer registers, whichever is smaller. 10575 10576 `-msym32' 10577 `-mno-sym32' 10578 Assume (do not assume) that all symbols have 32-bit values, 10579 regardless of the selected ABI. This option is useful in 10580 combination with `-mabi=64' and `-mno-abicalls' because it allows 10581 GCC to generate shorter and faster references to symbolic 10582 addresses. 10583 10584 `-G NUM' 10585 Put global and static items less than or equal to NUM bytes into 10586 the small data or bss section instead of the normal data or bss 10587 section. This allows the data to be accessed using a single 10588 instruction. 10589 10590 All modules should be compiled with the same `-G NUM' value. 10591 10592 `-membedded-data' 10593 `-mno-embedded-data' 10594 Allocate variables to the read-only data section first if 10595 possible, then next in the small data section if possible, 10596 otherwise in data. This gives slightly slower code than the 10597 default, but reduces the amount of RAM required when executing, 10598 and thus may be preferred for some embedded systems. 10599 10600 `-muninit-const-in-rodata' 10601 `-mno-uninit-const-in-rodata' 10602 Put uninitialized `const' variables in the read-only data section. 10603 This option is only meaningful in conjunction with 10604 `-membedded-data'. 10605 10606 `-msplit-addresses' 10607 `-mno-split-addresses' 10608 Enable (disable) use of the `%hi()' and `%lo()' assembler 10609 relocation operators. This option has been superseded by 10610 `-mexplicit-relocs' but is retained for backwards compatibility. 10611 10612 `-mexplicit-relocs' 10613 `-mno-explicit-relocs' 10614 Use (do not use) assembler relocation operators when dealing with 10615 symbolic addresses. The alternative, selected by 10616 `-mno-explicit-relocs', is to use assembler macros instead. 10617 10618 `-mexplicit-relocs' is the default if GCC was configured to use an 10619 assembler that supports relocation operators. 10620 10621 `-mcheck-zero-division' 10622 `-mno-check-zero-division' 10623 Trap (do not trap) on integer division by zero. The default is 10624 `-mcheck-zero-division'. 10625 10626 `-mdivide-traps' 10627 `-mdivide-breaks' 10628 MIPS systems check for division by zero by generating either a 10629 conditional trap or a break instruction. Using traps results in 10630 smaller code, but is only supported on MIPS II and later. Also, 10631 some versions of the Linux kernel have a bug that prevents trap 10632 from generating the proper signal (`SIGFPE'). Use 10633 `-mdivide-traps' to allow conditional traps on architectures that 10634 support them and `-mdivide-breaks' to force the use of breaks. 10635 10636 The default is usually `-mdivide-traps', but this can be 10637 overridden at configure time using `--with-divide=breaks'. 10638 Divide-by-zero checks can be completely disabled using 10639 `-mno-check-zero-division'. 10640 10641 `-mmemcpy' 10642 `-mno-memcpy' 10643 Force (do not force) the use of `memcpy()' for non-trivial block 10644 moves. The default is `-mno-memcpy', which allows GCC to inline 10645 most constant-sized copies. 10646 10647 `-mlong-calls' 10648 `-mno-long-calls' 10649 Disable (do not disable) use of the `jal' instruction. Calling 10650 functions using `jal' is more efficient but requires the caller 10651 and callee to be in the same 256 megabyte segment. 10652 10653 This option has no effect on abicalls code. The default is 10654 `-mno-long-calls'. 10655 10656 `-mmad' 10657 `-mno-mad' 10658 Enable (disable) use of the `mad', `madu' and `mul' instructions, 10659 as provided by the R4650 ISA. 10660 10661 `-mfused-madd' 10662 `-mno-fused-madd' 10663 Enable (disable) use of the floating point multiply-accumulate 10664 instructions, when they are available. The default is 10665 `-mfused-madd'. 10666 10667 When multiply-accumulate instructions are used, the intermediate 10668 product is calculated to infinite precision and is not subject to 10669 the FCSR Flush to Zero bit. This may be undesirable in some 10670 circumstances. 10671 10672 `-nocpp' 10673 Tell the MIPS assembler to not run its preprocessor over user 10674 assembler files (with a `.s' suffix) when assembling them. 10675 10676 `-mfix-r4000' 10677 `-mno-fix-r4000' 10678 Work around certain R4000 CPU errata: 10679 - A double-word or a variable shift may give an incorrect 10680 result if executed immediately after starting an integer 10681 division. 10682 10683 - A double-word or a variable shift may give an incorrect 10684 result if executed while an integer multiplication is in 10685 progress. 10686 10687 - An integer division may give an incorrect result if started 10688 in a delay slot of a taken branch or a jump. 10689 10690 `-mfix-r4400' 10691 `-mno-fix-r4400' 10692 Work around certain R4400 CPU errata: 10693 - A double-word or a variable shift may give an incorrect 10694 result if executed immediately after starting an integer 10695 division. 10696 10697 `-mfix-vr4120' 10698 `-mno-fix-vr4120' 10699 Work around certain VR4120 errata: 10700 - `dmultu' does not always produce the correct result. 10701 10702 - `div' and `ddiv' do not always produce the correct result if 10703 one of the operands is negative. 10704 The workarounds for the division errata rely on special functions 10705 in `libgcc.a'. At present, these functions are only provided by 10706 the `mips64vr*-elf' configurations. 10707 10708 Other VR4120 errata require a nop to be inserted between certain 10709 pairs of instructions. These errata are handled by the assembler, 10710 not by GCC itself. 10711 10712 `-mfix-vr4130' 10713 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 10714 implemented by the assembler rather than by GCC, although GCC will 10715 avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 10716 `dmacc' and `dmacchi' instructions are available instead. 10717 10718 `-mfix-sb1' 10719 `-mno-fix-sb1' 10720 Work around certain SB-1 CPU core errata. (This flag currently 10721 works around the SB-1 revision 2 "F1" and "F2" floating point 10722 errata.) 10723 10724 `-mflush-func=FUNC' 10725 `-mno-flush-func' 10726 Specifies the function to call to flush the I and D caches, or to 10727 not call any such function. If called, the function must take the 10728 same arguments as the common `_flush_func()', that is, the address 10729 of the memory range for which the cache is being flushed, the size 10730 of the memory range, and the number 3 (to flush both caches). The 10731 default depends on the target GCC was configured for, but commonly 10732 is either `_flush_func' or `__cpu_flush'. 10733 10734 `-mbranch-likely' 10735 `-mno-branch-likely' 10736 Enable or disable use of Branch Likely instructions, regardless of 10737 the default for the selected architecture. By default, Branch 10738 Likely instructions may be generated if they are supported by the 10739 selected architecture. An exception is for the MIPS32 and MIPS64 10740 architectures and processors which implement those architectures; 10741 for those, Branch Likely instructions will not be generated by 10742 default because the MIPS32 and MIPS64 architectures specifically 10743 deprecate their use. 10744 10745 `-mfp-exceptions' 10746 `-mno-fp-exceptions' 10747 Specifies whether FP exceptions are enabled. This affects how we 10748 schedule FP instructions for some processors. The default is that 10749 FP exceptions are enabled. 10750 10751 For instance, on the SB-1, if FP exceptions are disabled, and we 10752 are emitting 64-bit code, then we can use both FP pipes. 10753 Otherwise, we can only use one FP pipe. 10754 10755 `-mvr4130-align' 10756 `-mno-vr4130-align' 10757 The VR4130 pipeline is two-way superscalar, but can only issue two 10758 instructions together if the first one is 8-byte aligned. When 10759 this option is enabled, GCC will align pairs of instructions that 10760 it thinks should execute in parallel. 10761 10762 This option only has an effect when optimizing for the VR4130. It 10763 normally makes code faster, but at the expense of making it bigger. 10764 It is enabled by default at optimization level `-O3'. 10765 10766 10767 File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 10768 10769 3.17.22 MMIX Options 10770 -------------------- 10771 10772 These options are defined for the MMIX: 10773 10774 `-mlibfuncs' 10775 `-mno-libfuncs' 10776 Specify that intrinsic library functions are being compiled, 10777 passing all values in registers, no matter the size. 10778 10779 `-mepsilon' 10780 `-mno-epsilon' 10781 Generate floating-point comparison instructions that compare with 10782 respect to the `rE' epsilon register. 10783 10784 `-mabi=mmixware' 10785 `-mabi=gnu' 10786 Generate code that passes function parameters and return values 10787 that (in the called function) are seen as registers `$0' and up, 10788 as opposed to the GNU ABI which uses global registers `$231' and 10789 up. 10790 10791 `-mzero-extend' 10792 `-mno-zero-extend' 10793 When reading data from memory in sizes shorter than 64 bits, use 10794 (do not use) zero-extending load instructions by default, rather 10795 than sign-extending ones. 10796 10797 `-mknuthdiv' 10798 `-mno-knuthdiv' 10799 Make the result of a division yielding a remainder have the same 10800 sign as the divisor. With the default, `-mno-knuthdiv', the sign 10801 of the remainder follows the sign of the dividend. Both methods 10802 are arithmetically valid, the latter being almost exclusively used. 10803 10804 `-mtoplevel-symbols' 10805 `-mno-toplevel-symbols' 10806 Prepend (do not prepend) a `:' to all global symbols, so the 10807 assembly code can be used with the `PREFIX' assembly directive. 10808 10809 `-melf' 10810 Generate an executable in the ELF format, rather than the default 10811 `mmo' format used by the `mmix' simulator. 10812 10813 `-mbranch-predict' 10814 `-mno-branch-predict' 10815 Use (do not use) the probable-branch instructions, when static 10816 branch prediction indicates a probable branch. 10817 10818 `-mbase-addresses' 10819 `-mno-base-addresses' 10820 Generate (do not generate) code that uses _base addresses_. Using 10821 a base address automatically generates a request (handled by the 10822 assembler and the linker) for a constant to be set up in a global 10823 register. The register is used for one or more base address 10824 requests within the range 0 to 255 from the value held in the 10825 register. The generally leads to short and fast code, but the 10826 number of different data items that can be addressed is limited. 10827 This means that a program that uses lots of static data may 10828 require `-mno-base-addresses'. 10829 10830 `-msingle-exit' 10831 `-mno-single-exit' 10832 Force (do not force) generated code to have a single exit point in 10833 each function. 10834 10835 10836 File: gcc.info, Node: MN10300 Options, Next: MT Options, Prev: MMIX Options, Up: Submodel Options 10837 10838 3.17.23 MN10300 Options 10839 ----------------------- 10840 10841 These `-m' options are defined for Matsushita MN10300 architectures: 10842 10843 `-mmult-bug' 10844 Generate code to avoid bugs in the multiply instructions for the 10845 MN10300 processors. This is the default. 10846 10847 `-mno-mult-bug' 10848 Do not generate code to avoid bugs in the multiply instructions 10849 for the MN10300 processors. 10850 10851 `-mam33' 10852 Generate code which uses features specific to the AM33 processor. 10853 10854 `-mno-am33' 10855 Do not generate code which uses features specific to the AM33 10856 processor. This is the default. 10857 10858 `-mreturn-pointer-on-d0' 10859 When generating a function which returns a pointer, return the 10860 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 10861 only in a0, and attempts to call such functions without a prototype 10862 would result in errors. Note that this option is on by default; 10863 use `-mno-return-pointer-on-d0' to disable it. 10864 10865 `-mno-crt0' 10866 Do not link in the C run-time initialization object file. 10867 10868 `-mrelax' 10869 Indicate to the linker that it should perform a relaxation 10870 optimization pass to shorten branches, calls and absolute memory 10871 addresses. This option only has an effect when used on the 10872 command line for the final link step. 10873 10874 This option makes symbolic debugging impossible. 10875 10876 10877 File: gcc.info, Node: MT Options, Next: PDP-11 Options, Prev: MN10300 Options, Up: Submodel Options 10878 10879 3.17.24 MT Options 10880 ------------------ 10881 10882 These `-m' options are defined for Morpho MT architectures: 10883 10884 `-march=CPU-TYPE' 10885 Generate code that will run on CPU-TYPE, which is the name of a 10886 system representing a certain processor type. Possible values for 10887 CPU-TYPE are `ms1-64-001', `ms1-16-002', `ms1-16-003' and `ms2'. 10888 10889 When this option is not used, the default is `-march=ms1-16-002'. 10890 10891 `-mbacc' 10892 Use byte loads and stores when generating code. 10893 10894 `-mno-bacc' 10895 Do not use byte loads and stores when generating code. 10896 10897 `-msim' 10898 Use simulator runtime 10899 10900 `-mno-crt0' 10901 Do not link in the C run-time initialization object file `crti.o'. 10902 Other run-time initialization and termination files such as 10903 `startup.o' and `exit.o' are still included on the linker command 10904 line. 10905 10906 10907 10908 File: gcc.info, Node: PDP-11 Options, Next: PowerPC Options, Prev: MT Options, Up: Submodel Options 10909 10910 3.17.25 PDP-11 Options 10911 ---------------------- 10912 10913 These options are defined for the PDP-11: 10914 10915 `-mfpu' 10916 Use hardware FPP floating point. This is the default. (FIS 10917 floating point on the PDP-11/40 is not supported.) 10918 10919 `-msoft-float' 10920 Do not use hardware floating point. 10921 10922 `-mac0' 10923 Return floating-point results in ac0 (fr0 in Unix assembler 10924 syntax). 10925 10926 `-mno-ac0' 10927 Return floating-point results in memory. This is the default. 10928 10929 `-m40' 10930 Generate code for a PDP-11/40. 10931 10932 `-m45' 10933 Generate code for a PDP-11/45. This is the default. 10934 10935 `-m10' 10936 Generate code for a PDP-11/10. 10937 10938 `-mbcopy-builtin' 10939 Use inline `movmemhi' patterns for copying memory. This is the 10940 default. 10941 10942 `-mbcopy' 10943 Do not use inline `movmemhi' patterns for copying memory. 10944 10945 `-mint16' 10946 `-mno-int32' 10947 Use 16-bit `int'. This is the default. 10948 10949 `-mint32' 10950 `-mno-int16' 10951 Use 32-bit `int'. 10952 10953 `-mfloat64' 10954 `-mno-float32' 10955 Use 64-bit `float'. This is the default. 10956 10957 `-mfloat32' 10958 `-mno-float64' 10959 Use 32-bit `float'. 10960 10961 `-mabshi' 10962 Use `abshi2' pattern. This is the default. 10963 10964 `-mno-abshi' 10965 Do not use `abshi2' pattern. 10966 10967 `-mbranch-expensive' 10968 Pretend that branches are expensive. This is for experimenting 10969 with code generation only. 10970 10971 `-mbranch-cheap' 10972 Do not pretend that branches are expensive. This is the default. 10973 10974 `-msplit' 10975 Generate code for a system with split I&D. 10976 10977 `-mno-split' 10978 Generate code for a system without split I&D. This is the default. 10979 10980 `-munix-asm' 10981 Use Unix assembler syntax. This is the default when configured for 10982 `pdp11-*-bsd'. 10983 10984 `-mdec-asm' 10985 Use DEC assembler syntax. This is the default when configured for 10986 any PDP-11 target other than `pdp11-*-bsd'. 10987 10988 10989 File: gcc.info, Node: PowerPC Options, Next: RS/6000 and PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 10990 10991 3.17.26 PowerPC Options 10992 ----------------------- 10993 10994 These are listed under *Note RS/6000 and PowerPC Options::. 10995 10996 10997 File: gcc.info, Node: RS/6000 and PowerPC Options, Next: S/390 and zSeries Options, Prev: PowerPC Options, Up: Submodel Options 10998 10999 3.17.27 IBM RS/6000 and PowerPC Options 11000 --------------------------------------- 11001 11002 These `-m' options are defined for the IBM RS/6000 and PowerPC: 11003 `-mpower' 11004 `-mno-power' 11005 `-mpower2' 11006 `-mno-power2' 11007 `-mpowerpc' 11008 `-mno-powerpc' 11009 `-mpowerpc-gpopt' 11010 `-mno-powerpc-gpopt' 11011 `-mpowerpc-gfxopt' 11012 `-mno-powerpc-gfxopt' 11013 `-mpowerpc64' 11014 `-mno-powerpc64' 11015 `-mmfcrf' 11016 `-mno-mfcrf' 11017 `-mpopcntb' 11018 `-mno-popcntb' 11019 `-mfprnd' 11020 `-mno-fprnd' 11021 GCC supports two related instruction set architectures for the 11022 RS/6000 and PowerPC. The "POWER" instruction set are those 11023 instructions supported by the `rios' chip set used in the original 11024 RS/6000 systems and the "PowerPC" instruction set is the 11025 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx 11026 microprocessors, and the IBM 4xx, 6xx, and follow-on 11027 microprocessors. 11028 11029 Neither architecture is a subset of the other. However there is a 11030 large common subset of instructions supported by both. An MQ 11031 register is included in processors supporting the POWER 11032 architecture. 11033 11034 You use these options to specify which instructions are available 11035 on the processor you are using. The default value of these 11036 options is determined when configuring GCC. Specifying the 11037 `-mcpu=CPU_TYPE' overrides the specification of these options. We 11038 recommend you use the `-mcpu=CPU_TYPE' option rather than the 11039 options listed above. 11040 11041 The `-mpower' option allows GCC to generate instructions that are 11042 found only in the POWER architecture and to use the MQ register. 11043 Specifying `-mpower2' implies `-power' and also allows GCC to 11044 generate instructions that are present in the POWER2 architecture 11045 but not the original POWER architecture. 11046 11047 The `-mpowerpc' option allows GCC to generate instructions that 11048 are found only in the 32-bit subset of the PowerPC architecture. 11049 Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows 11050 GCC to use the optional PowerPC architecture instructions in the 11051 General Purpose group, including floating-point square root. 11052 Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows 11053 GCC to use the optional PowerPC architecture instructions in the 11054 Graphics group, including floating-point select. 11055 11056 The `-mmfcrf' option allows GCC to generate the move from 11057 condition register field instruction implemented on the POWER4 11058 processor and other processors that support the PowerPC V2.01 11059 architecture. The `-mpopcntb' option allows GCC to generate the 11060 popcount and double precision FP reciprocal estimate instruction 11061 implemented on the POWER5 processor and other processors that 11062 support the PowerPC V2.02 architecture. The `-mfprnd' option 11063 allows GCC to generate the FP round to integer instructions 11064 implemented on the POWER5+ processor and other processors that 11065 support the PowerPC V2.03 architecture. 11066 11067 The `-mpowerpc64' option allows GCC to generate the additional 11068 64-bit instructions that are found in the full PowerPC64 11069 architecture and to treat GPRs as 64-bit, doubleword quantities. 11070 GCC defaults to `-mno-powerpc64'. 11071 11072 If you specify both `-mno-power' and `-mno-powerpc', GCC will use 11073 only the instructions in the common subset of both architectures 11074 plus some special AIX common-mode calls, and will not use the MQ 11075 register. Specifying both `-mpower' and `-mpowerpc' permits GCC 11076 to use any instruction from either architecture and to allow use 11077 of the MQ register; specify this for the Motorola MPC601. 11078 11079 `-mnew-mnemonics' 11080 `-mold-mnemonics' 11081 Select which mnemonics to use in the generated assembler code. 11082 With `-mnew-mnemonics', GCC uses the assembler mnemonics defined 11083 for the PowerPC architecture. With `-mold-mnemonics' it uses the 11084 assembler mnemonics defined for the POWER architecture. 11085 Instructions defined in only one architecture have only one 11086 mnemonic; GCC uses that mnemonic irrespective of which of these 11087 options is specified. 11088 11089 GCC defaults to the mnemonics appropriate for the architecture in 11090 use. Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of 11091 these option. Unless you are building a cross-compiler, you 11092 should normally not specify either `-mnew-mnemonics' or 11093 `-mold-mnemonics', but should instead accept the default. 11094 11095 `-mcpu=CPU_TYPE' 11096 Set architecture type, register usage, choice of mnemonics, and 11097 instruction scheduling parameters for machine type CPU_TYPE. 11098 Supported values for CPU_TYPE are `401', `403', `405', `405fp', 11099 `440', `440fp', `505', `601', `602', `603', `603e', `604', `604e', 11100 `620', `630', `740', `7400', `7450', `750', `801', `821', `823', 11101 `860', `970', `8540', `ec603e', `G3', `G4', `G5', `power', 11102 `power2', `power3', `power4', `power5', `power5+', `power6', 11103 `common', `powerpc', `powerpc64', `rios', `rios1', `rios2', `rsc', 11104 and `rs64'. 11105 11106 `-mcpu=common' selects a completely generic processor. Code 11107 generated under this option will run on any POWER or PowerPC 11108 processor. GCC will use only the instructions in the common 11109 subset of both architectures, and will not use the MQ register. 11110 GCC assumes a generic processor model for scheduling purposes. 11111 11112 `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and 11113 `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit 11114 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 11115 types, with an appropriate, generic processor model assumed for 11116 scheduling purposes. 11117 11118 The other options specify a specific processor. Code generated 11119 under those options will run best on that processor, and may not 11120 run at all on others. 11121 11122 The `-mcpu' options automatically enable or disable the following 11123 options: `-maltivec', `-mfprnd', `-mhard-float', `-mmfcrf', 11124 `-mmultiple', `-mnew-mnemonics', `-mpopcntb', `-mpower', 11125 `-mpower2', `-mpowerpc64', `-mpowerpc-gpopt', `-mpowerpc-gfxopt', 11126 `-mstring', `-mmulhw', `-mdlmzb'. The particular options set for 11127 any particular CPU will vary between compiler versions, depending 11128 on what setting seems to produce optimal code for that CPU; it 11129 doesn't necessarily reflect the actual hardware's capabilities. If 11130 you wish to set an individual option to a particular value, you may 11131 specify it after the `-mcpu' option, like `-mcpu=970 -mno-altivec'. 11132 11133 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 11134 or disabled by the `-mcpu' option at present because AIX does not 11135 have full support for these options. You may still enable or 11136 disable them individually if you're sure it'll work in your 11137 environment. 11138 11139 `-mtune=CPU_TYPE' 11140 Set the instruction scheduling parameters for machine type 11141 CPU_TYPE, but do not set the architecture type, register usage, or 11142 choice of mnemonics, as `-mcpu=CPU_TYPE' would. The same values 11143 for CPU_TYPE are used for `-mtune' as for `-mcpu'. If both are 11144 specified, the code generated will use the architecture, 11145 registers, and mnemonics set by `-mcpu', but the scheduling 11146 parameters set by `-mtune'. 11147 11148 `-mswdiv' 11149 `-mno-swdiv' 11150 Generate code to compute division as reciprocal estimate and 11151 iterative refinement, creating opportunities for increased 11152 throughput. This feature requires: optional PowerPC Graphics 11153 instruction set for single precision and FRE instruction for 11154 double precision, assuming divides cannot generate user-visible 11155 traps, and the domain values not include Infinities, denormals or 11156 zero denominator. 11157 11158 `-maltivec' 11159 `-mno-altivec' 11160 Generate code that uses (does not use) AltiVec instructions, and 11161 also enable the use of built-in functions that allow more direct 11162 access to the AltiVec instruction set. You may also need to set 11163 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 11164 enhancements. 11165 11166 `-mvrsave' 11167 11168 `-mno-vrsave' 11169 Generate VRSAVE instructions when generating AltiVec code. 11170 11171 `-msecure-plt' 11172 Generate code that allows ld and ld.so to build executables and 11173 shared libraries with non-exec .plt and .got sections. This is a 11174 PowerPC 32-bit SYSV ABI option. 11175 11176 `-mbss-plt' 11177 Generate code that uses a BSS .plt section that ld.so fills in, and 11178 requires .plt and .got sections that are both writable and 11179 executable. This is a PowerPC 32-bit SYSV ABI option. 11180 11181 `-misel' 11182 `-mno-isel' 11183 This switch enables or disables the generation of ISEL 11184 instructions. 11185 11186 `-misel=YES/NO' 11187 This switch has been deprecated. Use `-misel' and `-mno-isel' 11188 instead. 11189 11190 `-mspe' 11191 `-mno-spe' 11192 This switch enables or disables the generation of SPE simd 11193 instructions. 11194 11195 `-mspe=YES/NO' 11196 This option has been deprecated. Use `-mspe' and `-mno-spe' 11197 instead. 11198 11199 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 11200 `-mfloat-gprs' 11201 This switch enables or disables the generation of floating point 11202 operations on the general purpose registers for architectures that 11203 support it. 11204 11205 The argument YES or SINGLE enables the use of single-precision 11206 floating point operations. 11207 11208 The argument DOUBLE enables the use of single and double-precision 11209 floating point operations. 11210 11211 The argument NO disables floating point operations on the general 11212 purpose registers. 11213 11214 This option is currently only available on the MPC854x. 11215 11216 `-m32' 11217 `-m64' 11218 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 11219 targets (including GNU/Linux). The 32-bit environment sets int, 11220 long and pointer to 32 bits and generates code that runs on any 11221 PowerPC variant. The 64-bit environment sets int to 32 bits and 11222 long and pointer to 64 bits, and generates code for PowerPC64, as 11223 for `-mpowerpc64'. 11224 11225 `-mfull-toc' 11226 `-mno-fp-in-toc' 11227 `-mno-sum-in-toc' 11228 `-mminimal-toc' 11229 Modify generation of the TOC (Table Of Contents), which is created 11230 for every executable file. The `-mfull-toc' option is selected by 11231 default. In that case, GCC will allocate at least one TOC entry 11232 for each unique non-automatic variable reference in your program. 11233 GCC will also place floating-point constants in the TOC. However, 11234 only 16,384 entries are available in the TOC. 11235 11236 If you receive a linker error message that saying you have 11237 overflowed the available TOC space, you can reduce the amount of 11238 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 11239 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 11240 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 11241 code to calculate the sum of an address and a constant at run-time 11242 instead of putting that sum into the TOC. You may specify one or 11243 both of these options. Each causes GCC to produce very slightly 11244 slower and larger code at the expense of conserving TOC space. 11245 11246 If you still run out of space in the TOC even when you specify 11247 both of these options, specify `-mminimal-toc' instead. This 11248 option causes GCC to make only one TOC entry for every file. When 11249 you specify this option, GCC will produce code that is slower and 11250 larger but which uses extremely little TOC space. You may wish to 11251 use this option only on files that contain less frequently 11252 executed code. 11253 11254 `-maix64' 11255 `-maix32' 11256 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 11257 64-bit `long' type, and the infrastructure needed to support them. 11258 Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while 11259 `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'. 11260 GCC defaults to `-maix32'. 11261 11262 `-mxl-compat' 11263 `-mno-xl-compat' 11264 Produce code that conforms more closely to IBM XL compiler 11265 semantics when using AIX-compatible ABI. Pass floating-point 11266 arguments to prototyped functions beyond the register save area 11267 (RSA) on the stack in addition to argument FPRs. Do not assume 11268 that most significant double in 128-bit long double value is 11269 properly rounded when comparing values and converting to double. 11270 Use XL symbol names for long double support routines. 11271 11272 The AIX calling convention was extended but not initially 11273 documented to handle an obscure K&R C case of calling a function 11274 that takes the address of its arguments with fewer arguments than 11275 declared. IBM XL compilers access floating point arguments which 11276 do not fit in the RSA from the stack when a subroutine is compiled 11277 without optimization. Because always storing floating-point 11278 arguments on the stack is inefficient and rarely needed, this 11279 option is not enabled by default and only is necessary when 11280 calling subroutines compiled by IBM XL compilers without 11281 optimization. 11282 11283 `-mpe' 11284 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 11285 application written to use message passing with special startup 11286 code to enable the application to run. The system must have PE 11287 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 11288 `specs' file must be overridden with the `-specs=' option to 11289 specify the appropriate directory location. The Parallel 11290 Environment does not support threads, so the `-mpe' option and the 11291 `-pthread' option are incompatible. 11292 11293 `-malign-natural' 11294 `-malign-power' 11295 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 11296 `-malign-natural' overrides the ABI-defined alignment of larger 11297 types, such as floating-point doubles, on their natural size-based 11298 boundary. The option `-malign-power' instructs GCC to follow the 11299 ABI-specified alignment rules. GCC defaults to the standard 11300 alignment defined in the ABI. 11301 11302 On 64-bit Darwin, natural alignment is the default, and 11303 `-malign-power' is not supported. 11304 11305 `-msoft-float' 11306 `-mhard-float' 11307 Generate code that does not use (uses) the floating-point register 11308 set. Software floating point emulation is provided if you use the 11309 `-msoft-float' option, and pass the option to GCC when linking. 11310 11311 `-mmultiple' 11312 `-mno-multiple' 11313 Generate code that uses (does not use) the load multiple word 11314 instructions and the store multiple word instructions. These 11315 instructions are generated by default on POWER systems, and not 11316 generated on PowerPC systems. Do not use `-mmultiple' on little 11317 endian PowerPC systems, since those instructions do not work when 11318 the processor is in little endian mode. The exceptions are PPC740 11319 and PPC750 which permit the instructions usage in little endian 11320 mode. 11321 11322 `-mstring' 11323 `-mno-string' 11324 Generate code that uses (does not use) the load string instructions 11325 and the store string word instructions to save multiple registers 11326 and do small block moves. These instructions are generated by 11327 default on POWER systems, and not generated on PowerPC systems. 11328 Do not use `-mstring' on little endian PowerPC systems, since those 11329 instructions do not work when the processor is in little endian 11330 mode. The exceptions are PPC740 and PPC750 which permit the 11331 instructions usage in little endian mode. 11332 11333 `-mupdate' 11334 `-mno-update' 11335 Generate code that uses (does not use) the load or store 11336 instructions that update the base register to the address of the 11337 calculated memory location. These instructions are generated by 11338 default. If you use `-mno-update', there is a small window 11339 between the time that the stack pointer is updated and the address 11340 of the previous frame is stored, which means code that walks the 11341 stack frame across interrupts or signals may get corrupted data. 11342 11343 `-mfused-madd' 11344 `-mno-fused-madd' 11345 Generate code that uses (does not use) the floating point multiply 11346 and accumulate instructions. These instructions are generated by 11347 default if hardware floating is used. 11348 11349 `-mmulhw' 11350 `-mno-mulhw' 11351 Generate code that uses (does not use) the half-word multiply and 11352 multiply-accumulate instructions on the IBM 405 and 440 processors. 11353 These instructions are generated by default when targetting those 11354 processors. 11355 11356 `-mdlmzb' 11357 `-mno-dlmzb' 11358 Generate code that uses (does not use) the string-search `dlmzb' 11359 instruction on the IBM 405 and 440 processors. This instruction is 11360 generated by default when targetting those processors. 11361 11362 `-mno-bit-align' 11363 `-mbit-align' 11364 On System V.4 and embedded PowerPC systems do not (do) force 11365 structures and unions that contain bit-fields to be aligned to the 11366 base type of the bit-field. 11367 11368 For example, by default a structure containing nothing but 8 11369 `unsigned' bit-fields of length 1 would be aligned to a 4 byte 11370 boundary and have a size of 4 bytes. By using `-mno-bit-align', 11371 the structure would be aligned to a 1 byte boundary and be one 11372 byte in size. 11373 11374 `-mno-strict-align' 11375 `-mstrict-align' 11376 On System V.4 and embedded PowerPC systems do not (do) assume that 11377 unaligned memory references will be handled by the system. 11378 11379 `-mrelocatable' 11380 `-mno-relocatable' 11381 On embedded PowerPC systems generate code that allows (does not 11382 allow) the program to be relocated to a different address at 11383 runtime. If you use `-mrelocatable' on any module, all objects 11384 linked together must be compiled with `-mrelocatable' or 11385 `-mrelocatable-lib'. 11386 11387 `-mrelocatable-lib' 11388 `-mno-relocatable-lib' 11389 On embedded PowerPC systems generate code that allows (does not 11390 allow) the program to be relocated to a different address at 11391 runtime. Modules compiled with `-mrelocatable-lib' can be linked 11392 with either modules compiled without `-mrelocatable' and 11393 `-mrelocatable-lib' or with modules compiled with the 11394 `-mrelocatable' options. 11395 11396 `-mno-toc' 11397 `-mtoc' 11398 On System V.4 and embedded PowerPC systems do not (do) assume that 11399 register 2 contains a pointer to a global area pointing to the 11400 addresses used in the program. 11401 11402 `-mlittle' 11403 `-mlittle-endian' 11404 On System V.4 and embedded PowerPC systems compile code for the 11405 processor in little endian mode. The `-mlittle-endian' option is 11406 the same as `-mlittle'. 11407 11408 `-mbig' 11409 `-mbig-endian' 11410 On System V.4 and embedded PowerPC systems compile code for the 11411 processor in big endian mode. The `-mbig-endian' option is the 11412 same as `-mbig'. 11413 11414 `-mdynamic-no-pic' 11415 On Darwin and Mac OS X systems, compile code so that it is not 11416 relocatable, but that its external references are relocatable. The 11417 resulting code is suitable for applications, but not shared 11418 libraries. 11419 11420 `-mprioritize-restricted-insns=PRIORITY' 11421 This option controls the priority that is assigned to 11422 dispatch-slot restricted instructions during the second scheduling 11423 pass. The argument PRIORITY takes the value 0/1/2 to assign 11424 NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted 11425 instructions. 11426 11427 `-msched-costly-dep=DEPENDENCE_TYPE' 11428 This option controls which dependences are considered costly by 11429 the target during instruction scheduling. The argument 11430 DEPENDENCE_TYPE takes one of the following values: NO: no 11431 dependence is costly, ALL: all dependences are costly, 11432 TRUE_STORE_TO_LOAD: a true dependence from store to load is costly, 11433 STORE_TO_LOAD: any dependence from store to load is costly, 11434 NUMBER: any dependence which latency >= NUMBER is costly. 11435 11436 `-minsert-sched-nops=SCHEME' 11437 This option controls which nop insertion scheme will be used during 11438 the second scheduling pass. The argument SCHEME takes one of the 11439 following values: NO: Don't insert nops. PAD: Pad with nops any 11440 dispatch group which has vacant issue slots, according to the 11441 scheduler's grouping. REGROUP_EXACT: Insert nops to force costly 11442 dependent insns into separate groups. Insert exactly as many nops 11443 as needed to force an insn to a new group, according to the 11444 estimated processor grouping. NUMBER: Insert nops to force costly 11445 dependent insns into separate groups. Insert NUMBER nops to force 11446 an insn to a new group. 11447 11448 `-mcall-sysv' 11449 On System V.4 and embedded PowerPC systems compile code using 11450 calling conventions that adheres to the March 1995 draft of the 11451 System V Application Binary Interface, PowerPC processor 11452 supplement. This is the default unless you configured GCC using 11453 `powerpc-*-eabiaix'. 11454 11455 `-mcall-sysv-eabi' 11456 Specify both `-mcall-sysv' and `-meabi' options. 11457 11458 `-mcall-sysv-noeabi' 11459 Specify both `-mcall-sysv' and `-mno-eabi' options. 11460 11461 `-mcall-solaris' 11462 On System V.4 and embedded PowerPC systems compile code for the 11463 Solaris operating system. 11464 11465 `-mcall-linux' 11466 On System V.4 and embedded PowerPC systems compile code for the 11467 Linux-based GNU system. 11468 11469 `-mcall-gnu' 11470 On System V.4 and embedded PowerPC systems compile code for the 11471 Hurd-based GNU system. 11472 11473 `-mcall-netbsd' 11474 On System V.4 and embedded PowerPC systems compile code for the 11475 NetBSD operating system. 11476 11477 `-maix-struct-return' 11478 Return all structures in memory (as specified by the AIX ABI). 11479 11480 `-msvr4-struct-return' 11481 Return structures smaller than 8 bytes in registers (as specified 11482 by the SVR4 ABI). 11483 11484 `-mabi=ABI-TYPE' 11485 Extend the current ABI with a particular extension, or remove such 11486 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 11487 IBMLONGDOUBLE, IEEELONGDOUBLE. 11488 11489 `-mabi=spe' 11490 Extend the current ABI with SPE ABI extensions. This does not 11491 change the default ABI, instead it adds the SPE ABI extensions to 11492 the current ABI. 11493 11494 `-mabi=no-spe' 11495 Disable Booke SPE ABI extensions for the current ABI. 11496 11497 `-mabi=ibmlongdouble' 11498 Change the current ABI to use IBM extended precision long double. 11499 This is a PowerPC 32-bit SYSV ABI option. 11500 11501 `-mabi=ieeelongdouble' 11502 Change the current ABI to use IEEE extended precision long double. 11503 This is a PowerPC 32-bit Linux ABI option. 11504 11505 `-mprototype' 11506 `-mno-prototype' 11507 On System V.4 and embedded PowerPC systems assume that all calls to 11508 variable argument functions are properly prototyped. Otherwise, 11509 the compiler must insert an instruction before every non 11510 prototyped call to set or clear bit 6 of the condition code 11511 register (CR) to indicate whether floating point values were 11512 passed in the floating point registers in case the function takes 11513 a variable arguments. With `-mprototype', only calls to 11514 prototyped variable argument functions will set or clear the bit. 11515 11516 `-msim' 11517 On embedded PowerPC systems, assume that the startup module is 11518 called `sim-crt0.o' and that the standard C libraries are 11519 `libsim.a' and `libc.a'. This is the default for 11520 `powerpc-*-eabisim'. configurations. 11521 11522 `-mmvme' 11523 On embedded PowerPC systems, assume that the startup module is 11524 called `crt0.o' and the standard C libraries are `libmvme.a' and 11525 `libc.a'. 11526 11527 `-mads' 11528 On embedded PowerPC systems, assume that the startup module is 11529 called `crt0.o' and the standard C libraries are `libads.a' and 11530 `libc.a'. 11531 11532 `-myellowknife' 11533 On embedded PowerPC systems, assume that the startup module is 11534 called `crt0.o' and the standard C libraries are `libyk.a' and 11535 `libc.a'. 11536 11537 `-mvxworks' 11538 On System V.4 and embedded PowerPC systems, specify that you are 11539 compiling for a VxWorks system. 11540 11541 `-mwindiss' 11542 Specify that you are compiling for the WindISS simulation 11543 environment. 11544 11545 `-memb' 11546 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 11547 header to indicate that `eabi' extended relocations are used. 11548 11549 `-meabi' 11550 `-mno-eabi' 11551 On System V.4 and embedded PowerPC systems do (do not) adhere to 11552 the Embedded Applications Binary Interface (eabi) which is a set of 11553 modifications to the System V.4 specifications. Selecting `-meabi' 11554 means that the stack is aligned to an 8 byte boundary, a function 11555 `__eabi' is called to from `main' to set up the eabi environment, 11556 and the `-msdata' option can use both `r2' and `r13' to point to 11557 two separate small data areas. Selecting `-mno-eabi' means that 11558 the stack is aligned to a 16 byte boundary, do not call an 11559 initialization function from `main', and the `-msdata' option will 11560 only use `r13' to point to a single small data area. The `-meabi' 11561 option is on by default if you configured GCC using one of the 11562 `powerpc*-*-eabi*' options. 11563 11564 `-msdata=eabi' 11565 On System V.4 and embedded PowerPC systems, put small initialized 11566 `const' global and static data in the `.sdata2' section, which is 11567 pointed to by register `r2'. Put small initialized non-`const' 11568 global and static data in the `.sdata' section, which is pointed 11569 to by register `r13'. Put small uninitialized global and static 11570 data in the `.sbss' section, which is adjacent to the `.sdata' 11571 section. The `-msdata=eabi' option is incompatible with the 11572 `-mrelocatable' option. The `-msdata=eabi' option also sets the 11573 `-memb' option. 11574 11575 `-msdata=sysv' 11576 On System V.4 and embedded PowerPC systems, put small global and 11577 static data in the `.sdata' section, which is pointed to by 11578 register `r13'. Put small uninitialized global and static data in 11579 the `.sbss' section, which is adjacent to the `.sdata' section. 11580 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 11581 option. 11582 11583 `-msdata=default' 11584 `-msdata' 11585 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 11586 compile code the same as `-msdata=eabi', otherwise compile code the 11587 same as `-msdata=sysv'. 11588 11589 `-msdata-data' 11590 On System V.4 and embedded PowerPC systems, put small global data 11591 in the `.sdata' section. Put small uninitialized global data in 11592 the `.sbss' section. Do not use register `r13' to address small 11593 data however. This is the default behavior unless other `-msdata' 11594 options are used. 11595 11596 `-msdata=none' 11597 `-mno-sdata' 11598 On embedded PowerPC systems, put all initialized global and static 11599 data in the `.data' section, and all uninitialized data in the 11600 `.bss' section. 11601 11602 `-G NUM' 11603 On embedded PowerPC systems, put global and static items less than 11604 or equal to NUM bytes into the small data or bss sections instead 11605 of the normal data or bss section. By default, NUM is 8. The `-G 11606 NUM' switch is also passed to the linker. All modules should be 11607 compiled with the same `-G NUM' value. 11608 11609 `-mregnames' 11610 `-mno-regnames' 11611 On System V.4 and embedded PowerPC systems do (do not) emit 11612 register names in the assembly language output using symbolic 11613 forms. 11614 11615 `-mlongcall' 11616 `-mno-longcall' 11617 By default assume that all calls are far away so that a longer more 11618 expensive calling sequence is required. This is required for calls 11619 further than 32 megabytes (33,554,432 bytes) from the current 11620 location. A short call will be generated if the compiler knows 11621 the call cannot be that far away. This setting can be overridden 11622 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 11623 11624 Some linkers are capable of detecting out-of-range calls and 11625 generating glue code on the fly. On these systems, long calls are 11626 unnecessary and generate slower code. As of this writing, the AIX 11627 linker can do this, as can the GNU linker for PowerPC/64. It is 11628 planned to add this feature to the GNU linker for 32-bit PowerPC 11629 systems as well. 11630 11631 On Darwin/PPC systems, `#pragma longcall' will generate "jbsr 11632 callee, L42", plus a "branch island" (glue code). The two target 11633 addresses represent the callee and the "branch island". The 11634 Darwin/PPC linker will prefer the first address and generate a "bl 11635 callee" if the PPC "bl" instruction will reach the callee directly; 11636 otherwise, the linker will generate "bl L42" to call the "branch 11637 island". The "branch island" is appended to the body of the 11638 calling function; it computes the full 32-bit address of the callee 11639 and jumps to it. 11640 11641 On Mach-O (Darwin) systems, this option directs the compiler emit 11642 to the glue for every direct call, and the Darwin linker decides 11643 whether to use or discard it. 11644 11645 In the future, we may cause GCC to ignore all longcall 11646 specifications when the linker is known to generate glue. 11647 11648 `-pthread' 11649 Adds support for multithreading with the "pthreads" library. This 11650 option sets flags for both the preprocessor and linker. 11651 11652 11653 11654 File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 11655 11656 3.17.28 S/390 and zSeries Options 11657 --------------------------------- 11658 11659 These are the `-m' options defined for the S/390 and zSeries 11660 architecture. 11661 11662 `-mhard-float' 11663 `-msoft-float' 11664 Use (do not use) the hardware floating-point instructions and 11665 registers for floating-point operations. When `-msoft-float' is 11666 specified, functions in `libgcc.a' will be used to perform 11667 floating-point operations. When `-mhard-float' is specified, the 11668 compiler generates IEEE floating-point instructions. This is the 11669 default. 11670 11671 `-mlong-double-64' 11672 `-mlong-double-128' 11673 These switches control the size of `long double' type. A size of 11674 64bit makes the `long double' type equivalent to the `double' 11675 type. This is the default. 11676 11677 `-mbackchain' 11678 `-mno-backchain' 11679 Store (do not store) the address of the caller's frame as 11680 backchain pointer into the callee's stack frame. A backchain may 11681 be needed to allow debugging using tools that do not understand 11682 DWARF-2 call frame information. When `-mno-packed-stack' is in 11683 effect, the backchain pointer is stored at the bottom of the stack 11684 frame; when `-mpacked-stack' is in effect, the backchain is placed 11685 into the topmost word of the 96/160 byte register save area. 11686 11687 In general, code compiled with `-mbackchain' is call-compatible 11688 with code compiled with `-mmo-backchain'; however, use of the 11689 backchain for debugging purposes usually requires that the whole 11690 binary is built with `-mbackchain'. Note that the combination of 11691 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 11692 supported. In order to build a linux kernel use `-msoft-float'. 11693 11694 The default is to not maintain the backchain. 11695 11696 `-mpacked-stack' 11697 11698 `-mno-packed-stack' 11699 Use (do not use) the packed stack layout. When 11700 `-mno-packed-stack' is specified, the compiler uses the all fields 11701 of the 96/160 byte register save area only for their default 11702 purpose; unused fields still take up stack space. When 11703 `-mpacked-stack' is specified, register save slots are densely 11704 packed at the top of the register save area; unused space is 11705 reused for other purposes, allowing for more efficient use of the 11706 available stack space. However, when `-mbackchain' is also in 11707 effect, the topmost word of the save area is always used to store 11708 the backchain, and the return address register is always saved two 11709 words below the backchain. 11710 11711 As long as the stack frame backchain is not used, code generated 11712 with `-mpacked-stack' is call-compatible with code generated with 11713 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 11714 for S/390 or zSeries generated code that uses the stack frame 11715 backchain at run time, not just for debugging purposes. Such code 11716 is not call-compatible with code compiled with `-mpacked-stack'. 11717 Also, note that the combination of `-mbackchain', `-mpacked-stack' 11718 and `-mhard-float' is not supported. In order to build a linux 11719 kernel use `-msoft-float'. 11720 11721 The default is to not use the packed stack layout. 11722 11723 `-msmall-exec' 11724 `-mno-small-exec' 11725 Generate (or do not generate) code using the `bras' instruction to 11726 do subroutine calls. This only works reliably if the total 11727 executable size does not exceed 64k. The default is to use the 11728 `basr' instruction instead, which does not have this limitation. 11729 11730 `-m64' 11731 `-m31' 11732 When `-m31' is specified, generate code compliant to the GNU/Linux 11733 for S/390 ABI. When `-m64' is specified, generate code compliant 11734 to the GNU/Linux for zSeries ABI. This allows GCC in particular 11735 to generate 64-bit instructions. For the `s390' targets, the 11736 default is `-m31', while the `s390x' targets default to `-m64'. 11737 11738 `-mzarch' 11739 `-mesa' 11740 When `-mzarch' is specified, generate code using the instructions 11741 available on z/Architecture. When `-mesa' is specified, generate 11742 code using the instructions available on ESA/390. Note that 11743 `-mesa' is not possible with `-m64'. When generating code 11744 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 11745 When generating code compliant to the GNU/Linux for zSeries ABI, 11746 the default is `-mzarch'. 11747 11748 `-mmvcle' 11749 `-mno-mvcle' 11750 Generate (or do not generate) code using the `mvcle' instruction 11751 to perform block moves. When `-mno-mvcle' is specified, use a 11752 `mvc' loop instead. This is the default unless optimizing for 11753 size. 11754 11755 `-mdebug' 11756 `-mno-debug' 11757 Print (or do not print) additional debug information when 11758 compiling. The default is to not print debug information. 11759 11760 `-march=CPU-TYPE' 11761 Generate code that will run on CPU-TYPE, which is the name of a 11762 system representing a certain processor type. Possible values for 11763 CPU-TYPE are `g5', `g6', `z900', and `z990'. When generating code 11764 using the instructions available on z/Architecture, the default is 11765 `-march=z900'. Otherwise, the default is `-march=g5'. 11766 11767 `-mtune=CPU-TYPE' 11768 Tune to CPU-TYPE everything applicable about the generated code, 11769 except for the ABI and the set of available instructions. The 11770 list of CPU-TYPE values is the same as for `-march'. The default 11771 is the value used for `-march'. 11772 11773 `-mtpf-trace' 11774 `-mno-tpf-trace' 11775 Generate code that adds (does not add) in TPF OS specific branches 11776 to trace routines in the operating system. This option is off by 11777 default, even when compiling for the TPF OS. 11778 11779 `-mfused-madd' 11780 `-mno-fused-madd' 11781 Generate code that uses (does not use) the floating point multiply 11782 and accumulate instructions. These instructions are generated by 11783 default if hardware floating point is used. 11784 11785 `-mwarn-framesize=FRAMESIZE' 11786 Emit a warning if the current function exceeds the given frame 11787 size. Because this is a compile time check it doesn't need to be 11788 a real problem when the program runs. It is intended to identify 11789 functions which most probably cause a stack overflow. It is 11790 useful to be used in an environment with limited stack size e.g. 11791 the linux kernel. 11792 11793 `-mwarn-dynamicstack' 11794 Emit a warning if the function calls alloca or uses dynamically 11795 sized arrays. This is generally a bad idea with a limited stack 11796 size. 11797 11798 `-mstack-guard=STACK-GUARD' 11799 11800 `-mstack-size=STACK-SIZE' 11801 These arguments always have to be used in conjunction. If they 11802 are present the s390 back end emits additional instructions in the 11803 function prologue which trigger a trap if the stack size is 11804 STACK-GUARD bytes above the STACK-SIZE (remember that the stack on 11805 s390 grows downward). These options are intended to be used to 11806 help debugging stack overflow problems. The additionally emitted 11807 code causes only little overhead and hence can also be used in 11808 production like systems without greater performance degradation. 11809 The given values have to be exact powers of 2 and STACK-SIZE has 11810 to be greater than STACK-GUARD without exceeding 64k. In order to 11811 be efficient the extra code makes the assumption that the stack 11812 starts at an address aligned to the value given by STACK-SIZE. 11813 11814 11815 File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 11816 11817 3.17.29 Score Options 11818 --------------------- 11819 11820 These options are defined for Score implementations: 11821 11822 `-meb' 11823 Compile code for big endian mode. This is the default. 11824 11825 `-mel' 11826 Compile code for little endian mode. 11827 11828 `-mnhwloop' 11829 Disable generate bcnz instruction. 11830 11831 `-muls' 11832 Enable generate unaligned load and store instruction. 11833 11834 `-mmac' 11835 Enable the use of multiply-accumulate instructions. Disabled by 11836 default. 11837 11838 `-mscore5' 11839 Specify the SCORE5 as the target architecture. 11840 11841 `-mscore5u' 11842 Specify the SCORE5U of the target architecture. 11843 11844 `-mscore7' 11845 Specify the SCORE7 as the target architecture. This is the default. 11846 11847 `-mscore7d' 11848 Specify the SCORE7D as the target architecture. 11849 11850 11851 File: gcc.info, Node: SH Options, Next: SPARC Options, Prev: Score Options, Up: Submodel Options 11852 11853 3.17.30 SH Options 11854 ------------------ 11855 11856 These `-m' options are defined for the SH implementations: 11857 11858 `-m1' 11859 Generate code for the SH1. 11860 11861 `-m2' 11862 Generate code for the SH2. 11863 11864 `-m2e' 11865 Generate code for the SH2e. 11866 11867 `-m3' 11868 Generate code for the SH3. 11869 11870 `-m3e' 11871 Generate code for the SH3e. 11872 11873 `-m4-nofpu' 11874 Generate code for the SH4 without a floating-point unit. 11875 11876 `-m4-single-only' 11877 Generate code for the SH4 with a floating-point unit that only 11878 supports single-precision arithmetic. 11879 11880 `-m4-single' 11881 Generate code for the SH4 assuming the floating-point unit is in 11882 single-precision mode by default. 11883 11884 `-m4' 11885 Generate code for the SH4. 11886 11887 `-m4a-nofpu' 11888 Generate code for the SH4al-dsp, or for a SH4a in such a way that 11889 the floating-point unit is not used. 11890 11891 `-m4a-single-only' 11892 Generate code for the SH4a, in such a way that no double-precision 11893 floating point operations are used. 11894 11895 `-m4a-single' 11896 Generate code for the SH4a assuming the floating-point unit is in 11897 single-precision mode by default. 11898 11899 `-m4a' 11900 Generate code for the SH4a. 11901 11902 `-m4al' 11903 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 11904 the assembler. GCC doesn't generate any DSP instructions at the 11905 moment. 11906 11907 `-mb' 11908 Compile code for the processor in big endian mode. 11909 11910 `-ml' 11911 Compile code for the processor in little endian mode. 11912 11913 `-mdalign' 11914 Align doubles at 64-bit boundaries. Note that this changes the 11915 calling conventions, and thus some functions from the standard C 11916 library will not work unless you recompile it first with 11917 `-mdalign'. 11918 11919 `-mrelax' 11920 Shorten some address references at link time, when possible; uses 11921 the linker option `-relax'. 11922 11923 `-mbigtable' 11924 Use 32-bit offsets in `switch' tables. The default is to use 11925 16-bit offsets. 11926 11927 `-mfmovd' 11928 Enable the use of the instruction `fmovd'. 11929 11930 `-mhitachi' 11931 Comply with the calling conventions defined by Renesas. 11932 11933 `-mrenesas' 11934 Comply with the calling conventions defined by Renesas. 11935 11936 `-mno-renesas' 11937 Comply with the calling conventions defined for GCC before the 11938 Renesas conventions were available. This option is the default 11939 for all targets of the SH toolchain except for `sh-symbianelf'. 11940 11941 `-mnomacsave' 11942 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is 11943 given. 11944 11945 `-mieee' 11946 Increase IEEE-compliance of floating-point code. At the moment, 11947 this is equivalent to `-fno-finite-math-only'. When generating 16 11948 bit SH opcodes, getting IEEE-conforming results for comparisons of 11949 NANs / infinities incurs extra overhead in every floating point 11950 comparison, therefore the default is set to `-ffinite-math-only'. 11951 11952 `-misize' 11953 Dump instruction size and location in the assembly code. 11954 11955 `-mpadstruct' 11956 This option is deprecated. It pads structures to multiple of 4 11957 bytes, which is incompatible with the SH ABI. 11958 11959 `-mspace' 11960 Optimize for space instead of speed. Implied by `-Os'. 11961 11962 `-mprefergot' 11963 When generating position-independent code, emit function calls 11964 using the Global Offset Table instead of the Procedure Linkage 11965 Table. 11966 11967 `-musermode' 11968 Generate a library function call to invalidate instruction cache 11969 entries, after fixing up a trampoline. This library function call 11970 doesn't assume it can write to the whole memory address space. 11971 This is the default when the target is `sh-*-linux*'. 11972 11973 `-multcost=NUMBER' 11974 Set the cost to assume for a multiply insn. 11975 11976 `-mdiv=STRATEGY' 11977 Set the division strategy to use for SHmedia code. STRATEGY must 11978 be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, 11979 inv:call, inv:call2, inv:fp . "fp" performs the operation in 11980 floating point. This has a very high latency, but needs only a 11981 few instructions, so it might be a good choice if your code has 11982 enough easily exploitable ILP to allow the compiler to schedule 11983 the floating point instructions together with other instructions. 11984 Division by zero causes a floating point exception. "inv" uses 11985 integer operations to calculate the inverse of the divisor, and 11986 then multiplies the dividend with the inverse. This strategy 11987 allows cse and hoisting of the inverse calculation. Division by 11988 zero calculates an unspecified result, but does not trap. 11989 "inv:minlat" is a variant of "inv" where if no cse / hoisting 11990 opportunities have been found, or if the entire operation has been 11991 hoisted to the same place, the last stages of the inverse 11992 calculation are intertwined with the final multiply to reduce the 11993 overall latency, at the expense of using a few more instructions, 11994 and thus offering fewer scheduling opportunities with other code. 11995 "call" calls a library function that usually implements the 11996 inv:minlat strategy. This gives high code density for 11997 m5-*media-nofpu compilations. "call2" uses a different entry 11998 point of the same library function, where it assumes that a 11999 pointer to a lookup table has already been set up, which exposes 12000 the pointer load to cse / code hoisting optimizations. 12001 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm 12002 for initial code generation, but if the code stays unoptimized, 12003 revert to the "call", "call2", or "fp" strategies, respectively. 12004 Note that the potentially-trapping side effect of division by zero 12005 is carried by a separate instruction, so it is possible that all 12006 the integer instructions are hoisted out, but the marker for the 12007 side effect stays where it is. A recombination to fp operations 12008 or a call is not possible in that case. "inv20u" and "inv20l" are 12009 variants of the "inv:minlat" strategy. In the case that the 12010 inverse calculation was nor separated from the multiply, they speed 12011 up division where the dividend fits into 20 bits (plus sign where 12012 applicable), by inserting a test to skip a number of operations in 12013 this case; this test slows down the case of larger dividends. 12014 inv20u assumes the case of a such a small dividend to be unlikely, 12015 and inv20l assumes it to be likely. 12016 12017 `-mdivsi3_libfunc=NAME' 12018 Set the name of the library function used for 32 bit signed 12019 division to NAME. This only affect the name used in the call and 12020 inv:call division strategies, and the compiler will still expect 12021 the same sets of input/output/clobbered registers as if this 12022 option was not present. 12023 12024 `-madjust-unroll' 12025 Throttle unrolling to avoid thrashing target registers. This 12026 option only has an effect if the gcc code base supports the 12027 TARGET_ADJUST_UNROLL_MAX target hook. 12028 12029 `-mindexed-addressing' 12030 Enable the use of the indexed addressing mode for 12031 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 12032 implement 32 bit wrap-around semantics for the indexed addressing 12033 mode. The architecture allows the implementation of processors 12034 with 64 bit MMU, which the OS could use to get 32 bit addressing, 12035 but since no current hardware implementation supports this or any 12036 other way to make the indexed addressing mode safe to use in the 12037 32 bit ABI, the default is -mno-indexed-addressing. 12038 12039 `-mgettrcost=NUMBER' 12040 Set the cost assumed for the gettr instruction to NUMBER. The 12041 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 12042 12043 `-mpt-fixed' 12044 Assume pt* instructions won't trap. This will generally generate 12045 better scheduled code, but is unsafe on current hardware. The 12046 current architecture definition says that ptabs and ptrel trap 12047 when the target anded with 3 is 3. This has the unintentional 12048 effect of making it unsafe to schedule ptabs / ptrel before a 12049 branch, or hoist it out of a loop. For example, 12050 __do_global_ctors, a part of libgcc that runs constructors at 12051 program startup, calls functions in a list which is delimited by 12052 -1. With the -mpt-fixed option, the ptabs will be done before 12053 testing against -1. That means that all the constructors will be 12054 run a bit quicker, but when the loop comes to the end of the list, 12055 the program crashes because ptabs loads -1 into a target register. 12056 Since this option is unsafe for any hardware implementing the 12057 current architecture specification, the default is -mno-pt-fixed. 12058 Unless the user specifies a specific cost with `-mgettrcost', 12059 -mno-pt-fixed also implies `-mgettrcost=100'; this deters register 12060 allocation using target registers for storing ordinary integers. 12061 12062 `-minvalid-symbols' 12063 Assume symbols might be invalid. Ordinary function symbols 12064 generated by the compiler will always be valid to load with 12065 movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or 12066 linker tricks it is possible to generate symbols that will cause 12067 ptabs / ptrel to trap. This option is only meaningful when 12068 `-mno-pt-fixed' is in effect. It will then prevent 12069 cross-basic-block cse, hoisting and most scheduling of symbol 12070 loads. The default is `-mno-invalid-symbols'. 12071 12072 12073 File: gcc.info, Node: SPARC Options, Next: System V Options, Prev: SH Options, Up: Submodel Options 12074 12075 3.17.31 SPARC Options 12076 --------------------- 12077 12078 These `-m' options are supported on the SPARC: 12079 12080 `-mno-app-regs' 12081 `-mapp-regs' 12082 Specify `-mapp-regs' to generate output using the global registers 12083 2 through 4, which the SPARC SVR4 ABI reserves for applications. 12084 This is the default. 12085 12086 To be fully SVR4 ABI compliant at the cost of some performance 12087 loss, specify `-mno-app-regs'. You should compile libraries and 12088 system software with this option. 12089 12090 `-mfpu' 12091 `-mhard-float' 12092 Generate output containing floating point instructions. This is 12093 the default. 12094 12095 `-mno-fpu' 12096 `-msoft-float' 12097 Generate output containing library calls for floating point. 12098 *Warning:* the requisite libraries are not available for all SPARC 12099 targets. Normally the facilities of the machine's usual C 12100 compiler are used, but this cannot be done directly in 12101 cross-compilation. You must make your own arrangements to provide 12102 suitable library functions for cross-compilation. The embedded 12103 targets `sparc-*-aout' and `sparclite-*-*' do provide software 12104 floating point support. 12105 12106 `-msoft-float' changes the calling convention in the output file; 12107 therefore, it is only useful if you compile _all_ of a program with 12108 this option. In particular, you need to compile `libgcc.a', the 12109 library that comes with GCC, with `-msoft-float' in order for this 12110 to work. 12111 12112 `-mhard-quad-float' 12113 Generate output containing quad-word (long double) floating point 12114 instructions. 12115 12116 `-msoft-quad-float' 12117 Generate output containing library calls for quad-word (long 12118 double) floating point instructions. The functions called are 12119 those specified in the SPARC ABI. This is the default. 12120 12121 As of this writing, there are no SPARC implementations that have 12122 hardware support for the quad-word floating point instructions. 12123 They all invoke a trap handler for one of these instructions, and 12124 then the trap handler emulates the effect of the instruction. 12125 Because of the trap handler overhead, this is much slower than 12126 calling the ABI library routines. Thus the `-msoft-quad-float' 12127 option is the default. 12128 12129 `-mno-unaligned-doubles' 12130 `-munaligned-doubles' 12131 Assume that doubles have 8 byte alignment. This is the default. 12132 12133 With `-munaligned-doubles', GCC assumes that doubles have 8 byte 12134 alignment only if they are contained in another type, or if they 12135 have an absolute address. Otherwise, it assumes they have 4 byte 12136 alignment. Specifying this option avoids some rare compatibility 12137 problems with code generated by other compilers. It is not the 12138 default because it results in a performance loss, especially for 12139 floating point code. 12140 12141 `-mno-faster-structs' 12142 `-mfaster-structs' 12143 With `-mfaster-structs', the compiler assumes that structures 12144 should have 8 byte alignment. This enables the use of pairs of 12145 `ldd' and `std' instructions for copies in structure assignment, 12146 in place of twice as many `ld' and `st' pairs. However, the use 12147 of this changed alignment directly violates the SPARC ABI. Thus, 12148 it's intended only for use on targets where the developer 12149 acknowledges that their resulting code will not be directly in 12150 line with the rules of the ABI. 12151 12152 `-mimpure-text' 12153 `-mimpure-text', used in addition to `-shared', tells the compiler 12154 to not pass `-z text' to the linker when linking a shared object. 12155 Using this option, you can link position-dependent code into a 12156 shared object. 12157 12158 `-mimpure-text' suppresses the "relocations remain against 12159 allocatable but non-writable sections" linker error message. 12160 However, the necessary relocations will trigger copy-on-write, and 12161 the shared object is not actually shared across processes. 12162 Instead of using `-mimpure-text', you should compile all source 12163 code with `-fpic' or `-fPIC'. 12164 12165 This option is only available on SunOS and Solaris. 12166 12167 `-mcpu=CPU_TYPE' 12168 Set the instruction set, register set, and instruction scheduling 12169 parameters for machine type CPU_TYPE. Supported values for 12170 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite', 12171 `f930', `f934', `hypersparc', `sparclite86x', `sparclet', 12172 `tsc701', `v9', `ultrasparc', `ultrasparc3', and `niagara'. 12173 12174 Default instruction scheduling parameters are used for values that 12175 select an architecture and not an implementation. These are `v7', 12176 `v8', `sparclite', `sparclet', `v9'. 12177 12178 Here is a list of each supported architecture and their supported 12179 implementations. 12180 12181 v7: cypress 12182 v8: supersparc, hypersparc 12183 sparclite: f930, f934, sparclite86x 12184 sparclet: tsc701 12185 v9: ultrasparc, ultrasparc3, niagara 12186 12187 By default (unless configured otherwise), GCC generates code for 12188 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 12189 the compiler additionally optimizes it for the Cypress CY7C602 12190 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 12191 also appropriate for the older SPARCStation 1, 2, IPX etc. 12192 12193 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 12194 architecture. The only difference from V7 code is that the 12195 compiler emits the integer multiply and integer divide 12196 instructions which exist in SPARC-V8 but not in SPARC-V7. With 12197 `-mcpu=supersparc', the compiler additionally optimizes it for the 12198 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 12199 series. 12200 12201 With `-mcpu=sparclite', GCC generates code for the SPARClite 12202 variant of the SPARC architecture. This adds the integer 12203 multiply, integer divide step and scan (`ffs') instructions which 12204 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 12205 compiler additionally optimizes it for the Fujitsu MB86930 chip, 12206 which is the original SPARClite, with no FPU. With `-mcpu=f934', 12207 the compiler additionally optimizes it for the Fujitsu MB86934 12208 chip, which is the more recent SPARClite with FPU. 12209 12210 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 12211 of the SPARC architecture. This adds the integer multiply, 12212 multiply/accumulate, integer divide step and scan (`ffs') 12213 instructions which exist in SPARClet but not in SPARC-V7. With 12214 `-mcpu=tsc701', the compiler additionally optimizes it for the 12215 TEMIC SPARClet chip. 12216 12217 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 12218 architecture. This adds 64-bit integer and floating-point move 12219 instructions, 3 additional floating-point condition code registers 12220 and conditional move instructions. With `-mcpu=ultrasparc', the 12221 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 12222 chips. With `-mcpu=ultrasparc3', the compiler additionally 12223 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 12224 chips. With `-mcpu=niagara', the compiler additionally optimizes 12225 it for Sun UltraSPARC T1 chips. 12226 12227 `-mtune=CPU_TYPE' 12228 Set the instruction scheduling parameters for machine type 12229 CPU_TYPE, but do not set the instruction set or register set that 12230 the option `-mcpu=CPU_TYPE' would. 12231 12232 The same values for `-mcpu=CPU_TYPE' can be used for 12233 `-mtune=CPU_TYPE', but the only useful values are those that 12234 select a particular cpu implementation. Those are `cypress', 12235 `supersparc', `hypersparc', `f930', `f934', `sparclite86x', 12236 `tsc701', `ultrasparc', `ultrasparc3', and `niagara'. 12237 12238 `-mv8plus' 12239 `-mno-v8plus' 12240 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 12241 difference from the V8 ABI is that the global and out registers are 12242 considered 64-bit wide. This is enabled by default on Solaris in 12243 32-bit mode for all SPARC-V9 processors. 12244 12245 `-mvis' 12246 `-mno-vis' 12247 With `-mvis', GCC generates code that takes advantage of the 12248 UltraSPARC Visual Instruction Set extensions. The default is 12249 `-mno-vis'. 12250 12251 These `-m' options are supported in addition to the above on SPARC-V9 12252 processors in 64-bit environments: 12253 12254 `-mlittle-endian' 12255 Generate code for a processor running in little-endian mode. It 12256 is only available for a few configurations and most notably not on 12257 Solaris and Linux. 12258 12259 `-m32' 12260 `-m64' 12261 Generate code for a 32-bit or 64-bit environment. The 32-bit 12262 environment sets int, long and pointer to 32 bits. The 64-bit 12263 environment sets int to 32 bits and long and pointer to 64 bits. 12264 12265 `-mcmodel=medlow' 12266 Generate code for the Medium/Low code model: 64-bit addresses, 12267 programs must be linked in the low 32 bits of memory. Programs 12268 can be statically or dynamically linked. 12269 12270 `-mcmodel=medmid' 12271 Generate code for the Medium/Middle code model: 64-bit addresses, 12272 programs must be linked in the low 44 bits of memory, the text and 12273 data segments must be less than 2GB in size and the data segment 12274 must be located within 2GB of the text segment. 12275 12276 `-mcmodel=medany' 12277 Generate code for the Medium/Anywhere code model: 64-bit 12278 addresses, programs may be linked anywhere in memory, the text and 12279 data segments must be less than 2GB in size and the data segment 12280 must be located within 2GB of the text segment. 12281 12282 `-mcmodel=embmedany' 12283 Generate code for the Medium/Anywhere code model for embedded 12284 systems: 64-bit addresses, the text and data segments must be less 12285 than 2GB in size, both starting anywhere in memory (determined at 12286 link time). The global register %g4 points to the base of the 12287 data segment. Programs are statically linked and PIC is not 12288 supported. 12289 12290 `-mstack-bias' 12291 `-mno-stack-bias' 12292 With `-mstack-bias', GCC assumes that the stack pointer, and frame 12293 pointer if present, are offset by -2047 which must be added back 12294 when making stack frame references. This is the default in 64-bit 12295 mode. Otherwise, assume no such offset is present. 12296 12297 These switches are supported in addition to the above on Solaris: 12298 12299 `-threads' 12300 Add support for multithreading using the Solaris threads library. 12301 This option sets flags for both the preprocessor and linker. This 12302 option does not affect the thread safety of object code produced 12303 by the compiler or that of libraries supplied with it. 12304 12305 `-pthreads' 12306 Add support for multithreading using the POSIX threads library. 12307 This option sets flags for both the preprocessor and linker. This 12308 option does not affect the thread safety of object code produced 12309 by the compiler or that of libraries supplied with it. 12310 12311 `-pthread' 12312 This is a synonym for `-pthreads'. 12313 12314 12315 File: gcc.info, Node: System V Options, Next: TMS320C3x/C4x Options, Prev: SPARC Options, Up: Submodel Options 12316 12317 3.17.32 Options for System V 12318 ---------------------------- 12319 12320 These additional options are available on System V Release 4 for 12321 compatibility with other compilers on those systems: 12322 12323 `-G' 12324 Create a shared object. It is recommended that `-symbolic' or 12325 `-shared' be used instead. 12326 12327 `-Qy' 12328 Identify the versions of each tool used by the compiler, in a 12329 `.ident' assembler directive in the output. 12330 12331 `-Qn' 12332 Refrain from adding `.ident' directives to the output file (this is 12333 the default). 12334 12335 `-YP,DIRS' 12336 Search the directories DIRS, and no others, for libraries 12337 specified with `-l'. 12338 12339 `-Ym,DIR' 12340 Look in the directory DIR to find the M4 preprocessor. The 12341 assembler uses this option. 12342 12343 12344 File: gcc.info, Node: TMS320C3x/C4x Options, Next: V850 Options, Prev: System V Options, Up: Submodel Options 12345 12346 3.17.33 TMS320C3x/C4x Options 12347 ----------------------------- 12348 12349 These `-m' options are defined for TMS320C3x/C4x implementations: 12350 12351 `-mcpu=CPU_TYPE' 12352 Set the instruction set, register set, and instruction scheduling 12353 parameters for machine type CPU_TYPE. Supported values for 12354 CPU_TYPE are `c30', `c31', `c32', `c40', and `c44'. The default 12355 is `c40' to generate code for the TMS320C40. 12356 12357 `-mbig-memory' 12358 `-mbig' 12359 `-msmall-memory' 12360 `-msmall' 12361 Generates code for the big or small memory model. The small memory 12362 model assumed that all data fits into one 64K word page. At 12363 run-time the data page (DP) register must be set to point to the 12364 64K page containing the .bss and .data program sections. The big 12365 memory model is the default and requires reloading of the DP 12366 register for every direct memory access. 12367 12368 `-mbk' 12369 `-mno-bk' 12370 Allow (disallow) allocation of general integer operands into the 12371 block count register BK. 12372 12373 `-mdb' 12374 `-mno-db' 12375 Enable (disable) generation of code using decrement and branch, 12376 DBcond(D), instructions. This is enabled by default for the C4x. 12377 To be on the safe side, this is disabled for the C3x, since the 12378 maximum iteration count on the C3x is 2^23 + 1 (but who iterates 12379 loops more than 2^23 times on the C3x?). Note that GCC will try 12380 to reverse a loop so that it can utilize the decrement and branch 12381 instruction, but will give up if there is more than one memory 12382 reference in the loop. Thus a loop where the loop counter is 12383 decremented can generate slightly more efficient code, in cases 12384 where the RPTB instruction cannot be utilized. 12385 12386 `-mdp-isr-reload' 12387 `-mparanoid' 12388 Force the DP register to be saved on entry to an interrupt service 12389 routine (ISR), reloaded to point to the data section, and restored 12390 on exit from the ISR. This should not be required unless someone 12391 has violated the small memory model by modifying the DP register, 12392 say within an object library. 12393 12394 `-mmpyi' 12395 `-mno-mpyi' 12396 For the C3x use the 24-bit MPYI instruction for integer multiplies 12397 instead of a library call to guarantee 32-bit results. Note that 12398 if one of the operands is a constant, then the multiplication will 12399 be performed using shifts and adds. If the `-mmpyi' option is not 12400 specified for the C3x, then squaring operations are performed 12401 inline instead of a library call. 12402 12403 `-mfast-fix' 12404 `-mno-fast-fix' 12405 The C3x/C4x FIX instruction to convert a floating point value to an 12406 integer value chooses the nearest integer less than or equal to the 12407 floating point value rather than to the nearest integer. Thus if 12408 the floating point number is negative, the result will be 12409 incorrectly truncated an additional code is necessary to detect 12410 and correct this case. This option can be used to disable 12411 generation of the additional code required to correct the result. 12412 12413 `-mrptb' 12414 `-mno-rptb' 12415 Enable (disable) generation of repeat block sequences using the 12416 RPTB instruction for zero overhead looping. The RPTB construct is 12417 only used for innermost loops that do not call functions or jump 12418 across the loop boundaries. There is no advantage having nested 12419 RPTB loops due to the overhead required to save and restore the 12420 RC, RS, and RE registers. This is enabled by default with `-O2'. 12421 12422 `-mrpts=COUNT' 12423 `-mno-rpts' 12424 Enable (disable) the use of the single instruction repeat 12425 instruction RPTS. If a repeat block contains a single 12426 instruction, and the loop count can be guaranteed to be less than 12427 the value COUNT, GCC will emit a RPTS instruction instead of a 12428 RPTB. If no value is specified, then a RPTS will be emitted even 12429 if the loop count cannot be determined at compile time. Note that 12430 the repeated instruction following RPTS does not have to be 12431 reloaded from memory each iteration, thus freeing up the CPU buses 12432 for operands. However, since interrupts are blocked by this 12433 instruction, it is disabled by default. 12434 12435 `-mloop-unsigned' 12436 `-mno-loop-unsigned' 12437 The maximum iteration count when using RPTS and RPTB (and DB on 12438 the C40) is 2^31 + 1 since these instructions test if the 12439 iteration count is negative to terminate the loop. If the 12440 iteration count is unsigned there is a possibility than the 2^31 + 12441 1 maximum iteration count may be exceeded. This switch allows an 12442 unsigned iteration count. 12443 12444 `-mti' 12445 Try to emit an assembler syntax that the TI assembler (asm30) is 12446 happy with. This also enforces compatibility with the API 12447 employed by the TI C3x C compiler. For example, long doubles are 12448 passed as structures rather than in floating point registers. 12449 12450 `-mregparm' 12451 `-mmemparm' 12452 Generate code that uses registers (stack) for passing arguments to 12453 functions. By default, arguments are passed in registers where 12454 possible rather than by pushing arguments on to the stack. 12455 12456 `-mparallel-insns' 12457 `-mno-parallel-insns' 12458 Allow the generation of parallel instructions. This is enabled by 12459 default with `-O2'. 12460 12461 `-mparallel-mpy' 12462 `-mno-parallel-mpy' 12463 Allow the generation of MPY||ADD and MPY||SUB parallel 12464 instructions, provided `-mparallel-insns' is also specified. 12465 These instructions have tight register constraints which can 12466 pessimize the code generation of large functions. 12467 12468 12469 12470 File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: TMS320C3x/C4x Options, Up: Submodel Options 12471 12472 3.17.34 V850 Options 12473 -------------------- 12474 12475 These `-m' options are defined for V850 implementations: 12476 12477 `-mlong-calls' 12478 `-mno-long-calls' 12479 Treat all calls as being far away (near). If calls are assumed to 12480 be far away, the compiler will always load the functions address 12481 up into a register, and call indirect through the pointer. 12482 12483 `-mno-ep' 12484 `-mep' 12485 Do not optimize (do optimize) basic blocks that use the same index 12486 pointer 4 or more times to copy pointer into the `ep' register, and 12487 use the shorter `sld' and `sst' instructions. The `-mep' option 12488 is on by default if you optimize. 12489 12490 `-mno-prolog-function' 12491 `-mprolog-function' 12492 Do not use (do use) external functions to save and restore 12493 registers at the prologue and epilogue of a function. The 12494 external functions are slower, but use less code space if more 12495 than one function saves the same number of registers. The 12496 `-mprolog-function' option is on by default if you optimize. 12497 12498 `-mspace' 12499 Try to make the code as small as possible. At present, this just 12500 turns on the `-mep' and `-mprolog-function' options. 12501 12502 `-mtda=N' 12503 Put static or global variables whose size is N bytes or less into 12504 the tiny data area that register `ep' points to. The tiny data 12505 area can hold up to 256 bytes in total (128 bytes for byte 12506 references). 12507 12508 `-msda=N' 12509 Put static or global variables whose size is N bytes or less into 12510 the small data area that register `gp' points to. The small data 12511 area can hold up to 64 kilobytes. 12512 12513 `-mzda=N' 12514 Put static or global variables whose size is N bytes or less into 12515 the first 32 kilobytes of memory. 12516 12517 `-mv850' 12518 Specify that the target processor is the V850. 12519 12520 `-mbig-switch' 12521 Generate code suitable for big switch tables. Use this option 12522 only if the assembler/linker complain about out of range branches 12523 within a switch table. 12524 12525 `-mapp-regs' 12526 This option will cause r2 and r5 to be used in the code generated 12527 by the compiler. This setting is the default. 12528 12529 `-mno-app-regs' 12530 This option will cause r2 and r5 to be treated as fixed registers. 12531 12532 `-mv850e1' 12533 Specify that the target processor is the V850E1. The preprocessor 12534 constants `__v850e1__' and `__v850e__' will be defined if this 12535 option is used. 12536 12537 `-mv850e' 12538 Specify that the target processor is the V850E. The preprocessor 12539 constant `__v850e__' will be defined if this option is used. 12540 12541 If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then 12542 a default target processor will be chosen and the relevant 12543 `__v850*__' preprocessor constant will be defined. 12544 12545 The preprocessor constants `__v850' and `__v851__' are always 12546 defined, regardless of which processor variant is the target. 12547 12548 `-mdisable-callt' 12549 This option will suppress generation of the CALLT instruction for 12550 the v850e and v850e1 flavors of the v850 architecture. The 12551 default is `-mno-disable-callt' which allows the CALLT instruction 12552 to be used. 12553 12554 12555 12556 File: gcc.info, Node: VAX Options, Next: x86-64 Options, Prev: V850 Options, Up: Submodel Options 12557 12558 3.17.35 VAX Options 12559 ------------------- 12560 12561 These `-m' options are defined for the VAX: 12562 12563 `-munix' 12564 Do not output certain jump instructions (`aobleq' and so on) that 12565 the Unix assembler for the VAX cannot handle across long ranges. 12566 12567 `-mgnu' 12568 Do output those jump instructions, on the assumption that you will 12569 assemble with the GNU assembler. 12570 12571 `-mg' 12572 Output code for g-format floating point numbers instead of 12573 d-format. 12574 12575 12576 File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VAX Options, Up: Submodel Options 12577 12578 3.17.36 x86-64 Options 12579 ---------------------- 12580 12581 These are listed under *Note i386 and x86-64 Options::. 12582 12583 12584 File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 12585 12586 3.17.37 Xstormy16 Options 12587 ------------------------- 12588 12589 These options are defined for Xstormy16: 12590 12591 `-msim' 12592 Choose startup files and linker script suitable for the simulator. 12593 12594 12595 File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 12596 12597 3.17.38 Xtensa Options 12598 ---------------------- 12599 12600 These options are supported for Xtensa targets: 12601 12602 `-mconst16' 12603 `-mno-const16' 12604 Enable or disable use of `CONST16' instructions for loading 12605 constant values. The `CONST16' instruction is currently not a 12606 standard option from Tensilica. When enabled, `CONST16' 12607 instructions are always used in place of the standard `L32R' 12608 instructions. The use of `CONST16' is enabled by default only if 12609 the `L32R' instruction is not available. 12610 12611 `-mfused-madd' 12612 `-mno-fused-madd' 12613 Enable or disable use of fused multiply/add and multiply/subtract 12614 instructions in the floating-point option. This has no effect if 12615 the floating-point option is not also enabled. Disabling fused 12616 multiply/add and multiply/subtract instructions forces the 12617 compiler to use separate instructions for the multiply and 12618 add/subtract operations. This may be desirable in some cases 12619 where strict IEEE 754-compliant results are required: the fused 12620 multiply add/subtract instructions do not round the intermediate 12621 result, thereby producing results with _more_ bits of precision 12622 than specified by the IEEE standard. Disabling fused multiply 12623 add/subtract instructions also ensures that the program output is 12624 not sensitive to the compiler's ability to combine multiply and 12625 add/subtract operations. 12626 12627 `-mtext-section-literals' 12628 `-mno-text-section-literals' 12629 Control the treatment of literal pools. The default is 12630 `-mno-text-section-literals', which places literals in a separate 12631 section in the output file. This allows the literal pool to be 12632 placed in a data RAM/ROM, and it also allows the linker to combine 12633 literal pools from separate object files to remove redundant 12634 literals and improve code size. With `-mtext-section-literals', 12635 the literals are interspersed in the text section in order to keep 12636 them as close as possible to their references. This may be 12637 necessary for large assembly files. 12638 12639 `-mtarget-align' 12640 `-mno-target-align' 12641 When this option is enabled, GCC instructs the assembler to 12642 automatically align instructions to reduce branch penalties at the 12643 expense of some code density. The assembler attempts to widen 12644 density instructions to align branch targets and the instructions 12645 following call instructions. If there are not enough preceding 12646 safe density instructions to align a target, no widening will be 12647 performed. The default is `-mtarget-align'. These options do not 12648 affect the treatment of auto-aligned instructions like `LOOP', 12649 which the assembler will always align, either by widening density 12650 instructions or by inserting no-op instructions. 12651 12652 `-mlongcalls' 12653 `-mno-longcalls' 12654 When this option is enabled, GCC instructs the assembler to 12655 translate direct calls to indirect calls unless it can determine 12656 that the target of a direct call is in the range allowed by the 12657 call instruction. This translation typically occurs for calls to 12658 functions in other source files. Specifically, the assembler 12659 translates a direct `CALL' instruction into an `L32R' followed by 12660 a `CALLX' instruction. The default is `-mno-longcalls'. This 12661 option should be used in programs where the call target can 12662 potentially be out of range. This option is implemented in the 12663 assembler, not the compiler, so the assembly code generated by GCC 12664 will still show direct call instructions--look at the disassembled 12665 object code to see the actual instructions. Note that the 12666 assembler will use an indirect call for every cross-file call, not 12667 just those that really will be out of range. 12668 12669 12670 File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 12671 12672 3.17.39 zSeries Options 12673 ----------------------- 12674 12675 These are listed under *Note S/390 and zSeries Options::. 12676 12677 12678 File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 12679 12680 3.18 Options for Code Generation Conventions 12681 ============================================ 12682 12683 These machine-independent options control the interface conventions 12684 used in code generation. 12685 12686 Most of them have both positive and negative forms; the negative form 12687 of `-ffoo' would be `-fno-foo'. In the table below, only one of the 12688 forms is listed--the one which is not the default. You can figure out 12689 the other form by either removing `no-' or adding it. 12690 12691 `-fbounds-check' 12692 For front-ends that support it, generate additional code to check 12693 that indices used to access arrays are within the declared range. 12694 This is currently only supported by the Java and Fortran 12695 front-ends, where this option defaults to true and false 12696 respectively. 12697 12698 `-ftrapv' 12699 This option generates traps for signed overflow on addition, 12700 subtraction, multiplication operations. 12701 12702 `-fwrapv' 12703 This option instructs the compiler to assume that signed arithmetic 12704 overflow of addition, subtraction and multiplication wraps around 12705 using twos-complement representation. This flag enables some 12706 optimizations and disables others. This option is enabled by 12707 default for the Java front-end, as required by the Java language 12708 specification. 12709 12710 `-fexceptions' 12711 Enable exception handling. Generates extra code needed to 12712 propagate exceptions. For some targets, this implies GCC will 12713 generate frame unwind information for all functions, which can 12714 produce significant data size overhead, although it does not 12715 affect execution. If you do not specify this option, GCC will 12716 enable it by default for languages like C++ which normally require 12717 exception handling, and disable it for languages like C that do 12718 not normally require it. However, you may need to enable this 12719 option when compiling C code that needs to interoperate properly 12720 with exception handlers written in C++. You may also wish to 12721 disable this option if you are compiling older C++ programs that 12722 don't use exception handling. 12723 12724 `-fnon-call-exceptions' 12725 Generate code that allows trapping instructions to throw 12726 exceptions. Note that this requires platform-specific runtime 12727 support that does not exist everywhere. Moreover, it only allows 12728 _trapping_ instructions to throw exceptions, i.e. memory 12729 references or floating point instructions. It does not allow 12730 exceptions to be thrown from arbitrary signal handlers such as 12731 `SIGALRM'. 12732 12733 `-funwind-tables' 12734 Similar to `-fexceptions', except that it will just generate any 12735 needed static data, but will not affect the generated code in any 12736 other way. You will normally not enable this option; instead, a 12737 language processor that needs this handling would enable it on 12738 your behalf. 12739 12740 `-fasynchronous-unwind-tables' 12741 Generate unwind table in dwarf2 format, if supported by target 12742 machine. The table is exact at each instruction boundary, so it 12743 can be used for stack unwinding from asynchronous events (such as 12744 debugger or garbage collector). 12745 12746 `-fpcc-struct-return' 12747 Return "short" `struct' and `union' values in memory like longer 12748 ones, rather than in registers. This convention is less 12749 efficient, but it has the advantage of allowing intercallability 12750 between GCC-compiled files and files compiled with other 12751 compilers, particularly the Portable C Compiler (pcc). 12752 12753 The precise convention for returning structures in memory depends 12754 on the target configuration macros. 12755 12756 Short structures and unions are those whose size and alignment 12757 match that of some integer type. 12758 12759 *Warning:* code compiled with the `-fpcc-struct-return' switch is 12760 not binary compatible with code compiled with the 12761 `-freg-struct-return' switch. Use it to conform to a non-default 12762 application binary interface. 12763 12764 `-freg-struct-return' 12765 Return `struct' and `union' values in registers when possible. 12766 This is more efficient for small structures than 12767 `-fpcc-struct-return'. 12768 12769 If you specify neither `-fpcc-struct-return' nor 12770 `-freg-struct-return', GCC defaults to whichever convention is 12771 standard for the target. If there is no standard convention, GCC 12772 defaults to `-fpcc-struct-return', except on targets where GCC is 12773 the principal compiler. In those cases, we can choose the 12774 standard, and we chose the more efficient register return 12775 alternative. 12776 12777 *Warning:* code compiled with the `-freg-struct-return' switch is 12778 not binary compatible with code compiled with the 12779 `-fpcc-struct-return' switch. Use it to conform to a non-default 12780 application binary interface. 12781 12782 `-fshort-enums' 12783 Allocate to an `enum' type only as many bytes as it needs for the 12784 declared range of possible values. Specifically, the `enum' type 12785 will be equivalent to the smallest integer type which has enough 12786 room. 12787 12788 *Warning:* the `-fshort-enums' switch causes GCC to generate code 12789 that is not binary compatible with code generated without that 12790 switch. Use it to conform to a non-default application binary 12791 interface. 12792 12793 `-fshort-double' 12794 Use the same size for `double' as for `float'. 12795 12796 *Warning:* the `-fshort-double' switch causes GCC to generate code 12797 that is not binary compatible with code generated without that 12798 switch. Use it to conform to a non-default application binary 12799 interface. 12800 12801 `-fshort-wchar' 12802 Override the underlying type for `wchar_t' to be `short unsigned 12803 int' instead of the default for the target. This option is useful 12804 for building programs to run under WINE. 12805 12806 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 12807 that is not binary compatible with code generated without that 12808 switch. Use it to conform to a non-default application binary 12809 interface. 12810 12811 `-fno-common' 12812 In C, allocate even uninitialized global variables in the data 12813 section of the object file, rather than generating them as common 12814 blocks. This has the effect that if the same variable is declared 12815 (without `extern') in two different compilations, you will get an 12816 error when you link them. The only reason this might be useful is 12817 if you wish to verify that the program will work on other systems 12818 which always work this way. 12819 12820 `-fno-ident' 12821 Ignore the `#ident' directive. 12822 12823 `-finhibit-size-directive' 12824 Don't output a `.size' assembler directive, or anything else that 12825 would cause trouble if the function is split in the middle, and the 12826 two halves are placed at locations far apart in memory. This 12827 option is used when compiling `crtstuff.c'; you should not need to 12828 use it for anything else. 12829 12830 `-fverbose-asm' 12831 Put extra commentary information in the generated assembly code to 12832 make it more readable. This option is generally only of use to 12833 those who actually need to read the generated assembly code 12834 (perhaps while debugging the compiler itself). 12835 12836 `-fno-verbose-asm', the default, causes the extra information to 12837 be omitted and is useful when comparing two assembler files. 12838 12839 `-fpic' 12840 Generate position-independent code (PIC) suitable for use in a 12841 shared library, if supported for the target machine. Such code 12842 accesses all constant addresses through a global offset table 12843 (GOT). The dynamic loader resolves the GOT entries when the 12844 program starts (the dynamic loader is not part of GCC; it is part 12845 of the operating system). If the GOT size for the linked 12846 executable exceeds a machine-specific maximum size, you get an 12847 error message from the linker indicating that `-fpic' does not 12848 work; in that case, recompile with `-fPIC' instead. (These 12849 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 12850 386 has no such limit.) 12851 12852 Position-independent code requires special support, and therefore 12853 works only on certain machines. For the 386, GCC supports PIC for 12854 System V but not for the Sun 386i. Code generated for the IBM 12855 RS/6000 is always position-independent. 12856 12857 When this flag is set, the macros `__pic__' and `__PIC__' are 12858 defined to 1. 12859 12860 `-fPIC' 12861 If supported for the target machine, emit position-independent 12862 code, suitable for dynamic linking and avoiding any limit on the 12863 size of the global offset table. This option makes a difference 12864 on the m68k, PowerPC and SPARC. 12865 12866 Position-independent code requires special support, and therefore 12867 works only on certain machines. 12868 12869 When this flag is set, the macros `__pic__' and `__PIC__' are 12870 defined to 2. 12871 12872 `-fpie' 12873 `-fPIE' 12874 These options are similar to `-fpic' and `-fPIC', but generated 12875 position independent code can be only linked into executables. 12876 Usually these options are used when `-pie' GCC option will be used 12877 during linking. 12878 12879 `-fno-jump-tables' 12880 Do not use jump tables for switch statements even where it would be 12881 more efficient than other code generation strategies. This option 12882 is of use in conjunction with `-fpic' or `-fPIC' for building code 12883 which forms part of a dynamic linker and cannot reference the 12884 address of a jump table. On some targets, jump tables do not 12885 require a GOT and this option is not needed. 12886 12887 `-ffixed-REG' 12888 Treat the register named REG as a fixed register; generated code 12889 should never refer to it (except perhaps as a stack pointer, frame 12890 pointer or in some other fixed role). 12891 12892 REG must be the name of a register. The register names accepted 12893 are machine-specific and are defined in the `REGISTER_NAMES' macro 12894 in the machine description macro file. 12895 12896 This flag does not have a negative form, because it specifies a 12897 three-way choice. 12898 12899 `-fcall-used-REG' 12900 Treat the register named REG as an allocable register that is 12901 clobbered by function calls. It may be allocated for temporaries 12902 or variables that do not live across a call. Functions compiled 12903 this way will not save and restore the register REG. 12904 12905 It is an error to used this flag with the frame pointer or stack 12906 pointer. Use of this flag for other registers that have fixed 12907 pervasive roles in the machine's execution model will produce 12908 disastrous results. 12909 12910 This flag does not have a negative form, because it specifies a 12911 three-way choice. 12912 12913 `-fcall-saved-REG' 12914 Treat the register named REG as an allocable register saved by 12915 functions. It may be allocated even for temporaries or variables 12916 that live across a call. Functions compiled this way will save 12917 and restore the register REG if they use it. 12918 12919 It is an error to used this flag with the frame pointer or stack 12920 pointer. Use of this flag for other registers that have fixed 12921 pervasive roles in the machine's execution model will produce 12922 disastrous results. 12923 12924 A different sort of disaster will result from the use of this flag 12925 for a register in which function values may be returned. 12926 12927 This flag does not have a negative form, because it specifies a 12928 three-way choice. 12929 12930 `-fpack-struct[=N]' 12931 Without a value specified, pack all structure members together 12932 without holes. When a value is specified (which must be a small 12933 power of two), pack structure members according to this value, 12934 representing the maximum alignment (that is, objects with default 12935 alignment requirements larger than this will be output potentially 12936 unaligned at the next fitting location. 12937 12938 *Warning:* the `-fpack-struct' switch causes GCC to generate code 12939 that is not binary compatible with code generated without that 12940 switch. Additionally, it makes the code suboptimal. Use it to 12941 conform to a non-default application binary interface. 12942 12943 `-finstrument-functions' 12944 Generate instrumentation calls for entry and exit to functions. 12945 Just after function entry and just before function exit, the 12946 following profiling functions will be called with the address of 12947 the current function and its call site. (On some platforms, 12948 `__builtin_return_address' does not work beyond the current 12949 function, so the call site information may not be available to the 12950 profiling functions otherwise.) 12951 12952 void __cyg_profile_func_enter (void *this_fn, 12953 void *call_site); 12954 void __cyg_profile_func_exit (void *this_fn, 12955 void *call_site); 12956 12957 The first argument is the address of the start of the current 12958 function, which may be looked up exactly in the symbol table. 12959 12960 This instrumentation is also done for functions expanded inline in 12961 other functions. The profiling calls will indicate where, 12962 conceptually, the inline function is entered and exited. This 12963 means that addressable versions of such functions must be 12964 available. If all your uses of a function are expanded inline, 12965 this may mean an additional expansion of code size. If you use 12966 `extern inline' in your C code, an addressable version of such 12967 functions must be provided. (This is normally the case anyways, 12968 but if you get lucky and the optimizer always expands the 12969 functions inline, you might have gotten away without providing 12970 static copies.) 12971 12972 A function may be given the attribute `no_instrument_function', in 12973 which case this instrumentation will not be done. This can be 12974 used, for example, for the profiling functions listed above, 12975 high-priority interrupt routines, and any functions from which the 12976 profiling functions cannot safely be called (perhaps signal 12977 handlers, if the profiling routines generate output or allocate 12978 memory). 12979 12980 `-finstrument-functions-exclude-file-list=FILE,FILE,...' 12981 Set the list of functions that are excluded from instrumentation 12982 (see the description of `-finstrument-functions'). If the file 12983 that contains a function definition matches with one of FILE, then 12984 that function is not instrumented. The match is done on 12985 substrings: if the FILE parameter is a substring of the file name, 12986 it is considered to be a match. 12987 12988 For example, 12989 `-finstrument-functions-exclude-file-list=/bits/stl,include/sys' 12990 will exclude any inline function defined in files whose pathnames 12991 contain `/bits/stl' or `include/sys'. 12992 12993 If, for some reason, you want to include letter `','' in one of 12994 SYM, write `'\,''. For example, 12995 `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 12996 single quote surrounding the option). 12997 12998 `-finstrument-functions-exclude-function-list=SYM,SYM,...' 12999 This is similar to `-finstrument-functions-exclude-file-list', but 13000 this option sets the list of function names to be excluded from 13001 instrumentation. The function name to be matched is its 13002 user-visible name, such as `vector<int> blah(const vector<int> 13003 &)', not the internal mangled name (e.g., 13004 `_Z4blahRSt6vectorIiSaIiEE'). The match is done on substrings: if 13005 the SYM parameter is a substring of the function name, it is 13006 considered to be a match. 13007 13008 `-fstack-check' 13009 Generate code to verify that you do not go beyond the boundary of 13010 the stack. You should specify this flag if you are running in an 13011 environment with multiple threads, but only rarely need to specify 13012 it in a single-threaded environment since stack overflow is 13013 automatically detected on nearly all systems if there is only one 13014 stack. 13015 13016 Note that this switch does not actually cause checking to be done; 13017 the operating system must do that. The switch causes generation 13018 of code to ensure that the operating system sees the stack being 13019 extended. 13020 13021 `-fstack-limit-register=REG' 13022 `-fstack-limit-symbol=SYM' 13023 `-fno-stack-limit' 13024 Generate code to ensure that the stack does not grow beyond a 13025 certain value, either the value of a register or the address of a 13026 symbol. If the stack would grow beyond the value, a signal is 13027 raised. For most targets, the signal is raised before the stack 13028 overruns the boundary, so it is possible to catch the signal 13029 without taking special precautions. 13030 13031 For instance, if the stack starts at absolute address `0x80000000' 13032 and grows downwards, you can use the flags 13033 `-fstack-limit-symbol=__stack_limit' and 13034 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 13035 of 128KB. Note that this may only work with the GNU linker. 13036 13037 `-fargument-alias' 13038 `-fargument-noalias' 13039 `-fargument-noalias-global' 13040 `-fargument-noalias-anything' 13041 Specify the possible relationships among parameters and between 13042 parameters and global data. 13043 13044 `-fargument-alias' specifies that arguments (parameters) may alias 13045 each other and may alias global storage. 13046 `-fargument-noalias' specifies that arguments do not alias each 13047 other, but may alias global storage. 13048 `-fargument-noalias-global' specifies that arguments do not alias 13049 each other and do not alias global storage. 13050 `-fargument-noalias-anything' specifies that arguments do not 13051 alias any other storage. 13052 13053 Each language will automatically use whatever option is required by 13054 the language standard. You should not need to use these options 13055 yourself. 13056 13057 `-fleading-underscore' 13058 This option and its counterpart, `-fno-leading-underscore', 13059 forcibly change the way C symbols are represented in the object 13060 file. One use is to help link with legacy assembly code. 13061 13062 *Warning:* the `-fleading-underscore' switch causes GCC to 13063 generate code that is not binary compatible with code generated 13064 without that switch. Use it to conform to a non-default 13065 application binary interface. Not all targets provide complete 13066 support for this switch. 13067 13068 `-ftls-model=MODEL' 13069 Alter the thread-local storage model to be used (*note 13070 Thread-Local::). The MODEL argument should be one of 13071 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 13072 13073 The default without `-fpic' is `initial-exec'; with `-fpic' the 13074 default is `global-dynamic'. 13075 13076 `-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 13077 Set the default ELF image symbol visibility to the specified 13078 option--all symbols will be marked with this unless overridden 13079 within the code. Using this feature can very substantially 13080 improve linking and load times of shared object libraries, produce 13081 more optimized code, provide near-perfect API export and prevent 13082 symbol clashes. It is *strongly* recommended that you use this in 13083 any shared objects you distribute. 13084 13085 Despite the nomenclature, `default' always means public ie; 13086 available to be linked against from outside the shared object. 13087 `protected' and `internal' are pretty useless in real-world usage 13088 so the only other commonly used option will be `hidden'. The 13089 default if `-fvisibility' isn't specified is `default', i.e., make 13090 every symbol public--this causes the same behavior as previous 13091 versions of GCC. 13092 13093 A good explanation of the benefits offered by ensuring ELF symbols 13094 have the correct visibility is given by "How To Write Shared 13095 Libraries" by Ulrich Drepper (which can be found at 13096 `http://people.redhat.com/~drepper/')--however a superior solution 13097 made possible by this option to marking things hidden when the 13098 default is public is to make the default hidden and mark things 13099 public. This is the norm with DLL's on Windows and with 13100 `-fvisibility=hidden' and `__attribute__ 13101 ((visibility("default")))' instead of `__declspec(dllexport)' you 13102 get almost identical semantics with identical syntax. This is a 13103 great boon to those working with cross-platform projects. 13104 13105 For those adding visibility support to existing code, you may find 13106 `#pragma GCC visibility' of use. This works by you enclosing the 13107 declarations you wish to set visibility for with (for example) 13108 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 13109 pop'. Bear in mind that symbol visibility should be viewed *as 13110 part of the API interface contract* and thus all new code should 13111 always specify visibility when it is not the default ie; 13112 declarations only for use within the local DSO should *always* be 13113 marked explicitly as hidden as so to avoid PLT indirection 13114 overheads--making this abundantly clear also aids readability and 13115 self-documentation of the code. Note that due to ISO C++ 13116 specification requirements, operator new and operator delete must 13117 always be of default visibility. 13118 13119 Be aware that headers from outside your project, in particular 13120 system headers and headers from any other library you use, may not 13121 be expecting to be compiled with visibility other than the 13122 default. You may need to explicitly say `#pragma GCC visibility 13123 push(default)' before including any such headers. 13124 13125 `extern' declarations are not affected by `-fvisibility', so a lot 13126 of code can be recompiled with `-fvisibility=hidden' with no 13127 modifications. However, this means that calls to `extern' 13128 functions with no explicit visibility will use the PLT, so it is 13129 more effective to use `__attribute ((visibility))' and/or `#pragma 13130 GCC visibility' to tell the compiler which `extern' declarations 13131 should be treated as hidden. 13132 13133 Note that `-fvisibility' does affect C++ vague linkage entities. 13134 This means that, for instance, an exception class that will be 13135 thrown between DSOs must be explicitly marked with default 13136 visibility so that the `type_info' nodes will be unified between 13137 the DSOs. 13138 13139 An overview of these techniques, their benefits and how to use them 13140 is at `http://gcc.gnu.org/wiki/Visibility'. 13141 13142 13143 13144 File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 13145 13146 3.19 Environment Variables Affecting GCC 13147 ======================================== 13148 13149 This section describes several environment variables that affect how GCC 13150 operates. Some of them work by specifying directories or prefixes to 13151 use when searching for various kinds of files. Some are used to 13152 specify other aspects of the compilation environment. 13153 13154 Note that you can also specify places to search using options such as 13155 `-B', `-I' and `-L' (*note Directory Options::). These take precedence 13156 over places specified using environment variables, which in turn take 13157 precedence over those specified by the configuration of GCC. *Note 13158 Controlling the Compilation Driver `gcc': (gccint)Driver. 13159 13160 `LANG' 13161 `LC_CTYPE' 13162 `LC_MESSAGES' 13163 `LC_ALL' 13164 These environment variables control the way that GCC uses 13165 localization information that allow GCC to work with different 13166 national conventions. GCC inspects the locale categories 13167 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 13168 These locale categories can be set to any value supported by your 13169 installation. A typical value is `en_GB.UTF-8' for English in the 13170 United Kingdom encoded in UTF-8. 13171 13172 The `LC_CTYPE' environment variable specifies character 13173 classification. GCC uses it to determine the character boundaries 13174 in a string; this is needed for some multibyte encodings that 13175 contain quote and escape characters that would otherwise be 13176 interpreted as a string end or escape. 13177 13178 The `LC_MESSAGES' environment variable specifies the language to 13179 use in diagnostic messages. 13180 13181 If the `LC_ALL' environment variable is set, it overrides the value 13182 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 13183 `LC_MESSAGES' default to the value of the `LANG' environment 13184 variable. If none of these variables are set, GCC defaults to 13185 traditional C English behavior. 13186 13187 `TMPDIR' 13188 If `TMPDIR' is set, it specifies the directory to use for temporary 13189 files. GCC uses temporary files to hold the output of one stage of 13190 compilation which is to be used as input to the next stage: for 13191 example, the output of the preprocessor, which is the input to the 13192 compiler proper. 13193 13194 `GCC_EXEC_PREFIX' 13195 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 13196 names of the subprograms executed by the compiler. No slash is 13197 added when this prefix is combined with the name of a subprogram, 13198 but you can specify a prefix that ends with a slash if you wish. 13199 13200 If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an 13201 appropriate prefix to use based on the pathname it was invoked 13202 with. 13203 13204 If GCC cannot find the subprogram using the specified prefix, it 13205 tries looking in the usual places for the subprogram. 13206 13207 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 13208 PREFIX is the value of `prefix' when you ran the `configure' 13209 script. 13210 13211 Other prefixes specified with `-B' take precedence over this 13212 prefix. 13213 13214 This prefix is also used for finding files such as `crt0.o' that 13215 are used for linking. 13216 13217 In addition, the prefix is used in an unusual way in finding the 13218 directories to search for header files. For each of the standard 13219 directories whose name normally begins with `/usr/local/lib/gcc' 13220 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 13221 replacing that beginning with the specified prefix to produce an 13222 alternate directory name. Thus, with `-Bfoo/', GCC will search 13223 `foo/bar' where it would normally search `/usr/local/lib/bar'. 13224 These alternate directories are searched first; the standard 13225 directories come next. 13226 13227 `COMPILER_PATH' 13228 The value of `COMPILER_PATH' is a colon-separated list of 13229 directories, much like `PATH'. GCC tries the directories thus 13230 specified when searching for subprograms, if it can't find the 13231 subprograms using `GCC_EXEC_PREFIX'. 13232 13233 `LIBRARY_PATH' 13234 The value of `LIBRARY_PATH' is a colon-separated list of 13235 directories, much like `PATH'. When configured as a native 13236 compiler, GCC tries the directories thus specified when searching 13237 for special linker files, if it can't find them using 13238 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 13239 when searching for ordinary libraries for the `-l' option (but 13240 directories specified with `-L' come first). 13241 13242 `LANG' 13243 This variable is used to pass locale information to the compiler. 13244 One way in which this information is used is to determine the 13245 character set to be used when character literals, string literals 13246 and comments are parsed in C and C++. When the compiler is 13247 configured to allow multibyte characters, the following values for 13248 `LANG' are recognized: 13249 13250 `C-JIS' 13251 Recognize JIS characters. 13252 13253 `C-SJIS' 13254 Recognize SJIS characters. 13255 13256 `C-EUCJP' 13257 Recognize EUCJP characters. 13258 13259 If `LANG' is not defined, or if it has some other value, then the 13260 compiler will use mblen and mbtowc as defined by the default 13261 locale to recognize and translate multibyte characters. 13262 13263 Some additional environments variables affect the behavior of the 13264 preprocessor. 13265 13266 `CPATH' 13267 `C_INCLUDE_PATH' 13268 `CPLUS_INCLUDE_PATH' 13269 `OBJC_INCLUDE_PATH' 13270 Each variable's value is a list of directories separated by a 13271 special character, much like `PATH', in which to look for header 13272 files. The special character, `PATH_SEPARATOR', is 13273 target-dependent and determined at GCC build time. For Microsoft 13274 Windows-based targets it is a semicolon, and for almost all other 13275 targets it is a colon. 13276 13277 `CPATH' specifies a list of directories to be searched as if 13278 specified with `-I', but after any paths given with `-I' options 13279 on the command line. This environment variable is used regardless 13280 of which language is being preprocessed. 13281 13282 The remaining environment variables apply only when preprocessing 13283 the particular language indicated. Each specifies a list of 13284 directories to be searched as if specified with `-isystem', but 13285 after any paths given with `-isystem' options on the command line. 13286 13287 In all these variables, an empty element instructs the compiler to 13288 search its current working directory. Empty elements can appear 13289 at the beginning or end of a path. For instance, if the value of 13290 `CPATH' is `:/special/include', that has the same effect as 13291 `-I. -I/special/include'. 13292 13293 `DEPENDENCIES_OUTPUT' 13294 If this variable is set, its value specifies how to output 13295 dependencies for Make based on the non-system header files 13296 processed by the compiler. System header files are ignored in the 13297 dependency output. 13298 13299 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 13300 which case the Make rules are written to that file, guessing the 13301 target name from the source file name. Or the value can have the 13302 form `FILE TARGET', in which case the rules are written to file 13303 FILE using TARGET as the target name. 13304 13305 In other words, this environment variable is equivalent to 13306 combining the options `-MM' and `-MF' (*note Preprocessor 13307 Options::), with an optional `-MT' switch too. 13308 13309 `SUNPRO_DEPENDENCIES' 13310 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 13311 except that system header files are not ignored, so it implies 13312 `-M' rather than `-MM'. However, the dependence on the main input 13313 file is omitted. *Note Preprocessor Options::. 13314 13315 13316 File: gcc.info, Node: Precompiled Headers, Next: Running Protoize, Prev: Environment Variables, Up: Invoking GCC 13317 13318 3.20 Using Precompiled Headers 13319 ============================== 13320 13321 Often large projects have many header files that are included in every 13322 source file. The time the compiler takes to process these header files 13323 over and over again can account for nearly all of the time required to 13324 build the project. To make builds faster, GCC allows users to 13325 `precompile' a header file; then, if builds can use the precompiled 13326 header file they will be much faster. 13327 13328 To create a precompiled header file, simply compile it as you would any 13329 other file, if necessary using the `-x' option to make the driver treat 13330 it as a C or C++ header file. You will probably want to use a tool 13331 like `make' to keep the precompiled header up-to-date when the headers 13332 it contains change. 13333 13334 A precompiled header file will be searched for when `#include' is seen 13335 in the compilation. As it searches for the included file (*note Search 13336 Path: (cpp)Search Path.) the compiler looks for a precompiled header in 13337 each directory just before it looks for the include file in that 13338 directory. The name searched for is the name specified in the 13339 `#include' with `.gch' appended. If the precompiled header file can't 13340 be used, it is ignored. 13341 13342 For instance, if you have `#include "all.h"', and you have `all.h.gch' 13343 in the same directory as `all.h', then the precompiled header file will 13344 be used if possible, and the original header will be used otherwise. 13345 13346 Alternatively, you might decide to put the precompiled header file in a 13347 directory and use `-I' to ensure that directory is searched before (or 13348 instead of) the directory containing the original header. Then, if you 13349 want to check that the precompiled header file is always used, you can 13350 put a file of the same name as the original header in this directory 13351 containing an `#error' command. 13352 13353 This also works with `-include'. So yet another way to use 13354 precompiled headers, good for projects not designed with precompiled 13355 header files in mind, is to simply take most of the header files used by 13356 a project, include them from another header file, precompile that header 13357 file, and `-include' the precompiled header. If the header files have 13358 guards against multiple inclusion, they will be skipped because they've 13359 already been included (in the precompiled header). 13360 13361 If you need to precompile the same header file for different 13362 languages, targets, or compiler options, you can instead make a 13363 _directory_ named like `all.h.gch', and put each precompiled header in 13364 the directory, perhaps using `-o'. It doesn't matter what you call the 13365 files in the directory, every precompiled header in the directory will 13366 be considered. The first precompiled header encountered in the 13367 directory that is valid for this compilation will be used; they're 13368 searched in no particular order. 13369 13370 There are many other possibilities, limited only by your imagination, 13371 good sense, and the constraints of your build system. 13372 13373 A precompiled header file can be used only when these conditions apply: 13374 13375 * Only one precompiled header can be used in a particular 13376 compilation. 13377 13378 * A precompiled header can't be used once the first C token is seen. 13379 You can have preprocessor directives before a precompiled header; 13380 you can even include a precompiled header from inside another 13381 header, so long as there are no C tokens before the `#include'. 13382 13383 * The precompiled header file must be produced for the same language 13384 as the current compilation. You can't use a C precompiled header 13385 for a C++ compilation. 13386 13387 * The precompiled header file must have been produced by the same 13388 compiler binary as the current compilation is using. 13389 13390 * Any macros defined before the precompiled header is included must 13391 either be defined in the same way as when the precompiled header 13392 was generated, or must not affect the precompiled header, which 13393 usually means that they don't appear in the precompiled header at 13394 all. 13395 13396 The `-D' option is one way to define a macro before a precompiled 13397 header is included; using a `#define' can also do it. There are 13398 also some options that define macros implicitly, like `-O' and 13399 `-Wdeprecated'; the same rule applies to macros defined this way. 13400 13401 * If debugging information is output when using the precompiled 13402 header, using `-g' or similar, the same kind of debugging 13403 information must have been output when building the precompiled 13404 header. However, a precompiled header built using `-g' can be 13405 used in a compilation when no debugging information is being 13406 output. 13407 13408 * The same `-m' options must generally be used when building and 13409 using the precompiled header. *Note Submodel Options::, for any 13410 cases where this rule is relaxed. 13411 13412 * Each of the following options must be the same when building and 13413 using the precompiled header: 13414 13415 -fexceptions -funit-at-a-time 13416 13417 * Some other command-line options starting with `-f', `-p', or `-O' 13418 must be defined in the same way as when the precompiled header was 13419 generated. At present, it's not clear which options are safe to 13420 change and which are not; the safest choice is to use exactly the 13421 same options when generating and using the precompiled header. 13422 The following are known to be safe: 13423 13424 -fmessage-length= -fpreprocessed 13425 -fsched-interblock -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 13426 -fsched-verbose=<number> -fschedule-insns -fvisibility= 13427 -pedantic-errors 13428 13429 13430 For all of these except the last, the compiler will automatically 13431 ignore the precompiled header if the conditions aren't met. If you 13432 find an option combination that doesn't work and doesn't cause the 13433 precompiled header to be ignored, please consider filing a bug report, 13434 see *Note Bugs::. 13435 13436 If you do use differing options when generating and using the 13437 precompiled header, the actual behavior will be a mixture of the 13438 behavior for the options. For instance, if you use `-g' to generate 13439 the precompiled header but not when using it, you may or may not get 13440 debugging information for routines in the precompiled header. 13441 13442 13443 File: gcc.info, Node: Running Protoize, Prev: Precompiled Headers, Up: Invoking GCC 13444 13445 3.21 Running Protoize 13446 ===================== 13447 13448 The program `protoize' is an optional part of GCC. You can use it to 13449 add prototypes to a program, thus converting the program to ISO C in 13450 one respect. The companion program `unprotoize' does the reverse: it 13451 removes argument types from any prototypes that are found. 13452 13453 When you run these programs, you must specify a set of source files as 13454 command line arguments. The conversion programs start out by compiling 13455 these files to see what functions they define. The information gathered 13456 about a file FOO is saved in a file named `FOO.X'. 13457 13458 After scanning comes actual conversion. The specified files are all 13459 eligible to be converted; any files they include (whether sources or 13460 just headers) are eligible as well. 13461 13462 But not all the eligible files are converted. By default, `protoize' 13463 and `unprotoize' convert only source and header files in the current 13464 directory. You can specify additional directories whose files should 13465 be converted with the `-d DIRECTORY' option. You can also specify 13466 particular files to exclude with the `-x FILE' option. A file is 13467 converted if it is eligible, its directory name matches one of the 13468 specified directory names, and its name within the directory has not 13469 been excluded. 13470 13471 Basic conversion with `protoize' consists of rewriting most function 13472 definitions and function declarations to specify the types of the 13473 arguments. The only ones not rewritten are those for varargs functions. 13474 13475 `protoize' optionally inserts prototype declarations at the beginning 13476 of the source file, to make them available for any calls that precede 13477 the function's definition. Or it can insert prototype declarations 13478 with block scope in the blocks where undeclared functions are called. 13479 13480 Basic conversion with `unprotoize' consists of rewriting most function 13481 declarations to remove any argument types, and rewriting function 13482 definitions to the old-style pre-ISO form. 13483 13484 Both conversion programs print a warning for any function declaration 13485 or definition that they can't convert. You can suppress these warnings 13486 with `-q'. 13487 13488 The output from `protoize' or `unprotoize' replaces the original 13489 source file. The original file is renamed to a name ending with 13490 `.save' (for DOS, the saved filename ends in `.sav' without the 13491 original `.c' suffix). If the `.save' (`.sav' for DOS) file already 13492 exists, then the source file is simply discarded. 13493 13494 `protoize' and `unprotoize' both depend on GCC itself to scan the 13495 program and collect information about the functions it uses. So 13496 neither of these programs will work until GCC is installed. 13497 13498 Here is a table of the options you can use with `protoize' and 13499 `unprotoize'. Each option works with both programs unless otherwise 13500 stated. 13501 13502 `-B DIRECTORY' 13503 Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the 13504 usual directory (normally `/usr/local/lib'). This file contains 13505 prototype information about standard system functions. This option 13506 applies only to `protoize'. 13507 13508 `-c COMPILATION-OPTIONS' 13509 Use COMPILATION-OPTIONS as the options when running `gcc' to 13510 produce the `.X' files. The special option `-aux-info' is always 13511 passed in addition, to tell `gcc' to write a `.X' file. 13512 13513 Note that the compilation options must be given as a single 13514 argument to `protoize' or `unprotoize'. If you want to specify 13515 several `gcc' options, you must quote the entire set of 13516 compilation options to make them a single word in the shell. 13517 13518 There are certain `gcc' arguments that you cannot use, because they 13519 would produce the wrong kind of output. These include `-g', `-O', 13520 `-c', `-S', and `-o' If you include these in the 13521 COMPILATION-OPTIONS, they are ignored. 13522 13523 `-C' 13524 Rename files to end in `.C' (`.cc' for DOS-based file systems) 13525 instead of `.c'. This is convenient if you are converting a C 13526 program to C++. This option applies only to `protoize'. 13527 13528 `-g' 13529 Add explicit global declarations. This means inserting explicit 13530 declarations at the beginning of each source file for each function 13531 that is called in the file and was not declared. These 13532 declarations precede the first function definition that contains a 13533 call to an undeclared function. This option applies only to 13534 `protoize'. 13535 13536 `-i STRING' 13537 Indent old-style parameter declarations with the string STRING. 13538 This option applies only to `protoize'. 13539 13540 `unprotoize' converts prototyped function definitions to old-style 13541 function definitions, where the arguments are declared between the 13542 argument list and the initial `{'. By default, `unprotoize' uses 13543 five spaces as the indentation. If you want to indent with just 13544 one space instead, use `-i " "'. 13545 13546 `-k' 13547 Keep the `.X' files. Normally, they are deleted after conversion 13548 is finished. 13549 13550 `-l' 13551 Add explicit local declarations. `protoize' with `-l' inserts a 13552 prototype declaration for each function in each block which calls 13553 the function without any declaration. This option applies only to 13554 `protoize'. 13555 13556 `-n' 13557 Make no real changes. This mode just prints information about the 13558 conversions that would have been done without `-n'. 13559 13560 `-N' 13561 Make no `.save' files. The original files are simply deleted. 13562 Use this option with caution. 13563 13564 `-p PROGRAM' 13565 Use the program PROGRAM as the compiler. Normally, the name `gcc' 13566 is used. 13567 13568 `-q' 13569 Work quietly. Most warnings are suppressed. 13570 13571 `-v' 13572 Print the version number, just like `-v' for `gcc'. 13573 13574 If you need special compiler options to compile one of your program's 13575 source files, then you should generate that file's `.X' file specially, 13576 by running `gcc' on that source file with the appropriate options and 13577 the option `-aux-info'. Then run `protoize' on the entire set of 13578 files. `protoize' will use the existing `.X' file because it is newer 13579 than the source file. For example: 13580 13581 gcc -Dfoo=bar file1.c -aux-info file1.X 13582 protoize *.c 13583 13584 You need to include the special files along with the rest in the 13585 `protoize' command, even though their `.X' files already exist, because 13586 otherwise they won't get converted. 13587 13588 *Note Protoize Caveats::, for more information on how to use 13589 `protoize' successfully. 13590 13591 13592 File: gcc.info, Node: C Implementation, Next: C Extensions, Prev: Invoking GCC, Up: Top 13593 13594 4 C Implementation-defined behavior 13595 *********************************** 13596 13597 A conforming implementation of ISO C is required to document its choice 13598 of behavior in each of the areas that are designated "implementation 13599 defined". The following lists all such areas, along with the section 13600 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards. 13601 Some areas are only implementation-defined in one version of the 13602 standard. 13603 13604 Some choices depend on the externally determined ABI for the platform 13605 (including standard character encodings) which GCC follows; these are 13606 listed as "determined by ABI" below. *Note Binary Compatibility: 13607 Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 13608 are documented in the preprocessor manual. *Note 13609 Implementation-defined behavior: (cpp)Implementation-defined behavior. 13610 Some choices are made by the library and operating system (or other 13611 environment when compiling for a freestanding environment); refer to 13612 their documentation for details. 13613 13614 * Menu: 13615 13616 * Translation implementation:: 13617 * Environment implementation:: 13618 * Identifiers implementation:: 13619 * Characters implementation:: 13620 * Integers implementation:: 13621 * Floating point implementation:: 13622 * Arrays and pointers implementation:: 13623 * Hints implementation:: 13624 * Structures unions enumerations and bit-fields implementation:: 13625 * Qualifiers implementation:: 13626 * Declarators implementation:: 13627 * Statements implementation:: 13628 * Preprocessing directives implementation:: 13629 * Library functions implementation:: 13630 * Architecture implementation:: 13631 * Locale-specific behavior implementation:: 13632 13633 13634 File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 13635 13636 4.1 Translation 13637 =============== 13638 13639 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 13640 5.1.1.3).' 13641 13642 Diagnostics consist of all the output sent to stderr by GCC. 13643 13644 * `Whether each nonempty sequence of white-space characters other 13645 than new-line is retained or replaced by one space character in 13646 translation phase 3 (C90 and C99 5.1.1.2).' 13647 13648 *Note Implementation-defined behavior: (cpp)Implementation-defined 13649 behavior. 13650 13651 13652 13653 File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 13654 13655 4.2 Environment 13656 =============== 13657 13658 The behavior of most of these points are dependent on the implementation 13659 of the C library, and are not defined by GCC itself. 13660 13661 * `The mapping between physical source file multibyte characters and 13662 the source character set in translation phase 1 (C90 and C99 13663 5.1.1.2).' 13664 13665 *Note Implementation-defined behavior: (cpp)Implementation-defined 13666 behavior. 13667 13668 13669 13670 File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 13671 13672 4.3 Identifiers 13673 =============== 13674 13675 * `Which additional multibyte characters may appear in identifiers 13676 and their correspondence to universal character names (C99 6.4.2).' 13677 13678 *Note Implementation-defined behavior: (cpp)Implementation-defined 13679 behavior. 13680 13681 * `The number of significant initial characters in an identifier 13682 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).' 13683 13684 For internal names, all characters are significant. For external 13685 names, the number of significant characters are defined by the 13686 linker; for almost all targets, all characters are significant. 13687 13688 * `Whether case distinctions are significant in an identifier with 13689 external linkage (C90 6.1.2).' 13690 13691 This is a property of the linker. C99 requires that case 13692 distinctions are always significant in identifiers with external 13693 linkage and systems without this property are not supported by GCC. 13694 13695 13696 13697 File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 13698 13699 4.4 Characters 13700 ============== 13701 13702 * `The number of bits in a byte (C90 3.4, C99 3.6).' 13703 13704 Determined by ABI. 13705 13706 * `The values of the members of the execution character set (C90 and 13707 C99 5.2.1).' 13708 13709 Determined by ABI. 13710 13711 * `The unique value of the member of the execution character set 13712 produced for each of the standard alphabetic escape sequences (C90 13713 and C99 5.2.2).' 13714 13715 Determined by ABI. 13716 13717 * `The value of a `char' object into which has been stored any 13718 character other than a member of the basic execution character set 13719 (C90 6.1.2.5, C99 6.2.5).' 13720 13721 Determined by ABI. 13722 13723 * `Which of `signed char' or `unsigned char' has the same range, 13724 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 13725 6.2.1.1, C99 6.2.5, C99 6.3.1.1).' 13726 13727 Determined by ABI. The options `-funsigned-char' and 13728 `-fsigned-char' change the default. *Note Options Controlling C 13729 Dialect: C Dialect Options. 13730 13731 * `The mapping of members of the source character set (in character 13732 constants and string literals) to members of the execution 13733 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).' 13734 13735 Determined by ABI. 13736 13737 * `The value of an integer character constant containing more than 13738 one character or containing a character or escape sequence that 13739 does not map to a single-byte execution character (C90 6.1.3.4, 13740 C99 6.4.4.4).' 13741 13742 *Note Implementation-defined behavior: (cpp)Implementation-defined 13743 behavior. 13744 13745 * `The value of a wide character constant containing more than one 13746 multibyte character, or containing a multibyte character or escape 13747 sequence not represented in the extended execution character set 13748 (C90 6.1.3.4, C99 6.4.4.4).' 13749 13750 *Note Implementation-defined behavior: (cpp)Implementation-defined 13751 behavior. 13752 13753 * `The current locale used to convert a wide character constant 13754 consisting of a single multibyte character that maps to a member 13755 of the extended execution character set into a corresponding wide 13756 character code (C90 6.1.3.4, C99 6.4.4.4).' 13757 13758 *Note Implementation-defined behavior: (cpp)Implementation-defined 13759 behavior. 13760 13761 * `The current locale used to convert a wide string literal into 13762 corresponding wide character codes (C90 6.1.4, C99 6.4.5).' 13763 13764 *Note Implementation-defined behavior: (cpp)Implementation-defined 13765 behavior. 13766 13767 * `The value of a string literal containing a multibyte character or 13768 escape sequence not represented in the execution character set 13769 (C90 6.1.4, C99 6.4.5).' 13770 13771 *Note Implementation-defined behavior: (cpp)Implementation-defined 13772 behavior. 13773 13774 13775 File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 13776 13777 4.5 Integers 13778 ============ 13779 13780 * `Any extended integer types that exist in the implementation (C99 13781 6.2.5).' 13782 13783 GCC does not support any extended integer types. 13784 13785 * `Whether signed integer types are represented using sign and 13786 magnitude, two's complement, or one's complement, and whether the 13787 extraordinary value is a trap representation or an ordinary value 13788 (C99 6.2.6.2).' 13789 13790 GCC supports only two's complement integer types, and all bit 13791 patterns are ordinary values. 13792 13793 * `The rank of any extended integer type relative to another extended 13794 integer type with the same precision (C99 6.3.1.1).' 13795 13796 GCC does not support any extended integer types. 13797 13798 * `The result of, or the signal raised by, converting an integer to a 13799 signed integer type when the value cannot be represented in an 13800 object of that type (C90 6.2.1.2, C99 6.3.1.3).' 13801 13802 For conversion to a type of width N, the value is reduced modulo 13803 2^N to be within range of the type; no signal is raised. 13804 13805 * `The results of some bitwise operations on signed integers (C90 13806 6.3, C99 6.5).' 13807 13808 Bitwise operators act on the representation of the value including 13809 both the sign and value bits, where the sign bit is considered 13810 immediately above the highest-value value bit. Signed `>>' acts 13811 on negative numbers by sign extension. 13812 13813 GCC does not use the latitude given in C99 only to treat certain 13814 aspects of signed `<<' as undefined, but this is subject to change. 13815 13816 * `The sign of the remainder on integer division (C90 6.3.5).' 13817 13818 GCC always follows the C99 requirement that the result of division 13819 is truncated towards zero. 13820 13821 13822 13823 File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 13824 13825 4.6 Floating point 13826 ================== 13827 13828 * `The accuracy of the floating-point operations and of the library 13829 functions in `<math.h>' and `<complex.h>' that return 13830 floating-point results (C90 and C99 5.2.4.2.2).' 13831 13832 The accuracy is unknown. 13833 13834 * `The rounding behaviors characterized by non-standard values of 13835 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).' 13836 13837 GCC does not use such values. 13838 13839 * `The evaluation methods characterized by non-standard negative 13840 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).' 13841 13842 GCC does not use such values. 13843 13844 * `The direction of rounding when an integer is converted to a 13845 floating-point number that cannot exactly represent the original 13846 value (C90 6.2.1.3, C99 6.3.1.4).' 13847 13848 C99 Annex F is followed. 13849 13850 * `The direction of rounding when a floating-point number is 13851 converted to a narrower floating-point number (C90 6.2.1.4, C99 13852 6.3.1.5).' 13853 13854 C99 Annex F is followed. 13855 13856 * `How the nearest representable value or the larger or smaller 13857 representable value immediately adjacent to the nearest 13858 representable value is chosen for certain floating constants (C90 13859 6.1.3.1, C99 6.4.4.2).' 13860 13861 C99 Annex F is followed. 13862 13863 * `Whether and how floating expressions are contracted when not 13864 disallowed by the `FP_CONTRACT' pragma (C99 6.5).' 13865 13866 Expressions are currently only contracted if 13867 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 13868 subject to change. 13869 13870 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).' 13871 13872 This pragma is not implemented, but the default is to "off" unless 13873 `-frounding-math' is used in which case it is "on". 13874 13875 * `Additional floating-point exceptions, rounding modes, 13876 environments, and classifications, and their macro names (C99 7.6, 13877 C99 7.12).' 13878 13879 This is dependent on the implementation of the C library, and is 13880 not defined by GCC itself. 13881 13882 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).' 13883 13884 This pragma is not implemented. Expressions are currently only 13885 contracted if `-funsafe-math-optimizations' or `-ffast-math' are 13886 used. This is subject to change. 13887 13888 * `Whether the "inexact" floating-point exception can be raised when 13889 the rounded result actually does equal the mathematical result in 13890 an IEC 60559 conformant implementation (C99 F.9).' 13891 13892 This is dependent on the implementation of the C library, and is 13893 not defined by GCC itself. 13894 13895 * `Whether the "underflow" (and "inexact") floating-point exception 13896 can be raised when a result is tiny but not inexact in an IEC 13897 60559 conformant implementation (C99 F.9).' 13898 13899 This is dependent on the implementation of the C library, and is 13900 not defined by GCC itself. 13901 13902 13903 13904 File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 13905 13906 4.7 Arrays and pointers 13907 ======================= 13908 13909 * `The result of converting a pointer to an integer or vice versa 13910 (C90 6.3.4, C99 6.3.2.3).' 13911 13912 A cast from pointer to integer discards most-significant bits if 13913 the pointer representation is larger than the integer type, 13914 sign-extends(1) if the pointer representation is smaller than the 13915 integer type, otherwise the bits are unchanged. 13916 13917 A cast from integer to pointer discards most-significant bits if 13918 the pointer representation is smaller than the integer type, 13919 extends according to the signedness of the integer type if the 13920 pointer representation is larger than the integer type, otherwise 13921 the bits are unchanged. 13922 13923 When casting from pointer to integer and back again, the resulting 13924 pointer must reference the same object as the original pointer, 13925 otherwise the behavior is undefined. That is, one may not use 13926 integer arithmetic to avoid the undefined behavior of pointer 13927 arithmetic as proscribed in C99 6.5.6/8. 13928 13929 * `The size of the result of subtracting two pointers to elements of 13930 the same array (C90 6.3.6, C99 6.5.6).' 13931 13932 The value is as specified in the standard and the type is 13933 determined by the ABI. 13934 13935 13936 ---------- Footnotes ---------- 13937 13938 (1) Future versions of GCC may zero-extend, or use a target-defined 13939 `ptr_extend' pattern. Do not rely on sign extension. 13940 13941 13942 File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 13943 13944 4.8 Hints 13945 ========= 13946 13947 * `The extent to which suggestions made by using the `register' 13948 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).' 13949 13950 The `register' specifier affects code generation only in these 13951 ways: 13952 13953 * When used as part of the register variable extension, see 13954 *Note Explicit Reg Vars::. 13955 13956 * When `-O0' is in use, the compiler allocates distinct stack 13957 memory for all variables that do not have the `register' 13958 storage-class specifier; if `register' is specified, the 13959 variable may have a shorter lifespan than the code would 13960 indicate and may never be placed in memory. 13961 13962 * On some rare x86 targets, `setjmp' doesn't save the registers 13963 in all circumstances. In those cases, GCC doesn't allocate 13964 any variables in registers unless they are marked `register'. 13965 13966 13967 * `The extent to which suggestions made by using the inline function 13968 specifier are effective (C99 6.7.4).' 13969 13970 GCC will not inline any functions if the `-fno-inline' option is 13971 used or if `-O0' is used. Otherwise, GCC may still be unable to 13972 inline a function for many reasons; the `-Winline' option may be 13973 used to determine if a function has not been inlined and why not. 13974 13975 13976 13977 File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 13978 13979 4.9 Structures, unions, enumerations, and bit-fields 13980 ==================================================== 13981 13982 * `A member of a union object is accessed using a member of a 13983 different type (C90 6.3.2.3).' 13984 13985 The relevant bytes of the representation of the object are treated 13986 as an object of the type used for the access. This may be a trap 13987 representation. 13988 13989 * `Whether a "plain" `int' bit-field is treated as a `signed int' 13990 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 13991 6.5.2.1, C99 6.7.2, C99 6.7.2.1).' 13992 13993 By default it is treated as `signed int' but this may be changed 13994 by the `-funsigned-bitfields' option. 13995 13996 * `Allowable bit-field types other than `_Bool', `signed int', and 13997 `unsigned int' (C99 6.7.2.1).' 13998 13999 No other types are permitted in strictly conforming mode. 14000 14001 * `Whether a bit-field can straddle a storage-unit boundary (C90 14002 6.5.2.1, C99 6.7.2.1).' 14003 14004 Determined by ABI. 14005 14006 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 14007 C99 6.7.2.1).' 14008 14009 Determined by ABI. 14010 14011 * `The alignment of non-bit-field members of structures (C90 14012 6.5.2.1, C99 6.7.2.1).' 14013 14014 Determined by ABI. 14015 14016 * `The integer type compatible with each enumerated type (C90 14017 6.5.2.2, C99 6.7.2.2).' 14018 14019 Normally, the type is `unsigned int' if there are no negative 14020 values in the enumeration, otherwise `int'. If `-fshort-enums' is 14021 specified, then if there are negative values it is the first of 14022 `signed char', `short' and `int' that can represent all the 14023 values, otherwise it is the first of `unsigned char', `unsigned 14024 short' and `unsigned int' that can represent all the values. 14025 14026 On some targets, `-fshort-enums' is the default; this is 14027 determined by the ABI. 14028 14029 14030 14031 File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 14032 14033 4.10 Qualifiers 14034 =============== 14035 14036 * `What constitutes an access to an object that has 14037 volatile-qualified type (C90 6.5.3, C99 6.7.3).' 14038 14039 Such an object is normally accessed by pointers and used for 14040 accessing hardware. In most expressions, it is intuitively 14041 obvious what is a read and what is a write. For example 14042 14043 volatile int *dst = SOMEVALUE; 14044 volatile int *src = SOMEOTHERVALUE; 14045 *dst = *src; 14046 14047 will cause a read of the volatile object pointed to by SRC and 14048 store the value into the volatile object pointed to by DST. There 14049 is no guarantee that these reads and writes are atomic, especially 14050 for objects larger than `int'. 14051 14052 However, if the volatile storage is not being modified, and the 14053 value of the volatile storage is not used, then the situation is 14054 less obvious. For example 14055 14056 volatile int *src = SOMEVALUE; 14057 *src; 14058 14059 According to the C standard, such an expression is an rvalue whose 14060 type is the unqualified version of its original type, i.e. `int'. 14061 Whether GCC interprets this as a read of the volatile object being 14062 pointed to or only as a request to evaluate the expression for its 14063 side-effects depends on this type. 14064 14065 If it is a scalar type, or on most targets an aggregate type whose 14066 only member object is of a scalar type, or a union type whose 14067 member objects are of scalar types, the expression is interpreted 14068 by GCC as a read of the volatile object; in the other cases, the 14069 expression is only evaluated for its side-effects. 14070 14071 14072 14073 File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 14074 14075 4.11 Declarators 14076 ================ 14077 14078 * `The maximum number of declarators that may modify an arithmetic, 14079 structure or union type (C90 6.5.4).' 14080 14081 GCC is only limited by available memory. 14082 14083 14084 14085 File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 14086 14087 4.12 Statements 14088 =============== 14089 14090 * `The maximum number of `case' values in a `switch' statement (C90 14091 6.6.4.2).' 14092 14093 GCC is only limited by available memory. 14094 14095 14096 14097 File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 14098 14099 4.13 Preprocessing directives 14100 ============================= 14101 14102 *Note Implementation-defined behavior: (cpp)Implementation-defined 14103 behavior, for details of these aspects of implementation-defined 14104 behavior. 14105 14106 * `How sequences in both forms of header names are mapped to headers 14107 or external source file names (C90 6.1.7, C99 6.4.7).' 14108 14109 * `Whether the value of a character constant in a constant expression 14110 that controls conditional inclusion matches the value of the same 14111 character constant in the execution character set (C90 6.8.1, C99 14112 6.10.1).' 14113 14114 * `Whether the value of a single-character character constant in a 14115 constant expression that controls conditional inclusion may have a 14116 negative value (C90 6.8.1, C99 6.10.1).' 14117 14118 * `The places that are searched for an included `<>' delimited 14119 header, and how the places are specified or the header is 14120 identified (C90 6.8.2, C99 6.10.2).' 14121 14122 * `How the named source file is searched for in an included `""' 14123 delimited header (C90 6.8.2, C99 6.10.2).' 14124 14125 * `The method by which preprocessing tokens (possibly resulting from 14126 macro expansion) in a `#include' directive are combined into a 14127 header name (C90 6.8.2, C99 6.10.2).' 14128 14129 * `The nesting limit for `#include' processing (C90 6.8.2, C99 14130 6.10.2).' 14131 14132 * `Whether the `#' operator inserts a `\' character before the `\' 14133 character that begins a universal character name in a character 14134 constant or string literal (C99 6.10.3.2).' 14135 14136 * `The behavior on each recognized non-`STDC #pragma' directive (C90 14137 6.8.6, C99 6.10.6).' 14138 14139 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 14140 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 14141 details of target-specific pragmas. 14142 14143 * `The definitions for `__DATE__' and `__TIME__' when respectively, 14144 the date and time of translation are not available (C90 6.8.8, C99 14145 6.10.8).' 14146 14147 14148 14149 File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 14150 14151 4.14 Library functions 14152 ====================== 14153 14154 The behavior of most of these points are dependent on the implementation 14155 of the C library, and are not defined by GCC itself. 14156 14157 * `The null pointer constant to which the macro `NULL' expands (C90 14158 7.1.6, C99 7.17).' 14159 14160 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 14161 provide the other headers which define `NULL' and some library 14162 implementations may use other definitions in those headers. 14163 14164 14165 14166 File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 14167 14168 4.15 Architecture 14169 ================= 14170 14171 * `The values or expressions assigned to the macros specified in the 14172 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99 14173 5.2.4.2, C99 7.18.2, C99 7.18.3).' 14174 14175 Determined by ABI. 14176 14177 * `The number, order, and encoding of bytes in any object (when not 14178 explicitly specified in this International Standard) (C99 14179 6.2.6.1).' 14180 14181 Determined by ABI. 14182 14183 * `The value of the result of the `sizeof' operator (C90 6.3.3.4, 14184 C99 6.5.3.4).' 14185 14186 Determined by ABI. 14187 14188 14189 14190 File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 14191 14192 4.16 Locale-specific behavior 14193 ============================= 14194 14195 The behavior of these points are dependent on the implementation of the 14196 C library, and are not defined by GCC itself. 14197 14198 14199 File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C Implementation, Up: Top 14200 14201 5 Extensions to the C Language Family 14202 ************************************* 14203 14204 GNU C provides several language features not found in ISO standard C. 14205 (The `-pedantic' option directs GCC to print a warning message if any 14206 of these features is used.) To test for the availability of these 14207 features in conditional compilation, check for a predefined macro 14208 `__GNUC__', which is always defined under GCC. 14209 14210 These extensions are available in C and Objective-C. Most of them are 14211 also available in C++. *Note Extensions to the C++ Language: C++ 14212 Extensions, for extensions that apply _only_ to C++. 14213 14214 Some features that are in ISO C99 but not C89 or C++ are also, as 14215 extensions, accepted by GCC in C89 mode and in C++. 14216 14217 * Menu: 14218 14219 * Statement Exprs:: Putting statements and declarations inside expressions. 14220 * Local Labels:: Labels local to a block. 14221 * Labels as Values:: Getting pointers to labels, and computed gotos. 14222 * Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 14223 * Constructing Calls:: Dispatching a call to another function. 14224 * Typeof:: `typeof': referring to the type of an expression. 14225 * Conditionals:: Omitting the middle operand of a `?:' expression. 14226 * Long Long:: Double-word integers---`long long int'. 14227 * Complex:: Data types for complex numbers. 14228 * Decimal Float:: Decimal Floating Types. 14229 * Hex Floats:: Hexadecimal floating-point constants. 14230 * Zero Length:: Zero-length arrays. 14231 * Variable Length:: Arrays whose length is computed at run time. 14232 * Empty Structures:: Structures with no members. 14233 * Variadic Macros:: Macros with a variable number of arguments. 14234 * Escaped Newlines:: Slightly looser rules for escaped newlines. 14235 * Subscripting:: Any array can be subscripted, even if not an lvalue. 14236 * Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 14237 * Initializers:: Non-constant initializers. 14238 * Compound Literals:: Compound literals give structures, unions 14239 or arrays as values. 14240 * Designated Inits:: Labeling elements of initializers. 14241 * Cast to Union:: Casting to union type from any member of the union. 14242 * Case Ranges:: `case 1 ... 9' and such. 14243 * Mixed Declarations:: Mixing declarations and code. 14244 * Function Attributes:: Declaring that functions have no side effects, 14245 or that they can never return. 14246 * Attribute Syntax:: Formal syntax for attributes. 14247 * Function Prototypes:: Prototype declarations and old-style definitions. 14248 * C++ Comments:: C++ comments are recognized. 14249 * Dollar Signs:: Dollar sign is allowed in identifiers. 14250 * Character Escapes:: `\e' stands for the character <ESC>. 14251 * Variable Attributes:: Specifying attributes of variables. 14252 * Type Attributes:: Specifying attributes of types. 14253 * Alignment:: Inquiring about the alignment of a type or variable. 14254 * Inline:: Defining inline functions (as fast as macros). 14255 * Extended Asm:: Assembler instructions with C expressions as operands. 14256 (With them you can define ``built-in'' functions.) 14257 * Constraints:: Constraints for asm operands 14258 * Asm Labels:: Specifying the assembler name to use for a C symbol. 14259 * Explicit Reg Vars:: Defining variables residing in specified registers. 14260 * Alternate Keywords:: `__const__', `__asm__', etc., for header files. 14261 * Incomplete Enums:: `enum foo;', with details to follow. 14262 * Function Names:: Printable strings which are the name of the current 14263 function. 14264 * Return Address:: Getting the return or frame address of a function. 14265 * Vector Extensions:: Using vector instructions through built-in functions. 14266 * Offsetof:: Special syntax for implementing `offsetof'. 14267 * Atomic Builtins:: Built-in functions for atomic memory access. 14268 * Object Size Checking:: Built-in functions for limited buffer overflow 14269 checking. 14270 * Other Builtins:: Other built-in functions. 14271 * Target Builtins:: Built-in functions specific to particular targets. 14272 * Target Format Checks:: Format checks specific to particular targets. 14273 * Pragmas:: Pragmas accepted by GCC. 14274 * Unnamed Fields:: Unnamed struct/union fields within structs/unions. 14275 * Thread-Local:: Per-thread variables. 14276 14277 14278 File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 14279 14280 5.1 Statements and Declarations in Expressions 14281 ============================================== 14282 14283 A compound statement enclosed in parentheses may appear as an expression 14284 in GNU C. This allows you to use loops, switches, and local variables 14285 within an expression. 14286 14287 Recall that a compound statement is a sequence of statements surrounded 14288 by braces; in this construct, parentheses go around the braces. For 14289 example: 14290 14291 ({ int y = foo (); int z; 14292 if (y > 0) z = y; 14293 else z = - y; 14294 z; }) 14295 14296 is a valid (though slightly more complex than necessary) expression for 14297 the absolute value of `foo ()'. 14298 14299 The last thing in the compound statement should be an expression 14300 followed by a semicolon; the value of this subexpression serves as the 14301 value of the entire construct. (If you use some other kind of statement 14302 last within the braces, the construct has type `void', and thus 14303 effectively no value.) 14304 14305 This feature is especially useful in making macro definitions "safe" 14306 (so that they evaluate each operand exactly once). For example, the 14307 "maximum" function is commonly defined as a macro in standard C as 14308 follows: 14309 14310 #define max(a,b) ((a) > (b) ? (a) : (b)) 14311 14312 But this definition computes either A or B twice, with bad results if 14313 the operand has side effects. In GNU C, if you know the type of the 14314 operands (here taken as `int'), you can define the macro safely as 14315 follows: 14316 14317 #define maxint(a,b) \ 14318 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 14319 14320 Embedded statements are not allowed in constant expressions, such as 14321 the value of an enumeration constant, the width of a bit-field, or the 14322 initial value of a static variable. 14323 14324 If you don't know the type of the operand, you can still do this, but 14325 you must use `typeof' (*note Typeof::). 14326 14327 In G++, the result value of a statement expression undergoes array and 14328 function pointer decay, and is returned by value to the enclosing 14329 expression. For instance, if `A' is a class, then 14330 14331 A a; 14332 14333 ({a;}).Foo () 14334 14335 will construct a temporary `A' object to hold the result of the 14336 statement expression, and that will be used to invoke `Foo'. Therefore 14337 the `this' pointer observed by `Foo' will not be the address of `a'. 14338 14339 Any temporaries created within a statement within a statement 14340 expression will be destroyed at the statement's end. This makes 14341 statement expressions inside macros slightly different from function 14342 calls. In the latter case temporaries introduced during argument 14343 evaluation will be destroyed at the end of the statement that includes 14344 the function call. In the statement expression case they will be 14345 destroyed during the statement expression. For instance, 14346 14347 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 14348 template<typename T> T function(T a) { T b = a; return b + 3; } 14349 14350 void foo () 14351 { 14352 macro (X ()); 14353 function (X ()); 14354 } 14355 14356 will have different places where temporaries are destroyed. For the 14357 `macro' case, the temporary `X' will be destroyed just after the 14358 initialization of `b'. In the `function' case that temporary will be 14359 destroyed when the function returns. 14360 14361 These considerations mean that it is probably a bad idea to use 14362 statement-expressions of this form in header files that are designed to 14363 work with C++. (Note that some versions of the GNU C Library contained 14364 header files using statement-expression that lead to precisely this 14365 bug.) 14366 14367 Jumping into a statement expression with `goto' or using a `switch' 14368 statement outside the statement expression with a `case' or `default' 14369 label inside the statement expression is not permitted. Jumping into a 14370 statement expression with a computed `goto' (*note Labels as Values::) 14371 yields undefined behavior. Jumping out of a statement expression is 14372 permitted, but if the statement expression is part of a larger 14373 expression then it is unspecified which other subexpressions of that 14374 expression have been evaluated except where the language definition 14375 requires certain subexpressions to be evaluated before or after the 14376 statement expression. In any case, as with a function call the 14377 evaluation of a statement expression is not interleaved with the 14378 evaluation of other parts of the containing expression. For example, 14379 14380 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 14381 14382 will call `foo' and `bar1' and will not call `baz' but may or may not 14383 call `bar2'. If `bar2' is called, it will be called after `foo' and 14384 before `bar1' 14385 14386 14387 File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 14388 14389 5.2 Locally Declared Labels 14390 =========================== 14391 14392 GCC allows you to declare "local labels" in any nested block scope. A 14393 local label is just like an ordinary label, but you can only reference 14394 it (with a `goto' statement, or by taking its address) within the block 14395 in which it was declared. 14396 14397 A local label declaration looks like this: 14398 14399 __label__ LABEL; 14400 14401 or 14402 14403 __label__ LABEL1, LABEL2, /* ... */; 14404 14405 Local label declarations must come at the beginning of the block, 14406 before any ordinary declarations or statements. 14407 14408 The label declaration defines the label _name_, but does not define 14409 the label itself. You must do this in the usual way, with `LABEL:', 14410 within the statements of the statement expression. 14411 14412 The local label feature is useful for complex macros. If a macro 14413 contains nested loops, a `goto' can be useful for breaking out of them. 14414 However, an ordinary label whose scope is the whole function cannot be 14415 used: if the macro can be expanded several times in one function, the 14416 label will be multiply defined in that function. A local label avoids 14417 this problem. For example: 14418 14419 #define SEARCH(value, array, target) \ 14420 do { \ 14421 __label__ found; \ 14422 typeof (target) _SEARCH_target = (target); \ 14423 typeof (*(array)) *_SEARCH_array = (array); \ 14424 int i, j; \ 14425 int value; \ 14426 for (i = 0; i < max; i++) \ 14427 for (j = 0; j < max; j++) \ 14428 if (_SEARCH_array[i][j] == _SEARCH_target) \ 14429 { (value) = i; goto found; } \ 14430 (value) = -1; \ 14431 found:; \ 14432 } while (0) 14433 14434 This could also be written using a statement-expression: 14435 14436 #define SEARCH(array, target) \ 14437 ({ \ 14438 __label__ found; \ 14439 typeof (target) _SEARCH_target = (target); \ 14440 typeof (*(array)) *_SEARCH_array = (array); \ 14441 int i, j; \ 14442 int value; \ 14443 for (i = 0; i < max; i++) \ 14444 for (j = 0; j < max; j++) \ 14445 if (_SEARCH_array[i][j] == _SEARCH_target) \ 14446 { value = i; goto found; } \ 14447 value = -1; \ 14448 found: \ 14449 value; \ 14450 }) 14451 14452 Local label declarations also make the labels they declare visible to 14453 nested functions, if there are any. *Note Nested Functions::, for 14454 details. 14455 14456 14457 File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 14458 14459 5.3 Labels as Values 14460 ==================== 14461 14462 You can get the address of a label defined in the current function (or 14463 a containing function) with the unary operator `&&'. The value has 14464 type `void *'. This value is a constant and can be used wherever a 14465 constant of that type is valid. For example: 14466 14467 void *ptr; 14468 /* ... */ 14469 ptr = &&foo; 14470 14471 To use these values, you need to be able to jump to one. This is done 14472 with the computed goto statement(1), `goto *EXP;'. For example, 14473 14474 goto *ptr; 14475 14476 Any expression of type `void *' is allowed. 14477 14478 One way of using these constants is in initializing a static array that 14479 will serve as a jump table: 14480 14481 static void *array[] = { &&foo, &&bar, &&hack }; 14482 14483 Then you can select a label with indexing, like this: 14484 14485 goto *array[i]; 14486 14487 Note that this does not check whether the subscript is in bounds--array 14488 indexing in C never does that. 14489 14490 Such an array of label values serves a purpose much like that of the 14491 `switch' statement. The `switch' statement is cleaner, so use that 14492 rather than an array unless the problem does not fit a `switch' 14493 statement very well. 14494 14495 Another use of label values is in an interpreter for threaded code. 14496 The labels within the interpreter function can be stored in the 14497 threaded code for super-fast dispatching. 14498 14499 You may not use this mechanism to jump to code in a different function. 14500 If you do that, totally unpredictable things will happen. The best way 14501 to avoid this is to store the label address only in automatic variables 14502 and never pass it as an argument. 14503 14504 An alternate way to write the above example is 14505 14506 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 14507 &&hack - &&foo }; 14508 goto *(&&foo + array[i]); 14509 14510 This is more friendly to code living in shared libraries, as it reduces 14511 the number of dynamic relocations that are needed, and by consequence, 14512 allows the data to be read-only. 14513 14514 ---------- Footnotes ---------- 14515 14516 (1) The analogous feature in Fortran is called an assigned goto, but 14517 that name seems inappropriate in C, where one can do more than simply 14518 store label addresses in label variables. 14519 14520 14521 File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 14522 14523 5.4 Nested Functions 14524 ==================== 14525 14526 A "nested function" is a function defined inside another function. 14527 (Nested functions are not supported for GNU C++.) The nested function's 14528 name is local to the block where it is defined. For example, here we 14529 define a nested function named `square', and call it twice: 14530 14531 foo (double a, double b) 14532 { 14533 double square (double z) { return z * z; } 14534 14535 return square (a) + square (b); 14536 } 14537 14538 The nested function can access all the variables of the containing 14539 function that are visible at the point of its definition. This is 14540 called "lexical scoping". For example, here we show a nested function 14541 which uses an inherited variable named `offset': 14542 14543 bar (int *array, int offset, int size) 14544 { 14545 int access (int *array, int index) 14546 { return array[index + offset]; } 14547 int i; 14548 /* ... */ 14549 for (i = 0; i < size; i++) 14550 /* ... */ access (array, i) /* ... */ 14551 } 14552 14553 Nested function definitions are permitted within functions in the 14554 places where variable definitions are allowed; that is, in any block, 14555 mixed with the other declarations and statements in the block. 14556 14557 It is possible to call the nested function from outside the scope of 14558 its name by storing its address or passing the address to another 14559 function: 14560 14561 hack (int *array, int size) 14562 { 14563 void store (int index, int value) 14564 { array[index] = value; } 14565 14566 intermediate (store, size); 14567 } 14568 14569 Here, the function `intermediate' receives the address of `store' as 14570 an argument. If `intermediate' calls `store', the arguments given to 14571 `store' are used to store into `array'. But this technique works only 14572 so long as the containing function (`hack', in this example) does not 14573 exit. 14574 14575 If you try to call the nested function through its address after the 14576 containing function has exited, all hell will break loose. If you try 14577 to call it after a containing scope level has exited, and if it refers 14578 to some of the variables that are no longer in scope, you may be lucky, 14579 but it's not wise to take the risk. If, however, the nested function 14580 does not refer to anything that has gone out of scope, you should be 14581 safe. 14582 14583 GCC implements taking the address of a nested function using a 14584 technique called "trampolines". A paper describing them is available as 14585 14586 `http://people.debian.org/~aaronl/Usenix88-lexic.pdf'. 14587 14588 A nested function can jump to a label inherited from a containing 14589 function, provided the label was explicitly declared in the containing 14590 function (*note Local Labels::). Such a jump returns instantly to the 14591 containing function, exiting the nested function which did the `goto' 14592 and any intermediate functions as well. Here is an example: 14593 14594 bar (int *array, int offset, int size) 14595 { 14596 __label__ failure; 14597 int access (int *array, int index) 14598 { 14599 if (index > size) 14600 goto failure; 14601 return array[index + offset]; 14602 } 14603 int i; 14604 /* ... */ 14605 for (i = 0; i < size; i++) 14606 /* ... */ access (array, i) /* ... */ 14607 /* ... */ 14608 return 0; 14609 14610 /* Control comes here from `access' 14611 if it detects an error. */ 14612 failure: 14613 return -1; 14614 } 14615 14616 A nested function always has no linkage. Declaring one with `extern' 14617 or `static' is erroneous. If you need to declare the nested function 14618 before its definition, use `auto' (which is otherwise meaningless for 14619 function declarations). 14620 14621 bar (int *array, int offset, int size) 14622 { 14623 __label__ failure; 14624 auto int access (int *, int); 14625 /* ... */ 14626 int access (int *array, int index) 14627 { 14628 if (index > size) 14629 goto failure; 14630 return array[index + offset]; 14631 } 14632 /* ... */ 14633 } 14634 14635 14636 File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 14637 14638 5.5 Constructing Function Calls 14639 =============================== 14640 14641 Using the built-in functions described below, you can record the 14642 arguments a function received, and call another function with the same 14643 arguments, without knowing the number or types of the arguments. 14644 14645 You can also record the return value of that function call, and later 14646 return that value, without knowing what data type the function tried to 14647 return (as long as your caller expects that data type). 14648 14649 However, these built-in functions may interact badly with some 14650 sophisticated features or other extensions of the language. It is, 14651 therefore, not recommended to use them outside very simple functions 14652 acting as mere forwarders for their arguments. 14653 14654 -- Built-in Function: void * __builtin_apply_args () 14655 This built-in function returns a pointer to data describing how to 14656 perform a call with the same arguments as were passed to the 14657 current function. 14658 14659 The function saves the arg pointer register, structure value 14660 address, and all registers that might be used to pass arguments to 14661 a function into a block of memory allocated on the stack. Then it 14662 returns the address of that block. 14663 14664 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 14665 *ARGUMENTS, size_t SIZE) 14666 This built-in function invokes FUNCTION with a copy of the 14667 parameters described by ARGUMENTS and SIZE. 14668 14669 The value of ARGUMENTS should be the value returned by 14670 `__builtin_apply_args'. The argument SIZE specifies the size of 14671 the stack argument data, in bytes. 14672 14673 This function returns a pointer to data describing how to return 14674 whatever value was returned by FUNCTION. The data is saved in a 14675 block of memory allocated on the stack. 14676 14677 It is not always simple to compute the proper value for SIZE. The 14678 value is used by `__builtin_apply' to compute the amount of data 14679 that should be pushed on the stack and copied from the incoming 14680 argument area. 14681 14682 -- Built-in Function: void __builtin_return (void *RESULT) 14683 This built-in function returns the value described by RESULT from 14684 the containing function. You should specify, for RESULT, a value 14685 returned by `__builtin_apply'. 14686 14687 14688 File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 14689 14690 5.6 Referring to a Type with `typeof' 14691 ===================================== 14692 14693 Another way to refer to the type of an expression is with `typeof'. 14694 The syntax of using of this keyword looks like `sizeof', but the 14695 construct acts semantically like a type name defined with `typedef'. 14696 14697 There are two ways of writing the argument to `typeof': with an 14698 expression or with a type. Here is an example with an expression: 14699 14700 typeof (x[0](1)) 14701 14702 This assumes that `x' is an array of pointers to functions; the type 14703 described is that of the values of the functions. 14704 14705 Here is an example with a typename as the argument: 14706 14707 typeof (int *) 14708 14709 Here the type described is that of pointers to `int'. 14710 14711 If you are writing a header file that must work when included in ISO C 14712 programs, write `__typeof__' instead of `typeof'. *Note Alternate 14713 Keywords::. 14714 14715 A `typeof'-construct can be used anywhere a typedef name could be 14716 used. For example, you can use it in a declaration, in a cast, or 14717 inside of `sizeof' or `typeof'. 14718 14719 `typeof' is often useful in conjunction with the 14720 statements-within-expressions feature. Here is how the two together can 14721 be used to define a safe "maximum" macro that operates on any 14722 arithmetic type and evaluates each of its arguments exactly once: 14723 14724 #define max(a,b) \ 14725 ({ typeof (a) _a = (a); \ 14726 typeof (b) _b = (b); \ 14727 _a > _b ? _a : _b; }) 14728 14729 The reason for using names that start with underscores for the local 14730 variables is to avoid conflicts with variable names that occur within 14731 the expressions that are substituted for `a' and `b'. Eventually we 14732 hope to design a new form of declaration syntax that allows you to 14733 declare variables whose scopes start only after their initializers; 14734 this will be a more reliable way to prevent such conflicts. 14735 14736 Some more examples of the use of `typeof': 14737 14738 * This declares `y' with the type of what `x' points to. 14739 14740 typeof (*x) y; 14741 14742 * This declares `y' as an array of such values. 14743 14744 typeof (*x) y[4]; 14745 14746 * This declares `y' as an array of pointers to characters: 14747 14748 typeof (typeof (char *)[4]) y; 14749 14750 It is equivalent to the following traditional C declaration: 14751 14752 char *y[4]; 14753 14754 To see the meaning of the declaration using `typeof', and why it 14755 might be a useful way to write, rewrite it with these macros: 14756 14757 #define pointer(T) typeof(T *) 14758 #define array(T, N) typeof(T [N]) 14759 14760 Now the declaration can be rewritten this way: 14761 14762 array (pointer (char), 4) y; 14763 14764 Thus, `array (pointer (char), 4)' is the type of arrays of 4 14765 pointers to `char'. 14766 14767 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more 14768 limited extension which permitted one to write 14769 14770 typedef T = EXPR; 14771 14772 with the effect of declaring T to have the type of the expression EXPR. 14773 This extension does not work with GCC 3 (versions between 3.0 and 3.2 14774 will crash; 3.2.1 and later give an error). Code which relies on it 14775 should be rewritten to use `typeof': 14776 14777 typedef typeof(EXPR) T; 14778 14779 This will work with all versions of GCC. 14780 14781 14782 File: gcc.info, Node: Conditionals, Next: Long Long, Prev: Typeof, Up: C Extensions 14783 14784 5.7 Conditionals with Omitted Operands 14785 ====================================== 14786 14787 The middle operand in a conditional expression may be omitted. Then if 14788 the first operand is nonzero, its value is the value of the conditional 14789 expression. 14790 14791 Therefore, the expression 14792 14793 x ? : y 14794 14795 has the value of `x' if that is nonzero; otherwise, the value of `y'. 14796 14797 This example is perfectly equivalent to 14798 14799 x ? x : y 14800 14801 In this simple case, the ability to omit the middle operand is not 14802 especially useful. When it becomes useful is when the first operand 14803 does, or may (if it is a macro argument), contain a side effect. Then 14804 repeating the operand in the middle would perform the side effect 14805 twice. Omitting the middle operand uses the value already computed 14806 without the undesirable effects of recomputing it. 14807 14808 14809 File: gcc.info, Node: Long Long, Next: Complex, Prev: Conditionals, Up: C Extensions 14810 14811 5.8 Double-Word Integers 14812 ======================== 14813 14814 ISO C99 supports data types for integers that are at least 64 bits wide, 14815 and as an extension GCC supports them in C89 mode and in C++. Simply 14816 write `long long int' for a signed integer, or `unsigned long long int' 14817 for an unsigned integer. To make an integer constant of type `long 14818 long int', add the suffix `LL' to the integer. To make an integer 14819 constant of type `unsigned long long int', add the suffix `ULL' to the 14820 integer. 14821 14822 You can use these types in arithmetic like any other integer types. 14823 Addition, subtraction, and bitwise boolean operations on these types 14824 are open-coded on all types of machines. Multiplication is open-coded 14825 if the machine supports fullword-to-doubleword a widening multiply 14826 instruction. Division and shifts are open-coded only on machines that 14827 provide special support. The operations that are not open-coded use 14828 special library routines that come with GCC. 14829 14830 There may be pitfalls when you use `long long' types for function 14831 arguments, unless you declare function prototypes. If a function 14832 expects type `int' for its argument, and you pass a value of type `long 14833 long int', confusion will result because the caller and the subroutine 14834 will disagree about the number of bytes for the argument. Likewise, if 14835 the function expects `long long int' and you pass `int'. The best way 14836 to avoid such problems is to use prototypes. 14837 14838 14839 File: gcc.info, Node: Complex, Next: Decimal Float, Prev: Long Long, Up: C Extensions 14840 14841 5.9 Complex Numbers 14842 =================== 14843 14844 ISO C99 supports complex floating data types, and as an extension GCC 14845 supports them in C89 mode and in C++, and supports complex integer data 14846 types which are not part of ISO C99. You can declare complex types 14847 using the keyword `_Complex'. As an extension, the older GNU keyword 14848 `__complex__' is also supported. 14849 14850 For example, `_Complex double x;' declares `x' as a variable whose 14851 real part and imaginary part are both of type `double'. `_Complex 14852 short int y;' declares `y' to have real and imaginary parts of type 14853 `short int'; this is not likely to be useful, but it shows that the set 14854 of complex types is complete. 14855 14856 To write a constant with a complex data type, use the suffix `i' or 14857 `j' (either one; they are equivalent). For example, `2.5fi' has type 14858 `_Complex float' and `3i' has type `_Complex int'. Such a constant 14859 always has a pure imaginary value, but you can form any complex value 14860 you like by adding one to a real constant. This is a GNU extension; if 14861 you have an ISO C99 conforming C library (such as GNU libc), and want 14862 to construct complex constants of floating type, you should include 14863 `<complex.h>' and use the macros `I' or `_Complex_I' instead. 14864 14865 To extract the real part of a complex-valued expression EXP, write 14866 `__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 14867 part. This is a GNU extension; for values of floating type, you should 14868 use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 14869 `cimag' and `cimagl', declared in `<complex.h>' and also provided as 14870 built-in functions by GCC. 14871 14872 The operator `~' performs complex conjugation when used on a value 14873 with a complex type. This is a GNU extension; for values of floating 14874 type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 14875 declared in `<complex.h>' and also provided as built-in functions by 14876 GCC. 14877 14878 GCC can allocate complex automatic variables in a noncontiguous 14879 fashion; it's even possible for the real part to be in a register while 14880 the imaginary part is on the stack (or vice-versa). Only the DWARF2 14881 debug info format can represent this, so use of DWARF2 is recommended. 14882 If you are using the stabs debug info format, GCC describes a 14883 noncontiguous complex variable as if it were two separate variables of 14884 noncomplex type. If the variable's actual name is `foo', the two 14885 fictitious variables are named `foo$real' and `foo$imag'. You can 14886 examine and set these two fictitious variables with your debugger. 14887 14888 14889 File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Complex, Up: C Extensions 14890 14891 5.10 Decimal Floating Types 14892 =========================== 14893 14894 As an extension, the GNU C compiler supports decimal floating types as 14895 defined in the N1176 draft of ISO/IEC WDTR24732. Support for decimal 14896 floating types in GCC will evolve as the draft technical report changes. 14897 Calling conventions for any target might also change. Not all targets 14898 support decimal floating types. 14899 14900 The decimal floating types are `_Decimal32', `_Decimal64', and 14901 `_Decimal128'. They use a radix of ten, unlike the floating types 14902 `float', `double', and `long double' whose radix is not specified by 14903 the C standard but is usually two. 14904 14905 Support for decimal floating types includes the arithmetic operators 14906 add, subtract, multiply, divide; unary arithmetic operators; relational 14907 operators; equality operators; and conversions to and from integer and 14908 other floating types. Use a suffix `df' or `DF' in a literal constant 14909 of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 14910 for `_Decimal128'. 14911 14912 GCC support of decimal float as specified by the draft technical report 14913 is incomplete: 14914 14915 * Translation time data type (TTDT) is not supported. 14916 14917 * Characteristics of decimal floating types are defined in header 14918 file `decfloat.h' rather than `float.h'. 14919 14920 * When the value of a decimal floating type cannot be represented in 14921 the integer type to which it is being converted, the result is 14922 undefined rather than the result value specified by the draft 14923 technical report. 14924 14925 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 14926 the DWARF2 debug information format. 14927 14928 14929 File: gcc.info, Node: Hex Floats, Next: Zero Length, Prev: Decimal Float, Up: C Extensions 14930 14931 5.11 Hex Floats 14932 =============== 14933 14934 ISO C99 supports floating-point numbers written not only in the usual 14935 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 14936 written in hexadecimal format. As a GNU extension, GCC supports this 14937 in C89 mode (except in some cases when strictly conforming) and in C++. 14938 In that format the `0x' hex introducer and the `p' or `P' exponent 14939 field are mandatory. The exponent is a decimal number that indicates 14940 the power of 2 by which the significant part will be multiplied. Thus 14941 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 14942 is the same as `1.55e1'. 14943 14944 Unlike for floating-point numbers in the decimal notation the exponent 14945 is always required in the hexadecimal notation. Otherwise the compiler 14946 would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 14947 could mean `1.0f' or `1.9375' since `f' is also the extension for 14948 floating-point constants of type `float'. 14949 14950 14951 File: gcc.info, Node: Zero Length, Next: Variable Length, Prev: Hex Floats, Up: C Extensions 14952 14953 5.12 Arrays of Length Zero 14954 ========================== 14955 14956 Zero-length arrays are allowed in GNU C. They are very useful as the 14957 last element of a structure which is really a header for a 14958 variable-length object: 14959 14960 struct line { 14961 int length; 14962 char contents[0]; 14963 }; 14964 14965 struct line *thisline = (struct line *) 14966 malloc (sizeof (struct line) + this_length); 14967 thisline->length = this_length; 14968 14969 In ISO C90, you would have to give `contents' a length of 1, which 14970 means either you waste space or complicate the argument to `malloc'. 14971 14972 In ISO C99, you would use a "flexible array member", which is slightly 14973 different in syntax and semantics: 14974 14975 * Flexible array members are written as `contents[]' without the `0'. 14976 14977 * Flexible array members have incomplete type, and so the `sizeof' 14978 operator may not be applied. As a quirk of the original 14979 implementation of zero-length arrays, `sizeof' evaluates to zero. 14980 14981 * Flexible array members may only appear as the last member of a 14982 `struct' that is otherwise non-empty. 14983 14984 * A structure containing a flexible array member, or a union 14985 containing such a structure (possibly recursively), may not be a 14986 member of a structure or an element of an array. (However, these 14987 uses are permitted by GCC as extensions.) 14988 14989 GCC versions before 3.0 allowed zero-length arrays to be statically 14990 initialized, as if they were flexible arrays. In addition to those 14991 cases that were useful, it also allowed initializations in situations 14992 that would corrupt later data. Non-empty initialization of zero-length 14993 arrays is now treated like any case where there are more initializer 14994 elements than the array holds, in that a suitable warning about "excess 14995 elements in array" is given, and the excess elements (all of them, in 14996 this case) are ignored. 14997 14998 Instead GCC allows static initialization of flexible array members. 14999 This is equivalent to defining a new structure containing the original 15000 structure followed by an array of sufficient size to contain the data. 15001 I.e. in the following, `f1' is constructed as if it were declared like 15002 `f2'. 15003 15004 struct f1 { 15005 int x; int y[]; 15006 } f1 = { 1, { 2, 3, 4 } }; 15007 15008 struct f2 { 15009 struct f1 f1; int data[3]; 15010 } f2 = { { 1 }, { 2, 3, 4 } }; 15011 15012 The convenience of this extension is that `f1' has the desired type, 15013 eliminating the need to consistently refer to `f2.f1'. 15014 15015 This has symmetry with normal static arrays, in that an array of 15016 unknown size is also written with `[]'. 15017 15018 Of course, this extension only makes sense if the extra data comes at 15019 the end of a top-level object, as otherwise we would be overwriting 15020 data at subsequent offsets. To avoid undue complication and confusion 15021 with initialization of deeply nested arrays, we simply disallow any 15022 non-empty initialization except when the structure is the top-level 15023 object. For example: 15024 15025 struct foo { int x; int y[]; }; 15026 struct bar { struct foo z; }; 15027 15028 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 15029 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 15030 struct bar c = { { 1, { } } }; // Valid. 15031 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 15032 15033 15034 File: gcc.info, Node: Empty Structures, Next: Variadic Macros, Prev: Variable Length, Up: C Extensions 15035 15036 5.13 Structures With No Members 15037 =============================== 15038 15039 GCC permits a C structure to have no members: 15040 15041 struct empty { 15042 }; 15043 15044 The structure will have size zero. In C++, empty structures are part 15045 of the language. G++ treats empty structures as if they had a single 15046 member of type `char'. 15047 15048 15049 File: gcc.info, Node: Variable Length, Next: Empty Structures, Prev: Zero Length, Up: C Extensions 15050 15051 5.14 Arrays of Variable Length 15052 ============================== 15053 15054 Variable-length automatic arrays are allowed in ISO C99, and as an 15055 extension GCC accepts them in C89 mode and in C++. (However, GCC's 15056 implementation of variable-length arrays does not yet conform in detail 15057 to the ISO C99 standard.) These arrays are declared like any other 15058 automatic arrays, but with a length that is not a constant expression. 15059 The storage is allocated at the point of declaration and deallocated 15060 when the brace-level is exited. For example: 15061 15062 FILE * 15063 concat_fopen (char *s1, char *s2, char *mode) 15064 { 15065 char str[strlen (s1) + strlen (s2) + 1]; 15066 strcpy (str, s1); 15067 strcat (str, s2); 15068 return fopen (str, mode); 15069 } 15070 15071 Jumping or breaking out of the scope of the array name deallocates the 15072 storage. Jumping into the scope is not allowed; you get an error 15073 message for it. 15074 15075 You can use the function `alloca' to get an effect much like 15076 variable-length arrays. The function `alloca' is available in many 15077 other C implementations (but not in all). On the other hand, 15078 variable-length arrays are more elegant. 15079 15080 There are other differences between these two methods. Space allocated 15081 with `alloca' exists until the containing _function_ returns. The 15082 space for a variable-length array is deallocated as soon as the array 15083 name's scope ends. (If you use both variable-length arrays and 15084 `alloca' in the same function, deallocation of a variable-length array 15085 will also deallocate anything more recently allocated with `alloca'.) 15086 15087 You can also use variable-length arrays as arguments to functions: 15088 15089 struct entry 15090 tester (int len, char data[len][len]) 15091 { 15092 /* ... */ 15093 } 15094 15095 The length of an array is computed once when the storage is allocated 15096 and is remembered for the scope of the array in case you access it with 15097 `sizeof'. 15098 15099 If you want to pass the array first and the length afterward, you can 15100 use a forward declaration in the parameter list--another GNU extension. 15101 15102 struct entry 15103 tester (int len; char data[len][len], int len) 15104 { 15105 /* ... */ 15106 } 15107 15108 The `int len' before the semicolon is a "parameter forward 15109 declaration", and it serves the purpose of making the name `len' known 15110 when the declaration of `data' is parsed. 15111 15112 You can write any number of such parameter forward declarations in the 15113 parameter list. They can be separated by commas or semicolons, but the 15114 last one must end with a semicolon, which is followed by the "real" 15115 parameter declarations. Each forward declaration must match a "real" 15116 declaration in parameter name and data type. ISO C99 does not support 15117 parameter forward declarations. 15118 15119 15120 File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Empty Structures, Up: C Extensions 15121 15122 5.15 Macros with a Variable Number of Arguments. 15123 ================================================ 15124 15125 In the ISO C standard of 1999, a macro can be declared to accept a 15126 variable number of arguments much as a function can. The syntax for 15127 defining the macro is similar to that of a function. Here is an 15128 example: 15129 15130 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 15131 15132 Here `...' is a "variable argument". In the invocation of such a 15133 macro, it represents the zero or more tokens until the closing 15134 parenthesis that ends the invocation, including any commas. This set of 15135 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 15136 it appears. See the CPP manual for more information. 15137 15138 GCC has long supported variadic macros, and used a different syntax 15139 that allowed you to give a name to the variable arguments just like any 15140 other argument. Here is an example: 15141 15142 #define debug(format, args...) fprintf (stderr, format, args) 15143 15144 This is in all ways equivalent to the ISO C example above, but arguably 15145 more readable and descriptive. 15146 15147 GNU CPP has two further variadic macro extensions, and permits them to 15148 be used with either of the above forms of macro definition. 15149 15150 In standard C, you are not allowed to leave the variable argument out 15151 entirely; but you are allowed to pass an empty argument. For example, 15152 this invocation is invalid in ISO C, because there is no comma after 15153 the string: 15154 15155 debug ("A message") 15156 15157 GNU CPP permits you to completely omit the variable arguments in this 15158 way. In the above examples, the compiler would complain, though since 15159 the expansion of the macro still has the extra comma after the format 15160 string. 15161 15162 To help solve this problem, CPP behaves specially for variable 15163 arguments used with the token paste operator, `##'. If instead you 15164 write 15165 15166 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 15167 15168 and if the variable arguments are omitted or empty, the `##' operator 15169 causes the preprocessor to remove the comma before it. If you do 15170 provide some variable arguments in your macro invocation, GNU CPP does 15171 not complain about the paste operation and instead places the variable 15172 arguments after the comma. Just like any other pasted macro argument, 15173 these arguments are not macro expanded. 15174 15175 15176 File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 15177 15178 5.16 Slightly Looser Rules for Escaped Newlines 15179 =============================================== 15180 15181 Recently, the preprocessor has relaxed its treatment of escaped 15182 newlines. Previously, the newline had to immediately follow a 15183 backslash. The current implementation allows whitespace in the form of 15184 spaces, horizontal and vertical tabs, and form feeds between the 15185 backslash and the subsequent newline. The preprocessor issues a 15186 warning, but treats it as a valid escaped newline and combines the two 15187 lines to form a single logical line. This works within comments and 15188 tokens, as well as between tokens. Comments are _not_ treated as 15189 whitespace for the purposes of this relaxation, since they have not yet 15190 been replaced with spaces. 15191 15192 15193 File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 15194 15195 5.17 Non-Lvalue Arrays May Have Subscripts 15196 ========================================== 15197 15198 In ISO C99, arrays that are not lvalues still decay to pointers, and 15199 may be subscripted, although they may not be modified or used after the 15200 next sequence point and the unary `&' operator may not be applied to 15201 them. As an extension, GCC allows such arrays to be subscripted in C89 15202 mode, though otherwise they do not decay to pointers outside C99 mode. 15203 For example, this is valid in GNU C though not valid in C89: 15204 15205 struct foo {int a[4];}; 15206 15207 struct foo f(); 15208 15209 bar (int index) 15210 { 15211 return f().a[index]; 15212 } 15213 15214 15215 File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 15216 15217 5.18 Arithmetic on `void'- and Function-Pointers 15218 ================================================ 15219 15220 In GNU C, addition and subtraction operations are supported on pointers 15221 to `void' and on pointers to functions. This is done by treating the 15222 size of a `void' or of a function as 1. 15223 15224 A consequence of this is that `sizeof' is also allowed on `void' and 15225 on function types, and returns 1. 15226 15227 The option `-Wpointer-arith' requests a warning if these extensions 15228 are used. 15229 15230 15231 File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 15232 15233 5.19 Non-Constant Initializers 15234 ============================== 15235 15236 As in standard C++ and ISO C99, the elements of an aggregate 15237 initializer for an automatic variable are not required to be constant 15238 expressions in GNU C. Here is an example of an initializer with 15239 run-time varying elements: 15240 15241 foo (float f, float g) 15242 { 15243 float beat_freqs[2] = { f-g, f+g }; 15244 /* ... */ 15245 } 15246 15247 15248 File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 15249 15250 5.20 Compound Literals 15251 ====================== 15252 15253 ISO C99 supports compound literals. A compound literal looks like a 15254 cast containing an initializer. Its value is an object of the type 15255 specified in the cast, containing the elements specified in the 15256 initializer; it is an lvalue. As an extension, GCC supports compound 15257 literals in C89 mode and in C++. 15258 15259 Usually, the specified type is a structure. Assume that `struct foo' 15260 and `structure' are declared as shown: 15261 15262 struct foo {int a; char b[2];} structure; 15263 15264 Here is an example of constructing a `struct foo' with a compound 15265 literal: 15266 15267 structure = ((struct foo) {x + y, 'a', 0}); 15268 15269 This is equivalent to writing the following: 15270 15271 { 15272 struct foo temp = {x + y, 'a', 0}; 15273 structure = temp; 15274 } 15275 15276 You can also construct an array. If all the elements of the compound 15277 literal are (made up of) simple constant expressions, suitable for use 15278 in initializers of objects of static storage duration, then the compound 15279 literal can be coerced to a pointer to its first element and used in 15280 such an initializer, as shown here: 15281 15282 char **foo = (char *[]) { "x", "y", "z" }; 15283 15284 Compound literals for scalar types and union types are is also 15285 allowed, but then the compound literal is equivalent to a cast. 15286 15287 As a GNU extension, GCC allows initialization of objects with static 15288 storage duration by compound literals (which is not possible in ISO 15289 C99, because the initializer is not a constant). It is handled as if 15290 the object was initialized only with the bracket enclosed list if the 15291 types of the compound literal and the object match. The initializer 15292 list of the compound literal must be constant. If the object being 15293 initialized has array type of unknown size, the size is determined by 15294 compound literal size. 15295 15296 static struct foo x = (struct foo) {1, 'a', 'b'}; 15297 static int y[] = (int []) {1, 2, 3}; 15298 static int z[] = (int [3]) {1}; 15299 15300 The above lines are equivalent to the following: 15301 static struct foo x = {1, 'a', 'b'}; 15302 static int y[] = {1, 2, 3}; 15303 static int z[] = {1, 0, 0}; 15304 15305 15306 File: gcc.info, Node: Designated Inits, Next: Cast to Union, Prev: Compound Literals, Up: C Extensions 15307 15308 5.21 Designated Initializers 15309 ============================ 15310 15311 Standard C89 requires the elements of an initializer to appear in a 15312 fixed order, the same as the order of the elements in the array or 15313 structure being initialized. 15314 15315 In ISO C99 you can give the elements in any order, specifying the array 15316 indices or structure field names they apply to, and GNU C allows this as 15317 an extension in C89 mode as well. This extension is not implemented in 15318 GNU C++. 15319 15320 To specify an array index, write `[INDEX] =' before the element value. 15321 For example, 15322 15323 int a[6] = { [4] = 29, [2] = 15 }; 15324 15325 is equivalent to 15326 15327 int a[6] = { 0, 0, 15, 0, 29, 0 }; 15328 15329 The index values must be constant expressions, even if the array being 15330 initialized is automatic. 15331 15332 An alternative syntax for this which has been obsolete since GCC 2.5 15333 but GCC still accepts is to write `[INDEX]' before the element value, 15334 with no `='. 15335 15336 To initialize a range of elements to the same value, write `[FIRST ... 15337 LAST] = VALUE'. This is a GNU extension. For example, 15338 15339 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 15340 15341 If the value in it has side-effects, the side-effects will happen only 15342 once, not for each initialized field by the range initializer. 15343 15344 Note that the length of the array is the highest value specified plus 15345 one. 15346 15347 In a structure initializer, specify the name of a field to initialize 15348 with `.FIELDNAME =' before the element value. For example, given the 15349 following structure, 15350 15351 struct point { int x, y; }; 15352 15353 the following initialization 15354 15355 struct point p = { .y = yvalue, .x = xvalue }; 15356 15357 is equivalent to 15358 15359 struct point p = { xvalue, yvalue }; 15360 15361 Another syntax which has the same meaning, obsolete since GCC 2.5, is 15362 `FIELDNAME:', as shown here: 15363 15364 struct point p = { y: yvalue, x: xvalue }; 15365 15366 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 15367 also use a designator (or the obsolete colon syntax) when initializing 15368 a union, to specify which element of the union should be used. For 15369 example, 15370 15371 union foo { int i; double d; }; 15372 15373 union foo f = { .d = 4 }; 15374 15375 will convert 4 to a `double' to store it in the union using the second 15376 element. By contrast, casting 4 to type `union foo' would store it 15377 into the union as the integer `i', since it is an integer. (*Note Cast 15378 to Union::.) 15379 15380 You can combine this technique of naming elements with ordinary C 15381 initialization of successive elements. Each initializer element that 15382 does not have a designator applies to the next consecutive element of 15383 the array or structure. For example, 15384 15385 int a[6] = { [1] = v1, v2, [4] = v4 }; 15386 15387 is equivalent to 15388 15389 int a[6] = { 0, v1, v2, 0, v4, 0 }; 15390 15391 Labeling the elements of an array initializer is especially useful 15392 when the indices are characters or belong to an `enum' type. For 15393 example: 15394 15395 int whitespace[256] 15396 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 15397 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 15398 15399 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 15400 before an `=' to specify a nested subobject to initialize; the list is 15401 taken relative to the subobject corresponding to the closest 15402 surrounding brace pair. For example, with the `struct point' 15403 declaration above: 15404 15405 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 15406 15407 If the same field is initialized multiple times, it will have value from 15408 the last initialization. If any such overridden initialization has 15409 side-effect, it is unspecified whether the side-effect happens or not. 15410 Currently, GCC will discard them and issue a warning. 15411 15412 15413 File: gcc.info, Node: Case Ranges, Next: Mixed Declarations, Prev: Cast to Union, Up: C Extensions 15414 15415 5.22 Case Ranges 15416 ================ 15417 15418 You can specify a range of consecutive values in a single `case' label, 15419 like this: 15420 15421 case LOW ... HIGH: 15422 15423 This has the same effect as the proper number of individual `case' 15424 labels, one for each integer value from LOW to HIGH, inclusive. 15425 15426 This feature is especially useful for ranges of ASCII character codes: 15427 15428 case 'A' ... 'Z': 15429 15430 *Be careful:* Write spaces around the `...', for otherwise it may be 15431 parsed wrong when you use it with integer values. For example, write 15432 this: 15433 15434 case 1 ... 5: 15435 15436 rather than this: 15437 15438 case 1...5: 15439 15440 15441 File: gcc.info, Node: Cast to Union, Next: Case Ranges, Prev: Designated Inits, Up: C Extensions 15442 15443 5.23 Cast to a Union Type 15444 ========================= 15445 15446 A cast to union type is similar to other casts, except that the type 15447 specified is a union type. You can specify the type either with `union 15448 TAG' or with a typedef name. A cast to union is actually a constructor 15449 though, not a cast, and hence does not yield an lvalue like normal 15450 casts. (*Note Compound Literals::.) 15451 15452 The types that may be cast to the union type are those of the members 15453 of the union. Thus, given the following union and variables: 15454 15455 union foo { int i; double d; }; 15456 int x; 15457 double y; 15458 15459 both `x' and `y' can be cast to type `union foo'. 15460 15461 Using the cast as the right-hand side of an assignment to a variable of 15462 union type is equivalent to storing in a member of the union: 15463 15464 union foo u; 15465 /* ... */ 15466 u = (union foo) x == u.i = x 15467 u = (union foo) y == u.d = y 15468 15469 You can also use the union cast as a function argument: 15470 15471 void hack (union foo); 15472 /* ... */ 15473 hack ((union foo) x); 15474 15475 15476 File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Case Ranges, Up: C Extensions 15477 15478 5.24 Mixed Declarations and Code 15479 ================================ 15480 15481 ISO C99 and ISO C++ allow declarations and code to be freely mixed 15482 within compound statements. As an extension, GCC also allows this in 15483 C89 mode. For example, you could do: 15484 15485 int i; 15486 /* ... */ 15487 i++; 15488 int j = i + 2; 15489 15490 Each identifier is visible from where it is declared until the end of 15491 the enclosing block. 15492 15493 15494 File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 15495 15496 5.25 Declaring Attributes of Functions 15497 ====================================== 15498 15499 In GNU C, you declare certain things about functions called in your 15500 program which help the compiler optimize function calls and check your 15501 code more carefully. 15502 15503 The keyword `__attribute__' allows you to specify special attributes 15504 when making a declaration. This keyword is followed by an attribute 15505 specification inside double parentheses. The following attributes are 15506 currently defined for functions on all targets: `noreturn', 15507 `returns_twice', `noinline', `always_inline', `flatten', `pure', 15508 `const', `nothrow', `sentinel', `format', `format_arg', 15509 `no_instrument_function', `section', `constructor', `destructor', 15510 `used', `unused', `deprecated', `weak', `malloc', `alias', 15511 `warn_unused_result', `nonnull', `gnu_inline' and `externally_visible'. 15512 Several other attributes are defined for functions on particular 15513 target systems. Other attributes, including `section' are supported 15514 for variables declarations (*note Variable Attributes::) and for types 15515 (*note Type Attributes::). 15516 15517 You may also specify attributes with `__' preceding and following each 15518 keyword. This allows you to use them in header files without being 15519 concerned about a possible macro of the same name. For example, you 15520 may use `__noreturn__' instead of `noreturn'. 15521 15522 *Note Attribute Syntax::, for details of the exact syntax for using 15523 attributes. 15524 15525 `alias ("TARGET")' 15526 The `alias' attribute causes the declaration to be emitted as an 15527 alias for another symbol, which must be specified. For instance, 15528 15529 void __f () { /* Do something. */; } 15530 void f () __attribute__ ((weak, alias ("__f"))); 15531 15532 defines `f' to be a weak alias for `__f'. In C++, the mangled 15533 name for the target must be used. It is an error if `__f' is not 15534 defined in the same translation unit. 15535 15536 Not all target machines support this attribute. 15537 15538 `always_inline' 15539 Generally, functions are not inlined unless optimization is 15540 specified. For functions declared inline, this attribute inlines 15541 the function even if no optimization level was specified. 15542 15543 `gnu_inline' 15544 This attribute should be used with a function which is also 15545 declared with the `inline' keyword. It directs GCC to treat the 15546 function as if it were defined in gnu89 mode even when compiling 15547 in C99 or gnu99 mode. 15548 15549 If the function is declared `extern', then this definition of the 15550 function is used only for inlining. In no case is the function 15551 compiled as a standalone function, not even if you take its address 15552 explicitly. Such an address becomes an external reference, as if 15553 you had only declared the function, and had not defined it. This 15554 has almost the effect of a macro. The way to use this is to put a 15555 function definition in a header file with this attribute, and put 15556 another copy of the function, without `extern', in a library file. 15557 The definition in the header file will cause most calls to the 15558 function to be inlined. If any uses of the function remain, they 15559 will refer to the single copy in the library. Note that the two 15560 definitions of the functions need not be precisely the same, 15561 although if they do not have the same effect your program may 15562 behave oddly. 15563 15564 If the function is neither `extern' nor `static', then the 15565 function is compiled as a standalone function, as well as being 15566 inlined where possible. 15567 15568 This is how GCC traditionally handled functions declared `inline'. 15569 Since ISO C99 specifies a different semantics for `inline', this 15570 function attribute is provided as a transition measure and as a 15571 useful feature in its own right. This attribute is available in 15572 GCC 4.1.3 and later. It is available if either of the 15573 preprocessor macros `__GNUC_GNU_INLINE__' or 15574 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 15575 As Fast As a Macro: Inline. 15576 15577 Note that since the first version of GCC to support C99 inline 15578 semantics is 4.3, earlier versions of GCC which accept this 15579 attribute effectively assume that it is always present, whether or 15580 not it is given explicitly. In versions prior to 4.3, the only 15581 effect of explicitly including it is to disable warnings about 15582 using inline functions in C99 mode. 15583 15584 `flatten' 15585 Generally, inlining into a function is limited. For a function 15586 marked with this attribute, every call inside this function will 15587 be inlined, if possible. Whether the function itself is 15588 considered for inlining depends on its size and the current 15589 inlining parameters. The `flatten' attribute only works reliably 15590 in unit-at-a-time mode. 15591 15592 `cdecl' 15593 On the Intel 386, the `cdecl' attribute causes the compiler to 15594 assume that the calling function will pop off the stack space used 15595 to pass arguments. This is useful to override the effects of the 15596 `-mrtd' switch. 15597 15598 `const' 15599 Many functions do not examine any values except their arguments, 15600 and have no effects except the return value. Basically this is 15601 just slightly more strict class than the `pure' attribute below, 15602 since function is not allowed to read global memory. 15603 15604 Note that a function that has pointer arguments and examines the 15605 data pointed to must _not_ be declared `const'. Likewise, a 15606 function that calls a non-`const' function usually must not be 15607 `const'. It does not make sense for a `const' function to return 15608 `void'. 15609 15610 The attribute `const' is not implemented in GCC versions earlier 15611 than 2.5. An alternative way to declare that a function has no 15612 side effects, which works in the current version and in some older 15613 versions, is as follows: 15614 15615 typedef int intfn (); 15616 15617 extern const intfn square; 15618 15619 This approach does not work in GNU C++ from 2.6.0 on, since the 15620 language specifies that the `const' must be attached to the return 15621 value. 15622 15623 `constructor' 15624 `destructor' 15625 The `constructor' attribute causes the function to be called 15626 automatically before execution enters `main ()'. Similarly, the 15627 `destructor' attribute causes the function to be called 15628 automatically after `main ()' has completed or `exit ()' has been 15629 called. Functions with these attributes are useful for 15630 initializing data that will be used implicitly during the 15631 execution of the program. 15632 15633 These attributes are not currently implemented for Objective-C. 15634 15635 `deprecated' 15636 The `deprecated' attribute results in a warning if the function is 15637 used anywhere in the source file. This is useful when identifying 15638 functions that are expected to be removed in a future version of a 15639 program. The warning also includes the location of the declaration 15640 of the deprecated function, to enable users to easily find further 15641 information about why the function is deprecated, or what they 15642 should do instead. Note that the warnings only occurs for uses: 15643 15644 int old_fn () __attribute__ ((deprecated)); 15645 int old_fn (); 15646 int (*fn_ptr)() = old_fn; 15647 15648 results in a warning on line 3 but not line 2. 15649 15650 The `deprecated' attribute can also be used for variables and 15651 types (*note Variable Attributes::, *note Type Attributes::.) 15652 15653 `dllexport' 15654 On Microsoft Windows targets and Symbian OS targets the 15655 `dllexport' attribute causes the compiler to provide a global 15656 pointer to a pointer in a DLL, so that it can be referenced with 15657 the `dllimport' attribute. On Microsoft Windows targets, the 15658 pointer name is formed by combining `_imp__' and the function or 15659 variable name. 15660 15661 You can use `__declspec(dllexport)' as a synonym for 15662 `__attribute__ ((dllexport))' for compatibility with other 15663 compilers. 15664 15665 On systems that support the `visibility' attribute, this attribute 15666 also implies "default" visibility, unless a `visibility' attribute 15667 is explicitly specified. You should avoid the use of `dllexport' 15668 with "hidden" or "internal" visibility; in the future GCC may 15669 issue an error for those cases. 15670 15671 Currently, the `dllexport' attribute is ignored for inlined 15672 functions, unless the `-fkeep-inline-functions' flag has been 15673 used. The attribute is also ignored for undefined symbols. 15674 15675 When applied to C++ classes, the attribute marks defined 15676 non-inlined member functions and static data members as exports. 15677 Static consts initialized in-class are not marked unless they are 15678 also defined out-of-class. 15679 15680 For Microsoft Windows targets there are alternative methods for 15681 including the symbol in the DLL's export table such as using a 15682 `.def' file with an `EXPORTS' section or, with GNU ld, using the 15683 `--export-all' linker flag. 15684 15685 `dllimport' 15686 On Microsoft Windows and Symbian OS targets, the `dllimport' 15687 attribute causes the compiler to reference a function or variable 15688 via a global pointer to a pointer that is set up by the DLL 15689 exporting the symbol. The attribute implies `extern' storage. On 15690 Microsoft Windows targets, the pointer name is formed by combining 15691 `_imp__' and the function or variable name. 15692 15693 You can use `__declspec(dllimport)' as a synonym for 15694 `__attribute__ ((dllimport))' for compatibility with other 15695 compilers. 15696 15697 Currently, the attribute is ignored for inlined functions. If the 15698 attribute is applied to a symbol _definition_, an error is 15699 reported. If a symbol previously declared `dllimport' is later 15700 defined, the attribute is ignored in subsequent references, and a 15701 warning is emitted. The attribute is also overridden by a 15702 subsequent declaration as `dllexport'. 15703 15704 When applied to C++ classes, the attribute marks non-inlined 15705 member functions and static data members as imports. However, the 15706 attribute is ignored for virtual methods to allow creation of 15707 vtables using thunks. 15708 15709 On the SH Symbian OS target the `dllimport' attribute also has 15710 another affect--it can cause the vtable and run-time type 15711 information for a class to be exported. This happens when the 15712 class has a dllimport'ed constructor or a non-inline, non-pure 15713 virtual function and, for either of those two conditions, the 15714 class also has a inline constructor or destructor and has a key 15715 function that is defined in the current translation unit. 15716 15717 For Microsoft Windows based targets the use of the `dllimport' 15718 attribute on functions is not necessary, but provides a small 15719 performance benefit by eliminating a thunk in the DLL. The use of 15720 the `dllimport' attribute on imported variables was required on 15721 older versions of the GNU linker, but can now be avoided by 15722 passing the `--enable-auto-import' switch to the GNU linker. As 15723 with functions, using the attribute for a variable eliminates a 15724 thunk in the DLL. 15725 15726 One drawback to using this attribute is that a pointer to a 15727 function or variable marked as `dllimport' cannot be used as a 15728 constant address. On Microsoft Windows targets, the attribute can 15729 be disabled for functions by setting the `-mnop-fun-dllimport' 15730 flag. 15731 15732 `eightbit_data' 15733 Use this attribute on the H8/300, H8/300H, and H8S to indicate 15734 that the specified variable should be placed into the eight bit 15735 data section. The compiler will generate more efficient code for 15736 certain operations on data in the eight bit data area. Note the 15737 eight bit data area is limited to 256 bytes of data. 15738 15739 You must use GAS and GLD from GNU binutils version 2.7 or later for 15740 this attribute to work correctly. 15741 15742 `exception_handler' 15743 Use this attribute on the Blackfin to indicate that the specified 15744 function is an exception handler. The compiler will generate 15745 function entry and exit sequences suitable for use in an exception 15746 handler when this attribute is present. 15747 15748 `far' 15749 On 68HC11 and 68HC12 the `far' attribute causes the compiler to 15750 use a calling convention that takes care of switching memory banks 15751 when entering and leaving a function. This calling convention is 15752 also the default when using the `-mlong-calls' option. 15753 15754 On 68HC12 the compiler will use the `call' and `rtc' instructions 15755 to call and return from a function. 15756 15757 On 68HC11 the compiler will generate a sequence of instructions to 15758 invoke a board-specific routine to switch the memory bank and call 15759 the real function. The board-specific routine simulates a `call'. 15760 At the end of a function, it will jump to a board-specific routine 15761 instead of using `rts'. The board-specific return routine 15762 simulates the `rtc'. 15763 15764 `fastcall' 15765 On the Intel 386, the `fastcall' attribute causes the compiler to 15766 pass the first argument (if of integral type) in the register ECX 15767 and the second argument (if of integral type) in the register EDX. 15768 Subsequent and other typed arguments are passed on the stack. 15769 The called function will pop the arguments off the stack. If the 15770 number of arguments is variable all arguments are pushed on the 15771 stack. 15772 15773 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 15774 The `format' attribute specifies that a function takes `printf', 15775 `scanf', `strftime' or `strfmon' style arguments which should be 15776 type-checked against a format string. For example, the 15777 declaration: 15778 15779 extern int 15780 my_printf (void *my_object, const char *my_format, ...) 15781 __attribute__ ((format (printf, 2, 3))); 15782 15783 causes the compiler to check the arguments in calls to `my_printf' 15784 for consistency with the `printf' style format string argument 15785 `my_format'. 15786 15787 The parameter ARCHETYPE determines how the format string is 15788 interpreted, and should be `printf', `scanf', `strftime' or 15789 `strfmon'. (You can also use `__printf__', `__scanf__', 15790 `__strftime__' or `__strfmon__'.) The parameter STRING-INDEX 15791 specifies which argument is the format string argument (starting 15792 from 1), while FIRST-TO-CHECK is the number of the first argument 15793 to check against the format string. For functions where the 15794 arguments are not available to be checked (such as `vprintf'), 15795 specify the third parameter as zero. In this case the compiler 15796 only checks the format string for consistency. For `strftime' 15797 formats, the third parameter is required to be zero. Since 15798 non-static C++ methods have an implicit `this' argument, the 15799 arguments of such methods should be counted from two, not one, when 15800 giving values for STRING-INDEX and FIRST-TO-CHECK. 15801 15802 In the example above, the format string (`my_format') is the second 15803 argument of the function `my_print', and the arguments to check 15804 start with the third argument, so the correct parameters for the 15805 format attribute are 2 and 3. 15806 15807 The `format' attribute allows you to identify your own functions 15808 which take format strings as arguments, so that GCC can check the 15809 calls to these functions for errors. The compiler always (unless 15810 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 15811 standard library functions `printf', `fprintf', `sprintf', 15812 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 15813 `vsprintf' whenever such warnings are requested (using 15814 `-Wformat'), so there is no need to modify the header file 15815 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 15816 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 15817 strictly conforming C standard modes, the X/Open function 15818 `strfmon' is also checked as are `printf_unlocked' and 15819 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 15820 Dialect Options. 15821 15822 The target may provide additional types of format checks. *Note 15823 Format Checks Specific to Particular Target Machines: Target 15824 Format Checks. 15825 15826 `format_arg (STRING-INDEX)' 15827 The `format_arg' attribute specifies that a function takes a format 15828 string for a `printf', `scanf', `strftime' or `strfmon' style 15829 function and modifies it (for example, to translate it into 15830 another language), so the result can be passed to a `printf', 15831 `scanf', `strftime' or `strfmon' style function (with the 15832 remaining arguments to the format function the same as they would 15833 have been for the unmodified string). For example, the 15834 declaration: 15835 15836 extern char * 15837 my_dgettext (char *my_domain, const char *my_format) 15838 __attribute__ ((format_arg (2))); 15839 15840 causes the compiler to check the arguments in calls to a `printf', 15841 `scanf', `strftime' or `strfmon' type function, whose format 15842 string argument is a call to the `my_dgettext' function, for 15843 consistency with the format string argument `my_format'. If the 15844 `format_arg' attribute had not been specified, all the compiler 15845 could tell in such calls to format functions would be that the 15846 format string argument is not constant; this would generate a 15847 warning when `-Wformat-nonliteral' is used, but the calls could 15848 not be checked without the attribute. 15849 15850 The parameter STRING-INDEX specifies which argument is the format 15851 string argument (starting from one). Since non-static C++ methods 15852 have an implicit `this' argument, the arguments of such methods 15853 should be counted from two. 15854 15855 The `format-arg' attribute allows you to identify your own 15856 functions which modify format strings, so that GCC can check the 15857 calls to `printf', `scanf', `strftime' or `strfmon' type function 15858 whose operands are a call to one of your own function. The 15859 compiler always treats `gettext', `dgettext', and `dcgettext' in 15860 this manner except when strict ISO C support is requested by 15861 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 15862 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 15863 Dialect Options. 15864 15865 `function_vector' 15866 Use this attribute on the H8/300, H8/300H, and H8S to indicate 15867 that the specified function should be called through the function 15868 vector. Calling a function through the function vector will 15869 reduce code size, however; the function vector has a limited size 15870 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 15871 and H8S) and shares space with the interrupt vector. 15872 15873 You must use GAS and GLD from GNU binutils version 2.7 or later for 15874 this attribute to work correctly. 15875 15876 `interrupt' 15877 Use this attribute on the ARM, AVR, C4x, CRX, M32C, M32R/D, MS1, 15878 and Xstormy16 ports to indicate that the specified function is an 15879 interrupt handler. The compiler will generate function entry and 15880 exit sequences suitable for use in an interrupt handler when this 15881 attribute is present. 15882 15883 Note, interrupt handlers for the Blackfin, m68k, H8/300, H8/300H, 15884 H8S, and SH processors can be specified via the 15885 `interrupt_handler' attribute. 15886 15887 Note, on the AVR, interrupts will be enabled inside the function. 15888 15889 Note, for the ARM, you can specify the kind of interrupt to be 15890 handled by adding an optional parameter to the interrupt attribute 15891 like this: 15892 15893 void f () __attribute__ ((interrupt ("IRQ"))); 15894 15895 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT 15896 and UNDEF. 15897 15898 `interrupt_handler' 15899 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 15900 and SH to indicate that the specified function is an interrupt 15901 handler. The compiler will generate function entry and exit 15902 sequences suitable for use in an interrupt handler when this 15903 attribute is present. 15904 15905 `kspisusp' 15906 When used together with `interrupt_handler', `exception_handler' 15907 or `nmi_handler', code will be generated to load the stack pointer 15908 from the USP register in the function prologue. 15909 15910 `long_call/short_call' 15911 This attribute specifies how a particular function is called on 15912 ARM. Both attributes override the `-mlong-calls' (*note ARM 15913 Options::) command line switch and `#pragma long_calls' settings. 15914 The `long_call' attribute indicates that the function might be far 15915 away from the call site and require a different (more expensive) 15916 calling sequence. The `short_call' attribute always places the 15917 offset to the function from the call site into the `BL' 15918 instruction directly. 15919 15920 `longcall/shortcall' 15921 On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute 15922 indicates that the function might be far away from the call site 15923 and require a different (more expensive) calling sequence. The 15924 `shortcall' attribute indicates that the function is always close 15925 enough for the shorter calling sequence to be used. These 15926 attributes override both the `-mlongcall' switch and, on the 15927 RS/6000 and PowerPC, the `#pragma longcall' setting. 15928 15929 *Note RS/6000 and PowerPC Options::, for more information on 15930 whether long calls are necessary. 15931 15932 `long_call' 15933 This attribute specifies how a particular function is called on 15934 MIPS. The attribute overrides the `-mlong-calls' (*note MIPS 15935 Options::) command line switch. This attribute causes the 15936 compiler to always call the function by first loading its address 15937 into a register, and then using the contents of that register. 15938 15939 `malloc' 15940 The `malloc' attribute is used to tell the compiler that a function 15941 may be treated as if any non-`NULL' pointer it returns cannot 15942 alias any other pointer valid when the function returns. This 15943 will often improve optimization. Standard functions with this 15944 property include `malloc' and `calloc'. `realloc'-like functions 15945 have this property as long as the old pointer is never referred to 15946 (including comparing it to the new pointer) after the function 15947 returns a non-`NULL' value. 15948 15949 `model (MODEL-NAME)' 15950 On the M32R/D, use this attribute to set the addressability of an 15951 object, and of the code generated for a function. The identifier 15952 MODEL-NAME is one of `small', `medium', or `large', representing 15953 each of the code models. 15954 15955 Small model objects live in the lower 16MB of memory (so that their 15956 addresses can be loaded with the `ld24' instruction), and are 15957 callable with the `bl' instruction. 15958 15959 Medium model objects may live anywhere in the 32-bit address space 15960 (the compiler will generate `seth/add3' instructions to load their 15961 addresses), and are callable with the `bl' instruction. 15962 15963 Large model objects may live anywhere in the 32-bit address space 15964 (the compiler will generate `seth/add3' instructions to load their 15965 addresses), and may not be reachable with the `bl' instruction 15966 (the compiler will generate the much slower `seth/add3/jl' 15967 instruction sequence). 15968 15969 On IA-64, use this attribute to set the addressability of an 15970 object. At present, the only supported identifier for MODEL-NAME 15971 is `small', indicating addressability via "small" (22-bit) 15972 addresses (so that their addresses can be loaded with the `addl' 15973 instruction). Caveat: such addressing is by definition not 15974 position independent and hence this attribute must not be used for 15975 objects defined by shared libraries. 15976 15977 `naked' 15978 Use this attribute on the ARM, AVR, C4x and IP2K ports to indicate 15979 that the specified function does not need prologue/epilogue 15980 sequences generated by the compiler. It is up to the programmer 15981 to provide these sequences. 15982 15983 `near' 15984 On 68HC11 and 68HC12 the `near' attribute causes the compiler to 15985 use the normal calling convention based on `jsr' and `rts'. This 15986 attribute can be used to cancel the effect of the `-mlong-calls' 15987 option. 15988 15989 `nesting' 15990 Use this attribute together with `interrupt_handler', 15991 `exception_handler' or `nmi_handler' to indicate that the function 15992 entry code should enable nested interrupts or exceptions. 15993 15994 `nmi_handler' 15995 Use this attribute on the Blackfin to indicate that the specified 15996 function is an NMI handler. The compiler will generate function 15997 entry and exit sequences suitable for use in an NMI handler when 15998 this attribute is present. 15999 16000 `no_instrument_function' 16001 If `-finstrument-functions' is given, profiling function calls will 16002 be generated at entry and exit of most user-compiled functions. 16003 Functions with this attribute will not be so instrumented. 16004 16005 `noinline' 16006 This function attribute prevents a function from being considered 16007 for inlining. 16008 16009 `nonnull (ARG-INDEX, ...)' 16010 The `nonnull' attribute specifies that some function parameters 16011 should be non-null pointers. For instance, the declaration: 16012 16013 extern void * 16014 my_memcpy (void *dest, const void *src, size_t len) 16015 __attribute__((nonnull (1, 2))); 16016 16017 causes the compiler to check that, in calls to `my_memcpy', 16018 arguments DEST and SRC are non-null. If the compiler determines 16019 that a null pointer is passed in an argument slot marked as 16020 non-null, and the `-Wnonnull' option is enabled, a warning is 16021 issued. The compiler may also choose to make optimizations based 16022 on the knowledge that certain function arguments will not be null. 16023 16024 If no argument index list is given to the `nonnull' attribute, all 16025 pointer arguments are marked as non-null. To illustrate, the 16026 following declaration is equivalent to the previous example: 16027 16028 extern void * 16029 my_memcpy (void *dest, const void *src, size_t len) 16030 __attribute__((nonnull)); 16031 16032 `noreturn' 16033 A few standard library functions, such as `abort' and `exit', 16034 cannot return. GCC knows this automatically. Some programs define 16035 their own functions that never return. You can declare them 16036 `noreturn' to tell the compiler this fact. For example, 16037 16038 void fatal () __attribute__ ((noreturn)); 16039 16040 void 16041 fatal (/* ... */) 16042 { 16043 /* ... */ /* Print error message. */ /* ... */ 16044 exit (1); 16045 } 16046 16047 The `noreturn' keyword tells the compiler to assume that `fatal' 16048 cannot return. It can then optimize without regard to what would 16049 happen if `fatal' ever did return. This makes slightly better 16050 code. More importantly, it helps avoid spurious warnings of 16051 uninitialized variables. 16052 16053 The `noreturn' keyword does not affect the exceptional path when 16054 that applies: a `noreturn'-marked function may still return to the 16055 caller by throwing an exception or calling `longjmp'. 16056 16057 Do not assume that registers saved by the calling function are 16058 restored before calling the `noreturn' function. 16059 16060 It does not make sense for a `noreturn' function to have a return 16061 type other than `void'. 16062 16063 The attribute `noreturn' is not implemented in GCC versions 16064 earlier than 2.5. An alternative way to declare that a function 16065 does not return, which works in the current version and in some 16066 older versions, is as follows: 16067 16068 typedef void voidfn (); 16069 16070 volatile voidfn fatal; 16071 16072 This approach does not work in GNU C++. 16073 16074 `nothrow' 16075 The `nothrow' attribute is used to inform the compiler that a 16076 function cannot throw an exception. For example, most functions in 16077 the standard C library can be guaranteed not to throw an exception 16078 with the notable exceptions of `qsort' and `bsearch' that take 16079 function pointer arguments. The `nothrow' attribute is not 16080 implemented in GCC versions earlier than 3.3. 16081 16082 `pure' 16083 Many functions have no effects except the return value and their 16084 return value depends only on the parameters and/or global 16085 variables. Such a function can be subject to common subexpression 16086 elimination and loop optimization just as an arithmetic operator 16087 would be. These functions should be declared with the attribute 16088 `pure'. For example, 16089 16090 int square (int) __attribute__ ((pure)); 16091 16092 says that the hypothetical function `square' is safe to call fewer 16093 times than the program says. 16094 16095 Some of common examples of pure functions are `strlen' or `memcmp'. 16096 Interesting non-pure functions are functions with infinite loops 16097 or those depending on volatile memory or other system resource, 16098 that may change between two consecutive calls (such as `feof' in a 16099 multithreading environment). 16100 16101 The attribute `pure' is not implemented in GCC versions earlier 16102 than 2.96. 16103 16104 `regparm (NUMBER)' 16105 On the Intel 386, the `regparm' attribute causes the compiler to 16106 pass arguments number one to NUMBER if they are of integral type 16107 in registers EAX, EDX, and ECX instead of on the stack. Functions 16108 that take a variable number of arguments will continue to be 16109 passed all of their arguments on the stack. 16110 16111 Beware that on some ELF systems this attribute is unsuitable for 16112 global functions in shared libraries with lazy binding (which is 16113 the default). Lazy binding will send the first call via resolving 16114 code in the loader, which might assume EAX, EDX and ECX can be 16115 clobbered, as per the standard calling conventions. Solaris 8 is 16116 affected by this. GNU systems with GLIBC 2.1 or higher, and 16117 FreeBSD, are believed to be safe since the loaders there save all 16118 registers. (Lazy binding can be disabled with the linker or the 16119 loader if desired, to avoid the problem.) 16120 16121 `sseregparm' 16122 On the Intel 386 with SSE support, the `sseregparm' attribute 16123 causes the compiler to pass up to 3 floating point arguments in 16124 SSE registers instead of on the stack. Functions that take a 16125 variable number of arguments will continue to pass all of their 16126 floating point arguments on the stack. 16127 16128 `force_align_arg_pointer' 16129 On the Intel x86, the `force_align_arg_pointer' attribute may be 16130 applied to individual function definitions, generating an alternate 16131 prologue and epilogue that realigns the runtime stack. This 16132 supports mixing legacy codes that run with a 4-byte aligned stack 16133 with modern codes that keep a 16-byte stack for SSE compatibility. 16134 The alternate prologue and epilogue are slower and bigger than 16135 the regular ones, and the alternate prologue requires a scratch 16136 register; this lowers the number of registers available if used in 16137 conjunction with the `regparm' attribute. The 16138 `force_align_arg_pointer' attribute is incompatible with nested 16139 functions; this is considered a hard error. 16140 16141 `returns_twice' 16142 The `returns_twice' attribute tells the compiler that a function 16143 may return more than one time. The compiler will ensure that all 16144 registers are dead before calling such a function and will emit a 16145 warning about the variables that may be clobbered after the second 16146 return from the function. Examples of such functions are `setjmp' 16147 and `vfork'. The `longjmp'-like counterpart of such function, if 16148 any, might need to be marked with the `noreturn' attribute. 16149 16150 `saveall' 16151 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 16152 indicate that all registers except the stack pointer should be 16153 saved in the prologue regardless of whether they are used or not. 16154 16155 `section ("SECTION-NAME")' 16156 Normally, the compiler places the code it generates in the `text' 16157 section. Sometimes, however, you need additional sections, or you 16158 need certain particular functions to appear in special sections. 16159 The `section' attribute specifies that a function lives in a 16160 particular section. For example, the declaration: 16161 16162 extern void foobar (void) __attribute__ ((section ("bar"))); 16163 16164 puts the function `foobar' in the `bar' section. 16165 16166 Some file formats do not support arbitrary sections so the 16167 `section' attribute is not available on all platforms. If you 16168 need to map the entire contents of a module to a particular 16169 section, consider using the facilities of the linker instead. 16170 16171 `sentinel' 16172 This function attribute ensures that a parameter in a function 16173 call is an explicit `NULL'. The attribute is only valid on 16174 variadic functions. By default, the sentinel is located at 16175 position zero, the last parameter of the function call. If an 16176 optional integer position argument P is supplied to the attribute, 16177 the sentinel must be located at position P counting backwards from 16178 the end of the argument list. 16179 16180 __attribute__ ((sentinel)) 16181 is equivalent to 16182 __attribute__ ((sentinel(0))) 16183 16184 The attribute is automatically set with a position of 0 for the 16185 built-in functions `execl' and `execlp'. The built-in function 16186 `execle' has the attribute set with a position of 1. 16187 16188 A valid `NULL' in this context is defined as zero with any pointer 16189 type. If your system defines the `NULL' macro with an integer type 16190 then you need to add an explicit cast. GCC replaces `stddef.h' 16191 with a copy that redefines NULL appropriately. 16192 16193 The warnings for missing or incorrect sentinels are enabled with 16194 `-Wformat'. 16195 16196 `short_call' 16197 See long_call/short_call. 16198 16199 `shortcall' 16200 See longcall/shortcall. 16201 16202 `signal' 16203 Use this attribute on the AVR to indicate that the specified 16204 function is a signal handler. The compiler will generate function 16205 entry and exit sequences suitable for use in a signal handler when 16206 this attribute is present. Interrupts will be disabled inside the 16207 function. 16208 16209 `sp_switch' 16210 Use this attribute on the SH to indicate an `interrupt_handler' 16211 function should switch to an alternate stack. It expects a string 16212 argument that names a global variable holding the address of the 16213 alternate stack. 16214 16215 void *alt_stack; 16216 void f () __attribute__ ((interrupt_handler, 16217 sp_switch ("alt_stack"))); 16218 16219 `stdcall' 16220 On the Intel 386, the `stdcall' attribute causes the compiler to 16221 assume that the called function will pop off the stack space used 16222 to pass arguments, unless it takes a variable number of arguments. 16223 16224 `tiny_data' 16225 Use this attribute on the H8/300H and H8S to indicate that the 16226 specified variable should be placed into the tiny data section. 16227 The compiler will generate more efficient code for loads and stores 16228 on data in the tiny data section. Note the tiny data area is 16229 limited to slightly under 32kbytes of data. 16230 16231 `trap_exit' 16232 Use this attribute on the SH for an `interrupt_handler' to return 16233 using `trapa' instead of `rte'. This attribute expects an integer 16234 argument specifying the trap number to be used. 16235 16236 `unused' 16237 This attribute, attached to a function, means that the function is 16238 meant to be possibly unused. GCC will not produce a warning for 16239 this function. 16240 16241 `used' 16242 This attribute, attached to a function, means that code must be 16243 emitted for the function even if it appears that the function is 16244 not referenced. This is useful, for example, when the function is 16245 referenced only in inline assembly. 16246 16247 `visibility ("VISIBILITY_TYPE")' 16248 This attribute affects the linkage of the declaration to which it 16249 is attached. There are four supported VISIBILITY_TYPE values: 16250 default, hidden, protected or internal visibility. 16251 16252 void __attribute__ ((visibility ("protected"))) 16253 f () { /* Do something. */; } 16254 int i __attribute__ ((visibility ("hidden"))); 16255 16256 The possible values of VISIBILITY_TYPE correspond to the 16257 visibility settings in the ELF gABI. 16258 16259 "default" 16260 Default visibility is the normal case for the object file 16261 format. This value is available for the visibility attribute 16262 to override other options that may change the assumed 16263 visibility of entities. 16264 16265 On ELF, default visibility means that the declaration is 16266 visible to other modules and, in shared libraries, means that 16267 the declared entity may be overridden. 16268 16269 On Darwin, default visibility means that the declaration is 16270 visible to other modules. 16271 16272 Default visibility corresponds to "external linkage" in the 16273 language. 16274 16275 "hidden" 16276 Hidden visibility indicates that the entity declared will 16277 have a new form of linkage, which we'll call "hidden 16278 linkage". Two declarations of an object with hidden linkage 16279 refer to the same object if they are in the same shared 16280 object. 16281 16282 "internal" 16283 Internal visibility is like hidden visibility, but with 16284 additional processor specific semantics. Unless otherwise 16285 specified by the psABI, GCC defines internal visibility to 16286 mean that a function is _never_ called from another module. 16287 Compare this with hidden functions which, while they cannot 16288 be referenced directly by other modules, can be referenced 16289 indirectly via function pointers. By indicating that a 16290 function cannot be called from outside the module, GCC may 16291 for instance omit the load of a PIC register since it is known 16292 that the calling function loaded the correct value. 16293 16294 "protected" 16295 Protected visibility is like default visibility except that it 16296 indicates that references within the defining module will 16297 bind to the definition in that module. That is, the declared 16298 entity cannot be overridden by another module. 16299 16300 16301 All visibilities are supported on many, but not all, ELF targets 16302 (supported when the assembler supports the `.visibility' 16303 pseudo-op). Default visibility is supported everywhere. Hidden 16304 visibility is supported on Darwin targets. 16305 16306 The visibility attribute should be applied only to declarations 16307 which would otherwise have external linkage. The attribute should 16308 be applied consistently, so that the same entity should not be 16309 declared with different settings of the attribute. 16310 16311 In C++, the visibility attribute applies to types as well as 16312 functions and objects, because in C++ types have linkage. A class 16313 must not have greater visibility than its non-static data member 16314 types and bases, and class members default to the visibility of 16315 their class. Also, a declaration without explicit visibility is 16316 limited to the visibility of its type. 16317 16318 In C++, you can mark member functions and static member variables 16319 of a class with the visibility attribute. This is useful if if 16320 you know a particular method or static member variable should only 16321 be used from one shared object; then you can mark it hidden while 16322 the rest of the class has default visibility. Care must be taken 16323 to avoid breaking the One Definition Rule; for example, it is 16324 usually not useful to mark an inline method as hidden without 16325 marking the whole class as hidden. 16326 16327 A C++ namespace declaration can also have the visibility attribute. 16328 This attribute applies only to the particular namespace body, not 16329 to other definitions of the same namespace; it is equivalent to 16330 using `#pragma GCC visibility' before and after the namespace 16331 definition (*note Visibility Pragmas::). 16332 16333 In C++, if a template argument has limited visibility, this 16334 restriction is implicitly propagated to the template instantiation. 16335 Otherwise, template instantiations and specializations default to 16336 the visibility of their template. 16337 16338 If both the template and enclosing class have explicit visibility, 16339 the visibility from the template is used. 16340 16341 `warn_unused_result' 16342 The `warn_unused_result' attribute causes a warning to be emitted 16343 if a caller of the function with this attribute does not use its 16344 return value. This is useful for functions where not checking the 16345 result is either a security problem or always a bug, such as 16346 `realloc'. 16347 16348 int fn () __attribute__ ((warn_unused_result)); 16349 int foo () 16350 { 16351 if (fn () < 0) return -1; 16352 fn (); 16353 return 0; 16354 } 16355 16356 results in warning on line 5. 16357 16358 `weak' 16359 The `weak' attribute causes the declaration to be emitted as a weak 16360 symbol rather than a global. This is primarily useful in defining 16361 library functions which can be overridden in user code, though it 16362 can also be used with non-function declarations. Weak symbols are 16363 supported for ELF targets, and also for a.out targets when using 16364 the GNU assembler and linker. 16365 16366 `weakref' 16367 `weakref ("TARGET")' 16368 The `weakref' attribute marks a declaration as a weak reference. 16369 Without arguments, it should be accompanied by an `alias' attribute 16370 naming the target symbol. Optionally, the TARGET may be given as 16371 an argument to `weakref' itself. In either case, `weakref' 16372 implicitly marks the declaration as `weak'. Without a TARGET, 16373 given as an argument to `weakref' or to `alias', `weakref' is 16374 equivalent to `weak'. 16375 16376 static int x() __attribute__ ((weakref ("y"))); 16377 /* is equivalent to... */ 16378 static int x() __attribute__ ((weak, weakref, alias ("y"))); 16379 /* and to... */ 16380 static int x() __attribute__ ((weakref)); 16381 static int x() __attribute__ ((alias ("y"))); 16382 16383 A weak reference is an alias that does not by itself require a 16384 definition to be given for the target symbol. If the target 16385 symbol is only referenced through weak references, then the 16386 becomes a `weak' undefined symbol. If it is directly referenced, 16387 however, then such strong references prevail, and a definition 16388 will be required for the symbol, not necessarily in the same 16389 translation unit. 16390 16391 The effect is equivalent to moving all references to the alias to a 16392 separate translation unit, renaming the alias to the aliased 16393 symbol, declaring it as weak, compiling the two separate 16394 translation units and performing a reloadable link on them. 16395 16396 At present, a declaration to which `weakref' is attached can only 16397 be `static'. 16398 16399 `externally_visible' 16400 This attribute, attached to a global variable or function nullify 16401 effect of `-fwhole-program' command line option, so the object 16402 remain visible outside the current compilation unit 16403 16404 16405 You can specify multiple attributes in a declaration by separating them 16406 by commas within the double parentheses or by immediately following an 16407 attribute declaration with another attribute declaration. 16408 16409 Some people object to the `__attribute__' feature, suggesting that ISO 16410 C's `#pragma' should be used instead. At the time `__attribute__' was 16411 designed, there were two reasons for not doing this. 16412 16413 1. It is impossible to generate `#pragma' commands from a macro. 16414 16415 2. There is no telling what the same `#pragma' might mean in another 16416 compiler. 16417 16418 These two reasons applied to almost any application that might have 16419 been proposed for `#pragma'. It was basically a mistake to use 16420 `#pragma' for _anything_. 16421 16422 The ISO C99 standard includes `_Pragma', which now allows pragmas to 16423 be generated from macros. In addition, a `#pragma GCC' namespace is 16424 now in use for GCC-specific pragmas. However, it has been found 16425 convenient to use `__attribute__' to achieve a natural attachment of 16426 attributes to their corresponding declarations, whereas `#pragma GCC' 16427 is of use for constructs that do not naturally form part of the 16428 grammar. *Note Miscellaneous Preprocessing Directives: (cpp)Other 16429 Directives. 16430 16431 16432 File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 16433 16434 5.26 Attribute Syntax 16435 ===================== 16436 16437 This section describes the syntax with which `__attribute__' may be 16438 used, and the constructs to which attribute specifiers bind, for the C 16439 language. Some details may vary for C++ and Objective-C. Because of 16440 infelicities in the grammar for attributes, some forms described here 16441 may not be successfully parsed in all cases. 16442 16443 There are some problems with the semantics of attributes in C++. For 16444 example, there are no manglings for attributes, although they may affect 16445 code generation, so problems may arise when attributed types are used in 16446 conjunction with templates or overloading. Similarly, `typeid' does 16447 not distinguish between types with different attributes. Support for 16448 attributes in C++ may be restricted in future to attributes on 16449 declarations only, but not on nested declarators. 16450 16451 *Note Function Attributes::, for details of the semantics of attributes 16452 applying to functions. *Note Variable Attributes::, for details of the 16453 semantics of attributes applying to variables. *Note Type Attributes::, 16454 for details of the semantics of attributes applying to structure, union 16455 and enumerated types. 16456 16457 An "attribute specifier" is of the form `__attribute__ 16458 ((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 16459 comma-separated sequence of "attributes", where each attribute is one 16460 of the following: 16461 16462 * Empty. Empty attributes are ignored. 16463 16464 * A word (which may be an identifier such as `unused', or a reserved 16465 word such as `const'). 16466 16467 * A word, followed by, in parentheses, parameters for the attribute. 16468 These parameters take one of the following forms: 16469 16470 * An identifier. For example, `mode' attributes use this form. 16471 16472 * An identifier followed by a comma and a non-empty 16473 comma-separated list of expressions. For example, `format' 16474 attributes use this form. 16475 16476 * A possibly empty comma-separated list of expressions. For 16477 example, `format_arg' attributes use this form with the list 16478 being a single integer constant expression, and `alias' 16479 attributes use this form with the list being a single string 16480 constant. 16481 16482 An "attribute specifier list" is a sequence of one or more attribute 16483 specifiers, not separated by any other tokens. 16484 16485 In GNU C, an attribute specifier list may appear after the colon 16486 following a label, other than a `case' or `default' label. The only 16487 attribute it makes sense to use after a label is `unused'. This 16488 feature is intended for code generated by programs which contains labels 16489 that may be unused but which is compiled with `-Wall'. It would not 16490 normally be appropriate to use in it human-written code, though it 16491 could be useful in cases where the code that jumps to the label is 16492 contained within an `#ifdef' conditional. GNU C++ does not permit such 16493 placement of attribute lists, as it is permissible for a declaration, 16494 which could begin with an attribute list, to be labelled in C++. 16495 Declarations cannot be labelled in C90 or C99, so the ambiguity does 16496 not arise there. 16497 16498 An attribute specifier list may appear as part of a `struct', `union' 16499 or `enum' specifier. It may go either immediately after the `struct', 16500 `union' or `enum' keyword, or after the closing brace. The former 16501 syntax is preferred. Where attribute specifiers follow the closing 16502 brace, they are considered to relate to the structure, union or 16503 enumerated type defined, not to any enclosing declaration the type 16504 specifier appears in, and the type defined is not complete until after 16505 the attribute specifiers. 16506 16507 Otherwise, an attribute specifier appears as part of a declaration, 16508 counting declarations of unnamed parameters and type names, and relates 16509 to that declaration (which may be nested in another declaration, for 16510 example in the case of a parameter declaration), or to a particular 16511 declarator within a declaration. Where an attribute specifier is 16512 applied to a parameter declared as a function or an array, it should 16513 apply to the function or array rather than the pointer to which the 16514 parameter is implicitly converted, but this is not yet correctly 16515 implemented. 16516 16517 Any list of specifiers and qualifiers at the start of a declaration may 16518 contain attribute specifiers, whether or not such a list may in that 16519 context contain storage class specifiers. (Some attributes, however, 16520 are essentially in the nature of storage class specifiers, and only make 16521 sense where storage class specifiers may be used; for example, 16522 `section'.) There is one necessary limitation to this syntax: the 16523 first old-style parameter declaration in a function definition cannot 16524 begin with an attribute specifier, because such an attribute applies to 16525 the function instead by syntax described below (which, however, is not 16526 yet implemented in this case). In some other cases, attribute 16527 specifiers are permitted by this grammar but not yet supported by the 16528 compiler. All attribute specifiers in this place relate to the 16529 declaration as a whole. In the obsolescent usage where a type of `int' 16530 is implied by the absence of type specifiers, such a list of specifiers 16531 and qualifiers may be an attribute specifier list with no other 16532 specifiers or qualifiers. 16533 16534 At present, the first parameter in a function prototype must have some 16535 type specifier which is not an attribute specifier; this resolves an 16536 ambiguity in the interpretation of `void f(int (__attribute__((foo)) 16537 x))', but is subject to change. At present, if the parentheses of a 16538 function declarator contain only attributes then those attributes are 16539 ignored, rather than yielding an error or warning or implying a single 16540 parameter of type int, but this is subject to change. 16541 16542 An attribute specifier list may appear immediately before a declarator 16543 (other than the first) in a comma-separated list of declarators in a 16544 declaration of more than one identifier using a single list of 16545 specifiers and qualifiers. Such attribute specifiers apply only to the 16546 identifier before whose declarator they appear. For example, in 16547 16548 __attribute__((noreturn)) void d0 (void), 16549 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 16550 d2 (void) 16551 16552 the `noreturn' attribute applies to all the functions declared; the 16553 `format' attribute only applies to `d1'. 16554 16555 An attribute specifier list may appear immediately before the comma, 16556 `=' or semicolon terminating the declaration of an identifier other 16557 than a function definition. At present, such attribute specifiers apply 16558 to the declared object or function, but in future they may attach to the 16559 outermost adjacent declarator. In simple cases there is no difference, 16560 but, for example, in 16561 16562 void (****f)(void) __attribute__((noreturn)); 16563 16564 at present the `noreturn' attribute applies to `f', which causes a 16565 warning since `f' is not a function, but in future it may apply to the 16566 function `****f'. The precise semantics of what attributes in such 16567 cases will apply to are not yet specified. Where an assembler name for 16568 an object or function is specified (*note Asm Labels::), at present the 16569 attribute must follow the `asm' specification; in future, attributes 16570 before the `asm' specification may apply to the adjacent declarator, 16571 and those after it to the declared object or function. 16572 16573 An attribute specifier list may, in future, be permitted to appear 16574 after the declarator in a function definition (before any old-style 16575 parameter declarations or the function body). 16576 16577 Attribute specifiers may be mixed with type qualifiers appearing inside 16578 the `[]' of a parameter array declarator, in the C99 construct by which 16579 such qualifiers are applied to the pointer to which the array is 16580 implicitly converted. Such attribute specifiers apply to the pointer, 16581 not to the array, but at present this is not implemented and they are 16582 ignored. 16583 16584 An attribute specifier list may appear at the start of a nested 16585 declarator. At present, there are some limitations in this usage: the 16586 attributes correctly apply to the declarator, but for most individual 16587 attributes the semantics this implies are not implemented. When 16588 attribute specifiers follow the `*' of a pointer declarator, they may 16589 be mixed with any type qualifiers present. The following describes the 16590 formal semantics of this syntax. It will make the most sense if you 16591 are familiar with the formal specification of declarators in the ISO C 16592 standard. 16593 16594 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 16595 where `T' contains declaration specifiers that specify a type TYPE 16596 (such as `int') and `D1' is a declarator that contains an identifier 16597 IDENT. The type specified for IDENT for derived declarators whose type 16598 does not include an attribute specifier is as in the ISO C standard. 16599 16600 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 16601 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 16602 TYPE" for IDENT, then `T D1' specifies the type 16603 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 16604 16605 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 16606 D', and the declaration `T D' specifies the type 16607 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 16608 the type "DERIVED-DECLARATOR-TYPE-LIST 16609 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 16610 16611 For example, 16612 16613 void (__attribute__((noreturn)) ****f) (void); 16614 16615 specifies the type "pointer to pointer to pointer to pointer to 16616 non-returning function returning `void'". As another example, 16617 16618 char *__attribute__((aligned(8))) *f; 16619 16620 specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 16621 again that this does not work with most attributes; for example, the 16622 usage of `aligned' and `noreturn' attributes given above is not yet 16623 supported. 16624 16625 For compatibility with existing code written for compiler versions that 16626 did not implement attributes on nested declarators, some laxity is 16627 allowed in the placing of attributes. If an attribute that only applies 16628 to types is applied to a declaration, it will be treated as applying to 16629 the type of that declaration. If an attribute that only applies to 16630 declarations is applied to the type of a declaration, it will be treated 16631 as applying to that declaration; and, for compatibility with code 16632 placing the attributes immediately before the identifier declared, such 16633 an attribute applied to a function return type will be treated as 16634 applying to the function type, and such an attribute applied to an array 16635 element type will be treated as applying to the array type. If an 16636 attribute that only applies to function types is applied to a 16637 pointer-to-function type, it will be treated as applying to the pointer 16638 target type; if such an attribute is applied to a function return type 16639 that is not a pointer-to-function type, it will be treated as applying 16640 to the function type. 16641 16642 16643 File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 16644 16645 5.27 Prototypes and Old-Style Function Definitions 16646 ================================================== 16647 16648 GNU C extends ISO C to allow a function prototype to override a later 16649 old-style non-prototype definition. Consider the following example: 16650 16651 /* Use prototypes unless the compiler is old-fashioned. */ 16652 #ifdef __STDC__ 16653 #define P(x) x 16654 #else 16655 #define P(x) () 16656 #endif 16657 16658 /* Prototype function declaration. */ 16659 int isroot P((uid_t)); 16660 16661 /* Old-style function definition. */ 16662 int 16663 isroot (x) /* ??? lossage here ??? */ 16664 uid_t x; 16665 { 16666 return x == 0; 16667 } 16668 16669 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 16670 this example, because subword arguments in old-style non-prototype 16671 definitions are promoted. Therefore in this example the function 16672 definition's argument is really an `int', which does not match the 16673 prototype argument type of `short'. 16674 16675 This restriction of ISO C makes it hard to write code that is portable 16676 to traditional C compilers, because the programmer does not know 16677 whether the `uid_t' type is `short', `int', or `long'. Therefore, in 16678 cases like these GNU C allows a prototype to override a later old-style 16679 definition. More precisely, in GNU C, a function prototype argument 16680 type overrides the argument type specified by a later old-style 16681 definition if the former type is the same as the latter type before 16682 promotion. Thus in GNU C the above example is equivalent to the 16683 following: 16684 16685 int isroot (uid_t); 16686 16687 int 16688 isroot (uid_t x) 16689 { 16690 return x == 0; 16691 } 16692 16693 GNU C++ does not support old-style function definitions, so this 16694 extension is irrelevant. 16695 16696 16697 File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 16698 16699 5.28 C++ Style Comments 16700 ======================= 16701 16702 In GNU C, you may use C++ style comments, which start with `//' and 16703 continue until the end of the line. Many other C implementations allow 16704 such comments, and they are included in the 1999 C standard. However, 16705 C++ style comments are not recognized if you specify an `-std' option 16706 specifying a version of ISO C before C99, or `-ansi' (equivalent to 16707 `-std=c89'). 16708 16709 16710 File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 16711 16712 5.29 Dollar Signs in Identifier Names 16713 ===================================== 16714 16715 In GNU C, you may normally use dollar signs in identifier names. This 16716 is because many traditional C implementations allow such identifiers. 16717 However, dollar signs in identifiers are not supported on a few target 16718 machines, typically because the target assembler does not allow them. 16719 16720 16721 File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 16722 16723 5.30 The Character <ESC> in Constants 16724 ===================================== 16725 16726 You can use the sequence `\e' in a string or character constant to 16727 stand for the ASCII character <ESC>. 16728 16729 16730 File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 16731 16732 5.31 Inquiring on Alignment of Types or Variables 16733 ================================================= 16734 16735 The keyword `__alignof__' allows you to inquire about how an object is 16736 aligned, or the minimum alignment usually required by a type. Its 16737 syntax is just like `sizeof'. 16738 16739 For example, if the target machine requires a `double' value to be 16740 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 16741 is true on many RISC machines. On more traditional machine designs, 16742 `__alignof__ (double)' is 4 or even 2. 16743 16744 Some machines never actually require alignment; they allow reference 16745 to any data type even at an odd address. For these machines, 16746 `__alignof__' reports the _recommended_ alignment of a type. 16747 16748 If the operand of `__alignof__' is an lvalue rather than a type, its 16749 value is the required alignment for its type, taking into account any 16750 minimum alignment specified with GCC's `__attribute__' extension (*note 16751 Variable Attributes::). For example, after this declaration: 16752 16753 struct foo { int x; char y; } foo1; 16754 16755 the value of `__alignof__ (foo1.y)' is 1, even though its actual 16756 alignment is probably 2 or 4, the same as `__alignof__ (int)'. 16757 16758 It is an error to ask for the alignment of an incomplete type. 16759 16760 16761 File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 16762 16763 5.32 Specifying Attributes of Variables 16764 ======================================= 16765 16766 The keyword `__attribute__' allows you to specify special attributes of 16767 variables or structure fields. This keyword is followed by an 16768 attribute specification inside double parentheses. Some attributes are 16769 currently defined generically for variables. Other attributes are 16770 defined for variables on particular target systems. Other attributes 16771 are available for functions (*note Function Attributes::) and for types 16772 (*note Type Attributes::). Other front ends might define more 16773 attributes (*note Extensions to the C++ Language: C++ Extensions.). 16774 16775 You may also specify attributes with `__' preceding and following each 16776 keyword. This allows you to use them in header files without being 16777 concerned about a possible macro of the same name. For example, you 16778 may use `__aligned__' instead of `aligned'. 16779 16780 *Note Attribute Syntax::, for details of the exact syntax for using 16781 attributes. 16782 16783 `aligned (ALIGNMENT)' 16784 This attribute specifies a minimum alignment for the variable or 16785 structure field, measured in bytes. For example, the declaration: 16786 16787 int x __attribute__ ((aligned (16))) = 0; 16788 16789 causes the compiler to allocate the global variable `x' on a 16790 16-byte boundary. On a 68040, this could be used in conjunction 16791 with an `asm' expression to access the `move16' instruction which 16792 requires 16-byte aligned operands. 16793 16794 You can also specify the alignment of structure fields. For 16795 example, to create a double-word aligned `int' pair, you could 16796 write: 16797 16798 struct foo { int x[2] __attribute__ ((aligned (8))); }; 16799 16800 This is an alternative to creating a union with a `double' member 16801 that forces the union to be double-word aligned. 16802 16803 As in the preceding examples, you can explicitly specify the 16804 alignment (in bytes) that you wish the compiler to use for a given 16805 variable or structure field. Alternatively, you can leave out the 16806 alignment factor and just ask the compiler to align a variable or 16807 field to the maximum useful alignment for the target machine you 16808 are compiling for. For example, you could write: 16809 16810 short array[3] __attribute__ ((aligned)); 16811 16812 Whenever you leave out the alignment factor in an `aligned' 16813 attribute specification, the compiler automatically sets the 16814 alignment for the declared variable or field to the largest 16815 alignment which is ever used for any data type on the target 16816 machine you are compiling for. Doing this can often make copy 16817 operations more efficient, because the compiler can use whatever 16818 instructions copy the biggest chunks of memory when performing 16819 copies to or from the variables or fields that you have aligned 16820 this way. 16821 16822 The `aligned' attribute can only increase the alignment; but you 16823 can decrease it by specifying `packed' as well. See below. 16824 16825 Note that the effectiveness of `aligned' attributes may be limited 16826 by inherent limitations in your linker. On many systems, the 16827 linker is only able to arrange for variables to be aligned up to a 16828 certain maximum alignment. (For some linkers, the maximum 16829 supported alignment may be very very small.) If your linker is 16830 only able to align variables up to a maximum of 8 byte alignment, 16831 then specifying `aligned(16)' in an `__attribute__' will still 16832 only provide you with 8 byte alignment. See your linker 16833 documentation for further information. 16834 16835 `cleanup (CLEANUP_FUNCTION)' 16836 The `cleanup' attribute runs a function when the variable goes out 16837 of scope. This attribute can only be applied to auto function 16838 scope variables; it may not be applied to parameters or variables 16839 with static storage duration. The function must take one 16840 parameter, a pointer to a type compatible with the variable. The 16841 return value of the function (if any) is ignored. 16842 16843 If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run 16844 during the stack unwinding that happens during the processing of 16845 the exception. Note that the `cleanup' attribute does not allow 16846 the exception to be caught, only to perform an action. It is 16847 undefined what happens if CLEANUP_FUNCTION does not return 16848 normally. 16849 16850 `common' 16851 `nocommon' 16852 The `common' attribute requests GCC to place a variable in 16853 "common" storage. The `nocommon' attribute requests the 16854 opposite--to allocate space for it directly. 16855 16856 These attributes override the default chosen by the `-fno-common' 16857 and `-fcommon' flags respectively. 16858 16859 `deprecated' 16860 The `deprecated' attribute results in a warning if the variable is 16861 used anywhere in the source file. This is useful when identifying 16862 variables that are expected to be removed in a future version of a 16863 program. The warning also includes the location of the declaration 16864 of the deprecated variable, to enable users to easily find further 16865 information about why the variable is deprecated, or what they 16866 should do instead. Note that the warning only occurs for uses: 16867 16868 extern int old_var __attribute__ ((deprecated)); 16869 extern int old_var; 16870 int new_fn () { return old_var; } 16871 16872 results in a warning on line 3 but not line 2. 16873 16874 The `deprecated' attribute can also be used for functions and 16875 types (*note Function Attributes::, *note Type Attributes::.) 16876 16877 `mode (MODE)' 16878 This attribute specifies the data type for the 16879 declaration--whichever type corresponds to the mode MODE. This in 16880 effect lets you request an integer or floating point type 16881 according to its width. 16882 16883 You may also specify a mode of `byte' or `__byte__' to indicate 16884 the mode corresponding to a one-byte integer, `word' or `__word__' 16885 for the mode of a one-word integer, and `pointer' or `__pointer__' 16886 for the mode used to represent pointers. 16887 16888 `packed' 16889 The `packed' attribute specifies that a variable or structure field 16890 should have the smallest possible alignment--one byte for a 16891 variable, and one bit for a field, unless you specify a larger 16892 value with the `aligned' attribute. 16893 16894 Here is a structure in which the field `x' is packed, so that it 16895 immediately follows `a': 16896 16897 struct foo 16898 { 16899 char a; 16900 int x[2] __attribute__ ((packed)); 16901 }; 16902 16903 `section ("SECTION-NAME")' 16904 Normally, the compiler places the objects it generates in sections 16905 like `data' and `bss'. Sometimes, however, you need additional 16906 sections, or you need certain particular variables to appear in 16907 special sections, for example to map to special hardware. The 16908 `section' attribute specifies that a variable (or function) lives 16909 in a particular section. For example, this small program uses 16910 several specific section names: 16911 16912 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 16913 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 16914 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 16915 int init_data __attribute__ ((section ("INITDATA"))) = 0; 16916 16917 main() 16918 { 16919 /* Initialize stack pointer */ 16920 init_sp (stack + sizeof (stack)); 16921 16922 /* Initialize initialized data */ 16923 memcpy (&init_data, &data, &edata - &data); 16924 16925 /* Turn on the serial ports */ 16926 init_duart (&a); 16927 init_duart (&b); 16928 } 16929 16930 Use the `section' attribute with an _initialized_ definition of a 16931 _global_ variable, as shown in the example. GCC issues a warning 16932 and otherwise ignores the `section' attribute in uninitialized 16933 variable declarations. 16934 16935 You may only use the `section' attribute with a fully initialized 16936 global definition because of the way linkers work. The linker 16937 requires each object be defined once, with the exception that 16938 uninitialized variables tentatively go in the `common' (or `bss') 16939 section and can be multiply "defined". You can force a variable 16940 to be initialized with the `-fno-common' flag or the `nocommon' 16941 attribute. 16942 16943 Some file formats do not support arbitrary sections so the 16944 `section' attribute is not available on all platforms. If you 16945 need to map the entire contents of a module to a particular 16946 section, consider using the facilities of the linker instead. 16947 16948 `shared' 16949 On Microsoft Windows, in addition to putting variable definitions 16950 in a named section, the section can also be shared among all 16951 running copies of an executable or DLL. For example, this small 16952 program defines shared data by putting it in a named section 16953 `shared' and marking the section shareable: 16954 16955 int foo __attribute__((section ("shared"), shared)) = 0; 16956 16957 int 16958 main() 16959 { 16960 /* Read and write foo. All running 16961 copies see the same value. */ 16962 return 0; 16963 } 16964 16965 You may only use the `shared' attribute along with `section' 16966 attribute with a fully initialized global definition because of 16967 the way linkers work. See `section' attribute for more 16968 information. 16969 16970 The `shared' attribute is only available on Microsoft Windows. 16971 16972 `tls_model ("TLS_MODEL")' 16973 The `tls_model' attribute sets thread-local storage model (*note 16974 Thread-Local::) of a particular `__thread' variable, overriding 16975 `-ftls-model=' command line switch on a per-variable basis. The 16976 TLS_MODEL argument should be one of `global-dynamic', 16977 `local-dynamic', `initial-exec' or `local-exec'. 16978 16979 Not all targets support this attribute. 16980 16981 `unused' 16982 This attribute, attached to a variable, means that the variable is 16983 meant to be possibly unused. GCC will not produce a warning for 16984 this variable. 16985 16986 `used' 16987 This attribute, attached to a variable, means that the variable 16988 must be emitted even if it appears that the variable is not 16989 referenced. 16990 16991 `vector_size (BYTES)' 16992 This attribute specifies the vector size for the variable, 16993 measured in bytes. For example, the declaration: 16994 16995 int foo __attribute__ ((vector_size (16))); 16996 16997 causes the compiler to set the mode for `foo', to be 16 bytes, 16998 divided into `int' sized units. Assuming a 32-bit int (a vector of 16999 4 units of 4 bytes), the corresponding mode of `foo' will be V4SI. 17000 17001 This attribute is only applicable to integral and float scalars, 17002 although arrays, pointers, and function return values are allowed 17003 in conjunction with this construct. 17004 17005 Aggregates with this attribute are invalid, even if they are of 17006 the same size as a corresponding scalar. For example, the 17007 declaration: 17008 17009 struct S { int a; }; 17010 struct S __attribute__ ((vector_size (16))) foo; 17011 17012 is invalid even if the size of the structure is the same as the 17013 size of the `int'. 17014 17015 `selectany' 17016 The `selectany' attribute causes an initialized global variable to 17017 have link-once semantics. When multiple definitions of the 17018 variable are encountered by the linker, the first is selected and 17019 the remainder are discarded. Following usage by the Microsoft 17020 compiler, the linker is told _not_ to warn about size or content 17021 differences of the multiple definitions. 17022 17023 Although the primary usage of this attribute is for POD types, the 17024 attribute can also be applied to global C++ objects that are 17025 initialized by a constructor. In this case, the static 17026 initialization and destruction code for the object is emitted in 17027 each translation defining the object, but the calls to the 17028 constructor and destructor are protected by a link-once guard 17029 variable. 17030 17031 The `selectany' attribute is only available on Microsoft Windows 17032 targets. You can use `__declspec (selectany)' as a synonym for 17033 `__attribute__ ((selectany))' for compatibility with other 17034 compilers. 17035 17036 `weak' 17037 The `weak' attribute is described in *Note Function Attributes::. 17038 17039 `dllimport' 17040 The `dllimport' attribute is described in *Note Function 17041 Attributes::. 17042 17043 `dllexport' 17044 The `dllexport' attribute is described in *Note Function 17045 Attributes::. 17046 17047 17048 5.32.1 M32R/D Variable Attributes 17049 --------------------------------- 17050 17051 One attribute is currently defined for the M32R/D. 17052 17053 `model (MODEL-NAME)' 17054 Use this attribute on the M32R/D to set the addressability of an 17055 object. The identifier MODEL-NAME is one of `small', `medium', or 17056 `large', representing each of the code models. 17057 17058 Small model objects live in the lower 16MB of memory (so that their 17059 addresses can be loaded with the `ld24' instruction). 17060 17061 Medium and large model objects may live anywhere in the 32-bit 17062 address space (the compiler will generate `seth/add3' instructions 17063 to load their addresses). 17064 17065 5.32.2 i386 Variable Attributes 17066 ------------------------------- 17067 17068 Two attributes are currently defined for i386 configurations: 17069 `ms_struct' and `gcc_struct' 17070 17071 `ms_struct' 17072 `gcc_struct' 17073 If `packed' is used on a structure, or if bit-fields are used it 17074 may be that the Microsoft ABI packs them differently than GCC 17075 would normally pack them. Particularly when moving packed data 17076 between functions compiled with GCC and the native Microsoft 17077 compiler (either via function call or as data in a file), it may 17078 be necessary to access either format. 17079 17080 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 17081 Windows X86 compilers to match the native Microsoft compiler. 17082 17083 The Microsoft structure layout algorithm is fairly simple with the 17084 exception of the bitfield packing: 17085 17086 The padding and alignment of members of structures and whether a 17087 bit field can straddle a storage-unit boundary 17088 17089 1. Structure members are stored sequentially in the order in 17090 which they are declared: the first member has the lowest 17091 memory address and the last member the highest. 17092 17093 2. Every data object has an alignment-requirement. The 17094 alignment-requirement for all data except structures, unions, 17095 and arrays is either the size of the object or the current 17096 packing size (specified with either the aligned attribute or 17097 the pack pragma), whichever is less. For structures, unions, 17098 and arrays, the alignment-requirement is the largest 17099 alignment-requirement of its members. Every object is 17100 allocated an offset so that: 17101 17102 offset % alignment-requirement == 0 17103 17104 3. Adjacent bit fields are packed into the same 1-, 2-, or 17105 4-byte allocation unit if the integral types are the same 17106 size and if the next bit field fits into the current 17107 allocation unit without crossing the boundary imposed by the 17108 common alignment requirements of the bit fields. 17109 17110 Handling of zero-length bitfields: 17111 17112 MSVC interprets zero-length bitfields in the following ways: 17113 17114 1. If a zero-length bitfield is inserted between two bitfields 17115 that would normally be coalesced, the bitfields will not be 17116 coalesced. 17117 17118 For example: 17119 17120 struct 17121 { 17122 unsigned long bf_1 : 12; 17123 unsigned long : 0; 17124 unsigned long bf_2 : 12; 17125 } t1; 17126 17127 The size of `t1' would be 8 bytes with the zero-length 17128 bitfield. If the zero-length bitfield were removed, `t1''s 17129 size would be 4 bytes. 17130 17131 2. If a zero-length bitfield is inserted after a bitfield, 17132 `foo', and the alignment of the zero-length bitfield is 17133 greater than the member that follows it, `bar', `bar' will be 17134 aligned as the type of the zero-length bitfield. 17135 17136 For example: 17137 17138 struct 17139 { 17140 char foo : 4; 17141 short : 0; 17142 char bar; 17143 } t2; 17144 17145 struct 17146 { 17147 char foo : 4; 17148 short : 0; 17149 double bar; 17150 } t3; 17151 17152 For `t2', `bar' will be placed at offset 2, rather than 17153 offset 1. Accordingly, the size of `t2' will be 4. For 17154 `t3', the zero-length bitfield will not affect the alignment 17155 of `bar' or, as a result, the size of the structure. 17156 17157 Taking this into account, it is important to note the 17158 following: 17159 17160 1. If a zero-length bitfield follows a normal bitfield, the 17161 type of the zero-length bitfield may affect the 17162 alignment of the structure as whole. For example, `t2' 17163 has a size of 4 bytes, since the zero-length bitfield 17164 follows a normal bitfield, and is of type short. 17165 17166 2. Even if a zero-length bitfield is not followed by a 17167 normal bitfield, it may still affect the alignment of 17168 the structure: 17169 17170 struct 17171 { 17172 char foo : 6; 17173 long : 0; 17174 } t4; 17175 17176 Here, `t4' will take up 4 bytes. 17177 17178 3. Zero-length bitfields following non-bitfield members are 17179 ignored: 17180 17181 struct 17182 { 17183 char foo; 17184 long : 0; 17185 char bar; 17186 } t5; 17187 17188 Here, `t5' will take up 2 bytes. 17189 17190 5.32.3 PowerPC Variable Attributes 17191 ---------------------------------- 17192 17193 Three attributes currently are defined for PowerPC configurations: 17194 `altivec', `ms_struct' and `gcc_struct'. 17195 17196 For full documentation of the struct attributes please see the 17197 documentation in the *Note i386 Variable Attributes::, section. 17198 17199 For documentation of `altivec' attribute please see the documentation 17200 in the *Note PowerPC Type Attributes::, section. 17201 17202 5.32.4 Xstormy16 Variable Attributes 17203 ------------------------------------ 17204 17205 One attribute is currently defined for xstormy16 configurations: 17206 `below100' 17207 17208 `below100' 17209 If a variable has the `below100' attribute (`BELOW100' is allowed 17210 also), GCC will place the variable in the first 0x100 bytes of 17211 memory and use special opcodes to access it. Such variables will 17212 be placed in either the `.bss_below100' section or the 17213 `.data_below100' section. 17214 17215 17216 17217 File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 17218 17219 5.33 Specifying Attributes of Types 17220 =================================== 17221 17222 The keyword `__attribute__' allows you to specify special attributes of 17223 `struct' and `union' types when you define such types. This keyword is 17224 followed by an attribute specification inside double parentheses. 17225 Seven attributes are currently defined for types: `aligned', `packed', 17226 `transparent_union', `unused', `deprecated', `visibility', and 17227 `may_alias'. Other attributes are defined for functions (*note 17228 Function Attributes::) and for variables (*note Variable Attributes::). 17229 17230 You may also specify any one of these attributes with `__' preceding 17231 and following its keyword. This allows you to use these attributes in 17232 header files without being concerned about a possible macro of the same 17233 name. For example, you may use `__aligned__' instead of `aligned'. 17234 17235 You may specify type attributes either in a `typedef' declaration or 17236 in an enum, struct or union type declaration or definition. 17237 17238 For an enum, struct or union type, you may specify attributes either 17239 between the enum, struct or union tag and the name of the type, or just 17240 past the closing curly brace of the _definition_. The former syntax is 17241 preferred. 17242 17243 *Note Attribute Syntax::, for details of the exact syntax for using 17244 attributes. 17245 17246 `aligned (ALIGNMENT)' 17247 This attribute specifies a minimum alignment (in bytes) for 17248 variables of the specified type. For example, the declarations: 17249 17250 struct S { short f[3]; } __attribute__ ((aligned (8))); 17251 typedef int more_aligned_int __attribute__ ((aligned (8))); 17252 17253 force the compiler to insure (as far as it can) that each variable 17254 whose type is `struct S' or `more_aligned_int' will be allocated 17255 and aligned _at least_ on a 8-byte boundary. On a SPARC, having 17256 all variables of type `struct S' aligned to 8-byte boundaries 17257 allows the compiler to use the `ldd' and `std' (doubleword load and 17258 store) instructions when copying one variable of type `struct S' to 17259 another, thus improving run-time efficiency. 17260 17261 Note that the alignment of any given `struct' or `union' type is 17262 required by the ISO C standard to be at least a perfect multiple of 17263 the lowest common multiple of the alignments of all of the members 17264 of the `struct' or `union' in question. This means that you _can_ 17265 effectively adjust the alignment of a `struct' or `union' type by 17266 attaching an `aligned' attribute to any one of the members of such 17267 a type, but the notation illustrated in the example above is a 17268 more obvious, intuitive, and readable way to request the compiler 17269 to adjust the alignment of an entire `struct' or `union' type. 17270 17271 As in the preceding example, you can explicitly specify the 17272 alignment (in bytes) that you wish the compiler to use for a given 17273 `struct' or `union' type. Alternatively, you can leave out the 17274 alignment factor and just ask the compiler to align a type to the 17275 maximum useful alignment for the target machine you are compiling 17276 for. For example, you could write: 17277 17278 struct S { short f[3]; } __attribute__ ((aligned)); 17279 17280 Whenever you leave out the alignment factor in an `aligned' 17281 attribute specification, the compiler automatically sets the 17282 alignment for the type to the largest alignment which is ever used 17283 for any data type on the target machine you are compiling for. 17284 Doing this can often make copy operations more efficient, because 17285 the compiler can use whatever instructions copy the biggest chunks 17286 of memory when performing copies to or from the variables which 17287 have types that you have aligned this way. 17288 17289 In the example above, if the size of each `short' is 2 bytes, then 17290 the size of the entire `struct S' type is 6 bytes. The smallest 17291 power of two which is greater than or equal to that is 8, so the 17292 compiler sets the alignment for the entire `struct S' type to 8 17293 bytes. 17294 17295 Note that although you can ask the compiler to select a 17296 time-efficient alignment for a given type and then declare only 17297 individual stand-alone objects of that type, the compiler's 17298 ability to select a time-efficient alignment is primarily useful 17299 only when you plan to create arrays of variables having the 17300 relevant (efficiently aligned) type. If you declare or use arrays 17301 of variables of an efficiently-aligned type, then it is likely 17302 that your program will also be doing pointer arithmetic (or 17303 subscripting, which amounts to the same thing) on pointers to the 17304 relevant type, and the code that the compiler generates for these 17305 pointer arithmetic operations will often be more efficient for 17306 efficiently-aligned types than for other types. 17307 17308 The `aligned' attribute can only increase the alignment; but you 17309 can decrease it by specifying `packed' as well. See below. 17310 17311 Note that the effectiveness of `aligned' attributes may be limited 17312 by inherent limitations in your linker. On many systems, the 17313 linker is only able to arrange for variables to be aligned up to a 17314 certain maximum alignment. (For some linkers, the maximum 17315 supported alignment may be very very small.) If your linker is 17316 only able to align variables up to a maximum of 8 byte alignment, 17317 then specifying `aligned(16)' in an `__attribute__' will still 17318 only provide you with 8 byte alignment. See your linker 17319 documentation for further information. 17320 17321 `packed' 17322 This attribute, attached to `struct' or `union' type definition, 17323 specifies that each member (other than zero-width bitfields) of 17324 the structure or union is placed to minimize the memory required. 17325 When attached to an `enum' definition, it indicates that the 17326 smallest integral type should be used. 17327 17328 Specifying this attribute for `struct' and `union' types is 17329 equivalent to specifying the `packed' attribute on each of the 17330 structure or union members. Specifying the `-fshort-enums' flag 17331 on the line is equivalent to specifying the `packed' attribute on 17332 all `enum' definitions. 17333 17334 In the following example `struct my_packed_struct''s members are 17335 packed closely together, but the internal layout of its `s' member 17336 is not packed--to do that, `struct my_unpacked_struct' would need 17337 to be packed too. 17338 17339 struct my_unpacked_struct 17340 { 17341 char c; 17342 int i; 17343 }; 17344 17345 struct __attribute__ ((__packed__)) my_packed_struct 17346 { 17347 char c; 17348 int i; 17349 struct my_unpacked_struct s; 17350 }; 17351 17352 You may only specify this attribute on the definition of a `enum', 17353 `struct' or `union', not on a `typedef' which does not also define 17354 the enumerated type, structure or union. 17355 17356 `transparent_union' 17357 This attribute, attached to a `union' type definition, indicates 17358 that any function parameter having that union type causes calls to 17359 that function to be treated in a special way. 17360 17361 First, the argument corresponding to a transparent union type can 17362 be of any type in the union; no cast is required. Also, if the 17363 union contains a pointer type, the corresponding argument can be a 17364 null pointer constant or a void pointer expression; and if the 17365 union contains a void pointer type, the corresponding argument can 17366 be any pointer expression. If the union member type is a pointer, 17367 qualifiers like `const' on the referenced type must be respected, 17368 just as with normal pointer conversions. 17369 17370 Second, the argument is passed to the function using the calling 17371 conventions of the first member of the transparent union, not the 17372 calling conventions of the union itself. All members of the union 17373 must have the same machine representation; this is necessary for 17374 this argument passing to work properly. 17375 17376 Transparent unions are designed for library functions that have 17377 multiple interfaces for compatibility reasons. For example, 17378 suppose the `wait' function must accept either a value of type 17379 `int *' to comply with Posix, or a value of type `union wait *' to 17380 comply with the 4.1BSD interface. If `wait''s parameter were 17381 `void *', `wait' would accept both kinds of arguments, but it 17382 would also accept any other pointer type and this would make 17383 argument type checking less useful. Instead, `<sys/wait.h>' might 17384 define the interface as follows: 17385 17386 typedef union 17387 { 17388 int *__ip; 17389 union wait *__up; 17390 } wait_status_ptr_t __attribute__ ((__transparent_union__)); 17391 17392 pid_t wait (wait_status_ptr_t); 17393 17394 This interface allows either `int *' or `union wait *' arguments 17395 to be passed, using the `int *' calling convention. The program 17396 can call `wait' with arguments of either type: 17397 17398 int w1 () { int w; return wait (&w); } 17399 int w2 () { union wait w; return wait (&w); } 17400 17401 With this interface, `wait''s implementation might look like this: 17402 17403 pid_t wait (wait_status_ptr_t p) 17404 { 17405 return waitpid (-1, p.__ip, 0); 17406 } 17407 17408 `unused' 17409 When attached to a type (including a `union' or a `struct'), this 17410 attribute means that variables of that type are meant to appear 17411 possibly unused. GCC will not produce a warning for any variables 17412 of that type, even if the variable appears to do nothing. This is 17413 often the case with lock or thread classes, which are usually 17414 defined and then not referenced, but contain constructors and 17415 destructors that have nontrivial bookkeeping functions. 17416 17417 `deprecated' 17418 The `deprecated' attribute results in a warning if the type is 17419 used anywhere in the source file. This is useful when identifying 17420 types that are expected to be removed in a future version of a 17421 program. If possible, the warning also includes the location of 17422 the declaration of the deprecated type, to enable users to easily 17423 find further information about why the type is deprecated, or what 17424 they should do instead. Note that the warnings only occur for 17425 uses and then only if the type is being applied to an identifier 17426 that itself is not being declared as deprecated. 17427 17428 typedef int T1 __attribute__ ((deprecated)); 17429 T1 x; 17430 typedef T1 T2; 17431 T2 y; 17432 typedef T1 T3 __attribute__ ((deprecated)); 17433 T3 z __attribute__ ((deprecated)); 17434 17435 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 17436 warning is issued for line 4 because T2 is not explicitly 17437 deprecated. Line 5 has no warning because T3 is explicitly 17438 deprecated. Similarly for line 6. 17439 17440 The `deprecated' attribute can also be used for functions and 17441 variables (*note Function Attributes::, *note Variable 17442 Attributes::.) 17443 17444 `may_alias' 17445 Accesses to objects with types with this attribute are not 17446 subjected to type-based alias analysis, but are instead assumed to 17447 be able to alias any other type of objects, just like the `char' 17448 type. See `-fstrict-aliasing' for more information on aliasing 17449 issues. 17450 17451 Example of use: 17452 17453 typedef short __attribute__((__may_alias__)) short_a; 17454 17455 int 17456 main (void) 17457 { 17458 int a = 0x12345678; 17459 short_a *b = (short_a *) &a; 17460 17461 b[1] = 0; 17462 17463 if (a == 0x12345678) 17464 abort(); 17465 17466 exit(0); 17467 } 17468 17469 If you replaced `short_a' with `short' in the variable 17470 declaration, the above program would abort when compiled with 17471 `-fstrict-aliasing', which is on by default at `-O2' or above in 17472 recent GCC versions. 17473 17474 `visibility' 17475 In C++, attribute visibility (*note Function Attributes::) can 17476 also be applied to class, struct, union and enum types. Unlike 17477 other type attributes, the attribute must appear between the 17478 initial keyword and the name of the type; it cannot appear after 17479 the body of the type. 17480 17481 Note that the type visibility is applied to vague linkage entities 17482 associated with the class (vtable, typeinfo node, etc.). In 17483 particular, if a class is thrown as an exception in one shared 17484 object and caught in another, the class must have default 17485 visibility. Otherwise the two shared objects will be unable to 17486 use the same typeinfo node and exception handling will break. 17487 17488 5.33.1 ARM Type Attributes 17489 -------------------------- 17490 17491 On those ARM targets that support `dllimport' (such as Symbian 17492 OS), you can use the `notshared' attribute to indicate that the virtual 17493 table and other similar data for a class should not be exported from a 17494 DLL. For example: 17495 17496 class __declspec(notshared) C { 17497 public: 17498 __declspec(dllimport) C(); 17499 virtual void f(); 17500 } 17501 17502 __declspec(dllexport) 17503 C::C() {} 17504 17505 In this code, `C::C' is exported from the current DLL, but the 17506 virtual table for `C' is not exported. (You can use `__attribute__' 17507 instead of `__declspec' if you prefer, but most Symbian OS code uses 17508 `__declspec'.) 17509 17510 5.33.2 i386 Type Attributes 17511 --------------------------- 17512 17513 Two attributes are currently defined for i386 configurations: 17514 `ms_struct' and `gcc_struct' 17515 17516 `ms_struct' 17517 `gcc_struct' 17518 If `packed' is used on a structure, or if bit-fields are used it 17519 may be that the Microsoft ABI packs them differently than GCC 17520 would normally pack them. Particularly when moving packed data 17521 between functions compiled with GCC and the native Microsoft 17522 compiler (either via function call or as data in a file), it may 17523 be necessary to access either format. 17524 17525 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 17526 Windows X86 compilers to match the native Microsoft compiler. 17527 17528 To specify multiple attributes, separate them by commas within the 17529 double parentheses: for example, `__attribute__ ((aligned (16), 17530 packed))'. 17531 17532 5.33.3 PowerPC Type Attributes 17533 ------------------------------ 17534 17535 Three attributes currently are defined for PowerPC configurations: 17536 `altivec', `ms_struct' and `gcc_struct'. 17537 17538 For full documentation of the struct attributes please see the 17539 documentation in the *Note i386 Type Attributes::, section. 17540 17541 The `altivec' attribute allows one to declare AltiVec vector data 17542 types supported by the AltiVec Programming Interface Manual. The 17543 attribute requires an argument to specify one of three vector types: 17544 `vector__', `pixel__' (always followed by unsigned short), and `bool__' 17545 (always followed by unsigned). 17546 17547 __attribute__((altivec(vector__))) 17548 __attribute__((altivec(pixel__))) unsigned short 17549 __attribute__((altivec(bool__))) unsigned 17550 17551 These attributes mainly are intended to support the `__vector', 17552 `__pixel', and `__bool' AltiVec keywords. 17553 17554 17555 File: gcc.info, Node: Inline, Next: Extended Asm, Prev: Alignment, Up: C Extensions 17556 17557 5.34 An Inline Function is As Fast As a Macro 17558 ============================================= 17559 17560 By declaring a function `inline', you can direct GCC to integrate that 17561 function's code into the code for its callers. This makes execution 17562 faster by eliminating the function-call overhead; in addition, if any 17563 of the actual argument values are constant, their known values may 17564 permit simplifications at compile time so that not all of the inline 17565 function's code needs to be included. The effect on code size is less 17566 predictable; object code may be larger or smaller with function 17567 inlining, depending on the particular case. Inlining of functions is an 17568 optimization and it really "works" only in optimizing compilation. If 17569 you don't use `-O', no function is really inline. 17570 17571 Inline functions are included in the ISO C99 standard, but there are 17572 currently substantial differences between what GCC implements and what 17573 the ISO C99 standard requires. GCC will fully support C99 inline 17574 functions in version 4.3. The traditional GCC handling of inline 17575 functions will still be available with `-std=gnu89', `-fgnu89-inline' 17576 or when `gnu_inline' attribute is present on all inline declarations. 17577 The preprocessor macros `__GNUC_GNU_INLINE__' and 17578 `__GNUC_STDC_INLINE__' may be used to determine the handling of 17579 `inline' during a particular compilation (*note Common Predefined 17580 Macros: (cpp)Common Predefined Macros.). 17581 17582 To declare a function inline, use the `inline' keyword in its 17583 declaration, like this: 17584 17585 inline int 17586 inc (int *a) 17587 { 17588 (*a)++; 17589 } 17590 17591 (If you are writing a header file to be included in ISO C programs, 17592 write `__inline__' instead of `inline'. *Note Alternate Keywords::.) 17593 You can also make all "simple enough" functions inline with the option 17594 `-finline-functions'. 17595 17596 Note that certain usages in a function definition can make it 17597 unsuitable for inline substitution. Among these usages are: use of 17598 varargs, use of alloca, use of variable sized data types (*note 17599 Variable Length::), use of computed goto (*note Labels as Values::), 17600 use of nonlocal goto, and nested functions (*note Nested Functions::). 17601 Using `-Winline' will warn when a function marked `inline' could not be 17602 substituted, and will give the reason for the failure. 17603 17604 Note that in C and Objective-C, unlike C++, the `inline' keyword does 17605 not affect the linkage of the function. 17606 17607 GCC automatically inlines member functions defined within the class 17608 body of C++ programs even if they are not explicitly declared `inline'. 17609 (You can override this with `-fno-default-inline'; *note Options 17610 Controlling C++ Dialect: C++ Dialect Options.) 17611 17612 When a function is both inline and `static', if all calls to the 17613 function are integrated into the caller, and the function's address is 17614 never used, then the function's own assembler code is never referenced. 17615 In this case, GCC does not actually output assembler code for the 17616 function, unless you specify the option `-fkeep-inline-functions'. 17617 Some calls cannot be integrated for various reasons (in particular, 17618 calls that precede the function's definition cannot be integrated, and 17619 neither can recursive calls within the definition). If there is a 17620 nonintegrated call, then the function is compiled to assembler code as 17621 usual. The function must also be compiled as usual if the program 17622 refers to its address, because that can't be inlined. 17623 17624 When an inline function is not `static', then the compiler must assume 17625 that there may be calls from other source files; since a global symbol 17626 can be defined only once in any program, the function must not be 17627 defined in the other source files, so the calls therein cannot be 17628 integrated. Therefore, a non-`static' inline function is always 17629 compiled on its own in the usual fashion. 17630 17631 If you specify both `inline' and `extern' in the function definition, 17632 then the definition is used only for inlining. In no case is the 17633 function compiled on its own, not even if you refer to its address 17634 explicitly. Such an address becomes an external reference, as if you 17635 had only declared the function, and had not defined it. 17636 17637 This combination of `inline' and `extern' has almost the effect of a 17638 macro. The way to use it is to put a function definition in a header 17639 file with these keywords, and put another copy of the definition 17640 (lacking `inline' and `extern') in a library file. The definition in 17641 the header file will cause most calls to the function to be inlined. 17642 If any uses of the function remain, they will refer to the single copy 17643 in the library. 17644 17645 Since GCC 4.3 will implement ISO C99 semantics for inline functions, 17646 it is simplest to use `static inline' only to guarantee compatibility. 17647 (The existing semantics will remain available when `-std=gnu89' is 17648 specified, but eventually the default will be `-std=gnu99'; that will 17649 implement the C99 semantics, though it does not do so in versions of 17650 GCC before 4.3. After the default changes, the existing semantics will 17651 still be available via the `-fgnu89-inline' option or the `gnu_inline' 17652 function attribute.) 17653 17654 GCC does not inline any functions when not optimizing unless you 17655 specify the `always_inline' attribute for the function, like this: 17656 17657 /* Prototype. */ 17658 inline void foo (const char) __attribute__((always_inline)); 17659 17660 17661 File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Inline, Up: C Extensions 17662 17663 5.35 Assembler Instructions with C Expression Operands 17664 ====================================================== 17665 17666 In an assembler instruction using `asm', you can specify the operands 17667 of the instruction using C expressions. This means you need not guess 17668 which registers or memory locations will contain the data you want to 17669 use. 17670 17671 You must specify an assembler instruction template much like what 17672 appears in a machine description, plus an operand constraint string for 17673 each operand. 17674 17675 For example, here is how to use the 68881's `fsinx' instruction: 17676 17677 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 17678 17679 Here `angle' is the C expression for the input operand while `result' 17680 is that of the output operand. Each has `"f"' as its operand 17681 constraint, saying that a floating point register is required. The `=' 17682 in `=f' indicates that the operand is an output; all output operands' 17683 constraints must use `='. The constraints use the same language used 17684 in the machine description (*note Constraints::). 17685 17686 Each operand is described by an operand-constraint string followed by 17687 the C expression in parentheses. A colon separates the assembler 17688 template from the first output operand and another separates the last 17689 output operand from the first input, if any. Commas separate the 17690 operands within each group. The total number of operands is currently 17691 limited to 30; this limitation may be lifted in some future version of 17692 GCC. 17693 17694 If there are no output operands but there are input operands, you must 17695 place two consecutive colons surrounding the place where the output 17696 operands would go. 17697 17698 As of GCC version 3.1, it is also possible to specify input and output 17699 operands using symbolic names which can be referenced within the 17700 assembler code. These names are specified inside square brackets 17701 preceding the constraint string, and can be referenced inside the 17702 assembler code using `%[NAME]' instead of a percentage sign followed by 17703 the operand number. Using named operands the above example could look 17704 like: 17705 17706 asm ("fsinx %[angle],%[output]" 17707 : [output] "=f" (result) 17708 : [angle] "f" (angle)); 17709 17710 Note that the symbolic operand names have no relation whatsoever to 17711 other C identifiers. You may use any name you like, even those of 17712 existing C symbols, but you must ensure that no two operands within the 17713 same assembler construct use the same symbolic name. 17714 17715 Output operand expressions must be lvalues; the compiler can check 17716 this. The input operands need not be lvalues. The compiler cannot 17717 check whether the operands have data types that are reasonable for the 17718 instruction being executed. It does not parse the assembler instruction 17719 template and does not know what it means or even whether it is valid 17720 assembler input. The extended `asm' feature is most often used for 17721 machine instructions the compiler itself does not know exist. If the 17722 output expression cannot be directly addressed (for example, it is a 17723 bit-field), your constraint must allow a register. In that case, GCC 17724 will use the register as the output of the `asm', and then store that 17725 register into the output. 17726 17727 The ordinary output operands must be write-only; GCC will assume that 17728 the values in these operands before the instruction are dead and need 17729 not be generated. Extended asm supports input-output or read-write 17730 operands. Use the constraint character `+' to indicate such an operand 17731 and list it with the output operands. You should only use read-write 17732 operands when the constraints for the operand (or the operand in which 17733 only some of the bits are to be changed) allow a register. 17734 17735 You may, as an alternative, logically split its function into two 17736 separate operands, one input operand and one write-only output operand. 17737 The connection between them is expressed by constraints which say they 17738 need to be in the same location when the instruction executes. You can 17739 use the same C expression for both operands, or different expressions. 17740 For example, here we write the (fictitious) `combine' instruction with 17741 `bar' as its read-only source operand and `foo' as its read-write 17742 destination: 17743 17744 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 17745 17746 The constraint `"0"' for operand 1 says that it must occupy the same 17747 location as operand 0. A number in constraint is allowed only in an 17748 input operand and it must refer to an output operand. 17749 17750 Only a number in the constraint can guarantee that one operand will be 17751 in the same place as another. The mere fact that `foo' is the value of 17752 both operands is not enough to guarantee that they will be in the same 17753 place in the generated assembler code. The following would not work 17754 reliably: 17755 17756 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 17757 17758 Various optimizations or reloading could cause operands 0 and 1 to be 17759 in different registers; GCC knows no reason not to do so. For example, 17760 the compiler might find a copy of the value of `foo' in one register and 17761 use it for operand 1, but generate the output operand 0 in a different 17762 register (copying it afterward to `foo''s own address). Of course, 17763 since the register for operand 1 is not even mentioned in the assembler 17764 code, the result will not work, but GCC can't tell that. 17765 17766 As of GCC version 3.1, one may write `[NAME]' instead of the operand 17767 number for a matching constraint. For example: 17768 17769 asm ("cmoveq %1,%2,%[result]" 17770 : [result] "=r"(result) 17771 : "r" (test), "r"(new), "[result]"(old)); 17772 17773 Sometimes you need to make an `asm' operand be a specific register, 17774 but there's no matching constraint letter for that register _by 17775 itself_. To force the operand into that register, use a local variable 17776 for the operand and specify the register in the variable declaration. 17777 *Note Explicit Reg Vars::. Then for the `asm' operand, use any 17778 register constraint letter that matches the register: 17779 17780 register int *p1 asm ("r0") = ...; 17781 register int *p2 asm ("r1") = ...; 17782 register int *result asm ("r0"); 17783 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 17784 17785 In the above example, beware that a register that is call-clobbered by 17786 the target ABI will be overwritten by any function call in the 17787 assignment, including library calls for arithmetic operators. Assuming 17788 it is a call-clobbered register, this may happen to `r0' above by the 17789 assignment to `p2'. If you have to use such a register, use temporary 17790 variables for expressions between the register assignment and use: 17791 17792 int t1 = ...; 17793 register int *p1 asm ("r0") = ...; 17794 register int *p2 asm ("r1") = t1; 17795 register int *result asm ("r0"); 17796 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 17797 17798 Some instructions clobber specific hard registers. To describe this, 17799 write a third colon after the input operands, followed by the names of 17800 the clobbered hard registers (given as strings). Here is a realistic 17801 example for the VAX: 17802 17803 asm volatile ("movc3 %0,%1,%2" 17804 : /* no outputs */ 17805 : "g" (from), "g" (to), "g" (count) 17806 : "r0", "r1", "r2", "r3", "r4", "r5"); 17807 17808 You may not write a clobber description in a way that overlaps with an 17809 input or output operand. For example, you may not have an operand 17810 describing a register class with one member if you mention that register 17811 in the clobber list. Variables declared to live in specific registers 17812 (*note Explicit Reg Vars::), and used as asm input or output operands 17813 must have no part mentioned in the clobber description. There is no 17814 way for you to specify that an input operand is modified without also 17815 specifying it as an output operand. Note that if all the output 17816 operands you specify are for this purpose (and hence unused), you will 17817 then also need to specify `volatile' for the `asm' construct, as 17818 described below, to prevent GCC from deleting the `asm' statement as 17819 unused. 17820 17821 If you refer to a particular hardware register from the assembler code, 17822 you will probably have to list the register after the third colon to 17823 tell the compiler the register's value is modified. In some assemblers, 17824 the register names begin with `%'; to produce one `%' in the assembler 17825 code, you must write `%%' in the input. 17826 17827 If your assembler instruction can alter the condition code register, 17828 add `cc' to the list of clobbered registers. GCC on some machines 17829 represents the condition codes as a specific hardware register; `cc' 17830 serves to name this register. On other machines, the condition code is 17831 handled differently, and specifying `cc' has no effect. But it is 17832 valid no matter what the machine. 17833 17834 If your assembler instructions access memory in an unpredictable 17835 fashion, add `memory' to the list of clobbered registers. This will 17836 cause GCC to not keep memory values cached in registers across the 17837 assembler instruction and not optimize stores or loads to that memory. 17838 You will also want to add the `volatile' keyword if the memory affected 17839 is not listed in the inputs or outputs of the `asm', as the `memory' 17840 clobber does not count as a side-effect of the `asm'. If you know how 17841 large the accessed memory is, you can add it as input or output but if 17842 this is not known, you should add `memory'. As an example, if you 17843 access ten bytes of a string, you can use a memory input like: 17844 17845 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 17846 17847 Note that in the following example the memory input is necessary, 17848 otherwise GCC might optimize the store to `x' away: 17849 int foo () 17850 { 17851 int x = 42; 17852 int *y = &x; 17853 int result; 17854 asm ("magic stuff accessing an 'int' pointed to by '%1'" 17855 "=&d" (r) : "a" (y), "m" (*y)); 17856 return result; 17857 } 17858 17859 You can put multiple assembler instructions together in a single `asm' 17860 template, separated by the characters normally used in assembly code 17861 for the system. A combination that works in most places is a newline 17862 to break the line, plus a tab character to move to the instruction field 17863 (written as `\n\t'). Sometimes semicolons can be used, if the 17864 assembler allows semicolons as a line-breaking character. Note that 17865 some assembler dialects use semicolons to start a comment. The input 17866 operands are guaranteed not to use any of the clobbered registers, and 17867 neither will the output operands' addresses, so you can read and write 17868 the clobbered registers as many times as you like. Here is an example 17869 of multiple instructions in a template; it assumes the subroutine 17870 `_foo' accepts arguments in registers 9 and 10: 17871 17872 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 17873 : /* no outputs */ 17874 : "g" (from), "g" (to) 17875 : "r9", "r10"); 17876 17877 Unless an output operand has the `&' constraint modifier, GCC may 17878 allocate it in the same register as an unrelated input operand, on the 17879 assumption the inputs are consumed before the outputs are produced. 17880 This assumption may be false if the assembler code actually consists of 17881 more than one instruction. In such a case, use `&' for each output 17882 operand that may not overlap an input. *Note Modifiers::. 17883 17884 If you want to test the condition code produced by an assembler 17885 instruction, you must include a branch and a label in the `asm' 17886 construct, as follows: 17887 17888 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 17889 : "g" (result) 17890 : "g" (input)); 17891 17892 This assumes your assembler supports local labels, as the GNU assembler 17893 and most Unix assemblers do. 17894 17895 Speaking of labels, jumps from one `asm' to another are not supported. 17896 The compiler's optimizers do not know about these jumps, and therefore 17897 they cannot take account of them when deciding how to optimize. 17898 17899 Usually the most convenient way to use these `asm' instructions is to 17900 encapsulate them in macros that look like functions. For example, 17901 17902 #define sin(x) \ 17903 ({ double __value, __arg = (x); \ 17904 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 17905 __value; }) 17906 17907 Here the variable `__arg' is used to make sure that the instruction 17908 operates on a proper `double' value, and to accept only those arguments 17909 `x' which can convert automatically to a `double'. 17910 17911 Another way to make sure the instruction operates on the correct data 17912 type is to use a cast in the `asm'. This is different from using a 17913 variable `__arg' in that it converts more different types. For 17914 example, if the desired type were `int', casting the argument to `int' 17915 would accept a pointer with no complaint, while assigning the argument 17916 to an `int' variable named `__arg' would warn about using a pointer 17917 unless the caller explicitly casts it. 17918 17919 If an `asm' has output operands, GCC assumes for optimization purposes 17920 the instruction has no side effects except to change the output 17921 operands. This does not mean instructions with a side effect cannot be 17922 used, but you must be careful, because the compiler may eliminate them 17923 if the output operands aren't used, or move them out of loops, or 17924 replace two with one if they constitute a common subexpression. Also, 17925 if your instruction does have a side effect on a variable that otherwise 17926 appears not to change, the old value of the variable may be reused later 17927 if it happens to be found in a register. 17928 17929 You can prevent an `asm' instruction from being deleted by writing the 17930 keyword `volatile' after the `asm'. For example: 17931 17932 #define get_and_set_priority(new) \ 17933 ({ int __old; \ 17934 asm volatile ("get_and_set_priority %0, %1" \ 17935 : "=g" (__old) : "g" (new)); \ 17936 __old; }) 17937 17938 The `volatile' keyword indicates that the instruction has important 17939 side-effects. GCC will not delete a volatile `asm' if it is reachable. 17940 (The instruction can still be deleted if GCC can prove that 17941 control-flow will never reach the location of the instruction.) Note 17942 that even a volatile `asm' instruction can be moved relative to other 17943 code, including across jump instructions. For example, on many targets 17944 there is a system register which can be set to control the rounding 17945 mode of floating point operations. You might try setting it with a 17946 volatile `asm', like this PowerPC example: 17947 17948 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 17949 sum = x + y; 17950 17951 This will not work reliably, as the compiler may move the addition back 17952 before the volatile `asm'. To make it work you need to add an 17953 artificial dependency to the `asm' referencing a variable in the code 17954 you don't want moved, for example: 17955 17956 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 17957 sum = x + y; 17958 17959 Similarly, you can't expect a sequence of volatile `asm' instructions 17960 to remain perfectly consecutive. If you want consecutive output, use a 17961 single `asm'. Also, GCC will perform some optimizations across a 17962 volatile `asm' instruction; GCC does not "forget everything" when it 17963 encounters a volatile `asm' instruction the way some other compilers do. 17964 17965 An `asm' instruction without any output operands will be treated 17966 identically to a volatile `asm' instruction. 17967 17968 It is a natural idea to look for a way to give access to the condition 17969 code left by the assembler instruction. However, when we attempted to 17970 implement this, we found no way to make it work reliably. The problem 17971 is that output operands might need reloading, which would result in 17972 additional following "store" instructions. On most machines, these 17973 instructions would alter the condition code before there was time to 17974 test it. This problem doesn't arise for ordinary "test" and "compare" 17975 instructions because they don't have any output operands. 17976 17977 For reasons similar to those described above, it is not possible to 17978 give an assembler instruction access to the condition code left by 17979 previous instructions. 17980 17981 If you are writing a header file that should be includable in ISO C 17982 programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::. 17983 17984 5.35.1 Size of an `asm' 17985 ----------------------- 17986 17987 Some targets require that GCC track the size of each instruction used in 17988 order to generate correct code. Because the final length of an `asm' 17989 is only known by the assembler, GCC must make an estimate as to how big 17990 it will be. The estimate is formed by counting the number of 17991 statements in the pattern of the `asm' and multiplying that by the 17992 length of the longest instruction on that processor. Statements in the 17993 `asm' are identified by newline characters and whatever statement 17994 separator characters are supported by the assembler; on most processors 17995 this is the ``;'' character. 17996 17997 Normally, GCC's estimate is perfectly adequate to ensure that correct 17998 code is generated, but it is possible to confuse the compiler if you use 17999 pseudo instructions or assembler macros that expand into multiple real 18000 instructions or if you use assembler directives that expand to more 18001 space in the object file than would be needed for a single instruction. 18002 If this happens then the assembler will produce a diagnostic saying that 18003 a label is unreachable. 18004 18005 5.35.2 i386 floating point asm operands 18006 --------------------------------------- 18007 18008 There are several rules on the usage of stack-like regs in asm_operands 18009 insns. These rules apply only to the operands that are stack-like regs: 18010 18011 1. Given a set of input regs that die in an asm_operands, it is 18012 necessary to know which are implicitly popped by the asm, and 18013 which must be explicitly popped by gcc. 18014 18015 An input reg that is implicitly popped by the asm must be 18016 explicitly clobbered, unless it is constrained to match an output 18017 operand. 18018 18019 2. For any input reg that is implicitly popped by an asm, it is 18020 necessary to know how to adjust the stack to compensate for the 18021 pop. If any non-popped input is closer to the top of the 18022 reg-stack than the implicitly popped reg, it would not be possible 18023 to know what the stack looked like--it's not clear how the rest of 18024 the stack "slides up". 18025 18026 All implicitly popped input regs must be closer to the top of the 18027 reg-stack than any input that is not implicitly popped. 18028 18029 It is possible that if an input dies in an insn, reload might use 18030 the input reg for an output reload. Consider this example: 18031 18032 asm ("foo" : "=t" (a) : "f" (b)); 18033 18034 This asm says that input B is not popped by the asm, and that the 18035 asm pushes a result onto the reg-stack, i.e., the stack is one 18036 deeper after the asm than it was before. But, it is possible that 18037 reload will think that it can use the same reg for both the input 18038 and the output, if input B dies in this insn. 18039 18040 If any input operand uses the `f' constraint, all output reg 18041 constraints must use the `&' earlyclobber. 18042 18043 The asm above would be written as 18044 18045 asm ("foo" : "=&t" (a) : "f" (b)); 18046 18047 3. Some operands need to be in particular places on the stack. All 18048 output operands fall in this category--there is no other way to 18049 know which regs the outputs appear in unless the user indicates 18050 this in the constraints. 18051 18052 Output operands must specifically indicate which reg an output 18053 appears in after an asm. `=f' is not allowed: the operand 18054 constraints must select a class with a single reg. 18055 18056 4. Output operands may not be "inserted" between existing stack regs. 18057 Since no 387 opcode uses a read/write operand, all output operands 18058 are dead before the asm_operands, and are pushed by the 18059 asm_operands. It makes no sense to push anywhere but the top of 18060 the reg-stack. 18061 18062 Output operands must start at the top of the reg-stack: output 18063 operands may not "skip" a reg. 18064 18065 5. Some asm statements may need extra stack space for internal 18066 calculations. This can be guaranteed by clobbering stack registers 18067 unrelated to the inputs and outputs. 18068 18069 18070 Here are a couple of reasonable asms to want to write. This asm takes 18071 one input, which is internally popped, and produces two outputs. 18072 18073 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 18074 18075 This asm takes two inputs, which are popped by the `fyl2xp1' opcode, 18076 and replaces them with one output. The user must code the `st(1)' 18077 clobber for reg-stack.c to know that `fyl2xp1' pops both inputs. 18078 18079 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 18080 18081 18082 File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 18083 18084 5.36 Constraints for `asm' Operands 18085 =================================== 18086 18087 Here are specific details on what constraint letters you can use with 18088 `asm' operands. Constraints can say whether an operand may be in a 18089 register, and which kinds of register; whether the operand can be a 18090 memory reference, and which kinds of address; whether the operand may 18091 be an immediate constant, and which possible values it may have. 18092 Constraints can also require two operands to match. 18093 18094 * Menu: 18095 18096 * Simple Constraints:: Basic use of constraints. 18097 * Multi-Alternative:: When an insn has two alternative constraint-patterns. 18098 * Modifiers:: More precise control over effects of constraints. 18099 * Machine Constraints:: Special constraints for some particular machines. 18100 18101 18102 File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 18103 18104 5.36.1 Simple Constraints 18105 ------------------------- 18106 18107 The simplest kind of constraint is a string full of letters, each of 18108 which describes one kind of operand that is permitted. Here are the 18109 letters that are allowed: 18110 18111 whitespace 18112 Whitespace characters are ignored and can be inserted at any 18113 position except the first. This enables each alternative for 18114 different operands to be visually aligned in the machine 18115 description even if they have different number of constraints and 18116 modifiers. 18117 18118 `m' 18119 A memory operand is allowed, with any kind of address that the 18120 machine supports in general. 18121 18122 `o' 18123 A memory operand is allowed, but only if the address is 18124 "offsettable". This means that adding a small integer (actually, 18125 the width in bytes of the operand, as determined by its machine 18126 mode) may be added to the address and the result is also a valid 18127 memory address. 18128 18129 For example, an address which is constant is offsettable; so is an 18130 address that is the sum of a register and a constant (as long as a 18131 slightly larger constant is also within the range of 18132 address-offsets supported by the machine); but an autoincrement or 18133 autodecrement address is not offsettable. More complicated 18134 indirect/indexed addresses may or may not be offsettable depending 18135 on the other addressing modes that the machine supports. 18136 18137 Note that in an output operand which can be matched by another 18138 operand, the constraint letter `o' is valid only when accompanied 18139 by both `<' (if the target machine has predecrement addressing) 18140 and `>' (if the target machine has preincrement addressing). 18141 18142 `V' 18143 A memory operand that is not offsettable. In other words, 18144 anything that would fit the `m' constraint but not the `o' 18145 constraint. 18146 18147 `<' 18148 A memory operand with autodecrement addressing (either 18149 predecrement or postdecrement) is allowed. 18150 18151 `>' 18152 A memory operand with autoincrement addressing (either 18153 preincrement or postincrement) is allowed. 18154 18155 `r' 18156 A register operand is allowed provided that it is in a general 18157 register. 18158 18159 `i' 18160 An immediate integer operand (one with constant value) is allowed. 18161 This includes symbolic constants whose values will be known only at 18162 assembly time or later. 18163 18164 `n' 18165 An immediate integer operand with a known numeric value is allowed. 18166 Many systems cannot support assembly-time constants for operands 18167 less than a word wide. Constraints for these operands should use 18168 `n' rather than `i'. 18169 18170 `I', `J', `K', ... `P' 18171 Other letters in the range `I' through `P' may be defined in a 18172 machine-dependent fashion to permit immediate integer operands with 18173 explicit integer values in specified ranges. For example, on the 18174 68000, `I' is defined to stand for the range of values 1 to 8. 18175 This is the range permitted as a shift count in the shift 18176 instructions. 18177 18178 `E' 18179 An immediate floating operand (expression code `const_double') is 18180 allowed, but only if the target floating point format is the same 18181 as that of the host machine (on which the compiler is running). 18182 18183 `F' 18184 An immediate floating operand (expression code `const_double' or 18185 `const_vector') is allowed. 18186 18187 `G', `H' 18188 `G' and `H' may be defined in a machine-dependent fashion to 18189 permit immediate floating operands in particular ranges of values. 18190 18191 `s' 18192 An immediate integer operand whose value is not an explicit 18193 integer is allowed. 18194 18195 This might appear strange; if an insn allows a constant operand 18196 with a value not known at compile time, it certainly must allow 18197 any known value. So why use `s' instead of `i'? Sometimes it 18198 allows better code to be generated. 18199 18200 For example, on the 68000 in a fullword instruction it is possible 18201 to use an immediate operand; but if the immediate value is between 18202 -128 and 127, better code results from loading the value into a 18203 register and using the register. This is because the load into 18204 the register can be done with a `moveq' instruction. We arrange 18205 for this to happen by defining the letter `K' to mean "any integer 18206 outside the range -128 to 127", and then specifying `Ks' in the 18207 operand constraints. 18208 18209 `g' 18210 Any register, memory or immediate integer operand is allowed, 18211 except for registers that are not general registers. 18212 18213 `X' 18214 Any operand whatsoever is allowed. 18215 18216 `0', `1', `2', ... `9' 18217 An operand that matches the specified operand number is allowed. 18218 If a digit is used together with letters within the same 18219 alternative, the digit should come last. 18220 18221 This number is allowed to be more than a single digit. If multiple 18222 digits are encountered consecutively, they are interpreted as a 18223 single decimal integer. There is scant chance for ambiguity, 18224 since to-date it has never been desirable that `10' be interpreted 18225 as matching either operand 1 _or_ operand 0. Should this be 18226 desired, one can use multiple alternatives instead. 18227 18228 This is called a "matching constraint" and what it really means is 18229 that the assembler has only a single operand that fills two roles 18230 which `asm' distinguishes. For example, an add instruction uses 18231 two input operands and an output operand, but on most CISC 18232 machines an add instruction really has only two operands, one of 18233 them an input-output operand: 18234 18235 addl #35,r12 18236 18237 Matching constraints are used in these circumstances. More 18238 precisely, the two operands that match must include one input-only 18239 operand and one output-only operand. Moreover, the digit must be a 18240 smaller number than the number of the operand that uses it in the 18241 constraint. 18242 18243 `p' 18244 An operand that is a valid memory address is allowed. This is for 18245 "load address" and "push address" instructions. 18246 18247 `p' in the constraint must be accompanied by `address_operand' as 18248 the predicate in the `match_operand'. This predicate interprets 18249 the mode specified in the `match_operand' as the mode of the memory 18250 reference for which the address would be valid. 18251 18252 OTHER-LETTERS 18253 Other letters can be defined in machine-dependent fashion to stand 18254 for particular classes of registers or other arbitrary operand 18255 types. `d', `a' and `f' are defined on the 68000/68020 to stand 18256 for data, address and floating point registers. 18257 18258 18259 File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 18260 18261 5.36.2 Multiple Alternative Constraints 18262 --------------------------------------- 18263 18264 Sometimes a single instruction has multiple alternative sets of possible 18265 operands. For example, on the 68000, a logical-or instruction can 18266 combine register or an immediate value into memory, or it can combine 18267 any kind of operand into a register; but it cannot combine one memory 18268 location into another. 18269 18270 These constraints are represented as multiple alternatives. An 18271 alternative can be described by a series of letters for each operand. 18272 The overall constraint for an operand is made from the letters for this 18273 operand from the first alternative, a comma, the letters for this 18274 operand from the second alternative, a comma, and so on until the last 18275 alternative. 18276 18277 If all the operands fit any one alternative, the instruction is valid. 18278 Otherwise, for each alternative, the compiler counts how many 18279 instructions must be added to copy the operands so that that 18280 alternative applies. The alternative requiring the least copying is 18281 chosen. If two alternatives need the same amount of copying, the one 18282 that comes first is chosen. These choices can be altered with the `?' 18283 and `!' characters: 18284 18285 `?' 18286 Disparage slightly the alternative that the `?' appears in, as a 18287 choice when no alternative applies exactly. The compiler regards 18288 this alternative as one unit more costly for each `?' that appears 18289 in it. 18290 18291 `!' 18292 Disparage severely the alternative that the `!' appears in. This 18293 alternative can still be used if it fits without reloading, but if 18294 reloading is needed, some other alternative will be used. 18295 18296 18297 File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 18298 18299 5.36.3 Constraint Modifier Characters 18300 ------------------------------------- 18301 18302 Here are constraint modifier characters. 18303 18304 `=' 18305 Means that this operand is write-only for this instruction: the 18306 previous value is discarded and replaced by output data. 18307 18308 `+' 18309 Means that this operand is both read and written by the 18310 instruction. 18311 18312 When the compiler fixes up the operands to satisfy the constraints, 18313 it needs to know which operands are inputs to the instruction and 18314 which are outputs from it. `=' identifies an output; `+' 18315 identifies an operand that is both input and output; all other 18316 operands are assumed to be input only. 18317 18318 If you specify `=' or `+' in a constraint, you put it in the first 18319 character of the constraint string. 18320 18321 `&' 18322 Means (in a particular alternative) that this operand is an 18323 "earlyclobber" operand, which is modified before the instruction is 18324 finished using the input operands. Therefore, this operand may 18325 not lie in a register that is used as an input operand or as part 18326 of any memory address. 18327 18328 `&' applies only to the alternative in which it is written. In 18329 constraints with multiple alternatives, sometimes one alternative 18330 requires `&' while others do not. See, for example, the `movdf' 18331 insn of the 68000. 18332 18333 An input operand can be tied to an earlyclobber operand if its only 18334 use as an input occurs before the early result is written. Adding 18335 alternatives of this form often allows GCC to produce better code 18336 when only some of the inputs can be affected by the earlyclobber. 18337 See, for example, the `mulsi3' insn of the ARM. 18338 18339 `&' does not obviate the need to write `='. 18340 18341 `%' 18342 Declares the instruction to be commutative for this operand and the 18343 following operand. This means that the compiler may interchange 18344 the two operands if that is the cheapest way to make all operands 18345 fit the constraints. GCC can only handle one commutative pair in 18346 an asm; if you use more, the compiler may fail. Note that you 18347 need not use the modifier if the two alternatives are strictly 18348 identical; this would only waste time in the reload pass. The 18349 modifier is not operational after register allocation, so the 18350 result of `define_peephole2' and `define_split's performed after 18351 reload cannot rely on `%' to make the intended insn match. 18352 18353 `#' 18354 Says that all following characters, up to the next comma, are to be 18355 ignored as a constraint. They are significant only for choosing 18356 register preferences. 18357 18358 `*' 18359 Says that the following character should be ignored when choosing 18360 register preferences. `*' has no effect on the meaning of the 18361 constraint as a constraint, and no effect on reloading. 18362 18363 18364 18365 File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 18366 18367 5.36.4 Constraints for Particular Machines 18368 ------------------------------------------ 18369 18370 Whenever possible, you should use the general-purpose constraint letters 18371 in `asm' arguments, since they will convey meaning more readily to 18372 people reading your code. Failing that, use the constraint letters 18373 that usually have very similar meanings across architectures. The most 18374 commonly used constraints are `m' and `r' (for memory and 18375 general-purpose registers respectively; *note Simple Constraints::), and 18376 `I', usually the letter indicating the most common immediate-constant 18377 format. 18378 18379 Each architecture defines additional constraints. These constraints 18380 are used by the compiler itself for instruction generation, as well as 18381 for `asm' statements; therefore, some of the constraints are not 18382 particularly useful for `asm'. Here is a summary of some of the 18383 machine-dependent constraints available on some particular machines; it 18384 includes both constraints that are useful for `asm' and constraints 18385 that aren't. The compiler source file mentioned in the table heading 18386 for each architecture is the definitive reference for the meanings of 18387 that architecture's constraints. 18388 18389 _ARM family--`config/arm/arm.h'_ 18390 18391 `f' 18392 Floating-point register 18393 18394 `w' 18395 VFP floating-point register 18396 18397 `F' 18398 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 18399 4.0, 5.0 or 10.0 18400 18401 `G' 18402 Floating-point constant that would satisfy the constraint `F' 18403 if it were negated 18404 18405 `I' 18406 Integer that is valid as an immediate operand in a data 18407 processing instruction. That is, an integer in the range 0 18408 to 255 rotated by a multiple of 2 18409 18410 `J' 18411 Integer in the range -4095 to 4095 18412 18413 `K' 18414 Integer that satisfies constraint `I' when inverted (ones 18415 complement) 18416 18417 `L' 18418 Integer that satisfies constraint `I' when negated (twos 18419 complement) 18420 18421 `M' 18422 Integer in the range 0 to 32 18423 18424 `Q' 18425 A memory reference where the exact address is in a single 18426 register (``m'' is preferable for `asm' statements) 18427 18428 `R' 18429 An item in the constant pool 18430 18431 `S' 18432 A symbol in the text segment of the current file 18433 18434 `Uv' 18435 A memory reference suitable for VFP load/store insns 18436 (reg+constant offset) 18437 18438 `Uy' 18439 A memory reference suitable for iWMMXt load/store 18440 instructions. 18441 18442 `Uq' 18443 A memory reference suitable for the ARMv4 ldrsb instruction. 18444 18445 _AVR family--`config/avr/constraints.md'_ 18446 18447 `l' 18448 Registers from r0 to r15 18449 18450 `a' 18451 Registers from r16 to r23 18452 18453 `d' 18454 Registers from r16 to r31 18455 18456 `w' 18457 Registers from r24 to r31. These registers can be used in 18458 `adiw' command 18459 18460 `e' 18461 Pointer register (r26-r31) 18462 18463 `b' 18464 Base pointer register (r28-r31) 18465 18466 `q' 18467 Stack pointer register (SPH:SPL) 18468 18469 `t' 18470 Temporary register r0 18471 18472 `x' 18473 Register pair X (r27:r26) 18474 18475 `y' 18476 Register pair Y (r29:r28) 18477 18478 `z' 18479 Register pair Z (r31:r30) 18480 18481 `I' 18482 Constant greater than -1, less than 64 18483 18484 `J' 18485 Constant greater than -64, less than 1 18486 18487 `K' 18488 Constant integer 2 18489 18490 `L' 18491 Constant integer 0 18492 18493 `M' 18494 Constant that fits in 8 bits 18495 18496 `N' 18497 Constant integer -1 18498 18499 `O' 18500 Constant integer 8, 16, or 24 18501 18502 `P' 18503 Constant integer 1 18504 18505 `G' 18506 A floating point constant 0.0 18507 18508 _CRX Architecture--`config/crx/crx.h'_ 18509 18510 `b' 18511 Registers from r0 to r14 (registers without stack pointer) 18512 18513 `l' 18514 Register r16 (64-bit accumulator lo register) 18515 18516 `h' 18517 Register r17 (64-bit accumulator hi register) 18518 18519 `k' 18520 Register pair r16-r17. (64-bit accumulator lo-hi pair) 18521 18522 `I' 18523 Constant that fits in 3 bits 18524 18525 `J' 18526 Constant that fits in 4 bits 18527 18528 `K' 18529 Constant that fits in 5 bits 18530 18531 `L' 18532 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48 18533 18534 `G' 18535 Floating point constant that is legal for store immediate 18536 18537 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_ 18538 18539 `b' 18540 Address base register 18541 18542 `f' 18543 Floating point register 18544 18545 `v' 18546 Vector register 18547 18548 `h' 18549 `MQ', `CTR', or `LINK' register 18550 18551 `q' 18552 `MQ' register 18553 18554 `c' 18555 `CTR' register 18556 18557 `l' 18558 `LINK' register 18559 18560 `x' 18561 `CR' register (condition register) number 0 18562 18563 `y' 18564 `CR' register (condition register) 18565 18566 `z' 18567 `FPMEM' stack memory for FPR-GPR transfers 18568 18569 `I' 18570 Signed 16-bit constant 18571 18572 `J' 18573 Unsigned 16-bit constant shifted left 16 bits (use `L' 18574 instead for `SImode' constants) 18575 18576 `K' 18577 Unsigned 16-bit constant 18578 18579 `L' 18580 Signed 16-bit constant shifted left 16 bits 18581 18582 `M' 18583 Constant larger than 31 18584 18585 `N' 18586 Exact power of 2 18587 18588 `O' 18589 Zero 18590 18591 `P' 18592 Constant whose negation is a signed 16-bit constant 18593 18594 `G' 18595 Floating point constant that can be loaded into a register 18596 with one instruction per word 18597 18598 `Q' 18599 Memory operand that is an offset from a register (`m' is 18600 preferable for `asm' statements) 18601 18602 `R' 18603 AIX TOC entry 18604 18605 `S' 18606 Constant suitable as a 64-bit mask operand 18607 18608 `T' 18609 Constant suitable as a 32-bit mask operand 18610 18611 `U' 18612 System V Release 4 small data area reference 18613 18614 _MorphoTech family--`config/mt/mt.h'_ 18615 18616 `I' 18617 Constant for an arithmetic insn (16-bit signed integer). 18618 18619 `J' 18620 The constant 0. 18621 18622 `K' 18623 Constant for a logical insn (16-bit zero-extended integer). 18624 18625 `L' 18626 A constant that can be loaded with `lui' (i.e. the bottom 16 18627 bits are zero). 18628 18629 `M' 18630 A constant that takes two words to load (i.e. not matched by 18631 `I', `K', or `L'). 18632 18633 `N' 18634 Negative 16-bit constants other than -65536. 18635 18636 `O' 18637 A 15-bit signed integer constant. 18638 18639 `P' 18640 A positive 16-bit constant. 18641 18642 _Intel 386--`config/i386/constraints.md'_ 18643 18644 `R' 18645 Legacy register--the eight integer registers available on all 18646 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 18647 18648 `q' 18649 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 18650 `c', and `d'; in 64-bit mode, any integer register. 18651 18652 `Q' 18653 Any register accessible as `Rh': `a', `b', `c', and `d'. 18654 18655 `a' 18656 The `a' register. 18657 18658 `b' 18659 The `b' register. 18660 18661 `c' 18662 The `c' register. 18663 18664 `d' 18665 The `d' register. 18666 18667 `S' 18668 The `si' register. 18669 18670 `D' 18671 The `di' register. 18672 18673 `A' 18674 The `a' and `d' registers, as a pair (for instructions that 18675 return half the result in one and half in the other). 18676 18677 `f' 18678 Any 80387 floating-point (stack) register. 18679 18680 `t' 18681 Top of 80387 floating-point stack (`%st(0)'). 18682 18683 `u' 18684 Second from top of 80387 floating-point stack (`%st(1)'). 18685 18686 `y' 18687 Any MMX register. 18688 18689 `x' 18690 Any SSE register. 18691 18692 `I' 18693 Integer constant in the range 0 ... 31, for 32-bit shifts. 18694 18695 `J' 18696 Integer constant in the range 0 ... 63, for 64-bit shifts. 18697 18698 `K' 18699 Signed 8-bit integer constant. 18700 18701 `L' 18702 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 18703 18704 `M' 18705 0, 1, 2, or 3 (shifts for the `lea' instruction). 18706 18707 `N' 18708 Unsigned 8-bit integer constant (for `in' and `out' 18709 instructions). 18710 18711 `G' 18712 Standard 80387 floating point constant. 18713 18714 `C' 18715 Standard SSE floating point constant. 18716 18717 `e' 18718 32-bit signed integer constant, or a symbolic reference known 18719 to fit that range (for immediate operands in sign-extending 18720 x86-64 instructions). 18721 18722 `Z' 18723 32-bit unsigned integer constant, or a symbolic reference 18724 known to fit that range (for immediate operands in 18725 zero-extending x86-64 instructions). 18726 18727 18728 _Intel IA-64--`config/ia64/ia64.h'_ 18729 18730 `a' 18731 General register `r0' to `r3' for `addl' instruction 18732 18733 `b' 18734 Branch register 18735 18736 `c' 18737 Predicate register (`c' as in "conditional") 18738 18739 `d' 18740 Application register residing in M-unit 18741 18742 `e' 18743 Application register residing in I-unit 18744 18745 `f' 18746 Floating-point register 18747 18748 `m' 18749 Memory operand. Remember that `m' allows postincrement and 18750 postdecrement which require printing with `%Pn' on IA-64. 18751 Use `S' to disallow postincrement and postdecrement. 18752 18753 `G' 18754 Floating-point constant 0.0 or 1.0 18755 18756 `I' 18757 14-bit signed integer constant 18758 18759 `J' 18760 22-bit signed integer constant 18761 18762 `K' 18763 8-bit signed integer constant for logical instructions 18764 18765 `L' 18766 8-bit adjusted signed integer constant for compare pseudo-ops 18767 18768 `M' 18769 6-bit unsigned integer constant for shift counts 18770 18771 `N' 18772 9-bit signed integer constant for load and store 18773 postincrements 18774 18775 `O' 18776 The constant zero 18777 18778 `P' 18779 0 or -1 for `dep' instruction 18780 18781 `Q' 18782 Non-volatile memory for floating-point loads and stores 18783 18784 `R' 18785 Integer constant in the range 1 to 4 for `shladd' instruction 18786 18787 `S' 18788 Memory operand except postincrement and postdecrement 18789 18790 _FRV--`config/frv/frv.h'_ 18791 18792 `a' 18793 Register in the class `ACC_REGS' (`acc0' to `acc7'). 18794 18795 `b' 18796 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 18797 18798 `c' 18799 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 18800 to `icc3'). 18801 18802 `d' 18803 Register in the class `GPR_REGS' (`gr0' to `gr63'). 18804 18805 `e' 18806 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 18807 registers are excluded not in the class but through the use 18808 of a machine mode larger than 4 bytes. 18809 18810 `f' 18811 Register in the class `FPR_REGS' (`fr0' to `fr63'). 18812 18813 `h' 18814 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 18815 registers are excluded not in the class but through the use 18816 of a machine mode larger than 4 bytes. 18817 18818 `l' 18819 Register in the class `LR_REG' (the `lr' register). 18820 18821 `q' 18822 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 18823 Register numbers not divisible by 4 are excluded not in the 18824 class but through the use of a machine mode larger than 8 18825 bytes. 18826 18827 `t' 18828 Register in the class `ICC_REGS' (`icc0' to `icc3'). 18829 18830 `u' 18831 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 18832 18833 `v' 18834 Register in the class `ICR_REGS' (`cc4' to `cc7'). 18835 18836 `w' 18837 Register in the class `FCR_REGS' (`cc0' to `cc3'). 18838 18839 `x' 18840 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 18841 Register numbers not divisible by 4 are excluded not in the 18842 class but through the use of a machine mode larger than 8 18843 bytes. 18844 18845 `z' 18846 Register in the class `SPR_REGS' (`lcr' and `lr'). 18847 18848 `A' 18849 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 18850 18851 `B' 18852 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 18853 18854 `C' 18855 Register in the class `CR_REGS' (`cc0' to `cc7'). 18856 18857 `G' 18858 Floating point constant zero 18859 18860 `I' 18861 6-bit signed integer constant 18862 18863 `J' 18864 10-bit signed integer constant 18865 18866 `L' 18867 16-bit signed integer constant 18868 18869 `M' 18870 16-bit unsigned integer constant 18871 18872 `N' 18873 12-bit signed integer constant that is negative--i.e. in the 18874 range of -2048 to -1 18875 18876 `O' 18877 Constant zero 18878 18879 `P' 18880 12-bit signed integer constant that is greater than 18881 zero--i.e. in the range of 1 to 2047. 18882 18883 18884 _Blackfin family--`config/bfin/bfin.h'_ 18885 18886 `a' 18887 P register 18888 18889 `d' 18890 D register 18891 18892 `z' 18893 A call clobbered P register. 18894 18895 `D' 18896 Even-numbered D register 18897 18898 `W' 18899 Odd-numbered D register 18900 18901 `e' 18902 Accumulator register. 18903 18904 `A' 18905 Even-numbered accumulator register. 18906 18907 `B' 18908 Odd-numbered accumulator register. 18909 18910 `b' 18911 I register 18912 18913 `v' 18914 B register 18915 18916 `f' 18917 M register 18918 18919 `c' 18920 Registers used for circular buffering, i.e. I, B, or L 18921 registers. 18922 18923 `C' 18924 The CC register. 18925 18926 `t' 18927 LT0 or LT1. 18928 18929 `k' 18930 LC0 or LC1. 18931 18932 `u' 18933 LB0 or LB1. 18934 18935 `x' 18936 Any D, P, B, M, I or L register. 18937 18938 `y' 18939 Additional registers typically used only in prologues and 18940 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 18941 USP. 18942 18943 `w' 18944 Any register except accumulators or CC. 18945 18946 `Ksh' 18947 Signed 16 bit integer (in the range -32768 to 32767) 18948 18949 `Kuh' 18950 Unsigned 16 bit integer (in the range 0 to 65535) 18951 18952 `Ks7' 18953 Signed 7 bit integer (in the range -64 to 63) 18954 18955 `Ku7' 18956 Unsigned 7 bit integer (in the range 0 to 127) 18957 18958 `Ku5' 18959 Unsigned 5 bit integer (in the range 0 to 31) 18960 18961 `Ks4' 18962 Signed 4 bit integer (in the range -8 to 7) 18963 18964 `Ks3' 18965 Signed 3 bit integer (in the range -3 to 4) 18966 18967 `Ku3' 18968 Unsigned 3 bit integer (in the range 0 to 7) 18969 18970 `PN' 18971 Constant N, where N is a single-digit constant in the range 0 18972 to 4. 18973 18974 `M1' 18975 Constant 255. 18976 18977 `M2' 18978 Constant 65535. 18979 18980 `J' 18981 An integer constant with exactly a single bit set. 18982 18983 `L' 18984 An integer constant with all bits set except exactly one. 18985 18986 `H' 18987 18988 `Q' 18989 Any SYMBOL_REF. 18990 18991 _M32C--`config/m32c/m32c.c'_ 18992 18993 `Rsp' 18994 `Rfb' 18995 `Rsb' 18996 `$sp', `$fb', `$sb'. 18997 18998 `Rcr' 18999 Any control register, when they're 16 bits wide (nothing if 19000 control registers are 24 bits wide) 19001 19002 `Rcl' 19003 Any control register, when they're 24 bits wide. 19004 19005 `R0w' 19006 `R1w' 19007 `R2w' 19008 `R3w' 19009 $r0, $r1, $r2, $r3. 19010 19011 `R02' 19012 $r0 or $r2, or $r2r0 for 32 bit values. 19013 19014 `R13' 19015 $r1 or $r3, or $r3r1 for 32 bit values. 19016 19017 `Rdi' 19018 A register that can hold a 64 bit value. 19019 19020 `Rhl' 19021 $r0 or $r1 (registers with addressable high/low bytes) 19022 19023 `R23' 19024 $r2 or $r3 19025 19026 `Raa' 19027 Address registers 19028 19029 `Raw' 19030 Address registers when they're 16 bits wide. 19031 19032 `Ral' 19033 Address registers when they're 24 bits wide. 19034 19035 `Rqi' 19036 Registers that can hold QI values. 19037 19038 `Rad' 19039 Registers that can be used with displacements ($a0, $a1, $sb). 19040 19041 `Rsi' 19042 Registers that can hold 32 bit values. 19043 19044 `Rhi' 19045 Registers that can hold 16 bit values. 19046 19047 `Rhc' 19048 Registers chat can hold 16 bit values, including all control 19049 registers. 19050 19051 `Rra' 19052 $r0 through R1, plus $a0 and $a1. 19053 19054 `Rfl' 19055 The flags register. 19056 19057 `Rmm' 19058 The memory-based pseudo-registers $mem0 through $mem15. 19059 19060 `Rpi' 19061 Registers that can hold pointers (16 bit registers for r8c, 19062 m16c; 24 bit registers for m32cm, m32c). 19063 19064 `Rpa' 19065 Matches multiple registers in a PARALLEL to form a larger 19066 register. Used to match function return values. 19067 19068 `Is3' 19069 -8 ... 7 19070 19071 `IS1' 19072 -128 ... 127 19073 19074 `IS2' 19075 -32768 ... 32767 19076 19077 `IU2' 19078 0 ... 65535 19079 19080 `In4' 19081 -8 ... -1 or 1 ... 8 19082 19083 `In5' 19084 -16 ... -1 or 1 ... 16 19085 19086 `In6' 19087 -32 ... -1 or 1 ... 32 19088 19089 `IM2' 19090 -65536 ... -1 19091 19092 `Ilb' 19093 An 8 bit value with exactly one bit set. 19094 19095 `Ilw' 19096 A 16 bit value with exactly one bit set. 19097 19098 `Sd' 19099 The common src/dest memory addressing modes. 19100 19101 `Sa' 19102 Memory addressed using $a0 or $a1. 19103 19104 `Si' 19105 Memory addressed with immediate addresses. 19106 19107 `Ss' 19108 Memory addressed using the stack pointer ($sp). 19109 19110 `Sf' 19111 Memory addressed using the frame base register ($fb). 19112 19113 `Ss' 19114 Memory addressed using the small base register ($sb). 19115 19116 `S1' 19117 $r1h 19118 19119 _MIPS--`config/mips/constraints.md'_ 19120 19121 `d' 19122 An address register. This is equivalent to `r' unless 19123 generating MIPS16 code. 19124 19125 `f' 19126 A floating-point register (if available). 19127 19128 `h' 19129 The `hi' register. 19130 19131 `l' 19132 The `lo' register. 19133 19134 `x' 19135 The `hi' and `lo' registers. 19136 19137 `c' 19138 A register suitable for use in an indirect jump. This will 19139 always be `$25' for `-mabicalls'. 19140 19141 `y' 19142 Equivalent to `r'; retained for backwards compatibility. 19143 19144 `z' 19145 A floating-point condition code register. 19146 19147 `I' 19148 A signed 16-bit constant (for arithmetic instructions). 19149 19150 `J' 19151 Integer zero. 19152 19153 `K' 19154 An unsigned 16-bit constant (for logic instructions). 19155 19156 `L' 19157 A signed 32-bit constant in which the lower 16 bits are zero. 19158 Such constants can be loaded using `lui'. 19159 19160 `M' 19161 A constant that cannot be loaded using `lui', `addiu' or 19162 `ori'. 19163 19164 `N' 19165 A constant in the range -65535 to -1 (inclusive). 19166 19167 `O' 19168 A signed 15-bit constant. 19169 19170 `P' 19171 A constant in the range 1 to 65535 (inclusive). 19172 19173 `G' 19174 Floating-point zero. 19175 19176 `R' 19177 An address that can be used in a non-macro load or store. 19178 19179 _Motorola 680x0--`config/m68k/m68k.h'_ 19180 19181 `a' 19182 Address register 19183 19184 `d' 19185 Data register 19186 19187 `f' 19188 68881 floating-point register, if available 19189 19190 `I' 19191 Integer in the range 1 to 8 19192 19193 `J' 19194 16-bit signed number 19195 19196 `K' 19197 Signed number whose magnitude is greater than 0x80 19198 19199 `L' 19200 Integer in the range -8 to -1 19201 19202 `M' 19203 Signed number whose magnitude is greater than 0x100 19204 19205 `G' 19206 Floating point constant that is not a 68881 constant 19207 19208 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_ 19209 19210 `a' 19211 Register `a' 19212 19213 `b' 19214 Register `b' 19215 19216 `d' 19217 Register `d' 19218 19219 `q' 19220 An 8-bit register 19221 19222 `t' 19223 Temporary soft register _.tmp 19224 19225 `u' 19226 A soft register _.d1 to _.d31 19227 19228 `w' 19229 Stack pointer register 19230 19231 `x' 19232 Register `x' 19233 19234 `y' 19235 Register `y' 19236 19237 `z' 19238 Pseudo register `z' (replaced by `x' or `y' at the end) 19239 19240 `A' 19241 An address register: x, y or z 19242 19243 `B' 19244 An address register: x or y 19245 19246 `D' 19247 Register pair (x:d) to form a 32-bit value 19248 19249 `L' 19250 Constants in the range -65536 to 65535 19251 19252 `M' 19253 Constants whose 16-bit low part is zero 19254 19255 `N' 19256 Constant integer 1 or -1 19257 19258 `O' 19259 Constant integer 16 19260 19261 `P' 19262 Constants in the range -8 to 2 19263 19264 19265 _SPARC--`config/sparc/sparc.h'_ 19266 19267 `f' 19268 Floating-point register on the SPARC-V8 architecture and 19269 lower floating-point register on the SPARC-V9 architecture. 19270 19271 `e' 19272 Floating-point register. It is equivalent to `f' on the 19273 SPARC-V8 architecture and contains both lower and upper 19274 floating-point registers on the SPARC-V9 architecture. 19275 19276 `c' 19277 Floating-point condition code register. 19278 19279 `d' 19280 Lower floating-point register. It is only valid on the 19281 SPARC-V9 architecture when the Visual Instruction Set is 19282 available. 19283 19284 `b' 19285 Floating-point register. It is only valid on the SPARC-V9 19286 architecture when the Visual Instruction Set is available. 19287 19288 `h' 19289 64-bit global or out register for the SPARC-V8+ architecture. 19290 19291 `I' 19292 Signed 13-bit constant 19293 19294 `J' 19295 Zero 19296 19297 `K' 19298 32-bit constant with the low 12 bits clear (a constant that 19299 can be loaded with the `sethi' instruction) 19300 19301 `L' 19302 A constant in the range supported by `movcc' instructions 19303 19304 `M' 19305 A constant in the range supported by `movrcc' instructions 19306 19307 `N' 19308 Same as `K', except that it verifies that bits that are not 19309 in the lower 32-bit range are all zero. Must be used instead 19310 of `K' for modes wider than `SImode' 19311 19312 `O' 19313 The constant 4096 19314 19315 `G' 19316 Floating-point zero 19317 19318 `H' 19319 Signed 13-bit constant, sign-extended to 32 or 64 bits 19320 19321 `Q' 19322 Floating-point constant whose integral representation can be 19323 moved into an integer register using a single sethi 19324 instruction 19325 19326 `R' 19327 Floating-point constant whose integral representation can be 19328 moved into an integer register using a single mov instruction 19329 19330 `S' 19331 Floating-point constant whose integral representation can be 19332 moved into an integer register using a high/lo_sum 19333 instruction sequence 19334 19335 `T' 19336 Memory address aligned to an 8-byte boundary 19337 19338 `U' 19339 Even register 19340 19341 `W' 19342 Memory address for `e' constraint registers 19343 19344 `Y' 19345 Vector zero 19346 19347 19348 _TMS320C3x/C4x--`config/c4x/c4x.h'_ 19349 19350 `a' 19351 Auxiliary (address) register (ar0-ar7) 19352 19353 `b' 19354 Stack pointer register (sp) 19355 19356 `c' 19357 Standard (32-bit) precision integer register 19358 19359 `f' 19360 Extended (40-bit) precision register (r0-r11) 19361 19362 `k' 19363 Block count register (bk) 19364 19365 `q' 19366 Extended (40-bit) precision low register (r0-r7) 19367 19368 `t' 19369 Extended (40-bit) precision register (r0-r1) 19370 19371 `u' 19372 Extended (40-bit) precision register (r2-r3) 19373 19374 `v' 19375 Repeat count register (rc) 19376 19377 `x' 19378 Index register (ir0-ir1) 19379 19380 `y' 19381 Status (condition code) register (st) 19382 19383 `z' 19384 Data page register (dp) 19385 19386 `G' 19387 Floating-point zero 19388 19389 `H' 19390 Immediate 16-bit floating-point constant 19391 19392 `I' 19393 Signed 16-bit constant 19394 19395 `J' 19396 Signed 8-bit constant 19397 19398 `K' 19399 Signed 5-bit constant 19400 19401 `L' 19402 Unsigned 16-bit constant 19403 19404 `M' 19405 Unsigned 8-bit constant 19406 19407 `N' 19408 Ones complement of unsigned 16-bit constant 19409 19410 `O' 19411 High 16-bit constant (32-bit constant with 16 LSBs zero) 19412 19413 `Q' 19414 Indirect memory reference with signed 8-bit or index register 19415 displacement 19416 19417 `R' 19418 Indirect memory reference with unsigned 5-bit displacement 19419 19420 `S' 19421 Indirect memory reference with 1 bit or index register 19422 displacement 19423 19424 `T' 19425 Direct memory reference 19426 19427 `U' 19428 Symbolic address 19429 19430 19431 _S/390 and zSeries--`config/s390/s390.h'_ 19432 19433 `a' 19434 Address register (general purpose register except r0) 19435 19436 `c' 19437 Condition code register 19438 19439 `d' 19440 Data register (arbitrary general purpose register) 19441 19442 `f' 19443 Floating-point register 19444 19445 `I' 19446 Unsigned 8-bit constant (0-255) 19447 19448 `J' 19449 Unsigned 12-bit constant (0-4095) 19450 19451 `K' 19452 Signed 16-bit constant (-32768-32767) 19453 19454 `L' 19455 Value appropriate as displacement. 19456 `(0..4095)' 19457 for short displacement 19458 19459 `(-524288..524287)' 19460 for long displacement 19461 19462 `M' 19463 Constant integer with a value of 0x7fffffff. 19464 19465 `N' 19466 Multiple letter constraint followed by 4 parameter letters. 19467 `0..9:' 19468 number of the part counting from most to least 19469 significant 19470 19471 `H,Q:' 19472 mode of the part 19473 19474 `D,S,H:' 19475 mode of the containing operand 19476 19477 `0,F:' 19478 value of the other parts (F--all bits set) 19479 The constraint matches if the specified part of a constant 19480 has a value different from it's other parts. 19481 19482 `Q' 19483 Memory reference without index register and with short 19484 displacement. 19485 19486 `R' 19487 Memory reference with index register and short displacement. 19488 19489 `S' 19490 Memory reference without index register but with long 19491 displacement. 19492 19493 `T' 19494 Memory reference with index register and long displacement. 19495 19496 `U' 19497 Pointer with short displacement. 19498 19499 `W' 19500 Pointer with long displacement. 19501 19502 `Y' 19503 Shift count operand. 19504 19505 19506 _Score family--`config/score/score.h'_ 19507 19508 `d' 19509 Registers from r0 to r32. 19510 19511 `e' 19512 Registers from r0 to r16. 19513 19514 `t' 19515 r8--r11 or r22--r27 registers. 19516 19517 `h' 19518 hi register. 19519 19520 `l' 19521 lo register. 19522 19523 `x' 19524 hi + lo register. 19525 19526 `q' 19527 cnt register. 19528 19529 `y' 19530 lcb register. 19531 19532 `z' 19533 scb register. 19534 19535 `a' 19536 cnt + lcb + scb register. 19537 19538 `c' 19539 cr0--cr15 register. 19540 19541 `b' 19542 cp1 registers. 19543 19544 `f' 19545 cp2 registers. 19546 19547 `i' 19548 cp3 registers. 19549 19550 `j' 19551 cp1 + cp2 + cp3 registers. 19552 19553 `I' 19554 High 16-bit constant (32-bit constant with 16 LSBs zero). 19555 19556 `J' 19557 Unsigned 5 bit integer (in the range 0 to 31). 19558 19559 `K' 19560 Unsigned 16 bit integer (in the range 0 to 65535). 19561 19562 `L' 19563 Signed 16 bit integer (in the range -32768 to 32767). 19564 19565 `M' 19566 Unsigned 14 bit integer (in the range 0 to 16383). 19567 19568 `N' 19569 Signed 14 bit integer (in the range -8192 to 8191). 19570 19571 `Z' 19572 Any SYMBOL_REF. 19573 19574 _Xstormy16--`config/stormy16/stormy16.h'_ 19575 19576 `a' 19577 Register r0. 19578 19579 `b' 19580 Register r1. 19581 19582 `c' 19583 Register r2. 19584 19585 `d' 19586 Register r8. 19587 19588 `e' 19589 Registers r0 through r7. 19590 19591 `t' 19592 Registers r0 and r1. 19593 19594 `y' 19595 The carry register. 19596 19597 `z' 19598 Registers r8 and r9. 19599 19600 `I' 19601 A constant between 0 and 3 inclusive. 19602 19603 `J' 19604 A constant that has exactly one bit set. 19605 19606 `K' 19607 A constant that has exactly one bit clear. 19608 19609 `L' 19610 A constant between 0 and 255 inclusive. 19611 19612 `M' 19613 A constant between -255 and 0 inclusive. 19614 19615 `N' 19616 A constant between -3 and 0 inclusive. 19617 19618 `O' 19619 A constant between 1 and 4 inclusive. 19620 19621 `P' 19622 A constant between -4 and -1 inclusive. 19623 19624 `Q' 19625 A memory reference that is a stack push. 19626 19627 `R' 19628 A memory reference that is a stack pop. 19629 19630 `S' 19631 A memory reference that refers to a constant address of known 19632 value. 19633 19634 `T' 19635 The register indicated by Rx (not implemented yet). 19636 19637 `U' 19638 A constant that is not between 2 and 15 inclusive. 19639 19640 `Z' 19641 The constant 0. 19642 19643 19644 _Xtensa--`config/xtensa/xtensa.h'_ 19645 19646 `a' 19647 General-purpose 32-bit register 19648 19649 `b' 19650 One-bit boolean register 19651 19652 `A' 19653 MAC16 40-bit accumulator register 19654 19655 `I' 19656 Signed 12-bit integer constant, for use in MOVI instructions 19657 19658 `J' 19659 Signed 8-bit integer constant, for use in ADDI instructions 19660 19661 `K' 19662 Integer constant valid for BccI instructions 19663 19664 `L' 19665 Unsigned constant valid for BccUI instructions 19666 19667 19668 19669 19670 File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 19671 19672 5.37 Controlling Names Used in Assembler Code 19673 ============================================= 19674 19675 You can specify the name to be used in the assembler code for a C 19676 function or variable by writing the `asm' (or `__asm__') keyword after 19677 the declarator as follows: 19678 19679 int foo asm ("myfoo") = 2; 19680 19681 This specifies that the name to be used for the variable `foo' in the 19682 assembler code should be `myfoo' rather than the usual `_foo'. 19683 19684 On systems where an underscore is normally prepended to the name of a C 19685 function or variable, this feature allows you to define names for the 19686 linker that do not start with an underscore. 19687 19688 It does not make sense to use this feature with a non-static local 19689 variable since such variables do not have assembler names. If you are 19690 trying to put the variable in a particular register, see *Note Explicit 19691 Reg Vars::. GCC presently accepts such code with a warning, but will 19692 probably be changed to issue an error, rather than a warning, in the 19693 future. 19694 19695 You cannot use `asm' in this way in a function _definition_; but you 19696 can get the same effect by writing a declaration for the function 19697 before its definition and putting `asm' there, like this: 19698 19699 extern func () asm ("FUNC"); 19700 19701 func (x, y) 19702 int x, y; 19703 /* ... */ 19704 19705 It is up to you to make sure that the assembler names you choose do not 19706 conflict with any other assembler symbols. Also, you must not use a 19707 register name; that would produce completely invalid assembler code. 19708 GCC does not as yet have the ability to store static variables in 19709 registers. Perhaps that will be added. 19710 19711 19712 File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 19713 19714 5.38 Variables in Specified Registers 19715 ===================================== 19716 19717 GNU C allows you to put a few global variables into specified hardware 19718 registers. You can also specify the register in which an ordinary 19719 register variable should be allocated. 19720 19721 * Global register variables reserve registers throughout the program. 19722 This may be useful in programs such as programming language 19723 interpreters which have a couple of global variables that are 19724 accessed very often. 19725 19726 * Local register variables in specific registers do not reserve the 19727 registers, except at the point where they are used as input or 19728 output operands in an `asm' statement and the `asm' statement 19729 itself is not deleted. The compiler's data flow analysis is 19730 capable of determining where the specified registers contain live 19731 values, and where they are available for other uses. Stores into 19732 local register variables may be deleted when they appear to be 19733 dead according to dataflow analysis. References to local register 19734 variables may be deleted or moved or simplified. 19735 19736 These local variables are sometimes convenient for use with the 19737 extended `asm' feature (*note Extended Asm::), if you want to 19738 write one output of the assembler instruction directly into a 19739 particular register. (This will work provided the register you 19740 specify fits the constraints specified for that operand in the 19741 `asm'.) 19742 19743 * Menu: 19744 19745 * Global Reg Vars:: 19746 * Local Reg Vars:: 19747 19748 19749 File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 19750 19751 5.38.1 Defining Global Register Variables 19752 ----------------------------------------- 19753 19754 You can define a global register variable in GNU C like this: 19755 19756 register int *foo asm ("a5"); 19757 19758 Here `a5' is the name of the register which should be used. Choose a 19759 register which is normally saved and restored by function calls on your 19760 machine, so that library routines will not clobber it. 19761 19762 Naturally the register name is cpu-dependent, so you would need to 19763 conditionalize your program according to cpu type. The register `a5' 19764 would be a good choice on a 68000 for a variable of pointer type. On 19765 machines with register windows, be sure to choose a "global" register 19766 that is not affected magically by the function call mechanism. 19767 19768 In addition, operating systems on one type of cpu may differ in how 19769 they name the registers; then you would need additional conditionals. 19770 For example, some 68000 operating systems call this register `%a5'. 19771 19772 Eventually there may be a way of asking the compiler to choose a 19773 register automatically, but first we need to figure out how it should 19774 choose and how to enable you to guide the choice. No solution is 19775 evident. 19776 19777 Defining a global register variable in a certain register reserves that 19778 register entirely for this use, at least within the current compilation. 19779 The register will not be allocated for any other purpose in the 19780 functions in the current compilation. The register will not be saved 19781 and restored by these functions. Stores into this register are never 19782 deleted even if they would appear to be dead, but references may be 19783 deleted or moved or simplified. 19784 19785 It is not safe to access the global register variables from signal 19786 handlers, or from more than one thread of control, because the system 19787 library routines may temporarily use the register for other things 19788 (unless you recompile them specially for the task at hand). 19789 19790 It is not safe for one function that uses a global register variable to 19791 call another such function `foo' by way of a third function `lose' that 19792 was compiled without knowledge of this variable (i.e. in a different 19793 source file in which the variable wasn't declared). This is because 19794 `lose' might save the register and put some other value there. For 19795 example, you can't expect a global register variable to be available in 19796 the comparison-function that you pass to `qsort', since `qsort' might 19797 have put something else in that register. (If you are prepared to 19798 recompile `qsort' with the same global register variable, you can solve 19799 this problem.) 19800 19801 If you want to recompile `qsort' or other source files which do not 19802 actually use your global register variable, so that they will not use 19803 that register for any other purpose, then it suffices to specify the 19804 compiler option `-ffixed-REG'. You need not actually add a global 19805 register declaration to their source code. 19806 19807 A function which can alter the value of a global register variable 19808 cannot safely be called from a function compiled without this variable, 19809 because it could clobber the value the caller expects to find there on 19810 return. Therefore, the function which is the entry point into the part 19811 of the program that uses the global register variable must explicitly 19812 save and restore the value which belongs to its caller. 19813 19814 On most machines, `longjmp' will restore to each global register 19815 variable the value it had at the time of the `setjmp'. On some 19816 machines, however, `longjmp' will not change the value of global 19817 register variables. To be portable, the function that called `setjmp' 19818 should make other arrangements to save the values of the global register 19819 variables, and to restore them in a `longjmp'. This way, the same 19820 thing will happen regardless of what `longjmp' does. 19821 19822 All global register variable declarations must precede all function 19823 definitions. If such a declaration could appear after function 19824 definitions, the declaration would be too late to prevent the register 19825 from being used for other purposes in the preceding functions. 19826 19827 Global register variables may not have initial values, because an 19828 executable file has no means to supply initial contents for a register. 19829 19830 On the SPARC, there are reports that g3 ... g7 are suitable registers, 19831 but certain library functions, such as `getwd', as well as the 19832 subroutines for division and remainder, modify g3 and g4. g1 and g2 19833 are local temporaries. 19834 19835 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 19836 course, it will not do to use more than a few of those. 19837 19838 19839 File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 19840 19841 5.38.2 Specifying Registers for Local Variables 19842 ----------------------------------------------- 19843 19844 You can define a local register variable with a specified register like 19845 this: 19846 19847 register int *foo asm ("a5"); 19848 19849 Here `a5' is the name of the register which should be used. Note that 19850 this is the same syntax used for defining global register variables, 19851 but for a local variable it would appear within a function. 19852 19853 Naturally the register name is cpu-dependent, but this is not a 19854 problem, since specific registers are most often useful with explicit 19855 assembler instructions (*note Extended Asm::). Both of these things 19856 generally require that you conditionalize your program according to cpu 19857 type. 19858 19859 In addition, operating systems on one type of cpu may differ in how 19860 they name the registers; then you would need additional conditionals. 19861 For example, some 68000 operating systems call this register `%a5'. 19862 19863 Defining such a register variable does not reserve the register; it 19864 remains available for other uses in places where flow control determines 19865 the variable's value is not live. 19866 19867 This option does not guarantee that GCC will generate code that has 19868 this variable in the register you specify at all times. You may not 19869 code an explicit reference to this register in the _assembler 19870 instruction template_ part of an `asm' statement and assume it will 19871 always refer to this variable. However, using the variable as an `asm' 19872 _operand_ guarantees that the specified register is used for the 19873 operand. 19874 19875 Stores into local register variables may be deleted when they appear 19876 to be dead according to dataflow analysis. References to local 19877 register variables may be deleted or moved or simplified. 19878 19879 As for global register variables, it's recommended that you choose a 19880 register which is normally saved and restored by function calls on your 19881 machine, so that library routines will not clobber it. A common 19882 pitfall is to initialize multiple call-clobbered registers with 19883 arbitrary expressions, where a function call or library call for an 19884 arithmetic operator will overwrite a register value from a previous 19885 assignment, for example `r0' below: 19886 register int *p1 asm ("r0") = ...; 19887 register int *p2 asm ("r1") = ...; 19888 In those cases, a solution is to use a temporary variable for each 19889 arbitrary expression. *Note Example of asm with clobbered asm reg::. 19890 19891 19892 File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 19893 19894 5.39 Alternate Keywords 19895 ======================= 19896 19897 `-ansi' and the various `-std' options disable certain keywords. This 19898 causes trouble when you want to use GNU C extensions, or a 19899 general-purpose header file that should be usable by all programs, 19900 including ISO C programs. The keywords `asm', `typeof' and `inline' 19901 are not available in programs compiled with `-ansi' or `-std' (although 19902 `inline' can be used in a program compiled with `-std=c99'). The ISO 19903 C99 keyword `restrict' is only available when `-std=gnu99' (which will 19904 eventually be the default) or `-std=c99' (or the equivalent 19905 `-std=iso9899:1999') is used. 19906 19907 The way to solve these problems is to put `__' at the beginning and 19908 end of each problematical keyword. For example, use `__asm__' instead 19909 of `asm', and `__inline__' instead of `inline'. 19910 19911 Other C compilers won't accept these alternative keywords; if you want 19912 to compile with another compiler, you can define the alternate keywords 19913 as macros to replace them with the customary keywords. It looks like 19914 this: 19915 19916 #ifndef __GNUC__ 19917 #define __asm__ asm 19918 #endif 19919 19920 `-pedantic' and other options cause warnings for many GNU C extensions. 19921 You can prevent such warnings within one expression by writing 19922 `__extension__' before the expression. `__extension__' has no effect 19923 aside from this. 19924 19925 19926 File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 19927 19928 5.40 Incomplete `enum' Types 19929 ============================ 19930 19931 You can define an `enum' tag without specifying its possible values. 19932 This results in an incomplete type, much like what you get if you write 19933 `struct foo' without describing the elements. A later declaration 19934 which does specify the possible values completes the type. 19935 19936 You can't allocate variables or storage using the type while it is 19937 incomplete. However, you can work with pointers to that type. 19938 19939 This extension may not be very useful, but it makes the handling of 19940 `enum' more consistent with the way `struct' and `union' are handled. 19941 19942 This extension is not supported by GNU C++. 19943 19944 19945 File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 19946 19947 5.41 Function Names as Strings 19948 ============================== 19949 19950 GCC provides three magic variables which hold the name of the current 19951 function, as a string. The first of these is `__func__', which is part 19952 of the C99 standard: 19953 19954 The identifier `__func__' is implicitly declared by the translator 19955 as if, immediately following the opening brace of each function 19956 definition, the declaration 19957 static const char __func__[] = "function-name"; 19958 19959 appeared, where function-name is the name of the lexically-enclosing 19960 function. This name is the unadorned name of the function. 19961 19962 `__FUNCTION__' is another name for `__func__'. Older versions of GCC 19963 recognize only this name. However, it is not standardized. For 19964 maximum portability, we recommend you use `__func__', but provide a 19965 fallback definition with the preprocessor: 19966 19967 #if __STDC_VERSION__ < 199901L 19968 # if __GNUC__ >= 2 19969 # define __func__ __FUNCTION__ 19970 # else 19971 # define __func__ "<unknown>" 19972 # endif 19973 #endif 19974 19975 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 19976 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 19977 the function as well as its bare name. For example, this program: 19978 19979 extern "C" { 19980 extern int printf (char *, ...); 19981 } 19982 19983 class a { 19984 public: 19985 void sub (int i) 19986 { 19987 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 19988 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 19989 } 19990 }; 19991 19992 int 19993 main (void) 19994 { 19995 a ax; 19996 ax.sub (0); 19997 return 0; 19998 } 19999 20000 gives this output: 20001 20002 __FUNCTION__ = sub 20003 __PRETTY_FUNCTION__ = void a::sub(int) 20004 20005 These identifiers are not preprocessor macros. In GCC 3.3 and 20006 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were 20007 treated as string literals; they could be used to initialize `char' 20008 arrays, and they could be concatenated with other string literals. GCC 20009 3.4 and later treat them as variables, like `__func__'. In C++, 20010 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables. 20011 20012 20013 File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 20014 20015 5.42 Getting the Return or Frame Address of a Function 20016 ====================================================== 20017 20018 These functions may be used to get information about the callers of a 20019 function. 20020 20021 -- Built-in Function: void * __builtin_return_address (unsigned int 20022 LEVEL) 20023 This function returns the return address of the current function, 20024 or of one of its callers. The LEVEL argument is number of frames 20025 to scan up the call stack. A value of `0' yields the return 20026 address of the current function, a value of `1' yields the return 20027 address of the caller of the current function, and so forth. When 20028 inlining the expected behavior is that the function will return 20029 the address of the function that will be returned to. To work 20030 around this behavior use the `noinline' function attribute. 20031 20032 The LEVEL argument must be a constant integer. 20033 20034 On some machines it may be impossible to determine the return 20035 address of any function other than the current one; in such cases, 20036 or when the top of the stack has been reached, this function will 20037 return `0' or a random value. In addition, 20038 `__builtin_frame_address' may be used to determine if the top of 20039 the stack has been reached. 20040 20041 This function should only be used with a nonzero argument for 20042 debugging purposes. 20043 20044 -- Built-in Function: void * __builtin_frame_address (unsigned int 20045 LEVEL) 20046 This function is similar to `__builtin_return_address', but it 20047 returns the address of the function frame rather than the return 20048 address of the function. Calling `__builtin_frame_address' with a 20049 value of `0' yields the frame address of the current function, a 20050 value of `1' yields the frame address of the caller of the current 20051 function, and so forth. 20052 20053 The frame is the area on the stack which holds local variables and 20054 saved registers. The frame address is normally the address of the 20055 first word pushed on to the stack by the function. However, the 20056 exact definition depends upon the processor and the calling 20057 convention. If the processor has a dedicated frame pointer 20058 register, and the function has a frame, then 20059 `__builtin_frame_address' will return the value of the frame 20060 pointer register. 20061 20062 On some machines it may be impossible to determine the frame 20063 address of any function other than the current one; in such cases, 20064 or when the top of the stack has been reached, this function will 20065 return `0' if the first frame pointer is properly initialized by 20066 the startup code. 20067 20068 This function should only be used with a nonzero argument for 20069 debugging purposes. 20070 20071 20072 File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 20073 20074 5.43 Using vector instructions through built-in functions 20075 ========================================================= 20076 20077 On some targets, the instruction set contains SIMD vector instructions 20078 that operate on multiple values contained in one large register at the 20079 same time. For example, on the i386 the MMX, 3Dnow! and SSE extensions 20080 can be used this way. 20081 20082 The first step in using these extensions is to provide the necessary 20083 data types. This should be done using an appropriate `typedef': 20084 20085 typedef int v4si __attribute__ ((vector_size (16))); 20086 20087 The `int' type specifies the base type, while the attribute specifies 20088 the vector size for the variable, measured in bytes. For example, the 20089 declaration above causes the compiler to set the mode for the `v4si' 20090 type to be 16 bytes wide and divided into `int' sized units. For a 20091 32-bit `int' this means a vector of 4 units of 4 bytes, and the 20092 corresponding mode of `foo' will be V4SI. 20093 20094 The `vector_size' attribute is only applicable to integral and float 20095 scalars, although arrays, pointers, and function return values are 20096 allowed in conjunction with this construct. 20097 20098 All the basic integer types can be used as base types, both as signed 20099 and as unsigned: `char', `short', `int', `long', `long long'. In 20100 addition, `float' and `double' can be used to build floating-point 20101 vector types. 20102 20103 Specifying a combination that is not valid for the current architecture 20104 will cause GCC to synthesize the instructions using a narrower mode. 20105 For example, if you specify a variable of type `V4SI' and your 20106 architecture does not allow for this specific SIMD type, GCC will 20107 produce code that uses 4 `SIs'. 20108 20109 The types defined in this manner can be used with a subset of normal C 20110 operations. Currently, GCC will allow using the following operators on 20111 these types: `+, -, *, /, unary minus, ^, |, &, ~'. 20112 20113 The operations behave like C++ `valarrays'. Addition is defined as 20114 the addition of the corresponding elements of the operands. For 20115 example, in the code below, each of the 4 elements in A will be added 20116 to the corresponding 4 elements in B and the resulting vector will be 20117 stored in C. 20118 20119 typedef int v4si __attribute__ ((vector_size (16))); 20120 20121 v4si a, b, c; 20122 20123 c = a + b; 20124 20125 Subtraction, multiplication, division, and the logical operations 20126 operate in a similar manner. Likewise, the result of using the unary 20127 minus or complement operators on a vector type is a vector whose 20128 elements are the negative or complemented values of the corresponding 20129 elements in the operand. 20130 20131 You can declare variables and use them in function calls and returns, 20132 as well as in assignments and some casts. You can specify a vector 20133 type as a return type for a function. Vector types can also be used as 20134 function arguments. It is possible to cast from one vector type to 20135 another, provided they are of the same size (in fact, you can also cast 20136 vectors to and from other datatypes of the same size). 20137 20138 You cannot operate between vectors of different lengths or different 20139 signedness without a cast. 20140 20141 A port that supports hardware vector operations, usually provides a set 20142 of built-in functions that can be used to operate on vectors. For 20143 example, a function to add two vectors and multiply the result by a 20144 third could look like this: 20145 20146 v4si f (v4si a, v4si b, v4si c) 20147 { 20148 v4si tmp = __builtin_addv4si (a, b); 20149 return __builtin_mulv4si (tmp, c); 20150 } 20151 20152 20153 File: gcc.info, Node: Offsetof, Next: Atomic Builtins, Prev: Vector Extensions, Up: C Extensions 20154 20155 5.44 Offsetof 20156 ============= 20157 20158 GCC implements for both C and C++ a syntactic extension to implement 20159 the `offsetof' macro. 20160 20161 primary: 20162 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 20163 20164 offsetof_member_designator: 20165 `identifier' 20166 | offsetof_member_designator "." `identifier' 20167 | offsetof_member_designator "[" `expr' "]" 20168 20169 This extension is sufficient such that 20170 20171 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 20172 20173 is a suitable definition of the `offsetof' macro. In C++, TYPE may be 20174 dependent. In either case, MEMBER may consist of a single identifier, 20175 or a sequence of member accesses and array references. 20176 20177 20178 File: gcc.info, Node: Atomic Builtins, Next: Object Size Checking, Prev: Offsetof, Up: C Extensions 20179 20180 5.45 Built-in functions for atomic memory access 20181 ================================================ 20182 20183 The following builtins are intended to be compatible with those 20184 described in the `Intel Itanium Processor-specific Application Binary 20185 Interface', section 7.4. As such, they depart from the normal GCC 20186 practice of using the "__builtin_" prefix, and further that they are 20187 overloaded such that they work on multiple types. 20188 20189 The definition given in the Intel documentation allows only for the 20190 use of the types `int', `long', `long long' as well as their unsigned 20191 counterparts. GCC will allow any integral scalar or pointer type that 20192 is 1, 2, 4 or 8 bytes in length. 20193 20194 Not all operations are supported by all target processors. If a 20195 particular operation cannot be implemented on the target processor, a 20196 warning will be generated and a call an external function will be 20197 generated. The external function will carry the same name as the 20198 builtin, with an additional suffix `_N' where N is the size of the data 20199 type. 20200 20201 In most cases, these builtins are considered a "full barrier". That 20202 is, no memory operand will be moved across the operation, either 20203 forward or backward. Further, instructions will be issued as necessary 20204 to prevent the processor from speculating loads across the operation 20205 and from queuing stores after the operation. 20206 20207 All of the routines are are described in the Intel documentation to 20208 take "an optional list of variables protected by the memory barrier". 20209 It's not clear what is meant by that; it could mean that _only_ the 20210 following variables are protected, or it could mean that these variables 20211 should in addition be protected. At present GCC ignores this list and 20212 protects all variables which are globally accessible. If in the future 20213 we make some use of this list, an empty list will continue to mean all 20214 globally accessible variables. 20215 20216 `TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 20217 `TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 20218 `TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 20219 `TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 20220 `TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 20221 `TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 20222 These builtins perform the operation suggested by the name, and 20223 returns the value that had previously been in memory. That is, 20224 20225 { tmp = *ptr; *ptr OP= value; return tmp; } 20226 { tmp = *ptr; *ptr = ~tmp & value; return tmp; } // nand 20227 20228 `TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 20229 `TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 20230 `TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 20231 `TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 20232 `TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 20233 `TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 20234 These builtins perform the operation suggested by the name, and 20235 return the new value. That is, 20236 20237 { *ptr OP= value; return *ptr; } 20238 { *ptr = ~*ptr & value; return *ptr; } // nand 20239 20240 `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 20241 `TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 20242 These builtins perform an atomic compare and swap. That is, if 20243 the current value of `*PTR' is OLDVAL, then write NEWVAL into 20244 `*PTR'. 20245 20246 The "bool" version returns true if the comparison is successful and 20247 NEWVAL was written. The "val" version returns the contents of 20248 `*PTR' before the operation. 20249 20250 `__sync_synchronize (...)' 20251 This builtin issues a full memory barrier. 20252 20253 `TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 20254 This builtin, as described by Intel, is not a traditional 20255 test-and-set operation, but rather an atomic exchange operation. 20256 It writes VALUE into `*PTR', and returns the previous contents of 20257 `*PTR'. 20258 20259 Many targets have only minimal support for such locks, and do not 20260 support a full exchange operation. In this case, a target may 20261 support reduced functionality here by which the _only_ valid value 20262 to store is the immediate constant 1. The exact value actually 20263 stored in `*PTR' is implementation defined. 20264 20265 This builtin is not a full barrier, but rather an "acquire 20266 barrier". This means that references after the builtin cannot 20267 move to (or be speculated to) before the builtin, but previous 20268 memory stores may not be globally visible yet, and previous memory 20269 loads may not yet be satisfied. 20270 20271 `void __sync_lock_release (TYPE *ptr, ...)' 20272 This builtin releases the lock acquired by 20273 `__sync_lock_test_and_set'. Normally this means writing the 20274 constant 0 to `*PTR'. 20275 20276 This builtin is not a full barrier, but rather a "release barrier". 20277 This means that all previous memory stores are globally visible, 20278 and all previous memory loads have been satisfied, but following 20279 memory reads are not prevented from being speculated to before the 20280 barrier. 20281 20282 20283 File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: Atomic Builtins, Up: C Extensions 20284 20285 5.46 Object Size Checking Builtins 20286 ================================== 20287 20288 GCC implements a limited buffer overflow protection mechanism that can 20289 prevent some buffer overflow attacks. 20290 20291 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 20292 TYPE) 20293 is a built-in construct that returns a constant number of bytes 20294 from PTR to the end of the object PTR pointer points to (if known 20295 at compile time). `__builtin_object_size' never evaluates its 20296 arguments for side-effects. If there are any side-effects in 20297 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 20298 for TYPE 2 or 3. If there are multiple objects PTR can point to 20299 and all of them are known at compile time, the returned number is 20300 the maximum of remaining byte counts in those objects if TYPE & 2 20301 is 0 and minimum if nonzero. If it is not possible to determine 20302 which objects PTR points to at compile time, 20303 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 20304 1 and `(size_t) 0' for TYPE 2 or 3. 20305 20306 TYPE is an integer constant from 0 to 3. If the least significant 20307 bit is clear, objects are whole variables, if it is set, a closest 20308 surrounding subobject is considered the object a pointer points to. 20309 The second bit determines if maximum or minimum of remaining bytes 20310 is computed. 20311 20312 struct V { char buf1[10]; int b; char buf2[10]; } var; 20313 char *p = &var.buf1[1], *q = &var.b; 20314 20315 /* Here the object p points to is var. */ 20316 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 20317 /* The subobject p points to is var.buf1. */ 20318 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 20319 /* The object q points to is var. */ 20320 assert (__builtin_object_size (q, 0) 20321 == (char *) (&var + 1) - (char *) &var.b); 20322 /* The subobject q points to is var.b. */ 20323 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 20324 20325 There are built-in functions added for many common string operation 20326 functions, e.g. for `memcpy' `__builtin___memcpy_chk' built-in is 20327 provided. This built-in has an additional last argument, which is the 20328 number of bytes remaining in object the DEST argument points to or 20329 `(size_t) -1' if the size is not known. 20330 20331 The built-in functions are optimized into the normal string functions 20332 like `memcpy' if the last argument is `(size_t) -1' or if it is known 20333 at compile time that the destination object will not be overflown. If 20334 the compiler can determine at compile time the object will be always 20335 overflown, it issues a warning. 20336 20337 The intended use can be e.g. 20338 20339 #undef memcpy 20340 #define bos0(dest) __builtin_object_size (dest, 0) 20341 #define memcpy(dest, src, n) \ 20342 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 20343 20344 char *volatile p; 20345 char buf[10]; 20346 /* It is unknown what object p points to, so this is optimized 20347 into plain memcpy - no checking is possible. */ 20348 memcpy (p, "abcde", n); 20349 /* Destination is known and length too. It is known at compile 20350 time there will be no overflow. */ 20351 memcpy (&buf[5], "abcde", 5); 20352 /* Destination is known, but the length is not known at compile time. 20353 This will result in __memcpy_chk call that can check for overflow 20354 at runtime. */ 20355 memcpy (&buf[5], "abcde", n); 20356 /* Destination is known and it is known at compile time there will 20357 be overflow. There will be a warning and __memcpy_chk call that 20358 will abort the program at runtime. */ 20359 memcpy (&buf[6], "abcde", 5); 20360 20361 Such built-in functions are provided for `memcpy', `mempcpy', 20362 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 20363 `strncat'. 20364 20365 There are also checking built-in functions for formatted output 20366 functions. 20367 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 20368 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 20369 const char *fmt, ...); 20370 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 20371 va_list ap); 20372 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 20373 const char *fmt, va_list ap); 20374 20375 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 20376 functions and can contain implementation specific flags on what 20377 additional security measures the checking function might take, such as 20378 handling `%n' differently. 20379 20380 The OS argument is the object size S points to, like in the other 20381 built-in functions. There is a small difference in the behavior 20382 though, if OS is `(size_t) -1', the built-in functions are optimized 20383 into the non-checking functions only if FLAG is 0, otherwise the 20384 checking function is called with OS argument set to `(size_t) -1'. 20385 20386 In addition to this, there are checking built-in functions 20387 `__builtin___printf_chk', `__builtin___vprintf_chk', 20388 `__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 20389 just one additional argument, FLAG, right before format string FMT. If 20390 the compiler is able to optimize them to `fputc' etc. functions, it 20391 will, otherwise the checking function should be called and the FLAG 20392 argument passed to it. 20393 20394 20395 File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions 20396 20397 5.47 Other built-in functions provided by GCC 20398 ============================================= 20399 20400 GCC provides a large number of built-in functions other than the ones 20401 mentioned above. Some of these are for internal use in the processing 20402 of exceptions or variable-length argument lists and will not be 20403 documented here because they may change from time to time; we do not 20404 recommend general use of these functions. 20405 20406 The remaining functions are provided for optimization purposes. 20407 20408 GCC includes built-in versions of many of the functions in the standard 20409 C library. The versions prefixed with `__builtin_' will always be 20410 treated as having the same meaning as the C library function even if you 20411 specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 20412 these functions are only optimized in certain cases; if they are not 20413 optimized in a particular case, a call to the library function will be 20414 emitted. 20415 20416 Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the 20417 functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext', 20418 `dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl', 20419 `ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal', 20420 `gamma', `gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', 20421 `j1l', `j1', `jnf', `jnl', `jn', `mempcpy', `pow10f', `pow10l', `pow10', 20422 `printf_unlocked', `rindex', `scalbf', `scalbl', `scalb', `signbit', 20423 `signbitf', `signbitl', `significandf', `significandl', `significand', 20424 `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp', 20425 `strdup', `strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l', 20426 `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as 20427 built-in functions. All these functions have corresponding versions 20428 prefixed with `__builtin_', which may be used even in strict C89 mode. 20429 20430 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 20431 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 20432 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 20433 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 20434 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 20435 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 20436 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 20437 `cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 20438 `copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 20439 `cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 20440 `csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 20441 `csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 20442 `erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 20443 `exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 20444 `fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 20445 `hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 20446 `isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 20447 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 20448 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 20449 `logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 20450 `lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 20451 `nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 20452 `remainderf', `remainderl', `remainder', `remquof', `remquol', 20453 `remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 20454 `scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 20455 `snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 20456 `vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 20457 functions except in strict ISO C90 mode (`-ansi' or `-std=c89'). 20458 20459 There are also built-in versions of the ISO C99 functions `acosf', 20460 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 20461 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 20462 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 20463 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 20464 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 20465 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 20466 recognized in any mode since ISO C90 reserves these names for the 20467 purpose to which ISO C99 puts them. All these functions have 20468 corresponding versions prefixed with `__builtin_'. 20469 20470 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 20471 `iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 20472 `iswxdigit', `towlower' and `towupper' are handled as built-in functions 20473 except in strict ISO C90 mode (`-ansi' or `-std=c89'). 20474 20475 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 20476 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 20477 `fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 20478 `isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 20479 `isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 20480 `log', `malloc', `memcmp', `memcpy', `memset', `modf', `pow', `printf', 20481 `putchar', `puts', `scanf', `sinh', `sin', `snprintf', `sprintf', 20482 `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', `strcspn', 20483 `strlen', `strncat', `strncmp', `strncpy', `strpbrk', `strrchr', 20484 `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and `vsprintf' 20485 are all recognized as built-in functions unless `-fno-builtin' is 20486 specified (or `-fno-builtin-FUNCTION' is specified for an individual 20487 function). All of these functions have corresponding versions prefixed 20488 with `__builtin_'. 20489 20490 GCC provides built-in versions of the ISO C99 floating point comparison 20491 macros that avoid raising exceptions for unordered operands. They have 20492 the same names as the standard macros ( `isgreater', `isgreaterequal', 20493 `isless', `islessequal', `islessgreater', and `isunordered') , with 20494 `__builtin_' prefixed. We intend for a library implementor to be able 20495 to simply `#define' each standard macro to its built-in equivalent. 20496 20497 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 20498 You can use the built-in function `__builtin_types_compatible_p' to 20499 determine whether two types are the same. 20500 20501 This built-in function returns 1 if the unqualified versions of the 20502 types TYPE1 and TYPE2 (which are types, not expressions) are 20503 compatible, 0 otherwise. The result of this built-in function can 20504 be used in integer constant expressions. 20505 20506 This built-in function ignores top level qualifiers (e.g., `const', 20507 `volatile'). For example, `int' is equivalent to `const int'. 20508 20509 The type `int[]' and `int[5]' are compatible. On the other hand, 20510 `int' and `char *' are not compatible, even if the size of their 20511 types, on the particular architecture are the same. Also, the 20512 amount of pointer indirection is taken into account when 20513 determining similarity. Consequently, `short *' is not similar to 20514 `short **'. Furthermore, two types that are typedefed are 20515 considered compatible if their underlying types are compatible. 20516 20517 An `enum' type is not considered to be compatible with another 20518 `enum' type even if both are compatible with the same integer 20519 type; this is what the C standard specifies. For example, `enum 20520 {foo, bar}' is not similar to `enum {hot, dog}'. 20521 20522 You would typically use this function in code whose execution 20523 varies depending on the arguments' types. For example: 20524 20525 #define foo(x) \ 20526 ({ \ 20527 typeof (x) tmp = (x); \ 20528 if (__builtin_types_compatible_p (typeof (x), long double)) \ 20529 tmp = foo_long_double (tmp); \ 20530 else if (__builtin_types_compatible_p (typeof (x), double)) \ 20531 tmp = foo_double (tmp); \ 20532 else if (__builtin_types_compatible_p (typeof (x), float)) \ 20533 tmp = foo_float (tmp); \ 20534 else \ 20535 abort (); \ 20536 tmp; \ 20537 }) 20538 20539 _Note:_ This construct is only available for C. 20540 20541 20542 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 20543 EXP2) 20544 You can use the built-in function `__builtin_choose_expr' to 20545 evaluate code depending on the value of a constant expression. 20546 This built-in function returns EXP1 if CONST_EXP, which is a 20547 constant expression that must be able to be determined at compile 20548 time, is nonzero. Otherwise it returns 0. 20549 20550 This built-in function is analogous to the `? :' operator in C, 20551 except that the expression returned has its type unaltered by 20552 promotion rules. Also, the built-in function does not evaluate 20553 the expression that was not chosen. For example, if CONST_EXP 20554 evaluates to true, EXP2 is not evaluated even if it has 20555 side-effects. 20556 20557 This built-in function can return an lvalue if the chosen argument 20558 is an lvalue. 20559 20560 If EXP1 is returned, the return type is the same as EXP1's type. 20561 Similarly, if EXP2 is returned, its return type is the same as 20562 EXP2. 20563 20564 Example: 20565 20566 #define foo(x) \ 20567 __builtin_choose_expr ( \ 20568 __builtin_types_compatible_p (typeof (x), double), \ 20569 foo_double (x), \ 20570 __builtin_choose_expr ( \ 20571 __builtin_types_compatible_p (typeof (x), float), \ 20572 foo_float (x), \ 20573 /* The void expression results in a compile-time error \ 20574 when assigning the result to something. */ \ 20575 (void)0)) 20576 20577 _Note:_ This construct is only available for C. Furthermore, the 20578 unused expression (EXP1 or EXP2 depending on the value of 20579 CONST_EXP) may still generate syntax errors. This may change in 20580 future revisions. 20581 20582 20583 -- Built-in Function: int __builtin_constant_p (EXP) 20584 You can use the built-in function `__builtin_constant_p' to 20585 determine if a value is known to be constant at compile-time and 20586 hence that GCC can perform constant-folding on expressions 20587 involving that value. The argument of the function is the value 20588 to test. The function returns the integer 1 if the argument is 20589 known to be a compile-time constant and 0 if it is not known to be 20590 a compile-time constant. A return of 0 does not indicate that the 20591 value is _not_ a constant, but merely that GCC cannot prove it is 20592 a constant with the specified value of the `-O' option. 20593 20594 You would typically use this function in an embedded application 20595 where memory was a critical resource. If you have some complex 20596 calculation, you may want it to be folded if it involves 20597 constants, but need to call a function if it does not. For 20598 example: 20599 20600 #define Scale_Value(X) \ 20601 (__builtin_constant_p (X) \ 20602 ? ((X) * SCALE + OFFSET) : Scale (X)) 20603 20604 You may use this built-in function in either a macro or an inline 20605 function. However, if you use it in an inlined function and pass 20606 an argument of the function as the argument to the built-in, GCC 20607 will never return 1 when you call the inline function with a 20608 string constant or compound literal (*note Compound Literals::) 20609 and will not return 1 when you pass a constant numeric value to 20610 the inline function unless you specify the `-O' option. 20611 20612 You may also use `__builtin_constant_p' in initializers for static 20613 data. For instance, you can write 20614 20615 static const int table[] = { 20616 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 20617 /* ... */ 20618 }; 20619 20620 This is an acceptable initializer even if EXPRESSION is not a 20621 constant expression. GCC must be more conservative about 20622 evaluating the built-in in this case, because it has no 20623 opportunity to perform optimization. 20624 20625 Previous versions of GCC did not accept this built-in in data 20626 initializers. The earliest version where it is completely safe is 20627 3.0.1. 20628 20629 -- Built-in Function: long __builtin_expect (long EXP, long C) 20630 You may use `__builtin_expect' to provide the compiler with branch 20631 prediction information. In general, you should prefer to use 20632 actual profile feedback for this (`-fprofile-arcs'), as 20633 programmers are notoriously bad at predicting how their programs 20634 actually perform. However, there are applications in which this 20635 data is hard to collect. 20636 20637 The return value is the value of EXP, which should be an integral 20638 expression. The value of C must be a compile-time constant. The 20639 semantics of the built-in are that it is expected that EXP == C. 20640 For example: 20641 20642 if (__builtin_expect (x, 0)) 20643 foo (); 20644 20645 would indicate that we do not expect to call `foo', since we 20646 expect `x' to be zero. Since you are limited to integral 20647 expressions for EXP, you should use constructions such as 20648 20649 if (__builtin_expect (ptr != NULL, 1)) 20650 error (); 20651 20652 when testing pointer or floating-point values. 20653 20654 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 20655 This function is used to minimize cache-miss latency by moving 20656 data into a cache before it is accessed. You can insert calls to 20657 `__builtin_prefetch' into code for which you know addresses of 20658 data in memory that is likely to be accessed soon. If the target 20659 supports them, data prefetch instructions will be generated. If 20660 the prefetch is done early enough before the access then the data 20661 will be in the cache by the time it is accessed. 20662 20663 The value of ADDR is the address of the memory to prefetch. There 20664 are two optional arguments, RW and LOCALITY. The value of RW is a 20665 compile-time constant one or zero; one means that the prefetch is 20666 preparing for a write to the memory address and zero, the default, 20667 means that the prefetch is preparing for a read. The value 20668 LOCALITY must be a compile-time constant integer between zero and 20669 three. A value of zero means that the data has no temporal 20670 locality, so it need not be left in the cache after the access. A 20671 value of three means that the data has a high degree of temporal 20672 locality and should be left in all levels of cache possible. 20673 Values of one and two mean, respectively, a low or moderate degree 20674 of temporal locality. The default is three. 20675 20676 for (i = 0; i < n; i++) 20677 { 20678 a[i] = a[i] + b[i]; 20679 __builtin_prefetch (&a[i+j], 1, 1); 20680 __builtin_prefetch (&b[i+j], 0, 1); 20681 /* ... */ 20682 } 20683 20684 Data prefetch does not generate faults if ADDR is invalid, but the 20685 address expression itself must be valid. For example, a prefetch 20686 of `p->next' will not fault if `p->next' is not a valid address, 20687 but evaluation will fault if `p' is not a valid address. 20688 20689 If the target does not support data prefetch, the address 20690 expression is evaluated if it includes side effects but no other 20691 code is generated and GCC does not issue a warning. 20692 20693 -- Built-in Function: double __builtin_huge_val (void) 20694 Returns a positive infinity, if supported by the floating-point 20695 format, else `DBL_MAX'. This function is suitable for 20696 implementing the ISO C macro `HUGE_VAL'. 20697 20698 -- Built-in Function: float __builtin_huge_valf (void) 20699 Similar to `__builtin_huge_val', except the return type is `float'. 20700 20701 -- Built-in Function: long double __builtin_huge_vall (void) 20702 Similar to `__builtin_huge_val', except the return type is `long 20703 double'. 20704 20705 -- Built-in Function: double __builtin_inf (void) 20706 Similar to `__builtin_huge_val', except a warning is generated if 20707 the target floating-point format does not support infinities. 20708 20709 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 20710 Similar to `__builtin_inf', except the return type is `_Decimal32'. 20711 20712 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 20713 Similar to `__builtin_inf', except the return type is `_Decimal64'. 20714 20715 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 20716 Similar to `__builtin_inf', except the return type is 20717 `_Decimal128'. 20718 20719 -- Built-in Function: float __builtin_inff (void) 20720 Similar to `__builtin_inf', except the return type is `float'. 20721 This function is suitable for implementing the ISO C99 macro 20722 `INFINITY'. 20723 20724 -- Built-in Function: long double __builtin_infl (void) 20725 Similar to `__builtin_inf', except the return type is `long 20726 double'. 20727 20728 -- Built-in Function: double __builtin_nan (const char *str) 20729 This is an implementation of the ISO C99 function `nan'. 20730 20731 Since ISO C99 defines this function in terms of `strtod', which we 20732 do not implement, a description of the parsing is in order. The 20733 string is parsed as by `strtol'; that is, the base is recognized by 20734 leading `0' or `0x' prefixes. The number parsed is placed in the 20735 significand such that the least significant bit of the number is 20736 at the least significant bit of the significand. The number is 20737 truncated to fit the significand field provided. The significand 20738 is forced to be a quiet NaN. 20739 20740 This function, if given a string literal all of which would have 20741 been consumed by strtol, is evaluated early enough that it is 20742 considered a compile-time constant. 20743 20744 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 20745 Similar to `__builtin_nan', except the return type is `_Decimal32'. 20746 20747 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 20748 Similar to `__builtin_nan', except the return type is `_Decimal64'. 20749 20750 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 20751 Similar to `__builtin_nan', except the return type is 20752 `_Decimal128'. 20753 20754 -- Built-in Function: float __builtin_nanf (const char *str) 20755 Similar to `__builtin_nan', except the return type is `float'. 20756 20757 -- Built-in Function: long double __builtin_nanl (const char *str) 20758 Similar to `__builtin_nan', except the return type is `long 20759 double'. 20760 20761 -- Built-in Function: double __builtin_nans (const char *str) 20762 Similar to `__builtin_nan', except the significand is forced to be 20763 a signaling NaN. The `nans' function is proposed by WG14 N965. 20764 20765 -- Built-in Function: float __builtin_nansf (const char *str) 20766 Similar to `__builtin_nans', except the return type is `float'. 20767 20768 -- Built-in Function: long double __builtin_nansl (const char *str) 20769 Similar to `__builtin_nans', except the return type is `long 20770 double'. 20771 20772 -- Built-in Function: int __builtin_ffs (unsigned int x) 20773 Returns one plus the index of the least significant 1-bit of X, or 20774 if X is zero, returns zero. 20775 20776 -- Built-in Function: int __builtin_clz (unsigned int x) 20777 Returns the number of leading 0-bits in X, starting at the most 20778 significant bit position. If X is 0, the result is undefined. 20779 20780 -- Built-in Function: int __builtin_ctz (unsigned int x) 20781 Returns the number of trailing 0-bits in X, starting at the least 20782 significant bit position. If X is 0, the result is undefined. 20783 20784 -- Built-in Function: int __builtin_popcount (unsigned int x) 20785 Returns the number of 1-bits in X. 20786 20787 -- Built-in Function: int __builtin_parity (unsigned int x) 20788 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 20789 20790 -- Built-in Function: int __builtin_ffsl (unsigned long) 20791 Similar to `__builtin_ffs', except the argument type is `unsigned 20792 long'. 20793 20794 -- Built-in Function: int __builtin_clzl (unsigned long) 20795 Similar to `__builtin_clz', except the argument type is `unsigned 20796 long'. 20797 20798 -- Built-in Function: int __builtin_ctzl (unsigned long) 20799 Similar to `__builtin_ctz', except the argument type is `unsigned 20800 long'. 20801 20802 -- Built-in Function: int __builtin_popcountl (unsigned long) 20803 Similar to `__builtin_popcount', except the argument type is 20804 `unsigned long'. 20805 20806 -- Built-in Function: int __builtin_parityl (unsigned long) 20807 Similar to `__builtin_parity', except the argument type is 20808 `unsigned long'. 20809 20810 -- Built-in Function: int __builtin_ffsll (unsigned long long) 20811 Similar to `__builtin_ffs', except the argument type is `unsigned 20812 long long'. 20813 20814 -- Built-in Function: int __builtin_clzll (unsigned long long) 20815 Similar to `__builtin_clz', except the argument type is `unsigned 20816 long long'. 20817 20818 -- Built-in Function: int __builtin_ctzll (unsigned long long) 20819 Similar to `__builtin_ctz', except the argument type is `unsigned 20820 long long'. 20821 20822 -- Built-in Function: int __builtin_popcountll (unsigned long long) 20823 Similar to `__builtin_popcount', except the argument type is 20824 `unsigned long long'. 20825 20826 -- Built-in Function: int __builtin_parityll (unsigned long long) 20827 Similar to `__builtin_parity', except the argument type is 20828 `unsigned long long'. 20829 20830 -- Built-in Function: double __builtin_powi (double, int) 20831 Returns the first argument raised to the power of the second. 20832 Unlike the `pow' function no guarantees about precision and 20833 rounding are made. 20834 20835 -- Built-in Function: float __builtin_powif (float, int) 20836 Similar to `__builtin_powi', except the argument and return types 20837 are `float'. 20838 20839 -- Built-in Function: long double __builtin_powil (long double, int) 20840 Similar to `__builtin_powi', except the argument and return types 20841 are `long double'. 20842 20843 20844 File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 20845 20846 5.48 Built-in Functions Specific to Particular Target Machines 20847 ============================================================== 20848 20849 On some target machines, GCC supports many built-in functions specific 20850 to those machines. Generally these generate calls to specific machine 20851 instructions, but allow the compiler to schedule those calls. 20852 20853 * Menu: 20854 20855 * Alpha Built-in Functions:: 20856 * ARM Built-in Functions:: 20857 * Blackfin Built-in Functions:: 20858 * FR-V Built-in Functions:: 20859 * X86 Built-in Functions:: 20860 * MIPS DSP Built-in Functions:: 20861 * MIPS Paired-Single Support:: 20862 * PowerPC AltiVec Built-in Functions:: 20863 * SPARC VIS Built-in Functions:: 20864 20865 20866 File: gcc.info, Node: Alpha Built-in Functions, Next: ARM Built-in Functions, Up: Target Builtins 20867 20868 5.48.1 Alpha Built-in Functions 20869 ------------------------------- 20870 20871 These built-in functions are available for the Alpha family of 20872 processors, depending on the command-line switches used. 20873 20874 The following built-in functions are always available. They all 20875 generate the machine instruction that is part of the name. 20876 20877 long __builtin_alpha_implver (void) 20878 long __builtin_alpha_rpcc (void) 20879 long __builtin_alpha_amask (long) 20880 long __builtin_alpha_cmpbge (long, long) 20881 long __builtin_alpha_extbl (long, long) 20882 long __builtin_alpha_extwl (long, long) 20883 long __builtin_alpha_extll (long, long) 20884 long __builtin_alpha_extql (long, long) 20885 long __builtin_alpha_extwh (long, long) 20886 long __builtin_alpha_extlh (long, long) 20887 long __builtin_alpha_extqh (long, long) 20888 long __builtin_alpha_insbl (long, long) 20889 long __builtin_alpha_inswl (long, long) 20890 long __builtin_alpha_insll (long, long) 20891 long __builtin_alpha_insql (long, long) 20892 long __builtin_alpha_inswh (long, long) 20893 long __builtin_alpha_inslh (long, long) 20894 long __builtin_alpha_insqh (long, long) 20895 long __builtin_alpha_mskbl (long, long) 20896 long __builtin_alpha_mskwl (long, long) 20897 long __builtin_alpha_mskll (long, long) 20898 long __builtin_alpha_mskql (long, long) 20899 long __builtin_alpha_mskwh (long, long) 20900 long __builtin_alpha_msklh (long, long) 20901 long __builtin_alpha_mskqh (long, long) 20902 long __builtin_alpha_umulh (long, long) 20903 long __builtin_alpha_zap (long, long) 20904 long __builtin_alpha_zapnot (long, long) 20905 20906 The following built-in functions are always with `-mmax' or 20907 `-mcpu=CPU' where CPU is `pca56' or later. They all generate the 20908 machine instruction that is part of the name. 20909 20910 long __builtin_alpha_pklb (long) 20911 long __builtin_alpha_pkwb (long) 20912 long __builtin_alpha_unpkbl (long) 20913 long __builtin_alpha_unpkbw (long) 20914 long __builtin_alpha_minub8 (long, long) 20915 long __builtin_alpha_minsb8 (long, long) 20916 long __builtin_alpha_minuw4 (long, long) 20917 long __builtin_alpha_minsw4 (long, long) 20918 long __builtin_alpha_maxub8 (long, long) 20919 long __builtin_alpha_maxsb8 (long, long) 20920 long __builtin_alpha_maxuw4 (long, long) 20921 long __builtin_alpha_maxsw4 (long, long) 20922 long __builtin_alpha_perr (long, long) 20923 20924 The following built-in functions are always with `-mcix' or 20925 `-mcpu=CPU' where CPU is `ev67' or later. They all generate the 20926 machine instruction that is part of the name. 20927 20928 long __builtin_alpha_cttz (long) 20929 long __builtin_alpha_ctlz (long) 20930 long __builtin_alpha_ctpop (long) 20931 20932 The following builtins are available on systems that use the OSF/1 20933 PALcode. Normally they invoke the `rduniq' and `wruniq' PAL calls, but 20934 when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'. 20935 20936 void *__builtin_thread_pointer (void) 20937 void __builtin_set_thread_pointer (void *) 20938 20939 20940 File: gcc.info, Node: ARM Built-in Functions, Next: Blackfin Built-in Functions, Prev: Alpha Built-in Functions, Up: Target Builtins 20941 20942 5.48.2 ARM Built-in Functions 20943 ----------------------------- 20944 20945 These built-in functions are available for the ARM family of 20946 processors, when the `-mcpu=iwmmxt' switch is used: 20947 20948 typedef int v2si __attribute__ ((vector_size (8))); 20949 typedef short v4hi __attribute__ ((vector_size (8))); 20950 typedef char v8qi __attribute__ ((vector_size (8))); 20951 20952 int __builtin_arm_getwcx (int) 20953 void __builtin_arm_setwcx (int, int) 20954 int __builtin_arm_textrmsb (v8qi, int) 20955 int __builtin_arm_textrmsh (v4hi, int) 20956 int __builtin_arm_textrmsw (v2si, int) 20957 int __builtin_arm_textrmub (v8qi, int) 20958 int __builtin_arm_textrmuh (v4hi, int) 20959 int __builtin_arm_textrmuw (v2si, int) 20960 v8qi __builtin_arm_tinsrb (v8qi, int) 20961 v4hi __builtin_arm_tinsrh (v4hi, int) 20962 v2si __builtin_arm_tinsrw (v2si, int) 20963 long long __builtin_arm_tmia (long long, int, int) 20964 long long __builtin_arm_tmiabb (long long, int, int) 20965 long long __builtin_arm_tmiabt (long long, int, int) 20966 long long __builtin_arm_tmiaph (long long, int, int) 20967 long long __builtin_arm_tmiatb (long long, int, int) 20968 long long __builtin_arm_tmiatt (long long, int, int) 20969 int __builtin_arm_tmovmskb (v8qi) 20970 int __builtin_arm_tmovmskh (v4hi) 20971 int __builtin_arm_tmovmskw (v2si) 20972 long long __builtin_arm_waccb (v8qi) 20973 long long __builtin_arm_wacch (v4hi) 20974 long long __builtin_arm_waccw (v2si) 20975 v8qi __builtin_arm_waddb (v8qi, v8qi) 20976 v8qi __builtin_arm_waddbss (v8qi, v8qi) 20977 v8qi __builtin_arm_waddbus (v8qi, v8qi) 20978 v4hi __builtin_arm_waddh (v4hi, v4hi) 20979 v4hi __builtin_arm_waddhss (v4hi, v4hi) 20980 v4hi __builtin_arm_waddhus (v4hi, v4hi) 20981 v2si __builtin_arm_waddw (v2si, v2si) 20982 v2si __builtin_arm_waddwss (v2si, v2si) 20983 v2si __builtin_arm_waddwus (v2si, v2si) 20984 v8qi __builtin_arm_walign (v8qi, v8qi, int) 20985 long long __builtin_arm_wand(long long, long long) 20986 long long __builtin_arm_wandn (long long, long long) 20987 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 20988 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 20989 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 20990 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 20991 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 20992 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 20993 v2si __builtin_arm_wcmpeqw (v2si, v2si) 20994 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 20995 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 20996 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 20997 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 20998 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 20999 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 21000 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 21001 long long __builtin_arm_wmacsz (v4hi, v4hi) 21002 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 21003 long long __builtin_arm_wmacuz (v4hi, v4hi) 21004 v4hi __builtin_arm_wmadds (v4hi, v4hi) 21005 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 21006 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 21007 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 21008 v2si __builtin_arm_wmaxsw (v2si, v2si) 21009 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 21010 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 21011 v2si __builtin_arm_wmaxuw (v2si, v2si) 21012 v8qi __builtin_arm_wminsb (v8qi, v8qi) 21013 v4hi __builtin_arm_wminsh (v4hi, v4hi) 21014 v2si __builtin_arm_wminsw (v2si, v2si) 21015 v8qi __builtin_arm_wminub (v8qi, v8qi) 21016 v4hi __builtin_arm_wminuh (v4hi, v4hi) 21017 v2si __builtin_arm_wminuw (v2si, v2si) 21018 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 21019 v4hi __builtin_arm_wmulul (v4hi, v4hi) 21020 v4hi __builtin_arm_wmulum (v4hi, v4hi) 21021 long long __builtin_arm_wor (long long, long long) 21022 v2si __builtin_arm_wpackdss (long long, long long) 21023 v2si __builtin_arm_wpackdus (long long, long long) 21024 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 21025 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 21026 v4hi __builtin_arm_wpackwss (v2si, v2si) 21027 v4hi __builtin_arm_wpackwus (v2si, v2si) 21028 long long __builtin_arm_wrord (long long, long long) 21029 long long __builtin_arm_wrordi (long long, int) 21030 v4hi __builtin_arm_wrorh (v4hi, long long) 21031 v4hi __builtin_arm_wrorhi (v4hi, int) 21032 v2si __builtin_arm_wrorw (v2si, long long) 21033 v2si __builtin_arm_wrorwi (v2si, int) 21034 v2si __builtin_arm_wsadb (v8qi, v8qi) 21035 v2si __builtin_arm_wsadbz (v8qi, v8qi) 21036 v2si __builtin_arm_wsadh (v4hi, v4hi) 21037 v2si __builtin_arm_wsadhz (v4hi, v4hi) 21038 v4hi __builtin_arm_wshufh (v4hi, int) 21039 long long __builtin_arm_wslld (long long, long long) 21040 long long __builtin_arm_wslldi (long long, int) 21041 v4hi __builtin_arm_wsllh (v4hi, long long) 21042 v4hi __builtin_arm_wsllhi (v4hi, int) 21043 v2si __builtin_arm_wsllw (v2si, long long) 21044 v2si __builtin_arm_wsllwi (v2si, int) 21045 long long __builtin_arm_wsrad (long long, long long) 21046 long long __builtin_arm_wsradi (long long, int) 21047 v4hi __builtin_arm_wsrah (v4hi, long long) 21048 v4hi __builtin_arm_wsrahi (v4hi, int) 21049 v2si __builtin_arm_wsraw (v2si, long long) 21050 v2si __builtin_arm_wsrawi (v2si, int) 21051 long long __builtin_arm_wsrld (long long, long long) 21052 long long __builtin_arm_wsrldi (long long, int) 21053 v4hi __builtin_arm_wsrlh (v4hi, long long) 21054 v4hi __builtin_arm_wsrlhi (v4hi, int) 21055 v2si __builtin_arm_wsrlw (v2si, long long) 21056 v2si __builtin_arm_wsrlwi (v2si, int) 21057 v8qi __builtin_arm_wsubb (v8qi, v8qi) 21058 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 21059 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 21060 v4hi __builtin_arm_wsubh (v4hi, v4hi) 21061 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 21062 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 21063 v2si __builtin_arm_wsubw (v2si, v2si) 21064 v2si __builtin_arm_wsubwss (v2si, v2si) 21065 v2si __builtin_arm_wsubwus (v2si, v2si) 21066 v4hi __builtin_arm_wunpckehsb (v8qi) 21067 v2si __builtin_arm_wunpckehsh (v4hi) 21068 long long __builtin_arm_wunpckehsw (v2si) 21069 v4hi __builtin_arm_wunpckehub (v8qi) 21070 v2si __builtin_arm_wunpckehuh (v4hi) 21071 long long __builtin_arm_wunpckehuw (v2si) 21072 v4hi __builtin_arm_wunpckelsb (v8qi) 21073 v2si __builtin_arm_wunpckelsh (v4hi) 21074 long long __builtin_arm_wunpckelsw (v2si) 21075 v4hi __builtin_arm_wunpckelub (v8qi) 21076 v2si __builtin_arm_wunpckeluh (v4hi) 21077 long long __builtin_arm_wunpckeluw (v2si) 21078 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 21079 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 21080 v2si __builtin_arm_wunpckihw (v2si, v2si) 21081 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 21082 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 21083 v2si __builtin_arm_wunpckilw (v2si, v2si) 21084 long long __builtin_arm_wxor (long long, long long) 21085 long long __builtin_arm_wzero () 21086 21087 21088 File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: ARM Built-in Functions, Up: Target Builtins 21089 21090 5.48.3 Blackfin Built-in Functions 21091 ---------------------------------- 21092 21093 Currently, there are two Blackfin-specific built-in functions. These 21094 are used for generating `CSYNC' and `SSYNC' machine insns without using 21095 inline assembly; by using these built-in functions the compiler can 21096 automatically add workarounds for hardware errata involving these 21097 instructions. These functions are named as follows: 21098 21099 void __builtin_bfin_csync (void) 21100 void __builtin_bfin_ssync (void) 21101 21102 21103 File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 21104 21105 5.48.4 FR-V Built-in Functions 21106 ------------------------------ 21107 21108 GCC provides many FR-V-specific built-in functions. In general, these 21109 functions are intended to be compatible with those described by `FR-V 21110 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 21111 The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of 21112 which pass 128-bit values by pointer rather than by value. 21113 21114 Most of the functions are named after specific FR-V instructions. 21115 Such functions are said to be "directly mapped" and are summarized here 21116 in tabular form. 21117 21118 * Menu: 21119 21120 * Argument Types:: 21121 * Directly-mapped Integer Functions:: 21122 * Directly-mapped Media Functions:: 21123 * Raw read/write Functions:: 21124 * Other Built-in Functions:: 21125 21126 21127 File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 21128 21129 5.48.4.1 Argument Types 21130 ....................... 21131 21132 The arguments to the built-in functions can be divided into three 21133 groups: register numbers, compile-time constants and run-time values. 21134 In order to make this classification clear at a glance, the arguments 21135 and return values are given the following pseudo types: 21136 21137 Pseudo type Real C type Constant? Description 21138 `uh' `unsigned short' No an unsigned halfword 21139 `uw1' `unsigned int' No an unsigned word 21140 `sw1' `int' No a signed word 21141 `uw2' `unsigned long long' No an unsigned doubleword 21142 `sw2' `long long' No a signed doubleword 21143 `const' `int' Yes an integer constant 21144 `acc' `int' Yes an ACC register number 21145 `iacc' `int' Yes an IACC register number 21146 21147 These pseudo types are not defined by GCC, they are simply a notational 21148 convenience used in this manual. 21149 21150 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 21151 run time. They correspond to register operands in the underlying FR-V 21152 instructions. 21153 21154 `const' arguments represent immediate operands in the underlying FR-V 21155 instructions. They must be compile-time constants. 21156 21157 `acc' arguments are evaluated at compile time and specify the number 21158 of an accumulator register. For example, an `acc' argument of 2 will 21159 select the ACC2 register. 21160 21161 `iacc' arguments are similar to `acc' arguments but specify the number 21162 of an IACC register. See *note Other Built-in Functions:: for more 21163 details. 21164 21165 21166 File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 21167 21168 5.48.4.2 Directly-mapped Integer Functions 21169 .......................................... 21170 21171 The functions listed below map directly to FR-V I-type instructions. 21172 21173 Function prototype Example usage Assembly output 21174 `sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 21175 `sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 21176 `sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 21177 `sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 21178 `void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 21179 `void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 21180 `void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 21181 `sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 21182 `sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 21183 `uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 21184 21185 21186 File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 21187 21188 5.48.4.3 Directly-mapped Media Functions 21189 ........................................ 21190 21191 The functions listed below map directly to FR-V M-type instructions. 21192 21193 Function prototype Example usage Assembly output 21194 `uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 21195 `void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 21196 `sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 21197 `uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 21198 `uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 21199 `void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 21200 `uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 21201 `uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 21202 `void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 21203 `void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 21204 `void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 21205 `uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 21206 `uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 21207 `uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 21208 `uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 21209 `void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 21210 `void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 21211 `void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 21212 `void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 21213 `uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 21214 `uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 21215 `void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 21216 `void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 21217 `uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 21218 `uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 21219 `uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 21220 `void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 21221 `void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 21222 `uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 21223 `uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 21224 `uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 21225 `sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 21226 `uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 21227 `sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 21228 `uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 21229 `sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 21230 `uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 21231 `void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 21232 `void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 21233 `void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 21234 `void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 21235 `void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 21236 `void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 21237 `void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 21238 `void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 21239 `uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 21240 `uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 21241 `uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 21242 `sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 21243 `uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 21244 `void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 21245 `void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 21246 `void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 21247 `void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 21248 `sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 21249 `sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 21250 `void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 21251 `void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 21252 `void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 21253 sw2)' 21254 `void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 21255 `void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 21256 `void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 21257 sw2)' 21258 `void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 21259 uw2)' 21260 `sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 21261 `uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 21262 `sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 21263 `sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 21264 `uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 21265 `void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 21266 sw2)' 21267 `void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 21268 sw2)' 21269 `uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 21270 `uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 21271 `uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 21272 `uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 21273 `sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 21274 `uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 21275 `uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 21276 `sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 21277 `uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 21278 `void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 21279 `sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 21280 `uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 21281 `void __MTRAP (void)' `__MTRAP ()' `MTRAP' 21282 `uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 21283 `uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 21284 `void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 21285 `void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 21286 `uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 21287 21288 21289 File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 21290 21291 5.48.4.4 Raw read/write Functions 21292 ................................. 21293 21294 This sections describes built-in functions related to read and write 21295 instructions to access memory. These functions generate `membar' 21296 instructions to flush the I/O load and stores where appropriate, as 21297 described in Fujitsu's manual described above. 21298 21299 `unsigned char __builtin_read8 (void *DATA)' 21300 21301 `unsigned short __builtin_read16 (void *DATA)' 21302 21303 `unsigned long __builtin_read32 (void *DATA)' 21304 21305 `unsigned long long __builtin_read64 (void *DATA)' 21306 21307 `void __builtin_write8 (void *DATA, unsigned char DATUM)' 21308 21309 `void __builtin_write16 (void *DATA, unsigned short DATUM)' 21310 21311 `void __builtin_write32 (void *DATA, unsigned long DATUM)' 21312 21313 `void __builtin_write64 (void *DATA, unsigned long long DATUM)' 21314 21315 21316 File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 21317 21318 5.48.4.5 Other Built-in Functions 21319 ................................. 21320 21321 This section describes built-in functions that are not named after a 21322 specific FR-V instruction. 21323 21324 `sw2 __IACCreadll (iacc REG)' 21325 Return the full 64-bit value of IACC0. The REG argument is 21326 reserved for future expansion and must be 0. 21327 21328 `sw1 __IACCreadl (iacc REG)' 21329 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 21330 Other values of REG are rejected as invalid. 21331 21332 `void __IACCsetll (iacc REG, sw2 X)' 21333 Set the full 64-bit value of IACC0 to X. The REG argument is 21334 reserved for future expansion and must be 0. 21335 21336 `void __IACCsetl (iacc REG, sw1 X)' 21337 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 21338 values of REG are rejected as invalid. 21339 21340 `void __data_prefetch0 (const void *X)' 21341 Use the `dcpl' instruction to load the contents of address X into 21342 the data cache. 21343 21344 `void __data_prefetch (const void *X)' 21345 Use the `nldub' instruction to load the contents of address X into 21346 the data cache. The instruction will be issued in slot I1. 21347 21348 21349 File: gcc.info, Node: X86 Built-in Functions, Next: MIPS DSP Built-in Functions, Prev: FR-V Built-in Functions, Up: Target Builtins 21350 21351 5.48.5 X86 Built-in Functions 21352 ----------------------------- 21353 21354 These built-in functions are available for the i386 and x86-64 family 21355 of computers, depending on the command-line switches used. 21356 21357 Note that, if you specify command-line switches such as `-msse', the 21358 compiler could use the extended instruction sets even if the built-ins 21359 are not used explicitly in the program. For this reason, applications 21360 which perform runtime CPU detection must compile separate files for each 21361 supported architecture, using the appropriate flags. In particular, 21362 the file containing the CPU detection code should be compiled without 21363 these options. 21364 21365 The following machine modes are available for use with MMX built-in 21366 functions (*note Vector Extensions::): `V2SI' for a vector of two 21367 32-bit integers, `V4HI' for a vector of four 16-bit integers, and 21368 `V8QI' for a vector of eight 8-bit integers. Some of the built-in 21369 functions operate on MMX registers as a whole 64-bit entity, these use 21370 `DI' as their mode. 21371 21372 If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector 21373 of two 32-bit floating point values. 21374 21375 If SSE extensions are enabled, `V4SF' is used for a vector of four 21376 32-bit floating point values. Some instructions use a vector of four 21377 32-bit integers, these use `V4SI'. Finally, some instructions operate 21378 on an entire vector register, interpreting it as a 128-bit integer, 21379 these use mode `TI'. 21380 21381 The following built-in functions are made available by `-mmmx'. All 21382 of them generate the machine instruction that is part of the name. 21383 21384 v8qi __builtin_ia32_paddb (v8qi, v8qi) 21385 v4hi __builtin_ia32_paddw (v4hi, v4hi) 21386 v2si __builtin_ia32_paddd (v2si, v2si) 21387 v8qi __builtin_ia32_psubb (v8qi, v8qi) 21388 v4hi __builtin_ia32_psubw (v4hi, v4hi) 21389 v2si __builtin_ia32_psubd (v2si, v2si) 21390 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 21391 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 21392 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 21393 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 21394 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 21395 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 21396 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 21397 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 21398 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 21399 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 21400 di __builtin_ia32_pand (di, di) 21401 di __builtin_ia32_pandn (di,di) 21402 di __builtin_ia32_por (di, di) 21403 di __builtin_ia32_pxor (di, di) 21404 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 21405 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 21406 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 21407 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 21408 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 21409 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 21410 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 21411 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 21412 v2si __builtin_ia32_punpckhdq (v2si, v2si) 21413 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 21414 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 21415 v2si __builtin_ia32_punpckldq (v2si, v2si) 21416 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 21417 v4hi __builtin_ia32_packssdw (v2si, v2si) 21418 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 21419 21420 The following built-in functions are made available either with 21421 `-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 21422 of them generate the machine instruction that is part of the name. 21423 21424 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 21425 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 21426 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 21427 v4hi __builtin_ia32_psadbw (v8qi, v8qi) 21428 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 21429 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 21430 v8qi __builtin_ia32_pminub (v8qi, v8qi) 21431 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 21432 int __builtin_ia32_pextrw (v4hi, int) 21433 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 21434 int __builtin_ia32_pmovmskb (v8qi) 21435 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 21436 void __builtin_ia32_movntq (di *, di) 21437 void __builtin_ia32_sfence (void) 21438 21439 The following built-in functions are available when `-msse' is used. 21440 All of them generate the machine instruction that is part of the name. 21441 21442 int __builtin_ia32_comieq (v4sf, v4sf) 21443 int __builtin_ia32_comineq (v4sf, v4sf) 21444 int __builtin_ia32_comilt (v4sf, v4sf) 21445 int __builtin_ia32_comile (v4sf, v4sf) 21446 int __builtin_ia32_comigt (v4sf, v4sf) 21447 int __builtin_ia32_comige (v4sf, v4sf) 21448 int __builtin_ia32_ucomieq (v4sf, v4sf) 21449 int __builtin_ia32_ucomineq (v4sf, v4sf) 21450 int __builtin_ia32_ucomilt (v4sf, v4sf) 21451 int __builtin_ia32_ucomile (v4sf, v4sf) 21452 int __builtin_ia32_ucomigt (v4sf, v4sf) 21453 int __builtin_ia32_ucomige (v4sf, v4sf) 21454 v4sf __builtin_ia32_addps (v4sf, v4sf) 21455 v4sf __builtin_ia32_subps (v4sf, v4sf) 21456 v4sf __builtin_ia32_mulps (v4sf, v4sf) 21457 v4sf __builtin_ia32_divps (v4sf, v4sf) 21458 v4sf __builtin_ia32_addss (v4sf, v4sf) 21459 v4sf __builtin_ia32_subss (v4sf, v4sf) 21460 v4sf __builtin_ia32_mulss (v4sf, v4sf) 21461 v4sf __builtin_ia32_divss (v4sf, v4sf) 21462 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 21463 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 21464 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 21465 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 21466 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 21467 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 21468 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 21469 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 21470 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 21471 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 21472 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 21473 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 21474 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 21475 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 21476 v4si __builtin_ia32_cmpless (v4sf, v4sf) 21477 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 21478 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 21479 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 21480 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 21481 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 21482 v4sf __builtin_ia32_maxps (v4sf, v4sf) 21483 v4sf __builtin_ia32_maxss (v4sf, v4sf) 21484 v4sf __builtin_ia32_minps (v4sf, v4sf) 21485 v4sf __builtin_ia32_minss (v4sf, v4sf) 21486 v4sf __builtin_ia32_andps (v4sf, v4sf) 21487 v4sf __builtin_ia32_andnps (v4sf, v4sf) 21488 v4sf __builtin_ia32_orps (v4sf, v4sf) 21489 v4sf __builtin_ia32_xorps (v4sf, v4sf) 21490 v4sf __builtin_ia32_movss (v4sf, v4sf) 21491 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 21492 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 21493 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 21494 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 21495 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 21496 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 21497 v2si __builtin_ia32_cvtps2pi (v4sf) 21498 int __builtin_ia32_cvtss2si (v4sf) 21499 v2si __builtin_ia32_cvttps2pi (v4sf) 21500 int __builtin_ia32_cvttss2si (v4sf) 21501 v4sf __builtin_ia32_rcpps (v4sf) 21502 v4sf __builtin_ia32_rsqrtps (v4sf) 21503 v4sf __builtin_ia32_sqrtps (v4sf) 21504 v4sf __builtin_ia32_rcpss (v4sf) 21505 v4sf __builtin_ia32_rsqrtss (v4sf) 21506 v4sf __builtin_ia32_sqrtss (v4sf) 21507 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 21508 void __builtin_ia32_movntps (float *, v4sf) 21509 int __builtin_ia32_movmskps (v4sf) 21510 21511 The following built-in functions are available when `-msse' is used. 21512 21513 `v4sf __builtin_ia32_loadaps (float *)' 21514 Generates the `movaps' machine instruction as a load from memory. 21515 21516 `void __builtin_ia32_storeaps (float *, v4sf)' 21517 Generates the `movaps' machine instruction as a store to memory. 21518 21519 `v4sf __builtin_ia32_loadups (float *)' 21520 Generates the `movups' machine instruction as a load from memory. 21521 21522 `void __builtin_ia32_storeups (float *, v4sf)' 21523 Generates the `movups' machine instruction as a store to memory. 21524 21525 `v4sf __builtin_ia32_loadsss (float *)' 21526 Generates the `movss' machine instruction as a load from memory. 21527 21528 `void __builtin_ia32_storess (float *, v4sf)' 21529 Generates the `movss' machine instruction as a store to memory. 21530 21531 `v4sf __builtin_ia32_loadhps (v4sf, v2si *)' 21532 Generates the `movhps' machine instruction as a load from memory. 21533 21534 `v4sf __builtin_ia32_loadlps (v4sf, v2si *)' 21535 Generates the `movlps' machine instruction as a load from memory 21536 21537 `void __builtin_ia32_storehps (v4sf, v2si *)' 21538 Generates the `movhps' machine instruction as a store to memory. 21539 21540 `void __builtin_ia32_storelps (v4sf, v2si *)' 21541 Generates the `movlps' machine instruction as a store to memory. 21542 21543 The following built-in functions are available when `-msse2' is used. 21544 All of them generate the machine instruction that is part of the name. 21545 21546 int __builtin_ia32_comisdeq (v2df, v2df) 21547 int __builtin_ia32_comisdlt (v2df, v2df) 21548 int __builtin_ia32_comisdle (v2df, v2df) 21549 int __builtin_ia32_comisdgt (v2df, v2df) 21550 int __builtin_ia32_comisdge (v2df, v2df) 21551 int __builtin_ia32_comisdneq (v2df, v2df) 21552 int __builtin_ia32_ucomisdeq (v2df, v2df) 21553 int __builtin_ia32_ucomisdlt (v2df, v2df) 21554 int __builtin_ia32_ucomisdle (v2df, v2df) 21555 int __builtin_ia32_ucomisdgt (v2df, v2df) 21556 int __builtin_ia32_ucomisdge (v2df, v2df) 21557 int __builtin_ia32_ucomisdneq (v2df, v2df) 21558 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 21559 v2df __builtin_ia32_cmpltpd (v2df, v2df) 21560 v2df __builtin_ia32_cmplepd (v2df, v2df) 21561 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 21562 v2df __builtin_ia32_cmpgepd (v2df, v2df) 21563 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 21564 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 21565 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 21566 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 21567 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 21568 v2df __builtin_ia32_cmpngepd (v2df, v2df) 21569 v2df __builtin_ia32_cmpordpd (v2df, v2df) 21570 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 21571 v2df __builtin_ia32_cmpltsd (v2df, v2df) 21572 v2df __builtin_ia32_cmplesd (v2df, v2df) 21573 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 21574 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 21575 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 21576 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 21577 v2df __builtin_ia32_cmpordsd (v2df, v2df) 21578 v2di __builtin_ia32_paddq (v2di, v2di) 21579 v2di __builtin_ia32_psubq (v2di, v2di) 21580 v2df __builtin_ia32_addpd (v2df, v2df) 21581 v2df __builtin_ia32_subpd (v2df, v2df) 21582 v2df __builtin_ia32_mulpd (v2df, v2df) 21583 v2df __builtin_ia32_divpd (v2df, v2df) 21584 v2df __builtin_ia32_addsd (v2df, v2df) 21585 v2df __builtin_ia32_subsd (v2df, v2df) 21586 v2df __builtin_ia32_mulsd (v2df, v2df) 21587 v2df __builtin_ia32_divsd (v2df, v2df) 21588 v2df __builtin_ia32_minpd (v2df, v2df) 21589 v2df __builtin_ia32_maxpd (v2df, v2df) 21590 v2df __builtin_ia32_minsd (v2df, v2df) 21591 v2df __builtin_ia32_maxsd (v2df, v2df) 21592 v2df __builtin_ia32_andpd (v2df, v2df) 21593 v2df __builtin_ia32_andnpd (v2df, v2df) 21594 v2df __builtin_ia32_orpd (v2df, v2df) 21595 v2df __builtin_ia32_xorpd (v2df, v2df) 21596 v2df __builtin_ia32_movsd (v2df, v2df) 21597 v2df __builtin_ia32_unpckhpd (v2df, v2df) 21598 v2df __builtin_ia32_unpcklpd (v2df, v2df) 21599 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 21600 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 21601 v4si __builtin_ia32_paddd128 (v4si, v4si) 21602 v2di __builtin_ia32_paddq128 (v2di, v2di) 21603 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 21604 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 21605 v4si __builtin_ia32_psubd128 (v4si, v4si) 21606 v2di __builtin_ia32_psubq128 (v2di, v2di) 21607 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 21608 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 21609 v2di __builtin_ia32_pand128 (v2di, v2di) 21610 v2di __builtin_ia32_pandn128 (v2di, v2di) 21611 v2di __builtin_ia32_por128 (v2di, v2di) 21612 v2di __builtin_ia32_pxor128 (v2di, v2di) 21613 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 21614 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 21615 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 21616 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 21617 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 21618 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 21619 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 21620 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 21621 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 21622 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 21623 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 21624 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 21625 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 21626 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 21627 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 21628 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 21629 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 21630 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 21631 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 21632 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 21633 v16qi __builtin_ia32_packsswb128 (v16qi, v16qi) 21634 v8hi __builtin_ia32_packssdw128 (v8hi, v8hi) 21635 v16qi __builtin_ia32_packuswb128 (v16qi, v16qi) 21636 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 21637 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 21638 v2df __builtin_ia32_loadupd (double *) 21639 void __builtin_ia32_storeupd (double *, v2df) 21640 v2df __builtin_ia32_loadhpd (v2df, double *) 21641 v2df __builtin_ia32_loadlpd (v2df, double *) 21642 int __builtin_ia32_movmskpd (v2df) 21643 int __builtin_ia32_pmovmskb128 (v16qi) 21644 void __builtin_ia32_movnti (int *, int) 21645 void __builtin_ia32_movntpd (double *, v2df) 21646 void __builtin_ia32_movntdq (v2df *, v2df) 21647 v4si __builtin_ia32_pshufd (v4si, int) 21648 v8hi __builtin_ia32_pshuflw (v8hi, int) 21649 v8hi __builtin_ia32_pshufhw (v8hi, int) 21650 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 21651 v2df __builtin_ia32_sqrtpd (v2df) 21652 v2df __builtin_ia32_sqrtsd (v2df) 21653 v2df __builtin_ia32_shufpd (v2df, v2df, int) 21654 v2df __builtin_ia32_cvtdq2pd (v4si) 21655 v4sf __builtin_ia32_cvtdq2ps (v4si) 21656 v4si __builtin_ia32_cvtpd2dq (v2df) 21657 v2si __builtin_ia32_cvtpd2pi (v2df) 21658 v4sf __builtin_ia32_cvtpd2ps (v2df) 21659 v4si __builtin_ia32_cvttpd2dq (v2df) 21660 v2si __builtin_ia32_cvttpd2pi (v2df) 21661 v2df __builtin_ia32_cvtpi2pd (v2si) 21662 int __builtin_ia32_cvtsd2si (v2df) 21663 int __builtin_ia32_cvttsd2si (v2df) 21664 long long __builtin_ia32_cvtsd2si64 (v2df) 21665 long long __builtin_ia32_cvttsd2si64 (v2df) 21666 v4si __builtin_ia32_cvtps2dq (v4sf) 21667 v2df __builtin_ia32_cvtps2pd (v4sf) 21668 v4si __builtin_ia32_cvttps2dq (v4sf) 21669 v2df __builtin_ia32_cvtsi2sd (v2df, int) 21670 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 21671 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 21672 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 21673 void __builtin_ia32_clflush (const void *) 21674 void __builtin_ia32_lfence (void) 21675 void __builtin_ia32_mfence (void) 21676 v16qi __builtin_ia32_loaddqu (const char *) 21677 void __builtin_ia32_storedqu (char *, v16qi) 21678 unsigned long long __builtin_ia32_pmuludq (v2si, v2si) 21679 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 21680 v8hi __builtin_ia32_psllw128 (v8hi, v2di) 21681 v4si __builtin_ia32_pslld128 (v4si, v2di) 21682 v2di __builtin_ia32_psllq128 (v4si, v2di) 21683 v8hi __builtin_ia32_psrlw128 (v8hi, v2di) 21684 v4si __builtin_ia32_psrld128 (v4si, v2di) 21685 v2di __builtin_ia32_psrlq128 (v2di, v2di) 21686 v8hi __builtin_ia32_psraw128 (v8hi, v2di) 21687 v4si __builtin_ia32_psrad128 (v4si, v2di) 21688 v2di __builtin_ia32_pslldqi128 (v2di, int) 21689 v8hi __builtin_ia32_psllwi128 (v8hi, int) 21690 v4si __builtin_ia32_pslldi128 (v4si, int) 21691 v2di __builtin_ia32_psllqi128 (v2di, int) 21692 v2di __builtin_ia32_psrldqi128 (v2di, int) 21693 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 21694 v4si __builtin_ia32_psrldi128 (v4si, int) 21695 v2di __builtin_ia32_psrlqi128 (v2di, int) 21696 v8hi __builtin_ia32_psrawi128 (v8hi, int) 21697 v4si __builtin_ia32_psradi128 (v4si, int) 21698 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 21699 21700 The following built-in functions are available when `-msse3' is used. 21701 All of them generate the machine instruction that is part of the name. 21702 21703 v2df __builtin_ia32_addsubpd (v2df, v2df) 21704 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 21705 v2df __builtin_ia32_haddpd (v2df, v2df) 21706 v4sf __builtin_ia32_haddps (v4sf, v4sf) 21707 v2df __builtin_ia32_hsubpd (v2df, v2df) 21708 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 21709 v16qi __builtin_ia32_lddqu (char const *) 21710 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 21711 v2df __builtin_ia32_movddup (v2df) 21712 v4sf __builtin_ia32_movshdup (v4sf) 21713 v4sf __builtin_ia32_movsldup (v4sf) 21714 void __builtin_ia32_mwait (unsigned int, unsigned int) 21715 21716 The following built-in functions are available when `-msse3' is used. 21717 21718 `v2df __builtin_ia32_loadddup (double const *)' 21719 Generates the `movddup' machine instruction as a load from memory. 21720 21721 The following built-in functions are available when `-m3dnow' is used. 21722 All of them generate the machine instruction that is part of the name. 21723 21724 void __builtin_ia32_femms (void) 21725 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 21726 v2si __builtin_ia32_pf2id (v2sf) 21727 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 21728 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 21729 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 21730 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 21731 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 21732 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 21733 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 21734 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 21735 v2sf __builtin_ia32_pfrcp (v2sf) 21736 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 21737 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 21738 v2sf __builtin_ia32_pfrsqrt (v2sf) 21739 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 21740 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 21741 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 21742 v2sf __builtin_ia32_pi2fd (v2si) 21743 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 21744 21745 The following built-in functions are available when both `-m3dnow' and 21746 `-march=athlon' are used. All of them generate the machine instruction 21747 that is part of the name. 21748 21749 v2si __builtin_ia32_pf2iw (v2sf) 21750 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 21751 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 21752 v2sf __builtin_ia32_pi2fw (v2si) 21753 v2sf __builtin_ia32_pswapdsf (v2sf) 21754 v2si __builtin_ia32_pswapdsi (v2si) 21755 21756 21757 File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 Built-in Functions, Up: Target Builtins 21758 21759 5.48.6 MIPS DSP Built-in Functions 21760 ---------------------------------- 21761 21762 The MIPS DSP Application-Specific Extension (ASE) includes new 21763 instructions that are designed to improve the performance of DSP and 21764 media applications. It provides instructions that operate on packed 21765 8-bit integer data, Q15 fractional data and Q31 fractional data. 21766 21767 GCC supports MIPS DSP operations using both the generic vector 21768 extensions (*note Vector Extensions::) and a collection of 21769 MIPS-specific built-in functions. Both kinds of support are enabled by 21770 the `-mdsp' command-line option. 21771 21772 At present, GCC only provides support for operations on 32-bit 21773 vectors. The vector type associated with 8-bit integer data is usually 21774 called `v4i8' and the vector type associated with Q15 is usually called 21775 `v2q15'. They can be defined in C as follows: 21776 21777 typedef char v4i8 __attribute__ ((vector_size(4))); 21778 typedef short v2q15 __attribute__ ((vector_size(4))); 21779 21780 `v4i8' and `v2q15' values are initialized in the same way as 21781 aggregates. For example: 21782 21783 v4i8 a = {1, 2, 3, 4}; 21784 v4i8 b; 21785 b = (v4i8) {5, 6, 7, 8}; 21786 21787 v2q15 c = {0x0fcb, 0x3a75}; 21788 v2q15 d; 21789 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 21790 21791 _Note:_ The CPU's endianness determines the order in which values are 21792 packed. On little-endian targets, the first value is the least 21793 significant and the last value is the most significant. The opposite 21794 order applies to big-endian targets. For example, the code above will 21795 set the lowest byte of `a' to `1' on little-endian targets and `4' on 21796 big-endian targets. 21797 21798 _Note:_ Q15 and Q31 values must be initialized with their integer 21799 representation. As shown in this example, the integer representation 21800 of a Q15 value can be obtained by multiplying the fractional value by 21801 `0x1.0p15'. The equivalent for Q31 values is to multiply by `0x1.0p31'. 21802 21803 The table below lists the `v4i8' and `v2q15' operations for which 21804 hardware support exists. `a' and `b' are `v4i8' values, and `c' and 21805 `d' are `v2q15' values. 21806 21807 C code MIPS instruction 21808 `a + b' `addu.qb' 21809 `c + d' `addq.ph' 21810 `a - b' `subu.qb' 21811 `c - d' `subq.ph' 21812 21813 It is easier to describe the DSP built-in functions if we first define 21814 the following types: 21815 21816 typedef int q31; 21817 typedef int i32; 21818 typedef long long a64; 21819 21820 `q31' and `i32' are actually the same as `int', but we use `q31' to 21821 indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 21822 value. Similarly, `a64' is the same as `long long', but we use `a64' 21823 to indicate values that will be placed in one of the four DSP 21824 accumulators (`$ac0', `$ac1', `$ac2' or `$ac3'). 21825 21826 Also, some built-in functions prefer or require immediate numbers as 21827 parameters, because the corresponding DSP instructions accept both 21828 immediate numbers and register operands, or accept immediate numbers 21829 only. The immediate parameters are listed as follows. 21830 21831 imm0_7: 0 to 7. 21832 imm0_15: 0 to 15. 21833 imm0_31: 0 to 31. 21834 imm0_63: 0 to 63. 21835 imm0_255: 0 to 255. 21836 imm_n32_31: -32 to 31. 21837 imm_n512_511: -512 to 511. 21838 21839 The following built-in functions map directly to a particular MIPS DSP 21840 instruction. Please refer to the architecture specification for 21841 details on what each instruction does. 21842 21843 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 21844 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 21845 q31 __builtin_mips_addq_s_w (q31, q31) 21846 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 21847 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 21848 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 21849 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 21850 q31 __builtin_mips_subq_s_w (q31, q31) 21851 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 21852 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 21853 i32 __builtin_mips_addsc (i32, i32) 21854 i32 __builtin_mips_addwc (i32, i32) 21855 i32 __builtin_mips_modsub (i32, i32) 21856 i32 __builtin_mips_raddu_w_qb (v4i8) 21857 v2q15 __builtin_mips_absq_s_ph (v2q15) 21858 q31 __builtin_mips_absq_s_w (q31) 21859 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 21860 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 21861 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 21862 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 21863 q31 __builtin_mips_preceq_w_phl (v2q15) 21864 q31 __builtin_mips_preceq_w_phr (v2q15) 21865 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 21866 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 21867 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 21868 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 21869 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 21870 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 21871 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 21872 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 21873 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 21874 v4i8 __builtin_mips_shll_qb (v4i8, i32) 21875 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 21876 v2q15 __builtin_mips_shll_ph (v2q15, i32) 21877 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 21878 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 21879 q31 __builtin_mips_shll_s_w (q31, imm0_31) 21880 q31 __builtin_mips_shll_s_w (q31, i32) 21881 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 21882 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 21883 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 21884 v2q15 __builtin_mips_shra_ph (v2q15, i32) 21885 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 21886 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 21887 q31 __builtin_mips_shra_r_w (q31, imm0_31) 21888 q31 __builtin_mips_shra_r_w (q31, i32) 21889 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 21890 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 21891 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 21892 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 21893 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 21894 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 21895 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 21896 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 21897 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 21898 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 21899 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 21900 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 21901 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 21902 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 21903 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 21904 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 21905 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 21906 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 21907 i32 __builtin_mips_bitrev (i32) 21908 i32 __builtin_mips_insv (i32, i32) 21909 v4i8 __builtin_mips_repl_qb (imm0_255) 21910 v4i8 __builtin_mips_repl_qb (i32) 21911 v2q15 __builtin_mips_repl_ph (imm_n512_511) 21912 v2q15 __builtin_mips_repl_ph (i32) 21913 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 21914 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 21915 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 21916 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 21917 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 21918 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 21919 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 21920 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 21921 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 21922 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 21923 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 21924 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 21925 i32 __builtin_mips_extr_w (a64, imm0_31) 21926 i32 __builtin_mips_extr_w (a64, i32) 21927 i32 __builtin_mips_extr_r_w (a64, imm0_31) 21928 i32 __builtin_mips_extr_s_h (a64, i32) 21929 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 21930 i32 __builtin_mips_extr_rs_w (a64, i32) 21931 i32 __builtin_mips_extr_s_h (a64, imm0_31) 21932 i32 __builtin_mips_extr_r_w (a64, i32) 21933 i32 __builtin_mips_extp (a64, imm0_31) 21934 i32 __builtin_mips_extp (a64, i32) 21935 i32 __builtin_mips_extpdp (a64, imm0_31) 21936 i32 __builtin_mips_extpdp (a64, i32) 21937 a64 __builtin_mips_shilo (a64, imm_n32_31) 21938 a64 __builtin_mips_shilo (a64, i32) 21939 a64 __builtin_mips_mthlip (a64, i32) 21940 void __builtin_mips_wrdsp (i32, imm0_63) 21941 i32 __builtin_mips_rddsp (imm0_63) 21942 i32 __builtin_mips_lbux (void *, i32) 21943 i32 __builtin_mips_lhx (void *, i32) 21944 i32 __builtin_mips_lwx (void *, i32) 21945 i32 __builtin_mips_bposge32 (void) 21946 21947 21948 File: gcc.info, Node: MIPS Paired-Single Support, Next: PowerPC AltiVec Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 21949 21950 5.48.7 MIPS Paired-Single Support 21951 --------------------------------- 21952 21953 The MIPS64 architecture includes a number of instructions that operate 21954 on pairs of single-precision floating-point values. Each pair is 21955 packed into a 64-bit floating-point register, with one element being 21956 designated the "upper half" and the other being designated the "lower 21957 half". 21958 21959 GCC supports paired-single operations using both the generic vector 21960 extensions (*note Vector Extensions::) and a collection of 21961 MIPS-specific built-in functions. Both kinds of support are enabled by 21962 the `-mpaired-single' command-line option. 21963 21964 The vector type associated with paired-single values is usually called 21965 `v2sf'. It can be defined in C as follows: 21966 21967 typedef float v2sf __attribute__ ((vector_size (8))); 21968 21969 `v2sf' values are initialized in the same way as aggregates. For 21970 example: 21971 21972 v2sf a = {1.5, 9.1}; 21973 v2sf b; 21974 float e, f; 21975 b = (v2sf) {e, f}; 21976 21977 _Note:_ The CPU's endianness determines which value is stored in the 21978 upper half of a register and which value is stored in the lower half. 21979 On little-endian targets, the first value is the lower one and the 21980 second value is the upper one. The opposite order applies to 21981 big-endian targets. For example, the code above will set the lower 21982 half of `a' to `1.5' on little-endian targets and `9.1' on big-endian 21983 targets. 21984 21985 * Menu: 21986 21987 * Paired-Single Arithmetic:: 21988 * Paired-Single Built-in Functions:: 21989 * MIPS-3D Built-in Functions:: 21990 21991 21992 File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Paired-Single Support 21993 21994 5.48.7.1 Paired-Single Arithmetic 21995 ................................. 21996 21997 The table below lists the `v2sf' operations for which hardware support 21998 exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 21999 value. 22000 22001 C code MIPS instruction 22002 `a + b' `add.ps' 22003 `a - b' `sub.ps' 22004 `-a' `neg.ps' 22005 `a * b' `mul.ps' 22006 `a * b + c' `madd.ps' 22007 `a * b - c' `msub.ps' 22008 `-(a * b + c)' `nmadd.ps' 22009 `-(a * b - c)' `nmsub.ps' 22010 `x ? a : b' `movn.ps'/`movz.ps' 22011 22012 Note that the multiply-accumulate instructions can be disabled using 22013 the command-line option `-mno-fused-madd'. 22014 22015 22016 File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Paired-Single Support 22017 22018 5.48.7.2 Paired-Single Built-in Functions 22019 ......................................... 22020 22021 The following paired-single functions map directly to a particular MIPS 22022 instruction. Please refer to the architecture specification for 22023 details on what each instruction does. 22024 22025 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 22026 Pair lower lower (`pll.ps'). 22027 22028 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 22029 Pair upper lower (`pul.ps'). 22030 22031 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 22032 Pair lower upper (`plu.ps'). 22033 22034 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 22035 Pair upper upper (`puu.ps'). 22036 22037 `v2sf __builtin_mips_cvt_ps_s (float, float)' 22038 Convert pair to paired single (`cvt.ps.s'). 22039 22040 `float __builtin_mips_cvt_s_pl (v2sf)' 22041 Convert pair lower to single (`cvt.s.pl'). 22042 22043 `float __builtin_mips_cvt_s_pu (v2sf)' 22044 Convert pair upper to single (`cvt.s.pu'). 22045 22046 `v2sf __builtin_mips_abs_ps (v2sf)' 22047 Absolute value (`abs.ps'). 22048 22049 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 22050 Align variable (`alnv.ps'). 22051 22052 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 22053 otherwise the result will be unpredictable. Please read the 22054 instruction description for details. 22055 22056 The following multi-instruction functions are also available. In each 22057 case, COND can be any of the 16 floating-point conditions: `f', `un', 22058 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 22059 `lt', `nge', `le' or `ngt'. 22060 22061 `v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 22062 `v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 22063 Conditional move based on floating point comparison (`c.COND.ps', 22064 `movt.ps'/`movf.ps'). 22065 22066 The `movt' functions return the value X computed by: 22067 22068 c.COND.ps CC,A,B 22069 mov.ps X,C 22070 movt.ps X,D,CC 22071 22072 The `movf' functions are similar but use `movf.ps' instead of 22073 `movt.ps'. 22074 22075 `int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 22076 `int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 22077 Comparison of two paired-single values (`c.COND.ps', 22078 `bc1t'/`bc1f'). 22079 22080 These functions compare A and B using `c.COND.ps' and return 22081 either the upper or lower half of the result. For example: 22082 22083 v2sf a, b; 22084 if (__builtin_mips_upper_c_eq_ps (a, b)) 22085 upper_halves_are_equal (); 22086 else 22087 upper_halves_are_unequal (); 22088 22089 if (__builtin_mips_lower_c_eq_ps (a, b)) 22090 lower_halves_are_equal (); 22091 else 22092 lower_halves_are_unequal (); 22093 22094 22095 File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Paired-Single Support 22096 22097 5.48.7.3 MIPS-3D Built-in Functions 22098 ................................... 22099 22100 The MIPS-3D Application-Specific Extension (ASE) includes additional 22101 paired-single instructions that are designed to improve the performance 22102 of 3D graphics operations. Support for these instructions is controlled 22103 by the `-mips3d' command-line option. 22104 22105 The functions listed below map directly to a particular MIPS-3D 22106 instruction. Please refer to the architecture specification for more 22107 details on what each instruction does. 22108 22109 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 22110 Reduction add (`addr.ps'). 22111 22112 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 22113 Reduction multiply (`mulr.ps'). 22114 22115 `v2sf __builtin_mips_cvt_pw_ps (v2sf)' 22116 Convert paired single to paired word (`cvt.pw.ps'). 22117 22118 `v2sf __builtin_mips_cvt_ps_pw (v2sf)' 22119 Convert paired word to paired single (`cvt.ps.pw'). 22120 22121 `float __builtin_mips_recip1_s (float)' 22122 `double __builtin_mips_recip1_d (double)' 22123 `v2sf __builtin_mips_recip1_ps (v2sf)' 22124 Reduced precision reciprocal (sequence step 1) (`recip1.FMT'). 22125 22126 `float __builtin_mips_recip2_s (float, float)' 22127 `double __builtin_mips_recip2_d (double, double)' 22128 `v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 22129 Reduced precision reciprocal (sequence step 2) (`recip2.FMT'). 22130 22131 `float __builtin_mips_rsqrt1_s (float)' 22132 `double __builtin_mips_rsqrt1_d (double)' 22133 `v2sf __builtin_mips_rsqrt1_ps (v2sf)' 22134 Reduced precision reciprocal square root (sequence step 1) 22135 (`rsqrt1.FMT'). 22136 22137 `float __builtin_mips_rsqrt2_s (float, float)' 22138 `double __builtin_mips_rsqrt2_d (double, double)' 22139 `v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 22140 Reduced precision reciprocal square root (sequence step 2) 22141 (`rsqrt2.FMT'). 22142 22143 The following multi-instruction functions are also available. In each 22144 case, COND can be any of the 16 floating-point conditions: `f', `un', 22145 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 22146 `lt', `nge', `le' or `ngt'. 22147 22148 `int __builtin_mips_cabs_COND_s (float A, float B)' 22149 `int __builtin_mips_cabs_COND_d (double A, double B)' 22150 Absolute comparison of two scalar values (`cabs.COND.FMT', 22151 `bc1t'/`bc1f'). 22152 22153 These functions compare A and B using `cabs.COND.s' or 22154 `cabs.COND.d' and return the result as a boolean value. For 22155 example: 22156 22157 float a, b; 22158 if (__builtin_mips_cabs_eq_s (a, b)) 22159 true (); 22160 else 22161 false (); 22162 22163 `int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 22164 `int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 22165 Absolute comparison of two paired-single values (`cabs.COND.ps', 22166 `bc1t'/`bc1f'). 22167 22168 These functions compare A and B using `cabs.COND.ps' and return 22169 either the upper or lower half of the result. For example: 22170 22171 v2sf a, b; 22172 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 22173 upper_halves_are_equal (); 22174 else 22175 upper_halves_are_unequal (); 22176 22177 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 22178 lower_halves_are_equal (); 22179 else 22180 lower_halves_are_unequal (); 22181 22182 `v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 22183 `v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 22184 Conditional move based on absolute comparison (`cabs.COND.ps', 22185 `movt.ps'/`movf.ps'). 22186 22187 The `movt' functions return the value X computed by: 22188 22189 cabs.COND.ps CC,A,B 22190 mov.ps X,C 22191 movt.ps X,D,CC 22192 22193 The `movf' functions are similar but use `movf.ps' instead of 22194 `movt.ps'. 22195 22196 `int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 22197 `int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 22198 `int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 22199 `int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 22200 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 22201 `bc1any2t'/`bc1any2f'). 22202 22203 These functions compare A and B using `c.COND.ps' or 22204 `cabs.COND.ps'. The `any' forms return true if either result is 22205 true and the `all' forms return true if both results are true. 22206 For example: 22207 22208 v2sf a, b; 22209 if (__builtin_mips_any_c_eq_ps (a, b)) 22210 one_is_true (); 22211 else 22212 both_are_false (); 22213 22214 if (__builtin_mips_all_c_eq_ps (a, b)) 22215 both_are_true (); 22216 else 22217 one_is_false (); 22218 22219 `int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 22220 `int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 22221 `int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 22222 `int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 22223 Comparison of four paired-single values 22224 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 22225 22226 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 22227 with B and to compare C with D. The `any' forms return true if 22228 any of the four results are true and the `all' forms return true 22229 if all four results are true. For example: 22230 22231 v2sf a, b, c, d; 22232 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 22233 some_are_true (); 22234 else 22235 all_are_false (); 22236 22237 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 22238 all_are_true (); 22239 else 22240 some_are_false (); 22241 22242 22243 File: gcc.info, Node: PowerPC AltiVec Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 22244 22245 5.48.8 PowerPC AltiVec Built-in Functions 22246 ----------------------------------------- 22247 22248 GCC provides an interface for the PowerPC family of processors to access 22249 the AltiVec operations described in Motorola's AltiVec Programming 22250 Interface Manual. The interface is made available by including 22251 `<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 22252 supports the following vector types. 22253 22254 vector unsigned char 22255 vector signed char 22256 vector bool char 22257 22258 vector unsigned short 22259 vector signed short 22260 vector bool short 22261 vector pixel 22262 22263 vector unsigned int 22264 vector signed int 22265 vector bool int 22266 vector float 22267 22268 GCC's implementation of the high-level language interface available 22269 from C and C++ code differs from Motorola's documentation in several 22270 ways. 22271 22272 * A vector constant is a list of constant expressions within curly 22273 braces. 22274 22275 * A vector initializer requires no cast if the vector constant is of 22276 the same type as the variable it is initializing. 22277 22278 * If `signed' or `unsigned' is omitted, the signedness of the vector 22279 type is the default signedness of the base type. The default 22280 varies depending on the operating system, so a portable program 22281 should always specify the signedness. 22282 22283 * Compiling with `-maltivec' adds keywords `__vector', `__pixel', 22284 and `__bool'. Macros `vector', `pixel', and `bool' are defined in 22285 `<altivec.h>' and can be undefined. 22286 22287 * GCC allows using a `typedef' name as the type specifier for a 22288 vector type. 22289 22290 * For C, overloaded functions are implemented with macros so the 22291 following does not work: 22292 22293 vec_add ((vector signed int){1, 2, 3, 4}, foo); 22294 22295 Since `vec_add' is a macro, the vector constant in the example is 22296 treated as four separate arguments. Wrap the entire argument in 22297 parentheses for this to work. 22298 22299 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 22300 GCC uses built-in functions to achieve the functionality in the 22301 aforementioned header file, but they are not supported and are subject 22302 to change without notice. 22303 22304 The following interfaces are supported for the generic and specific 22305 AltiVec operations and the AltiVec predicates. In cases where there is 22306 a direct mapping between generic and specific operations, only the 22307 generic names are shown here, although the specific operations can also 22308 be used. 22309 22310 Arguments that are documented as `const int' require literal integral 22311 values within the range required for that operation. 22312 22313 vector signed char vec_abs (vector signed char); 22314 vector signed short vec_abs (vector signed short); 22315 vector signed int vec_abs (vector signed int); 22316 vector float vec_abs (vector float); 22317 22318 vector signed char vec_abss (vector signed char); 22319 vector signed short vec_abss (vector signed short); 22320 vector signed int vec_abss (vector signed int); 22321 22322 vector signed char vec_add (vector bool char, vector signed char); 22323 vector signed char vec_add (vector signed char, vector bool char); 22324 vector signed char vec_add (vector signed char, vector signed char); 22325 vector unsigned char vec_add (vector bool char, vector unsigned char); 22326 vector unsigned char vec_add (vector unsigned char, vector bool char); 22327 vector unsigned char vec_add (vector unsigned char, 22328 vector unsigned char); 22329 vector signed short vec_add (vector bool short, vector signed short); 22330 vector signed short vec_add (vector signed short, vector bool short); 22331 vector signed short vec_add (vector signed short, vector signed short); 22332 vector unsigned short vec_add (vector bool short, 22333 vector unsigned short); 22334 vector unsigned short vec_add (vector unsigned short, 22335 vector bool short); 22336 vector unsigned short vec_add (vector unsigned short, 22337 vector unsigned short); 22338 vector signed int vec_add (vector bool int, vector signed int); 22339 vector signed int vec_add (vector signed int, vector bool int); 22340 vector signed int vec_add (vector signed int, vector signed int); 22341 vector unsigned int vec_add (vector bool int, vector unsigned int); 22342 vector unsigned int vec_add (vector unsigned int, vector bool int); 22343 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 22344 vector float vec_add (vector float, vector float); 22345 22346 vector float vec_vaddfp (vector float, vector float); 22347 22348 vector signed int vec_vadduwm (vector bool int, vector signed int); 22349 vector signed int vec_vadduwm (vector signed int, vector bool int); 22350 vector signed int vec_vadduwm (vector signed int, vector signed int); 22351 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 22352 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 22353 vector unsigned int vec_vadduwm (vector unsigned int, 22354 vector unsigned int); 22355 22356 vector signed short vec_vadduhm (vector bool short, 22357 vector signed short); 22358 vector signed short vec_vadduhm (vector signed short, 22359 vector bool short); 22360 vector signed short vec_vadduhm (vector signed short, 22361 vector signed short); 22362 vector unsigned short vec_vadduhm (vector bool short, 22363 vector unsigned short); 22364 vector unsigned short vec_vadduhm (vector unsigned short, 22365 vector bool short); 22366 vector unsigned short vec_vadduhm (vector unsigned short, 22367 vector unsigned short); 22368 22369 vector signed char vec_vaddubm (vector bool char, vector signed char); 22370 vector signed char vec_vaddubm (vector signed char, vector bool char); 22371 vector signed char vec_vaddubm (vector signed char, vector signed char); 22372 vector unsigned char vec_vaddubm (vector bool char, 22373 vector unsigned char); 22374 vector unsigned char vec_vaddubm (vector unsigned char, 22375 vector bool char); 22376 vector unsigned char vec_vaddubm (vector unsigned char, 22377 vector unsigned char); 22378 22379 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 22380 22381 vector unsigned char vec_adds (vector bool char, vector unsigned char); 22382 vector unsigned char vec_adds (vector unsigned char, vector bool char); 22383 vector unsigned char vec_adds (vector unsigned char, 22384 vector unsigned char); 22385 vector signed char vec_adds (vector bool char, vector signed char); 22386 vector signed char vec_adds (vector signed char, vector bool char); 22387 vector signed char vec_adds (vector signed char, vector signed char); 22388 vector unsigned short vec_adds (vector bool short, 22389 vector unsigned short); 22390 vector unsigned short vec_adds (vector unsigned short, 22391 vector bool short); 22392 vector unsigned short vec_adds (vector unsigned short, 22393 vector unsigned short); 22394 vector signed short vec_adds (vector bool short, vector signed short); 22395 vector signed short vec_adds (vector signed short, vector bool short); 22396 vector signed short vec_adds (vector signed short, vector signed short); 22397 vector unsigned int vec_adds (vector bool int, vector unsigned int); 22398 vector unsigned int vec_adds (vector unsigned int, vector bool int); 22399 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 22400 vector signed int vec_adds (vector bool int, vector signed int); 22401 vector signed int vec_adds (vector signed int, vector bool int); 22402 vector signed int vec_adds (vector signed int, vector signed int); 22403 22404 vector signed int vec_vaddsws (vector bool int, vector signed int); 22405 vector signed int vec_vaddsws (vector signed int, vector bool int); 22406 vector signed int vec_vaddsws (vector signed int, vector signed int); 22407 22408 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 22409 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 22410 vector unsigned int vec_vadduws (vector unsigned int, 22411 vector unsigned int); 22412 22413 vector signed short vec_vaddshs (vector bool short, 22414 vector signed short); 22415 vector signed short vec_vaddshs (vector signed short, 22416 vector bool short); 22417 vector signed short vec_vaddshs (vector signed short, 22418 vector signed short); 22419 22420 vector unsigned short vec_vadduhs (vector bool short, 22421 vector unsigned short); 22422 vector unsigned short vec_vadduhs (vector unsigned short, 22423 vector bool short); 22424 vector unsigned short vec_vadduhs (vector unsigned short, 22425 vector unsigned short); 22426 22427 vector signed char vec_vaddsbs (vector bool char, vector signed char); 22428 vector signed char vec_vaddsbs (vector signed char, vector bool char); 22429 vector signed char vec_vaddsbs (vector signed char, vector signed char); 22430 22431 vector unsigned char vec_vaddubs (vector bool char, 22432 vector unsigned char); 22433 vector unsigned char vec_vaddubs (vector unsigned char, 22434 vector bool char); 22435 vector unsigned char vec_vaddubs (vector unsigned char, 22436 vector unsigned char); 22437 22438 vector float vec_and (vector float, vector float); 22439 vector float vec_and (vector float, vector bool int); 22440 vector float vec_and (vector bool int, vector float); 22441 vector bool int vec_and (vector bool int, vector bool int); 22442 vector signed int vec_and (vector bool int, vector signed int); 22443 vector signed int vec_and (vector signed int, vector bool int); 22444 vector signed int vec_and (vector signed int, vector signed int); 22445 vector unsigned int vec_and (vector bool int, vector unsigned int); 22446 vector unsigned int vec_and (vector unsigned int, vector bool int); 22447 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 22448 vector bool short vec_and (vector bool short, vector bool short); 22449 vector signed short vec_and (vector bool short, vector signed short); 22450 vector signed short vec_and (vector signed short, vector bool short); 22451 vector signed short vec_and (vector signed short, vector signed short); 22452 vector unsigned short vec_and (vector bool short, 22453 vector unsigned short); 22454 vector unsigned short vec_and (vector unsigned short, 22455 vector bool short); 22456 vector unsigned short vec_and (vector unsigned short, 22457 vector unsigned short); 22458 vector signed char vec_and (vector bool char, vector signed char); 22459 vector bool char vec_and (vector bool char, vector bool char); 22460 vector signed char vec_and (vector signed char, vector bool char); 22461 vector signed char vec_and (vector signed char, vector signed char); 22462 vector unsigned char vec_and (vector bool char, vector unsigned char); 22463 vector unsigned char vec_and (vector unsigned char, vector bool char); 22464 vector unsigned char vec_and (vector unsigned char, 22465 vector unsigned char); 22466 22467 vector float vec_andc (vector float, vector float); 22468 vector float vec_andc (vector float, vector bool int); 22469 vector float vec_andc (vector bool int, vector float); 22470 vector bool int vec_andc (vector bool int, vector bool int); 22471 vector signed int vec_andc (vector bool int, vector signed int); 22472 vector signed int vec_andc (vector signed int, vector bool int); 22473 vector signed int vec_andc (vector signed int, vector signed int); 22474 vector unsigned int vec_andc (vector bool int, vector unsigned int); 22475 vector unsigned int vec_andc (vector unsigned int, vector bool int); 22476 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 22477 vector bool short vec_andc (vector bool short, vector bool short); 22478 vector signed short vec_andc (vector bool short, vector signed short); 22479 vector signed short vec_andc (vector signed short, vector bool short); 22480 vector signed short vec_andc (vector signed short, vector signed short); 22481 vector unsigned short vec_andc (vector bool short, 22482 vector unsigned short); 22483 vector unsigned short vec_andc (vector unsigned short, 22484 vector bool short); 22485 vector unsigned short vec_andc (vector unsigned short, 22486 vector unsigned short); 22487 vector signed char vec_andc (vector bool char, vector signed char); 22488 vector bool char vec_andc (vector bool char, vector bool char); 22489 vector signed char vec_andc (vector signed char, vector bool char); 22490 vector signed char vec_andc (vector signed char, vector signed char); 22491 vector unsigned char vec_andc (vector bool char, vector unsigned char); 22492 vector unsigned char vec_andc (vector unsigned char, vector bool char); 22493 vector unsigned char vec_andc (vector unsigned char, 22494 vector unsigned char); 22495 22496 vector unsigned char vec_avg (vector unsigned char, 22497 vector unsigned char); 22498 vector signed char vec_avg (vector signed char, vector signed char); 22499 vector unsigned short vec_avg (vector unsigned short, 22500 vector unsigned short); 22501 vector signed short vec_avg (vector signed short, vector signed short); 22502 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 22503 vector signed int vec_avg (vector signed int, vector signed int); 22504 22505 vector signed int vec_vavgsw (vector signed int, vector signed int); 22506 22507 vector unsigned int vec_vavguw (vector unsigned int, 22508 vector unsigned int); 22509 22510 vector signed short vec_vavgsh (vector signed short, 22511 vector signed short); 22512 22513 vector unsigned short vec_vavguh (vector unsigned short, 22514 vector unsigned short); 22515 22516 vector signed char vec_vavgsb (vector signed char, vector signed char); 22517 22518 vector unsigned char vec_vavgub (vector unsigned char, 22519 vector unsigned char); 22520 22521 vector float vec_ceil (vector float); 22522 22523 vector signed int vec_cmpb (vector float, vector float); 22524 22525 vector bool char vec_cmpeq (vector signed char, vector signed char); 22526 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 22527 vector bool short vec_cmpeq (vector signed short, vector signed short); 22528 vector bool short vec_cmpeq (vector unsigned short, 22529 vector unsigned short); 22530 vector bool int vec_cmpeq (vector signed int, vector signed int); 22531 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 22532 vector bool int vec_cmpeq (vector float, vector float); 22533 22534 vector bool int vec_vcmpeqfp (vector float, vector float); 22535 22536 vector bool int vec_vcmpequw (vector signed int, vector signed int); 22537 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 22538 22539 vector bool short vec_vcmpequh (vector signed short, 22540 vector signed short); 22541 vector bool short vec_vcmpequh (vector unsigned short, 22542 vector unsigned short); 22543 22544 vector bool char vec_vcmpequb (vector signed char, vector signed char); 22545 vector bool char vec_vcmpequb (vector unsigned char, 22546 vector unsigned char); 22547 22548 vector bool int vec_cmpge (vector float, vector float); 22549 22550 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 22551 vector bool char vec_cmpgt (vector signed char, vector signed char); 22552 vector bool short vec_cmpgt (vector unsigned short, 22553 vector unsigned short); 22554 vector bool short vec_cmpgt (vector signed short, vector signed short); 22555 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 22556 vector bool int vec_cmpgt (vector signed int, vector signed int); 22557 vector bool int vec_cmpgt (vector float, vector float); 22558 22559 vector bool int vec_vcmpgtfp (vector float, vector float); 22560 22561 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 22562 22563 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 22564 22565 vector bool short vec_vcmpgtsh (vector signed short, 22566 vector signed short); 22567 22568 vector bool short vec_vcmpgtuh (vector unsigned short, 22569 vector unsigned short); 22570 22571 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 22572 22573 vector bool char vec_vcmpgtub (vector unsigned char, 22574 vector unsigned char); 22575 22576 vector bool int vec_cmple (vector float, vector float); 22577 22578 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 22579 vector bool char vec_cmplt (vector signed char, vector signed char); 22580 vector bool short vec_cmplt (vector unsigned short, 22581 vector unsigned short); 22582 vector bool short vec_cmplt (vector signed short, vector signed short); 22583 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 22584 vector bool int vec_cmplt (vector signed int, vector signed int); 22585 vector bool int vec_cmplt (vector float, vector float); 22586 22587 vector float vec_ctf (vector unsigned int, const int); 22588 vector float vec_ctf (vector signed int, const int); 22589 22590 vector float vec_vcfsx (vector signed int, const int); 22591 22592 vector float vec_vcfux (vector unsigned int, const int); 22593 22594 vector signed int vec_cts (vector float, const int); 22595 22596 vector unsigned int vec_ctu (vector float, const int); 22597 22598 void vec_dss (const int); 22599 22600 void vec_dssall (void); 22601 22602 void vec_dst (const vector unsigned char *, int, const int); 22603 void vec_dst (const vector signed char *, int, const int); 22604 void vec_dst (const vector bool char *, int, const int); 22605 void vec_dst (const vector unsigned short *, int, const int); 22606 void vec_dst (const vector signed short *, int, const int); 22607 void vec_dst (const vector bool short *, int, const int); 22608 void vec_dst (const vector pixel *, int, const int); 22609 void vec_dst (const vector unsigned int *, int, const int); 22610 void vec_dst (const vector signed int *, int, const int); 22611 void vec_dst (const vector bool int *, int, const int); 22612 void vec_dst (const vector float *, int, const int); 22613 void vec_dst (const unsigned char *, int, const int); 22614 void vec_dst (const signed char *, int, const int); 22615 void vec_dst (const unsigned short *, int, const int); 22616 void vec_dst (const short *, int, const int); 22617 void vec_dst (const unsigned int *, int, const int); 22618 void vec_dst (const int *, int, const int); 22619 void vec_dst (const unsigned long *, int, const int); 22620 void vec_dst (const long *, int, const int); 22621 void vec_dst (const float *, int, const int); 22622 22623 void vec_dstst (const vector unsigned char *, int, const int); 22624 void vec_dstst (const vector signed char *, int, const int); 22625 void vec_dstst (const vector bool char *, int, const int); 22626 void vec_dstst (const vector unsigned short *, int, const int); 22627 void vec_dstst (const vector signed short *, int, const int); 22628 void vec_dstst (const vector bool short *, int, const int); 22629 void vec_dstst (const vector pixel *, int, const int); 22630 void vec_dstst (const vector unsigned int *, int, const int); 22631 void vec_dstst (const vector signed int *, int, const int); 22632 void vec_dstst (const vector bool int *, int, const int); 22633 void vec_dstst (const vector float *, int, const int); 22634 void vec_dstst (const unsigned char *, int, const int); 22635 void vec_dstst (const signed char *, int, const int); 22636 void vec_dstst (const unsigned short *, int, const int); 22637 void vec_dstst (const short *, int, const int); 22638 void vec_dstst (const unsigned int *, int, const int); 22639 void vec_dstst (const int *, int, const int); 22640 void vec_dstst (const unsigned long *, int, const int); 22641 void vec_dstst (const long *, int, const int); 22642 void vec_dstst (const float *, int, const int); 22643 22644 void vec_dststt (const vector unsigned char *, int, const int); 22645 void vec_dststt (const vector signed char *, int, const int); 22646 void vec_dststt (const vector bool char *, int, const int); 22647 void vec_dststt (const vector unsigned short *, int, const int); 22648 void vec_dststt (const vector signed short *, int, const int); 22649 void vec_dststt (const vector bool short *, int, const int); 22650 void vec_dststt (const vector pixel *, int, const int); 22651 void vec_dststt (const vector unsigned int *, int, const int); 22652 void vec_dststt (const vector signed int *, int, const int); 22653 void vec_dststt (const vector bool int *, int, const int); 22654 void vec_dststt (const vector float *, int, const int); 22655 void vec_dststt (const unsigned char *, int, const int); 22656 void vec_dststt (const signed char *, int, const int); 22657 void vec_dststt (const unsigned short *, int, const int); 22658 void vec_dststt (const short *, int, const int); 22659 void vec_dststt (const unsigned int *, int, const int); 22660 void vec_dststt (const int *, int, const int); 22661 void vec_dststt (const unsigned long *, int, const int); 22662 void vec_dststt (const long *, int, const int); 22663 void vec_dststt (const float *, int, const int); 22664 22665 void vec_dstt (const vector unsigned char *, int, const int); 22666 void vec_dstt (const vector signed char *, int, const int); 22667 void vec_dstt (const vector bool char *, int, const int); 22668 void vec_dstt (const vector unsigned short *, int, const int); 22669 void vec_dstt (const vector signed short *, int, const int); 22670 void vec_dstt (const vector bool short *, int, const int); 22671 void vec_dstt (const vector pixel *, int, const int); 22672 void vec_dstt (const vector unsigned int *, int, const int); 22673 void vec_dstt (const vector signed int *, int, const int); 22674 void vec_dstt (const vector bool int *, int, const int); 22675 void vec_dstt (const vector float *, int, const int); 22676 void vec_dstt (const unsigned char *, int, const int); 22677 void vec_dstt (const signed char *, int, const int); 22678 void vec_dstt (const unsigned short *, int, const int); 22679 void vec_dstt (const short *, int, const int); 22680 void vec_dstt (const unsigned int *, int, const int); 22681 void vec_dstt (const int *, int, const int); 22682 void vec_dstt (const unsigned long *, int, const int); 22683 void vec_dstt (const long *, int, const int); 22684 void vec_dstt (const float *, int, const int); 22685 22686 vector float vec_expte (vector float); 22687 22688 vector float vec_floor (vector float); 22689 22690 vector float vec_ld (int, const vector float *); 22691 vector float vec_ld (int, const float *); 22692 vector bool int vec_ld (int, const vector bool int *); 22693 vector signed int vec_ld (int, const vector signed int *); 22694 vector signed int vec_ld (int, const int *); 22695 vector signed int vec_ld (int, const long *); 22696 vector unsigned int vec_ld (int, const vector unsigned int *); 22697 vector unsigned int vec_ld (int, const unsigned int *); 22698 vector unsigned int vec_ld (int, const unsigned long *); 22699 vector bool short vec_ld (int, const vector bool short *); 22700 vector pixel vec_ld (int, const vector pixel *); 22701 vector signed short vec_ld (int, const vector signed short *); 22702 vector signed short vec_ld (int, const short *); 22703 vector unsigned short vec_ld (int, const vector unsigned short *); 22704 vector unsigned short vec_ld (int, const unsigned short *); 22705 vector bool char vec_ld (int, const vector bool char *); 22706 vector signed char vec_ld (int, const vector signed char *); 22707 vector signed char vec_ld (int, const signed char *); 22708 vector unsigned char vec_ld (int, const vector unsigned char *); 22709 vector unsigned char vec_ld (int, const unsigned char *); 22710 22711 vector signed char vec_lde (int, const signed char *); 22712 vector unsigned char vec_lde (int, const unsigned char *); 22713 vector signed short vec_lde (int, const short *); 22714 vector unsigned short vec_lde (int, const unsigned short *); 22715 vector float vec_lde (int, const float *); 22716 vector signed int vec_lde (int, const int *); 22717 vector unsigned int vec_lde (int, const unsigned int *); 22718 vector signed int vec_lde (int, const long *); 22719 vector unsigned int vec_lde (int, const unsigned long *); 22720 22721 vector float vec_lvewx (int, float *); 22722 vector signed int vec_lvewx (int, int *); 22723 vector unsigned int vec_lvewx (int, unsigned int *); 22724 vector signed int vec_lvewx (int, long *); 22725 vector unsigned int vec_lvewx (int, unsigned long *); 22726 22727 vector signed short vec_lvehx (int, short *); 22728 vector unsigned short vec_lvehx (int, unsigned short *); 22729 22730 vector signed char vec_lvebx (int, char *); 22731 vector unsigned char vec_lvebx (int, unsigned char *); 22732 22733 vector float vec_ldl (int, const vector float *); 22734 vector float vec_ldl (int, const float *); 22735 vector bool int vec_ldl (int, const vector bool int *); 22736 vector signed int vec_ldl (int, const vector signed int *); 22737 vector signed int vec_ldl (int, const int *); 22738 vector signed int vec_ldl (int, const long *); 22739 vector unsigned int vec_ldl (int, const vector unsigned int *); 22740 vector unsigned int vec_ldl (int, const unsigned int *); 22741 vector unsigned int vec_ldl (int, const unsigned long *); 22742 vector bool short vec_ldl (int, const vector bool short *); 22743 vector pixel vec_ldl (int, const vector pixel *); 22744 vector signed short vec_ldl (int, const vector signed short *); 22745 vector signed short vec_ldl (int, const short *); 22746 vector unsigned short vec_ldl (int, const vector unsigned short *); 22747 vector unsigned short vec_ldl (int, const unsigned short *); 22748 vector bool char vec_ldl (int, const vector bool char *); 22749 vector signed char vec_ldl (int, const vector signed char *); 22750 vector signed char vec_ldl (int, const signed char *); 22751 vector unsigned char vec_ldl (int, const vector unsigned char *); 22752 vector unsigned char vec_ldl (int, const unsigned char *); 22753 22754 vector float vec_loge (vector float); 22755 22756 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 22757 vector unsigned char vec_lvsl (int, const volatile signed char *); 22758 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 22759 vector unsigned char vec_lvsl (int, const volatile short *); 22760 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 22761 vector unsigned char vec_lvsl (int, const volatile int *); 22762 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 22763 vector unsigned char vec_lvsl (int, const volatile long *); 22764 vector unsigned char vec_lvsl (int, const volatile float *); 22765 22766 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 22767 vector unsigned char vec_lvsr (int, const volatile signed char *); 22768 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 22769 vector unsigned char vec_lvsr (int, const volatile short *); 22770 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 22771 vector unsigned char vec_lvsr (int, const volatile int *); 22772 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 22773 vector unsigned char vec_lvsr (int, const volatile long *); 22774 vector unsigned char vec_lvsr (int, const volatile float *); 22775 22776 vector float vec_madd (vector float, vector float, vector float); 22777 22778 vector signed short vec_madds (vector signed short, 22779 vector signed short, 22780 vector signed short); 22781 22782 vector unsigned char vec_max (vector bool char, vector unsigned char); 22783 vector unsigned char vec_max (vector unsigned char, vector bool char); 22784 vector unsigned char vec_max (vector unsigned char, 22785 vector unsigned char); 22786 vector signed char vec_max (vector bool char, vector signed char); 22787 vector signed char vec_max (vector signed char, vector bool char); 22788 vector signed char vec_max (vector signed char, vector signed char); 22789 vector unsigned short vec_max (vector bool short, 22790 vector unsigned short); 22791 vector unsigned short vec_max (vector unsigned short, 22792 vector bool short); 22793 vector unsigned short vec_max (vector unsigned short, 22794 vector unsigned short); 22795 vector signed short vec_max (vector bool short, vector signed short); 22796 vector signed short vec_max (vector signed short, vector bool short); 22797 vector signed short vec_max (vector signed short, vector signed short); 22798 vector unsigned int vec_max (vector bool int, vector unsigned int); 22799 vector unsigned int vec_max (vector unsigned int, vector bool int); 22800 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 22801 vector signed int vec_max (vector bool int, vector signed int); 22802 vector signed int vec_max (vector signed int, vector bool int); 22803 vector signed int vec_max (vector signed int, vector signed int); 22804 vector float vec_max (vector float, vector float); 22805 22806 vector float vec_vmaxfp (vector float, vector float); 22807 22808 vector signed int vec_vmaxsw (vector bool int, vector signed int); 22809 vector signed int vec_vmaxsw (vector signed int, vector bool int); 22810 vector signed int vec_vmaxsw (vector signed int, vector signed int); 22811 22812 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 22813 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 22814 vector unsigned int vec_vmaxuw (vector unsigned int, 22815 vector unsigned int); 22816 22817 vector signed short vec_vmaxsh (vector bool short, vector signed short); 22818 vector signed short vec_vmaxsh (vector signed short, vector bool short); 22819 vector signed short vec_vmaxsh (vector signed short, 22820 vector signed short); 22821 22822 vector unsigned short vec_vmaxuh (vector bool short, 22823 vector unsigned short); 22824 vector unsigned short vec_vmaxuh (vector unsigned short, 22825 vector bool short); 22826 vector unsigned short vec_vmaxuh (vector unsigned short, 22827 vector unsigned short); 22828 22829 vector signed char vec_vmaxsb (vector bool char, vector signed char); 22830 vector signed char vec_vmaxsb (vector signed char, vector bool char); 22831 vector signed char vec_vmaxsb (vector signed char, vector signed char); 22832 22833 vector unsigned char vec_vmaxub (vector bool char, 22834 vector unsigned char); 22835 vector unsigned char vec_vmaxub (vector unsigned char, 22836 vector bool char); 22837 vector unsigned char vec_vmaxub (vector unsigned char, 22838 vector unsigned char); 22839 22840 vector bool char vec_mergeh (vector bool char, vector bool char); 22841 vector signed char vec_mergeh (vector signed char, vector signed char); 22842 vector unsigned char vec_mergeh (vector unsigned char, 22843 vector unsigned char); 22844 vector bool short vec_mergeh (vector bool short, vector bool short); 22845 vector pixel vec_mergeh (vector pixel, vector pixel); 22846 vector signed short vec_mergeh (vector signed short, 22847 vector signed short); 22848 vector unsigned short vec_mergeh (vector unsigned short, 22849 vector unsigned short); 22850 vector float vec_mergeh (vector float, vector float); 22851 vector bool int vec_mergeh (vector bool int, vector bool int); 22852 vector signed int vec_mergeh (vector signed int, vector signed int); 22853 vector unsigned int vec_mergeh (vector unsigned int, 22854 vector unsigned int); 22855 22856 vector float vec_vmrghw (vector float, vector float); 22857 vector bool int vec_vmrghw (vector bool int, vector bool int); 22858 vector signed int vec_vmrghw (vector signed int, vector signed int); 22859 vector unsigned int vec_vmrghw (vector unsigned int, 22860 vector unsigned int); 22861 22862 vector bool short vec_vmrghh (vector bool short, vector bool short); 22863 vector signed short vec_vmrghh (vector signed short, 22864 vector signed short); 22865 vector unsigned short vec_vmrghh (vector unsigned short, 22866 vector unsigned short); 22867 vector pixel vec_vmrghh (vector pixel, vector pixel); 22868 22869 vector bool char vec_vmrghb (vector bool char, vector bool char); 22870 vector signed char vec_vmrghb (vector signed char, vector signed char); 22871 vector unsigned char vec_vmrghb (vector unsigned char, 22872 vector unsigned char); 22873 22874 vector bool char vec_mergel (vector bool char, vector bool char); 22875 vector signed char vec_mergel (vector signed char, vector signed char); 22876 vector unsigned char vec_mergel (vector unsigned char, 22877 vector unsigned char); 22878 vector bool short vec_mergel (vector bool short, vector bool short); 22879 vector pixel vec_mergel (vector pixel, vector pixel); 22880 vector signed short vec_mergel (vector signed short, 22881 vector signed short); 22882 vector unsigned short vec_mergel (vector unsigned short, 22883 vector unsigned short); 22884 vector float vec_mergel (vector float, vector float); 22885 vector bool int vec_mergel (vector bool int, vector bool int); 22886 vector signed int vec_mergel (vector signed int, vector signed int); 22887 vector unsigned int vec_mergel (vector unsigned int, 22888 vector unsigned int); 22889 22890 vector float vec_vmrglw (vector float, vector float); 22891 vector signed int vec_vmrglw (vector signed int, vector signed int); 22892 vector unsigned int vec_vmrglw (vector unsigned int, 22893 vector unsigned int); 22894 vector bool int vec_vmrglw (vector bool int, vector bool int); 22895 22896 vector bool short vec_vmrglh (vector bool short, vector bool short); 22897 vector signed short vec_vmrglh (vector signed short, 22898 vector signed short); 22899 vector unsigned short vec_vmrglh (vector unsigned short, 22900 vector unsigned short); 22901 vector pixel vec_vmrglh (vector pixel, vector pixel); 22902 22903 vector bool char vec_vmrglb (vector bool char, vector bool char); 22904 vector signed char vec_vmrglb (vector signed char, vector signed char); 22905 vector unsigned char vec_vmrglb (vector unsigned char, 22906 vector unsigned char); 22907 22908 vector unsigned short vec_mfvscr (void); 22909 22910 vector unsigned char vec_min (vector bool char, vector unsigned char); 22911 vector unsigned char vec_min (vector unsigned char, vector bool char); 22912 vector unsigned char vec_min (vector unsigned char, 22913 vector unsigned char); 22914 vector signed char vec_min (vector bool char, vector signed char); 22915 vector signed char vec_min (vector signed char, vector bool char); 22916 vector signed char vec_min (vector signed char, vector signed char); 22917 vector unsigned short vec_min (vector bool short, 22918 vector unsigned short); 22919 vector unsigned short vec_min (vector unsigned short, 22920 vector bool short); 22921 vector unsigned short vec_min (vector unsigned short, 22922 vector unsigned short); 22923 vector signed short vec_min (vector bool short, vector signed short); 22924 vector signed short vec_min (vector signed short, vector bool short); 22925 vector signed short vec_min (vector signed short, vector signed short); 22926 vector unsigned int vec_min (vector bool int, vector unsigned int); 22927 vector unsigned int vec_min (vector unsigned int, vector bool int); 22928 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 22929 vector signed int vec_min (vector bool int, vector signed int); 22930 vector signed int vec_min (vector signed int, vector bool int); 22931 vector signed int vec_min (vector signed int, vector signed int); 22932 vector float vec_min (vector float, vector float); 22933 22934 vector float vec_vminfp (vector float, vector float); 22935 22936 vector signed int vec_vminsw (vector bool int, vector signed int); 22937 vector signed int vec_vminsw (vector signed int, vector bool int); 22938 vector signed int vec_vminsw (vector signed int, vector signed int); 22939 22940 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 22941 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 22942 vector unsigned int vec_vminuw (vector unsigned int, 22943 vector unsigned int); 22944 22945 vector signed short vec_vminsh (vector bool short, vector signed short); 22946 vector signed short vec_vminsh (vector signed short, vector bool short); 22947 vector signed short vec_vminsh (vector signed short, 22948 vector signed short); 22949 22950 vector unsigned short vec_vminuh (vector bool short, 22951 vector unsigned short); 22952 vector unsigned short vec_vminuh (vector unsigned short, 22953 vector bool short); 22954 vector unsigned short vec_vminuh (vector unsigned short, 22955 vector unsigned short); 22956 22957 vector signed char vec_vminsb (vector bool char, vector signed char); 22958 vector signed char vec_vminsb (vector signed char, vector bool char); 22959 vector signed char vec_vminsb (vector signed char, vector signed char); 22960 22961 vector unsigned char vec_vminub (vector bool char, 22962 vector unsigned char); 22963 vector unsigned char vec_vminub (vector unsigned char, 22964 vector bool char); 22965 vector unsigned char vec_vminub (vector unsigned char, 22966 vector unsigned char); 22967 22968 vector signed short vec_mladd (vector signed short, 22969 vector signed short, 22970 vector signed short); 22971 vector signed short vec_mladd (vector signed short, 22972 vector unsigned short, 22973 vector unsigned short); 22974 vector signed short vec_mladd (vector unsigned short, 22975 vector signed short, 22976 vector signed short); 22977 vector unsigned short vec_mladd (vector unsigned short, 22978 vector unsigned short, 22979 vector unsigned short); 22980 22981 vector signed short vec_mradds (vector signed short, 22982 vector signed short, 22983 vector signed short); 22984 22985 vector unsigned int vec_msum (vector unsigned char, 22986 vector unsigned char, 22987 vector unsigned int); 22988 vector signed int vec_msum (vector signed char, 22989 vector unsigned char, 22990 vector signed int); 22991 vector unsigned int vec_msum (vector unsigned short, 22992 vector unsigned short, 22993 vector unsigned int); 22994 vector signed int vec_msum (vector signed short, 22995 vector signed short, 22996 vector signed int); 22997 22998 vector signed int vec_vmsumshm (vector signed short, 22999 vector signed short, 23000 vector signed int); 23001 23002 vector unsigned int vec_vmsumuhm (vector unsigned short, 23003 vector unsigned short, 23004 vector unsigned int); 23005 23006 vector signed int vec_vmsummbm (vector signed char, 23007 vector unsigned char, 23008 vector signed int); 23009 23010 vector unsigned int vec_vmsumubm (vector unsigned char, 23011 vector unsigned char, 23012 vector unsigned int); 23013 23014 vector unsigned int vec_msums (vector unsigned short, 23015 vector unsigned short, 23016 vector unsigned int); 23017 vector signed int vec_msums (vector signed short, 23018 vector signed short, 23019 vector signed int); 23020 23021 vector signed int vec_vmsumshs (vector signed short, 23022 vector signed short, 23023 vector signed int); 23024 23025 vector unsigned int vec_vmsumuhs (vector unsigned short, 23026 vector unsigned short, 23027 vector unsigned int); 23028 23029 void vec_mtvscr (vector signed int); 23030 void vec_mtvscr (vector unsigned int); 23031 void vec_mtvscr (vector bool int); 23032 void vec_mtvscr (vector signed short); 23033 void vec_mtvscr (vector unsigned short); 23034 void vec_mtvscr (vector bool short); 23035 void vec_mtvscr (vector pixel); 23036 void vec_mtvscr (vector signed char); 23037 void vec_mtvscr (vector unsigned char); 23038 void vec_mtvscr (vector bool char); 23039 23040 vector unsigned short vec_mule (vector unsigned char, 23041 vector unsigned char); 23042 vector signed short vec_mule (vector signed char, 23043 vector signed char); 23044 vector unsigned int vec_mule (vector unsigned short, 23045 vector unsigned short); 23046 vector signed int vec_mule (vector signed short, vector signed short); 23047 23048 vector signed int vec_vmulesh (vector signed short, 23049 vector signed short); 23050 23051 vector unsigned int vec_vmuleuh (vector unsigned short, 23052 vector unsigned short); 23053 23054 vector signed short vec_vmulesb (vector signed char, 23055 vector signed char); 23056 23057 vector unsigned short vec_vmuleub (vector unsigned char, 23058 vector unsigned char); 23059 23060 vector unsigned short vec_mulo (vector unsigned char, 23061 vector unsigned char); 23062 vector signed short vec_mulo (vector signed char, vector signed char); 23063 vector unsigned int vec_mulo (vector unsigned short, 23064 vector unsigned short); 23065 vector signed int vec_mulo (vector signed short, vector signed short); 23066 23067 vector signed int vec_vmulosh (vector signed short, 23068 vector signed short); 23069 23070 vector unsigned int vec_vmulouh (vector unsigned short, 23071 vector unsigned short); 23072 23073 vector signed short vec_vmulosb (vector signed char, 23074 vector signed char); 23075 23076 vector unsigned short vec_vmuloub (vector unsigned char, 23077 vector unsigned char); 23078 23079 vector float vec_nmsub (vector float, vector float, vector float); 23080 23081 vector float vec_nor (vector float, vector float); 23082 vector signed int vec_nor (vector signed int, vector signed int); 23083 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 23084 vector bool int vec_nor (vector bool int, vector bool int); 23085 vector signed short vec_nor (vector signed short, vector signed short); 23086 vector unsigned short vec_nor (vector unsigned short, 23087 vector unsigned short); 23088 vector bool short vec_nor (vector bool short, vector bool short); 23089 vector signed char vec_nor (vector signed char, vector signed char); 23090 vector unsigned char vec_nor (vector unsigned char, 23091 vector unsigned char); 23092 vector bool char vec_nor (vector bool char, vector bool char); 23093 23094 vector float vec_or (vector float, vector float); 23095 vector float vec_or (vector float, vector bool int); 23096 vector float vec_or (vector bool int, vector float); 23097 vector bool int vec_or (vector bool int, vector bool int); 23098 vector signed int vec_or (vector bool int, vector signed int); 23099 vector signed int vec_or (vector signed int, vector bool int); 23100 vector signed int vec_or (vector signed int, vector signed int); 23101 vector unsigned int vec_or (vector bool int, vector unsigned int); 23102 vector unsigned int vec_or (vector unsigned int, vector bool int); 23103 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 23104 vector bool short vec_or (vector bool short, vector bool short); 23105 vector signed short vec_or (vector bool short, vector signed short); 23106 vector signed short vec_or (vector signed short, vector bool short); 23107 vector signed short vec_or (vector signed short, vector signed short); 23108 vector unsigned short vec_or (vector bool short, vector unsigned short); 23109 vector unsigned short vec_or (vector unsigned short, vector bool short); 23110 vector unsigned short vec_or (vector unsigned short, 23111 vector unsigned short); 23112 vector signed char vec_or (vector bool char, vector signed char); 23113 vector bool char vec_or (vector bool char, vector bool char); 23114 vector signed char vec_or (vector signed char, vector bool char); 23115 vector signed char vec_or (vector signed char, vector signed char); 23116 vector unsigned char vec_or (vector bool char, vector unsigned char); 23117 vector unsigned char vec_or (vector unsigned char, vector bool char); 23118 vector unsigned char vec_or (vector unsigned char, 23119 vector unsigned char); 23120 23121 vector signed char vec_pack (vector signed short, vector signed short); 23122 vector unsigned char vec_pack (vector unsigned short, 23123 vector unsigned short); 23124 vector bool char vec_pack (vector bool short, vector bool short); 23125 vector signed short vec_pack (vector signed int, vector signed int); 23126 vector unsigned short vec_pack (vector unsigned int, 23127 vector unsigned int); 23128 vector bool short vec_pack (vector bool int, vector bool int); 23129 23130 vector bool short vec_vpkuwum (vector bool int, vector bool int); 23131 vector signed short vec_vpkuwum (vector signed int, vector signed int); 23132 vector unsigned short vec_vpkuwum (vector unsigned int, 23133 vector unsigned int); 23134 23135 vector bool char vec_vpkuhum (vector bool short, vector bool short); 23136 vector signed char vec_vpkuhum (vector signed short, 23137 vector signed short); 23138 vector unsigned char vec_vpkuhum (vector unsigned short, 23139 vector unsigned short); 23140 23141 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 23142 23143 vector unsigned char vec_packs (vector unsigned short, 23144 vector unsigned short); 23145 vector signed char vec_packs (vector signed short, vector signed short); 23146 vector unsigned short vec_packs (vector unsigned int, 23147 vector unsigned int); 23148 vector signed short vec_packs (vector signed int, vector signed int); 23149 23150 vector signed short vec_vpkswss (vector signed int, vector signed int); 23151 23152 vector unsigned short vec_vpkuwus (vector unsigned int, 23153 vector unsigned int); 23154 23155 vector signed char vec_vpkshss (vector signed short, 23156 vector signed short); 23157 23158 vector unsigned char vec_vpkuhus (vector unsigned short, 23159 vector unsigned short); 23160 23161 vector unsigned char vec_packsu (vector unsigned short, 23162 vector unsigned short); 23163 vector unsigned char vec_packsu (vector signed short, 23164 vector signed short); 23165 vector unsigned short vec_packsu (vector unsigned int, 23166 vector unsigned int); 23167 vector unsigned short vec_packsu (vector signed int, vector signed int); 23168 23169 vector unsigned short vec_vpkswus (vector signed int, 23170 vector signed int); 23171 23172 vector unsigned char vec_vpkshus (vector signed short, 23173 vector signed short); 23174 23175 vector float vec_perm (vector float, 23176 vector float, 23177 vector unsigned char); 23178 vector signed int vec_perm (vector signed int, 23179 vector signed int, 23180 vector unsigned char); 23181 vector unsigned int vec_perm (vector unsigned int, 23182 vector unsigned int, 23183 vector unsigned char); 23184 vector bool int vec_perm (vector bool int, 23185 vector bool int, 23186 vector unsigned char); 23187 vector signed short vec_perm (vector signed short, 23188 vector signed short, 23189 vector unsigned char); 23190 vector unsigned short vec_perm (vector unsigned short, 23191 vector unsigned short, 23192 vector unsigned char); 23193 vector bool short vec_perm (vector bool short, 23194 vector bool short, 23195 vector unsigned char); 23196 vector pixel vec_perm (vector pixel, 23197 vector pixel, 23198 vector unsigned char); 23199 vector signed char vec_perm (vector signed char, 23200 vector signed char, 23201 vector unsigned char); 23202 vector unsigned char vec_perm (vector unsigned char, 23203 vector unsigned char, 23204 vector unsigned char); 23205 vector bool char vec_perm (vector bool char, 23206 vector bool char, 23207 vector unsigned char); 23208 23209 vector float vec_re (vector float); 23210 23211 vector signed char vec_rl (vector signed char, 23212 vector unsigned char); 23213 vector unsigned char vec_rl (vector unsigned char, 23214 vector unsigned char); 23215 vector signed short vec_rl (vector signed short, vector unsigned short); 23216 vector unsigned short vec_rl (vector unsigned short, 23217 vector unsigned short); 23218 vector signed int vec_rl (vector signed int, vector unsigned int); 23219 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 23220 23221 vector signed int vec_vrlw (vector signed int, vector unsigned int); 23222 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 23223 23224 vector signed short vec_vrlh (vector signed short, 23225 vector unsigned short); 23226 vector unsigned short vec_vrlh (vector unsigned short, 23227 vector unsigned short); 23228 23229 vector signed char vec_vrlb (vector signed char, vector unsigned char); 23230 vector unsigned char vec_vrlb (vector unsigned char, 23231 vector unsigned char); 23232 23233 vector float vec_round (vector float); 23234 23235 vector float vec_rsqrte (vector float); 23236 23237 vector float vec_sel (vector float, vector float, vector bool int); 23238 vector float vec_sel (vector float, vector float, vector unsigned int); 23239 vector signed int vec_sel (vector signed int, 23240 vector signed int, 23241 vector bool int); 23242 vector signed int vec_sel (vector signed int, 23243 vector signed int, 23244 vector unsigned int); 23245 vector unsigned int vec_sel (vector unsigned int, 23246 vector unsigned int, 23247 vector bool int); 23248 vector unsigned int vec_sel (vector unsigned int, 23249 vector unsigned int, 23250 vector unsigned int); 23251 vector bool int vec_sel (vector bool int, 23252 vector bool int, 23253 vector bool int); 23254 vector bool int vec_sel (vector bool int, 23255 vector bool int, 23256 vector unsigned int); 23257 vector signed short vec_sel (vector signed short, 23258 vector signed short, 23259 vector bool short); 23260 vector signed short vec_sel (vector signed short, 23261 vector signed short, 23262 vector unsigned short); 23263 vector unsigned short vec_sel (vector unsigned short, 23264 vector unsigned short, 23265 vector bool short); 23266 vector unsigned short vec_sel (vector unsigned short, 23267 vector unsigned short, 23268 vector unsigned short); 23269 vector bool short vec_sel (vector bool short, 23270 vector bool short, 23271 vector bool short); 23272 vector bool short vec_sel (vector bool short, 23273 vector bool short, 23274 vector unsigned short); 23275 vector signed char vec_sel (vector signed char, 23276 vector signed char, 23277 vector bool char); 23278 vector signed char vec_sel (vector signed char, 23279 vector signed char, 23280 vector unsigned char); 23281 vector unsigned char vec_sel (vector unsigned char, 23282 vector unsigned char, 23283 vector bool char); 23284 vector unsigned char vec_sel (vector unsigned char, 23285 vector unsigned char, 23286 vector unsigned char); 23287 vector bool char vec_sel (vector bool char, 23288 vector bool char, 23289 vector bool char); 23290 vector bool char vec_sel (vector bool char, 23291 vector bool char, 23292 vector unsigned char); 23293 23294 vector signed char vec_sl (vector signed char, 23295 vector unsigned char); 23296 vector unsigned char vec_sl (vector unsigned char, 23297 vector unsigned char); 23298 vector signed short vec_sl (vector signed short, vector unsigned short); 23299 vector unsigned short vec_sl (vector unsigned short, 23300 vector unsigned short); 23301 vector signed int vec_sl (vector signed int, vector unsigned int); 23302 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 23303 23304 vector signed int vec_vslw (vector signed int, vector unsigned int); 23305 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 23306 23307 vector signed short vec_vslh (vector signed short, 23308 vector unsigned short); 23309 vector unsigned short vec_vslh (vector unsigned short, 23310 vector unsigned short); 23311 23312 vector signed char vec_vslb (vector signed char, vector unsigned char); 23313 vector unsigned char vec_vslb (vector unsigned char, 23314 vector unsigned char); 23315 23316 vector float vec_sld (vector float, vector float, const int); 23317 vector signed int vec_sld (vector signed int, 23318 vector signed int, 23319 const int); 23320 vector unsigned int vec_sld (vector unsigned int, 23321 vector unsigned int, 23322 const int); 23323 vector bool int vec_sld (vector bool int, 23324 vector bool int, 23325 const int); 23326 vector signed short vec_sld (vector signed short, 23327 vector signed short, 23328 const int); 23329 vector unsigned short vec_sld (vector unsigned short, 23330 vector unsigned short, 23331 const int); 23332 vector bool short vec_sld (vector bool short, 23333 vector bool short, 23334 const int); 23335 vector pixel vec_sld (vector pixel, 23336 vector pixel, 23337 const int); 23338 vector signed char vec_sld (vector signed char, 23339 vector signed char, 23340 const int); 23341 vector unsigned char vec_sld (vector unsigned char, 23342 vector unsigned char, 23343 const int); 23344 vector bool char vec_sld (vector bool char, 23345 vector bool char, 23346 const int); 23347 23348 vector signed int vec_sll (vector signed int, 23349 vector unsigned int); 23350 vector signed int vec_sll (vector signed int, 23351 vector unsigned short); 23352 vector signed int vec_sll (vector signed int, 23353 vector unsigned char); 23354 vector unsigned int vec_sll (vector unsigned int, 23355 vector unsigned int); 23356 vector unsigned int vec_sll (vector unsigned int, 23357 vector unsigned short); 23358 vector unsigned int vec_sll (vector unsigned int, 23359 vector unsigned char); 23360 vector bool int vec_sll (vector bool int, 23361 vector unsigned int); 23362 vector bool int vec_sll (vector bool int, 23363 vector unsigned short); 23364 vector bool int vec_sll (vector bool int, 23365 vector unsigned char); 23366 vector signed short vec_sll (vector signed short, 23367 vector unsigned int); 23368 vector signed short vec_sll (vector signed short, 23369 vector unsigned short); 23370 vector signed short vec_sll (vector signed short, 23371 vector unsigned char); 23372 vector unsigned short vec_sll (vector unsigned short, 23373 vector unsigned int); 23374 vector unsigned short vec_sll (vector unsigned short, 23375 vector unsigned short); 23376 vector unsigned short vec_sll (vector unsigned short, 23377 vector unsigned char); 23378 vector bool short vec_sll (vector bool short, vector unsigned int); 23379 vector bool short vec_sll (vector bool short, vector unsigned short); 23380 vector bool short vec_sll (vector bool short, vector unsigned char); 23381 vector pixel vec_sll (vector pixel, vector unsigned int); 23382 vector pixel vec_sll (vector pixel, vector unsigned short); 23383 vector pixel vec_sll (vector pixel, vector unsigned char); 23384 vector signed char vec_sll (vector signed char, vector unsigned int); 23385 vector signed char vec_sll (vector signed char, vector unsigned short); 23386 vector signed char vec_sll (vector signed char, vector unsigned char); 23387 vector unsigned char vec_sll (vector unsigned char, 23388 vector unsigned int); 23389 vector unsigned char vec_sll (vector unsigned char, 23390 vector unsigned short); 23391 vector unsigned char vec_sll (vector unsigned char, 23392 vector unsigned char); 23393 vector bool char vec_sll (vector bool char, vector unsigned int); 23394 vector bool char vec_sll (vector bool char, vector unsigned short); 23395 vector bool char vec_sll (vector bool char, vector unsigned char); 23396 23397 vector float vec_slo (vector float, vector signed char); 23398 vector float vec_slo (vector float, vector unsigned char); 23399 vector signed int vec_slo (vector signed int, vector signed char); 23400 vector signed int vec_slo (vector signed int, vector unsigned char); 23401 vector unsigned int vec_slo (vector unsigned int, vector signed char); 23402 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 23403 vector signed short vec_slo (vector signed short, vector signed char); 23404 vector signed short vec_slo (vector signed short, vector unsigned char); 23405 vector unsigned short vec_slo (vector unsigned short, 23406 vector signed char); 23407 vector unsigned short vec_slo (vector unsigned short, 23408 vector unsigned char); 23409 vector pixel vec_slo (vector pixel, vector signed char); 23410 vector pixel vec_slo (vector pixel, vector unsigned char); 23411 vector signed char vec_slo (vector signed char, vector signed char); 23412 vector signed char vec_slo (vector signed char, vector unsigned char); 23413 vector unsigned char vec_slo (vector unsigned char, vector signed char); 23414 vector unsigned char vec_slo (vector unsigned char, 23415 vector unsigned char); 23416 23417 vector signed char vec_splat (vector signed char, const int); 23418 vector unsigned char vec_splat (vector unsigned char, const int); 23419 vector bool char vec_splat (vector bool char, const int); 23420 vector signed short vec_splat (vector signed short, const int); 23421 vector unsigned short vec_splat (vector unsigned short, const int); 23422 vector bool short vec_splat (vector bool short, const int); 23423 vector pixel vec_splat (vector pixel, const int); 23424 vector float vec_splat (vector float, const int); 23425 vector signed int vec_splat (vector signed int, const int); 23426 vector unsigned int vec_splat (vector unsigned int, const int); 23427 vector bool int vec_splat (vector bool int, const int); 23428 23429 vector float vec_vspltw (vector float, const int); 23430 vector signed int vec_vspltw (vector signed int, const int); 23431 vector unsigned int vec_vspltw (vector unsigned int, const int); 23432 vector bool int vec_vspltw (vector bool int, const int); 23433 23434 vector bool short vec_vsplth (vector bool short, const int); 23435 vector signed short vec_vsplth (vector signed short, const int); 23436 vector unsigned short vec_vsplth (vector unsigned short, const int); 23437 vector pixel vec_vsplth (vector pixel, const int); 23438 23439 vector signed char vec_vspltb (vector signed char, const int); 23440 vector unsigned char vec_vspltb (vector unsigned char, const int); 23441 vector bool char vec_vspltb (vector bool char, const int); 23442 23443 vector signed char vec_splat_s8 (const int); 23444 23445 vector signed short vec_splat_s16 (const int); 23446 23447 vector signed int vec_splat_s32 (const int); 23448 23449 vector unsigned char vec_splat_u8 (const int); 23450 23451 vector unsigned short vec_splat_u16 (const int); 23452 23453 vector unsigned int vec_splat_u32 (const int); 23454 23455 vector signed char vec_sr (vector signed char, vector unsigned char); 23456 vector unsigned char vec_sr (vector unsigned char, 23457 vector unsigned char); 23458 vector signed short vec_sr (vector signed short, 23459 vector unsigned short); 23460 vector unsigned short vec_sr (vector unsigned short, 23461 vector unsigned short); 23462 vector signed int vec_sr (vector signed int, vector unsigned int); 23463 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 23464 23465 vector signed int vec_vsrw (vector signed int, vector unsigned int); 23466 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 23467 23468 vector signed short vec_vsrh (vector signed short, 23469 vector unsigned short); 23470 vector unsigned short vec_vsrh (vector unsigned short, 23471 vector unsigned short); 23472 23473 vector signed char vec_vsrb (vector signed char, vector unsigned char); 23474 vector unsigned char vec_vsrb (vector unsigned char, 23475 vector unsigned char); 23476 23477 vector signed char vec_sra (vector signed char, vector unsigned char); 23478 vector unsigned char vec_sra (vector unsigned char, 23479 vector unsigned char); 23480 vector signed short vec_sra (vector signed short, 23481 vector unsigned short); 23482 vector unsigned short vec_sra (vector unsigned short, 23483 vector unsigned short); 23484 vector signed int vec_sra (vector signed int, vector unsigned int); 23485 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 23486 23487 vector signed int vec_vsraw (vector signed int, vector unsigned int); 23488 vector unsigned int vec_vsraw (vector unsigned int, 23489 vector unsigned int); 23490 23491 vector signed short vec_vsrah (vector signed short, 23492 vector unsigned short); 23493 vector unsigned short vec_vsrah (vector unsigned short, 23494 vector unsigned short); 23495 23496 vector signed char vec_vsrab (vector signed char, vector unsigned char); 23497 vector unsigned char vec_vsrab (vector unsigned char, 23498 vector unsigned char); 23499 23500 vector signed int vec_srl (vector signed int, vector unsigned int); 23501 vector signed int vec_srl (vector signed int, vector unsigned short); 23502 vector signed int vec_srl (vector signed int, vector unsigned char); 23503 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 23504 vector unsigned int vec_srl (vector unsigned int, 23505 vector unsigned short); 23506 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 23507 vector bool int vec_srl (vector bool int, vector unsigned int); 23508 vector bool int vec_srl (vector bool int, vector unsigned short); 23509 vector bool int vec_srl (vector bool int, vector unsigned char); 23510 vector signed short vec_srl (vector signed short, vector unsigned int); 23511 vector signed short vec_srl (vector signed short, 23512 vector unsigned short); 23513 vector signed short vec_srl (vector signed short, vector unsigned char); 23514 vector unsigned short vec_srl (vector unsigned short, 23515 vector unsigned int); 23516 vector unsigned short vec_srl (vector unsigned short, 23517 vector unsigned short); 23518 vector unsigned short vec_srl (vector unsigned short, 23519 vector unsigned char); 23520 vector bool short vec_srl (vector bool short, vector unsigned int); 23521 vector bool short vec_srl (vector bool short, vector unsigned short); 23522 vector bool short vec_srl (vector bool short, vector unsigned char); 23523 vector pixel vec_srl (vector pixel, vector unsigned int); 23524 vector pixel vec_srl (vector pixel, vector unsigned short); 23525 vector pixel vec_srl (vector pixel, vector unsigned char); 23526 vector signed char vec_srl (vector signed char, vector unsigned int); 23527 vector signed char vec_srl (vector signed char, vector unsigned short); 23528 vector signed char vec_srl (vector signed char, vector unsigned char); 23529 vector unsigned char vec_srl (vector unsigned char, 23530 vector unsigned int); 23531 vector unsigned char vec_srl (vector unsigned char, 23532 vector unsigned short); 23533 vector unsigned char vec_srl (vector unsigned char, 23534 vector unsigned char); 23535 vector bool char vec_srl (vector bool char, vector unsigned int); 23536 vector bool char vec_srl (vector bool char, vector unsigned short); 23537 vector bool char vec_srl (vector bool char, vector unsigned char); 23538 23539 vector float vec_sro (vector float, vector signed char); 23540 vector float vec_sro (vector float, vector unsigned char); 23541 vector signed int vec_sro (vector signed int, vector signed char); 23542 vector signed int vec_sro (vector signed int, vector unsigned char); 23543 vector unsigned int vec_sro (vector unsigned int, vector signed char); 23544 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 23545 vector signed short vec_sro (vector signed short, vector signed char); 23546 vector signed short vec_sro (vector signed short, vector unsigned char); 23547 vector unsigned short vec_sro (vector unsigned short, 23548 vector signed char); 23549 vector unsigned short vec_sro (vector unsigned short, 23550 vector unsigned char); 23551 vector pixel vec_sro (vector pixel, vector signed char); 23552 vector pixel vec_sro (vector pixel, vector unsigned char); 23553 vector signed char vec_sro (vector signed char, vector signed char); 23554 vector signed char vec_sro (vector signed char, vector unsigned char); 23555 vector unsigned char vec_sro (vector unsigned char, vector signed char); 23556 vector unsigned char vec_sro (vector unsigned char, 23557 vector unsigned char); 23558 23559 void vec_st (vector float, int, vector float *); 23560 void vec_st (vector float, int, float *); 23561 void vec_st (vector signed int, int, vector signed int *); 23562 void vec_st (vector signed int, int, int *); 23563 void vec_st (vector unsigned int, int, vector unsigned int *); 23564 void vec_st (vector unsigned int, int, unsigned int *); 23565 void vec_st (vector bool int, int, vector bool int *); 23566 void vec_st (vector bool int, int, unsigned int *); 23567 void vec_st (vector bool int, int, int *); 23568 void vec_st (vector signed short, int, vector signed short *); 23569 void vec_st (vector signed short, int, short *); 23570 void vec_st (vector unsigned short, int, vector unsigned short *); 23571 void vec_st (vector unsigned short, int, unsigned short *); 23572 void vec_st (vector bool short, int, vector bool short *); 23573 void vec_st (vector bool short, int, unsigned short *); 23574 void vec_st (vector pixel, int, vector pixel *); 23575 void vec_st (vector pixel, int, unsigned short *); 23576 void vec_st (vector pixel, int, short *); 23577 void vec_st (vector bool short, int, short *); 23578 void vec_st (vector signed char, int, vector signed char *); 23579 void vec_st (vector signed char, int, signed char *); 23580 void vec_st (vector unsigned char, int, vector unsigned char *); 23581 void vec_st (vector unsigned char, int, unsigned char *); 23582 void vec_st (vector bool char, int, vector bool char *); 23583 void vec_st (vector bool char, int, unsigned char *); 23584 void vec_st (vector bool char, int, signed char *); 23585 23586 void vec_ste (vector signed char, int, signed char *); 23587 void vec_ste (vector unsigned char, int, unsigned char *); 23588 void vec_ste (vector bool char, int, signed char *); 23589 void vec_ste (vector bool char, int, unsigned char *); 23590 void vec_ste (vector signed short, int, short *); 23591 void vec_ste (vector unsigned short, int, unsigned short *); 23592 void vec_ste (vector bool short, int, short *); 23593 void vec_ste (vector bool short, int, unsigned short *); 23594 void vec_ste (vector pixel, int, short *); 23595 void vec_ste (vector pixel, int, unsigned short *); 23596 void vec_ste (vector float, int, float *); 23597 void vec_ste (vector signed int, int, int *); 23598 void vec_ste (vector unsigned int, int, unsigned int *); 23599 void vec_ste (vector bool int, int, int *); 23600 void vec_ste (vector bool int, int, unsigned int *); 23601 23602 void vec_stvewx (vector float, int, float *); 23603 void vec_stvewx (vector signed int, int, int *); 23604 void vec_stvewx (vector unsigned int, int, unsigned int *); 23605 void vec_stvewx (vector bool int, int, int *); 23606 void vec_stvewx (vector bool int, int, unsigned int *); 23607 23608 void vec_stvehx (vector signed short, int, short *); 23609 void vec_stvehx (vector unsigned short, int, unsigned short *); 23610 void vec_stvehx (vector bool short, int, short *); 23611 void vec_stvehx (vector bool short, int, unsigned short *); 23612 void vec_stvehx (vector pixel, int, short *); 23613 void vec_stvehx (vector pixel, int, unsigned short *); 23614 23615 void vec_stvebx (vector signed char, int, signed char *); 23616 void vec_stvebx (vector unsigned char, int, unsigned char *); 23617 void vec_stvebx (vector bool char, int, signed char *); 23618 void vec_stvebx (vector bool char, int, unsigned char *); 23619 23620 void vec_stl (vector float, int, vector float *); 23621 void vec_stl (vector float, int, float *); 23622 void vec_stl (vector signed int, int, vector signed int *); 23623 void vec_stl (vector signed int, int, int *); 23624 void vec_stl (vector unsigned int, int, vector unsigned int *); 23625 void vec_stl (vector unsigned int, int, unsigned int *); 23626 void vec_stl (vector bool int, int, vector bool int *); 23627 void vec_stl (vector bool int, int, unsigned int *); 23628 void vec_stl (vector bool int, int, int *); 23629 void vec_stl (vector signed short, int, vector signed short *); 23630 void vec_stl (vector signed short, int, short *); 23631 void vec_stl (vector unsigned short, int, vector unsigned short *); 23632 void vec_stl (vector unsigned short, int, unsigned short *); 23633 void vec_stl (vector bool short, int, vector bool short *); 23634 void vec_stl (vector bool short, int, unsigned short *); 23635 void vec_stl (vector bool short, int, short *); 23636 void vec_stl (vector pixel, int, vector pixel *); 23637 void vec_stl (vector pixel, int, unsigned short *); 23638 void vec_stl (vector pixel, int, short *); 23639 void vec_stl (vector signed char, int, vector signed char *); 23640 void vec_stl (vector signed char, int, signed char *); 23641 void vec_stl (vector unsigned char, int, vector unsigned char *); 23642 void vec_stl (vector unsigned char, int, unsigned char *); 23643 void vec_stl (vector bool char, int, vector bool char *); 23644 void vec_stl (vector bool char, int, unsigned char *); 23645 void vec_stl (vector bool char, int, signed char *); 23646 23647 vector signed char vec_sub (vector bool char, vector signed char); 23648 vector signed char vec_sub (vector signed char, vector bool char); 23649 vector signed char vec_sub (vector signed char, vector signed char); 23650 vector unsigned char vec_sub (vector bool char, vector unsigned char); 23651 vector unsigned char vec_sub (vector unsigned char, vector bool char); 23652 vector unsigned char vec_sub (vector unsigned char, 23653 vector unsigned char); 23654 vector signed short vec_sub (vector bool short, vector signed short); 23655 vector signed short vec_sub (vector signed short, vector bool short); 23656 vector signed short vec_sub (vector signed short, vector signed short); 23657 vector unsigned short vec_sub (vector bool short, 23658 vector unsigned short); 23659 vector unsigned short vec_sub (vector unsigned short, 23660 vector bool short); 23661 vector unsigned short vec_sub (vector unsigned short, 23662 vector unsigned short); 23663 vector signed int vec_sub (vector bool int, vector signed int); 23664 vector signed int vec_sub (vector signed int, vector bool int); 23665 vector signed int vec_sub (vector signed int, vector signed int); 23666 vector unsigned int vec_sub (vector bool int, vector unsigned int); 23667 vector unsigned int vec_sub (vector unsigned int, vector bool int); 23668 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 23669 vector float vec_sub (vector float, vector float); 23670 23671 vector float vec_vsubfp (vector float, vector float); 23672 23673 vector signed int vec_vsubuwm (vector bool int, vector signed int); 23674 vector signed int vec_vsubuwm (vector signed int, vector bool int); 23675 vector signed int vec_vsubuwm (vector signed int, vector signed int); 23676 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 23677 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 23678 vector unsigned int vec_vsubuwm (vector unsigned int, 23679 vector unsigned int); 23680 23681 vector signed short vec_vsubuhm (vector bool short, 23682 vector signed short); 23683 vector signed short vec_vsubuhm (vector signed short, 23684 vector bool short); 23685 vector signed short vec_vsubuhm (vector signed short, 23686 vector signed short); 23687 vector unsigned short vec_vsubuhm (vector bool short, 23688 vector unsigned short); 23689 vector unsigned short vec_vsubuhm (vector unsigned short, 23690 vector bool short); 23691 vector unsigned short vec_vsubuhm (vector unsigned short, 23692 vector unsigned short); 23693 23694 vector signed char vec_vsububm (vector bool char, vector signed char); 23695 vector signed char vec_vsububm (vector signed char, vector bool char); 23696 vector signed char vec_vsububm (vector signed char, vector signed char); 23697 vector unsigned char vec_vsububm (vector bool char, 23698 vector unsigned char); 23699 vector unsigned char vec_vsububm (vector unsigned char, 23700 vector bool char); 23701 vector unsigned char vec_vsububm (vector unsigned char, 23702 vector unsigned char); 23703 23704 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 23705 23706 vector unsigned char vec_subs (vector bool char, vector unsigned char); 23707 vector unsigned char vec_subs (vector unsigned char, vector bool char); 23708 vector unsigned char vec_subs (vector unsigned char, 23709 vector unsigned char); 23710 vector signed char vec_subs (vector bool char, vector signed char); 23711 vector signed char vec_subs (vector signed char, vector bool char); 23712 vector signed char vec_subs (vector signed char, vector signed char); 23713 vector unsigned short vec_subs (vector bool short, 23714 vector unsigned short); 23715 vector unsigned short vec_subs (vector unsigned short, 23716 vector bool short); 23717 vector unsigned short vec_subs (vector unsigned short, 23718 vector unsigned short); 23719 vector signed short vec_subs (vector bool short, vector signed short); 23720 vector signed short vec_subs (vector signed short, vector bool short); 23721 vector signed short vec_subs (vector signed short, vector signed short); 23722 vector unsigned int vec_subs (vector bool int, vector unsigned int); 23723 vector unsigned int vec_subs (vector unsigned int, vector bool int); 23724 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 23725 vector signed int vec_subs (vector bool int, vector signed int); 23726 vector signed int vec_subs (vector signed int, vector bool int); 23727 vector signed int vec_subs (vector signed int, vector signed int); 23728 23729 vector signed int vec_vsubsws (vector bool int, vector signed int); 23730 vector signed int vec_vsubsws (vector signed int, vector bool int); 23731 vector signed int vec_vsubsws (vector signed int, vector signed int); 23732 23733 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 23734 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 23735 vector unsigned int vec_vsubuws (vector unsigned int, 23736 vector unsigned int); 23737 23738 vector signed short vec_vsubshs (vector bool short, 23739 vector signed short); 23740 vector signed short vec_vsubshs (vector signed short, 23741 vector bool short); 23742 vector signed short vec_vsubshs (vector signed short, 23743 vector signed short); 23744 23745 vector unsigned short vec_vsubuhs (vector bool short, 23746 vector unsigned short); 23747 vector unsigned short vec_vsubuhs (vector unsigned short, 23748 vector bool short); 23749 vector unsigned short vec_vsubuhs (vector unsigned short, 23750 vector unsigned short); 23751 23752 vector signed char vec_vsubsbs (vector bool char, vector signed char); 23753 vector signed char vec_vsubsbs (vector signed char, vector bool char); 23754 vector signed char vec_vsubsbs (vector signed char, vector signed char); 23755 23756 vector unsigned char vec_vsububs (vector bool char, 23757 vector unsigned char); 23758 vector unsigned char vec_vsububs (vector unsigned char, 23759 vector bool char); 23760 vector unsigned char vec_vsububs (vector unsigned char, 23761 vector unsigned char); 23762 23763 vector unsigned int vec_sum4s (vector unsigned char, 23764 vector unsigned int); 23765 vector signed int vec_sum4s (vector signed char, vector signed int); 23766 vector signed int vec_sum4s (vector signed short, vector signed int); 23767 23768 vector signed int vec_vsum4shs (vector signed short, vector signed int); 23769 23770 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 23771 23772 vector unsigned int vec_vsum4ubs (vector unsigned char, 23773 vector unsigned int); 23774 23775 vector signed int vec_sum2s (vector signed int, vector signed int); 23776 23777 vector signed int vec_sums (vector signed int, vector signed int); 23778 23779 vector float vec_trunc (vector float); 23780 23781 vector signed short vec_unpackh (vector signed char); 23782 vector bool short vec_unpackh (vector bool char); 23783 vector signed int vec_unpackh (vector signed short); 23784 vector bool int vec_unpackh (vector bool short); 23785 vector unsigned int vec_unpackh (vector pixel); 23786 23787 vector bool int vec_vupkhsh (vector bool short); 23788 vector signed int vec_vupkhsh (vector signed short); 23789 23790 vector unsigned int vec_vupkhpx (vector pixel); 23791 23792 vector bool short vec_vupkhsb (vector bool char); 23793 vector signed short vec_vupkhsb (vector signed char); 23794 23795 vector signed short vec_unpackl (vector signed char); 23796 vector bool short vec_unpackl (vector bool char); 23797 vector unsigned int vec_unpackl (vector pixel); 23798 vector signed int vec_unpackl (vector signed short); 23799 vector bool int vec_unpackl (vector bool short); 23800 23801 vector unsigned int vec_vupklpx (vector pixel); 23802 23803 vector bool int vec_vupklsh (vector bool short); 23804 vector signed int vec_vupklsh (vector signed short); 23805 23806 vector bool short vec_vupklsb (vector bool char); 23807 vector signed short vec_vupklsb (vector signed char); 23808 23809 vector float vec_xor (vector float, vector float); 23810 vector float vec_xor (vector float, vector bool int); 23811 vector float vec_xor (vector bool int, vector float); 23812 vector bool int vec_xor (vector bool int, vector bool int); 23813 vector signed int vec_xor (vector bool int, vector signed int); 23814 vector signed int vec_xor (vector signed int, vector bool int); 23815 vector signed int vec_xor (vector signed int, vector signed int); 23816 vector unsigned int vec_xor (vector bool int, vector unsigned int); 23817 vector unsigned int vec_xor (vector unsigned int, vector bool int); 23818 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 23819 vector bool short vec_xor (vector bool short, vector bool short); 23820 vector signed short vec_xor (vector bool short, vector signed short); 23821 vector signed short vec_xor (vector signed short, vector bool short); 23822 vector signed short vec_xor (vector signed short, vector signed short); 23823 vector unsigned short vec_xor (vector bool short, 23824 vector unsigned short); 23825 vector unsigned short vec_xor (vector unsigned short, 23826 vector bool short); 23827 vector unsigned short vec_xor (vector unsigned short, 23828 vector unsigned short); 23829 vector signed char vec_xor (vector bool char, vector signed char); 23830 vector bool char vec_xor (vector bool char, vector bool char); 23831 vector signed char vec_xor (vector signed char, vector bool char); 23832 vector signed char vec_xor (vector signed char, vector signed char); 23833 vector unsigned char vec_xor (vector bool char, vector unsigned char); 23834 vector unsigned char vec_xor (vector unsigned char, vector bool char); 23835 vector unsigned char vec_xor (vector unsigned char, 23836 vector unsigned char); 23837 23838 int vec_all_eq (vector signed char, vector bool char); 23839 int vec_all_eq (vector signed char, vector signed char); 23840 int vec_all_eq (vector unsigned char, vector bool char); 23841 int vec_all_eq (vector unsigned char, vector unsigned char); 23842 int vec_all_eq (vector bool char, vector bool char); 23843 int vec_all_eq (vector bool char, vector unsigned char); 23844 int vec_all_eq (vector bool char, vector signed char); 23845 int vec_all_eq (vector signed short, vector bool short); 23846 int vec_all_eq (vector signed short, vector signed short); 23847 int vec_all_eq (vector unsigned short, vector bool short); 23848 int vec_all_eq (vector unsigned short, vector unsigned short); 23849 int vec_all_eq (vector bool short, vector bool short); 23850 int vec_all_eq (vector bool short, vector unsigned short); 23851 int vec_all_eq (vector bool short, vector signed short); 23852 int vec_all_eq (vector pixel, vector pixel); 23853 int vec_all_eq (vector signed int, vector bool int); 23854 int vec_all_eq (vector signed int, vector signed int); 23855 int vec_all_eq (vector unsigned int, vector bool int); 23856 int vec_all_eq (vector unsigned int, vector unsigned int); 23857 int vec_all_eq (vector bool int, vector bool int); 23858 int vec_all_eq (vector bool int, vector unsigned int); 23859 int vec_all_eq (vector bool int, vector signed int); 23860 int vec_all_eq (vector float, vector float); 23861 23862 int vec_all_ge (vector bool char, vector unsigned char); 23863 int vec_all_ge (vector unsigned char, vector bool char); 23864 int vec_all_ge (vector unsigned char, vector unsigned char); 23865 int vec_all_ge (vector bool char, vector signed char); 23866 int vec_all_ge (vector signed char, vector bool char); 23867 int vec_all_ge (vector signed char, vector signed char); 23868 int vec_all_ge (vector bool short, vector unsigned short); 23869 int vec_all_ge (vector unsigned short, vector bool short); 23870 int vec_all_ge (vector unsigned short, vector unsigned short); 23871 int vec_all_ge (vector signed short, vector signed short); 23872 int vec_all_ge (vector bool short, vector signed short); 23873 int vec_all_ge (vector signed short, vector bool short); 23874 int vec_all_ge (vector bool int, vector unsigned int); 23875 int vec_all_ge (vector unsigned int, vector bool int); 23876 int vec_all_ge (vector unsigned int, vector unsigned int); 23877 int vec_all_ge (vector bool int, vector signed int); 23878 int vec_all_ge (vector signed int, vector bool int); 23879 int vec_all_ge (vector signed int, vector signed int); 23880 int vec_all_ge (vector float, vector float); 23881 23882 int vec_all_gt (vector bool char, vector unsigned char); 23883 int vec_all_gt (vector unsigned char, vector bool char); 23884 int vec_all_gt (vector unsigned char, vector unsigned char); 23885 int vec_all_gt (vector bool char, vector signed char); 23886 int vec_all_gt (vector signed char, vector bool char); 23887 int vec_all_gt (vector signed char, vector signed char); 23888 int vec_all_gt (vector bool short, vector unsigned short); 23889 int vec_all_gt (vector unsigned short, vector bool short); 23890 int vec_all_gt (vector unsigned short, vector unsigned short); 23891 int vec_all_gt (vector bool short, vector signed short); 23892 int vec_all_gt (vector signed short, vector bool short); 23893 int vec_all_gt (vector signed short, vector signed short); 23894 int vec_all_gt (vector bool int, vector unsigned int); 23895 int vec_all_gt (vector unsigned int, vector bool int); 23896 int vec_all_gt (vector unsigned int, vector unsigned int); 23897 int vec_all_gt (vector bool int, vector signed int); 23898 int vec_all_gt (vector signed int, vector bool int); 23899 int vec_all_gt (vector signed int, vector signed int); 23900 int vec_all_gt (vector float, vector float); 23901 23902 int vec_all_in (vector float, vector float); 23903 23904 int vec_all_le (vector bool char, vector unsigned char); 23905 int vec_all_le (vector unsigned char, vector bool char); 23906 int vec_all_le (vector unsigned char, vector unsigned char); 23907 int vec_all_le (vector bool char, vector signed char); 23908 int vec_all_le (vector signed char, vector bool char); 23909 int vec_all_le (vector signed char, vector signed char); 23910 int vec_all_le (vector bool short, vector unsigned short); 23911 int vec_all_le (vector unsigned short, vector bool short); 23912 int vec_all_le (vector unsigned short, vector unsigned short); 23913 int vec_all_le (vector bool short, vector signed short); 23914 int vec_all_le (vector signed short, vector bool short); 23915 int vec_all_le (vector signed short, vector signed short); 23916 int vec_all_le (vector bool int, vector unsigned int); 23917 int vec_all_le (vector unsigned int, vector bool int); 23918 int vec_all_le (vector unsigned int, vector unsigned int); 23919 int vec_all_le (vector bool int, vector signed int); 23920 int vec_all_le (vector signed int, vector bool int); 23921 int vec_all_le (vector signed int, vector signed int); 23922 int vec_all_le (vector float, vector float); 23923 23924 int vec_all_lt (vector bool char, vector unsigned char); 23925 int vec_all_lt (vector unsigned char, vector bool char); 23926 int vec_all_lt (vector unsigned char, vector unsigned char); 23927 int vec_all_lt (vector bool char, vector signed char); 23928 int vec_all_lt (vector signed char, vector bool char); 23929 int vec_all_lt (vector signed char, vector signed char); 23930 int vec_all_lt (vector bool short, vector unsigned short); 23931 int vec_all_lt (vector unsigned short, vector bool short); 23932 int vec_all_lt (vector unsigned short, vector unsigned short); 23933 int vec_all_lt (vector bool short, vector signed short); 23934 int vec_all_lt (vector signed short, vector bool short); 23935 int vec_all_lt (vector signed short, vector signed short); 23936 int vec_all_lt (vector bool int, vector unsigned int); 23937 int vec_all_lt (vector unsigned int, vector bool int); 23938 int vec_all_lt (vector unsigned int, vector unsigned int); 23939 int vec_all_lt (vector bool int, vector signed int); 23940 int vec_all_lt (vector signed int, vector bool int); 23941 int vec_all_lt (vector signed int, vector signed int); 23942 int vec_all_lt (vector float, vector float); 23943 23944 int vec_all_nan (vector float); 23945 23946 int vec_all_ne (vector signed char, vector bool char); 23947 int vec_all_ne (vector signed char, vector signed char); 23948 int vec_all_ne (vector unsigned char, vector bool char); 23949 int vec_all_ne (vector unsigned char, vector unsigned char); 23950 int vec_all_ne (vector bool char, vector bool char); 23951 int vec_all_ne (vector bool char, vector unsigned char); 23952 int vec_all_ne (vector bool char, vector signed char); 23953 int vec_all_ne (vector signed short, vector bool short); 23954 int vec_all_ne (vector signed short, vector signed short); 23955 int vec_all_ne (vector unsigned short, vector bool short); 23956 int vec_all_ne (vector unsigned short, vector unsigned short); 23957 int vec_all_ne (vector bool short, vector bool short); 23958 int vec_all_ne (vector bool short, vector unsigned short); 23959 int vec_all_ne (vector bool short, vector signed short); 23960 int vec_all_ne (vector pixel, vector pixel); 23961 int vec_all_ne (vector signed int, vector bool int); 23962 int vec_all_ne (vector signed int, vector signed int); 23963 int vec_all_ne (vector unsigned int, vector bool int); 23964 int vec_all_ne (vector unsigned int, vector unsigned int); 23965 int vec_all_ne (vector bool int, vector bool int); 23966 int vec_all_ne (vector bool int, vector unsigned int); 23967 int vec_all_ne (vector bool int, vector signed int); 23968 int vec_all_ne (vector float, vector float); 23969 23970 int vec_all_nge (vector float, vector float); 23971 23972 int vec_all_ngt (vector float, vector float); 23973 23974 int vec_all_nle (vector float, vector float); 23975 23976 int vec_all_nlt (vector float, vector float); 23977 23978 int vec_all_numeric (vector float); 23979 23980 int vec_any_eq (vector signed char, vector bool char); 23981 int vec_any_eq (vector signed char, vector signed char); 23982 int vec_any_eq (vector unsigned char, vector bool char); 23983 int vec_any_eq (vector unsigned char, vector unsigned char); 23984 int vec_any_eq (vector bool char, vector bool char); 23985 int vec_any_eq (vector bool char, vector unsigned char); 23986 int vec_any_eq (vector bool char, vector signed char); 23987 int vec_any_eq (vector signed short, vector bool short); 23988 int vec_any_eq (vector signed short, vector signed short); 23989 int vec_any_eq (vector unsigned short, vector bool short); 23990 int vec_any_eq (vector unsigned short, vector unsigned short); 23991 int vec_any_eq (vector bool short, vector bool short); 23992 int vec_any_eq (vector bool short, vector unsigned short); 23993 int vec_any_eq (vector bool short, vector signed short); 23994 int vec_any_eq (vector pixel, vector pixel); 23995 int vec_any_eq (vector signed int, vector bool int); 23996 int vec_any_eq (vector signed int, vector signed int); 23997 int vec_any_eq (vector unsigned int, vector bool int); 23998 int vec_any_eq (vector unsigned int, vector unsigned int); 23999 int vec_any_eq (vector bool int, vector bool int); 24000 int vec_any_eq (vector bool int, vector unsigned int); 24001 int vec_any_eq (vector bool int, vector signed int); 24002 int vec_any_eq (vector float, vector float); 24003 24004 int vec_any_ge (vector signed char, vector bool char); 24005 int vec_any_ge (vector unsigned char, vector bool char); 24006 int vec_any_ge (vector unsigned char, vector unsigned char); 24007 int vec_any_ge (vector signed char, vector signed char); 24008 int vec_any_ge (vector bool char, vector unsigned char); 24009 int vec_any_ge (vector bool char, vector signed char); 24010 int vec_any_ge (vector unsigned short, vector bool short); 24011 int vec_any_ge (vector unsigned short, vector unsigned short); 24012 int vec_any_ge (vector signed short, vector signed short); 24013 int vec_any_ge (vector signed short, vector bool short); 24014 int vec_any_ge (vector bool short, vector unsigned short); 24015 int vec_any_ge (vector bool short, vector signed short); 24016 int vec_any_ge (vector signed int, vector bool int); 24017 int vec_any_ge (vector unsigned int, vector bool int); 24018 int vec_any_ge (vector unsigned int, vector unsigned int); 24019 int vec_any_ge (vector signed int, vector signed int); 24020 int vec_any_ge (vector bool int, vector unsigned int); 24021 int vec_any_ge (vector bool int, vector signed int); 24022 int vec_any_ge (vector float, vector float); 24023 24024 int vec_any_gt (vector bool char, vector unsigned char); 24025 int vec_any_gt (vector unsigned char, vector bool char); 24026 int vec_any_gt (vector unsigned char, vector unsigned char); 24027 int vec_any_gt (vector bool char, vector signed char); 24028 int vec_any_gt (vector signed char, vector bool char); 24029 int vec_any_gt (vector signed char, vector signed char); 24030 int vec_any_gt (vector bool short, vector unsigned short); 24031 int vec_any_gt (vector unsigned short, vector bool short); 24032 int vec_any_gt (vector unsigned short, vector unsigned short); 24033 int vec_any_gt (vector bool short, vector signed short); 24034 int vec_any_gt (vector signed short, vector bool short); 24035 int vec_any_gt (vector signed short, vector signed short); 24036 int vec_any_gt (vector bool int, vector unsigned int); 24037 int vec_any_gt (vector unsigned int, vector bool int); 24038 int vec_any_gt (vector unsigned int, vector unsigned int); 24039 int vec_any_gt (vector bool int, vector signed int); 24040 int vec_any_gt (vector signed int, vector bool int); 24041 int vec_any_gt (vector signed int, vector signed int); 24042 int vec_any_gt (vector float, vector float); 24043 24044 int vec_any_le (vector bool char, vector unsigned char); 24045 int vec_any_le (vector unsigned char, vector bool char); 24046 int vec_any_le (vector unsigned char, vector unsigned char); 24047 int vec_any_le (vector bool char, vector signed char); 24048 int vec_any_le (vector signed char, vector bool char); 24049 int vec_any_le (vector signed char, vector signed char); 24050 int vec_any_le (vector bool short, vector unsigned short); 24051 int vec_any_le (vector unsigned short, vector bool short); 24052 int vec_any_le (vector unsigned short, vector unsigned short); 24053 int vec_any_le (vector bool short, vector signed short); 24054 int vec_any_le (vector signed short, vector bool short); 24055 int vec_any_le (vector signed short, vector signed short); 24056 int vec_any_le (vector bool int, vector unsigned int); 24057 int vec_any_le (vector unsigned int, vector bool int); 24058 int vec_any_le (vector unsigned int, vector unsigned int); 24059 int vec_any_le (vector bool int, vector signed int); 24060 int vec_any_le (vector signed int, vector bool int); 24061 int vec_any_le (vector signed int, vector signed int); 24062 int vec_any_le (vector float, vector float); 24063 24064 int vec_any_lt (vector bool char, vector unsigned char); 24065 int vec_any_lt (vector unsigned char, vector bool char); 24066 int vec_any_lt (vector unsigned char, vector unsigned char); 24067 int vec_any_lt (vector bool char, vector signed char); 24068 int vec_any_lt (vector signed char, vector bool char); 24069 int vec_any_lt (vector signed char, vector signed char); 24070 int vec_any_lt (vector bool short, vector unsigned short); 24071 int vec_any_lt (vector unsigned short, vector bool short); 24072 int vec_any_lt (vector unsigned short, vector unsigned short); 24073 int vec_any_lt (vector bool short, vector signed short); 24074 int vec_any_lt (vector signed short, vector bool short); 24075 int vec_any_lt (vector signed short, vector signed short); 24076 int vec_any_lt (vector bool int, vector unsigned int); 24077 int vec_any_lt (vector unsigned int, vector bool int); 24078 int vec_any_lt (vector unsigned int, vector unsigned int); 24079 int vec_any_lt (vector bool int, vector signed int); 24080 int vec_any_lt (vector signed int, vector bool int); 24081 int vec_any_lt (vector signed int, vector signed int); 24082 int vec_any_lt (vector float, vector float); 24083 24084 int vec_any_nan (vector float); 24085 24086 int vec_any_ne (vector signed char, vector bool char); 24087 int vec_any_ne (vector signed char, vector signed char); 24088 int vec_any_ne (vector unsigned char, vector bool char); 24089 int vec_any_ne (vector unsigned char, vector unsigned char); 24090 int vec_any_ne (vector bool char, vector bool char); 24091 int vec_any_ne (vector bool char, vector unsigned char); 24092 int vec_any_ne (vector bool char, vector signed char); 24093 int vec_any_ne (vector signed short, vector bool short); 24094 int vec_any_ne (vector signed short, vector signed short); 24095 int vec_any_ne (vector unsigned short, vector bool short); 24096 int vec_any_ne (vector unsigned short, vector unsigned short); 24097 int vec_any_ne (vector bool short, vector bool short); 24098 int vec_any_ne (vector bool short, vector unsigned short); 24099 int vec_any_ne (vector bool short, vector signed short); 24100 int vec_any_ne (vector pixel, vector pixel); 24101 int vec_any_ne (vector signed int, vector bool int); 24102 int vec_any_ne (vector signed int, vector signed int); 24103 int vec_any_ne (vector unsigned int, vector bool int); 24104 int vec_any_ne (vector unsigned int, vector unsigned int); 24105 int vec_any_ne (vector bool int, vector bool int); 24106 int vec_any_ne (vector bool int, vector unsigned int); 24107 int vec_any_ne (vector bool int, vector signed int); 24108 int vec_any_ne (vector float, vector float); 24109 24110 int vec_any_nge (vector float, vector float); 24111 24112 int vec_any_ngt (vector float, vector float); 24113 24114 int vec_any_nle (vector float, vector float); 24115 24116 int vec_any_nlt (vector float, vector float); 24117 24118 int vec_any_numeric (vector float); 24119 24120 int vec_any_out (vector float, vector float); 24121 24122 24123 File: gcc.info, Node: SPARC VIS Built-in Functions, Prev: PowerPC AltiVec Built-in Functions, Up: Target Builtins 24124 24125 5.48.9 SPARC VIS Built-in Functions 24126 ----------------------------------- 24127 24128 GCC supports SIMD operations on the SPARC using both the generic vector 24129 extensions (*note Vector Extensions::) as well as built-in functions for 24130 the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 24131 switch, the VIS extension is exposed as the following built-in 24132 functions: 24133 24134 typedef int v2si __attribute__ ((vector_size (8))); 24135 typedef short v4hi __attribute__ ((vector_size (8))); 24136 typedef short v2hi __attribute__ ((vector_size (4))); 24137 typedef char v8qi __attribute__ ((vector_size (8))); 24138 typedef char v4qi __attribute__ ((vector_size (4))); 24139 24140 void * __builtin_vis_alignaddr (void *, long); 24141 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 24142 v2si __builtin_vis_faligndatav2si (v2si, v2si); 24143 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 24144 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 24145 24146 v4hi __builtin_vis_fexpand (v4qi); 24147 24148 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 24149 v4hi __builtin_vis_fmul8x16au (v4qi, v4hi); 24150 v4hi __builtin_vis_fmul8x16al (v4qi, v4hi); 24151 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 24152 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 24153 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 24154 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 24155 24156 v4qi __builtin_vis_fpack16 (v4hi); 24157 v8qi __builtin_vis_fpack32 (v2si, v2si); 24158 v2hi __builtin_vis_fpackfix (v2si); 24159 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 24160 24161 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 24162 24163 24164 File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 24165 24166 5.49 Format Checks Specific to Particular Target Machines 24167 ========================================================= 24168 24169 For some target machines, GCC supports additional options to the format 24170 attribute (*note Declaring Attributes of Functions: Function 24171 Attributes.). 24172 24173 * Menu: 24174 24175 * Solaris Format Checks:: 24176 24177 24178 File: gcc.info, Node: Solaris Format Checks, Up: Target Format Checks 24179 24180 5.49.1 Solaris Format Checks 24181 ---------------------------- 24182 24183 Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 24184 `cmn_err' accepts a subset of the standard `printf' conversions, and 24185 the two-argument `%b' conversion for displaying bit-fields. See the 24186 Solaris man page for `cmn_err' for more information. 24187 24188 24189 File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 24190 24191 5.50 Pragmas Accepted by GCC 24192 ============================ 24193 24194 GCC supports several types of pragmas, primarily in order to compile 24195 code originally written for other compilers. Note that in general we 24196 do not recommend the use of pragmas; *Note Function Attributes::, for 24197 further explanation. 24198 24199 * Menu: 24200 24201 * ARM Pragmas:: 24202 * M32C Pragmas:: 24203 * RS/6000 and PowerPC Pragmas:: 24204 * Darwin Pragmas:: 24205 * Solaris Pragmas:: 24206 * Symbol-Renaming Pragmas:: 24207 * Structure-Packing Pragmas:: 24208 * Weak Pragmas:: 24209 * Diagnostic Pragmas:: 24210 * Visibility Pragmas:: 24211 24212 24213 File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 24214 24215 5.50.1 ARM Pragmas 24216 ------------------ 24217 24218 The ARM target defines pragmas for controlling the default addition of 24219 `long_call' and `short_call' attributes to functions. *Note Function 24220 Attributes::, for information about the effects of these attributes. 24221 24222 `long_calls' 24223 Set all subsequent functions to have the `long_call' attribute. 24224 24225 `no_long_calls' 24226 Set all subsequent functions to have the `short_call' attribute. 24227 24228 `long_calls_off' 24229 Do not affect the `long_call' or `short_call' attributes of 24230 subsequent functions. 24231 24232 24233 File: gcc.info, Node: M32C Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: ARM Pragmas, Up: Pragmas 24234 24235 5.50.2 M32C Pragmas 24236 ------------------- 24237 24238 `memregs NUMBER' 24239 Overrides the command line option `-memregs=' for the current 24240 file. Use with care! This pragma must be before any function in 24241 the file, and mixing different memregs values in different objects 24242 may make them incompatible. This pragma is useful when a 24243 performance-critical function uses a memreg for temporary values, 24244 as it may allow you to reduce the number of memregs used. 24245 24246 24247 24248 File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: M32C Pragmas, Up: Pragmas 24249 24250 5.50.3 RS/6000 and PowerPC Pragmas 24251 ---------------------------------- 24252 24253 The RS/6000 and PowerPC targets define one pragma for controlling 24254 whether or not the `longcall' attribute is added to function 24255 declarations by default. This pragma overrides the `-mlongcall' 24256 option, but not the `longcall' and `shortcall' attributes. *Note 24257 RS/6000 and PowerPC Options::, for more information about when long 24258 calls are and are not necessary. 24259 24260 `longcall (1)' 24261 Apply the `longcall' attribute to all subsequent function 24262 declarations. 24263 24264 `longcall (0)' 24265 Do not apply the `longcall' attribute to subsequent function 24266 declarations. 24267 24268 24269 File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 24270 24271 5.50.4 Darwin Pragmas 24272 --------------------- 24273 24274 The following pragmas are available for all architectures running the 24275 Darwin operating system. These are useful for compatibility with other 24276 Mac OS compilers. 24277 24278 `mark TOKENS...' 24279 This pragma is accepted, but has no effect. 24280 24281 `options align=ALIGNMENT' 24282 This pragma sets the alignment of fields in structures. The 24283 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 24284 `power', to emulate PowerPC alignment. Uses of this pragma nest 24285 properly; to restore the previous setting, use `reset' for the 24286 ALIGNMENT. 24287 24288 `segment TOKENS...' 24289 This pragma is accepted, but has no effect. 24290 24291 `unused (VAR [, VAR]...)' 24292 This pragma declares variables to be possibly unused. GCC will not 24293 produce warnings for the listed variables. The effect is similar 24294 to that of the `unused' attribute, except that this pragma may 24295 appear anywhere within the variables' scopes. 24296 24297 24298 File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 24299 24300 5.50.5 Solaris Pragmas 24301 ---------------------- 24302 24303 The Solaris target supports `#pragma redefine_extname' (*note 24304 Symbol-Renaming Pragmas::). It also supports additional `#pragma' 24305 directives for compatibility with the system compiler. 24306 24307 `align ALIGNMENT (VARIABLE [, VARIABLE]...)' 24308 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 24309 This is the same as GCC's `aligned' attribute *note Variable 24310 Attributes::). Macro expansion occurs on the arguments to this 24311 pragma when compiling C and Objective-C. It does not currently 24312 occur when compiling C++, but this is a bug which may be fixed in 24313 a future release. 24314 24315 `fini (FUNCTION [, FUNCTION]...)' 24316 This pragma causes each listed FUNCTION to be called after main, 24317 or during shared module unloading, by adding a call to the `.fini' 24318 section. 24319 24320 `init (FUNCTION [, FUNCTION]...)' 24321 This pragma causes each listed FUNCTION to be called during 24322 initialization (before `main') or during shared module loading, by 24323 adding a call to the `.init' section. 24324 24325 24326 24327 File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 24328 24329 5.50.6 Symbol-Renaming Pragmas 24330 ------------------------------ 24331 24332 For compatibility with the Solaris and Tru64 UNIX system headers, GCC 24333 supports two `#pragma' directives which change the name used in 24334 assembly for a given declaration. These pragmas are only available on 24335 platforms whose system headers need them. To get this effect on all 24336 platforms supported by GCC, use the asm labels extension (*note Asm 24337 Labels::). 24338 24339 `redefine_extname OLDNAME NEWNAME' 24340 This pragma gives the C function OLDNAME the assembly symbol 24341 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will 24342 be defined if this pragma is available (currently only on Solaris). 24343 24344 `extern_prefix STRING' 24345 This pragma causes all subsequent external function and variable 24346 declarations to have STRING prepended to their assembly symbols. 24347 This effect may be terminated with another `extern_prefix' pragma 24348 whose argument is an empty string. The preprocessor macro 24349 `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is 24350 available (currently only on Tru64 UNIX). 24351 24352 These pragmas and the asm labels extension interact in a complicated 24353 manner. Here are some corner cases you may want to be aware of. 24354 24355 1. Both pragmas silently apply only to declarations with external 24356 linkage. Asm labels do not have this restriction. 24357 24358 2. In C++, both pragmas silently apply only to declarations with "C" 24359 linkage. Again, asm labels do not have this restriction. 24360 24361 3. If any of the three ways of changing the assembly name of a 24362 declaration is applied to a declaration whose assembly name has 24363 already been determined (either by a previous use of one of these 24364 features, or because the compiler needed the assembly name in 24365 order to generate code), and the new name is different, a warning 24366 issues and the name does not change. 24367 24368 4. The OLDNAME used by `#pragma redefine_extname' is always the 24369 C-language name. 24370 24371 5. If `#pragma extern_prefix' is in effect, and a declaration occurs 24372 with an asm label attached, the prefix is silently ignored for 24373 that declaration. 24374 24375 6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to 24376 the same declaration, whichever triggered first wins, and a 24377 warning issues if they contradict each other. (We would like to 24378 have `#pragma redefine_extname' always win, for consistency with 24379 asm labels, but if `#pragma extern_prefix' triggers first we have 24380 no way of knowing that that happened.) 24381 24382 24383 File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 24384 24385 5.50.7 Structure-Packing Pragmas 24386 -------------------------------- 24387 24388 For compatibility with Win32, GCC supports a set of `#pragma' 24389 directives which change the maximum alignment of members of structures 24390 (other than zero-width bitfields), unions, and classes subsequently 24391 defined. The N value below always is required to be a small power of 24392 two and specifies the new alignment in bytes. 24393 24394 1. `#pragma pack(N)' simply sets the new alignment. 24395 24396 2. `#pragma pack()' sets the alignment to the one that was in effect 24397 when compilation started (see also command line option 24398 `-fpack-struct[=<n>]' *note Code Gen Options::). 24399 24400 3. `#pragma pack(push[,N])' pushes the current alignment setting on 24401 an internal stack and then optionally sets the new alignment. 24402 24403 4. `#pragma pack(pop)' restores the alignment setting to the one 24404 saved at the top of the internal stack (and removes that stack 24405 entry). Note that `#pragma pack([N])' does not influence this 24406 internal stack; thus it is possible to have `#pragma pack(push)' 24407 followed by multiple `#pragma pack(N)' instances and finalized by 24408 a single `#pragma pack(pop)'. 24409 24410 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma' 24411 which lays out a structure as the documented `__attribute__ 24412 ((ms_struct))'. 24413 1. `#pragma ms_struct on' turns on the layout for structures declared. 24414 24415 2. `#pragma ms_struct off' turns off the layout for structures 24416 declared. 24417 24418 3. `#pragma ms_struct reset' goes back to the default layout. 24419 24420 24421 File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 24422 24423 5.50.8 Weak Pragmas 24424 ------------------- 24425 24426 For compatibility with SVR4, GCC supports a set of `#pragma' directives 24427 for declaring symbols to be weak, and defining weak aliases. 24428 24429 `#pragma weak SYMBOL' 24430 This pragma declares SYMBOL to be weak, as if the declaration had 24431 the attribute of the same name. The pragma may appear before or 24432 after the declaration of SYMBOL, but must appear before either its 24433 first use or its definition. It is not an error for SYMBOL to 24434 never be defined at all. 24435 24436 `#pragma weak SYMBOL1 = SYMBOL2' 24437 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 24438 an error if SYMBOL2 is not defined in the current translation unit. 24439 24440 24441 File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 24442 24443 5.50.9 Diagnostic Pragmas 24444 ------------------------- 24445 24446 GCC allows the user to selectively enable or disable certain types of 24447 diagnostics, and change the kind of the diagnostic. For example, a 24448 project's policy might require that all sources compile with `-Werror' 24449 but certain files might have exceptions allowing specific types of 24450 warnings. Or, a project might selectively enable diagnostics and treat 24451 them as errors depending on which preprocessor macros are defined. 24452 24453 `#pragma GCC diagnostic KIND OPTION' 24454 Modifies the disposition of a diagnostic. Note that not all 24455 diagnostics are modifiable; at the moment only warnings (normally 24456 controlled by `-W...') can be controlled, and not all of them. 24457 Use `-fdiagnostics-show-option' to determine which diagnostics are 24458 controllable and which option controls them. 24459 24460 KIND is `error' to treat this diagnostic as an error, `warning' to 24461 treat it like a warning (even if `-Werror' is in effect), or 24462 `ignored' if the diagnostic is to be ignored. OPTION is a double 24463 quoted string which matches the command line option. 24464 24465 #pragma GCC diagnostic warning "-Wformat" 24466 #pragma GCC diagnostic error "-Wformat" 24467 #pragma GCC diagnostic ignored "-Wformat" 24468 24469 Note that these pragmas override any command line options. Also, 24470 while it is syntactically valid to put these pragmas anywhere in 24471 your sources, the only supported location for them is before any 24472 data or functions are defined. Doing otherwise may result in 24473 unpredictable results depending on how the optimizer manages your 24474 sources. If the same option is listed multiple times, the last 24475 one specified is the one that is in effect. This pragma is not 24476 intended to be a general purpose replacement for command line 24477 options, but for implementing strict control over project policies. 24478 24479 24480 24481 File: gcc.info, Node: Visibility Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 24482 24483 5.50.10 Visibility Pragmas 24484 -------------------------- 24485 24486 `#pragma GCC visibility push(VISIBILITY)' 24487 `#pragma GCC visibility pop' 24488 This pragma allows the user to set the visibility for multiple 24489 declarations without having to give each a visibility attribute 24490 *Note Function Attributes::, for more information about visibility 24491 and the attribute syntax. 24492 24493 In C++, `#pragma GCC visibility' affects only namespace-scope 24494 declarations. Class members and template specializations are not 24495 affected; if you want to override the visibility for a particular 24496 member or instantiation, you must use an attribute. 24497 24498 24499 24500 File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 24501 24502 5.51 Unnamed struct/union fields within structs/unions 24503 ====================================================== 24504 24505 For compatibility with other compilers, GCC allows you to define a 24506 structure or union that contains, as fields, structures and unions 24507 without names. For example: 24508 24509 struct { 24510 int a; 24511 union { 24512 int b; 24513 float c; 24514 }; 24515 int d; 24516 } foo; 24517 24518 In this example, the user would be able to access members of the 24519 unnamed union with code like `foo.b'. Note that only unnamed structs 24520 and unions are allowed, you may not have, for example, an unnamed `int'. 24521 24522 You must never create such structures that cause ambiguous field 24523 definitions. For example, this structure: 24524 24525 struct { 24526 int a; 24527 struct { 24528 int a; 24529 }; 24530 } foo; 24531 24532 It is ambiguous which `a' is being referred to with `foo.a'. Such 24533 constructs are not supported and must be avoided. In the future, such 24534 constructs may be detected and treated as compilation errors. 24535 24536 Unless `-fms-extensions' is used, the unnamed field must be a 24537 structure or union definition without a tag (for example, `struct { int 24538 a; };'). If `-fms-extensions' is used, the field may also be a 24539 definition with a tag such as `struct foo { int a; };', a reference to 24540 a previously defined structure or union such as `struct foo;', or a 24541 reference to a `typedef' name for a previously defined structure or 24542 union type. 24543 24544 24545 File: gcc.info, Node: Thread-Local, Prev: Unnamed Fields, Up: C Extensions 24546 24547 5.52 Thread-Local Storage 24548 ========================= 24549 24550 Thread-local storage (TLS) is a mechanism by which variables are 24551 allocated such that there is one instance of the variable per extant 24552 thread. The run-time model GCC uses to implement this originates in 24553 the IA-64 processor-specific ABI, but has since been migrated to other 24554 processors as well. It requires significant support from the linker 24555 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 24556 `libpthread.so'), so it is not available everywhere. 24557 24558 At the user level, the extension is visible with a new storage class 24559 keyword: `__thread'. For example: 24560 24561 __thread int i; 24562 extern __thread struct state s; 24563 static __thread char *p; 24564 24565 The `__thread' specifier may be used alone, with the `extern' or 24566 `static' specifiers, but with no other storage class specifier. When 24567 used with `extern' or `static', `__thread' must appear immediately 24568 after the other storage class specifier. 24569 24570 The `__thread' specifier may be applied to any global, file-scoped 24571 static, function-scoped static, or static data member of a class. It 24572 may not be applied to block-scoped automatic or non-static data member. 24573 24574 When the address-of operator is applied to a thread-local variable, it 24575 is evaluated at run-time and returns the address of the current thread's 24576 instance of that variable. An address so obtained may be used by any 24577 thread. When a thread terminates, any pointers to thread-local 24578 variables in that thread become invalid. 24579 24580 No static initialization may refer to the address of a thread-local 24581 variable. 24582 24583 In C++, if an initializer is present for a thread-local variable, it 24584 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 24585 standard. 24586 24587 See ELF Handling For Thread-Local Storage 24588 (http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of 24589 the four thread-local storage addressing models, and how the run-time 24590 is expected to function. 24591 24592 * Menu: 24593 24594 * C99 Thread-Local Edits:: 24595 * C++98 Thread-Local Edits:: 24596 24597 24598 File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 24599 24600 5.52.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 24601 ------------------------------------------------------- 24602 24603 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 24604 document the exact semantics of the language extension. 24605 24606 * `5.1.2 Execution environments' 24607 24608 Add new text after paragraph 1 24609 24610 Within either execution environment, a "thread" is a flow of 24611 control within a program. It is implementation defined 24612 whether or not there may be more than one thread associated 24613 with a program. It is implementation defined how threads 24614 beyond the first are created, the name and type of the 24615 function called at thread startup, and how threads may be 24616 terminated. However, objects with thread storage duration 24617 shall be initialized before thread startup. 24618 24619 * `6.2.4 Storage durations of objects' 24620 24621 Add new text before paragraph 3 24622 24623 An object whose identifier is declared with the storage-class 24624 specifier `__thread' has "thread storage duration". Its 24625 lifetime is the entire execution of the thread, and its 24626 stored value is initialized only once, prior to thread 24627 startup. 24628 24629 * `6.4.1 Keywords' 24630 24631 Add `__thread'. 24632 24633 * `6.7.1 Storage-class specifiers' 24634 24635 Add `__thread' to the list of storage class specifiers in 24636 paragraph 1. 24637 24638 Change paragraph 2 to 24639 24640 With the exception of `__thread', at most one storage-class 24641 specifier may be given [...]. The `__thread' specifier may 24642 be used alone, or immediately following `extern' or `static'. 24643 24644 Add new text after paragraph 6 24645 24646 The declaration of an identifier for a variable that has 24647 block scope that specifies `__thread' shall also specify 24648 either `extern' or `static'. 24649 24650 The `__thread' specifier shall be used only with variables. 24651 24652 24653 File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 24654 24655 5.52.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 24656 -------------------------------------------------------- 24657 24658 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 24659 that document the exact semantics of the language extension. 24660 24661 * [intro.execution] 24662 24663 New text after paragraph 4 24664 24665 A "thread" is a flow of control within the abstract machine. 24666 It is implementation defined whether or not there may be more 24667 than one thread. 24668 24669 New text after paragraph 7 24670 24671 It is unspecified whether additional action must be taken to 24672 ensure when and whether side effects are visible to other 24673 threads. 24674 24675 * [lex.key] 24676 24677 Add `__thread'. 24678 24679 * [basic.start.main] 24680 24681 Add after paragraph 5 24682 24683 The thread that begins execution at the `main' function is 24684 called the "main thread". It is implementation defined how 24685 functions beginning threads other than the main thread are 24686 designated or typed. A function so designated, as well as 24687 the `main' function, is called a "thread startup function". 24688 It is implementation defined what happens if a thread startup 24689 function returns. It is implementation defined what happens 24690 to other threads when any thread calls `exit'. 24691 24692 * [basic.start.init] 24693 24694 Add after paragraph 4 24695 24696 The storage for an object of thread storage duration shall be 24697 statically initialized before the first statement of the 24698 thread startup function. An object of thread storage 24699 duration shall not require dynamic initialization. 24700 24701 * [basic.start.term] 24702 24703 Add after paragraph 3 24704 24705 The type of an object with thread storage duration shall not 24706 have a non-trivial destructor, nor shall it be an array type 24707 whose elements (directly or indirectly) have non-trivial 24708 destructors. 24709 24710 * [basic.stc] 24711 24712 Add "thread storage duration" to the list in paragraph 1. 24713 24714 Change paragraph 2 24715 24716 Thread, static, and automatic storage durations are 24717 associated with objects introduced by declarations [...]. 24718 24719 Add `__thread' to the list of specifiers in paragraph 3. 24720 24721 * [basic.stc.thread] 24722 24723 New section before [basic.stc.static] 24724 24725 The keyword `__thread' applied to a non-local object gives the 24726 object thread storage duration. 24727 24728 A local variable or class data member declared both `static' 24729 and `__thread' gives the variable or member thread storage 24730 duration. 24731 24732 * [basic.stc.static] 24733 24734 Change paragraph 1 24735 24736 All objects which have neither thread storage duration, 24737 dynamic storage duration nor are local [...]. 24738 24739 * [dcl.stc] 24740 24741 Add `__thread' to the list in paragraph 1. 24742 24743 Change paragraph 1 24744 24745 With the exception of `__thread', at most one 24746 STORAGE-CLASS-SPECIFIER shall appear in a given 24747 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 24748 alone, or immediately following the `extern' or `static' 24749 specifiers. [...] 24750 24751 Add after paragraph 5 24752 24753 The `__thread' specifier can be applied only to the names of 24754 objects and to anonymous unions. 24755 24756 * [class.mem] 24757 24758 Add after paragraph 6 24759 24760 Non-`static' members shall not be `__thread'. 24761 24762 24763 File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 24764 24765 6 Extensions to the C++ Language 24766 ******************************** 24767 24768 The GNU compiler provides these extensions to the C++ language (and you 24769 can also use most of the C language extensions in your C++ programs). 24770 If you want to write code that checks whether these features are 24771 available, you can test for the GNU compiler the same way as for C 24772 programs: check for a predefined macro `__GNUC__'. You can also use 24773 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 24774 (cpp)Common Predefined Macros.). 24775 24776 * Menu: 24777 24778 * Volatiles:: What constitutes an access to a volatile object. 24779 * Restricted Pointers:: C99 restricted pointers and references. 24780 * Vague Linkage:: Where G++ puts inlines, vtables and such. 24781 * C++ Interface:: You can use a single C++ header file for both 24782 declarations and definitions. 24783 * Template Instantiation:: Methods for ensuring that exactly one copy of 24784 each needed template instantiation is emitted. 24785 * Bound member functions:: You can extract a function pointer to the 24786 method denoted by a `->*' or `.*' expression. 24787 * C++ Attributes:: Variable, function, and type attributes for C++ only. 24788 * Namespace Association:: Strong using-directives for namespace association. 24789 * Java Exceptions:: Tweaking exception handling to work with Java. 24790 * Deprecated Features:: Things will disappear from g++. 24791 * Backwards Compatibility:: Compatibilities with earlier definitions of C++. 24792 24793 24794 File: gcc.info, Node: Volatiles, Next: Restricted Pointers, Up: C++ Extensions 24795 24796 6.1 When is a Volatile Object Accessed? 24797 ======================================= 24798 24799 Both the C and C++ standard have the concept of volatile objects. These 24800 are normally accessed by pointers and used for accessing hardware. The 24801 standards encourage compilers to refrain from optimizations concerning 24802 accesses to volatile objects. The C standard leaves it implementation 24803 defined as to what constitutes a volatile access. The C++ standard 24804 omits to specify this, except to say that C++ should behave in a 24805 similar manner to C with respect to volatiles, where possible. The 24806 minimum either standard specifies is that at a sequence point all 24807 previous accesses to volatile objects have stabilized and no subsequent 24808 accesses have occurred. Thus an implementation is free to reorder and 24809 combine volatile accesses which occur between sequence points, but 24810 cannot do so for accesses across a sequence point. The use of 24811 volatiles does not allow you to violate the restriction on updating 24812 objects multiple times within a sequence point. 24813 24814 *Note Volatile qualifier and the C compiler: Qualifiers implementation. 24815 24816 The behavior differs slightly between C and C++ in the non-obvious 24817 cases: 24818 24819 volatile int *src = SOMEVALUE; 24820 *src; 24821 24822 With C, such expressions are rvalues, and GCC interprets this either 24823 as a read of the volatile object being pointed to or only as request to 24824 evaluate the side-effects. The C++ standard specifies that such 24825 expressions do not undergo lvalue to rvalue conversion, and that the 24826 type of the dereferenced object may be incomplete. The C++ standard 24827 does not specify explicitly that it is this lvalue to rvalue conversion 24828 which may be responsible for causing an access. However, there is 24829 reason to believe that it is, because otherwise certain simple 24830 expressions become undefined. However, because it would surprise most 24831 programmers, G++ treats dereferencing a pointer to volatile object of 24832 complete type when the value is unused as GCC would do for an 24833 equivalent type in C. When the object has incomplete type, G++ issues 24834 a warning; if you wish to force an error, you must force a conversion 24835 to rvalue with, for instance, a static cast. 24836 24837 When using a reference to volatile, G++ does not treat equivalent 24838 expressions as accesses to volatiles, but instead issues a warning that 24839 no volatile is accessed. The rationale for this is that otherwise it 24840 becomes difficult to determine where volatile access occur, and not 24841 possible to ignore the return value from functions returning volatile 24842 references. Again, if you wish to force a read, cast the reference to 24843 an rvalue. 24844 24845 24846 File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: Volatiles, Up: C++ Extensions 24847 24848 6.2 Restricting Pointer Aliasing 24849 ================================ 24850 24851 As with the C front end, G++ understands the C99 feature of restricted 24852 pointers, specified with the `__restrict__', or `__restrict' type 24853 qualifier. Because you cannot compile C++ by specifying the `-std=c99' 24854 language flag, `restrict' is not a keyword in C++. 24855 24856 In addition to allowing restricted pointers, you can specify restricted 24857 references, which indicate that the reference is not aliased in the 24858 local context. 24859 24860 void fn (int *__restrict__ rptr, int &__restrict__ rref) 24861 { 24862 /* ... */ 24863 } 24864 24865 In the body of `fn', RPTR points to an unaliased integer and RREF 24866 refers to a (different) unaliased integer. 24867 24868 You may also specify whether a member function's THIS pointer is 24869 unaliased by using `__restrict__' as a member function qualifier. 24870 24871 void T::fn () __restrict__ 24872 { 24873 /* ... */ 24874 } 24875 24876 Within the body of `T::fn', THIS will have the effective definition `T 24877 *__restrict__ const this'. Notice that the interpretation of a 24878 `__restrict__' member function qualifier is different to that of 24879 `const' or `volatile' qualifier, in that it is applied to the pointer 24880 rather than the object. This is consistent with other compilers which 24881 implement restricted pointers. 24882 24883 As with all outermost parameter qualifiers, `__restrict__' is ignored 24884 in function definition matching. This means you only need to specify 24885 `__restrict__' in a function definition, rather than in a function 24886 prototype as well. 24887 24888 24889 File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 24890 24891 6.3 Vague Linkage 24892 ================= 24893 24894 There are several constructs in C++ which require space in the object 24895 file but are not clearly tied to a single translation unit. We say that 24896 these constructs have "vague linkage". Typically such constructs are 24897 emitted wherever they are needed, though sometimes we can be more 24898 clever. 24899 24900 Inline Functions 24901 Inline functions are typically defined in a header file which can 24902 be included in many different compilations. Hopefully they can 24903 usually be inlined, but sometimes an out-of-line copy is 24904 necessary, if the address of the function is taken or if inlining 24905 fails. In general, we emit an out-of-line copy in all translation 24906 units where one is needed. As an exception, we only emit inline 24907 virtual functions with the vtable, since it will always require a 24908 copy. 24909 24910 Local static variables and string constants used in an inline 24911 function are also considered to have vague linkage, since they 24912 must be shared between all inlined and out-of-line instances of 24913 the function. 24914 24915 VTables 24916 C++ virtual functions are implemented in most compilers using a 24917 lookup table, known as a vtable. The vtable contains pointers to 24918 the virtual functions provided by a class, and each object of the 24919 class contains a pointer to its vtable (or vtables, in some 24920 multiple-inheritance situations). If the class declares any 24921 non-inline, non-pure virtual functions, the first one is chosen as 24922 the "key method" for the class, and the vtable is only emitted in 24923 the translation unit where the key method is defined. 24924 24925 _Note:_ If the chosen key method is later defined as inline, the 24926 vtable will still be emitted in every translation unit which 24927 defines it. Make sure that any inline virtuals are declared 24928 inline in the class body, even if they are not defined there. 24929 24930 type_info objects 24931 C++ requires information about types to be written out in order to 24932 implement `dynamic_cast', `typeid' and exception handling. For 24933 polymorphic classes (classes with virtual functions), the type_info 24934 object is written out along with the vtable so that `dynamic_cast' 24935 can determine the dynamic type of a class object at runtime. For 24936 all other types, we write out the type_info object when it is 24937 used: when applying `typeid' to an expression, throwing an object, 24938 or referring to a type in a catch clause or exception 24939 specification. 24940 24941 Template Instantiations 24942 Most everything in this section also applies to template 24943 instantiations, but there are other options as well. *Note 24944 Where's the Template?: Template Instantiation. 24945 24946 24947 When used with GNU ld version 2.8 or later on an ELF system such as 24948 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 24949 these constructs will be discarded at link time. This is known as 24950 COMDAT support. 24951 24952 On targets that don't support COMDAT, but do support weak symbols, GCC 24953 will use them. This way one copy will override all the others, but the 24954 unused copies will still take up space in the executable. 24955 24956 For targets which do not support either COMDAT or weak symbols, most 24957 entities with vague linkage will be emitted as local symbols to avoid 24958 duplicate definition errors from the linker. This will not happen for 24959 local statics in inlines, however, as having multiple copies will 24960 almost certainly break things. 24961 24962 *Note Declarations and Definitions in One Header: C++ Interface, for 24963 another way to control placement of these constructs. 24964 24965 24966 File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 24967 24968 6.4 #pragma interface and implementation 24969 ======================================== 24970 24971 `#pragma interface' and `#pragma implementation' provide the user with 24972 a way of explicitly directing the compiler to emit entities with vague 24973 linkage (and debugging information) in a particular translation unit. 24974 24975 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most 24976 cases, because of COMDAT support and the "key method" heuristic 24977 mentioned in *Note Vague Linkage::. Using them can actually cause your 24978 program to grow due to unnecessary out-of-line copies of inline 24979 functions. Currently (3.4) the only benefit of these `#pragma's is 24980 reduced duplication of debugging information, and that should be 24981 addressed soon on DWARF 2 targets with the use of COMDAT groups. 24982 24983 `#pragma interface' 24984 `#pragma interface "SUBDIR/OBJECTS.h"' 24985 Use this directive in _header files_ that define object classes, 24986 to save space in most of the object files that use those classes. 24987 Normally, local copies of certain information (backup copies of 24988 inline member functions, debugging information, and the internal 24989 tables that implement virtual functions) must be kept in each 24990 object file that includes class definitions. You can use this 24991 pragma to avoid such duplication. When a header file containing 24992 `#pragma interface' is included in a compilation, this auxiliary 24993 information will not be generated (unless the main input source 24994 file itself uses `#pragma implementation'). Instead, the object 24995 files will contain references to be resolved at link time. 24996 24997 The second form of this directive is useful for the case where you 24998 have multiple headers with the same name in different directories. 24999 If you use this form, you must specify the same string to `#pragma 25000 implementation'. 25001 25002 `#pragma implementation' 25003 `#pragma implementation "OBJECTS.h"' 25004 Use this pragma in a _main input file_, when you want full output 25005 from included header files to be generated (and made globally 25006 visible). The included header file, in turn, should use `#pragma 25007 interface'. Backup copies of inline member functions, debugging 25008 information, and the internal tables used to implement virtual 25009 functions are all generated in implementation files. 25010 25011 If you use `#pragma implementation' with no argument, it applies to 25012 an include file with the same basename(1) as your source file. 25013 For example, in `allclass.cc', giving just `#pragma implementation' 25014 by itself is equivalent to `#pragma implementation "allclass.h"'. 25015 25016 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as 25017 an implementation file whenever you would include it from 25018 `allclass.cc' even if you never specified `#pragma 25019 implementation'. This was deemed to be more trouble than it was 25020 worth, however, and disabled. 25021 25022 Use the string argument if you want a single implementation file to 25023 include code from multiple header files. (You must also use 25024 `#include' to include the header file; `#pragma implementation' 25025 only specifies how to use the file--it doesn't actually include 25026 it.) 25027 25028 There is no way to split up the contents of a single header file 25029 into multiple implementation files. 25030 25031 `#pragma implementation' and `#pragma interface' also have an effect 25032 on function inlining. 25033 25034 If you define a class in a header file marked with `#pragma 25035 interface', the effect on an inline function defined in that class is 25036 similar to an explicit `extern' declaration--the compiler emits no code 25037 at all to define an independent version of the function. Its 25038 definition is used only for inlining with its callers. 25039 25040 Conversely, when you include the same header file in a main source file 25041 that declares it as `#pragma implementation', the compiler emits code 25042 for the function itself; this defines a version of the function that 25043 can be found via pointers (or by callers compiled without inlining). 25044 If all calls to the function can be inlined, you can avoid emitting the 25045 function by compiling with `-fno-implement-inlines'. If any calls were 25046 not inlined, you will get linker errors. 25047 25048 ---------- Footnotes ---------- 25049 25050 (1) A file's "basename" was the name stripped of all leading path 25051 information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 25052 25053 25054 File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 25055 25056 6.5 Where's the Template? 25057 ========================= 25058 25059 C++ templates are the first language feature to require more 25060 intelligence from the environment than one usually finds on a UNIX 25061 system. Somehow the compiler and linker have to make sure that each 25062 template instance occurs exactly once in the executable if it is needed, 25063 and not at all otherwise. There are two basic approaches to this 25064 problem, which are referred to as the Borland model and the Cfront 25065 model. 25066 25067 Borland model 25068 Borland C++ solved the template instantiation problem by adding 25069 the code equivalent of common blocks to their linker; the compiler 25070 emits template instances in each translation unit that uses them, 25071 and the linker collapses them together. The advantage of this 25072 model is that the linker only has to consider the object files 25073 themselves; there is no external complexity to worry about. This 25074 disadvantage is that compilation time is increased because the 25075 template code is being compiled repeatedly. Code written for this 25076 model tends to include definitions of all templates in the header 25077 file, since they must be seen to be instantiated. 25078 25079 Cfront model 25080 The AT&T C++ translator, Cfront, solved the template instantiation 25081 problem by creating the notion of a template repository, an 25082 automatically maintained place where template instances are 25083 stored. A more modern version of the repository works as follows: 25084 As individual object files are built, the compiler places any 25085 template definitions and instantiations encountered in the 25086 repository. At link time, the link wrapper adds in the objects in 25087 the repository and compiles any needed instances that were not 25088 previously emitted. The advantages of this model are more optimal 25089 compilation speed and the ability to use the system linker; to 25090 implement the Borland model a compiler vendor also needs to 25091 replace the linker. The disadvantages are vastly increased 25092 complexity, and thus potential for error; for some code this can be 25093 just as transparent, but in practice it can been very difficult to 25094 build multiple programs in one directory and one program in 25095 multiple directories. Code written for this model tends to 25096 separate definitions of non-inline member templates into a 25097 separate file, which should be compiled separately. 25098 25099 When used with GNU ld version 2.8 or later on an ELF system such as 25100 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 25101 Borland model. On other systems, G++ implements neither automatic 25102 model. 25103 25104 A future version of G++ will support a hybrid model whereby the 25105 compiler will emit any instantiations for which the template definition 25106 is included in the compile, and store template definitions and 25107 instantiation context information into the object file for the rest. 25108 The link wrapper will extract that information as necessary and invoke 25109 the compiler to produce the remaining instantiations. The linker will 25110 then combine duplicate instantiations. 25111 25112 In the mean time, you have the following options for dealing with 25113 template instantiations: 25114 25115 1. Compile your template-using code with `-frepo'. The compiler will 25116 generate files with the extension `.rpo' listing all of the 25117 template instantiations used in the corresponding object files 25118 which could be instantiated there; the link wrapper, `collect2', 25119 will then update the `.rpo' files to tell the compiler where to 25120 place those instantiations and rebuild any affected object files. 25121 The link-time overhead is negligible after the first pass, as the 25122 compiler will continue to place the instantiations in the same 25123 files. 25124 25125 This is your best option for application code written for the 25126 Borland model, as it will just work. Code written for the Cfront 25127 model will need to be modified so that the template definitions 25128 are available at one or more points of instantiation; usually this 25129 is as simple as adding `#include <tmethods.cc>' to the end of each 25130 template header. 25131 25132 For library code, if you want the library to provide all of the 25133 template instantiations it needs, just try to link all of its 25134 object files together; the link will fail, but cause the 25135 instantiations to be generated as a side effect. Be warned, 25136 however, that this may cause conflicts if multiple libraries try 25137 to provide the same instantiations. For greater control, use 25138 explicit instantiation as described in the next option. 25139 25140 2. Compile your code with `-fno-implicit-templates' to disable the 25141 implicit generation of template instances, and explicitly 25142 instantiate all the ones you use. This approach requires more 25143 knowledge of exactly which instances you need than do the others, 25144 but it's less mysterious and allows greater control. You can 25145 scatter the explicit instantiations throughout your program, 25146 perhaps putting them in the translation units where the instances 25147 are used or the translation units that define the templates 25148 themselves; you can put all of the explicit instantiations you 25149 need into one big file; or you can create small files like 25150 25151 #include "Foo.h" 25152 #include "Foo.cc" 25153 25154 template class Foo<int>; 25155 template ostream& operator << 25156 (ostream&, const Foo<int>&); 25157 25158 for each of the instances you need, and create a template 25159 instantiation library from those. 25160 25161 If you are using Cfront-model code, you can probably get away with 25162 not using `-fno-implicit-templates' when compiling files that don't 25163 `#include' the member template definitions. 25164 25165 If you use one big file to do the instantiations, you may want to 25166 compile it without `-fno-implicit-templates' so you get all of the 25167 instances required by your explicit instantiations (but not by any 25168 other files) without having to specify them as well. 25169 25170 G++ has extended the template instantiation syntax given in the ISO 25171 standard to allow forward declaration of explicit instantiations 25172 (with `extern'), instantiation of the compiler support data for a 25173 template class (i.e. the vtable) without instantiating any of its 25174 members (with `inline'), and instantiation of only the static data 25175 members of a template class, without the support data or member 25176 functions (with (`static'): 25177 25178 extern template int max (int, int); 25179 inline template class Foo<int>; 25180 static template class Foo<int>; 25181 25182 3. Do nothing. Pretend G++ does implement automatic instantiation 25183 management. Code written for the Borland model will work fine, but 25184 each translation unit will contain instances of each of the 25185 templates it uses. In a large program, this can lead to an 25186 unacceptable amount of code duplication. 25187 25188 25189 File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 25190 25191 6.6 Extracting the function pointer from a bound pointer to member function 25192 =========================================================================== 25193 25194 In C++, pointer to member functions (PMFs) are implemented using a wide 25195 pointer of sorts to handle all the possible call mechanisms; the PMF 25196 needs to store information about how to adjust the `this' pointer, and 25197 if the function pointed to is virtual, where to find the vtable, and 25198 where in the vtable to look for the member function. If you are using 25199 PMFs in an inner loop, you should really reconsider that decision. If 25200 that is not an option, you can extract the pointer to the function that 25201 would be called for a given object/PMF pair and call it directly inside 25202 the inner loop, to save a bit of time. 25203 25204 Note that you will still be paying the penalty for the call through a 25205 function pointer; on most modern architectures, such a call defeats the 25206 branch prediction features of the CPU. This is also true of normal 25207 virtual function calls. 25208 25209 The syntax for this extension is 25210 25211 extern A a; 25212 extern int (A::*fp)(); 25213 typedef int (*fptr)(A *); 25214 25215 fptr p = (fptr)(a.*fp); 25216 25217 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 25218 object is needed to obtain the address of the function. They can be 25219 converted to function pointers directly: 25220 25221 fptr p1 = (fptr)(&A::foo); 25222 25223 You must specify `-Wno-pmf-conversions' to use this extension. 25224 25225 25226 File: gcc.info, Node: C++ Attributes, Next: Namespace Association, Prev: Bound member functions, Up: C++ Extensions 25227 25228 6.7 C++-Specific Variable, Function, and Type Attributes 25229 ======================================================== 25230 25231 Some attributes only make sense for C++ programs. 25232 25233 `init_priority (PRIORITY)' 25234 In Standard C++, objects defined at namespace scope are guaranteed 25235 to be initialized in an order in strict accordance with that of 25236 their definitions _in a given translation unit_. No guarantee is 25237 made for initializations across translation units. However, GNU 25238 C++ allows users to control the order of initialization of objects 25239 defined at namespace scope with the `init_priority' attribute by 25240 specifying a relative PRIORITY, a constant integral expression 25241 currently bounded between 101 and 65535 inclusive. Lower numbers 25242 indicate a higher priority. 25243 25244 In the following example, `A' would normally be created before 25245 `B', but the `init_priority' attribute has reversed that order: 25246 25247 Some_Class A __attribute__ ((init_priority (2000))); 25248 Some_Class B __attribute__ ((init_priority (543))); 25249 25250 Note that the particular values of PRIORITY do not matter; only 25251 their relative ordering. 25252 25253 `java_interface' 25254 This type attribute informs C++ that the class is a Java 25255 interface. It may only be applied to classes declared within an 25256 `extern "Java"' block. Calls to methods declared in this 25257 interface will be dispatched using GCJ's interface table 25258 mechanism, instead of regular virtual table dispatch. 25259 25260 25261 See also *Note Namespace Association::. 25262 25263 25264 File: gcc.info, Node: Namespace Association, Next: Java Exceptions, Prev: C++ Attributes, Up: C++ Extensions 25265 25266 6.8 Namespace Association 25267 ========================= 25268 25269 *Caution:* The semantics of this extension are not fully defined. 25270 Users should refrain from using this extension as its semantics may 25271 change subtly over time. It is possible that this extension will be 25272 removed in future versions of G++. 25273 25274 A using-directive with `__attribute ((strong))' is stronger than a 25275 normal using-directive in two ways: 25276 25277 * Templates from the used namespace can be specialized and explicitly 25278 instantiated as though they were members of the using namespace. 25279 25280 * The using namespace is considered an associated namespace of all 25281 templates in the used namespace for purposes of argument-dependent 25282 name lookup. 25283 25284 The used namespace must be nested within the using namespace so that 25285 normal unqualified lookup works properly. 25286 25287 This is useful for composing a namespace transparently from 25288 implementation namespaces. For example: 25289 25290 namespace std { 25291 namespace debug { 25292 template <class T> struct A { }; 25293 } 25294 using namespace debug __attribute ((__strong__)); 25295 template <> struct A<int> { }; // ok to specialize 25296 25297 template <class T> void f (A<T>); 25298 } 25299 25300 int main() 25301 { 25302 f (std::A<float>()); // lookup finds std::f 25303 f (std::A<int>()); 25304 } 25305 25306 25307 File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Namespace Association, Up: C++ Extensions 25308 25309 6.9 Java Exceptions 25310 =================== 25311 25312 The Java language uses a slightly different exception handling model 25313 from C++. Normally, GNU C++ will automatically detect when you are 25314 writing C++ code that uses Java exceptions, and handle them 25315 appropriately. However, if C++ code only needs to execute destructors 25316 when Java exceptions are thrown through it, GCC will guess incorrectly. 25317 Sample problematic code is: 25318 25319 struct S { ~S(); }; 25320 extern void bar(); // is written in Java, and may throw exceptions 25321 void foo() 25322 { 25323 S s; 25324 bar(); 25325 } 25326 25327 The usual effect of an incorrect guess is a link failure, complaining of 25328 a missing routine called `__gxx_personality_v0'. 25329 25330 You can inform the compiler that Java exceptions are to be used in a 25331 translation unit, irrespective of what it might think, by writing 25332 `#pragma GCC java_exceptions' at the head of the file. This `#pragma' 25333 must appear before any functions that throw or catch exceptions, or run 25334 destructors when exceptions are thrown through them. 25335 25336 You cannot mix Java and C++ exceptions in the same translation unit. 25337 It is believed to be safe to throw a C++ exception from one file through 25338 another file compiled for the Java exception model, or vice versa, but 25339 there may be bugs in this area. 25340 25341 25342 File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 25343 25344 6.10 Deprecated Features 25345 ======================== 25346 25347 In the past, the GNU C++ compiler was extended to experiment with new 25348 features, at a time when the C++ language was still evolving. Now that 25349 the C++ standard is complete, some of those features are superseded by 25350 superior alternatives. Using the old features might cause a warning in 25351 some cases that the feature will be dropped in the future. In other 25352 cases, the feature might be gone already. 25353 25354 While the list below is not exhaustive, it documents some of the 25355 options that are now deprecated: 25356 25357 `-fexternal-templates' 25358 `-falt-external-templates' 25359 These are two of the many ways for G++ to implement template 25360 instantiation. *Note Template Instantiation::. The C++ standard 25361 clearly defines how template definitions have to be organized 25362 across implementation units. G++ has an implicit instantiation 25363 mechanism that should work just fine for standard-conforming code. 25364 25365 `-fstrict-prototype' 25366 `-fno-strict-prototype' 25367 Previously it was possible to use an empty prototype parameter 25368 list to indicate an unspecified number of parameters (like C), 25369 rather than no parameters, as C++ demands. This feature has been 25370 removed, except where it is required for backwards compatibility 25371 *Note Backwards Compatibility::. 25372 25373 G++ allows a virtual function returning `void *' to be overridden by 25374 one returning a different pointer type. This extension to the 25375 covariant return type rules is now deprecated and will be removed from a 25376 future version. 25377 25378 The G++ minimum and maximum operators (`<?' and `>?') and their 25379 compound forms (`<?=') and `>?=') have been deprecated and will be 25380 removed in a future version. Code using these operators should be 25381 modified to use `std::min' and `std::max' instead. 25382 25383 The named return value extension has been deprecated, and is now 25384 removed from G++. 25385 25386 The use of initializer lists with new expressions has been deprecated, 25387 and is now removed from G++. 25388 25389 Floating and complex non-type template parameters have been deprecated, 25390 and are now removed from G++. 25391 25392 The implicit typename extension has been deprecated and is now removed 25393 from G++. 25394 25395 The use of default arguments in function pointers, function typedefs 25396 and other places where they are not permitted by the standard is 25397 deprecated and will be removed from a future version of G++. 25398 25399 G++ allows floating-point literals to appear in integral constant 25400 expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 25401 deprecated and will be removed from a future version. 25402 25403 G++ allows static data members of const floating-point type to be 25404 declared with an initializer in a class definition. The standard only 25405 allows initializers for static members of const integral types and const 25406 enumeration types so this extension has been deprecated and will be 25407 removed from a future version. 25408 25409 25410 File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 25411 25412 6.11 Backwards Compatibility 25413 ============================ 25414 25415 Now that there is a definitive ISO standard C++, G++ has a specification 25416 to adhere to. The C++ language evolved over time, and features that 25417 used to be acceptable in previous drafts of the standard, such as the 25418 ARM [Annotated C++ Reference Manual], are no longer accepted. In order 25419 to allow compilation of C++ written to such drafts, G++ contains some 25420 backwards compatibilities. _All such backwards compatibility features 25421 are liable to disappear in future versions of G++._ They should be 25422 considered deprecated *Note Deprecated Features::. 25423 25424 `For scope' 25425 If a variable is declared at for scope, it used to remain in scope 25426 until the end of the scope which contained the for statement 25427 (rather than just within the for scope). G++ retains this, but 25428 issues a warning, if such a variable is accessed outside the for 25429 scope. 25430 25431 `Implicit C language' 25432 Old C system header files did not contain an `extern "C" {...}' 25433 scope to set the language. On such systems, all header files are 25434 implicitly scoped inside a C language scope. Also, an empty 25435 prototype `()' will be treated as an unspecified number of 25436 arguments, rather than no arguments, as C++ demands. 25437 25438 25439 File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 25440 25441 7 GNU Objective-C runtime features 25442 ********************************** 25443 25444 This document is meant to describe some of the GNU Objective-C runtime 25445 features. It is not intended to teach you Objective-C, there are 25446 several resources on the Internet that present the language. Questions 25447 and comments about this document to Ovidiu Predescu <ovidiu (a] cup.hp.com>. 25448 25449 * Menu: 25450 25451 * Executing code before main:: 25452 * Type encoding:: 25453 * Garbage Collection:: 25454 * Constant string objects:: 25455 * compatibility_alias:: 25456 25457 25458 File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: Objective-C, Up: Objective-C 25459 25460 7.1 `+load': Executing code before main 25461 ======================================= 25462 25463 The GNU Objective-C runtime provides a way that allows you to execute 25464 code before the execution of the program enters the `main' function. 25465 The code is executed on a per-class and a per-category basis, through a 25466 special class method `+load'. 25467 25468 This facility is very useful if you want to initialize global variables 25469 which can be accessed by the program directly, without sending a message 25470 to the class first. The usual way to initialize global variables, in 25471 the `+initialize' method, might not be useful because `+initialize' is 25472 only called when the first message is sent to a class object, which in 25473 some cases could be too late. 25474 25475 Suppose for example you have a `FileStream' class that declares 25476 `Stdin', `Stdout' and `Stderr' as global variables, like below: 25477 25478 25479 FileStream *Stdin = nil; 25480 FileStream *Stdout = nil; 25481 FileStream *Stderr = nil; 25482 25483 @implementation FileStream 25484 25485 + (void)initialize 25486 { 25487 Stdin = [[FileStream new] initWithFd:0]; 25488 Stdout = [[FileStream new] initWithFd:1]; 25489 Stderr = [[FileStream new] initWithFd:2]; 25490 } 25491 25492 /* Other methods here */ 25493 @end 25494 25495 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 25496 in `+initialize' occurs too late. The programmer can send a message to 25497 one of these objects before the variables are actually initialized, 25498 thus sending messages to the `nil' object. The `+initialize' method 25499 which actually initializes the global variables is not invoked until 25500 the first message is sent to the class object. The solution would 25501 require these variables to be initialized just before entering `main'. 25502 25503 The correct solution of the above problem is to use the `+load' method 25504 instead of `+initialize': 25505 25506 25507 @implementation FileStream 25508 25509 + (void)load 25510 { 25511 Stdin = [[FileStream new] initWithFd:0]; 25512 Stdout = [[FileStream new] initWithFd:1]; 25513 Stderr = [[FileStream new] initWithFd:2]; 25514 } 25515 25516 /* Other methods here */ 25517 @end 25518 25519 The `+load' is a method that is not overridden by categories. If a 25520 class and a category of it both implement `+load', both methods are 25521 invoked. This allows some additional initializations to be performed in 25522 a category. 25523 25524 This mechanism is not intended to be a replacement for `+initialize'. 25525 You should be aware of its limitations when you decide to use it 25526 instead of `+initialize'. 25527 25528 * Menu: 25529 25530 * What you can and what you cannot do in +load:: 25531 25532 25533 File: gcc.info, Node: What you can and what you cannot do in +load, Prev: Executing code before main, Up: Executing code before main 25534 25535 7.1.1 What you can and what you cannot do in `+load' 25536 ---------------------------------------------------- 25537 25538 The `+load' implementation in the GNU runtime guarantees you the 25539 following things: 25540 25541 * you can write whatever C code you like; 25542 25543 * you can send messages to Objective-C constant strings (`@"this is a 25544 constant string"'); 25545 25546 * you can allocate and send messages to objects whose class is 25547 implemented in the same file; 25548 25549 * the `+load' implementation of all super classes of a class are 25550 executed before the `+load' of that class is executed; 25551 25552 * the `+load' implementation of a class is executed before the 25553 `+load' implementation of any category. 25554 25555 25556 In particular, the following things, even if they can work in a 25557 particular case, are not guaranteed: 25558 25559 * allocation of or sending messages to arbitrary objects; 25560 25561 * allocation of or sending messages to objects whose classes have a 25562 category implemented in the same file; 25563 25564 25565 You should make no assumptions about receiving `+load' in sibling 25566 classes when you write `+load' of a class. The order in which sibling 25567 classes receive `+load' is not guaranteed. 25568 25569 The order in which `+load' and `+initialize' are called could be 25570 problematic if this matters. If you don't allocate objects inside 25571 `+load', it is guaranteed that `+load' is called before `+initialize'. 25572 If you create an object inside `+load' the `+initialize' method of 25573 object's class is invoked even if `+load' was not invoked. Note if you 25574 explicitly call `+load' on a class, `+initialize' will be called first. 25575 To avoid possible problems try to implement only one of these methods. 25576 25577 The `+load' method is also invoked when a bundle is dynamically loaded 25578 into your running program. This happens automatically without any 25579 intervening operation from you. When you write bundles and you need to 25580 write `+load' you can safely create and send messages to objects whose 25581 classes already exist in the running program. The same restrictions as 25582 above apply to classes defined in bundle. 25583 25584 25585 File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 25586 25587 7.2 Type encoding 25588 ================= 25589 25590 The Objective-C compiler generates type encodings for all the types. 25591 These type encodings are used at runtime to find out information about 25592 selectors and methods and about objects and classes. 25593 25594 The types are encoded in the following way: 25595 25596 `_Bool' `B' 25597 `char' `c' 25598 `unsigned char' `C' 25599 `short' `s' 25600 `unsigned short' `S' 25601 `int' `i' 25602 `unsigned int' `I' 25603 `long' `l' 25604 `unsigned long' `L' 25605 `long long' `q' 25606 `unsigned long `Q' 25607 long' 25608 `float' `f' 25609 `double' `d' 25610 `void' `v' 25611 `id' `@' 25612 `Class' `#' 25613 `SEL' `:' 25614 `char*' `*' 25615 unknown type `?' 25616 Complex types `j' followed by the inner type. For example 25617 `_Complex double' is encoded as "jd". 25618 bit-fields `b' followed by the starting position of the 25619 bit-field, the type of the bit-field and the size of 25620 the bit-field (the bit-fields encoding was changed 25621 from the NeXT's compiler encoding, see below) 25622 25623 The encoding of bit-fields has changed to allow bit-fields to be 25624 properly handled by the runtime functions that compute sizes and 25625 alignments of types that contain bit-fields. The previous encoding 25626 contained only the size of the bit-field. Using only this information 25627 it is not possible to reliably compute the size occupied by the 25628 bit-field. This is very important in the presence of the Boehm's 25629 garbage collector because the objects are allocated using the typed 25630 memory facility available in this collector. The typed memory 25631 allocation requires information about where the pointers are located 25632 inside the object. 25633 25634 The position in the bit-field is the position, counting in bits, of the 25635 bit closest to the beginning of the structure. 25636 25637 The non-atomic types are encoded as follows: 25638 25639 pointers `^' followed by the pointed type. 25640 arrays `[' followed by the number of elements in the array 25641 followed by the type of the elements followed by `]' 25642 structures `{' followed by the name of the structure (or `?' if the 25643 structure is unnamed), the `=' sign, the type of the 25644 members and by `}' 25645 unions `(' followed by the name of the structure (or `?' if the 25646 union is unnamed), the `=' sign, the type of the members 25647 followed by `)' 25648 25649 Here are some types and their encodings, as they are generated by the 25650 compiler on an i386 machine: 25651 25652 25653 Objective-C type Compiler encoding 25654 int a[10]; `[10i]' 25655 struct { `{?=i[3f]b128i3b131i2c}' 25656 int i; 25657 float f[3]; 25658 int a:3; 25659 int b:2; 25660 char c; 25661 } 25662 25663 25664 In addition to the types the compiler also encodes the type 25665 specifiers. The table below describes the encoding of the current 25666 Objective-C type specifiers: 25667 25668 25669 Specifier Encoding 25670 `const' `r' 25671 `in' `n' 25672 `inout' `N' 25673 `out' `o' 25674 `bycopy' `O' 25675 `oneway' `V' 25676 25677 25678 The type specifiers are encoded just before the type. Unlike types 25679 however, the type specifiers are only encoded when they appear in method 25680 argument types. 25681 25682 25683 File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 25684 25685 7.3 Garbage Collection 25686 ====================== 25687 25688 Support for a new memory management policy has been added by using a 25689 powerful conservative garbage collector, known as the 25690 Boehm-Demers-Weiser conservative garbage collector. It is available 25691 from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'. 25692 25693 To enable the support for it you have to configure the compiler using 25694 an additional argument, `--enable-objc-gc'. You need to have garbage 25695 collector installed before building the compiler. This will build an 25696 additional runtime library which has several enhancements to support 25697 the garbage collector. The new library has a new name, `libobjc_gc.a' 25698 to not conflict with the non-garbage-collected library. 25699 25700 When the garbage collector is used, the objects are allocated using the 25701 so-called typed memory allocation mechanism available in the 25702 Boehm-Demers-Weiser collector. This mode requires precise information 25703 on where pointers are located inside objects. This information is 25704 computed once per class, immediately after the class has been 25705 initialized. 25706 25707 There is a new runtime function `class_ivar_set_gcinvisible()' which 25708 can be used to declare a so-called "weak pointer" reference. Such a 25709 pointer is basically hidden for the garbage collector; this can be 25710 useful in certain situations, especially when you want to keep track of 25711 the allocated objects, yet allow them to be collected. This kind of 25712 pointers can only be members of objects, you cannot declare a global 25713 pointer as a weak reference. Every type which is a pointer type can be 25714 declared a weak pointer, including `id', `Class' and `SEL'. 25715 25716 Here is an example of how to use this feature. Suppose you want to 25717 implement a class whose instances hold a weak pointer reference; the 25718 following class does this: 25719 25720 25721 @interface WeakPointer : Object 25722 { 25723 const void* weakPointer; 25724 } 25725 25726 - initWithPointer:(const void*)p; 25727 - (const void*)weakPointer; 25728 @end 25729 25730 25731 @implementation WeakPointer 25732 25733 + (void)initialize 25734 { 25735 class_ivar_set_gcinvisible (self, "weakPointer", YES); 25736 } 25737 25738 - initWithPointer:(const void*)p 25739 { 25740 weakPointer = p; 25741 return self; 25742 } 25743 25744 - (const void*)weakPointer 25745 { 25746 return weakPointer; 25747 } 25748 25749 @end 25750 25751 Weak pointers are supported through a new type character specifier 25752 represented by the `!' character. The `class_ivar_set_gcinvisible()' 25753 function adds or removes this specifier to the string type description 25754 of the instance variable named as argument. 25755 25756 25757 File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 25758 25759 7.4 Constant string objects 25760 =========================== 25761 25762 GNU Objective-C provides constant string objects that are generated 25763 directly by the compiler. You declare a constant string object by 25764 prefixing a C constant string with the character `@': 25765 25766 id myString = @"this is a constant string object"; 25767 25768 The constant string objects are by default instances of the 25769 `NXConstantString' class which is provided by the GNU Objective-C 25770 runtime. To get the definition of this class you must include the 25771 `objc/NXConstStr.h' header file. 25772 25773 User defined libraries may want to implement their own constant string 25774 class. To be able to support them, the GNU Objective-C compiler 25775 provides a new command line options 25776 `-fconstant-string-class=CLASS-NAME'. The provided class should adhere 25777 to a strict structure, the same as `NXConstantString''s structure: 25778 25779 25780 @interface MyConstantStringClass 25781 { 25782 Class isa; 25783 char *c_string; 25784 unsigned int len; 25785 } 25786 @end 25787 25788 `NXConstantString' inherits from `Object'; user class libraries may 25789 choose to inherit the customized constant string class from a different 25790 class than `Object'. There is no requirement in the methods the 25791 constant string class has to implement, but the final ivar layout of 25792 the class must be the compatible with the given structure. 25793 25794 When the compiler creates the statically allocated constant string 25795 object, the `c_string' field will be filled by the compiler with the 25796 string; the `length' field will be filled by the compiler with the 25797 string length; the `isa' pointer will be filled with `NULL' by the 25798 compiler, and it will later be fixed up automatically at runtime by the 25799 GNU Objective-C runtime library to point to the class which was set by 25800 the `-fconstant-string-class' option when the object file is loaded (if 25801 you wonder how it works behind the scenes, the name of the class to 25802 use, and the list of static objects to fixup, are stored by the 25803 compiler in the object file in a place where the GNU runtime library 25804 will find them at runtime). 25805 25806 As a result, when a file is compiled with the 25807 `-fconstant-string-class' option, all the constant string objects will 25808 be instances of the class specified as argument to this option. It is 25809 possible to have multiple compilation units referring to different 25810 constant string classes, neither the compiler nor the linker impose any 25811 restrictions in doing this. 25812 25813 25814 File: gcc.info, Node: compatibility_alias, Prev: Constant string objects, Up: Objective-C 25815 25816 7.5 compatibility_alias 25817 ======================= 25818 25819 This is a feature of the Objective-C compiler rather than of the 25820 runtime, anyway since it is documented nowhere and its existence was 25821 forgotten, we are documenting it here. 25822 25823 The keyword `@compatibility_alias' allows you to define a class name 25824 as equivalent to another class name. For example: 25825 25826 @compatibility_alias WOApplication GSWApplication; 25827 25828 tells the compiler that each time it encounters `WOApplication' as a 25829 class name, it should replace it with `GSWApplication' (that is, 25830 `WOApplication' is just an alias for `GSWApplication'). 25831 25832 There are some constraints on how this can be used-- 25833 25834 * `WOApplication' (the alias) must not be an existing class; 25835 25836 * `GSWApplication' (the real class) must be an existing class. 25837 25838 25839 25840 File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 25841 25842 8 Binary Compatibility 25843 ********************** 25844 25845 Binary compatibility encompasses several related concepts: 25846 25847 "application binary interface (ABI)" 25848 The set of runtime conventions followed by all of the tools that 25849 deal with binary representations of a program, including 25850 compilers, assemblers, linkers, and language runtime support. 25851 Some ABIs are formal with a written specification, possibly 25852 designed by multiple interested parties. Others are simply the 25853 way things are actually done by a particular set of tools. 25854 25855 "ABI conformance" 25856 A compiler conforms to an ABI if it generates code that follows 25857 all of the specifications enumerated by that ABI. A library 25858 conforms to an ABI if it is implemented according to that ABI. An 25859 application conforms to an ABI if it is built using tools that 25860 conform to that ABI and does not contain source code that 25861 specifically changes behavior specified by the ABI. 25862 25863 "calling conventions" 25864 Calling conventions are a subset of an ABI that specify of how 25865 arguments are passed and function results are returned. 25866 25867 "interoperability" 25868 Different sets of tools are interoperable if they generate files 25869 that can be used in the same program. The set of tools includes 25870 compilers, assemblers, linkers, libraries, header files, startup 25871 files, and debuggers. Binaries produced by different sets of 25872 tools are not interoperable unless they implement the same ABI. 25873 This applies to different versions of the same tools as well as 25874 tools from different vendors. 25875 25876 "intercallability" 25877 Whether a function in a binary built by one set of tools can call a 25878 function in a binary built by a different set of tools is a subset 25879 of interoperability. 25880 25881 "implementation-defined features" 25882 Language standards include lists of implementation-defined 25883 features whose behavior can vary from one implementation to 25884 another. Some of these features are normally covered by a 25885 platform's ABI and others are not. The features that are not 25886 covered by an ABI generally affect how a program behaves, but not 25887 intercallability. 25888 25889 "compatibility" 25890 Conformance to the same ABI and the same behavior of 25891 implementation-defined features are both relevant for 25892 compatibility. 25893 25894 The application binary interface implemented by a C or C++ compiler 25895 affects code generation and runtime support for: 25896 25897 * size and alignment of data types 25898 25899 * layout of structured types 25900 25901 * calling conventions 25902 25903 * register usage conventions 25904 25905 * interfaces for runtime arithmetic support 25906 25907 * object file formats 25908 25909 In addition, the application binary interface implemented by a C++ 25910 compiler affects code generation and runtime support for: 25911 * name mangling 25912 25913 * exception handling 25914 25915 * invoking constructors and destructors 25916 25917 * layout, alignment, and padding of classes 25918 25919 * layout and alignment of virtual tables 25920 25921 Some GCC compilation options cause the compiler to generate code that 25922 does not conform to the platform's default ABI. Other options cause 25923 different program behavior for implementation-defined features that are 25924 not covered by an ABI. These options are provided for consistency with 25925 other compilers that do not follow the platform's default ABI or the 25926 usual behavior of implementation-defined features for the platform. Be 25927 very careful about using such options. 25928 25929 Most platforms have a well-defined ABI that covers C code, but ABIs 25930 that cover C++ functionality are not yet common. 25931 25932 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 25933 written, vendor-neutral C++ ABI that was designed to be specific to 25934 64-bit Itanium but also includes generic specifications that apply to 25935 any platform. This C++ ABI is also implemented by other compiler 25936 vendors on some platforms, notably GNU/Linux and BSD systems. We have 25937 tried hard to provide a stable ABI that will be compatible with future 25938 GCC releases, but it is possible that we will encounter problems that 25939 make this difficult. Such problems could include different 25940 interpretations of the C++ ABI by different vendors, bugs in the ABI, or 25941 bugs in the implementation of the ABI in different compilers. GCC's 25942 `-Wabi' switch warns when G++ generates code that is probably not 25943 compatible with the C++ ABI. 25944 25945 The C++ library used with a C++ compiler includes the Standard C++ 25946 Library, with functionality defined in the C++ Standard, plus language 25947 runtime support. The runtime support is included in a C++ ABI, but 25948 there is no formal ABI for the Standard C++ Library. Two 25949 implementations of that library are interoperable if one follows the 25950 de-facto ABI of the other and if they are both built with the same 25951 compiler, or with compilers that conform to the same ABI for C++ 25952 compiler and runtime support. 25953 25954 When G++ and another C++ compiler conform to the same C++ ABI, but the 25955 implementations of the Standard C++ Library that they normally use do 25956 not follow the same ABI for the Standard C++ Library, object files 25957 built with those compilers can be used in the same program only if they 25958 use the same C++ library. This requires specifying the location of the 25959 C++ library header files when invoking the compiler whose usual library 25960 is not being used. The location of GCC's C++ header files depends on 25961 how the GCC build was configured, but can be seen by using the G++ `-v' 25962 option. With default configuration options for G++ 3.3 the compile 25963 line for a different C++ compiler needs to include 25964 25965 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 25966 25967 Similarly, compiling code with G++ that must use a C++ library other 25968 than the GNU C++ library requires specifying the location of the header 25969 files for that other library. 25970 25971 The most straightforward way to link a program to use a particular C++ 25972 library is to use a C++ driver that specifies that C++ library by 25973 default. The `g++' driver, for example, tells the linker where to find 25974 GCC's C++ library (`libstdc++') plus the other libraries and startup 25975 files it needs, in the proper order. 25976 25977 If a program must use a different C++ library and it's not possible to 25978 do the final link using a C++ driver that uses that library by default, 25979 it is necessary to tell `g++' the location and name of that library. 25980 It might also be necessary to specify different startup files and other 25981 runtime support libraries, and to suppress the use of GCC's support 25982 libraries with one or more of the options `-nostdlib', `-nostartfiles', 25983 and `-nodefaultlibs'. 25984 25985 25986 File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 25987 25988 9 `gcov'--a Test Coverage Program 25989 ********************************* 25990 25991 `gcov' is a tool you can use in conjunction with GCC to test code 25992 coverage in your programs. 25993 25994 * Menu: 25995 25996 * Gcov Intro:: Introduction to gcov. 25997 * Invoking Gcov:: How to use gcov. 25998 * Gcov and Optimization:: Using gcov with GCC optimization. 25999 * Gcov Data Files:: The files used by gcov. 26000 * Cross-profiling:: Data file relocation. 26001 26002 26003 File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 26004 26005 9.1 Introduction to `gcov' 26006 ========================== 26007 26008 `gcov' is a test coverage program. Use it in concert with GCC to 26009 analyze your programs to help create more efficient, faster running 26010 code and to discover untested parts of your program. You can use 26011 `gcov' as a profiling tool to help discover where your optimization 26012 efforts will best affect your code. You can also use `gcov' along with 26013 the other profiling tool, `gprof', to assess which parts of your code 26014 use the greatest amount of computing time. 26015 26016 Profiling tools help you analyze your code's performance. Using a 26017 profiler such as `gcov' or `gprof', you can find out some basic 26018 performance statistics, such as: 26019 26020 * how often each line of code executes 26021 26022 * what lines of code are actually executed 26023 26024 * how much computing time each section of code uses 26025 26026 Once you know these things about how your code works when compiled, you 26027 can look at each module to see which modules should be optimized. 26028 `gcov' helps you determine where to work on optimization. 26029 26030 Software developers also use coverage testing in concert with 26031 testsuites, to make sure software is actually good enough for a release. 26032 Testsuites can verify that a program works as expected; a coverage 26033 program tests to see how much of the program is exercised by the 26034 testsuite. Developers can then determine what kinds of test cases need 26035 to be added to the testsuites to create both better testing and a better 26036 final product. 26037 26038 You should compile your code without optimization if you plan to use 26039 `gcov' because the optimization, by combining some lines of code into 26040 one function, may not give you as much information as you need to look 26041 for `hot spots' where the code is using a great deal of computer time. 26042 Likewise, because `gcov' accumulates statistics by line (at the lowest 26043 resolution), it works best with a programming style that places only 26044 one statement on each line. If you use complicated macros that expand 26045 to loops or to other control structures, the statistics are less 26046 helpful--they only report on the line where the macro call appears. If 26047 your complex macros behave like functions, you can replace them with 26048 inline functions to solve this problem. 26049 26050 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 26051 many times each line of a source file `SOURCEFILE.c' has executed. You 26052 can use these logfiles along with `gprof' to aid in fine-tuning the 26053 performance of your programs. `gprof' gives timing information you can 26054 use along with the information you get from `gcov'. 26055 26056 `gcov' works only on code compiled with GCC. It is not compatible 26057 with any other profiling or test coverage mechanism. 26058 26059 26060 File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 26061 26062 9.2 Invoking `gcov' 26063 =================== 26064 26065 gcov [OPTIONS] SOURCEFILE 26066 26067 `gcov' accepts the following options: 26068 26069 `-h' 26070 `--help' 26071 Display help about using `gcov' (on the standard output), and exit 26072 without doing any further processing. 26073 26074 `-v' 26075 `--version' 26076 Display the `gcov' version number (on the standard output), and 26077 exit without doing any further processing. 26078 26079 `-a' 26080 `--all-blocks' 26081 Write individual execution counts for every basic block. Normally 26082 gcov outputs execution counts only for the main blocks of a line. 26083 With this option you can determine if blocks within a single line 26084 are not being executed. 26085 26086 `-b' 26087 `--branch-probabilities' 26088 Write branch frequencies to the output file, and write branch 26089 summary info to the standard output. This option allows you to 26090 see how often each branch in your program was taken. 26091 Unconditional branches will not be shown, unless the `-u' option 26092 is given. 26093 26094 `-c' 26095 `--branch-counts' 26096 Write branch frequencies as the number of branches taken, rather 26097 than the percentage of branches taken. 26098 26099 `-n' 26100 `--no-output' 26101 Do not create the `gcov' output file. 26102 26103 `-l' 26104 `--long-file-names' 26105 Create long file names for included source files. For example, if 26106 the header file `x.h' contains code, and was included in the file 26107 `a.c', then running `gcov' on the file `a.c' will produce an 26108 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 26109 can be useful if `x.h' is included in multiple source files. If 26110 you use the `-p' option, both the including and included file 26111 names will be complete path names. 26112 26113 `-p' 26114 `--preserve-paths' 26115 Preserve complete path information in the names of generated 26116 `.gcov' files. Without this option, just the filename component is 26117 used. With this option, all directories are used, with `/' 26118 characters translated to `#' characters, `.' directory components 26119 removed and `..' components renamed to `^'. This is useful if 26120 sourcefiles are in several different directories. It also affects 26121 the `-l' option. 26122 26123 `-f' 26124 `--function-summaries' 26125 Output summaries for each function in addition to the file level 26126 summary. 26127 26128 `-o DIRECTORY|FILE' 26129 `--object-directory DIRECTORY' 26130 `--object-file FILE' 26131 Specify either the directory containing the gcov data files, or the 26132 object path name. The `.gcno', and `.gcda' data files are 26133 searched for using this option. If a directory is specified, the 26134 data files are in that directory and named after the source file 26135 name, without its extension. If a file is specified here, the 26136 data files are named after that file, without its extension. If 26137 this option is not supplied, it defaults to the current directory. 26138 26139 `-u' 26140 `--unconditional-branches' 26141 When branch probabilities are given, include those of 26142 unconditional branches. Unconditional branches are normally not 26143 interesting. 26144 26145 26146 `gcov' should be run with the current directory the same as that when 26147 you invoked the compiler. Otherwise it will not be able to locate the 26148 source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 26149 current directory. These contain the coverage information of the 26150 source file they correspond to. One `.gcov' file is produced for each 26151 source file containing code, which was compiled to produce the data 26152 files. The MANGLEDNAME part of the output file name is usually simply 26153 the source file name, but can be something more complicated if the `-l' 26154 or `-p' options are given. Refer to those options for details. 26155 26156 The `.gcov' files contain the `:' separated fields along with program 26157 source code. The format is 26158 26159 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 26160 26161 Additional block information may succeed each line, when requested by 26162 command line option. The EXECUTION_COUNT is `-' for lines containing 26163 no code and `#####' for lines which were never executed. Some lines of 26164 information at the start have LINE_NUMBER of zero. 26165 26166 The preamble lines are of the form 26167 26168 -:0:TAG:VALUE 26169 26170 The ordering and number of these preamble lines will be augmented as 26171 `gcov' development progresses -- do not rely on them remaining 26172 unchanged. Use TAG to locate a particular preamble line. 26173 26174 The additional block information is of the form 26175 26176 TAG INFORMATION 26177 26178 The INFORMATION is human readable, but designed to be simple enough 26179 for machine parsing too. 26180 26181 When printing percentages, 0% and 100% are only printed when the values 26182 are _exactly_ 0% and 100% respectively. Other values which would 26183 conventionally be rounded to 0% or 100% are instead printed as the 26184 nearest non-boundary value. 26185 26186 When using `gcov', you must first compile your program with two 26187 special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 26188 compiler to generate additional information needed by gcov (basically a 26189 flow graph of the program) and also includes additional code in the 26190 object files for generating the extra profiling information needed by 26191 gcov. These additional files are placed in the directory where the 26192 object file is located. 26193 26194 Running the program will cause profile output to be generated. For 26195 each source file compiled with `-fprofile-arcs', an accompanying 26196 `.gcda' file will be placed in the object file directory. 26197 26198 Running `gcov' with your program's source file names as arguments will 26199 now produce a listing of the code along with frequency of execution for 26200 each line. For example, if your program is called `tmp.c', this is 26201 what you see when you use the basic `gcov' facility: 26202 26203 $ gcc -fprofile-arcs -ftest-coverage tmp.c 26204 $ a.out 26205 $ gcov tmp.c 26206 90.00% of 10 source lines executed in file tmp.c 26207 Creating tmp.c.gcov. 26208 26209 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 26210 26211 -: 0:Source:tmp.c 26212 -: 0:Graph:tmp.gcno 26213 -: 0:Data:tmp.gcda 26214 -: 0:Runs:1 26215 -: 0:Programs:1 26216 -: 1:#include <stdio.h> 26217 -: 2: 26218 -: 3:int main (void) 26219 1: 4:{ 26220 1: 5: int i, total; 26221 -: 6: 26222 1: 7: total = 0; 26223 -: 8: 26224 11: 9: for (i = 0; i < 10; i++) 26225 10: 10: total += i; 26226 -: 11: 26227 1: 12: if (total != 45) 26228 #####: 13: printf ("Failure\n"); 26229 -: 14: else 26230 1: 15: printf ("Success\n"); 26231 1: 16: return 0; 26232 -: 17:} 26233 26234 When you use the `-a' option, you will get individual block counts, 26235 and the output looks like this: 26236 26237 -: 0:Source:tmp.c 26238 -: 0:Graph:tmp.gcno 26239 -: 0:Data:tmp.gcda 26240 -: 0:Runs:1 26241 -: 0:Programs:1 26242 -: 1:#include <stdio.h> 26243 -: 2: 26244 -: 3:int main (void) 26245 1: 4:{ 26246 1: 4-block 0 26247 1: 5: int i, total; 26248 -: 6: 26249 1: 7: total = 0; 26250 -: 8: 26251 11: 9: for (i = 0; i < 10; i++) 26252 11: 9-block 0 26253 10: 10: total += i; 26254 10: 10-block 0 26255 -: 11: 26256 1: 12: if (total != 45) 26257 1: 12-block 0 26258 #####: 13: printf ("Failure\n"); 26259 $$$$$: 13-block 0 26260 -: 14: else 26261 1: 15: printf ("Success\n"); 26262 1: 15-block 0 26263 1: 16: return 0; 26264 1: 16-block 0 26265 -: 17:} 26266 26267 In this mode, each basic block is only shown on one line - the last 26268 line of the block. A multi-line block will only contribute to the 26269 execution count of that last line, and other lines will not be shown to 26270 contain code, unless previous blocks end on those lines. The total 26271 execution count of a line is shown and subsequent lines show the 26272 execution counts for individual blocks that end on that line. After 26273 each block, the branch and call counts of the block will be shown, if 26274 the `-b' option is given. 26275 26276 Because of the way GCC instruments calls, a call count can be shown 26277 after a line with no individual blocks. As you can see, line 13 26278 contains a basic block that was not executed. 26279 26280 When you use the `-b' option, your output looks like this: 26281 26282 $ gcov -b tmp.c 26283 90.00% of 10 source lines executed in file tmp.c 26284 80.00% of 5 branches executed in file tmp.c 26285 80.00% of 5 branches taken at least once in file tmp.c 26286 50.00% of 2 calls executed in file tmp.c 26287 Creating tmp.c.gcov. 26288 26289 Here is a sample of a resulting `tmp.c.gcov' file: 26290 26291 -: 0:Source:tmp.c 26292 -: 0:Graph:tmp.gcno 26293 -: 0:Data:tmp.gcda 26294 -: 0:Runs:1 26295 -: 0:Programs:1 26296 -: 1:#include <stdio.h> 26297 -: 2: 26298 -: 3:int main (void) 26299 function main called 1 returned 1 blocks executed 75% 26300 1: 4:{ 26301 1: 5: int i, total; 26302 -: 6: 26303 1: 7: total = 0; 26304 -: 8: 26305 11: 9: for (i = 0; i < 10; i++) 26306 branch 0 taken 91% (fallthrough) 26307 branch 1 taken 9% 26308 10: 10: total += i; 26309 -: 11: 26310 1: 12: if (total != 45) 26311 branch 0 taken 0% (fallthrough) 26312 branch 1 taken 100% 26313 #####: 13: printf ("Failure\n"); 26314 call 0 never executed 26315 -: 14: else 26316 1: 15: printf ("Success\n"); 26317 call 0 called 1 returned 100% 26318 1: 16: return 0; 26319 -: 17:} 26320 26321 For each function, a line is printed showing how many times the 26322 function is called, how many times it returns and what percentage of the 26323 function's blocks were executed. 26324 26325 For each basic block, a line is printed after the last line of the 26326 basic block describing the branch or call that ends the basic block. 26327 There can be multiple branches and calls listed for a single source 26328 line if there are multiple basic blocks that end on that line. In this 26329 case, the branches and calls are each given a number. There is no 26330 simple way to map these branches and calls back to source constructs. 26331 In general, though, the lowest numbered branch or call will correspond 26332 to the leftmost construct on the source line. 26333 26334 For a branch, if it was executed at least once, then a percentage 26335 indicating the number of times the branch was taken divided by the 26336 number of times the branch was executed will be printed. Otherwise, the 26337 message "never executed" is printed. 26338 26339 For a call, if it was executed at least once, then a percentage 26340 indicating the number of times the call returned divided by the number 26341 of times the call was executed will be printed. This will usually be 26342 100%, but may be less for functions that call `exit' or `longjmp', and 26343 thus may not return every time they are called. 26344 26345 The execution counts are cumulative. If the example program were 26346 executed again without removing the `.gcda' file, the count for the 26347 number of times each line in the source was executed would be added to 26348 the results of the previous run(s). This is potentially useful in 26349 several ways. For example, it could be used to accumulate data over a 26350 number of program runs as part of a test verification suite, or to 26351 provide more accurate long-term information over a large number of 26352 program runs. 26353 26354 The data in the `.gcda' files is saved immediately before the program 26355 exits. For each source file compiled with `-fprofile-arcs', the 26356 profiling code first attempts to read in an existing `.gcda' file; if 26357 the file doesn't match the executable (differing number of basic block 26358 counts) it will ignore the contents of the file. It then adds in the 26359 new execution counts and finally writes the data to the file. 26360 26361 26362 File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 26363 26364 9.3 Using `gcov' with GCC Optimization 26365 ====================================== 26366 26367 If you plan to use `gcov' to help optimize your code, you must first 26368 compile your program with two special GCC options: `-fprofile-arcs 26369 -ftest-coverage'. Aside from that, you can use any other GCC options; 26370 but if you want to prove that every single line in your program was 26371 executed, you should not compile with optimization at the same time. 26372 On some machines the optimizer can eliminate some simple code lines by 26373 combining them with other lines. For example, code like this: 26374 26375 if (a != b) 26376 c = 1; 26377 else 26378 c = 0; 26379 26380 can be compiled into one instruction on some machines. In this case, 26381 there is no way for `gcov' to calculate separate execution counts for 26382 each line because there isn't separate code for each line. Hence the 26383 `gcov' output looks like this if you compiled the program with 26384 optimization: 26385 26386 100: 12:if (a != b) 26387 100: 13: c = 1; 26388 100: 14:else 26389 100: 15: c = 0; 26390 26391 The output shows that this block of code, combined by optimization, 26392 executed 100 times. In one sense this result is correct, because there 26393 was only one instruction representing all four of these lines. However, 26394 the output does not indicate how many times the result was 0 and how 26395 many times the result was 1. 26396 26397 Inlineable functions can create unexpected line counts. Line counts 26398 are shown for the source code of the inlineable function, but what is 26399 shown depends on where the function is inlined, or if it is not inlined 26400 at all. 26401 26402 If the function is not inlined, the compiler must emit an out of line 26403 copy of the function, in any object file that needs it. If `fileA.o' 26404 and `fileB.o' both contain out of line bodies of a particular 26405 inlineable function, they will also both contain coverage counts for 26406 that function. When `fileA.o' and `fileB.o' are linked together, the 26407 linker will, on many systems, select one of those out of line bodies 26408 for all calls to that function, and remove or ignore the other. 26409 Unfortunately, it will not remove the coverage counters for the unused 26410 function body. Hence when instrumented, all but one use of that 26411 function will show zero counts. 26412 26413 If the function is inlined in several places, the block structure in 26414 each location might not be the same. For instance, a condition might 26415 now be calculable at compile time in some instances. Because the 26416 coverage of all the uses of the inline function will be shown for the 26417 same source lines, the line counts themselves might seem inconsistent. 26418 26419 26420 File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 26421 26422 9.4 Brief description of `gcov' data files 26423 ========================================== 26424 26425 `gcov' uses two files for profiling. The names of these files are 26426 derived from the original _object_ file by substituting the file suffix 26427 with either `.gcno', or `.gcda'. All of these files are placed in the 26428 same directory as the object file, and contain data stored in a 26429 platform-independent format. 26430 26431 The `.gcno' file is generated when the source file is compiled with 26432 the GCC `-ftest-coverage' option. It contains information to 26433 reconstruct the basic block graphs and assign source line numbers to 26434 blocks. 26435 26436 The `.gcda' file is generated when a program containing object files 26437 built with the GCC `-fprofile-arcs' option is executed. A separate 26438 `.gcda' file is created for each object file compiled with this option. 26439 It contains arc transition counts, and some summary information. 26440 26441 The full details of the file format is specified in `gcov-io.h', and 26442 functions provided in that header file should be used to access the 26443 coverage files. 26444 26445 26446 File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 26447 26448 9.5 Data file relocation to support cross-profiling 26449 =================================================== 26450 26451 Running the program will cause profile output to be generated. For each 26452 source file compiled with `-fprofile-arcs', an accompanying `.gcda' 26453 file will be placed in the object file directory. That implicitly 26454 requires running the program on the same system as it was built or 26455 having the same absolute directory structure on the target system. The 26456 program will try to create the needed directory structure, if it is not 26457 already present. 26458 26459 To support cross-profiling, a program compiled with `-fprofile-arcs' 26460 can relocate the data files based on two environment variables: 26461 26462 * GCOV_PREFIX contains the prefix to add to the absolute paths in 26463 the object file. Prefix must be absolute as well, otherwise its 26464 value is ignored. The default is no prefix. 26465 26466 * GCOV_PREFIX_STRIP indicates the how many initial directory names 26467 to strip off the hardwired absolute paths. Default value is 0. 26468 26469 _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is 26470 undefined, empty or non-absolute. 26471 26472 For example, if the object file `/user/build/foo.o' was built with 26473 `-fprofile-arcs', the final executable will try to create the data file 26474 `/user/build/foo.gcda' when running on the target system. This will 26475 fail if the corresponding directory does not exist and it is unable to 26476 create it. This can be overcome by, for example, setting the 26477 environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 26478 Such a setting will name the data file `/target/run/build/foo.gcda'. 26479 26480 You must move the data files to the expected directory tree in order to 26481 use them for profile directed optimizations (`--use-profile'), or to 26482 use the `gcov' tool. 26483 26484 26485 File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 26486 26487 10 Known Causes of Trouble with GCC 26488 *********************************** 26489 26490 This section describes known problems that affect users of GCC. Most 26491 of these are not GCC bugs per se--if they were, we would fix them. But 26492 the result for a user may be like the result of a bug. 26493 26494 Some of these problems are due to bugs in other software, some are 26495 missing features that are too much work to add, and some are places 26496 where people's opinions differ as to what is best. 26497 26498 * Menu: 26499 26500 * Actual Bugs:: Bugs we will fix later. 26501 * Cross-Compiler Problems:: Common problems of cross compiling with GCC. 26502 * Interoperation:: Problems using GCC with other compilers, 26503 and with certain linkers, assemblers and debuggers. 26504 * Incompatibilities:: GCC is incompatible with traditional C. 26505 * Fixed Headers:: GCC uses corrected versions of system header files. 26506 This is necessary, but doesn't always work smoothly. 26507 * Standard Libraries:: GCC uses the system C library, which might not be 26508 compliant with the ISO C standard. 26509 * Disappointments:: Regrettable things we can't change, but not quite bugs. 26510 * C++ Misunderstandings:: Common misunderstandings with GNU C++. 26511 * Protoize Caveats:: Things to watch out for when using `protoize'. 26512 * Non-bugs:: Things we think are right, but some others disagree. 26513 * Warnings and Errors:: Which problems in your code get warnings, 26514 and which get errors. 26515 26516 26517 File: gcc.info, Node: Actual Bugs, Next: Cross-Compiler Problems, Up: Trouble 26518 26519 10.1 Actual Bugs We Haven't Fixed Yet 26520 ===================================== 26521 26522 * The `fixincludes' script interacts badly with automounters; if the 26523 directory of system header files is automounted, it tends to be 26524 unmounted while `fixincludes' is running. This would seem to be a 26525 bug in the automounter. We don't know any good way to work around 26526 it. 26527 26528 * The `fixproto' script will sometimes add prototypes for the 26529 `sigsetjmp' and `siglongjmp' functions that reference the 26530 `jmp_buf' type before that type is defined. To work around this, 26531 edit the offending file and place the typedef in front of the 26532 prototypes. 26533 26534 26535 File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Actual Bugs, Up: Trouble 26536 26537 10.2 Cross-Compiler Problems 26538 ============================ 26539 26540 You may run into problems with cross compilation on certain machines, 26541 for several reasons. 26542 26543 * At present, the program `mips-tfile' which adds debug support to 26544 object files on MIPS systems does not work in a cross compile 26545 environment. 26546 26547 26548 File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Cross-Compiler Problems, Up: Trouble 26549 26550 10.3 Interoperation 26551 =================== 26552 26553 This section lists various difficulties encountered in using GCC 26554 together with other compilers or with the assemblers, linkers, 26555 libraries and debuggers on certain systems. 26556 26557 * On many platforms, GCC supports a different ABI for C++ than do 26558 other compilers, so the object files compiled by GCC cannot be 26559 used with object files generated by another C++ compiler. 26560 26561 An area where the difference is most apparent is name mangling. 26562 The use of different name mangling is intentional, to protect you 26563 from more subtle problems. Compilers differ as to many internal 26564 details of C++ implementation, including: how class instances are 26565 laid out, how multiple inheritance is implemented, and how virtual 26566 function calls are handled. If the name encoding were made the 26567 same, your programs would link against libraries provided from 26568 other compilers--but the programs would then crash when run. 26569 Incompatible libraries are then detected at link time, rather than 26570 at run time. 26571 26572 * On some BSD systems, including some versions of Ultrix, use of 26573 profiling causes static variable destructors (currently used only 26574 in C++) not to be run. 26575 26576 * On some SGI systems, when you use `-lgl_s' as an option, it gets 26577 translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this 26578 does not happen when you use GCC. You must specify all three 26579 options explicitly. 26580 26581 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 26582 boundary, and it expects every `double' to be so aligned. The Sun 26583 compiler usually gives `double' values 8-byte alignment, with one 26584 exception: function arguments of type `double' may not be aligned. 26585 26586 As a result, if a function compiled with Sun CC takes the address 26587 of an argument of type `double' and passes this pointer of type 26588 `double *' to a function compiled with GCC, dereferencing the 26589 pointer may cause a fatal signal. 26590 26591 One way to solve this problem is to compile your entire program 26592 with GCC. Another solution is to modify the function that is 26593 compiled with Sun CC to copy the argument into a local variable; 26594 local variables are always properly aligned. A third solution is 26595 to modify the function that uses the pointer to dereference it via 26596 the following function `access_double' instead of directly with 26597 `*': 26598 26599 inline double 26600 access_double (double *unaligned_ptr) 26601 { 26602 union d2i { double d; int i[2]; }; 26603 26604 union d2i *p = (union d2i *) unaligned_ptr; 26605 union d2i u; 26606 26607 u.i[0] = p->i[0]; 26608 u.i[1] = p->i[1]; 26609 26610 return u.d; 26611 } 26612 26613 Storing into the pointer can be done likewise with the same union. 26614 26615 * On Solaris, the `malloc' function in the `libmalloc.a' library may 26616 allocate memory that is only 4 byte aligned. Since GCC on the 26617 SPARC assumes that doubles are 8 byte aligned, this may result in a 26618 fatal signal if doubles are stored in memory allocated by the 26619 `libmalloc.a' library. 26620 26621 The solution is to not use the `libmalloc.a' library. Use instead 26622 `malloc' and related functions from `libc.a'; they do not have 26623 this problem. 26624 26625 * On the HP PA machine, ADB sometimes fails to work on functions 26626 compiled with GCC. Specifically, it fails to work on functions 26627 that use `alloca' or variable-size arrays. This is because GCC 26628 doesn't generate HP-UX unwind descriptors for such functions. It 26629 may even be impossible to generate them. 26630 26631 * Debugging (`-g') is not supported on the HP PA machine, unless you 26632 use the preliminary GNU tools. 26633 26634 * Taking the address of a label may generate errors from the HP-UX 26635 PA assembler. GAS for the PA does not have this problem. 26636 26637 * Using floating point parameters for indirect calls to static 26638 functions will not work when using the HP assembler. There simply 26639 is no way for GCC to specify what registers hold arguments for 26640 static functions when using the HP assembler. GAS for the PA does 26641 not have this problem. 26642 26643 * In extremely rare cases involving some very large functions you may 26644 receive errors from the HP linker complaining about an out of 26645 bounds unconditional branch offset. This used to occur more often 26646 in previous versions of GCC, but is now exceptionally rare. If 26647 you should run into it, you can work around by making your 26648 function smaller. 26649 26650 * GCC compiled code sometimes emits warnings from the HP-UX 26651 assembler of the form: 26652 26653 (warning) Use of GR3 when 26654 frame >= 8192 may cause conflict. 26655 26656 These warnings are harmless and can be safely ignored. 26657 26658 * In extremely rare cases involving some very large functions you may 26659 receive errors from the AIX Assembler complaining about a 26660 displacement that is too large. If you should run into it, you 26661 can work around by making your function smaller. 26662 26663 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 26664 semantics which merges global symbols between libraries and 26665 applications, especially necessary for C++ streams functionality. 26666 This is not the default behavior of AIX shared libraries and 26667 dynamic linking. `libstdc++.a' is built on AIX with 26668 "runtime-linking" enabled so that symbol merging can occur. To 26669 utilize this feature, the application linked with `libstdc++.a' 26670 must include the `-Wl,-brtl' flag on the link line. G++ cannot 26671 impose this because this option may interfere with the semantics 26672 of the user program and users may not always use `g++' to link his 26673 or her application. Applications are not required to use the 26674 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 26675 library which is not dependent on the symbol merging semantics 26676 will continue to function correctly. 26677 26678 * An application can interpose its own definition of functions for 26679 functions invoked by `libstdc++.a' with "runtime-linking" enabled 26680 on AIX. To accomplish this the application must be linked with 26681 "runtime-linking" option and the functions explicitly must be 26682 exported by the application (`-Wl,-brtl,-bE:exportfile'). 26683 26684 * AIX on the RS/6000 provides support (NLS) for environments outside 26685 of the United States. Compilers and assemblers use NLS to support 26686 locale-specific representations of various objects including 26687 floating-point numbers (`.' vs `,' for separating decimal 26688 fractions). There have been problems reported where the library 26689 linked with GCC does not produce the same floating-point formats 26690 that the assembler accepts. If you have this problem, set the 26691 `LANG' environment variable to `C' or `En_US'. 26692 26693 * Even if you specify `-fdollars-in-identifiers', you cannot 26694 successfully use `$' in identifiers on the RS/6000 due to a 26695 restriction in the IBM assembler. GAS supports these identifiers. 26696 26697 * On Ultrix, the Fortran compiler expects registers 2 through 5 to 26698 be saved by function calls. However, the C compiler uses 26699 conventions compatible with BSD Unix: registers 2 through 5 may be 26700 clobbered by function calls. 26701 26702 GCC uses the same convention as the Ultrix C compiler. You can use 26703 these options to produce code compatible with the Fortran compiler: 26704 26705 -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5 26706 26707 26708 File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 26709 26710 10.4 Incompatibilities of GCC 26711 ============================= 26712 26713 There are several noteworthy incompatibilities between GNU C and K&R 26714 (non-ISO) versions of C. 26715 26716 * GCC normally makes string constants read-only. If several 26717 identical-looking string constants are used, GCC stores only one 26718 copy of the string. 26719 26720 One consequence is that you cannot call `mktemp' with a string 26721 constant argument. The function `mktemp' always alters the string 26722 its argument points to. 26723 26724 Another consequence is that `sscanf' does not work on some very 26725 old systems when passed a string constant as its format control 26726 string or input. This is because `sscanf' incorrectly tries to 26727 write into the string constant. Likewise `fscanf' and `scanf'. 26728 26729 The solution to these problems is to change the program to use 26730 `char'-array variables with initialization strings for these 26731 purposes instead of string constants. 26732 26733 * `-2147483648' is positive. 26734 26735 This is because 2147483648 cannot fit in the type `int', so 26736 (following the ISO C rules) its data type is `unsigned long int'. 26737 Negating this value yields 2147483648 again. 26738 26739 * GCC does not substitute macro arguments when they appear inside of 26740 string constants. For example, the following macro in GCC 26741 26742 #define foo(a) "a" 26743 26744 will produce output `"a"' regardless of what the argument A is. 26745 26746 * When you use `setjmp' and `longjmp', the only automatic variables 26747 guaranteed to remain valid are those declared `volatile'. This is 26748 a consequence of automatic register allocation. Consider this 26749 function: 26750 26751 jmp_buf j; 26752 26753 foo () 26754 { 26755 int a, b; 26756 26757 a = fun1 (); 26758 if (setjmp (j)) 26759 return a; 26760 26761 a = fun2 (); 26762 /* `longjmp (j)' may occur in `fun3'. */ 26763 return a + fun3 (); 26764 } 26765 26766 Here `a' may or may not be restored to its first value when the 26767 `longjmp' occurs. If `a' is allocated in a register, then its 26768 first value is restored; otherwise, it keeps the last value stored 26769 in it. 26770 26771 If you use the `-W' option with the `-O' option, you will get a 26772 warning when GCC thinks such a problem might be possible. 26773 26774 * Programs that use preprocessing directives in the middle of macro 26775 arguments do not work with GCC. For example, a program like this 26776 will not work: 26777 26778 foobar ( 26779 #define luser 26780 hack) 26781 26782 ISO C does not permit such a construct. 26783 26784 * K&R compilers allow comments to cross over an inclusion boundary 26785 (i.e. started in an include file and ended in the including file). 26786 26787 * Declarations of external variables and functions within a block 26788 apply only to the block containing the declaration. In other 26789 words, they have the same scope as any other declaration in the 26790 same place. 26791 26792 In some other C compilers, a `extern' declaration affects all the 26793 rest of the file even if it happens within a block. 26794 26795 * In traditional C, you can combine `long', etc., with a typedef 26796 name, as shown here: 26797 26798 typedef int foo; 26799 typedef long foo bar; 26800 26801 In ISO C, this is not allowed: `long' and other type modifiers 26802 require an explicit `int'. 26803 26804 * PCC allows typedef names to be used as function parameters. 26805 26806 * Traditional C allows the following erroneous pair of declarations 26807 to appear together in a given scope: 26808 26809 typedef int foo; 26810 typedef foo foo; 26811 26812 * GCC treats all characters of identifiers as significant. 26813 According to K&R-1 (2.2), "No more than the first eight characters 26814 are significant, although more may be used.". Also according to 26815 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 26816 the first character must be a letter. The underscore _ counts as 26817 a letter.", but GCC also allows dollar signs in identifiers. 26818 26819 * PCC allows whitespace in the middle of compound assignment 26820 operators such as `+='. GCC, following the ISO standard, does not 26821 allow this. 26822 26823 * GCC complains about unterminated character constants inside of 26824 preprocessing conditionals that fail. Some programs have English 26825 comments enclosed in conditionals that are guaranteed to fail; if 26826 these comments contain apostrophes, GCC will probably report an 26827 error. For example, this code would produce an error: 26828 26829 #if 0 26830 You can't expect this to work. 26831 #endif 26832 26833 The best solution to such a problem is to put the text into an 26834 actual C comment delimited by `/*...*/'. 26835 26836 * Many user programs contain the declaration `long time ();'. In the 26837 past, the system header files on many systems did not actually 26838 declare `time', so it did not matter what type your program 26839 declared it to return. But in systems with ISO C headers, `time' 26840 is declared to return `time_t', and if that is not the same as 26841 `long', then `long time ();' is erroneous. 26842 26843 The solution is to change your program to use appropriate system 26844 headers (`<time.h>' on systems with ISO C headers) and not to 26845 declare `time' if the system header files declare it, or failing 26846 that to use `time_t' as the return type of `time'. 26847 26848 * When compiling functions that return `float', PCC converts it to a 26849 double. GCC actually returns a `float'. If you are concerned 26850 with PCC compatibility, you should declare your functions to return 26851 `double'; you might as well say what you mean. 26852 26853 * When compiling functions that return structures or unions, GCC 26854 output code normally uses a method different from that used on most 26855 versions of Unix. As a result, code compiled with GCC cannot call 26856 a structure-returning function compiled with PCC, and vice versa. 26857 26858 The method used by GCC is as follows: a structure or union which is 26859 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 26860 union with any other size is stored into an address supplied by 26861 the caller (usually in a special, fixed register, but on some 26862 machines it is passed on the stack). The target hook 26863 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 26864 26865 By contrast, PCC on most target machines returns structures and 26866 unions of any size by copying the data into an area of static 26867 storage, and then returning the address of that storage as if it 26868 were a pointer value. The caller must copy the data from that 26869 memory area to the place where the value is wanted. GCC does not 26870 use this method because it is slower and nonreentrant. 26871 26872 On some newer machines, PCC uses a reentrant convention for all 26873 structure and union returning. GCC on most of these machines uses 26874 a compatible convention when returning structures and unions in 26875 memory, but still returns small structures and unions in registers. 26876 26877 You can tell GCC to use a compatible convention for all structure 26878 and union returning with the option `-fpcc-struct-return'. 26879 26880 * GCC complains about program fragments such as `0x74ae-0x4000' 26881 which appear to be two hexadecimal constants separated by the minus 26882 operator. Actually, this string is a single "preprocessing token". 26883 Each such token must correspond to one token in C. Since this 26884 does not, GCC prints an error message. Although it may appear 26885 obvious that what is meant is an operator and two values, the ISO 26886 C standard specifically requires that this be treated as erroneous. 26887 26888 A "preprocessing token" is a "preprocessing number" if it begins 26889 with a digit and is followed by letters, underscores, digits, 26890 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 26891 character sequences. (In strict C89 mode, the sequences `p+', 26892 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 26893 26894 To make the above program fragment valid, place whitespace in 26895 front of the minus sign. This whitespace will end the 26896 preprocessing number. 26897 26898 26899 File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 26900 26901 10.5 Fixed Header Files 26902 ======================= 26903 26904 GCC needs to install corrected versions of some system header files. 26905 This is because most target systems have some header files that won't 26906 work with GCC unless they are changed. Some have bugs, some are 26907 incompatible with ISO C, and some depend on special features of other 26908 compilers. 26909 26910 Installing GCC automatically creates and installs the fixed header 26911 files, by running a program called `fixincludes'. Normally, you don't 26912 need to pay attention to this. But there are cases where it doesn't do 26913 the right thing automatically. 26914 26915 * If you update the system's header files, such as by installing a 26916 new system version, the fixed header files of GCC are not 26917 automatically updated. They can be updated using the `mkheaders' 26918 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 26919 26920 * On some systems, header file directories contain machine-specific 26921 symbolic links in certain places. This makes it possible to share 26922 most of the header files among hosts running the same version of 26923 the system on different machine models. 26924 26925 The programs that fix the header files do not understand this 26926 special way of using symbolic links; therefore, the directory of 26927 fixed header files is good only for the machine model used to 26928 build it. 26929 26930 It is possible to make separate sets of fixed header files for the 26931 different machine models, and arrange a structure of symbolic 26932 links so as to use the proper set, but you'll have to do this by 26933 hand. 26934 26935 26936 File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 26937 26938 10.6 Standard Libraries 26939 ======================= 26940 26941 GCC by itself attempts to be a conforming freestanding implementation. 26942 *Note Language Standards Supported by GCC: Standards, for details of 26943 what this means. Beyond the library facilities required of such an 26944 implementation, the rest of the C library is supplied by the vendor of 26945 the operating system. If that C library doesn't conform to the C 26946 standards, then your programs might get warnings (especially when using 26947 `-Wall') that you don't expect. 26948 26949 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 26950 while the C standard says that `sprintf' returns an `int'. The 26951 `fixincludes' program could make the prototype for this function match 26952 the Standard, but that would be wrong, since the function will still 26953 return `char *'. 26954 26955 If you need a Standard compliant library, then you need to find one, as 26956 GCC does not provide one. The GNU C library (called `glibc') provides 26957 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 26958 HURD-based GNU systems; no recent version of it supports other systems, 26959 though some very old versions did. Version 2.2 of the GNU C library 26960 includes nearly complete C99 support. You could also ask your 26961 operating system vendor if newer libraries are available. 26962 26963 26964 File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 26965 26966 10.7 Disappointments and Misunderstandings 26967 ========================================== 26968 26969 These problems are perhaps regrettable, but we don't know any practical 26970 way around them. 26971 26972 * Certain local variables aren't recognized by debuggers when you 26973 compile with optimization. 26974 26975 This occurs because sometimes GCC optimizes the variable out of 26976 existence. There is no way to tell the debugger how to compute the 26977 value such a variable "would have had", and it is not clear that 26978 would be desirable anyway. So GCC simply does not mention the 26979 eliminated variable when it writes debugging information. 26980 26981 You have to expect a certain amount of disagreement between the 26982 executable and your source code, when you use optimization. 26983 26984 * Users often think it is a bug when GCC reports an error for code 26985 like this: 26986 26987 int foo (struct mumble *); 26988 26989 struct mumble { ... }; 26990 26991 int foo (struct mumble *x) 26992 { ... } 26993 26994 This code really is erroneous, because the scope of `struct 26995 mumble' in the prototype is limited to the argument list 26996 containing it. It does not refer to the `struct mumble' defined 26997 with file scope immediately below--they are two unrelated types 26998 with similar names in different scopes. 26999 27000 But in the definition of `foo', the file-scope type is used 27001 because that is available to be inherited. Thus, the definition 27002 and the prototype do not match, and you get an error. 27003 27004 This behavior may seem silly, but it's what the ISO standard 27005 specifies. It is easy enough for you to make your code work by 27006 moving the definition of `struct mumble' above the prototype. 27007 It's not worth being incompatible with ISO C just to avoid an 27008 error for the example shown above. 27009 27010 * Accesses to bit-fields even in volatile objects works by accessing 27011 larger objects, such as a byte or a word. You cannot rely on what 27012 size of object is accessed in order to read or write the 27013 bit-field; it may even vary for a given bit-field according to the 27014 precise usage. 27015 27016 If you care about controlling the amount of memory that is 27017 accessed, use volatile but do not use bit-fields. 27018 27019 * GCC comes with shell scripts to fix certain known problems in 27020 system header files. They install corrected copies of various 27021 header files in a special directory where only GCC will normally 27022 look for them. The scripts adapt to various systems by searching 27023 all the system header files for the problem cases that we know 27024 about. 27025 27026 If new system header files are installed, nothing automatically 27027 arranges to update the corrected header files. They can be 27028 updated using the `mkheaders' script installed in 27029 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 27030 27031 * On 68000 and x86 systems, for instance, you can get paradoxical 27032 results if you test the precise values of floating point numbers. 27033 For example, you can find that a floating point value which is not 27034 a NaN is not equal to itself. This results from the fact that the 27035 floating point registers hold a few more bits of precision than 27036 fit in a `double' in memory. Compiled code moves values between 27037 memory and floating point registers at its convenience, and moving 27038 them into memory truncates them. 27039 27040 You can partially avoid this problem by using the `-ffloat-store' 27041 option (*note Optimize Options::). 27042 27043 * On AIX and other platforms without weak symbol support, templates 27044 need to be instantiated explicitly and symbols for static members 27045 of templates will not be generated. 27046 27047 * On AIX, GCC scans object files and library archives for static 27048 constructors and destructors when linking an application before the 27049 linker prunes unreferenced symbols. This is necessary to prevent 27050 the AIX linker from mistakenly assuming that static constructor or 27051 destructor are unused and removing them before the scanning can 27052 occur. All static constructors and destructors found will be 27053 referenced even though the modules in which they occur may not be 27054 used by the program. This may lead to both increased executable 27055 size and unexpected symbol references. 27056 27057 27058 File: gcc.info, Node: C++ Misunderstandings, Next: Protoize Caveats, Prev: Disappointments, Up: Trouble 27059 27060 10.8 Common Misunderstandings with GNU C++ 27061 ========================================== 27062 27063 C++ is a complex language and an evolving one, and its standard 27064 definition (the ISO C++ standard) was only recently completed. As a 27065 result, your C++ compiler may occasionally surprise you, even when its 27066 behavior is correct. This section discusses some areas that frequently 27067 give rise to questions of this sort. 27068 27069 * Menu: 27070 27071 * Static Definitions:: Static member declarations are not definitions 27072 * Name lookup:: Name lookup, templates, and accessing members of base classes 27073 * Temporaries:: Temporaries may vanish before you expect 27074 * Copy Assignment:: Copy Assignment operators copy virtual bases twice 27075 27076 27077 File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 27078 27079 10.8.1 Declare _and_ Define Static Members 27080 ------------------------------------------ 27081 27082 When a class has static data members, it is not enough to _declare_ the 27083 static member; you must also _define_ it. For example: 27084 27085 class Foo 27086 { 27087 ... 27088 void method(); 27089 static int bar; 27090 }; 27091 27092 This declaration only establishes that the class `Foo' has an `int' 27093 named `Foo::bar', and a member function named `Foo::method'. But you 27094 still need to define _both_ `method' and `bar' elsewhere. According to 27095 the ISO standard, you must supply an initializer in one (and only one) 27096 source file, such as: 27097 27098 int Foo::bar = 0; 27099 27100 Other C++ compilers may not correctly implement the standard behavior. 27101 As a result, when you switch to `g++' from one of these compilers, you 27102 may discover that a program that appeared to work correctly in fact 27103 does not conform to the standard: `g++' reports as undefined symbols 27104 any static data members that lack definitions. 27105 27106 27107 File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 27108 27109 10.8.2 Name lookup, templates, and accessing members of base classes 27110 -------------------------------------------------------------------- 27111 27112 The C++ standard prescribes that all names that are not dependent on 27113 template parameters are bound to their present definitions when parsing 27114 a template function or class.(1) Only names that are dependent are 27115 looked up at the point of instantiation. For example, consider 27116 27117 void foo(double); 27118 27119 struct A { 27120 template <typename T> 27121 void f () { 27122 foo (1); // 1 27123 int i = N; // 2 27124 T t; 27125 t.bar(); // 3 27126 foo (t); // 4 27127 } 27128 27129 static const int N; 27130 }; 27131 27132 Here, the names `foo' and `N' appear in a context that does not depend 27133 on the type of `T'. The compiler will thus require that they are 27134 defined in the context of use in the template, not only before the 27135 point of instantiation, and will here use `::foo(double)' and `A::N', 27136 respectively. In particular, it will convert the integer value to a 27137 `double' when passing it to `::foo(double)'. 27138 27139 Conversely, `bar' and the call to `foo' in the fourth marked line are 27140 used in contexts that do depend on the type of `T', so they are only 27141 looked up at the point of instantiation, and you can provide 27142 declarations for them after declaring the template, but before 27143 instantiating it. In particular, if you instantiate `A::f<int>', the 27144 last line will call an overloaded `::foo(int)' if one was provided, 27145 even if after the declaration of `struct A'. 27146 27147 This distinction between lookup of dependent and non-dependent names is 27148 called two-stage (or dependent) name lookup. G++ implements it since 27149 version 3.4. 27150 27151 Two-stage name lookup sometimes leads to situations with behavior 27152 different from non-template codes. The most common is probably this: 27153 27154 template <typename T> struct Base { 27155 int i; 27156 }; 27157 27158 template <typename T> struct Derived : public Base<T> { 27159 int get_i() { return i; } 27160 }; 27161 27162 In `get_i()', `i' is not used in a dependent context, so the compiler 27163 will look for a name declared at the enclosing namespace scope (which 27164 is the global scope here). It will not look into the base class, since 27165 that is dependent and you may declare specializations of `Base' even 27166 after declaring `Derived', so the compiler can't really know what `i' 27167 would refer to. If there is no global variable `i', then you will get 27168 an error message. 27169 27170 In order to make it clear that you want the member of the base class, 27171 you need to defer lookup until instantiation time, at which the base 27172 class is known. For this, you need to access `i' in a dependent 27173 context, by either using `this->i' (remember that `this' is of type 27174 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 27175 Alternatively, `Base<T>::i' might be brought into scope by a 27176 `using'-declaration. 27177 27178 Another, similar example involves calling member functions of a base 27179 class: 27180 27181 template <typename T> struct Base { 27182 int f(); 27183 }; 27184 27185 template <typename T> struct Derived : Base<T> { 27186 int g() { return f(); }; 27187 }; 27188 27189 Again, the call to `f()' is not dependent on template arguments (there 27190 are no arguments that depend on the type `T', and it is also not 27191 otherwise specified that the call should be in a dependent context). 27192 Thus a global declaration of such a function must be available, since 27193 the one in the base class is not visible until instantiation time. The 27194 compiler will consequently produce the following error message: 27195 27196 x.cc: In member function `int Derived<T>::g()': 27197 x.cc:6: error: there are no arguments to `f' that depend on a template 27198 parameter, so a declaration of `f' must be available 27199 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 27200 allowing the use of an undeclared name is deprecated) 27201 27202 To make the code valid either use `this->f()', or `Base<T>::f()'. 27203 Using the `-fpermissive' flag will also let the compiler accept the 27204 code, by marking all function calls for which no declaration is visible 27205 at the time of definition of the template for later lookup at 27206 instantiation time, as if it were a dependent call. We do not 27207 recommend using `-fpermissive' to work around invalid code, and it will 27208 also only catch cases where functions in base classes are called, not 27209 where variables in base classes are used (as in the example above). 27210 27211 Note that some compilers (including G++ versions prior to 3.4) get 27212 these examples wrong and accept above code without an error. Those 27213 compilers do not implement two-stage name lookup correctly. 27214 27215 ---------- Footnotes ---------- 27216 27217 (1) The C++ standard just uses the term "dependent" for names that 27218 depend on the type or value of template parameters. This shorter term 27219 will also be used in the rest of this section. 27220 27221 27222 File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 27223 27224 10.8.3 Temporaries May Vanish Before You Expect 27225 ----------------------------------------------- 27226 27227 It is dangerous to use pointers or references to _portions_ of a 27228 temporary object. The compiler may very well delete the object before 27229 you expect it to, leaving a pointer to garbage. The most common place 27230 where this problem crops up is in classes like string classes, 27231 especially ones that define a conversion function to type `char *' or 27232 `const char *'--which is one reason why the standard `string' class 27233 requires you to call the `c_str' member function. However, any class 27234 that returns a pointer to some internal structure is potentially 27235 subject to this problem. 27236 27237 For example, a program may use a function `strfunc' that returns 27238 `string' objects, and another function `charfunc' that operates on 27239 pointers to `char': 27240 27241 string strfunc (); 27242 void charfunc (const char *); 27243 27244 void 27245 f () 27246 { 27247 const char *p = strfunc().c_str(); 27248 ... 27249 charfunc (p); 27250 ... 27251 charfunc (p); 27252 } 27253 27254 In this situation, it may seem reasonable to save a pointer to the C 27255 string returned by the `c_str' member function and use that rather than 27256 call `c_str' repeatedly. However, the temporary string created by the 27257 call to `strfunc' is destroyed after `p' is initialized, at which point 27258 `p' is left pointing to freed memory. 27259 27260 Code like this may run successfully under some other compilers, 27261 particularly obsolete cfront-based compilers that delete temporaries 27262 along with normal local variables. However, the GNU C++ behavior is 27263 standard-conforming, so if your program depends on late destruction of 27264 temporaries it is not portable. 27265 27266 The safe way to write such code is to give the temporary a name, which 27267 forces it to remain until the end of the scope of the name. For 27268 example: 27269 27270 const string& tmp = strfunc (); 27271 charfunc (tmp.c_str ()); 27272 27273 27274 File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 27275 27276 10.8.4 Implicit Copy-Assignment for Virtual Bases 27277 ------------------------------------------------- 27278 27279 When a base class is virtual, only one subobject of the base class 27280 belongs to each full object. Also, the constructors and destructors are 27281 invoked only once, and called from the most-derived class. However, 27282 such objects behave unspecified when being assigned. For example: 27283 27284 struct Base{ 27285 char *name; 27286 Base(char *n) : name(strdup(n)){} 27287 Base& operator= (const Base& other){ 27288 free (name); 27289 name = strdup (other.name); 27290 } 27291 }; 27292 27293 struct A:virtual Base{ 27294 int val; 27295 A():Base("A"){} 27296 }; 27297 27298 struct B:virtual Base{ 27299 int bval; 27300 B():Base("B"){} 27301 }; 27302 27303 struct Derived:public A, public B{ 27304 Derived():Base("Derived"){} 27305 }; 27306 27307 void func(Derived &d1, Derived &d2) 27308 { 27309 d1 = d2; 27310 } 27311 27312 The C++ standard specifies that `Base::Base' is only called once when 27313 constructing or copy-constructing a Derived object. It is unspecified 27314 whether `Base::operator=' is called more than once when the implicit 27315 copy-assignment for Derived objects is invoked (as it is inside `func' 27316 in the example). 27317 27318 G++ implements the "intuitive" algorithm for copy-assignment: assign 27319 all direct bases, then assign all members. In that algorithm, the 27320 virtual base subobject can be encountered more than once. In the 27321 example, copying proceeds in the following order: `val', `name' (via 27322 `strdup'), `bval', and `name' again. 27323 27324 If application code relies on copy-assignment, a user-defined 27325 copy-assignment operator removes any uncertainties. With such an 27326 operator, the application can define whether and how the virtual base 27327 subobject is assigned. 27328 27329 27330 File: gcc.info, Node: Protoize Caveats, Next: Non-bugs, Prev: C++ Misunderstandings, Up: Trouble 27331 27332 10.9 Caveats of using `protoize' 27333 ================================ 27334 27335 The conversion programs `protoize' and `unprotoize' can sometimes 27336 change a source file in a way that won't work unless you rearrange it. 27337 27338 * `protoize' can insert references to a type name or type tag before 27339 the definition, or in a file where they are not defined. 27340 27341 If this happens, compiler error messages should show you where the 27342 new references are, so fixing the file by hand is straightforward. 27343 27344 * There are some C constructs which `protoize' cannot figure out. 27345 For example, it can't determine argument types for declaring a 27346 pointer-to-function variable; this you must do by hand. `protoize' 27347 inserts a comment containing `???' each time it finds such a 27348 variable; so you can find all such variables by searching for this 27349 string. ISO C does not require declaring the argument types of 27350 pointer-to-function types. 27351 27352 * Using `unprotoize' can easily introduce bugs. If the program 27353 relied on prototypes to bring about conversion of arguments, these 27354 conversions will not take place in the program without prototypes. 27355 One case in which you can be sure `unprotoize' is safe is when you 27356 are removing prototypes that were made with `protoize'; if the 27357 program worked before without any prototypes, it will work again 27358 without them. 27359 27360 You can find all the places where this problem might occur by 27361 compiling the program with the `-Wconversion' option. It prints a 27362 warning whenever an argument is converted. 27363 27364 * Both conversion programs can be confused if there are macro calls 27365 in and around the text to be converted. In other words, the 27366 standard syntax for a declaration or definition must not result 27367 from expanding a macro. This problem is inherent in the design of 27368 C and cannot be fixed. If only a few functions have confusing 27369 macro calls, you can easily convert them manually. 27370 27371 * `protoize' cannot get the argument types for a function whose 27372 definition was not actually compiled due to preprocessing 27373 conditionals. When this happens, `protoize' changes nothing in 27374 regard to such a function. `protoize' tries to detect such 27375 instances and warn about them. 27376 27377 You can generally work around this problem by using `protoize' step 27378 by step, each time specifying a different set of `-D' options for 27379 compilation, until all of the functions have been converted. 27380 There is no automatic way to verify that you have got them all, 27381 however. 27382 27383 * Confusion may result if there is an occasion to convert a function 27384 declaration or definition in a region of source code where there 27385 is more than one formal parameter list present. Thus, attempts to 27386 convert code containing multiple (conditionally compiled) versions 27387 of a single function header (in the same vicinity) may not produce 27388 the desired (or expected) results. 27389 27390 If you plan on converting source files which contain such code, it 27391 is recommended that you first make sure that each conditionally 27392 compiled region of source code which contains an alternative 27393 function header also contains at least one additional follower 27394 token (past the final right parenthesis of the function header). 27395 This should circumvent the problem. 27396 27397 * `unprotoize' can become confused when trying to convert a function 27398 definition or declaration which contains a declaration for a 27399 pointer-to-function formal argument which has the same name as the 27400 function being defined or declared. We recommend you avoid such 27401 choices of formal parameter names. 27402 27403 * You might also want to correct some of the indentation by hand and 27404 break long lines. (The conversion programs don't write lines 27405 longer than eighty characters in any case.) 27406 27407 27408 File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Protoize Caveats, Up: Trouble 27409 27410 10.10 Certain Changes We Don't Want to Make 27411 =========================================== 27412 27413 This section lists changes that people frequently request, but which we 27414 do not make because we think GCC is better without them. 27415 27416 * Checking the number and type of arguments to a function which has 27417 an old-fashioned definition and no prototype. 27418 27419 Such a feature would work only occasionally--only for calls that 27420 appear in the same file as the called function, following the 27421 definition. The only way to check all calls reliably is to add a 27422 prototype for the function. But adding a prototype eliminates the 27423 motivation for this feature. So the feature is not worthwhile. 27424 27425 * Warning about using an expression whose type is signed as a shift 27426 count. 27427 27428 Shift count operands are probably signed more often than unsigned. 27429 Warning about this would cause far more annoyance than good. 27430 27431 * Warning about assigning a signed value to an unsigned variable. 27432 27433 Such assignments must be very common; warning about them would 27434 cause more annoyance than good. 27435 27436 * Warning when a non-void function value is ignored. 27437 27438 C contains many standard functions that return a value that most 27439 programs choose to ignore. One obvious example is `printf'. 27440 Warning about this practice only leads the defensive programmer to 27441 clutter programs with dozens of casts to `void'. Such casts are 27442 required so frequently that they become visual noise. Writing 27443 those casts becomes so automatic that they no longer convey useful 27444 information about the intentions of the programmer. For functions 27445 where the return value should never be ignored, use the 27446 `warn_unused_result' function attribute (*note Function 27447 Attributes::). 27448 27449 * Making `-fshort-enums' the default. 27450 27451 This would cause storage layout to be incompatible with most other 27452 C compilers. And it doesn't seem very important, given that you 27453 can get the same result in other ways. The case where it matters 27454 most is when the enumeration-valued object is inside a structure, 27455 and in that case you can specify a field width explicitly. 27456 27457 * Making bit-fields unsigned by default on particular machines where 27458 "the ABI standard" says to do so. 27459 27460 The ISO C standard leaves it up to the implementation whether a 27461 bit-field declared plain `int' is signed or not. This in effect 27462 creates two alternative dialects of C. 27463 27464 The GNU C compiler supports both dialects; you can specify the 27465 signed dialect with `-fsigned-bitfields' and the unsigned dialect 27466 with `-funsigned-bitfields'. However, this leaves open the 27467 question of which dialect to use by default. 27468 27469 Currently, the preferred dialect makes plain bit-fields signed, 27470 because this is simplest. Since `int' is the same as `signed int' 27471 in every other context, it is cleanest for them to be the same in 27472 bit-fields as well. 27473 27474 Some computer manufacturers have published Application Binary 27475 Interface standards which specify that plain bit-fields should be 27476 unsigned. It is a mistake, however, to say anything about this 27477 issue in an ABI. This is because the handling of plain bit-fields 27478 distinguishes two dialects of C. Both dialects are meaningful on 27479 every type of machine. Whether a particular object file was 27480 compiled using signed bit-fields or unsigned is of no concern to 27481 other object files, even if they access the same bit-fields in the 27482 same data structures. 27483 27484 A given program is written in one or the other of these two 27485 dialects. The program stands a chance to work on most any machine 27486 if it is compiled with the proper dialect. It is unlikely to work 27487 at all if compiled with the wrong dialect. 27488 27489 Many users appreciate the GNU C compiler because it provides an 27490 environment that is uniform across machines. These users would be 27491 inconvenienced if the compiler treated plain bit-fields 27492 differently on certain machines. 27493 27494 Occasionally users write programs intended only for a particular 27495 machine type. On these occasions, the users would benefit if the 27496 GNU C compiler were to support by default the same dialect as the 27497 other compilers on that machine. But such applications are rare. 27498 And users writing a program to run on more than one type of 27499 machine cannot possibly benefit from this kind of compatibility. 27500 27501 This is why GCC does and will treat plain bit-fields in the same 27502 fashion on all types of machines (by default). 27503 27504 There are some arguments for making bit-fields unsigned by default 27505 on all machines. If, for example, this becomes a universal de 27506 facto standard, it would make sense for GCC to go along with it. 27507 This is something to be considered in the future. 27508 27509 (Of course, users strongly concerned about portability should 27510 indicate explicitly in each bit-field whether it is signed or not. 27511 In this way, they write programs which have the same meaning in 27512 both C dialects.) 27513 27514 * Undefining `__STDC__' when `-ansi' is not used. 27515 27516 Currently, GCC defines `__STDC__' unconditionally. This provides 27517 good results in practice. 27518 27519 Programmers normally use conditionals on `__STDC__' to ask whether 27520 it is safe to use certain features of ISO C, such as function 27521 prototypes or ISO token concatenation. Since plain `gcc' supports 27522 all the features of ISO C, the correct answer to these questions is 27523 "yes". 27524 27525 Some users try to use `__STDC__' to check for the availability of 27526 certain library facilities. This is actually incorrect usage in 27527 an ISO C program, because the ISO C standard says that a conforming 27528 freestanding implementation should define `__STDC__' even though it 27529 does not have the library facilities. `gcc -ansi -pedantic' is a 27530 conforming freestanding implementation, and it is therefore 27531 required to define `__STDC__', even though it does not come with 27532 an ISO C library. 27533 27534 Sometimes people say that defining `__STDC__' in a compiler that 27535 does not completely conform to the ISO C standard somehow violates 27536 the standard. This is illogical. The standard is a standard for 27537 compilers that claim to support ISO C, such as `gcc -ansi'--not 27538 for other compilers such as plain `gcc'. Whatever the ISO C 27539 standard says is relevant to the design of plain `gcc' without 27540 `-ansi' only for pragmatic reasons, not as a requirement. 27541 27542 GCC normally defines `__STDC__' to be 1, and in addition defines 27543 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 27544 option for strict conformance to some version of ISO C. On some 27545 hosts, system include files use a different convention, where 27546 `__STDC__' is normally 0, but is 1 if the user specifies strict 27547 conformance to the C Standard. GCC follows the host convention 27548 when processing system include files, but when processing user 27549 files it follows the usual GNU C convention. 27550 27551 * Undefining `__STDC__' in C++. 27552 27553 Programs written to compile with C++-to-C translators get the 27554 value of `__STDC__' that goes with the C compiler that is 27555 subsequently used. These programs must test `__STDC__' to 27556 determine what kind of C preprocessor that compiler uses: whether 27557 they should concatenate tokens in the ISO C fashion or in the 27558 traditional fashion. 27559 27560 These programs work properly with GNU C++ if `__STDC__' is defined. 27561 They would not work otherwise. 27562 27563 In addition, many header files are written to provide prototypes 27564 in ISO C but not in traditional C. Many of these header files can 27565 work without change in C++ provided `__STDC__' is defined. If 27566 `__STDC__' is not defined, they will all fail, and will all need 27567 to be changed to test explicitly for C++ as well. 27568 27569 * Deleting "empty" loops. 27570 27571 Historically, GCC has not deleted "empty" loops under the 27572 assumption that the most likely reason you would put one in a 27573 program is to have a delay, so deleting them will not make real 27574 programs run any faster. 27575 27576 However, the rationale here is that optimization of a nonempty loop 27577 cannot produce an empty one. This held for carefully written C 27578 compiled with less powerful optimizers but is not always the case 27579 for carefully written C++ or with more powerful optimizers. Thus 27580 GCC will remove operations from loops whenever it can determine 27581 those operations are not externally visible (apart from the time 27582 taken to execute them, of course). In case the loop can be proved 27583 to be finite, GCC will also remove the loop itself. 27584 27585 Be aware of this when performing timing tests, for instance the 27586 following loop can be completely removed, provided 27587 `some_expression' can provably not change any global state. 27588 27589 { 27590 int sum = 0; 27591 int ix; 27592 27593 for (ix = 0; ix != 10000; ix++) 27594 sum += some_expression; 27595 } 27596 27597 Even though `sum' is accumulated in the loop, no use is made of 27598 that summation, so the accumulation can be removed. 27599 27600 * Making side effects happen in the same order as in some other 27601 compiler. 27602 27603 It is never safe to depend on the order of evaluation of side 27604 effects. For example, a function call like this may very well 27605 behave differently from one compiler to another: 27606 27607 void func (int, int); 27608 27609 int i = 2; 27610 func (i++, i++); 27611 27612 There is no guarantee (in either the C or the C++ standard language 27613 definitions) that the increments will be evaluated in any 27614 particular order. Either increment might happen first. `func' 27615 might get the arguments `2, 3', or it might get `3, 2', or even 27616 `2, 2'. 27617 27618 * Making certain warnings into errors by default. 27619 27620 Some ISO C testsuites report failure when the compiler does not 27621 produce an error message for a certain program. 27622 27623 ISO C requires a "diagnostic" message for certain kinds of invalid 27624 programs, but a warning is defined by GCC to count as a 27625 diagnostic. If GCC produces a warning but not an error, that is 27626 correct ISO C support. If testsuites call this "failure", they 27627 should be run with the GCC option `-pedantic-errors', which will 27628 turn these warnings into errors. 27629 27630 27631 27632 File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 27633 27634 10.11 Warning Messages and Error Messages 27635 ========================================= 27636 27637 The GNU compiler can produce two kinds of diagnostics: errors and 27638 warnings. Each kind has a different purpose: 27639 27640 "Errors" report problems that make it impossible to compile your 27641 program. GCC reports errors with the source file name and line 27642 number where the problem is apparent. 27643 27644 "Warnings" report other unusual conditions in your code that _may_ 27645 indicate a problem, although compilation can (and does) proceed. 27646 Warning messages also report the source file name and line number, 27647 but include the text `warning:' to distinguish them from error 27648 messages. 27649 27650 Warnings may indicate danger points where you should check to make sure 27651 that your program really does what you intend; or the use of obsolete 27652 features; or the use of nonstandard features of GNU C or C++. Many 27653 warnings are issued only if you ask for them, with one of the `-W' 27654 options (for instance, `-Wall' requests a variety of useful warnings). 27655 27656 GCC always tries to compile your program if possible; it never 27657 gratuitously rejects a program whose meaning is clear merely because 27658 (for instance) it fails to conform to a standard. In some cases, 27659 however, the C and C++ standards specify that certain extensions are 27660 forbidden, and a diagnostic _must_ be issued by a conforming compiler. 27661 The `-pedantic' option tells GCC to issue warnings in such cases; 27662 `-pedantic-errors' says to make them errors instead. This does not 27663 mean that _all_ non-ISO constructs get warnings or errors. 27664 27665 *Note Options to Request or Suppress Warnings: Warning Options, for 27666 more detail on these and related command-line options. 27667 27668 27669 File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 27670 27671 11 Reporting Bugs 27672 ***************** 27673 27674 Your bug reports play an essential role in making GCC reliable. 27675 27676 When you encounter a problem, the first thing to do is to see if it is 27677 already known. *Note Trouble::. If it isn't known, then you should 27678 report the problem. 27679 27680 * Menu: 27681 27682 * Criteria: Bug Criteria. Have you really found a bug? 27683 * Reporting: Bug Reporting. How to report a bug effectively. 27684 * Known: Trouble. Known problems. 27685 * Help: Service. Where to ask for help. 27686 27687 27688 File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 27689 27690 11.1 Have You Found a Bug? 27691 ========================== 27692 27693 If you are not sure whether you have found a bug, here are some 27694 guidelines: 27695 27696 * If the compiler gets a fatal signal, for any input whatever, that 27697 is a compiler bug. Reliable compilers never crash. 27698 27699 * If the compiler produces invalid assembly code, for any input 27700 whatever (except an `asm' statement), that is a compiler bug, 27701 unless the compiler reports errors (not just warnings) which would 27702 ordinarily prevent the assembler from being run. 27703 27704 * If the compiler produces valid assembly code that does not 27705 correctly execute the input source code, that is a compiler bug. 27706 27707 However, you must double-check to make sure, because you may have a 27708 program whose behavior is undefined, which happened by chance to 27709 give the desired results with another C or C++ compiler. 27710 27711 For example, in many nonoptimizing compilers, you can write `x;' 27712 at the end of a function instead of `return x;', with the same 27713 results. But the value of the function is undefined if `return' 27714 is omitted; it is not a bug when GCC produces different results. 27715 27716 Problems often result from expressions with two increment 27717 operators, as in `f (*p++, *p++)'. Your previous compiler might 27718 have interpreted that expression the way you intended; GCC might 27719 interpret it another way. Neither compiler is wrong. The bug is 27720 in your code. 27721 27722 After you have localized the error to a single source line, it 27723 should be easy to check for these things. If your program is 27724 correct and well defined, you have found a compiler bug. 27725 27726 * If the compiler produces an error message for valid input, that is 27727 a compiler bug. 27728 27729 * If the compiler does not produce an error message for invalid 27730 input, that is a compiler bug. However, you should note that your 27731 idea of "invalid input" might be someone else's idea of "an 27732 extension" or "support for traditional practice". 27733 27734 * If you are an experienced user of one of the languages GCC 27735 supports, your suggestions for improvement of GCC are welcome in 27736 any case. 27737 27738 27739 File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 27740 27741 11.2 How and where to Report Bugs 27742 ================================= 27743 27744 Bugs should be reported to the GCC bug database. Please refer to 27745 `http://gcc.gnu.org/bugs.html' for up-to-date instructions how to 27746 submit bug reports. Copies of this file in HTML (`bugs.html') and 27747 plain text (`BUGS') are also part of GCC releases. 27748 27749 27750 File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 27751 27752 12 How To Get Help with GCC 27753 *************************** 27754 27755 If you need help installing, using or changing GCC, there are two ways 27756 to find it: 27757 27758 * Send a message to a suitable network mailing list. First try 27759 <gcc-help (a] gcc.gnu.org> (for help installing or using GCC), and if 27760 that brings no response, try <gcc (a] gcc.gnu.org>. For help changing 27761 GCC, ask <gcc (a] gcc.gnu.org>. If you think you have found a bug in 27762 GCC, please report it following the instructions at *note Bug 27763 Reporting::. 27764 27765 * Look in the service directory for someone who might help you for a 27766 fee. The service directory is found at 27767 `http://www.gnu.org/prep/service.html'. 27768 27769 For further information, see `http://gcc.gnu.org/faq.html#support'. 27770 27771 27772 File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 27773 27774 13 Contributing to GCC Development 27775 ********************************** 27776 27777 If you would like to help pretest GCC releases to assure they work well, 27778 current development sources are available by SVN (see 27779 `http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 27780 available for FTP; see `http://gcc.gnu.org/snapshots.html'. 27781 27782 If you would like to work on improvements to GCC, please read the 27783 advice at these URLs: 27784 27785 `http://gcc.gnu.org/contribute.html' 27786 `http://gcc.gnu.org/contributewhy.html' 27787 27788 for information on how to make useful contributions and avoid 27789 duplication of effort. Suggested projects are listed at 27790 `http://gcc.gnu.org/projects/'. 27791 27792 27793 File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 27794 27795 Funding Free Software 27796 ********************* 27797 27798 If you want to have more free software a few years from now, it makes 27799 sense for you to help encourage people to contribute funds for its 27800 development. The most effective approach known is to encourage 27801 commercial redistributors to donate. 27802 27803 Users of free software systems can boost the pace of development by 27804 encouraging for-a-fee distributors to donate part of their selling price 27805 to free software developers--the Free Software Foundation, and others. 27806 27807 The way to convince distributors to do this is to demand it and expect 27808 it from them. So when you compare distributors, judge them partly by 27809 how much they give to free software development. Show distributors 27810 they must compete to be the one who gives the most. 27811 27812 To make this approach work, you must insist on numbers that you can 27813 compare, such as, "We will donate ten dollars to the Frobnitz project 27814 for each disk sold." Don't be satisfied with a vague promise, such as 27815 "A portion of the profits are donated," since it doesn't give a basis 27816 for comparison. 27817 27818 Even a precise fraction "of the profits from this disk" is not very 27819 meaningful, since creative accounting and unrelated business decisions 27820 can greatly alter what fraction of the sales price counts as profit. 27821 If the price you pay is $50, ten percent of the profit is probably less 27822 than a dollar; it might be a few cents, or nothing at all. 27823 27824 Some redistributors do development work themselves. This is useful 27825 too; but to keep everyone honest, you need to inquire how much they do, 27826 and what kind. Some kinds of development make much more long-term 27827 difference than others. For example, maintaining a separate version of 27828 a program contributes very little; maintaining the standard version of a 27829 program for the whole community contributes much. Easy new ports 27830 contribute little, since someone else would surely do them; difficult 27831 ports such as adding a new CPU to the GNU Compiler Collection 27832 contribute more; major new features or packages contribute the most. 27833 27834 By establishing the idea that supporting further development is "the 27835 proper thing to do" when distributing free software for a fee, we can 27836 assure a steady flow of resources into making more free software. 27837 27838 Copyright (C) 1994 Free Software Foundation, Inc. 27839 Verbatim copying and redistribution of this section is permitted 27840 without royalty; alteration is not permitted. 27841 27842 27843 File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 27844 27845 The GNU Project and GNU/Linux 27846 ***************************** 27847 27848 The GNU Project was launched in 1984 to develop a complete Unix-like 27849 operating system which is free software: the GNU system. (GNU is a 27850 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 27851 Variants of the GNU operating system, which use the kernel Linux, are 27852 now widely used; though these systems are often referred to as "Linux", 27853 they are more accurately called GNU/Linux systems. 27854 27855 For more information, see: 27856 `http://www.gnu.org/' 27857 `http://www.gnu.org/gnu/linux-and-gnu.html' 27858 27859 27860 File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 27861 27862 GNU GENERAL PUBLIC LICENSE 27863 ************************** 27864 27865 Version 2, June 1991 27866 27867 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 27868 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 27869 27870 Everyone is permitted to copy and distribute verbatim copies 27871 of this license document, but changing it is not allowed. 27872 27873 Preamble 27874 ======== 27875 27876 The licenses for most software are designed to take away your freedom 27877 to share and change it. By contrast, the GNU General Public License is 27878 intended to guarantee your freedom to share and change free 27879 software--to make sure the software is free for all its users. This 27880 General Public License applies to most of the Free Software 27881 Foundation's software and to any other program whose authors commit to 27882 using it. (Some other Free Software Foundation software is covered by 27883 the GNU Library General Public License instead.) You can apply it to 27884 your programs, too. 27885 27886 When we speak of free software, we are referring to freedom, not 27887 price. Our General Public Licenses are designed to make sure that you 27888 have the freedom to distribute copies of free software (and charge for 27889 this service if you wish), that you receive source code or can get it 27890 if you want it, that you can change the software or use pieces of it in 27891 new free programs; and that you know you can do these things. 27892 27893 To protect your rights, we need to make restrictions that forbid 27894 anyone to deny you these rights or to ask you to surrender the rights. 27895 These restrictions translate to certain responsibilities for you if you 27896 distribute copies of the software, or if you modify it. 27897 27898 For example, if you distribute copies of such a program, whether 27899 gratis or for a fee, you must give the recipients all the rights that 27900 you have. You must make sure that they, too, receive or can get the 27901 source code. And you must show them these terms so they know their 27902 rights. 27903 27904 We protect your rights with two steps: (1) copyright the software, and 27905 (2) offer you this license which gives you legal permission to copy, 27906 distribute and/or modify the software. 27907 27908 Also, for each author's protection and ours, we want to make certain 27909 that everyone understands that there is no warranty for this free 27910 software. If the software is modified by someone else and passed on, we 27911 want its recipients to know that what they have is not the original, so 27912 that any problems introduced by others will not reflect on the original 27913 authors' reputations. 27914 27915 Finally, any free program is threatened constantly by software 27916 patents. We wish to avoid the danger that redistributors of a free 27917 program will individually obtain patent licenses, in effect making the 27918 program proprietary. To prevent this, we have made it clear that any 27919 patent must be licensed for everyone's free use or not licensed at all. 27920 27921 The precise terms and conditions for copying, distribution and 27922 modification follow. 27923 27924 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 27925 0. This License applies to any program or other work which contains a 27926 notice placed by the copyright holder saying it may be distributed 27927 under the terms of this General Public License. The "Program", 27928 below, refers to any such program or work, and a "work based on 27929 the Program" means either the Program or any derivative work under 27930 copyright law: that is to say, a work containing the Program or a 27931 portion of it, either verbatim or with modifications and/or 27932 translated into another language. (Hereinafter, translation is 27933 included without limitation in the term "modification".) Each 27934 licensee is addressed as "you". 27935 27936 Activities other than copying, distribution and modification are 27937 not covered by this License; they are outside its scope. The act 27938 of running the Program is not restricted, and the output from the 27939 Program is covered only if its contents constitute a work based on 27940 the Program (independent of having been made by running the 27941 Program). Whether that is true depends on what the Program does. 27942 27943 1. You may copy and distribute verbatim copies of the Program's 27944 source code as you receive it, in any medium, provided that you 27945 conspicuously and appropriately publish on each copy an appropriate 27946 copyright notice and disclaimer of warranty; keep intact all the 27947 notices that refer to this License and to the absence of any 27948 warranty; and give any other recipients of the Program a copy of 27949 this License along with the Program. 27950 27951 You may charge a fee for the physical act of transferring a copy, 27952 and you may at your option offer warranty protection in exchange 27953 for a fee. 27954 27955 2. You may modify your copy or copies of the Program or any portion 27956 of it, thus forming a work based on the Program, and copy and 27957 distribute such modifications or work under the terms of Section 1 27958 above, provided that you also meet all of these conditions: 27959 27960 a. You must cause the modified files to carry prominent notices 27961 stating that you changed the files and the date of any change. 27962 27963 b. You must cause any work that you distribute or publish, that 27964 in whole or in part contains or is derived from the Program 27965 or any part thereof, to be licensed as a whole at no charge 27966 to all third parties under the terms of this License. 27967 27968 c. If the modified program normally reads commands interactively 27969 when run, you must cause it, when started running for such 27970 interactive use in the most ordinary way, to print or display 27971 an announcement including an appropriate copyright notice and 27972 a notice that there is no warranty (or else, saying that you 27973 provide a warranty) and that users may redistribute the 27974 program under these conditions, and telling the user how to 27975 view a copy of this License. (Exception: if the Program 27976 itself is interactive but does not normally print such an 27977 announcement, your work based on the Program is not required 27978 to print an announcement.) 27979 27980 These requirements apply to the modified work as a whole. If 27981 identifiable sections of that work are not derived from the 27982 Program, and can be reasonably considered independent and separate 27983 works in themselves, then this License, and its terms, do not 27984 apply to those sections when you distribute them as separate 27985 works. But when you distribute the same sections as part of a 27986 whole which is a work based on the Program, the distribution of 27987 the whole must be on the terms of this License, whose permissions 27988 for other licensees extend to the entire whole, and thus to each 27989 and every part regardless of who wrote it. 27990 27991 Thus, it is not the intent of this section to claim rights or 27992 contest your rights to work written entirely by you; rather, the 27993 intent is to exercise the right to control the distribution of 27994 derivative or collective works based on the Program. 27995 27996 In addition, mere aggregation of another work not based on the 27997 Program with the Program (or with a work based on the Program) on 27998 a volume of a storage or distribution medium does not bring the 27999 other work under the scope of this License. 28000 28001 3. You may copy and distribute the Program (or a work based on it, 28002 under Section 2) in object code or executable form under the terms 28003 of Sections 1 and 2 above provided that you also do one of the 28004 following: 28005 28006 a. Accompany it with the complete corresponding machine-readable 28007 source code, which must be distributed under the terms of 28008 Sections 1 and 2 above on a medium customarily used for 28009 software interchange; or, 28010 28011 b. Accompany it with a written offer, valid for at least three 28012 years, to give any third party, for a charge no more than your 28013 cost of physically performing source distribution, a complete 28014 machine-readable copy of the corresponding source code, to be 28015 distributed under the terms of Sections 1 and 2 above on a 28016 medium customarily used for software interchange; or, 28017 28018 c. Accompany it with the information you received as to the offer 28019 to distribute corresponding source code. (This alternative is 28020 allowed only for noncommercial distribution and only if you 28021 received the program in object code or executable form with 28022 such an offer, in accord with Subsection b above.) 28023 28024 The source code for a work means the preferred form of the work for 28025 making modifications to it. For an executable work, complete 28026 source code means all the source code for all modules it contains, 28027 plus any associated interface definition files, plus the scripts 28028 used to control compilation and installation of the executable. 28029 However, as a special exception, the source code distributed need 28030 not include anything that is normally distributed (in either 28031 source or binary form) with the major components (compiler, 28032 kernel, and so on) of the operating system on which the executable 28033 runs, unless that component itself accompanies the executable. 28034 28035 If distribution of executable or object code is made by offering 28036 access to copy from a designated place, then offering equivalent 28037 access to copy the source code from the same place counts as 28038 distribution of the source code, even though third parties are not 28039 compelled to copy the source along with the object code. 28040 28041 4. You may not copy, modify, sublicense, or distribute the Program 28042 except as expressly provided under this License. Any attempt 28043 otherwise to copy, modify, sublicense or distribute the Program is 28044 void, and will automatically terminate your rights under this 28045 License. However, parties who have received copies, or rights, 28046 from you under this License will not have their licenses 28047 terminated so long as such parties remain in full compliance. 28048 28049 5. You are not required to accept this License, since you have not 28050 signed it. However, nothing else grants you permission to modify 28051 or distribute the Program or its derivative works. These actions 28052 are prohibited by law if you do not accept this License. 28053 Therefore, by modifying or distributing the Program (or any work 28054 based on the Program), you indicate your acceptance of this 28055 License to do so, and all its terms and conditions for copying, 28056 distributing or modifying the Program or works based on it. 28057 28058 6. Each time you redistribute the Program (or any work based on the 28059 Program), the recipient automatically receives a license from the 28060 original licensor to copy, distribute or modify the Program 28061 subject to these terms and conditions. You may not impose any 28062 further restrictions on the recipients' exercise of the rights 28063 granted herein. You are not responsible for enforcing compliance 28064 by third parties to this License. 28065 28066 7. If, as a consequence of a court judgment or allegation of patent 28067 infringement or for any other reason (not limited to patent 28068 issues), conditions are imposed on you (whether by court order, 28069 agreement or otherwise) that contradict the conditions of this 28070 License, they do not excuse you from the conditions of this 28071 License. If you cannot distribute so as to satisfy simultaneously 28072 your obligations under this License and any other pertinent 28073 obligations, then as a consequence you may not distribute the 28074 Program at all. For example, if a patent license would not permit 28075 royalty-free redistribution of the Program by all those who 28076 receive copies directly or indirectly through you, then the only 28077 way you could satisfy both it and this License would be to refrain 28078 entirely from distribution of the Program. 28079 28080 If any portion of this section is held invalid or unenforceable 28081 under any particular circumstance, the balance of the section is 28082 intended to apply and the section as a whole is intended to apply 28083 in other circumstances. 28084 28085 It is not the purpose of this section to induce you to infringe any 28086 patents or other property right claims or to contest validity of 28087 any such claims; this section has the sole purpose of protecting 28088 the integrity of the free software distribution system, which is 28089 implemented by public license practices. Many people have made 28090 generous contributions to the wide range of software distributed 28091 through that system in reliance on consistent application of that 28092 system; it is up to the author/donor to decide if he or she is 28093 willing to distribute software through any other system and a 28094 licensee cannot impose that choice. 28095 28096 This section is intended to make thoroughly clear what is believed 28097 to be a consequence of the rest of this License. 28098 28099 8. If the distribution and/or use of the Program is restricted in 28100 certain countries either by patents or by copyrighted interfaces, 28101 the original copyright holder who places the Program under this 28102 License may add an explicit geographical distribution limitation 28103 excluding those countries, so that distribution is permitted only 28104 in or among countries not thus excluded. In such case, this 28105 License incorporates the limitation as if written in the body of 28106 this License. 28107 28108 9. The Free Software Foundation may publish revised and/or new 28109 versions of the General Public License from time to time. Such 28110 new versions will be similar in spirit to the present version, but 28111 may differ in detail to address new problems or concerns. 28112 28113 Each version is given a distinguishing version number. If the 28114 Program specifies a version number of this License which applies 28115 to it and "any later version", you have the option of following 28116 the terms and conditions either of that version or of any later 28117 version published by the Free Software Foundation. If the Program 28118 does not specify a version number of this License, you may choose 28119 any version ever published by the Free Software Foundation. 28120 28121 10. If you wish to incorporate parts of the Program into other free 28122 programs whose distribution conditions are different, write to the 28123 author to ask for permission. For software which is copyrighted 28124 by the Free Software Foundation, write to the Free Software 28125 Foundation; we sometimes make exceptions for this. Our decision 28126 will be guided by the two goals of preserving the free status of 28127 all derivatives of our free software and of promoting the sharing 28128 and reuse of software generally. 28129 28130 NO WARRANTY 28131 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO 28132 WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE 28133 LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 28134 HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT 28135 WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT 28136 NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 28137 FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE 28138 QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 28139 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY 28140 SERVICING, REPAIR OR CORRECTION. 28141 28142 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 28143 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY 28144 MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE 28145 LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, 28146 INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR 28147 INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 28148 DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU 28149 OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY 28150 OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN 28151 ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 28152 28153 END OF TERMS AND CONDITIONS 28154 Appendix: How to Apply These Terms to Your New Programs 28155 ======================================================= 28156 28157 If you develop a new program, and you want it to be of the greatest 28158 possible use to the public, the best way to achieve this is to make it 28159 free software which everyone can redistribute and change under these 28160 terms. 28161 28162 To do so, attach the following notices to the program. It is safest 28163 to attach them to the start of each source file to most effectively 28164 convey the exclusion of warranty; and each file should have at least 28165 the "copyright" line and a pointer to where the full notice is found. 28166 28167 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 28168 Copyright (C) YEAR NAME OF AUTHOR 28169 28170 This program is free software; you can redistribute it and/or modify 28171 it under the terms of the GNU General Public License as published by 28172 the Free Software Foundation; either version 2 of the License, or 28173 (at your option) any later version. 28174 28175 This program is distributed in the hope that it will be useful, 28176 but WITHOUT ANY WARRANTY; without even the implied warranty of 28177 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 28178 GNU General Public License for more details. 28179 28180 You should have received a copy of the GNU General Public License 28181 along with this program; if not, write to the Free Software 28182 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 28183 28184 Also add information on how to contact you by electronic and paper 28185 mail. 28186 28187 If the program is interactive, make it output a short notice like this 28188 when it starts in an interactive mode: 28189 28190 Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR 28191 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details 28192 type `show w'. 28193 This is free software, and you are welcome to redistribute it 28194 under certain conditions; type `show c' for details. 28195 28196 The hypothetical commands `show w' and `show c' should show the 28197 appropriate parts of the General Public License. Of course, the 28198 commands you use may be called something other than `show w' and `show 28199 c'; they could even be mouse-clicks or menu items--whatever suits your 28200 program. 28201 28202 You should also get your employer (if you work as a programmer) or your 28203 school, if any, to sign a "copyright disclaimer" for the program, if 28204 necessary. Here is a sample; alter the names: 28205 28206 Yoyodyne, Inc., hereby disclaims all copyright interest in the program 28207 `Gnomovision' (which makes passes at compilers) written by James Hacker. 28208 28209 SIGNATURE OF TY COON, 1 April 1989 28210 Ty Coon, President of Vice 28211 28212 This General Public License does not permit incorporating your program 28213 into proprietary programs. If your program is a subroutine library, 28214 you may consider it more useful to permit linking proprietary 28215 applications with the library. If this is what you want to do, use the 28216 GNU Library General Public License instead of this License. 28217 28218 28219 File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 28220 28221 GNU Free Documentation License 28222 ****************************** 28223 28224 Version 1.2, November 2002 28225 28226 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 28227 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 28228 28229 Everyone is permitted to copy and distribute verbatim copies 28230 of this license document, but changing it is not allowed. 28231 28232 0. PREAMBLE 28233 28234 The purpose of this License is to make a manual, textbook, or other 28235 functional and useful document "free" in the sense of freedom: to 28236 assure everyone the effective freedom to copy and redistribute it, 28237 with or without modifying it, either commercially or 28238 noncommercially. Secondarily, this License preserves for the 28239 author and publisher a way to get credit for their work, while not 28240 being considered responsible for modifications made by others. 28241 28242 This License is a kind of "copyleft", which means that derivative 28243 works of the document must themselves be free in the same sense. 28244 It complements the GNU General Public License, which is a copyleft 28245 license designed for free software. 28246 28247 We have designed this License in order to use it for manuals for 28248 free software, because free software needs free documentation: a 28249 free program should come with manuals providing the same freedoms 28250 that the software does. But this License is not limited to 28251 software manuals; it can be used for any textual work, regardless 28252 of subject matter or whether it is published as a printed book. 28253 We recommend this License principally for works whose purpose is 28254 instruction or reference. 28255 28256 1. APPLICABILITY AND DEFINITIONS 28257 28258 This License applies to any manual or other work, in any medium, 28259 that contains a notice placed by the copyright holder saying it 28260 can be distributed under the terms of this License. Such a notice 28261 grants a world-wide, royalty-free license, unlimited in duration, 28262 to use that work under the conditions stated herein. The 28263 "Document", below, refers to any such manual or work. Any member 28264 of the public is a licensee, and is addressed as "you". You 28265 accept the license if you copy, modify or distribute the work in a 28266 way requiring permission under copyright law. 28267 28268 A "Modified Version" of the Document means any work containing the 28269 Document or a portion of it, either copied verbatim, or with 28270 modifications and/or translated into another language. 28271 28272 A "Secondary Section" is a named appendix or a front-matter section 28273 of the Document that deals exclusively with the relationship of the 28274 publishers or authors of the Document to the Document's overall 28275 subject (or to related matters) and contains nothing that could 28276 fall directly within that overall subject. (Thus, if the Document 28277 is in part a textbook of mathematics, a Secondary Section may not 28278 explain any mathematics.) The relationship could be a matter of 28279 historical connection with the subject or with related matters, or 28280 of legal, commercial, philosophical, ethical or political position 28281 regarding them. 28282 28283 The "Invariant Sections" are certain Secondary Sections whose 28284 titles are designated, as being those of Invariant Sections, in 28285 the notice that says that the Document is released under this 28286 License. If a section does not fit the above definition of 28287 Secondary then it is not allowed to be designated as Invariant. 28288 The Document may contain zero Invariant Sections. If the Document 28289 does not identify any Invariant Sections then there are none. 28290 28291 The "Cover Texts" are certain short passages of text that are 28292 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 28293 that says that the Document is released under this License. A 28294 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 28295 be at most 25 words. 28296 28297 A "Transparent" copy of the Document means a machine-readable copy, 28298 represented in a format whose specification is available to the 28299 general public, that is suitable for revising the document 28300 straightforwardly with generic text editors or (for images 28301 composed of pixels) generic paint programs or (for drawings) some 28302 widely available drawing editor, and that is suitable for input to 28303 text formatters or for automatic translation to a variety of 28304 formats suitable for input to text formatters. A copy made in an 28305 otherwise Transparent file format whose markup, or absence of 28306 markup, has been arranged to thwart or discourage subsequent 28307 modification by readers is not Transparent. An image format is 28308 not Transparent if used for any substantial amount of text. A 28309 copy that is not "Transparent" is called "Opaque". 28310 28311 Examples of suitable formats for Transparent copies include plain 28312 ASCII without markup, Texinfo input format, LaTeX input format, 28313 SGML or XML using a publicly available DTD, and 28314 standard-conforming simple HTML, PostScript or PDF designed for 28315 human modification. Examples of transparent image formats include 28316 PNG, XCF and JPG. Opaque formats include proprietary formats that 28317 can be read and edited only by proprietary word processors, SGML or 28318 XML for which the DTD and/or processing tools are not generally 28319 available, and the machine-generated HTML, PostScript or PDF 28320 produced by some word processors for output purposes only. 28321 28322 The "Title Page" means, for a printed book, the title page itself, 28323 plus such following pages as are needed to hold, legibly, the 28324 material this License requires to appear in the title page. For 28325 works in formats which do not have any title page as such, "Title 28326 Page" means the text near the most prominent appearance of the 28327 work's title, preceding the beginning of the body of the text. 28328 28329 A section "Entitled XYZ" means a named subunit of the Document 28330 whose title either is precisely XYZ or contains XYZ in parentheses 28331 following text that translates XYZ in another language. (Here XYZ 28332 stands for a specific section name mentioned below, such as 28333 "Acknowledgements", "Dedications", "Endorsements", or "History".) 28334 To "Preserve the Title" of such a section when you modify the 28335 Document means that it remains a section "Entitled XYZ" according 28336 to this definition. 28337 28338 The Document may include Warranty Disclaimers next to the notice 28339 which states that this License applies to the Document. These 28340 Warranty Disclaimers are considered to be included by reference in 28341 this License, but only as regards disclaiming warranties: any other 28342 implication that these Warranty Disclaimers may have is void and 28343 has no effect on the meaning of this License. 28344 28345 2. VERBATIM COPYING 28346 28347 You may copy and distribute the Document in any medium, either 28348 commercially or noncommercially, provided that this License, the 28349 copyright notices, and the license notice saying this License 28350 applies to the Document are reproduced in all copies, and that you 28351 add no other conditions whatsoever to those of this License. You 28352 may not use technical measures to obstruct or control the reading 28353 or further copying of the copies you make or distribute. However, 28354 you may accept compensation in exchange for copies. If you 28355 distribute a large enough number of copies you must also follow 28356 the conditions in section 3. 28357 28358 You may also lend copies, under the same conditions stated above, 28359 and you may publicly display copies. 28360 28361 3. COPYING IN QUANTITY 28362 28363 If you publish printed copies (or copies in media that commonly 28364 have printed covers) of the Document, numbering more than 100, and 28365 the Document's license notice requires Cover Texts, you must 28366 enclose the copies in covers that carry, clearly and legibly, all 28367 these Cover Texts: Front-Cover Texts on the front cover, and 28368 Back-Cover Texts on the back cover. Both covers must also clearly 28369 and legibly identify you as the publisher of these copies. The 28370 front cover must present the full title with all words of the 28371 title equally prominent and visible. You may add other material 28372 on the covers in addition. Copying with changes limited to the 28373 covers, as long as they preserve the title of the Document and 28374 satisfy these conditions, can be treated as verbatim copying in 28375 other respects. 28376 28377 If the required texts for either cover are too voluminous to fit 28378 legibly, you should put the first ones listed (as many as fit 28379 reasonably) on the actual cover, and continue the rest onto 28380 adjacent pages. 28381 28382 If you publish or distribute Opaque copies of the Document 28383 numbering more than 100, you must either include a 28384 machine-readable Transparent copy along with each Opaque copy, or 28385 state in or with each Opaque copy a computer-network location from 28386 which the general network-using public has access to download 28387 using public-standard network protocols a complete Transparent 28388 copy of the Document, free of added material. If you use the 28389 latter option, you must take reasonably prudent steps, when you 28390 begin distribution of Opaque copies in quantity, to ensure that 28391 this Transparent copy will remain thus accessible at the stated 28392 location until at least one year after the last time you 28393 distribute an Opaque copy (directly or through your agents or 28394 retailers) of that edition to the public. 28395 28396 It is requested, but not required, that you contact the authors of 28397 the Document well before redistributing any large number of 28398 copies, to give them a chance to provide you with an updated 28399 version of the Document. 28400 28401 4. MODIFICATIONS 28402 28403 You may copy and distribute a Modified Version of the Document 28404 under the conditions of sections 2 and 3 above, provided that you 28405 release the Modified Version under precisely this License, with 28406 the Modified Version filling the role of the Document, thus 28407 licensing distribution and modification of the Modified Version to 28408 whoever possesses a copy of it. In addition, you must do these 28409 things in the Modified Version: 28410 28411 A. Use in the Title Page (and on the covers, if any) a title 28412 distinct from that of the Document, and from those of 28413 previous versions (which should, if there were any, be listed 28414 in the History section of the Document). You may use the 28415 same title as a previous version if the original publisher of 28416 that version gives permission. 28417 28418 B. List on the Title Page, as authors, one or more persons or 28419 entities responsible for authorship of the modifications in 28420 the Modified Version, together with at least five of the 28421 principal authors of the Document (all of its principal 28422 authors, if it has fewer than five), unless they release you 28423 from this requirement. 28424 28425 C. State on the Title page the name of the publisher of the 28426 Modified Version, as the publisher. 28427 28428 D. Preserve all the copyright notices of the Document. 28429 28430 E. Add an appropriate copyright notice for your modifications 28431 adjacent to the other copyright notices. 28432 28433 F. Include, immediately after the copyright notices, a license 28434 notice giving the public permission to use the Modified 28435 Version under the terms of this License, in the form shown in 28436 the Addendum below. 28437 28438 G. Preserve in that license notice the full lists of Invariant 28439 Sections and required Cover Texts given in the Document's 28440 license notice. 28441 28442 H. Include an unaltered copy of this License. 28443 28444 I. Preserve the section Entitled "History", Preserve its Title, 28445 and add to it an item stating at least the title, year, new 28446 authors, and publisher of the Modified Version as given on 28447 the Title Page. If there is no section Entitled "History" in 28448 the Document, create one stating the title, year, authors, 28449 and publisher of the Document as given on its Title Page, 28450 then add an item describing the Modified Version as stated in 28451 the previous sentence. 28452 28453 J. Preserve the network location, if any, given in the Document 28454 for public access to a Transparent copy of the Document, and 28455 likewise the network locations given in the Document for 28456 previous versions it was based on. These may be placed in 28457 the "History" section. You may omit a network location for a 28458 work that was published at least four years before the 28459 Document itself, or if the original publisher of the version 28460 it refers to gives permission. 28461 28462 K. For any section Entitled "Acknowledgements" or "Dedications", 28463 Preserve the Title of the section, and preserve in the 28464 section all the substance and tone of each of the contributor 28465 acknowledgements and/or dedications given therein. 28466 28467 L. Preserve all the Invariant Sections of the Document, 28468 unaltered in their text and in their titles. Section numbers 28469 or the equivalent are not considered part of the section 28470 titles. 28471 28472 M. Delete any section Entitled "Endorsements". Such a section 28473 may not be included in the Modified Version. 28474 28475 N. Do not retitle any existing section to be Entitled 28476 "Endorsements" or to conflict in title with any Invariant 28477 Section. 28478 28479 O. Preserve any Warranty Disclaimers. 28480 28481 If the Modified Version includes new front-matter sections or 28482 appendices that qualify as Secondary Sections and contain no 28483 material copied from the Document, you may at your option 28484 designate some or all of these sections as invariant. To do this, 28485 add their titles to the list of Invariant Sections in the Modified 28486 Version's license notice. These titles must be distinct from any 28487 other section titles. 28488 28489 You may add a section Entitled "Endorsements", provided it contains 28490 nothing but endorsements of your Modified Version by various 28491 parties--for example, statements of peer review or that the text 28492 has been approved by an organization as the authoritative 28493 definition of a standard. 28494 28495 You may add a passage of up to five words as a Front-Cover Text, 28496 and a passage of up to 25 words as a Back-Cover Text, to the end 28497 of the list of Cover Texts in the Modified Version. Only one 28498 passage of Front-Cover Text and one of Back-Cover Text may be 28499 added by (or through arrangements made by) any one entity. If the 28500 Document already includes a cover text for the same cover, 28501 previously added by you or by arrangement made by the same entity 28502 you are acting on behalf of, you may not add another; but you may 28503 replace the old one, on explicit permission from the previous 28504 publisher that added the old one. 28505 28506 The author(s) and publisher(s) of the Document do not by this 28507 License give permission to use their names for publicity for or to 28508 assert or imply endorsement of any Modified Version. 28509 28510 5. COMBINING DOCUMENTS 28511 28512 You may combine the Document with other documents released under 28513 this License, under the terms defined in section 4 above for 28514 modified versions, provided that you include in the combination 28515 all of the Invariant Sections of all of the original documents, 28516 unmodified, and list them all as Invariant Sections of your 28517 combined work in its license notice, and that you preserve all 28518 their Warranty Disclaimers. 28519 28520 The combined work need only contain one copy of this License, and 28521 multiple identical Invariant Sections may be replaced with a single 28522 copy. If there are multiple Invariant Sections with the same name 28523 but different contents, make the title of each such section unique 28524 by adding at the end of it, in parentheses, the name of the 28525 original author or publisher of that section if known, or else a 28526 unique number. Make the same adjustment to the section titles in 28527 the list of Invariant Sections in the license notice of the 28528 combined work. 28529 28530 In the combination, you must combine any sections Entitled 28531 "History" in the various original documents, forming one section 28532 Entitled "History"; likewise combine any sections Entitled 28533 "Acknowledgements", and any sections Entitled "Dedications". You 28534 must delete all sections Entitled "Endorsements." 28535 28536 6. COLLECTIONS OF DOCUMENTS 28537 28538 You may make a collection consisting of the Document and other 28539 documents released under this License, and replace the individual 28540 copies of this License in the various documents with a single copy 28541 that is included in the collection, provided that you follow the 28542 rules of this License for verbatim copying of each of the 28543 documents in all other respects. 28544 28545 You may extract a single document from such a collection, and 28546 distribute it individually under this License, provided you insert 28547 a copy of this License into the extracted document, and follow 28548 this License in all other respects regarding verbatim copying of 28549 that document. 28550 28551 7. AGGREGATION WITH INDEPENDENT WORKS 28552 28553 A compilation of the Document or its derivatives with other 28554 separate and independent documents or works, in or on a volume of 28555 a storage or distribution medium, is called an "aggregate" if the 28556 copyright resulting from the compilation is not used to limit the 28557 legal rights of the compilation's users beyond what the individual 28558 works permit. When the Document is included in an aggregate, this 28559 License does not apply to the other works in the aggregate which 28560 are not themselves derivative works of the Document. 28561 28562 If the Cover Text requirement of section 3 is applicable to these 28563 copies of the Document, then if the Document is less than one half 28564 of the entire aggregate, the Document's Cover Texts may be placed 28565 on covers that bracket the Document within the aggregate, or the 28566 electronic equivalent of covers if the Document is in electronic 28567 form. Otherwise they must appear on printed covers that bracket 28568 the whole aggregate. 28569 28570 8. TRANSLATION 28571 28572 Translation is considered a kind of modification, so you may 28573 distribute translations of the Document under the terms of section 28574 4. Replacing Invariant Sections with translations requires special 28575 permission from their copyright holders, but you may include 28576 translations of some or all Invariant Sections in addition to the 28577 original versions of these Invariant Sections. You may include a 28578 translation of this License, and all the license notices in the 28579 Document, and any Warranty Disclaimers, provided that you also 28580 include the original English version of this License and the 28581 original versions of those notices and disclaimers. In case of a 28582 disagreement between the translation and the original version of 28583 this License or a notice or disclaimer, the original version will 28584 prevail. 28585 28586 If a section in the Document is Entitled "Acknowledgements", 28587 "Dedications", or "History", the requirement (section 4) to 28588 Preserve its Title (section 1) will typically require changing the 28589 actual title. 28590 28591 9. TERMINATION 28592 28593 You may not copy, modify, sublicense, or distribute the Document 28594 except as expressly provided for under this License. Any other 28595 attempt to copy, modify, sublicense or distribute the Document is 28596 void, and will automatically terminate your rights under this 28597 License. However, parties who have received copies, or rights, 28598 from you under this License will not have their licenses 28599 terminated so long as such parties remain in full compliance. 28600 28601 10. FUTURE REVISIONS OF THIS LICENSE 28602 28603 The Free Software Foundation may publish new, revised versions of 28604 the GNU Free Documentation License from time to time. Such new 28605 versions will be similar in spirit to the present version, but may 28606 differ in detail to address new problems or concerns. See 28607 `http://www.gnu.org/copyleft/'. 28608 28609 Each version of the License is given a distinguishing version 28610 number. If the Document specifies that a particular numbered 28611 version of this License "or any later version" applies to it, you 28612 have the option of following the terms and conditions either of 28613 that specified version or of any later version that has been 28614 published (not as a draft) by the Free Software Foundation. If 28615 the Document does not specify a version number of this License, 28616 you may choose any version ever published (not as a draft) by the 28617 Free Software Foundation. 28618 28619 ADDENDUM: How to use this License for your documents 28620 ==================================================== 28621 28622 To use this License in a document you have written, include a copy of 28623 the License in the document and put the following copyright and license 28624 notices just after the title page: 28625 28626 Copyright (C) YEAR YOUR NAME. 28627 Permission is granted to copy, distribute and/or modify this document 28628 under the terms of the GNU Free Documentation License, Version 1.2 28629 or any later version published by the Free Software Foundation; 28630 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 28631 Texts. A copy of the license is included in the section entitled ``GNU 28632 Free Documentation License''. 28633 28634 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 28635 replace the "with...Texts." line with this: 28636 28637 with the Invariant Sections being LIST THEIR TITLES, with 28638 the Front-Cover Texts being LIST, and with the Back-Cover Texts 28639 being LIST. 28640 28641 If you have Invariant Sections without Cover Texts, or some other 28642 combination of the three, merge those two alternatives to suit the 28643 situation. 28644 28645 If your document contains nontrivial examples of program code, we 28646 recommend releasing these examples in parallel under your choice of 28647 free software license, such as the GNU General Public License, to 28648 permit their use in free software. 28649 28650 28651 File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 28652 28653 Contributors to GCC 28654 ******************* 28655 28656 The GCC project would like to thank its many contributors. Without 28657 them the project would not have been nearly as successful as it has 28658 been. Any omissions in this list are accidental. Feel free to contact 28659 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or 28660 some of your contributions are not listed. Please keep this list in 28661 alphabetical order. 28662 28663 * Analog Devices helped implement the support for complex data types 28664 and iterators. 28665 28666 * John David Anglin for threading-related fixes and improvements to 28667 libstdc++-v3, and the HP-UX port. 28668 28669 * James van Artsdalen wrote the code that makes efficient use of the 28670 Intel 80387 register stack. 28671 28672 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 28673 Series port. 28674 28675 * Alasdair Baird for various bug fixes. 28676 28677 * Giovanni Bajo for analyzing lots of complicated C++ problem 28678 reports. 28679 28680 * Peter Barada for his work to improve code generation for new 28681 ColdFire cores. 28682 28683 * Gerald Baumgartner added the signature extension to the C++ front 28684 end. 28685 28686 * Godmar Back for his Java improvements and encouragement. 28687 28688 * Scott Bambrough for help porting the Java compiler. 28689 28690 * Wolfgang Bangerth for processing tons of bug reports. 28691 28692 * Jon Beniston for his Microsoft Windows port of Java. 28693 28694 * Daniel Berlin for better DWARF2 support, faster/better 28695 optimizations, improved alias analysis, plus migrating GCC to 28696 Bugzilla. 28697 28698 * Geoff Berry for his Java object serialization work and various 28699 patches. 28700 28701 * Uros Bizjak for the implementation of x87 math built-in functions 28702 and for various middle end and i386 back end improvements and 28703 bugfixes. 28704 28705 * Eric Blake for helping to make GCJ and libgcj conform to the 28706 specifications. 28707 28708 * Janne Blomqvist for contributions to GNU Fortran. 28709 28710 * Segher Boessenkool for various fixes. 28711 28712 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 28713 other Java work. 28714 28715 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 28716 miscellaneous clean-ups. 28717 28718 * Steven Bosscher for integrating the GNU Fortran front end into GCC 28719 and for contributing to the tree-ssa branch. 28720 28721 * Eric Botcazou for fixing middle- and backend bugs left and right. 28722 28723 * Per Bothner for his direction via the steering committee and 28724 various improvements to the infrastructure for supporting new 28725 languages. Chill front end implementation. Initial 28726 implementations of cpplib, fix-header, config.guess, libio, and 28727 past C++ library (libg++) maintainer. Dreaming up, designing and 28728 implementing much of GCJ. 28729 28730 * Devon Bowen helped port GCC to the Tahoe. 28731 28732 * Don Bowman for mips-vxworks contributions. 28733 28734 * Dave Brolley for work on cpplib and Chill. 28735 28736 * Paul Brook for work on the ARM architecture and maintaining GNU 28737 Fortran. 28738 28739 * Robert Brown implemented the support for Encore 32000 systems. 28740 28741 * Christian Bruel for improvements to local store elimination. 28742 28743 * Herman A.J. ten Brugge for various fixes. 28744 28745 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 28746 FAQ. 28747 28748 * Joe Buck for his direction via the steering committee. 28749 28750 * Craig Burley for leadership of the G77 Fortran effort. 28751 28752 * Stephan Buys for contributing Doxygen notes for libstdc++. 28753 28754 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 28755 to the C++ strings, streambufs and formatted I/O, hard detective 28756 work on the frustrating localization issues, and keeping up with 28757 the problem reports. 28758 28759 * John Carr for his alias work, SPARC hacking, infrastructure 28760 improvements, previous contributions to the steering committee, 28761 loop optimizations, etc. 28762 28763 * Stephane Carrez for 68HC11 and 68HC12 ports. 28764 28765 * Steve Chamberlain for support for the Renesas SH and H8 processors 28766 and the PicoJava processor, and for GCJ config fixes. 28767 28768 * Glenn Chambers for help with the GCJ FAQ. 28769 28770 * John-Marc Chandonia for various libgcj patches. 28771 28772 * Scott Christley for his Objective-C contributions. 28773 28774 * Eric Christopher for his Java porting help and clean-ups. 28775 28776 * Branko Cibej for more warning contributions. 28777 28778 * The GNU Classpath project for all of their merged runtime code. 28779 28780 * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and 28781 other random hacking. 28782 28783 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 28784 28785 * R. Kelley Cook for making GCC buildable from a read-only directory 28786 as well as other miscellaneous build process and documentation 28787 clean-ups. 28788 28789 * Ralf Corsepius for SH testing and minor bugfixing. 28790 28791 * Stan Cox for care and feeding of the x86 port and lots of behind 28792 the scenes hacking. 28793 28794 * Alex Crain provided changes for the 3b1. 28795 28796 * Ian Dall for major improvements to the NS32k port. 28797 28798 * Paul Dale for his work to add uClinux platform support to the m68k 28799 backend. 28800 28801 * Dario Dariol contributed the four varieties of sample programs 28802 that print a copy of their source. 28803 28804 * Russell Davidson for fstream and stringstream fixes in libstdc++. 28805 28806 * Bud Davis for work on the G77 and GNU Fortran compilers. 28807 28808 * Mo DeJong for GCJ and libgcj bug fixes. 28809 28810 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 28811 various bug fixes, and the M32C port. 28812 28813 * Arnaud Desitter for helping to debug GNU Fortran. 28814 28815 * Gabriel Dos Reis for contributions to G++, contributions and 28816 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 28817 including `valarray<>', `complex<>', maintaining the numerics 28818 library (including that pesky `<limits>' :-) and keeping 28819 up-to-date anything to do with numbers. 28820 28821 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 28822 ISO C99 support, CFG dumping support, etc., plus support of the 28823 C++ runtime libraries including for all kinds of C interface 28824 issues, contributing and maintaining `complex<>', sanity checking 28825 and disbursement, configuration architecture, libio maintenance, 28826 and early math work. 28827 28828 * Zdenek Dvorak for a new loop unroller and various fixes. 28829 28830 * Richard Earnshaw for his ongoing work with the ARM. 28831 28832 * David Edelsohn for his direction via the steering committee, 28833 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 28834 loop changes, doing the entire AIX port of libstdc++ with his bare 28835 hands, and for ensuring GCC properly keeps working on AIX. 28836 28837 * Kevin Ediger for the floating point formatting of num_put::do_put 28838 in libstdc++. 28839 28840 * Phil Edwards for libstdc++ work including configuration hackery, 28841 documentation maintainer, chief breaker of the web pages, the 28842 occasional iostream bug fix, and work on shared library symbol 28843 versioning. 28844 28845 * Paul Eggert for random hacking all over GCC. 28846 28847 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 28848 configuration support for locales and fstream-related fixes. 28849 28850 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 28851 iostreams. 28852 28853 * Christian Ehrhardt for dealing with bug reports. 28854 28855 * Ben Elliston for his work to move the Objective-C runtime into its 28856 own subdirectory and for his work on autoconf. 28857 28858 * Marc Espie for OpenBSD support. 28859 28860 * Doug Evans for much of the global optimization framework, arc, 28861 m32r, and SPARC work. 28862 28863 * Christopher Faylor for his work on the Cygwin port and for caring 28864 and feeding the gcc.gnu.org box and saving its users tons of spam. 28865 28866 * Fred Fish for BeOS support and Ada fixes. 28867 28868 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 28869 28870 * Peter Gerwinski for various bug fixes and the Pascal front end. 28871 28872 * Kaveh R. Ghazi for his direction via the steering committee, 28873 amazing work to make `-W -Wall -W* -Werror' useful, and 28874 continuously testing GCC on a plethora of platforms. Kaveh 28875 extends his gratitude to the CAIP Center at Rutgers University for 28876 providing him with computing resources to work on Free Software 28877 since the late 1980s. 28878 28879 * John Gilmore for a donation to the FSF earmarked improving GNU 28880 Java. 28881 28882 * Judy Goldberg for c++ contributions. 28883 28884 * Torbjorn Granlund for various fixes and the c-torture testsuite, 28885 multiply- and divide-by-constant optimization, improved long long 28886 support, improved leaf function register allocation, and his 28887 direction via the steering committee. 28888 28889 * Anthony Green for his `-Os' contributions and Java front end work. 28890 28891 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 28892 Java code. 28893 28894 * Michael K. Gschwind contributed the port to the PDP-11. 28895 28896 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 28897 the support for Dwarf symbolic debugging information, and much of 28898 the support for System V Release 4. He has also worked heavily on 28899 the Intel 386 and 860 support. 28900 28901 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 28902 GCSE. 28903 28904 * Bruno Haible for improvements in the runtime overhead for EH, new 28905 warnings and assorted bug fixes. 28906 28907 * Andrew Haley for his amazing Java compiler and library efforts. 28908 28909 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 28910 series 300. 28911 28912 * Michael Hayes for various thankless work he's done trying to get 28913 the c30/c40 ports functional. Lots of loop and unroll 28914 improvements and fixes. 28915 28916 * Dara Hazeghi for wading through myriads of target-specific bug 28917 reports. 28918 28919 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 28920 28921 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 28922 work, loop opts, and generally fixing lots of old problems we've 28923 ignored for years, flow rewrite and lots of further stuff, 28924 including reviewing tons of patches. 28925 28926 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 28927 various fixes. 28928 28929 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 28930 contributed the support for the Sony NEWS machine. 28931 28932 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 28933 various fixes. 28934 28935 * Katherine Holcomb for work on GNU Fortran. 28936 28937 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 28938 of testing and bug fixing, particularly of GCC configury code. 28939 28940 * Steve Holmgren for MachTen patches. 28941 28942 * Jan Hubicka for his x86 port improvements. 28943 28944 * Falk Hueffner for working on C and optimization bug reports. 28945 28946 * Bernardo Innocenti for his m68k work, including merging of 28947 ColdFire improvements and uClinux support. 28948 28949 * Christian Iseli for various bug fixes. 28950 28951 * Kamil Iskra for general m68k hacking. 28952 28953 * Lee Iverson for random fixes and MIPS testing. 28954 28955 * Andreas Jaeger for testing and benchmarking of GCC and various bug 28956 fixes. 28957 28958 * Jakub Jelinek for his SPARC work and sibling call optimizations as 28959 well as lots of bug fixes and test cases, and for improving the 28960 Java build system. 28961 28962 * Janis Johnson for ia64 testing and fixes, her quality improvement 28963 sidetracks, and web page maintenance. 28964 28965 * Kean Johnston for SCO OpenServer support and various fixes. 28966 28967 * Tim Josling for the sample language treelang based originally on 28968 Richard Kenner's "toy" language. 28969 28970 * Nicolai Josuttis for additional libstdc++ documentation. 28971 28972 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 28973 target. 28974 28975 * Steven G. Kargl for work on GNU Fortran. 28976 28977 * David Kashtan of SRI adapted GCC to VMS. 28978 28979 * Ryszard Kabatek for many, many libstdc++ bug fixes and 28980 optimizations of strings, especially member functions, and for 28981 auto_ptr fixes. 28982 28983 * Geoffrey Keating for his ongoing work to make the PPC work for 28984 GNU/Linux and his automatic regression tester. 28985 28986 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 28987 work in just about every part of libstdc++. 28988 28989 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 28990 MIL-STD-1750A. 28991 28992 * Richard Kenner of the New York University Ultracomputer Research 28993 Laboratory wrote the machine descriptions for the AMD 29000, the 28994 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 28995 support for instruction attributes. He also made changes to 28996 better support RISC processors including changes to common 28997 subexpression elimination, strength reduction, function calling 28998 sequence handling, and condition code support, in addition to 28999 generalizing the code for frame pointer elimination and delay slot 29000 scheduling. Richard Kenner was also the head maintainer of GCC 29001 for several years. 29002 29003 * Mumit Khan for various contributions to the Cygwin and Mingw32 29004 ports and maintaining binary releases for Microsoft Windows hosts, 29005 and for massive libstdc++ porting work to Cygwin/Mingw32. 29006 29007 * Robin Kirkham for cpu32 support. 29008 29009 * Mark Klein for PA improvements. 29010 29011 * Thomas Koenig for various bug fixes. 29012 29013 * Bruce Korb for the new and improved fixincludes code. 29014 29015 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 29016 effort. 29017 29018 * Charles LaBrec contributed the support for the Integrated Solutions 29019 68020 system. 29020 29021 * Asher Langton and Mike Kumbera for contributing Cray pointer 29022 support to GNU Fortran, and for other GNU Fortran improvements. 29023 29024 * Jeff Law for his direction via the steering committee, 29025 coordinating the entire egcs project and GCC 2.95, rolling out 29026 snapshots and releases, handling merges from GCC2, reviewing tons 29027 of patches that might have fallen through the cracks else, and 29028 random but extensive hacking. 29029 29030 * Marc Lehmann for his direction via the steering committee and 29031 helping with analysis and improvements of x86 performance. 29032 29033 * Victor Leikehman for work on GNU Fortran. 29034 29035 * Ted Lemon wrote parts of the RTL reader and printer. 29036 29037 * Kriang Lerdsuwanakij for C++ improvements including template as 29038 template parameter support, and many C++ fixes. 29039 29040 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 29041 and random work on the Java front end. 29042 29043 * Alain Lichnewsky ported GCC to the MIPS CPU. 29044 29045 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 29046 and patches. 29047 29048 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 29049 29050 * Weiwen Liu for testing and various bug fixes. 29051 29052 * Dave Love for his ongoing work with the Fortran front end and 29053 runtime libraries. 29054 29055 * Martin von Lo"wis for internal consistency checking infrastructure, 29056 various C++ improvements including namespace support, and tons of 29057 assistance with libstdc++/compiler merges. 29058 29059 * H.J. Lu for his previous contributions to the steering committee, 29060 many x86 bug reports, prototype patches, and keeping the GNU/Linux 29061 ports working. 29062 29063 * Greg McGary for random fixes and (someday) bounded pointers. 29064 29065 * Andrew MacLeod for his ongoing work in building a real EH system, 29066 various code generation improvements, work on the global 29067 optimizer, etc. 29068 29069 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 29070 hacking improvements to compile-time performance, overall 29071 knowledge and direction in the area of instruction scheduling, and 29072 design and implementation of the automaton based instruction 29073 scheduler. 29074 29075 * Bob Manson for his behind the scenes work on dejagnu. 29076 29077 * Philip Martin for lots of libstdc++ string and vector iterator 29078 fixes and improvements, and string clean up and testsuites. 29079 29080 * All of the Mauve project contributors, for Java test code. 29081 29082 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 29083 29084 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 29085 29086 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 29087 powerpc, haifa, ECOFF debug support, and other assorted hacking. 29088 29089 * Jason Merrill for his direction via the steering committee and 29090 leading the G++ effort. 29091 29092 * Martin Michlmayr for testing GCC on several architectures using the 29093 entire Debian archive. 29094 29095 * David Miller for his direction via the steering committee, lots of 29096 SPARC work, improvements in jump.c and interfacing with the Linux 29097 kernel developers. 29098 29099 * Gary Miller ported GCC to Charles River Data Systems machines. 29100 29101 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 29102 the entire libstdc++ testsuite namespace-compatible. 29103 29104 * Mark Mitchell for his direction via the steering committee, 29105 mountains of C++ work, load/store hoisting out of loops, alias 29106 analysis improvements, ISO C `restrict' support, and serving as 29107 release manager for GCC 3.x. 29108 29109 * Alan Modra for various GNU/Linux bits and testing. 29110 29111 * Toon Moene for his direction via the steering committee, Fortran 29112 maintenance, and his ongoing work to make us make Fortran run fast. 29113 29114 * Jason Molenda for major help in the care and feeding of all the 29115 services on the gcc.gnu.org (formerly egcs.cygnus.com) 29116 machine--mail, web services, ftp services, etc etc. Doing all 29117 this work on scrap paper and the backs of envelopes would have 29118 been... difficult. 29119 29120 * Catherine Moore for fixing various ugly problems we have sent her 29121 way, including the haifa bug which was killing the Alpha & PowerPC 29122 Linux kernels. 29123 29124 * Mike Moreton for his various Java patches. 29125 29126 * David Mosberger-Tang for various Alpha improvements, and for the 29127 initial IA-64 port. 29128 29129 * Stephen Moshier contributed the floating point emulator that 29130 assists in cross-compilation and permits support for floating 29131 point numbers wider than 64 bits and for ISO C99 support. 29132 29133 * Bill Moyer for his behind the scenes work on various issues. 29134 29135 * Philippe De Muyter for his work on the m68k port. 29136 29137 * Joseph S. Myers for his work on the PDP-11 port, format checking 29138 and ISO C99 support, and continuous emphasis on (and contributions 29139 to) documentation. 29140 29141 * Nathan Myers for his work on libstdc++-v3: architecture and 29142 authorship through the first three snapshots, including 29143 implementation of locale infrastructure, string, shadow C headers, 29144 and the initial project documentation (DESIGN, CHECKLIST, and so 29145 forth). Later, more work on MT-safe string and shadow headers. 29146 29147 * Felix Natter for documentation on porting libstdc++. 29148 29149 * Nathanael Nerode for cleaning up the configuration/build process. 29150 29151 * NeXT, Inc. donated the front end that supports the Objective-C 29152 language. 29153 29154 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 29155 the search engine setup, various documentation fixes and other 29156 small fixes. 29157 29158 * Geoff Noer for his work on getting cygwin native builds working. 29159 29160 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 29161 tracking web pages and assorted fixes. 29162 29163 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 29164 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 29165 related infrastructure improvements. 29166 29167 * Alexandre Oliva for various build infrastructure improvements, 29168 scripts and amazing testing work, including keeping libtool issues 29169 sane and happy. 29170 29171 * Stefan Olsson for work on mt_alloc. 29172 29173 * Melissa O'Neill for various NeXT fixes. 29174 29175 * Rainer Orth for random MIPS work, including improvements to GCC's 29176 o32 ABI support, improvements to dejagnu's MIPS support, Java 29177 configuration clean-ups and porting work, etc. 29178 29179 * Hartmut Penner for work on the s390 port. 29180 29181 * Paul Petersen wrote the machine description for the Alliant FX/8. 29182 29183 * Alexandre Petit-Bianco for implementing much of the Java compiler 29184 and continued Java maintainership. 29185 29186 * Matthias Pfaller for major improvements to the NS32k port. 29187 29188 * Gerald Pfeifer for his direction via the steering committee, 29189 pointing out lots of problems we need to solve, maintenance of the 29190 web pages, and taking care of documentation maintenance in general. 29191 29192 * Andrew Pinski for processing bug reports by the dozen. 29193 29194 * Ovidiu Predescu for his work on the Objective-C front end and 29195 runtime libraries. 29196 29197 * Jerry Quinn for major performance improvements in C++ formatted 29198 I/O. 29199 29200 * Ken Raeburn for various improvements to checker, MIPS ports and 29201 various cleanups in the compiler. 29202 29203 * Rolf W. Rasmussen for hacking on AWT. 29204 29205 * David Reese of Sun Microsystems contributed to the Solaris on 29206 PowerPC port. 29207 29208 * Volker Reichelt for keeping up with the problem reports. 29209 29210 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 29211 hacking. 29212 29213 * Loren J. Rittle for improvements to libstdc++-v3 including the 29214 FreeBSD port, threading fixes, thread-related configury changes, 29215 critical threading documentation, and solutions to really tricky 29216 I/O problems, as well as keeping GCC properly working on FreeBSD 29217 and continuous testing. 29218 29219 * Craig Rodrigues for processing tons of bug reports. 29220 29221 * Ola Ro"nnerup for work on mt_alloc. 29222 29223 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 29224 29225 * David Ronis inspired and encouraged Craig to rewrite the G77 29226 documentation in texinfo format by contributing a first pass at a 29227 translation of the old `g77-0.5.16/f/DOC' file. 29228 29229 * Ken Rose for fixes to GCC's delay slot filling code. 29230 29231 * Paul Rubin wrote most of the preprocessor. 29232 29233 * Pe'tur Runo'lfsson for major performance improvements in C++ 29234 formatted I/O and large file support in C++ filebuf. 29235 29236 * Chip Salzenberg for libstdc++ patches and improvements to locales, 29237 traits, Makefiles, libio, libtool hackery, and "long long" support. 29238 29239 * Juha Sarlin for improvements to the H8 code generator. 29240 29241 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 29242 300. 29243 29244 * Roger Sayle for improvements to constant folding and GCC's RTL 29245 optimizers as well as for fixing numerous bugs. 29246 29247 * Bradley Schatz for his work on the GCJ FAQ. 29248 29249 * Peter Schauer wrote the code to allow debugging to work on the 29250 Alpha. 29251 29252 * William Schelter did most of the work on the Intel 80386 support. 29253 29254 * Tobias Schlu"ter for work on GNU Fortran. 29255 29256 * Bernd Schmidt for various code generation improvements and major 29257 work in the reload pass as well a serving as release manager for 29258 GCC 2.95.3. 29259 29260 * Peter Schmid for constant testing of libstdc++--especially 29261 application testing, going above and beyond what was requested for 29262 the release criteria--and libstdc++ header file tweaks. 29263 29264 * Jason Schroeder for jcf-dump patches. 29265 29266 * Andreas Schwab for his work on the m68k port. 29267 29268 * Lars Segerlund for work on GNU Fortran. 29269 29270 * Joel Sherrill for his direction via the steering committee, RTEMS 29271 contributions and RTEMS testing. 29272 29273 * Nathan Sidwell for many C++ fixes/improvements. 29274 29275 * Jeffrey Siegal for helping RMS with the original design of GCC, 29276 some code which handles the parse tree and RTL data structures, 29277 constant folding and help with the original VAX & m68k ports. 29278 29279 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 29280 from the LWG (thereby keeping GCC in line with updates from the 29281 ISO). 29282 29283 * Franz Sirl for his ongoing work with making the PPC port stable 29284 for GNU/Linux. 29285 29286 * Andrey Slepuhin for assorted AIX hacking. 29287 29288 * Christopher Smith did the port for Convex machines. 29289 29290 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 29291 29292 * Randy Smith finished the Sun FPA support. 29293 29294 * Scott Snyder for queue, iterator, istream, and string fixes and 29295 libstdc++ testsuite entries. Also for providing the patch to G77 29296 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 29297 `LOGICAL*1'. 29298 29299 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 29300 29301 * Richard Stallman, for writing the original GCC and launching the 29302 GNU project. 29303 29304 * Jan Stein of the Chalmers Computer Society provided support for 29305 Genix, as well as part of the 32000 machine description. 29306 29307 * Nigel Stephens for various mips16 related fixes/improvements. 29308 29309 * Jonathan Stone wrote the machine description for the Pyramid 29310 computer. 29311 29312 * Graham Stott for various infrastructure improvements. 29313 29314 * John Stracke for his Java HTTP protocol fixes. 29315 29316 * Mike Stump for his Elxsi port, G++ contributions over the years 29317 and more recently his vxworks contributions 29318 29319 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 29320 29321 * Shigeya Suzuki for this fixes for the bsdi platforms. 29322 29323 * Ian Lance Taylor for his mips16 work, general configury hacking, 29324 fixincludes, etc. 29325 29326 * Holger Teutsch provided the support for the Clipper CPU. 29327 29328 * Gary Thomas for his ongoing work to make the PPC work for 29329 GNU/Linux. 29330 29331 * Philipp Thomas for random bug fixes throughout the compiler 29332 29333 * Jason Thorpe for thread support in libstdc++ on NetBSD. 29334 29335 * Kresten Krab Thorup wrote the run time support for the Objective-C 29336 language and the fantastic Java bytecode interpreter. 29337 29338 * Michael Tiemann for random bug fixes, the first instruction 29339 scheduler, initial C++ support, function integration, NS32k, SPARC 29340 and M88k machine description work, delay slot scheduling. 29341 29342 * Andreas Tobler for his work porting libgcj to Darwin. 29343 29344 * Teemu Torma for thread safe exception handling support. 29345 29346 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 29347 definitions, and of the VAX machine description. 29348 29349 * Tom Tromey for internationalization support and for his many Java 29350 contributions and libgcj maintainership. 29351 29352 * Lassi Tuura for improvements to config.guess to determine HP 29353 processor types. 29354 29355 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 29356 29357 * Andy Vaught for the design and initial implementation of the GNU 29358 Fortran front end. 29359 29360 * Brent Verner for work with the libstdc++ cshadow files and their 29361 associated configure steps. 29362 29363 * Todd Vierling for contributions for NetBSD ports. 29364 29365 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 29366 guidance. 29367 29368 * Dean Wakerley for converting the install documentation from HTML 29369 to texinfo in time for GCC 3.0. 29370 29371 * Krister Walfridsson for random bug fixes. 29372 29373 * Feng Wang for contributions to GNU Fortran. 29374 29375 * Stephen M. Webb for time and effort on making libstdc++ shadow 29376 files work with the tricky Solaris 8+ headers, and for pushing the 29377 build-time header tree. 29378 29379 * John Wehle for various improvements for the x86 code generator, 29380 related infrastructure improvements to help x86 code generation, 29381 value range propagation and other work, WE32k port. 29382 29383 * Ulrich Weigand for work on the s390 port. 29384 29385 * Zack Weinberg for major work on cpplib and various other bug fixes. 29386 29387 * Matt Welsh for help with Linux Threads support in GCJ. 29388 29389 * Urban Widmark for help fixing java.io. 29390 29391 * Mark Wielaard for new Java library code and his work integrating 29392 with Classpath. 29393 29394 * Dale Wiles helped port GCC to the Tahoe. 29395 29396 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 29397 29398 * Jim Wilson for his direction via the steering committee, tackling 29399 hard problems in various places that nobody else wanted to work 29400 on, strength reduction and other loop optimizations. 29401 29402 * Paul Woegerer and Tal Agmon for the CRX port. 29403 29404 * Carlo Wood for various fixes. 29405 29406 * Tom Wood for work on the m88k port. 29407 29408 * Canqun Yang for work on GNU Fortran. 29409 29410 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 29411 description for the Tron architecture (specifically, the Gmicro). 29412 29413 * Kevin Zachmann helped port GCC to the Tahoe. 29414 29415 * Ayal Zaks for Swing Modulo Scheduling (SMS). 29416 29417 * Xiaoqiang Zhang for work on GNU Fortran. 29418 29419 * Gilles Zunino for help porting Java to Irix. 29420 29421 29422 The following people are recognized for their contributions to GNAT, 29423 the Ada front end of GCC: 29424 * Bernard Banner 29425 29426 * Romain Berrendonner 29427 29428 * Geert Bosch 29429 29430 * Emmanuel Briot 29431 29432 * Joel Brobecker 29433 29434 * Ben Brosgol 29435 29436 * Vincent Celier 29437 29438 * Arnaud Charlet 29439 29440 * Chien Chieng 29441 29442 * Cyrille Comar 29443 29444 * Cyrille Crozes 29445 29446 * Robert Dewar 29447 29448 * Gary Dismukes 29449 29450 * Robert Duff 29451 29452 * Ed Falis 29453 29454 * Ramon Fernandez 29455 29456 * Sam Figueroa 29457 29458 * Vasiliy Fofanov 29459 29460 * Michael Friess 29461 29462 * Franco Gasperoni 29463 29464 * Ted Giering 29465 29466 * Matthew Gingell 29467 29468 * Laurent Guerby 29469 29470 * Jerome Guitton 29471 29472 * Olivier Hainque 29473 29474 * Jerome Hugues 29475 29476 * Hristian Kirtchev 29477 29478 * Jerome Lambourg 29479 29480 * Bruno Leclerc 29481 29482 * Albert Lee 29483 29484 * Sean McNeil 29485 29486 * Javier Miranda 29487 29488 * Laurent Nana 29489 29490 * Pascal Obry 29491 29492 * Dong-Ik Oh 29493 29494 * Laurent Pautet 29495 29496 * Brett Porter 29497 29498 * Thomas Quinot 29499 29500 * Nicolas Roche 29501 29502 * Pat Rogers 29503 29504 * Jose Ruiz 29505 29506 * Douglas Rupp 29507 29508 * Sergey Rybin 29509 29510 * Gail Schenker 29511 29512 * Ed Schonberg 29513 29514 * Nicolas Setton 29515 29516 * Samuel Tardieu 29517 29518 29519 The following people are recognized for their contributions of new 29520 features, bug reports, testing and integration of classpath/libgcj for 29521 GCC version 4.1: 29522 * Lillian Angel for `JTree' implementation and lots Free Swing 29523 additions and bugfixes. 29524 29525 * Wolfgang Baer for `GapContent' bugfixes. 29526 29527 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 29528 event fixes, lots of Free Swing work including `JTable' editing. 29529 29530 * Stuart Ballard for RMI constant fixes. 29531 29532 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 29533 29534 * Gary Benson for `MessageFormat' fixes. 29535 29536 * Daniel Bonniot for `Serialization' fixes. 29537 29538 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 29539 and `DOM xml:id' support. 29540 29541 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 29542 29543 * Archie Cobbs for build fixes, VM interface updates, 29544 `URLClassLoader' updates. 29545 29546 * Kelley Cook for build fixes. 29547 29548 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 29549 29550 * David Daney for `BitSet' bugfixes, `HttpURLConnection' rewrite and 29551 improvements. 29552 29553 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 29554 2D support. Lots of imageio framework additions, lots of AWT and 29555 Free Swing bugfixes. 29556 29557 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 29558 fixes, better `Proxy' support, bugfixes and IKVM integration. 29559 29560 * Santiago Gala for `AccessControlContext' fixes. 29561 29562 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 29563 improvements. 29564 29565 * David Gilbert for `basic' and `metal' icon and plaf support and 29566 lots of documenting, Lots of Free Swing and metal theme additions. 29567 `MetalIconFactory' implementation. 29568 29569 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 29570 29571 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 29572 build speedups. 29573 29574 * Kim Ho for `JFileChooser' implementation. 29575 29576 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 29577 updates, `Serialization' fixes, `Properties' XML support and 29578 generic branch work, VMIntegration guide update. 29579 29580 * Bastiaan Huisman for `TimeZone' bugfixing. 29581 29582 * Andreas Jaeger for mprec updates. 29583 29584 * Paul Jenner for better `-Werror' support. 29585 29586 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 29587 29588 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 29589 bugfixes all over. Lots of Free Swing work including styled text. 29590 29591 * Simon Kitching for `String' cleanups and optimization suggestions. 29592 29593 * Michael Koch for configuration fixes, `Locale' updates, bug and 29594 build fixes. 29595 29596 * Guilhem Lavaux for configuration, thread and channel fixes and 29597 Kaffe integration. JCL native `Pointer' updates. Logger bugfixes. 29598 29599 * David Lichteblau for JCL support library global/local reference 29600 cleanups. 29601 29602 * Aaron Luchko for JDWP updates and documentation fixes. 29603 29604 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 29605 features. 29606 29607 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 29608 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 29609 and implementing the Qt4 peers. 29610 29611 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 29612 `SystemLogger' and `FileHandler' rotate implementations, NIO 29613 `FileChannel.map' support, security and policy updates. 29614 29615 * Bryce McKinlay for RMI work. 29616 29617 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 29618 testing and documenting. 29619 29620 * Kalle Olavi Niemitalo for build fixes. 29621 29622 * Rainer Orth for build fixes. 29623 29624 * Andrew Overholt for `File' locking fixes. 29625 29626 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 29627 29628 * Olga Rodimina for `MenuSelectionManager' implementation. 29629 29630 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 29631 29632 * Julian Scheid for documentation updates and gjdoc support. 29633 29634 * Christian Schlichtherle for zip fixes and cleanups. 29635 29636 * Robert Schuster for documentation updates and beans fixes, 29637 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 29638 and URL, AWT and Free Swing bugfixes. 29639 29640 * Keith Seitz for lots of JDWP work. 29641 29642 * Christian Thalinger for 64-bit cleanups, Configuration and VM 29643 interface fixes and `CACAO' integration, `fdlibm' updates. 29644 29645 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 29646 29647 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 29648 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 29649 29650 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 29651 integration. `Qt4' build infrastructure, `SHA1PRNG' and 29652 `GdkPixbugDecoder' updates. 29653 29654 * Tom Tromey for Eclipse integration, generics work, lots of bugfixes 29655 and gcj integration including coordinating The Big Merge. 29656 29657 * Mark Wielaard for bugfixes, packaging and release management, 29658 `Clipboard' implementation, system call interrupts and network 29659 timeouts and `GdkPixpufDecoder' fixes. 29660 29661 29662 In addition to the above, all of which also contributed time and 29663 energy in testing GCC, we would like to thank the following for their 29664 contributions to testing: 29665 29666 * Michael Abd-El-Malek 29667 29668 * Thomas Arend 29669 29670 * Bonzo Armstrong 29671 29672 * Steven Ashe 29673 29674 * Chris Baldwin 29675 29676 * David Billinghurst 29677 29678 * Jim Blandy 29679 29680 * Stephane Bortzmeyer 29681 29682 * Horst von Brand 29683 29684 * Frank Braun 29685 29686 * Rodney Brown 29687 29688 * Sidney Cadot 29689 29690 * Bradford Castalia 29691 29692 * Jonathan Corbet 29693 29694 * Ralph Doncaster 29695 29696 * Richard Emberson 29697 29698 * Levente Farkas 29699 29700 * Graham Fawcett 29701 29702 * Mark Fernyhough 29703 29704 * Robert A. French 29705 29706 * Jo"rgen Freyh 29707 29708 * Mark K. Gardner 29709 29710 * Charles-Antoine Gauthier 29711 29712 * Yung Shing Gene 29713 29714 * David Gilbert 29715 29716 * Simon Gornall 29717 29718 * Fred Gray 29719 29720 * John Griffin 29721 29722 * Patrik Hagglund 29723 29724 * Phil Hargett 29725 29726 * Amancio Hasty 29727 29728 * Takafumi Hayashi 29729 29730 * Bryan W. Headley 29731 29732 * Kevin B. Hendricks 29733 29734 * Joep Jansen 29735 29736 * Christian Joensson 29737 29738 * Michel Kern 29739 29740 * David Kidd 29741 29742 * Tobias Kuipers 29743 29744 * Anand Krishnaswamy 29745 29746 * A. O. V. Le Blanc 29747 29748 * llewelly 29749 29750 * Damon Love 29751 29752 * Brad Lucier 29753 29754 * Matthias Klose 29755 29756 * Martin Knoblauch 29757 29758 * Rick Lutowski 29759 29760 * Jesse Macnish 29761 29762 * Stefan Morrell 29763 29764 * Anon A. Mous 29765 29766 * Matthias Mueller 29767 29768 * Pekka Nikander 29769 29770 * Rick Niles 29771 29772 * Jon Olson 29773 29774 * Magnus Persson 29775 29776 * Chris Pollard 29777 29778 * Richard Polton 29779 29780 * Derk Reefman 29781 29782 * David Rees 29783 29784 * Paul Reilly 29785 29786 * Tom Reilly 29787 29788 * Torsten Rueger 29789 29790 * Danny Sadinoff 29791 29792 * Marc Schifer 29793 29794 * Erik Schnetter 29795 29796 * Wayne K. Schroll 29797 29798 * David Schuler 29799 29800 * Vin Shelton 29801 29802 * Tim Souder 29803 29804 * Adam Sulmicki 29805 29806 * Bill Thorson 29807 29808 * George Talbot 29809 29810 * Pedro A. M. Vazquez 29811 29812 * Gregory Warnes 29813 29814 * Ian Watson 29815 29816 * David E. Young 29817 29818 * And many others 29819 29820 And finally we'd like to thank everyone who uses the compiler, submits 29821 bug reports and generally reminds us why we're doing this work in the 29822 first place. 29823 29824 29825 File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 29826 29827 Option Index 29828 ************ 29829 29830 GCC's command line options are indexed here without any initial `-' or 29831 `--'. Where an option has both positive and negative forms (such as 29832 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 29833 indexed under the most appropriate form; it may sometimes be useful to 29834 look up both forms. 29835 29836 [index] 29837 * Menu: 29838 29839 * ###: Overall Options. (line 192) 29840 * A: Preprocessor Options. 29841 (line 526) 29842 * all_load: Darwin Options. (line 103) 29843 * allowable_client: Darwin Options. (line 190) 29844 * ansi <1>: Non-bugs. (line 107) 29845 * ansi <2>: Other Builtins. (line 22) 29846 * ansi <3>: Preprocessor Options. 29847 (line 324) 29848 * ansi <4>: C Dialect Options. (line 11) 29849 * ansi: Standards. (line 13) 29850 * arch_errors_fatal: Darwin Options. (line 107) 29851 * aux-info: C Dialect Options. (line 119) 29852 * b: Target Options. (line 13) 29853 * B: Directory Options. (line 41) 29854 * bcopy-builtin: PDP-11 Options. (line 32) 29855 * bind_at_load: Darwin Options. (line 111) 29856 * bundle: Darwin Options. (line 116) 29857 * bundle_loader: Darwin Options. (line 120) 29858 * c: Link Options. (line 20) 29859 * C: Preprocessor Options. 29860 (line 573) 29861 * c: Overall Options. (line 147) 29862 * client_name: Darwin Options. (line 190) 29863 * combine: Overall Options. (line 203) 29864 * compatibility_version: Darwin Options. (line 190) 29865 * coverage: Debugging Options. (line 239) 29866 * crossjumping: Optimize Options. (line 435) 29867 * current_version: Darwin Options. (line 190) 29868 * D: Preprocessor Options. 29869 (line 33) 29870 * d: Debugging Options. (line 291) 29871 * da: Debugging Options. (line 457) 29872 * dA: Debugging Options. (line 304) 29873 * dB: Debugging Options. (line 309) 29874 * dC: Debugging Options. (line 319) 29875 * dc: Debugging Options. (line 313) 29876 * dD <1>: Preprocessor Options. 29877 (line 554) 29878 * dD: Debugging Options. (line 333) 29879 * dd: Debugging Options. (line 327) 29880 * dE: Debugging Options. (line 338) 29881 * dead_strip: Darwin Options. (line 190) 29882 * dependency-file: Darwin Options. (line 190) 29883 * df: Debugging Options. (line 343) 29884 * dG: Debugging Options. (line 355) 29885 * dg: Debugging Options. (line 350) 29886 * dH: Debugging Options. (line 460) 29887 * dh: Debugging Options. (line 362) 29888 * dI: Preprocessor Options. 29889 (line 563) 29890 * di: Debugging Options. (line 366) 29891 * dj: Debugging Options. (line 370) 29892 * dk: Debugging Options. (line 374) 29893 * dL: Debugging Options. (line 383) 29894 * dl: Debugging Options. (line 379) 29895 * dM: Preprocessor Options. 29896 (line 542) 29897 * dm: Debugging Options. (line 463) 29898 * dM: Debugging Options. (line 394) 29899 * dm: Debugging Options. (line 390) 29900 * dN <1>: Preprocessor Options. 29901 (line 560) 29902 * dN: Debugging Options. (line 403) 29903 * dn: Debugging Options. (line 399) 29904 * do: Debugging Options. (line 407) 29905 * dP: Debugging Options. (line 472) 29906 * dp: Debugging Options. (line 467) 29907 * dR: Debugging Options. (line 415) 29908 * dr: Debugging Options. (line 411) 29909 * dS: Debugging Options. (line 424) 29910 * ds: Debugging Options. (line 419) 29911 * dT: Debugging Options. (line 433) 29912 * dt: Debugging Options. (line 428) 29913 * dumpmachine: Debugging Options. (line 840) 29914 * dumpspecs: Debugging Options. (line 848) 29915 * dumpversion: Debugging Options. (line 844) 29916 * dv: Debugging Options. (line 476) 29917 * dV: Debugging Options. (line 438) 29918 * dw: Debugging Options. (line 445) 29919 * dx: Debugging Options. (line 481) 29920 * dy: Debugging Options. (line 485) 29921 * dylib_file: Darwin Options. (line 190) 29922 * dylinker_install_name: Darwin Options. (line 190) 29923 * dynamic: Darwin Options. (line 190) 29924 * dynamiclib: Darwin Options. (line 124) 29925 * dZ: Debugging Options. (line 453) 29926 * dz: Debugging Options. (line 449) 29927 * E <1>: Link Options. (line 20) 29928 * E: Overall Options. (line 168) 29929 * EB <1>: MIPS Options. (line 7) 29930 * EB: ARC Options. (line 12) 29931 * EL <1>: MIPS Options. (line 10) 29932 * EL: ARC Options. (line 9) 29933 * exported_symbols_list: Darwin Options. (line 190) 29934 * F: Darwin Options. (line 32) 29935 * fabi-version: C++ Dialect Options. 29936 (line 20) 29937 * falign-functions: Optimize Options. (line 902) 29938 * falign-jumps: Optimize Options. (line 952) 29939 * falign-labels: Optimize Options. (line 920) 29940 * falign-loops: Optimize Options. (line 938) 29941 * fargument-alias: Code Gen Options. (line 364) 29942 * fargument-noalias: Code Gen Options. (line 364) 29943 * fargument-noalias-anything: Code Gen Options. (line 364) 29944 * fargument-noalias-global: Code Gen Options. (line 364) 29945 * fasynchronous-unwind-tables: Code Gen Options. (line 64) 29946 * fbounds-check <1>: Code Gen Options. (line 15) 29947 * fbounds-check: Optimize Options. (line 326) 29948 * fbranch-probabilities: Optimize Options. (line 1200) 29949 * fbranch-target-load-optimize: Optimize Options. (line 1308) 29950 * fbranch-target-load-optimize2: Optimize Options. (line 1314) 29951 * fbtr-bb-exclusive: Optimize Options. (line 1318) 29952 * fcall-saved <1>: Interoperation. (line 150) 29953 * fcall-saved: Code Gen Options. (line 237) 29954 * fcall-used: Code Gen Options. (line 223) 29955 * fcaller-saves: Optimize Options. (line 579) 29956 * fcheck-new: C++ Dialect Options. 29957 (line 34) 29958 * fcommon: Variable Attributes. 29959 (line 92) 29960 * fcond-mismatch: C Dialect Options. (line 235) 29961 * fconserve-space: C++ Dialect Options. 29962 (line 44) 29963 * fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 29964 (line 30) 29965 * fcse-follow-jumps: Optimize Options. (line 363) 29966 * fcse-skip-blocks: Optimize Options. (line 372) 29967 * fcx-limited-range: Optimize Options. (line 1186) 29968 * fdata-sections: Optimize Options. (line 1289) 29969 * fdelayed-branch: Optimize Options. (line 488) 29970 * fdelete-null-pointer-checks: Optimize Options. (line 457) 29971 * fdiagnostics-show-location: Language Independent Options. 29972 (line 21) 29973 * fdiagnostics-show-option: Language Independent Options. 29974 (line 36) 29975 * fdirectives-only: Preprocessor Options. 29976 (line 440) 29977 * fdollars-in-identifiers <1>: Interoperation. (line 146) 29978 * fdollars-in-identifiers: Preprocessor Options. 29979 (line 456) 29980 * fdump-class-hierarchy: Debugging Options. (line 511) 29981 * fdump-ipa: Debugging Options. (line 518) 29982 * fdump-noaddr: Debugging Options. (line 488) 29983 * fdump-rtl-all: Debugging Options. (line 457) 29984 * fdump-rtl-bbro: Debugging Options. (line 309) 29985 * fdump-rtl-btl: Debugging Options. (line 327) 29986 * fdump-rtl-bypass: Debugging Options. (line 355) 29987 * fdump-rtl-ce1: Debugging Options. (line 319) 29988 * fdump-rtl-ce2: Debugging Options. (line 319) 29989 * fdump-rtl-ce3: Debugging Options. (line 338) 29990 * fdump-rtl-cfg: Debugging Options. (line 343) 29991 * fdump-rtl-combine: Debugging Options. (line 313) 29992 * fdump-rtl-cse: Debugging Options. (line 419) 29993 * fdump-rtl-cse2: Debugging Options. (line 428) 29994 * fdump-rtl-dbr: Debugging Options. (line 327) 29995 * fdump-rtl-eh: Debugging Options. (line 362) 29996 * fdump-rtl-expand: Debugging Options. (line 411) 29997 * fdump-rtl-flow2: Debugging Options. (line 445) 29998 * fdump-rtl-gcse: Debugging Options. (line 355) 29999 * fdump-rtl-greg: Debugging Options. (line 350) 30000 * fdump-rtl-jump: Debugging Options. (line 370) 30001 * fdump-rtl-life: Debugging Options. (line 343) 30002 * fdump-rtl-loop2: Debugging Options. (line 383) 30003 * fdump-rtl-lreg: Debugging Options. (line 379) 30004 * fdump-rtl-mach: Debugging Options. (line 394) 30005 * fdump-rtl-peephole2: Debugging Options. (line 449) 30006 * fdump-rtl-postreload: Debugging Options. (line 407) 30007 * fdump-rtl-regmove: Debugging Options. (line 403) 30008 * fdump-rtl-rnreg: Debugging Options. (line 399) 30009 * fdump-rtl-sched: Debugging Options. (line 424) 30010 * fdump-rtl-sched2: Debugging Options. (line 415) 30011 * fdump-rtl-sibling: Debugging Options. (line 366) 30012 * fdump-rtl-sms: Debugging Options. (line 390) 30013 * fdump-rtl-stack: Debugging Options. (line 374) 30014 * fdump-rtl-tracer: Debugging Options. (line 433) 30015 * fdump-rtl-vartrack: Debugging Options. (line 438) 30016 * fdump-rtl-vpt: Debugging Options. (line 438) 30017 * fdump-rtl-web: Debugging Options. (line 453) 30018 * fdump-translation-unit: Debugging Options. (line 503) 30019 * fdump-tree: Debugging Options. (line 533) 30020 * fdump-tree-alias: Debugging Options. (line 621) 30021 * fdump-tree-all: Debugging Options. (line 706) 30022 * fdump-tree-ccp: Debugging Options. (line 625) 30023 * fdump-tree-cfg: Debugging Options. (line 596) 30024 * fdump-tree-ch: Debugging Options. (line 608) 30025 * fdump-tree-copyprop: Debugging Options. (line 641) 30026 * fdump-tree-copyrename: Debugging Options. (line 687) 30027 * fdump-tree-dce: Debugging Options. (line 649) 30028 * fdump-tree-dom: Debugging Options. (line 667) 30029 * fdump-tree-dse: Debugging Options. (line 672) 30030 * fdump-tree-forwprop: Debugging Options. (line 682) 30031 * fdump-tree-fre: Debugging Options. (line 637) 30032 * fdump-tree-gimple: Debugging Options. (line 591) 30033 * fdump-tree-mudflap: Debugging Options. (line 653) 30034 * fdump-tree-nrv: Debugging Options. (line 692) 30035 * fdump-tree-phiopt: Debugging Options. (line 677) 30036 * fdump-tree-pre: Debugging Options. (line 633) 30037 * fdump-tree-salias: Debugging Options. (line 616) 30038 * fdump-tree-sink: Debugging Options. (line 663) 30039 * fdump-tree-sra: Debugging Options. (line 658) 30040 * fdump-tree-ssa: Debugging Options. (line 612) 30041 * fdump-tree-store_copyprop: Debugging Options. (line 645) 30042 * fdump-tree-storeccp: Debugging Options. (line 629) 30043 * fdump-tree-vcg: Debugging Options. (line 600) 30044 * fdump-tree-vect: Debugging Options. (line 697) 30045 * fdump-tree-vrp: Debugging Options. (line 702) 30046 * fdump-unnumbered: Debugging Options. (line 495) 30047 * fearly-inlining: Optimize Options. (line 204) 30048 * feliminate-dwarf2-dups: Debugging Options. (line 125) 30049 * feliminate-unused-debug-symbols: Debugging Options. (line 52) 30050 * feliminate-unused-debug-types: Debugging Options. (line 852) 30051 * fexceptions: Code Gen Options. (line 34) 30052 * fexec-charset: Preprocessor Options. 30053 (line 483) 30054 * fexpensive-optimizations: Optimize Options. (line 470) 30055 * fextended-identifiers: Preprocessor Options. 30056 (line 459) 30057 * ffast-math: Optimize Options. (line 1070) 30058 * ffinite-math-only: Optimize Options. (line 1114) 30059 * ffix-and-continue: Darwin Options. (line 97) 30060 * ffixed: Code Gen Options. (line 211) 30061 * ffloat-store <1>: Disappointments. (line 77) 30062 * ffloat-store: Optimize Options. (line 1056) 30063 * ffor-scope: C++ Dialect Options. 30064 (line 86) 30065 * fforce-addr: Optimize Options. (line 154) 30066 * fforce-mem: Optimize Options. (line 146) 30067 * ffreestanding <1>: Function Attributes. 30068 (line 314) 30069 * ffreestanding <2>: Warning Options. (line 94) 30070 * ffreestanding <3>: C Dialect Options. (line 190) 30071 * ffreestanding: Standards. (line 81) 30072 * ffriend-injection: C++ Dialect Options. 30073 (line 56) 30074 * ffunction-sections: Optimize Options. (line 1289) 30075 * fgcse: Optimize Options. (line 386) 30076 * fgcse-after-reload: Optimize Options. (line 422) 30077 * fgcse-las: Optimize Options. (line 415) 30078 * fgcse-lm: Optimize Options. (line 397) 30079 * fgcse-sm: Optimize Options. (line 406) 30080 * fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 30081 (line 39) 30082 * fgnu89-inline: C Dialect Options. (line 98) 30083 * fhosted: C Dialect Options. (line 183) 30084 * filelist: Darwin Options. (line 190) 30085 * findirect-data: Darwin Options. (line 97) 30086 * finhibit-size-directive: Code Gen Options. (line 147) 30087 * finline-functions: Optimize Options. (line 185) 30088 * finline-functions-called-once: Optimize Options. (line 196) 30089 * finline-limit: Optimize Options. (line 214) 30090 * finput-charset: Preprocessor Options. 30091 (line 496) 30092 * finstrument-functions <1>: Function Attributes. 30093 (line 508) 30094 * finstrument-functions: Code Gen Options. (line 267) 30095 * finstrument-functions-exclude-file-list: Code Gen Options. (line 304) 30096 * finstrument-functions-exclude-function-list: Code Gen Options. 30097 (line 322) 30098 * fkeep-inline-functions <1>: Inline. (line 58) 30099 * fkeep-inline-functions: Optimize Options. (line 252) 30100 * fkeep-static-consts: Optimize Options. (line 259) 30101 * flat_namespace: Darwin Options. (line 190) 30102 * fleading-underscore: Code Gen Options. (line 381) 30103 * fmem-report: Debugging Options. (line 220) 30104 * fmessage-length: Language Independent Options. 30105 (line 15) 30106 * fmodulo-sched: Optimize Options. (line 288) 30107 * fmove-loop-invariants: Optimize Options. (line 1279) 30108 * fms-extensions <1>: Unnamed Fields. (line 37) 30109 * fms-extensions <2>: C++ Dialect Options. 30110 (line 121) 30111 * fms-extensions: C Dialect Options. (line 206) 30112 * fmudflap: Optimize Options. (line 333) 30113 * fmudflapir: Optimize Options. (line 333) 30114 * fmudflapth: Optimize Options. (line 333) 30115 * fnext-runtime: Objective-C and Objective-C++ Dialect Options. 30116 (line 43) 30117 * fno-access-control: C++ Dialect Options. 30118 (line 30) 30119 * fno-asm: C Dialect Options. (line 135) 30120 * fno-branch-count-reg: Optimize Options. (line 293) 30121 * fno-builtin <1>: Other Builtins. (line 14) 30122 * fno-builtin <2>: Function Attributes. 30123 (line 314) 30124 * fno-builtin <3>: Warning Options. (line 94) 30125 * fno-builtin: C Dialect Options. (line 149) 30126 * fno-common <1>: Variable Attributes. 30127 (line 92) 30128 * fno-common: Code Gen Options. (line 135) 30129 * fno-cprop-registers: Optimize Options. (line 1028) 30130 * fno-cx-limited-range: Optimize Options. (line 1186) 30131 * fno-default-inline <1>: Inline. (line 53) 30132 * fno-default-inline <2>: Optimize Options. (line 131) 30133 * fno-default-inline: C++ Dialect Options. 30134 (line 233) 30135 * fno-defer-pop: Optimize Options. (line 138) 30136 * fno-elide-constructors: C++ Dialect Options. 30137 (line 69) 30138 * fno-enforce-eh-specs: C++ Dialect Options. 30139 (line 75) 30140 * fno-for-scope: C++ Dialect Options. 30141 (line 86) 30142 * fno-function-cse: Optimize Options. (line 303) 30143 * fno-gnu-keywords: C++ Dialect Options. 30144 (line 98) 30145 * fno-guess-branch-probability: Optimize Options. (line 787) 30146 * fno-ident: Code Gen Options. (line 144) 30147 * fno-implement-inlines <1>: C++ Interface. (line 75) 30148 * fno-implement-inlines: C++ Dialect Options. 30149 (line 115) 30150 * fno-implicit-inline-templates: C++ Dialect Options. 30151 (line 109) 30152 * fno-implicit-templates <1>: Template Instantiation. 30153 (line 87) 30154 * fno-implicit-templates: C++ Dialect Options. 30155 (line 103) 30156 * fno-inline: Optimize Options. (line 179) 30157 * fno-jump-tables: Code Gen Options. (line 203) 30158 * fno-math-errno: Optimize Options. (line 1083) 30159 * fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 30160 (line 49) 30161 * fno-nonansi-builtins: C++ Dialect Options. 30162 (line 126) 30163 * fno-operator-names: C++ Dialect Options. 30164 (line 131) 30165 * fno-optional-diags: C++ Dialect Options. 30166 (line 135) 30167 * fno-peephole: Optimize Options. (line 778) 30168 * fno-peephole2: Optimize Options. (line 778) 30169 * fno-rtti: C++ Dialect Options. 30170 (line 150) 30171 * fno-sched-interblock: Optimize Options. (line 514) 30172 * fno-sched-spec: Optimize Options. (line 519) 30173 * fno-show-column: Preprocessor Options. 30174 (line 521) 30175 * fno-signed-bitfields: C Dialect Options. (line 268) 30176 * fno-stack-limit: Code Gen Options. (line 347) 30177 * fno-threadsafe-statics: C++ Dialect Options. 30178 (line 172) 30179 * fno-trapping-math: Optimize Options. (line 1124) 30180 * fno-unsigned-bitfields: C Dialect Options. (line 268) 30181 * fno-use-cxa-get-exception-ptr: C++ Dialect Options. 30182 (line 185) 30183 * fno-weak: C++ Dialect Options. 30184 (line 218) 30185 * fno-working-directory: Preprocessor Options. 30186 (line 506) 30187 * fno-zero-initialized-in-bss: Optimize Options. (line 314) 30188 * fnon-call-exceptions: Code Gen Options. (line 48) 30189 * fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 30190 (line 56) 30191 * fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 30192 (line 81) 30193 * fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 30194 (line 85) 30195 * fobjc-gc: Objective-C and Objective-C++ Dialect Options. 30196 (line 170) 30197 * fomit-frame-pointer: Optimize Options. (line 158) 30198 * fopenmp: C Dialect Options. (line 200) 30199 * foptimize-register-move: Optimize Options. (line 477) 30200 * foptimize-sibling-calls: Optimize Options. (line 174) 30201 * force_cpusubtype_ALL: Darwin Options. (line 129) 30202 * force_flat_namespace: Darwin Options. (line 190) 30203 * fpack-struct: Code Gen Options. (line 254) 30204 * fpcc-struct-return <1>: Incompatibilities. (line 170) 30205 * fpcc-struct-return: Code Gen Options. (line 70) 30206 * fpch-deps: Preprocessor Options. 30207 (line 280) 30208 * fpch-preprocess: Preprocessor Options. 30209 (line 288) 30210 * fpeel-loops: Optimize Options. (line 1271) 30211 * fpermissive: C++ Dialect Options. 30212 (line 140) 30213 * fPIC: Code Gen Options. (line 184) 30214 * fpic: Code Gen Options. (line 163) 30215 * fPIE: Code Gen Options. (line 197) 30216 * fpie: Code Gen Options. (line 197) 30217 * fprefetch-loop-arrays: Optimize Options. (line 767) 30218 * fpreprocessed: Preprocessor Options. 30219 (line 464) 30220 * fprofile-arcs <1>: Other Builtins. (line 236) 30221 * fprofile-arcs: Debugging Options. (line 224) 30222 * fprofile-generate: Optimize Options. (line 1035) 30223 * fprofile-use: Optimize Options. (line 1044) 30224 * fprofile-values: Optimize Options. (line 1219) 30225 * frandom-string: Debugging Options. (line 735) 30226 * freg-struct-return: Code Gen Options. (line 88) 30227 * fregmove: Optimize Options. (line 477) 30228 * frename-registers: Optimize Options. (line 1238) 30229 * freorder-blocks: Optimize Options. (line 804) 30230 * freorder-blocks-and-partition: Optimize Options. (line 810) 30231 * freorder-functions: Optimize Options. (line 821) 30232 * freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 30233 (line 174) 30234 * frepo <1>: Template Instantiation. 30235 (line 62) 30236 * frepo: C++ Dialect Options. 30237 (line 145) 30238 * frerun-cse-after-loop: Optimize Options. (line 380) 30239 * frounding-math: Optimize Options. (line 1139) 30240 * frtl-abstract-sequences: Optimize Options. (line 1159) 30241 * fsched-spec-load: Optimize Options. (line 524) 30242 * fsched-spec-load-dangerous: Optimize Options. (line 529) 30243 * fsched-stalled-insns: Optimize Options. (line 534) 30244 * fsched-stalled-insns-dep: Optimize Options. (line 539) 30245 * fsched-verbose: Debugging Options. (line 745) 30246 * fsched2-use-superblocks: Optimize Options. (line 546) 30247 * fsched2-use-traces: Optimize Options. (line 557) 30248 * fschedule-insns: Optimize Options. (line 495) 30249 * fschedule-insns2: Optimize Options. (line 505) 30250 * fscheduling-in-modulo-scheduled-loops: Optimize Options. (line 573) 30251 * fsection-anchors: Optimize Options. (line 1334) 30252 * fsee: Optimize Options. (line 569) 30253 * fshort-double: Code Gen Options. (line 117) 30254 * fshort-enums <1>: Non-bugs. (line 42) 30255 * fshort-enums <2>: Type Attributes. (line 112) 30256 * fshort-enums <3>: Structures unions enumerations and bit-fields implementation. 30257 (line 43) 30258 * fshort-enums: Code Gen Options. (line 106) 30259 * fshort-wchar: Code Gen Options. (line 125) 30260 * fsignaling-nans: Optimize Options. (line 1166) 30261 * fsigned-bitfields <1>: Non-bugs. (line 57) 30262 * fsigned-bitfields: C Dialect Options. (line 268) 30263 * fsigned-char <1>: Characters implementation. 30264 (line 31) 30265 * fsigned-char: C Dialect Options. (line 258) 30266 * fsingle-precision-constant: Optimize Options. (line 1181) 30267 * fsplit-ivs-in-unroller: Optimize Options. (line 748) 30268 * fstack-check: Code Gen Options. (line 332) 30269 * fstack-limit-register: Code Gen Options. (line 347) 30270 * fstack-limit-symbol: Code Gen Options. (line 347) 30271 * fstats: C++ Dialect Options. 30272 (line 160) 30273 * fstrict-aliasing: Optimize Options. (line 834) 30274 * fstrict-overflow: Optimize Options. (line 876) 30275 * fsyntax-only: Warning Options. (line 23) 30276 * ftabstop: Preprocessor Options. 30277 (line 477) 30278 * ftemplate-depth: C++ Dialect Options. 30279 (line 165) 30280 * ftest-coverage: Debugging Options. (line 280) 30281 * fthread-jumps: Optimize Options. (line 354) 30282 * ftime-report: Debugging Options. (line 216) 30283 * ftracer: Optimize Options. (line 731) 30284 * ftrapv: Code Gen Options. (line 22) 30285 * ftree-vect-loop-version: Optimize Options. (line 713) 30286 * ftree-vectorizer-verbose: Debugging Options. (line 710) 30287 * funit-at-a-time: Optimize Options. (line 965) 30288 * funroll-all-loops: Optimize Options. (line 742) 30289 * funroll-loops: Optimize Options. (line 736) 30290 * funsafe-loop-optimizations: Optimize Options. (line 427) 30291 * funsafe-math-optimizations: Optimize Options. (line 1100) 30292 * funsigned-bitfields <1>: Non-bugs. (line 57) 30293 * funsigned-bitfields <2>: Structures unions enumerations and bit-fields implementation. 30294 (line 17) 30295 * funsigned-bitfields: C Dialect Options. (line 268) 30296 * funsigned-char <1>: Characters implementation. 30297 (line 31) 30298 * funsigned-char: C Dialect Options. (line 240) 30299 * funswitch-loops: Optimize Options. (line 1283) 30300 * funwind-tables: Code Gen Options. (line 57) 30301 * fuse-cxa-atexit: C++ Dialect Options. 30302 (line 178) 30303 * fvar-tracking: Debugging Options. (line 788) 30304 * fvariable-expansion-in-unroller: Optimize Options. (line 762) 30305 * fverbose-asm: Code Gen Options. (line 154) 30306 * fvisibility: Code Gen Options. (line 400) 30307 * fvisibility-inlines-hidden: C++ Dialect Options. 30308 (line 190) 30309 * fvpt: Optimize Options. (line 1229) 30310 * fweb: Optimize Options. (line 1004) 30311 * fwhole-program: Optimize Options. (line 1015) 30312 * fwide-exec-charset: Preprocessor Options. 30313 (line 488) 30314 * fworking-directory: Preprocessor Options. 30315 (line 506) 30316 * fwrapv: Code Gen Options. (line 26) 30317 * fzero-link: Objective-C and Objective-C++ Dialect Options. 30318 (line 184) 30319 * G <1>: System V Options. (line 10) 30320 * G <2>: RS/6000 and PowerPC Options. 30321 (line 607) 30322 * G <3>: MIPS Options. (line 216) 30323 * G: M32R/D Options. (line 57) 30324 * g: Debugging Options. (line 10) 30325 * gcoff: Debugging Options. (line 70) 30326 * gdwarf-2: Debugging Options. (line 88) 30327 * gen-decls: Objective-C and Objective-C++ Dialect Options. 30328 (line 194) 30329 * gfull: Darwin Options. (line 64) 30330 * ggdb: Debugging Options. (line 38) 30331 * gnu-ld: HPPA Options. (line 113) 30332 * gstabs: Debugging Options. (line 44) 30333 * gstabs+: Debugging Options. (line 64) 30334 * gused: Darwin Options. (line 59) 30335 * gvms: Debugging Options. (line 95) 30336 * gxcoff: Debugging Options. (line 75) 30337 * gxcoff+: Debugging Options. (line 80) 30338 * H: Preprocessor Options. 30339 (line 628) 30340 * headerpad_max_install_names: Darwin Options. (line 190) 30341 * help <1>: Preprocessor Options. 30342 (line 620) 30343 * help: Overall Options. (line 219) 30344 * hp-ld: HPPA Options. (line 125) 30345 * I <1>: Directory Options. (line 10) 30346 * I: Preprocessor Options. 30347 (line 64) 30348 * I- <1>: Directory Options. (line 107) 30349 * I-: Preprocessor Options. 30350 (line 361) 30351 * idirafter: Preprocessor Options. 30352 (line 403) 30353 * if-conversion: Optimize Options. (line 442) 30354 * if-conversion2: Optimize Options. (line 451) 30355 * imacros: Preprocessor Options. 30356 (line 394) 30357 * image_base: Darwin Options. (line 190) 30358 * imultilib: Preprocessor Options. 30359 (line 424) 30360 * include: Preprocessor Options. 30361 (line 383) 30362 * init: Darwin Options. (line 190) 30363 * install_name: Darwin Options. (line 190) 30364 * iprefix: Preprocessor Options. 30365 (line 408) 30366 * iquote <1>: Directory Options. (line 31) 30367 * iquote: Preprocessor Options. 30368 (line 434) 30369 * isysroot: Preprocessor Options. 30370 (line 420) 30371 * isystem: Preprocessor Options. 30372 (line 428) 30373 * iwithprefix: Preprocessor Options. 30374 (line 414) 30375 * iwithprefixbefore: Preprocessor Options. 30376 (line 414) 30377 * keep_private_externs: Darwin Options. (line 190) 30378 * L: Directory Options. (line 37) 30379 * l: Link Options. (line 26) 30380 * lobjc: Link Options. (line 53) 30381 * M: Preprocessor Options. 30382 (line 173) 30383 * m1: SH Options. (line 9) 30384 * m10: PDP-11 Options. (line 29) 30385 * m128bit-long-double: i386 and x86-64 Options. 30386 (line 254) 30387 * m16-bit: CRIS Options. (line 69) 30388 * m2: SH Options. (line 12) 30389 * m210: MCore Options. (line 43) 30390 * m3: SH Options. (line 18) 30391 * m31: S/390 and zSeries Options. 30392 (line 79) 30393 * m32 <1>: SPARC Options. (line 189) 30394 * m32 <2>: RS/6000 and PowerPC Options. 30395 (line 222) 30396 * m32: i386 and x86-64 Options. 30397 (line 464) 30398 * m32-bit: CRIS Options. (line 69) 30399 * m32r: M32R/D Options. (line 15) 30400 * m32r2: M32R/D Options. (line 9) 30401 * m32rx: M32R/D Options. (line 12) 30402 * m340: MCore Options. (line 43) 30403 * m386: i386 and x86-64 Options. 30404 (line 142) 30405 * m3dnow: i386 and x86-64 Options. 30406 (line 389) 30407 * m3e: SH Options. (line 21) 30408 * m4: SH Options. (line 35) 30409 * m4-nofpu: SH Options. (line 24) 30410 * m4-single: SH Options. (line 31) 30411 * m4-single-only: SH Options. (line 27) 30412 * m40: PDP-11 Options. (line 23) 30413 * m45: PDP-11 Options. (line 26) 30414 * m486: i386 and x86-64 Options. 30415 (line 142) 30416 * m4a: SH Options. (line 50) 30417 * m4a-nofpu: SH Options. (line 38) 30418 * m4a-single: SH Options. (line 46) 30419 * m4a-single-only: SH Options. (line 42) 30420 * m4al: SH Options. (line 53) 30421 * m4byte-functions: MCore Options. (line 27) 30422 * m5200: M680x0 Options. (line 59) 30423 * m64 <1>: SPARC Options. (line 189) 30424 * m64 <2>: S/390 and zSeries Options. 30425 (line 79) 30426 * m64 <3>: RS/6000 and PowerPC Options. 30427 (line 222) 30428 * m64: i386 and x86-64 Options. 30429 (line 464) 30430 * m68000: M680x0 Options. (line 13) 30431 * m68020: M680x0 Options. (line 21) 30432 * m68020-40: M680x0 Options. (line 70) 30433 * m68020-60: M680x0 Options. (line 77) 30434 * m68030: M680x0 Options. (line 30) 30435 * m68040: M680x0 Options. (line 34) 30436 * m68060: M680x0 Options. (line 42) 30437 * m6811: M68hc1x Options. (line 13) 30438 * m6812: M68hc1x Options. (line 18) 30439 * m68881: M680x0 Options. (line 25) 30440 * m68hc11: M68hc1x Options. (line 13) 30441 * m68hc12: M68hc1x Options. (line 18) 30442 * m68hcs12: M68hc1x Options. (line 23) 30443 * m68S12: M68hc1x Options. (line 23) 30444 * m8-bit: CRIS Options. (line 69) 30445 * m96bit-long-double: i386 and x86-64 Options. 30446 (line 254) 30447 * mabi <1>: RS/6000 and PowerPC Options. 30448 (line 489) 30449 * mabi: ARM Options. (line 10) 30450 * mabi-mmixware: MMIX Options. (line 20) 30451 * mabi=32: MIPS Options. (line 89) 30452 * mabi=64: MIPS Options. (line 89) 30453 * mabi=eabi: MIPS Options. (line 89) 30454 * mabi=gnu: MMIX Options. (line 20) 30455 * mabi=ibmlongdouble: RS/6000 and PowerPC Options. 30456 (line 502) 30457 * mabi=ieeelongdouble: RS/6000 and PowerPC Options. 30458 (line 506) 30459 * mabi=n32: MIPS Options. (line 89) 30460 * mabi=no-spe: RS/6000 and PowerPC Options. 30461 (line 499) 30462 * mabi=o64: MIPS Options. (line 89) 30463 * mabi=spe: RS/6000 and PowerPC Options. 30464 (line 494) 30465 * mabicalls: MIPS Options. (line 100) 30466 * mabort-on-noreturn: ARM Options. (line 144) 30467 * mabshi: PDP-11 Options. (line 55) 30468 * mac0: PDP-11 Options. (line 16) 30469 * macc-4: FRV Options. (line 113) 30470 * macc-8: FRV Options. (line 116) 30471 * maccumulate-outgoing-args: i386 and x86-64 Options. 30472 (line 415) 30473 * madjust-unroll: SH Options. (line 175) 30474 * mads: RS/6000 and PowerPC Options. 30475 (line 532) 30476 * maix-struct-return: RS/6000 and PowerPC Options. 30477 (line 482) 30478 * maix32: RS/6000 and PowerPC Options. 30479 (line 260) 30480 * maix64: RS/6000 and PowerPC Options. 30481 (line 260) 30482 * malign-300: H8/300 Options. (line 31) 30483 * malign-double: i386 and x86-64 Options. 30484 (line 238) 30485 * malign-int: M680x0 Options. (line 132) 30486 * malign-labels: FRV Options. (line 104) 30487 * malign-loops: M32R/D Options. (line 73) 30488 * malign-natural: RS/6000 and PowerPC Options. 30489 (line 299) 30490 * malign-power: RS/6000 and PowerPC Options. 30491 (line 299) 30492 * malloc-cc: FRV Options. (line 25) 30493 * malpha-as: DEC Alpha Options. (line 159) 30494 * maltivec: RS/6000 and PowerPC Options. 30495 (line 164) 30496 * mam33: MN10300 Options. (line 17) 30497 * maout: CRIS Options. (line 92) 30498 * mapcs: ARM Options. (line 22) 30499 * mapcs-frame: ARM Options. (line 14) 30500 * mapp-regs <1>: V850 Options. (line 57) 30501 * mapp-regs: SPARC Options. (line 10) 30502 * march <1>: S/390 and zSeries Options. 30503 (line 108) 30504 * march <2>: MT Options. (line 9) 30505 * march <3>: MIPS Options. (line 14) 30506 * march <4>: i386 and x86-64 Options. 30507 (line 131) 30508 * march <5>: HPPA Options. (line 9) 30509 * march <6>: CRIS Options. (line 10) 30510 * march: ARM Options. (line 109) 30511 * masm=DIALECT: i386 and x86-64 Options. 30512 (line 194) 30513 * mauto-incdec: M68hc1x Options. (line 26) 30514 * mauto-pic: IA-64 Options. (line 50) 30515 * mb: SH Options. (line 58) 30516 * mbacc: MT Options. (line 16) 30517 * mbackchain: S/390 and zSeries Options. 30518 (line 26) 30519 * mbase-addresses: MMIX Options. (line 54) 30520 * mbcopy: PDP-11 Options. (line 36) 30521 * mbig <1>: TMS320C3x/C4x Options. 30522 (line 18) 30523 * mbig: RS/6000 and PowerPC Options. 30524 (line 414) 30525 * mbig-endian <1>: RS/6000 and PowerPC Options. 30526 (line 414) 30527 * mbig-endian <2>: MCore Options. (line 39) 30528 * mbig-endian <3>: IA-64 Options. (line 9) 30529 * mbig-endian: ARM Options. (line 72) 30530 * mbig-memory: TMS320C3x/C4x Options. 30531 (line 18) 30532 * mbig-switch <1>: V850 Options. (line 52) 30533 * mbig-switch: HPPA Options. (line 23) 30534 * mbigtable: SH Options. (line 74) 30535 * mbit-align: RS/6000 and PowerPC Options. 30536 (line 368) 30537 * mbitfield: M680x0 Options. (line 104) 30538 * mbk: TMS320C3x/C4x Options. 30539 (line 27) 30540 * mbranch-cheap: PDP-11 Options. (line 65) 30541 * mbranch-cost=NUMBER: M32R/D Options. (line 82) 30542 * mbranch-expensive: PDP-11 Options. (line 61) 30543 * mbranch-likely: MIPS Options. (line 367) 30544 * mbranch-predict: MMIX Options. (line 49) 30545 * mbss-plt: RS/6000 and PowerPC Options. 30546 (line 181) 30547 * mbuild-constants: DEC Alpha Options. (line 142) 30548 * mbwx: DEC Alpha Options. (line 171) 30549 * mc68000: M680x0 Options. (line 13) 30550 * mc68020: M680x0 Options. (line 21) 30551 * mcall-gnu: RS/6000 and PowerPC Options. 30552 (line 474) 30553 * mcall-linux: RS/6000 and PowerPC Options. 30554 (line 470) 30555 * mcall-netbsd: RS/6000 and PowerPC Options. 30556 (line 478) 30557 * mcall-prologues: AVR Options. (line 43) 30558 * mcall-solaris: RS/6000 and PowerPC Options. 30559 (line 466) 30560 * mcall-sysv: RS/6000 and PowerPC Options. 30561 (line 453) 30562 * mcall-sysv-eabi: RS/6000 and PowerPC Options. 30563 (line 460) 30564 * mcall-sysv-noeabi: RS/6000 and PowerPC Options. 30565 (line 463) 30566 * mcallee-super-interworking: ARM Options. (line 234) 30567 * mcaller-super-interworking: ARM Options. (line 240) 30568 * mcallgraph-data: MCore Options. (line 31) 30569 * mcc-init: CRIS Options. (line 46) 30570 * mcfv4e: M680x0 Options. (line 66) 30571 * mcheck-zero-division: MIPS Options. (line 254) 30572 * mcirrus-fix-invalid-insns: ARM Options. (line 187) 30573 * mcix: DEC Alpha Options. (line 171) 30574 * mcmodel=embmedany: SPARC Options. (line 211) 30575 * mcmodel=kernel: i386 and x86-64 Options. 30576 (line 486) 30577 * mcmodel=large: i386 and x86-64 Options. 30578 (line 498) 30579 * mcmodel=medany: SPARC Options. (line 205) 30580 * mcmodel=medium: i386 and x86-64 Options. 30581 (line 491) 30582 * mcmodel=medlow: SPARC Options. (line 194) 30583 * mcmodel=medmid: SPARC Options. (line 199) 30584 * mcmodel=small: i386 and x86-64 Options. 30585 (line 480) 30586 * mcond-exec: FRV Options. (line 152) 30587 * mcond-move: FRV Options. (line 128) 30588 * mconst-align: CRIS Options. (line 60) 30589 * mconst16: Xtensa Options. (line 10) 30590 * mconstant-gp: IA-64 Options. (line 46) 30591 * mcpu <1>: TMS320C3x/C4x Options. 30592 (line 9) 30593 * mcpu <2>: SPARC Options. (line 96) 30594 * mcpu <3>: RS/6000 and PowerPC Options. 30595 (line 100) 30596 * mcpu <4>: i386 and x86-64 Options. 30597 (line 136) 30598 * mcpu <5>: FRV Options. (line 212) 30599 * mcpu <6>: DEC Alpha Options. (line 223) 30600 * mcpu <7>: CRIS Options. (line 10) 30601 * mcpu <8>: ARM Options. (line 84) 30602 * mcpu: ARC Options. (line 23) 30603 * mcpu32: M680x0 Options. (line 51) 30604 * mcpu=: M32C Options. (line 7) 30605 * mcsync-anomaly: Blackfin Options. (line 23) 30606 * MD: Preprocessor Options. 30607 (line 261) 30608 * mdalign: SH Options. (line 64) 30609 * mdata: ARC Options. (line 30) 30610 * mdata-align: CRIS Options. (line 60) 30611 * mdb: TMS320C3x/C4x Options. 30612 (line 32) 30613 * mdebug <1>: S/390 and zSeries Options. 30614 (line 104) 30615 * mdebug: M32R/D Options. (line 69) 30616 * mdec-asm: PDP-11 Options. (line 78) 30617 * mdisable-callt: V850 Options. (line 80) 30618 * mdisable-fpregs: HPPA Options. (line 33) 30619 * mdisable-indexing: HPPA Options. (line 40) 30620 * mdiv: MCore Options. (line 15) 30621 * mdiv=STRATEGY: SH Options. (line 127) 30622 * mdivide-breaks: MIPS Options. (line 259) 30623 * mdivide-traps: MIPS Options. (line 259) 30624 * mdivsi3_libfunc=NAME: SH Options. (line 168) 30625 * mdlmzb: RS/6000 and PowerPC Options. 30626 (line 362) 30627 * mdouble: FRV Options. (line 38) 30628 * mdouble-float: MIPS Options. (line 173) 30629 * mdp-isr-reload: TMS320C3x/C4x Options. 30630 (line 45) 30631 * mdsp: MIPS Options. (line 178) 30632 * mdwarf2-asm: IA-64 Options. (line 79) 30633 * mdword: FRV Options. (line 32) 30634 * mdynamic-no-pic: RS/6000 and PowerPC Options. 30635 (line 419) 30636 * meabi: RS/6000 and PowerPC Options. 30637 (line 555) 30638 * mearly-stop-bits: IA-64 Options. (line 85) 30639 * meb: Score Options. (line 9) 30640 * mel: Score Options. (line 12) 30641 * melf <1>: MMIX Options. (line 44) 30642 * melf: CRIS Options. (line 95) 30643 * melinux: CRIS Options. (line 99) 30644 * melinux-stacksize: CRIS Options. (line 25) 30645 * memb: RS/6000 and PowerPC Options. 30646 (line 550) 30647 * membedded-data: MIPS Options. (line 225) 30648 * memregs=: M32C Options. (line 21) 30649 * mep: V850 Options. (line 16) 30650 * mepsilon: MMIX Options. (line 15) 30651 * mesa: S/390 and zSeries Options. 30652 (line 87) 30653 * metrax100: CRIS Options. (line 31) 30654 * metrax4: CRIS Options. (line 31) 30655 * mexplicit-relocs <1>: MIPS Options. (line 245) 30656 * mexplicit-relocs: DEC Alpha Options. (line 184) 30657 * MF: Preprocessor Options. 30658 (line 207) 30659 * mfast-fix: TMS320C3x/C4x Options. 30660 (line 62) 30661 * mfast-indirect-calls: HPPA Options. (line 52) 30662 * mfaster-structs: SPARC Options. (line 71) 30663 * mfdpic: FRV Options. (line 56) 30664 * mfix: DEC Alpha Options. (line 171) 30665 * mfix-and-continue: Darwin Options. (line 97) 30666 * mfix-r4000: MIPS Options. (line 309) 30667 * mfix-r4400: MIPS Options. (line 323) 30668 * mfix-sb1: MIPS Options. (line 351) 30669 * mfix-vr4120: MIPS Options. (line 330) 30670 * mfix-vr4130: MIPS Options. (line 344) 30671 * mfixed-cc: FRV Options. (line 28) 30672 * mfixed-range <1>: IA-64 Options. (line 90) 30673 * mfixed-range: HPPA Options. (line 59) 30674 * mfloat-abi: ARM Options. (line 59) 30675 * mfloat-gprs: RS/6000 and PowerPC Options. 30676 (line 205) 30677 * mfloat-ieee: DEC Alpha Options. (line 179) 30678 * mfloat-vax: DEC Alpha Options. (line 179) 30679 * mfloat32: PDP-11 Options. (line 52) 30680 * mfloat64: PDP-11 Options. (line 48) 30681 * mflush-func: MIPS Options. (line 357) 30682 * mflush-func=NAME: M32R/D Options. (line 94) 30683 * mflush-trap=NUMBER: M32R/D Options. (line 87) 30684 * mfmovd: SH Options. (line 78) 30685 * mfp: ARM Options. (line 119) 30686 * mfp-exceptions: MIPS Options. (line 378) 30687 * mfp-reg: DEC Alpha Options. (line 25) 30688 * mfp-rounding-mode: DEC Alpha Options. (line 85) 30689 * mfp-trap-mode: DEC Alpha Options. (line 63) 30690 * mfp32: MIPS Options. (line 156) 30691 * mfp64: MIPS Options. (line 159) 30692 * mfpe: ARM Options. (line 119) 30693 * mfpr-32: FRV Options. (line 13) 30694 * mfpr-64: FRV Options. (line 16) 30695 * mfprnd: RS/6000 and PowerPC Options. 30696 (line 25) 30697 * mfpu <1>: SPARC Options. (line 20) 30698 * mfpu <2>: PDP-11 Options. (line 9) 30699 * mfpu: ARM Options. (line 119) 30700 * mfull-toc: RS/6000 and PowerPC Options. 30701 (line 233) 30702 * mfused-madd <1>: Xtensa Options. (line 19) 30703 * mfused-madd <2>: S/390 and zSeries Options. 30704 (line 128) 30705 * mfused-madd <3>: RS/6000 and PowerPC Options. 30706 (line 349) 30707 * mfused-madd: MIPS Options. (line 294) 30708 * mg: VAX Options. (line 17) 30709 * MG: Preprocessor Options. 30710 (line 216) 30711 * mgas <1>: HPPA Options. (line 75) 30712 * mgas: DEC Alpha Options. (line 159) 30713 * mgettrcost=NUMBER: SH Options. (line 190) 30714 * mglibc: GNU/Linux Options. (line 9) 30715 * mgnu: VAX Options. (line 13) 30716 * mgnu-as: IA-64 Options. (line 18) 30717 * mgnu-ld: IA-64 Options. (line 23) 30718 * mgotplt: CRIS Options. (line 86) 30719 * mgp32: MIPS Options. (line 150) 30720 * mgp64: MIPS Options. (line 153) 30721 * mgpr-32: FRV Options. (line 7) 30722 * mgpr-64: FRV Options. (line 10) 30723 * mgprel-ro: FRV Options. (line 79) 30724 * mh: H8/300 Options. (line 14) 30725 * mhard-float <1>: SPARC Options. (line 20) 30726 * mhard-float <2>: S/390 and zSeries Options. 30727 (line 11) 30728 * mhard-float <3>: RS/6000 and PowerPC Options. 30729 (line 311) 30730 * mhard-float <4>: MIPS Options. (line 162) 30731 * mhard-float <5>: FRV Options. (line 19) 30732 * mhard-float: ARM Options. (line 41) 30733 * mhard-quad-float: SPARC Options. (line 41) 30734 * mhardlit: MCore Options. (line 10) 30735 * mhitachi: SH Options. (line 81) 30736 * mid-shared-library: Blackfin Options. (line 39) 30737 * mieee <1>: SH Options. (line 96) 30738 * mieee: DEC Alpha Options. (line 39) 30739 * mieee-conformant: DEC Alpha Options. (line 134) 30740 * mieee-fp: i386 and x86-64 Options. 30741 (line 200) 30742 * mieee-with-inexact: DEC Alpha Options. (line 52) 30743 * milp32: IA-64 Options. (line 114) 30744 * mimpure-text: SPARC Options. (line 81) 30745 * mindexed-addressing: SH Options. (line 180) 30746 * minit-stack: AVR Options. (line 35) 30747 * minline-all-stringops: i386 and x86-64 Options. 30748 (line 436) 30749 * minline-float-divide-max-throughput: IA-64 Options. (line 58) 30750 * minline-float-divide-min-latency: IA-64 Options. (line 54) 30751 * minline-int-divide-max-throughput: IA-64 Options. (line 66) 30752 * minline-int-divide-min-latency: IA-64 Options. (line 62) 30753 * minline-plt: FRV Options. (line 64) 30754 * minline-sqrt-max-throughput: IA-64 Options. (line 74) 30755 * minline-sqrt-min-latency: IA-64 Options. (line 70) 30756 * minmax: M68hc1x Options. (line 31) 30757 * minsert-sched-nops: RS/6000 and PowerPC Options. 30758 (line 441) 30759 * mint16: PDP-11 Options. (line 40) 30760 * mint32 <1>: PDP-11 Options. (line 44) 30761 * mint32: H8/300 Options. (line 28) 30762 * mint8: AVR Options. (line 53) 30763 * minvalid-symbols: SH Options. (line 213) 30764 * mips1: MIPS Options. (line 59) 30765 * mips16: MIPS Options. (line 81) 30766 * mips2: MIPS Options. (line 62) 30767 * mips3: MIPS Options. (line 65) 30768 * mips32: MIPS Options. (line 71) 30769 * mips32r2: MIPS Options. (line 74) 30770 * mips3d: MIPS Options. (line 190) 30771 * mips4: MIPS Options. (line 68) 30772 * mips64: MIPS Options. (line 77) 30773 * misel: RS/6000 and PowerPC Options. 30774 (line 187) 30775 * misize: SH Options. (line 103) 30776 * missue-rate=NUMBER: M32R/D Options. (line 79) 30777 * mjump-in-delay: HPPA Options. (line 28) 30778 * mkernel: Darwin Options. (line 75) 30779 * mknuthdiv: MMIX Options. (line 33) 30780 * ml: SH Options. (line 61) 30781 * mlarge-data: DEC Alpha Options. (line 195) 30782 * mlarge-data-threshold=NUMBER: i386 and x86-64 Options. 30783 (line 280) 30784 * mlarge-text: DEC Alpha Options. (line 213) 30785 * mlibfuncs: MMIX Options. (line 10) 30786 * mlibrary-pic: FRV Options. (line 110) 30787 * mlinked-fp: FRV Options. (line 94) 30788 * mlinker-opt: HPPA Options. (line 85) 30789 * mlinux: CRIS Options. (line 104) 30790 * mlittle: RS/6000 and PowerPC Options. 30791 (line 408) 30792 * mlittle-endian <1>: SPARC Options. (line 183) 30793 * mlittle-endian <2>: RS/6000 and PowerPC Options. 30794 (line 408) 30795 * mlittle-endian <3>: MCore Options. (line 39) 30796 * mlittle-endian <4>: IA-64 Options. (line 13) 30797 * mlittle-endian: ARM Options. (line 68) 30798 * mlong-calls <1>: V850 Options. (line 10) 30799 * mlong-calls <2>: MIPS Options. (line 280) 30800 * mlong-calls <3>: M68hc1x Options. (line 35) 30801 * mlong-calls <4>: FRV Options. (line 99) 30802 * mlong-calls <5>: Blackfin Options. (line 57) 30803 * mlong-calls: ARM Options. (line 149) 30804 * mlong-double-128: S/390 and zSeries Options. 30805 (line 20) 30806 * mlong-double-64: S/390 and zSeries Options. 30807 (line 20) 30808 * mlong-load-store: HPPA Options. (line 66) 30809 * mlong32: MIPS Options. (line 199) 30810 * mlong64: MIPS Options. (line 194) 30811 * mlongcall: RS/6000 and PowerPC Options. 30812 (line 621) 30813 * mlongcalls: Xtensa Options. (line 60) 30814 * mloop-unsigned: TMS320C3x/C4x Options. 30815 (line 94) 30816 * mlow-64k: Blackfin Options. (line 32) 30817 * mlp64: IA-64 Options. (line 114) 30818 * MM: Preprocessor Options. 30819 (line 197) 30820 * mmac <1>: Score Options. (line 21) 30821 * mmac: CRX Options. (line 9) 30822 * mmad: MIPS Options. (line 289) 30823 * mmangle-cpu: ARC Options. (line 15) 30824 * mmax: DEC Alpha Options. (line 171) 30825 * mmax-stack-frame: CRIS Options. (line 22) 30826 * mmcu: AVR Options. (line 9) 30827 * MMD: Preprocessor Options. 30828 (line 276) 30829 * mmedia: FRV Options. (line 44) 30830 * mmemcpy: MIPS Options. (line 274) 30831 * mmemory-latency: DEC Alpha Options. (line 266) 30832 * mmemparm: TMS320C3x/C4x Options. 30833 (line 109) 30834 * mmfcrf: RS/6000 and PowerPC Options. 30835 (line 25) 30836 * mminimal-toc: RS/6000 and PowerPC Options. 30837 (line 233) 30838 * mmmx: i386 and x86-64 Options. 30839 (line 389) 30840 * mmodel=large: M32R/D Options. (line 33) 30841 * mmodel=medium: M32R/D Options. (line 27) 30842 * mmodel=small: M32R/D Options. (line 18) 30843 * mmpyi: TMS320C3x/C4x Options. 30844 (line 53) 30845 * mmul-bug-workaround: CRIS Options. (line 36) 30846 * mmuladd: FRV Options. (line 50) 30847 * mmulhw: RS/6000 and PowerPC Options. 30848 (line 355) 30849 * mmult-bug: MN10300 Options. (line 9) 30850 * mmulti-cond-exec: FRV Options. (line 176) 30851 * mmultiple: RS/6000 and PowerPC Options. 30852 (line 317) 30853 * mmvcle: S/390 and zSeries Options. 30854 (line 97) 30855 * mmvme: RS/6000 and PowerPC Options. 30856 (line 527) 30857 * mn: H8/300 Options. (line 20) 30858 * mnested-cond-exec: FRV Options. (line 189) 30859 * mnew-mnemonics: RS/6000 and PowerPC Options. 30860 (line 85) 30861 * mnhwloop: Score Options. (line 15) 30862 * mno-3dnow: i386 and x86-64 Options. 30863 (line 389) 30864 * mno-4byte-functions: MCore Options. (line 27) 30865 * mno-abicalls: MIPS Options. (line 100) 30866 * mno-abshi: PDP-11 Options. (line 58) 30867 * mno-ac0: PDP-11 Options. (line 20) 30868 * mno-align-double: i386 and x86-64 Options. 30869 (line 238) 30870 * mno-align-int: M680x0 Options. (line 132) 30871 * mno-align-loops: M32R/D Options. (line 76) 30872 * mno-align-stringops: i386 and x86-64 Options. 30873 (line 431) 30874 * mno-altivec: RS/6000 and PowerPC Options. 30875 (line 164) 30876 * mno-am33: MN10300 Options. (line 20) 30877 * mno-app-regs <1>: V850 Options. (line 61) 30878 * mno-app-regs: SPARC Options. (line 10) 30879 * mno-bacc: MT Options. (line 19) 30880 * mno-backchain: S/390 and zSeries Options. 30881 (line 26) 30882 * mno-base-addresses: MMIX Options. (line 54) 30883 * mno-bit-align: RS/6000 and PowerPC Options. 30884 (line 368) 30885 * mno-bk: TMS320C3x/C4x Options. 30886 (line 27) 30887 * mno-branch-likely: MIPS Options. (line 367) 30888 * mno-branch-predict: MMIX Options. (line 49) 30889 * mno-bwx: DEC Alpha Options. (line 171) 30890 * mno-callgraph-data: MCore Options. (line 31) 30891 * mno-check-zero-division: MIPS Options. (line 254) 30892 * mno-cirrus-fix-invalid-insns: ARM Options. (line 187) 30893 * mno-cix: DEC Alpha Options. (line 171) 30894 * mno-cond-exec: FRV Options. (line 158) 30895 * mno-cond-move: FRV Options. (line 134) 30896 * mno-const-align: CRIS Options. (line 60) 30897 * mno-const16: Xtensa Options. (line 10) 30898 * mno-crt0 <1>: MT Options. (line 25) 30899 * mno-crt0: MN10300 Options. (line 31) 30900 * mno-csync-anomaly: Blackfin Options. (line 28) 30901 * mno-data-align: CRIS Options. (line 60) 30902 * mno-db: TMS320C3x/C4x Options. 30903 (line 32) 30904 * mno-debug: S/390 and zSeries Options. 30905 (line 104) 30906 * mno-div: MCore Options. (line 15) 30907 * mno-dlmzb: RS/6000 and PowerPC Options. 30908 (line 362) 30909 * mno-double: FRV Options. (line 41) 30910 * mno-dsp: MIPS Options. (line 178) 30911 * mno-dwarf2-asm: IA-64 Options. (line 79) 30912 * mno-dword: FRV Options. (line 35) 30913 * mno-eabi: RS/6000 and PowerPC Options. 30914 (line 555) 30915 * mno-early-stop-bits: IA-64 Options. (line 85) 30916 * mno-eflags: FRV Options. (line 125) 30917 * mno-embedded-data: MIPS Options. (line 225) 30918 * mno-ep: V850 Options. (line 16) 30919 * mno-epsilon: MMIX Options. (line 15) 30920 * mno-explicit-relocs <1>: MIPS Options. (line 245) 30921 * mno-explicit-relocs: DEC Alpha Options. (line 184) 30922 * mno-fancy-math-387: i386 and x86-64 Options. 30923 (line 227) 30924 * mno-fast-fix: TMS320C3x/C4x Options. 30925 (line 62) 30926 * mno-faster-structs: SPARC Options. (line 71) 30927 * mno-fix: DEC Alpha Options. (line 171) 30928 * mno-fix-r4000: MIPS Options. (line 309) 30929 * mno-fix-r4400: MIPS Options. (line 323) 30930 * mno-float32: PDP-11 Options. (line 48) 30931 * mno-float64: PDP-11 Options. (line 52) 30932 * mno-flush-func: M32R/D Options. (line 99) 30933 * mno-flush-trap: M32R/D Options. (line 91) 30934 * mno-fp-in-toc: RS/6000 and PowerPC Options. 30935 (line 233) 30936 * mno-fp-regs: DEC Alpha Options. (line 25) 30937 * mno-fp-ret-in-387: i386 and x86-64 Options. 30938 (line 217) 30939 * mno-fprnd: RS/6000 and PowerPC Options. 30940 (line 25) 30941 * mno-fpu: SPARC Options. (line 25) 30942 * mno-fused-madd <1>: Xtensa Options. (line 19) 30943 * mno-fused-madd <2>: S/390 and zSeries Options. 30944 (line 128) 30945 * mno-fused-madd <3>: RS/6000 and PowerPC Options. 30946 (line 349) 30947 * mno-fused-madd: MIPS Options. (line 294) 30948 * mno-gnu-as: IA-64 Options. (line 18) 30949 * mno-gnu-ld: IA-64 Options. (line 23) 30950 * mno-gotplt: CRIS Options. (line 86) 30951 * mno-hardlit: MCore Options. (line 10) 30952 * mno-id-shared-library: Blackfin Options. (line 45) 30953 * mno-ieee-fp: i386 and x86-64 Options. 30954 (line 200) 30955 * mno-int16: PDP-11 Options. (line 44) 30956 * mno-int32: PDP-11 Options. (line 40) 30957 * mno-interrupts: AVR Options. (line 39) 30958 * mno-isel: RS/6000 and PowerPC Options. 30959 (line 187) 30960 * mno-knuthdiv: MMIX Options. (line 33) 30961 * mno-libfuncs: MMIX Options. (line 10) 30962 * mno-long-calls <1>: V850 Options. (line 10) 30963 * mno-long-calls <2>: MIPS Options. (line 280) 30964 * mno-long-calls <3>: M68hc1x Options. (line 35) 30965 * mno-long-calls <4>: HPPA Options. (line 138) 30966 * mno-long-calls <5>: Blackfin Options. (line 57) 30967 * mno-long-calls: ARM Options. (line 149) 30968 * mno-longcall: RS/6000 and PowerPC Options. 30969 (line 621) 30970 * mno-longcalls: Xtensa Options. (line 60) 30971 * mno-loop-unsigned: TMS320C3x/C4x Options. 30972 (line 94) 30973 * mno-low-64k: Blackfin Options. (line 36) 30974 * mno-mad: MIPS Options. (line 289) 30975 * mno-max: DEC Alpha Options. (line 171) 30976 * mno-media: FRV Options. (line 47) 30977 * mno-memcpy: MIPS Options. (line 274) 30978 * mno-mfcrf: RS/6000 and PowerPC Options. 30979 (line 25) 30980 * mno-mips16: MIPS Options. (line 81) 30981 * mno-mips3d: MIPS Options. (line 190) 30982 * mno-mmx: i386 and x86-64 Options. 30983 (line 389) 30984 * mno-mpyi: TMS320C3x/C4x Options. 30985 (line 53) 30986 * mno-mul-bug-workaround: CRIS Options. (line 36) 30987 * mno-muladd: FRV Options. (line 53) 30988 * mno-mulhw: RS/6000 and PowerPC Options. 30989 (line 355) 30990 * mno-mult-bug: MN10300 Options. (line 13) 30991 * mno-multi-cond-exec: FRV Options. (line 183) 30992 * mno-multiple: RS/6000 and PowerPC Options. 30993 (line 317) 30994 * mno-mvcle: S/390 and zSeries Options. 30995 (line 97) 30996 * mno-nested-cond-exec: FRV Options. (line 195) 30997 * mno-optimize-membar: FRV Options. (line 205) 30998 * mno-pack: FRV Options. (line 122) 30999 * mno-packed-stack: S/390 and zSeries Options. 31000 (line 46) 31001 * mno-paired-single: MIPS Options. (line 183) 31002 * mno-parallel-insns: TMS320C3x/C4x Options. 31003 (line 115) 31004 * mno-parallel-mpy: TMS320C3x/C4x Options. 31005 (line 120) 31006 * mno-pic: IA-64 Options. (line 26) 31007 * mno-popcntb: RS/6000 and PowerPC Options. 31008 (line 25) 31009 * mno-power: RS/6000 and PowerPC Options. 31010 (line 25) 31011 * mno-power2: RS/6000 and PowerPC Options. 31012 (line 25) 31013 * mno-powerpc: RS/6000 and PowerPC Options. 31014 (line 25) 31015 * mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 31016 (line 25) 31017 * mno-powerpc-gpopt: RS/6000 and PowerPC Options. 31018 (line 25) 31019 * mno-powerpc64: RS/6000 and PowerPC Options. 31020 (line 25) 31021 * mno-prolog-function: V850 Options. (line 23) 31022 * mno-prologue-epilogue: CRIS Options. (line 76) 31023 * mno-prototype: RS/6000 and PowerPC Options. 31024 (line 511) 31025 * mno-push-args: i386 and x86-64 Options. 31026 (line 408) 31027 * mno-register-names: IA-64 Options. (line 37) 31028 * mno-regnames: RS/6000 and PowerPC Options. 31029 (line 615) 31030 * mno-relax-immediate: MCore Options. (line 19) 31031 * mno-relocatable: RS/6000 and PowerPC Options. 31032 (line 385) 31033 * mno-relocatable-lib: RS/6000 and PowerPC Options. 31034 (line 393) 31035 * mno-rptb: TMS320C3x/C4x Options. 31036 (line 72) 31037 * mno-rpts: TMS320C3x/C4x Options. 31038 (line 81) 31039 * mno-scc: FRV Options. (line 146) 31040 * mno-sched-ar-data-spec: IA-64 Options. (line 128) 31041 * mno-sched-ar-in-data-spec: IA-64 Options. (line 149) 31042 * mno-sched-br-data-spec: IA-64 Options. (line 121) 31043 * mno-sched-br-in-data-spec: IA-64 Options. (line 142) 31044 * mno-sched-control-ldc: IA-64 Options. (line 168) 31045 * mno-sched-control-spec: IA-64 Options. (line 135) 31046 * mno-sched-count-spec-in-critical-path: IA-64 Options. (line 194) 31047 * mno-sched-in-control-spec: IA-64 Options. (line 156) 31048 * mno-sched-ldc: IA-64 Options. (line 162) 31049 * mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 187) 31050 * mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 180) 31051 * mno-sched-prolog: ARM Options. (line 32) 31052 * mno-sched-spec-verbose: IA-64 Options. (line 176) 31053 * mno-sdata <1>: RS/6000 and PowerPC Options. 31054 (line 602) 31055 * mno-sdata: IA-64 Options. (line 42) 31056 * mno-side-effects: CRIS Options. (line 51) 31057 * mno-single-exit: MMIX Options. (line 66) 31058 * mno-slow-bytes: MCore Options. (line 35) 31059 * mno-small-exec: S/390 and zSeries Options. 31060 (line 72) 31061 * mno-soft-float: DEC Alpha Options. (line 10) 31062 * mno-space-regs: HPPA Options. (line 45) 31063 * mno-spe: RS/6000 and PowerPC Options. 31064 (line 196) 31065 * mno-specld-anomaly: Blackfin Options. (line 19) 31066 * mno-split: PDP-11 Options. (line 71) 31067 * mno-split-addresses: MIPS Options. (line 239) 31068 * mno-sse: i386 and x86-64 Options. 31069 (line 389) 31070 * mno-stack-align: CRIS Options. (line 60) 31071 * mno-stack-bias: SPARC Options. (line 220) 31072 * mno-strict-align <1>: RS/6000 and PowerPC Options. 31073 (line 380) 31074 * mno-strict-align: M680x0 Options. (line 152) 31075 * mno-string: RS/6000 and PowerPC Options. 31076 (line 328) 31077 * mno-sum-in-toc: RS/6000 and PowerPC Options. 31078 (line 233) 31079 * mno-svr3-shlib: i386 and x86-64 Options. 31080 (line 287) 31081 * mno-swdiv: RS/6000 and PowerPC Options. 31082 (line 154) 31083 * mno-sym32: MIPS Options. (line 209) 31084 * mno-tablejump: AVR Options. (line 47) 31085 * mno-target-align: Xtensa Options. (line 47) 31086 * mno-text-section-literals: Xtensa Options. (line 35) 31087 * mno-toc: RS/6000 and PowerPC Options. 31088 (line 402) 31089 * mno-toplevel-symbols: MMIX Options. (line 40) 31090 * mno-tpf-trace: S/390 and zSeries Options. 31091 (line 122) 31092 * mno-unaligned-doubles: SPARC Options. (line 59) 31093 * mno-uninit-const-in-rodata: MIPS Options. (line 233) 31094 * mno-update: RS/6000 and PowerPC Options. 31095 (line 339) 31096 * mno-v8plus: SPARC Options. (line 168) 31097 * mno-vis: SPARC Options. (line 175) 31098 * mno-vliw-branch: FRV Options. (line 170) 31099 * mno-volatile-asm-stop: IA-64 Options. (line 32) 31100 * mno-vrsave: RS/6000 and PowerPC Options. 31101 (line 173) 31102 * mno-wide-bitfields: MCore Options. (line 23) 31103 * mno-xgot: MIPS Options. (line 127) 31104 * mno-xl-compat: RS/6000 and PowerPC Options. 31105 (line 268) 31106 * mno-zero-extend: MMIX Options. (line 27) 31107 * mnobitfield: M680x0 Options. (line 100) 31108 * mnomacsave: SH Options. (line 92) 31109 * mnominmax: M68hc1x Options. (line 31) 31110 * mnop-fun-dllimport: ARM Options. (line 174) 31111 * mold-mnemonics: RS/6000 and PowerPC Options. 31112 (line 85) 31113 * momit-leaf-frame-pointer <1>: i386 and x86-64 Options. 31114 (line 443) 31115 * momit-leaf-frame-pointer: Blackfin Options. (line 7) 31116 * mone-byte-bool: Darwin Options. (line 83) 31117 * moptimize-membar: FRV Options. (line 201) 31118 * MP: Preprocessor Options. 31119 (line 226) 31120 * mpa-risc-1-0: HPPA Options. (line 19) 31121 * mpa-risc-1-1: HPPA Options. (line 19) 31122 * mpa-risc-2-0: HPPA Options. (line 19) 31123 * mpack: FRV Options. (line 119) 31124 * mpacked-stack: S/390 and zSeries Options. 31125 (line 46) 31126 * mpadstruct: SH Options. (line 106) 31127 * mpaired-single: MIPS Options. (line 183) 31128 * mparallel-insns: TMS320C3x/C4x Options. 31129 (line 115) 31130 * mparallel-mpy: TMS320C3x/C4x Options. 31131 (line 120) 31132 * mparanoid: TMS320C3x/C4x Options. 31133 (line 45) 31134 * mpcrel: M680x0 Options. (line 144) 31135 * mpdebug: CRIS Options. (line 40) 31136 * mpe: RS/6000 and PowerPC Options. 31137 (line 288) 31138 * mpentium: i386 and x86-64 Options. 31139 (line 142) 31140 * mpentiumpro: i386 and x86-64 Options. 31141 (line 142) 31142 * mpic-register: ARM Options. (line 183) 31143 * mpoke-function-name: ARM Options. (line 197) 31144 * mpopcntb: RS/6000 and PowerPC Options. 31145 (line 25) 31146 * mportable-runtime: HPPA Options. (line 71) 31147 * mpower: RS/6000 and PowerPC Options. 31148 (line 25) 31149 * mpower2: RS/6000 and PowerPC Options. 31150 (line 25) 31151 * mpowerpc: RS/6000 and PowerPC Options. 31152 (line 25) 31153 * mpowerpc-gfxopt: RS/6000 and PowerPC Options. 31154 (line 25) 31155 * mpowerpc-gpopt: RS/6000 and PowerPC Options. 31156 (line 25) 31157 * mpowerpc64: RS/6000 and PowerPC Options. 31158 (line 25) 31159 * mprefergot: SH Options. (line 113) 31160 * mpreferred-stack-boundary: i386 and x86-64 Options. 31161 (line 351) 31162 * mprioritize-restricted-insns: RS/6000 and PowerPC Options. 31163 (line 425) 31164 * mprolog-function: V850 Options. (line 23) 31165 * mprologue-epilogue: CRIS Options. (line 76) 31166 * mprototype: RS/6000 and PowerPC Options. 31167 (line 511) 31168 * mpt-fixed: SH Options. (line 194) 31169 * mpush-args <1>: i386 and x86-64 Options. 31170 (line 408) 31171 * mpush-args: CRX Options. (line 13) 31172 * MQ: Preprocessor Options. 31173 (line 252) 31174 * mregister-names: IA-64 Options. (line 37) 31175 * mregnames: RS/6000 and PowerPC Options. 31176 (line 615) 31177 * mregparm <1>: TMS320C3x/C4x Options. 31178 (line 109) 31179 * mregparm: i386 and x86-64 Options. 31180 (line 316) 31181 * mrelax <1>: SH Options. (line 70) 31182 * mrelax <2>: MN10300 Options. (line 34) 31183 * mrelax: H8/300 Options. (line 9) 31184 * mrelax-immediate: MCore Options. (line 19) 31185 * mrelocatable: RS/6000 and PowerPC Options. 31186 (line 385) 31187 * mrelocatable-lib: RS/6000 and PowerPC Options. 31188 (line 393) 31189 * mreturn-pointer-on-d0: MN10300 Options. (line 24) 31190 * mrodata: ARC Options. (line 30) 31191 * mrptb: TMS320C3x/C4x Options. 31192 (line 72) 31193 * mrpts: TMS320C3x/C4x Options. 31194 (line 81) 31195 * mrtd <1>: Function Attributes. 31196 (line 100) 31197 * mrtd <2>: M680x0 Options. (line 109) 31198 * mrtd: i386 and x86-64 Options. 31199 (line 292) 31200 * ms: H8/300 Options. (line 17) 31201 * ms2600: H8/300 Options. (line 24) 31202 * mscc: FRV Options. (line 140) 31203 * msched-ar-data-spec: IA-64 Options. (line 128) 31204 * msched-ar-in-data-spec: IA-64 Options. (line 149) 31205 * msched-br-data-spec: IA-64 Options. (line 121) 31206 * msched-br-in-data-spec: IA-64 Options. (line 142) 31207 * msched-control-ldc: IA-64 Options. (line 168) 31208 * msched-control-spec: IA-64 Options. (line 135) 31209 * msched-costly-dep: RS/6000 and PowerPC Options. 31210 (line 432) 31211 * msched-count-spec-in-critical-path: IA-64 Options. (line 194) 31212 * msched-in-control-spec: IA-64 Options. (line 156) 31213 * msched-ldc: IA-64 Options. (line 162) 31214 * msched-prefer-non-control-spec-insns: IA-64 Options. (line 187) 31215 * msched-prefer-non-data-spec-insns: IA-64 Options. (line 180) 31216 * msched-spec-verbose: IA-64 Options. (line 176) 31217 * mschedule: HPPA Options. (line 78) 31218 * mscore5: Score Options. (line 25) 31219 * mscore5u: Score Options. (line 28) 31220 * mscore7: Score Options. (line 31) 31221 * mscore7d: Score Options. (line 34) 31222 * msda: V850 Options. (line 40) 31223 * msdata <1>: RS/6000 and PowerPC Options. 31224 (line 589) 31225 * msdata: IA-64 Options. (line 42) 31226 * msdata-data: RS/6000 and PowerPC Options. 31227 (line 594) 31228 * msdata=default: RS/6000 and PowerPC Options. 31229 (line 589) 31230 * msdata=eabi: RS/6000 and PowerPC Options. 31231 (line 569) 31232 * msdata=none <1>: RS/6000 and PowerPC Options. 31233 (line 602) 31234 * msdata=none: M32R/D Options. (line 40) 31235 * msdata=sdata: M32R/D Options. (line 49) 31236 * msdata=sysv: RS/6000 and PowerPC Options. 31237 (line 580) 31238 * msdata=use: M32R/D Options. (line 53) 31239 * msecure-plt: RS/6000 and PowerPC Options. 31240 (line 176) 31241 * mshared-library-id: Blackfin Options. (line 49) 31242 * mshort <1>: M68hc1x Options. (line 40) 31243 * mshort: M680x0 Options. (line 94) 31244 * msim <1>: Xstormy16 Options. (line 9) 31245 * msim <2>: RS/6000 and PowerPC Options. 31246 (line 521) 31247 * msim <3>: MT Options. (line 22) 31248 * msim: M32C Options. (line 13) 31249 * msingle-exit: MMIX Options. (line 66) 31250 * msingle-float: MIPS Options. (line 169) 31251 * msingle-pic-base: ARM Options. (line 177) 31252 * msio: HPPA Options. (line 107) 31253 * msize: AVR Options. (line 32) 31254 * mslow-bytes: MCore Options. (line 35) 31255 * msmall: TMS320C3x/C4x Options. 31256 (line 18) 31257 * msmall-data: DEC Alpha Options. (line 195) 31258 * msmall-exec: S/390 and zSeries Options. 31259 (line 72) 31260 * msmall-memory: TMS320C3x/C4x Options. 31261 (line 18) 31262 * msmall-text: DEC Alpha Options. (line 213) 31263 * msoft-float <1>: SPARC Options. (line 25) 31264 * msoft-float <2>: S/390 and zSeries Options. 31265 (line 11) 31266 * msoft-float <3>: RS/6000 and PowerPC Options. 31267 (line 311) 31268 * msoft-float <4>: PDP-11 Options. (line 13) 31269 * msoft-float <5>: MIPS Options. (line 165) 31270 * msoft-float <6>: M680x0 Options. (line 84) 31271 * msoft-float <7>: i386 and x86-64 Options. 31272 (line 205) 31273 * msoft-float <8>: HPPA Options. (line 91) 31274 * msoft-float <9>: FRV Options. (line 22) 31275 * msoft-float <10>: DEC Alpha Options. (line 10) 31276 * msoft-float: ARM Options. (line 45) 31277 * msoft-quad-float: SPARC Options. (line 45) 31278 * msoft-reg-count: M68hc1x Options. (line 43) 31279 * mspace <1>: V850 Options. (line 30) 31280 * mspace: SH Options. (line 110) 31281 * mspe: RS/6000 and PowerPC Options. 31282 (line 196) 31283 * mspecld-anomaly: Blackfin Options. (line 14) 31284 * msplit: PDP-11 Options. (line 68) 31285 * msplit-addresses: MIPS Options. (line 239) 31286 * msse: i386 and x86-64 Options. 31287 (line 389) 31288 * msseregparm: i386 and x86-64 Options. 31289 (line 327) 31290 * mstack-align: CRIS Options. (line 60) 31291 * mstack-bias: SPARC Options. (line 220) 31292 * mstack-guard: S/390 and zSeries Options. 31293 (line 148) 31294 * mstack-size: S/390 and zSeries Options. 31295 (line 148) 31296 * mstackrealign: i386 and x86-64 Options. 31297 (line 337) 31298 * mstrict-align <1>: RS/6000 and PowerPC Options. 31299 (line 380) 31300 * mstrict-align: M680x0 Options. (line 152) 31301 * mstring: RS/6000 and PowerPC Options. 31302 (line 328) 31303 * mstructure-size-boundary: ARM Options. (line 129) 31304 * msvr3-shlib: i386 and x86-64 Options. 31305 (line 287) 31306 * msvr4-struct-return: RS/6000 and PowerPC Options. 31307 (line 485) 31308 * mswdiv: RS/6000 and PowerPC Options. 31309 (line 154) 31310 * msym32: MIPS Options. (line 209) 31311 * mt: IA-64 Options. (line 106) 31312 * MT: Preprocessor Options. 31313 (line 238) 31314 * mtarget-align: Xtensa Options. (line 47) 31315 * mtda: V850 Options. (line 34) 31316 * mtext: ARC Options. (line 30) 31317 * mtext-section-literals: Xtensa Options. (line 35) 31318 * mthreads: i386 and x86-64 Options. 31319 (line 423) 31320 * mthumb: ARM Options. (line 218) 31321 * mthumb-interwork: ARM Options. (line 25) 31322 * mti: TMS320C3x/C4x Options. 31323 (line 102) 31324 * mtiny-stack: AVR Options. (line 50) 31325 * mtls-direct-seg-refs: i386 and x86-64 Options. 31326 (line 451) 31327 * mtls-size: IA-64 Options. (line 97) 31328 * mtoc: RS/6000 and PowerPC Options. 31329 (line 402) 31330 * mtomcat-stats: FRV Options. (line 209) 31331 * mtoplevel-symbols: MMIX Options. (line 40) 31332 * mtp: ARM Options. (line 246) 31333 * mtpcs-frame: ARM Options. (line 222) 31334 * mtpcs-leaf-frame: ARM Options. (line 228) 31335 * mtpf-trace: S/390 and zSeries Options. 31336 (line 122) 31337 * mtrap-precision: DEC Alpha Options. (line 109) 31338 * mtune <1>: SPARC Options. (line 156) 31339 * mtune <2>: S/390 and zSeries Options. 31340 (line 115) 31341 * mtune <3>: RS/6000 and PowerPC Options. 31342 (line 144) 31343 * mtune <4>: MIPS Options. (line 44) 31344 * mtune <5>: IA-64 Options. (line 101) 31345 * mtune <6>: i386 and x86-64 Options. 31346 (line 10) 31347 * mtune <7>: DEC Alpha Options. (line 262) 31348 * mtune <8>: CRIS Options. (line 16) 31349 * mtune: ARM Options. (line 99) 31350 * muclibc: GNU/Linux Options. (line 13) 31351 * muls: Score Options. (line 18) 31352 * multcost=NUMBER: SH Options. (line 124) 31353 * multi_module: Darwin Options. (line 190) 31354 * multilib-library-pic: FRV Options. (line 89) 31355 * multiply_defined: Darwin Options. (line 190) 31356 * multiply_defined_unused: Darwin Options. (line 190) 31357 * munaligned-doubles: SPARC Options. (line 59) 31358 * muninit-const-in-rodata: MIPS Options. (line 233) 31359 * munix: VAX Options. (line 9) 31360 * munix-asm: PDP-11 Options. (line 74) 31361 * mupdate: RS/6000 and PowerPC Options. 31362 (line 339) 31363 * musermode: SH Options. (line 118) 31364 * mv850: V850 Options. (line 49) 31365 * mv850e: V850 Options. (line 69) 31366 * mv850e1: V850 Options. (line 64) 31367 * mv8plus: SPARC Options. (line 168) 31368 * mvis: SPARC Options. (line 175) 31369 * mvliw-branch: FRV Options. (line 164) 31370 * mvms-return-codes: DEC Alpha/VMS Options. 31371 (line 9) 31372 * mvolatile-asm-stop: IA-64 Options. (line 32) 31373 * mvr4130-align: MIPS Options. (line 388) 31374 * mvrsave: RS/6000 and PowerPC Options. 31375 (line 173) 31376 * mvxworks: RS/6000 and PowerPC Options. 31377 (line 542) 31378 * mwarn-dynamicstack: S/390 and zSeries Options. 31379 (line 141) 31380 * mwarn-framesize: S/390 and zSeries Options. 31381 (line 133) 31382 * mwide-bitfields: MCore Options. (line 23) 31383 * mwindiss: RS/6000 and PowerPC Options. 31384 (line 546) 31385 * mwords-little-endian: ARM Options. (line 76) 31386 * mxgot: MIPS Options. (line 127) 31387 * mxl-compat: RS/6000 and PowerPC Options. 31388 (line 268) 31389 * myellowknife: RS/6000 and PowerPC Options. 31390 (line 537) 31391 * mzarch: S/390 and zSeries Options. 31392 (line 87) 31393 * mzda: V850 Options. (line 45) 31394 * mzero-extend: MMIX Options. (line 27) 31395 * no-integrated-cpp: C Dialect Options. (line 217) 31396 * no-red-zone: i386 and x86-64 Options. 31397 (line 472) 31398 * no_dead_strip_inits_and_terms: Darwin Options. (line 190) 31399 * noall_load: Darwin Options. (line 190) 31400 * nocpp: MIPS Options. (line 304) 31401 * nodefaultlibs: Link Options. (line 62) 31402 * nofixprebinding: Darwin Options. (line 190) 31403 * nolibdld: HPPA Options. (line 190) 31404 * nomultidefs: Darwin Options. (line 190) 31405 * noprebind: Darwin Options. (line 190) 31406 * noseglinkedit: Darwin Options. (line 190) 31407 * nostartfiles: Link Options. (line 57) 31408 * nostdinc: Preprocessor Options. 31409 (line 373) 31410 * nostdinc++ <1>: Preprocessor Options. 31411 (line 378) 31412 * nostdinc++: C++ Dialect Options. 31413 (line 225) 31414 * nostdlib: Link Options. (line 71) 31415 * o: Preprocessor Options. 31416 (line 72) 31417 * O: Optimize Options. (line 32) 31418 * o: Overall Options. (line 175) 31419 * O0: Optimize Options. (line 104) 31420 * O1: Optimize Options. (line 32) 31421 * O2: Optimize Options. (line 63) 31422 * O3: Optimize Options. (line 99) 31423 * Os: Optimize Options. (line 107) 31424 * P: Preprocessor Options. 31425 (line 567) 31426 * p: Debugging Options. (line 200) 31427 * pagezero_size: Darwin Options. (line 190) 31428 * param: Optimize Options. (line 1358) 31429 * pass-exit-codes: Overall Options. (line 133) 31430 * pedantic <1>: Warnings and Errors. 31431 (line 25) 31432 * pedantic <2>: Alternate Keywords. (line 29) 31433 * pedantic <3>: C Extensions. (line 6) 31434 * pedantic <4>: Preprocessor Options. 31435 (line 163) 31436 * pedantic <5>: Warning Options. (line 27) 31437 * pedantic: Standards. (line 13) 31438 * pedantic-errors <1>: Warnings and Errors. 31439 (line 25) 31440 * pedantic-errors <2>: Non-bugs. (line 216) 31441 * pedantic-errors <3>: Preprocessor Options. 31442 (line 168) 31443 * pedantic-errors <4>: Warning Options. (line 69) 31444 * pedantic-errors: Standards. (line 13) 31445 * pg: Debugging Options. (line 206) 31446 * pie: Link Options. (line 92) 31447 * pipe: Overall Options. (line 197) 31448 * prebind: Darwin Options. (line 190) 31449 * prebind_all_twolevel_modules: Darwin Options. (line 190) 31450 * preprocessor: Preprocessor Options. 31451 (line 24) 31452 * print-file-name: Debugging Options. (line 798) 31453 * print-libgcc-file-name: Debugging Options. (line 819) 31454 * print-multi-directory: Debugging Options. (line 804) 31455 * print-multi-lib: Debugging Options. (line 809) 31456 * print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 31457 (line 244) 31458 * print-prog-name: Debugging Options. (line 816) 31459 * print-search-dirs: Debugging Options. (line 827) 31460 * private_bundle: Darwin Options. (line 190) 31461 * pthread <1>: SPARC Options. (line 240) 31462 * pthread <2>: RS/6000 and PowerPC Options. 31463 (line 653) 31464 * pthread: IA-64 Options. (line 106) 31465 * pthreads: SPARC Options. (line 234) 31466 * Q: Debugging Options. (line 212) 31467 * Qn: System V Options. (line 18) 31468 * Qy: System V Options. (line 14) 31469 * rdynamic: Link Options. (line 98) 31470 * read_only_relocs: Darwin Options. (line 190) 31471 * remap: Preprocessor Options. 31472 (line 615) 31473 * s: Link Options. (line 105) 31474 * S <1>: Link Options. (line 20) 31475 * S: Overall Options. (line 158) 31476 * save-temps: Debugging Options. (line 760) 31477 * sectalign: Darwin Options. (line 190) 31478 * sectcreate: Darwin Options. (line 190) 31479 * sectobjectsymbols: Darwin Options. (line 190) 31480 * sectorder: Darwin Options. (line 190) 31481 * seg1addr: Darwin Options. (line 190) 31482 * seg_addr_table: Darwin Options. (line 190) 31483 * seg_addr_table_filename: Darwin Options. (line 190) 31484 * segaddr: Darwin Options. (line 190) 31485 * seglinkedit: Darwin Options. (line 190) 31486 * segprot: Darwin Options. (line 190) 31487 * segs_read_only_addr: Darwin Options. (line 190) 31488 * segs_read_write_addr: Darwin Options. (line 190) 31489 * shared: Link Options. (line 114) 31490 * shared-libgcc: Link Options. (line 122) 31491 * sim: CRIS Options. (line 108) 31492 * sim2: CRIS Options. (line 114) 31493 * single_module: Darwin Options. (line 190) 31494 * specs: Directory Options. (line 84) 31495 * static <1>: HPPA Options. (line 194) 31496 * static <2>: Darwin Options. (line 190) 31497 * static: Link Options. (line 109) 31498 * static-libgcc: Link Options. (line 122) 31499 * std <1>: Non-bugs. (line 107) 31500 * std <2>: Other Builtins. (line 22) 31501 * std <3>: C Dialect Options. (line 47) 31502 * std: Standards. (line 13) 31503 * std=: Preprocessor Options. 31504 (line 324) 31505 * sub_library: Darwin Options. (line 190) 31506 * sub_umbrella: Darwin Options. (line 190) 31507 * symbolic: Link Options. (line 157) 31508 * sysroot: Directory Options. (line 92) 31509 * target-help <1>: Preprocessor Options. 31510 (line 620) 31511 * target-help: Overall Options. (line 228) 31512 * threads <1>: SPARC Options. (line 228) 31513 * threads: HPPA Options. (line 207) 31514 * time: Debugging Options. (line 774) 31515 * tls: FRV Options. (line 75) 31516 * TLS: FRV Options. (line 72) 31517 * traditional <1>: Incompatibilities. (line 6) 31518 * traditional: C Dialect Options. (line 229) 31519 * traditional-cpp <1>: Preprocessor Options. 31520 (line 598) 31521 * traditional-cpp: C Dialect Options. (line 229) 31522 * trigraphs <1>: Preprocessor Options. 31523 (line 602) 31524 * trigraphs: C Dialect Options. (line 213) 31525 * twolevel_namespace: Darwin Options. (line 190) 31526 * u: Link Options. (line 179) 31527 * U: Preprocessor Options. 31528 (line 56) 31529 * umbrella: Darwin Options. (line 190) 31530 * undef: Preprocessor Options. 31531 (line 60) 31532 * undefined: Darwin Options. (line 190) 31533 * unexported_symbols_list: Darwin Options. (line 190) 31534 * V: Target Options. (line 24) 31535 * v <1>: Preprocessor Options. 31536 (line 624) 31537 * v: Overall Options. (line 186) 31538 * version <1>: Preprocessor Options. 31539 (line 637) 31540 * version: Overall Options. (line 232) 31541 * W: Incompatibilities. (line 64) 31542 * w: Preprocessor Options. 31543 (line 159) 31544 * W: Warning Options. (line 593) 31545 * w: Warning Options. (line 73) 31546 * Wa: Assembler Options. (line 9) 31547 * Wabi: C++ Dialect Options. 31548 (line 239) 31549 * Waddress: Warning Options. (line 865) 31550 * Waggregate-return: Warning Options. (line 878) 31551 * Wall <1>: Standard Libraries. (line 6) 31552 * Wall <2>: Preprocessor Options. 31553 (line 78) 31554 * Wall: Warning Options. (line 577) 31555 * Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 31556 (line 198) 31557 * Wattributes: Warning Options. (line 883) 31558 * Wbad-function-cast: Warning Options. (line 813) 31559 * Wcast-align: Warning Options. (line 827) 31560 * Wcast-qual: Warning Options. (line 822) 31561 * Wchar-subscripts: Warning Options. (line 79) 31562 * Wcomment <1>: Preprocessor Options. 31563 (line 86) 31564 * Wcomment: Warning Options. (line 84) 31565 * Wcomments: Preprocessor Options. 31566 (line 86) 31567 * Wconversion <1>: Protoize Caveats. (line 31) 31568 * Wconversion: Warning Options. (line 845) 31569 * Wctor-dtor-privacy: C++ Dialect Options. 31570 (line 317) 31571 * Wdeclaration-after-statement: Warning Options. (line 775) 31572 * Wdisabled-optimization: Warning Options. (line 1136) 31573 * Wdiv-by-zero: Warning Options. (line 667) 31574 * weak_reference_mismatches: Darwin Options. (line 190) 31575 * Weffc++: C++ Dialect Options. 31576 (line 343) 31577 * Wendif-labels <1>: Preprocessor Options. 31578 (line 136) 31579 * Wendif-labels: Warning Options. (line 785) 31580 * Werror <1>: Preprocessor Options. 31581 (line 149) 31582 * Werror: Warning Options. (line 1151) 31583 * Werror-implicit-function-declaration: Warning Options. (line 198) 31584 * Werror=: Warning Options. (line 1154) 31585 * Wextra: Warning Options. (line 593) 31586 * Wfatal-errors: Warning Options. (line 89) 31587 * Wfloat-equal: Warning Options. (line 683) 31588 * Wformat <1>: Function Attributes. 31589 (line 281) 31590 * Wformat: Warning Options. (line 94) 31591 * Wformat-nonliteral <1>: Function Attributes. 31592 (line 334) 31593 * Wformat-nonliteral: Warning Options. (line 151) 31594 * Wformat-security: Warning Options. (line 156) 31595 * Wformat-y2k: Warning Options. (line 129) 31596 * Wformat=2: Warning Options. (line 167) 31597 * Wframe-larger-than: Warning Options. (line 797) 31598 * whatsloaded: Darwin Options. (line 190) 31599 * whyload: Darwin Options. (line 190) 31600 * Wimplicit: Warning Options. (line 204) 31601 * Wimplicit-function-declaration: Warning Options. (line 198) 31602 * Wimplicit-int: Warning Options. (line 193) 31603 * Wimport: Preprocessor Options. 31604 (line 109) 31605 * Winit-self: Warning Options. (line 179) 31606 * Winline <1>: Inline. (line 42) 31607 * Winline: Warning Options. (line 1076) 31608 * Winvalid-pch: Warning Options. (line 1111) 31609 * Wl: Link Options. (line 175) 31610 * Wlarger-than: Warning Options. (line 794) 31611 * Wlong-long: Warning Options. (line 1115) 31612 * Wmain: Warning Options. (line 208) 31613 * Wmissing-braces: Warning Options. (line 214) 31614 * Wmissing-declarations: Warning Options. (line 905) 31615 * Wmissing-field-initializers: Warning Options. (line 911) 31616 * Wmissing-format-attribute: Warning Options. (line 937) 31617 * Wmissing-include-dirs: Warning Options. (line 224) 31618 * Wmissing-noreturn: Warning Options. (line 929) 31619 * Wmissing-prototypes: Warning Options. (line 899) 31620 * Wmultichar: Warning Options. (line 956) 31621 * Wnested-externs: Warning Options. (line 1051) 31622 * Wno-address: Warning Options. (line 865) 31623 * Wno-attributes: Warning Options. (line 883) 31624 * Wno-deprecated: C++ Dialect Options. 31625 (line 373) 31626 * Wno-deprecated-declarations: Warning Options. (line 1005) 31627 * Wno-div-by-zero: Warning Options. (line 667) 31628 * Wno-endif-labels: Warning Options. (line 785) 31629 * Wno-format-extra-args: Warning Options. (line 133) 31630 * Wno-format-zero-length: Warning Options. (line 147) 31631 * Wno-import: Warning Options. (line 76) 31632 * Wno-int-to-pointer-cast: Warning Options. (line 1103) 31633 * Wno-invalid-offsetof: Warning Options. (line 1089) 31634 * Wno-long-long: Warning Options. (line 1115) 31635 * Wno-multichar: Warning Options. (line 956) 31636 * Wno-non-template-friend: C++ Dialect Options. 31637 (line 384) 31638 * Wno-overflow: Warning Options. (line 1011) 31639 * Wno-pmf-conversions <1>: Bound member functions. 31640 (line 35) 31641 * Wno-pmf-conversions: C++ Dialect Options. 31642 (line 425) 31643 * Wno-pointer-sign: Warning Options. (line 1145) 31644 * Wno-pointer-to-int-cast: Warning Options. (line 1107) 31645 * Wno-pragmas: Warning Options. (line 479) 31646 * Wno-protocol: Objective-C and Objective-C++ Dialect Options. 31647 (line 202) 31648 * Wno-variadic-macros: Warning Options. (line 1121) 31649 * Wno-vla: Warning Options. (line 1127) 31650 * Wno-volatile-register-var: Warning Options. (line 1131) 31651 * Wnon-virtual-dtor: C++ Dialect Options. 31652 (line 322) 31653 * Wnonnull: Warning Options. (line 172) 31654 * Wnormalized: Warning Options. (line 962) 31655 * Wold-style-cast: C++ Dialect Options. 31656 (line 400) 31657 * Wold-style-definition: Warning Options. (line 895) 31658 * Woverlength-strings: Warning Options. (line 1173) 31659 * Woverloaded-virtual: C++ Dialect Options. 31660 (line 406) 31661 * Woverride-init: Warning Options. (line 1014) 31662 * Wp: Preprocessor Options. 31663 (line 13) 31664 * Wpacked: Warning Options. (line 1022) 31665 * Wpadded: Warning Options. (line 1039) 31666 * Wparentheses: Warning Options. (line 227) 31667 * Wpointer-arith <1>: Pointer Arith. (line 13) 31668 * Wpointer-arith: Warning Options. (line 807) 31669 * Wpointer-sign: Warning Options. (line 1145) 31670 * Wpragmas: Warning Options. (line 479) 31671 * Wredundant-decls: Warning Options. (line 1046) 31672 * Wreorder: C++ Dialect Options. 31673 (line 327) 31674 * Wreturn-type: Warning Options. (line 317) 31675 * Wselector: Objective-C and Objective-C++ Dialect Options. 31676 (line 212) 31677 * Wsequence-point: Warning Options. (line 271) 31678 * Wshadow: Warning Options. (line 789) 31679 * Wsign-compare: Warning Options. (line 858) 31680 * Wsign-promo: C++ Dialect Options. 31681 (line 429) 31682 * Wstack-protector: Warning Options. (line 1168) 31683 * Wstrict-aliasing: Warning Options. (line 484) 31684 * Wstrict-aliasing=n: Warning Options. (line 492) 31685 * Wstrict-null-sentinel: C++ Dialect Options. 31686 (line 377) 31687 * Wstrict-overflow: Warning Options. (line 526) 31688 * Wstrict-prototypes: Warning Options. (line 889) 31689 * Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 31690 (line 224) 31691 * Wswitch: Warning Options. (line 336) 31692 * Wswitch-enum: Warning Options. (line 347) 31693 * Wswitch-switch: Warning Options. (line 344) 31694 * Wsystem-headers <1>: Preprocessor Options. 31695 (line 153) 31696 * Wsystem-headers: Warning Options. (line 672) 31697 * Wtraditional <1>: Preprocessor Options. 31698 (line 103) 31699 * Wtraditional: Warning Options. (line 698) 31700 * Wtrigraphs <1>: Preprocessor Options. 31701 (line 91) 31702 * Wtrigraphs: Warning Options. (line 353) 31703 * Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 31704 (line 232) 31705 * Wundef <1>: Preprocessor Options. 31706 (line 112) 31707 * Wundef: Warning Options. (line 782) 31708 * Wuninitialized: Warning Options. (line 398) 31709 * Wunknown-pragmas: Warning Options. (line 472) 31710 * Wunreachable-code: Warning Options. (line 1054) 31711 * Wunsafe-loop-optimizations: Warning Options. (line 801) 31712 * Wunused: Warning Options. (line 391) 31713 * Wunused-function: Warning Options. (line 358) 31714 * Wunused-label: Warning Options. (line 363) 31715 * Wunused-macros: Preprocessor Options. 31716 (line 117) 31717 * Wunused-parameter: Warning Options. (line 370) 31718 * Wunused-value: Warning Options. (line 385) 31719 * Wunused-variable: Warning Options. (line 377) 31720 * Wvariadic-macros: Warning Options. (line 1121) 31721 * Wvla: Warning Options. (line 1127) 31722 * Wvolatile-register-var: Warning Options. (line 1131) 31723 * Wwrite-strings: Warning Options. (line 833) 31724 * x <1>: Preprocessor Options. 31725 (line 308) 31726 * x: Overall Options. (line 109) 31727 * Xassembler: Assembler Options. (line 13) 31728 * Xlinker: Link Options. (line 163) 31729 * Ym: System V Options. (line 26) 31730 * YP: System V Options. (line 22) 31731 31732 31733 File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 31734 31735 Keyword Index 31736 ************* 31737 31738 [index] 31739 * Menu: 31740 31741 * ! in constraint: Multi-Alternative. (line 33) 31742 * # in constraint: Modifiers. (line 57) 31743 * #pragma: Pragmas. (line 6) 31744 * #pragma implementation: C++ Interface. (line 39) 31745 * #pragma implementation, implied: C++ Interface. (line 46) 31746 * #pragma interface: C++ Interface. (line 20) 31747 * #pragma, reason for not using: Function Attributes. 31748 (line 916) 31749 * $: Dollar Signs. (line 6) 31750 * % in constraint: Modifiers. (line 45) 31751 * %include: Spec Files. (line 27) 31752 * %include_noerr: Spec Files. (line 31) 31753 * %rename: Spec Files. (line 35) 31754 * & in constraint: Modifiers. (line 25) 31755 * ': Incompatibilities. (line 116) 31756 * * in constraint: Modifiers. (line 62) 31757 * + in constraint: Modifiers. (line 12) 31758 * -lgcc, use with -nodefaultlibs: Link Options. (line 79) 31759 * -lgcc, use with -nostdlib: Link Options. (line 79) 31760 * -nodefaultlibs and unresolved references: Link Options. (line 79) 31761 * -nostdlib and unresolved references: Link Options. (line 79) 31762 * .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 31763 (line 607) 31764 * //: C++ Comments. (line 6) 31765 * 0 in constraint: Simple Constraints. (line 115) 31766 * < in constraint: Simple Constraints. (line 46) 31767 * = in constraint: Modifiers. (line 8) 31768 * > in constraint: Simple Constraints. (line 50) 31769 * ? in constraint: Multi-Alternative. (line 27) 31770 * ?: extensions: Conditionals. (line 6) 31771 * ?: side effect: Conditionals. (line 20) 31772 * _ in variables in macros: Typeof. (line 42) 31773 * __builtin___fprintf_chk: Object Size Checking. 31774 (line 6) 31775 * __builtin___memcpy_chk: Object Size Checking. 31776 (line 6) 31777 * __builtin___memmove_chk: Object Size Checking. 31778 (line 6) 31779 * __builtin___mempcpy_chk: Object Size Checking. 31780 (line 6) 31781 * __builtin___memset_chk: Object Size Checking. 31782 (line 6) 31783 * __builtin___printf_chk: Object Size Checking. 31784 (line 6) 31785 * __builtin___snprintf_chk: Object Size Checking. 31786 (line 6) 31787 * __builtin___sprintf_chk: Object Size Checking. 31788 (line 6) 31789 * __builtin___stpcpy_chk: Object Size Checking. 31790 (line 6) 31791 * __builtin___strcat_chk: Object Size Checking. 31792 (line 6) 31793 * __builtin___strcpy_chk: Object Size Checking. 31794 (line 6) 31795 * __builtin___strncat_chk: Object Size Checking. 31796 (line 6) 31797 * __builtin___strncpy_chk: Object Size Checking. 31798 (line 6) 31799 * __builtin___vfprintf_chk: Object Size Checking. 31800 (line 6) 31801 * __builtin___vprintf_chk: Object Size Checking. 31802 (line 6) 31803 * __builtin___vsnprintf_chk: Object Size Checking. 31804 (line 6) 31805 * __builtin___vsprintf_chk: Object Size Checking. 31806 (line 6) 31807 * __builtin_apply: Constructing Calls. (line 31) 31808 * __builtin_apply_args: Constructing Calls. (line 20) 31809 * __builtin_choose_expr: Other Builtins. (line 150) 31810 * __builtin_clz: Other Builtins. (line 383) 31811 * __builtin_clzl: Other Builtins. (line 401) 31812 * __builtin_clzll: Other Builtins. (line 421) 31813 * __builtin_constant_p: Other Builtins. (line 190) 31814 * __builtin_ctz: Other Builtins. (line 387) 31815 * __builtin_ctzl: Other Builtins. (line 405) 31816 * __builtin_ctzll: Other Builtins. (line 425) 31817 * __builtin_expect: Other Builtins. (line 236) 31818 * __builtin_ffs: Other Builtins. (line 379) 31819 * __builtin_ffsl: Other Builtins. (line 397) 31820 * __builtin_ffsll: Other Builtins. (line 417) 31821 * __builtin_frame_address: Return Address. (line 34) 31822 * __builtin_huge_val: Other Builtins. (line 300) 31823 * __builtin_huge_valf: Other Builtins. (line 305) 31824 * __builtin_huge_vall: Other Builtins. (line 308) 31825 * __builtin_inf: Other Builtins. (line 312) 31826 * __builtin_infd128: Other Builtins. (line 322) 31827 * __builtin_infd32: Other Builtins. (line 316) 31828 * __builtin_infd64: Other Builtins. (line 319) 31829 * __builtin_inff: Other Builtins. (line 326) 31830 * __builtin_infl: Other Builtins. (line 331) 31831 * __builtin_isgreater: Other Builtins. (line 6) 31832 * __builtin_isgreaterequal: Other Builtins. (line 6) 31833 * __builtin_isless: Other Builtins. (line 6) 31834 * __builtin_islessequal: Other Builtins. (line 6) 31835 * __builtin_islessgreater: Other Builtins. (line 6) 31836 * __builtin_isunordered: Other Builtins. (line 6) 31837 * __builtin_nan: Other Builtins. (line 335) 31838 * __builtin_nand128: Other Builtins. (line 357) 31839 * __builtin_nand32: Other Builtins. (line 351) 31840 * __builtin_nand64: Other Builtins. (line 354) 31841 * __builtin_nanf: Other Builtins. (line 361) 31842 * __builtin_nanl: Other Builtins. (line 364) 31843 * __builtin_nans: Other Builtins. (line 368) 31844 * __builtin_nansf: Other Builtins. (line 372) 31845 * __builtin_nansl: Other Builtins. (line 375) 31846 * __builtin_object_size: Object Size Checking. 31847 (line 6) 31848 * __builtin_offsetof: Offsetof. (line 6) 31849 * __builtin_parity: Other Builtins. (line 394) 31850 * __builtin_parityl: Other Builtins. (line 413) 31851 * __builtin_parityll: Other Builtins. (line 433) 31852 * __builtin_popcount: Other Builtins. (line 391) 31853 * __builtin_popcountl: Other Builtins. (line 409) 31854 * __builtin_popcountll: Other Builtins. (line 429) 31855 * __builtin_powi: Other Builtins. (line 6) 31856 * __builtin_powif: Other Builtins. (line 6) 31857 * __builtin_powil: Other Builtins. (line 6) 31858 * __builtin_prefetch: Other Builtins. (line 261) 31859 * __builtin_return: Constructing Calls. (line 48) 31860 * __builtin_return_address: Return Address. (line 11) 31861 * __builtin_types_compatible_p: Other Builtins. (line 104) 31862 * __complex__ keyword: Complex. (line 6) 31863 * __declspec(dllexport): Function Attributes. 31864 (line 161) 31865 * __declspec(dllimport): Function Attributes. 31866 (line 193) 31867 * __extension__: Alternate Keywords. (line 29) 31868 * __func__ identifier: Function Names. (line 6) 31869 * __FUNCTION__ identifier: Function Names. (line 6) 31870 * __imag__ keyword: Complex. (line 27) 31871 * __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 31872 * __real__ keyword: Complex. (line 27) 31873 * __STDC_HOSTED__: Standards. (line 6) 31874 * __sync_add_and_fetch: Atomic Builtins. (line 57) 31875 * __sync_and_and_fetch: Atomic Builtins. (line 57) 31876 * __sync_bool_compare_and_swap: Atomic Builtins. (line 65) 31877 * __sync_fetch_and_add: Atomic Builtins. (line 45) 31878 * __sync_fetch_and_and: Atomic Builtins. (line 45) 31879 * __sync_fetch_and_nand: Atomic Builtins. (line 45) 31880 * __sync_fetch_and_or: Atomic Builtins. (line 45) 31881 * __sync_fetch_and_sub: Atomic Builtins. (line 45) 31882 * __sync_fetch_and_xor: Atomic Builtins. (line 45) 31883 * __sync_lock_release: Atomic Builtins. (line 95) 31884 * __sync_lock_test_and_set: Atomic Builtins. (line 77) 31885 * __sync_nand_and_fetch: Atomic Builtins. (line 57) 31886 * __sync_or_and_fetch: Atomic Builtins. (line 57) 31887 * __sync_sub_and_fetch: Atomic Builtins. (line 57) 31888 * __sync_synchronize: Atomic Builtins. (line 74) 31889 * __sync_val_compare_and_swap: Atomic Builtins. (line 65) 31890 * __sync_xor_and_fetch: Atomic Builtins. (line 57) 31891 * __thread: Thread-Local. (line 6) 31892 * _Complex keyword: Complex. (line 6) 31893 * _Decimal128 data type: Decimal Float. (line 6) 31894 * _Decimal32 data type: Decimal Float. (line 6) 31895 * _Decimal64 data type: Decimal Float. (line 6) 31896 * _exit: Other Builtins. (line 6) 31897 * _Exit: Other Builtins. (line 6) 31898 * ABI: Compatibility. (line 6) 31899 * abort: Other Builtins. (line 6) 31900 * abs: Other Builtins. (line 6) 31901 * accessing volatiles: Volatiles. (line 6) 31902 * acos: Other Builtins. (line 6) 31903 * acosf: Other Builtins. (line 6) 31904 * acosh: Other Builtins. (line 6) 31905 * acoshf: Other Builtins. (line 6) 31906 * acoshl: Other Builtins. (line 6) 31907 * acosl: Other Builtins. (line 6) 31908 * Ada: G++ and GCC. (line 6) 31909 * address constraints: Simple Constraints. (line 142) 31910 * address of a label: Labels as Values. (line 6) 31911 * address_operand: Simple Constraints. (line 146) 31912 * alias attribute: Function Attributes. 31913 (line 33) 31914 * aliasing of parameters: Code Gen Options. (line 360) 31915 * aligned attribute <1>: Type Attributes. (line 30) 31916 * aligned attribute: Variable Attributes. 31917 (line 23) 31918 * alignment: Alignment. (line 6) 31919 * alloca: Other Builtins. (line 6) 31920 * alloca vs variable-length arrays: Variable Length. (line 27) 31921 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 31922 (line 497) 31923 * alternate keywords: Alternate Keywords. (line 6) 31924 * always_inline function attribute: Function Attributes. 31925 (line 46) 31926 * AMD x86-64 Options: i386 and x86-64 Options. 31927 (line 6) 31928 * AMD1: Standards. (line 6) 31929 * ANSI C: Standards. (line 6) 31930 * ANSI C standard: Standards. (line 6) 31931 * ANSI C89: Standards. (line 6) 31932 * ANSI support: C Dialect Options. (line 10) 31933 * ANSI X3.159-1989: Standards. (line 6) 31934 * apostrophes: Incompatibilities. (line 116) 31935 * application binary interface: Compatibility. (line 6) 31936 * ARC Options: ARC Options. (line 6) 31937 * ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 31938 (line 6) 31939 * ARM options: ARM Options. (line 6) 31940 * arrays of length zero: Zero Length. (line 6) 31941 * arrays of variable length: Variable Length. (line 6) 31942 * arrays, non-lvalue: Subscripting. (line 6) 31943 * asin: Other Builtins. (line 6) 31944 * asinf: Other Builtins. (line 6) 31945 * asinh: Other Builtins. (line 6) 31946 * asinhf: Other Builtins. (line 6) 31947 * asinhl: Other Builtins. (line 6) 31948 * asinl: Other Builtins. (line 6) 31949 * asm constraints: Constraints. (line 6) 31950 * asm expressions: Extended Asm. (line 6) 31951 * assembler instructions: Extended Asm. (line 6) 31952 * assembler names for identifiers: Asm Labels. (line 6) 31953 * assembly code, invalid: Bug Criteria. (line 12) 31954 * atan: Other Builtins. (line 6) 31955 * atan2: Other Builtins. (line 6) 31956 * atan2f: Other Builtins. (line 6) 31957 * atan2l: Other Builtins. (line 6) 31958 * atanf: Other Builtins. (line 6) 31959 * atanh: Other Builtins. (line 6) 31960 * atanhf: Other Builtins. (line 6) 31961 * atanhl: Other Builtins. (line 6) 31962 * atanl: Other Builtins. (line 6) 31963 * attribute of types: Type Attributes. (line 6) 31964 * attribute of variables: Variable Attributes. 31965 (line 6) 31966 * attribute syntax: Attribute Syntax. (line 6) 31967 * autoincrement/decrement addressing: Simple Constraints. (line 28) 31968 * automatic inline for C++ member fns: Inline. (line 53) 31969 * AVR Options: AVR Options. (line 6) 31970 * Backwards Compatibility: Backwards Compatibility. 31971 (line 6) 31972 * base class members: Name lookup. (line 6) 31973 * bcmp: Other Builtins. (line 6) 31974 * below100 attribute: Variable Attributes. 31975 (line 449) 31976 * binary compatibility: Compatibility. (line 6) 31977 * Blackfin Options: Blackfin Options. (line 6) 31978 * bound pointer to member function: Bound member functions. 31979 (line 6) 31980 * bounds checking: Optimize Options. (line 333) 31981 * bug criteria: Bug Criteria. (line 6) 31982 * bugs: Bugs. (line 6) 31983 * bugs, known: Trouble. (line 6) 31984 * built-in functions <1>: Other Builtins. (line 6) 31985 * built-in functions: C Dialect Options. (line 149) 31986 * bzero: Other Builtins. (line 6) 31987 * C compilation options: Invoking GCC. (line 17) 31988 * C intermediate output, nonexistent: G++ and GCC. (line 35) 31989 * C language extensions: C Extensions. (line 6) 31990 * C language, traditional: C Dialect Options. (line 227) 31991 * C standard: Standards. (line 6) 31992 * C standards: Standards. (line 6) 31993 * c++: Invoking G++. (line 13) 31994 * C++: G++ and GCC. (line 30) 31995 * C++ comments: C++ Comments. (line 6) 31996 * C++ compilation options: Invoking GCC. (line 23) 31997 * C++ interface and implementation headers: C++ Interface. (line 6) 31998 * C++ language extensions: C++ Extensions. (line 6) 31999 * C++ member fns, automatically inline: Inline. (line 53) 32000 * C++ misunderstandings: C++ Misunderstandings. 32001 (line 6) 32002 * C++ options, command line: C++ Dialect Options. 32003 (line 6) 32004 * C++ pragmas, effect on inlining: C++ Interface. (line 66) 32005 * C++ source file suffixes: Invoking G++. (line 6) 32006 * C++ static data, declaring and defining: Static Definitions. 32007 (line 6) 32008 * C89: Standards. (line 6) 32009 * C90: Standards. (line 6) 32010 * C94: Standards. (line 6) 32011 * C95: Standards. (line 6) 32012 * C99: Standards. (line 6) 32013 * C9X: Standards. (line 6) 32014 * C_INCLUDE_PATH: Environment Variables. 32015 (line 124) 32016 * cabs: Other Builtins. (line 6) 32017 * cabsf: Other Builtins. (line 6) 32018 * cabsl: Other Builtins. (line 6) 32019 * cacos: Other Builtins. (line 6) 32020 * cacosf: Other Builtins. (line 6) 32021 * cacosh: Other Builtins. (line 6) 32022 * cacoshf: Other Builtins. (line 6) 32023 * cacoshl: Other Builtins. (line 6) 32024 * cacosl: Other Builtins. (line 6) 32025 * calling functions through the function vector on the H8/300 processors: Function Attributes. 32026 (line 373) 32027 * calloc: Other Builtins. (line 6) 32028 * carg: Other Builtins. (line 6) 32029 * cargf: Other Builtins. (line 6) 32030 * cargl: Other Builtins. (line 6) 32031 * case labels in initializers: Designated Inits. (line 6) 32032 * case ranges: Case Ranges. (line 6) 32033 * casin: Other Builtins. (line 6) 32034 * casinf: Other Builtins. (line 6) 32035 * casinh: Other Builtins. (line 6) 32036 * casinhf: Other Builtins. (line 6) 32037 * casinhl: Other Builtins. (line 6) 32038 * casinl: Other Builtins. (line 6) 32039 * cast to a union: Cast to Union. (line 6) 32040 * catan: Other Builtins. (line 6) 32041 * catanf: Other Builtins. (line 6) 32042 * catanh: Other Builtins. (line 6) 32043 * catanhf: Other Builtins. (line 6) 32044 * catanhl: Other Builtins. (line 6) 32045 * catanl: Other Builtins. (line 6) 32046 * cbrt: Other Builtins. (line 6) 32047 * cbrtf: Other Builtins. (line 6) 32048 * cbrtl: Other Builtins. (line 6) 32049 * ccos: Other Builtins. (line 6) 32050 * ccosf: Other Builtins. (line 6) 32051 * ccosh: Other Builtins. (line 6) 32052 * ccoshf: Other Builtins. (line 6) 32053 * ccoshl: Other Builtins. (line 6) 32054 * ccosl: Other Builtins. (line 6) 32055 * ceil: Other Builtins. (line 6) 32056 * ceilf: Other Builtins. (line 6) 32057 * ceill: Other Builtins. (line 6) 32058 * cexp: Other Builtins. (line 6) 32059 * cexpf: Other Builtins. (line 6) 32060 * cexpl: Other Builtins. (line 6) 32061 * character set, execution: Preprocessor Options. 32062 (line 483) 32063 * character set, input: Preprocessor Options. 32064 (line 496) 32065 * character set, input normalization: Warning Options. (line 962) 32066 * character set, wide execution: Preprocessor Options. 32067 (line 488) 32068 * cimag: Other Builtins. (line 6) 32069 * cimagf: Other Builtins. (line 6) 32070 * cimagl: Other Builtins. (line 6) 32071 * cleanup attribute: Variable Attributes. 32072 (line 76) 32073 * clog: Other Builtins. (line 6) 32074 * clogf: Other Builtins. (line 6) 32075 * clogl: Other Builtins. (line 6) 32076 * COBOL: G++ and GCC. (line 23) 32077 * code generation conventions: Code Gen Options. (line 6) 32078 * code, mixed with declarations: Mixed Declarations. (line 6) 32079 * command options: Invoking GCC. (line 6) 32080 * comments, C++ style: C++ Comments. (line 6) 32081 * common attribute: Variable Attributes. 32082 (line 92) 32083 * comparison of signed and unsigned values, warning: Warning Options. 32084 (line 858) 32085 * compiler bugs, reporting: Bug Reporting. (line 6) 32086 * compiler compared to C++ preprocessor: G++ and GCC. (line 35) 32087 * compiler options, C++: C++ Dialect Options. 32088 (line 6) 32089 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 32090 (line 6) 32091 * compiler version, specifying: Target Options. (line 6) 32092 * COMPILER_PATH: Environment Variables. 32093 (line 85) 32094 * complex conjugation: Complex. (line 34) 32095 * complex numbers: Complex. (line 6) 32096 * compound literals: Compound Literals. (line 6) 32097 * computed gotos: Labels as Values. (line 6) 32098 * conditional expressions, extensions: Conditionals. (line 6) 32099 * conflicting types: Disappointments. (line 21) 32100 * conj: Other Builtins. (line 6) 32101 * conjf: Other Builtins. (line 6) 32102 * conjl: Other Builtins. (line 6) 32103 * const applied to function: Function Attributes. 32104 (line 6) 32105 * const function attribute: Function Attributes. 32106 (line 106) 32107 * constants in constraints: Simple Constraints. (line 58) 32108 * constraint modifier characters: Modifiers. (line 6) 32109 * constraint, matching: Simple Constraints. (line 127) 32110 * constraints, asm: Constraints. (line 6) 32111 * constraints, machine specific: Machine Constraints. 32112 (line 6) 32113 * constructing calls: Constructing Calls. (line 6) 32114 * constructor expressions: Compound Literals. (line 6) 32115 * constructor function attribute: Function Attributes. 32116 (line 132) 32117 * contributors: Contributors. (line 6) 32118 * copysign: Other Builtins. (line 6) 32119 * copysignf: Other Builtins. (line 6) 32120 * copysignl: Other Builtins. (line 6) 32121 * core dump: Bug Criteria. (line 9) 32122 * cos: Other Builtins. (line 6) 32123 * cosf: Other Builtins. (line 6) 32124 * cosh: Other Builtins. (line 6) 32125 * coshf: Other Builtins. (line 6) 32126 * coshl: Other Builtins. (line 6) 32127 * cosl: Other Builtins. (line 6) 32128 * CPATH: Environment Variables. 32129 (line 123) 32130 * CPLUS_INCLUDE_PATH: Environment Variables. 32131 (line 125) 32132 * cpow: Other Builtins. (line 6) 32133 * cpowf: Other Builtins. (line 6) 32134 * cpowl: Other Builtins. (line 6) 32135 * cproj: Other Builtins. (line 6) 32136 * cprojf: Other Builtins. (line 6) 32137 * cprojl: Other Builtins. (line 6) 32138 * creal: Other Builtins. (line 6) 32139 * crealf: Other Builtins. (line 6) 32140 * creall: Other Builtins. (line 6) 32141 * CRIS Options: CRIS Options. (line 6) 32142 * cross compiling: Target Options. (line 6) 32143 * CRX Options: CRX Options. (line 6) 32144 * csin: Other Builtins. (line 6) 32145 * csinf: Other Builtins. (line 6) 32146 * csinh: Other Builtins. (line 6) 32147 * csinhf: Other Builtins. (line 6) 32148 * csinhl: Other Builtins. (line 6) 32149 * csinl: Other Builtins. (line 6) 32150 * csqrt: Other Builtins. (line 6) 32151 * csqrtf: Other Builtins. (line 6) 32152 * csqrtl: Other Builtins. (line 6) 32153 * ctan: Other Builtins. (line 6) 32154 * ctanf: Other Builtins. (line 6) 32155 * ctanh: Other Builtins. (line 6) 32156 * ctanhf: Other Builtins. (line 6) 32157 * ctanhl: Other Builtins. (line 6) 32158 * ctanl: Other Builtins. (line 6) 32159 * Darwin options: Darwin Options. (line 6) 32160 * dcgettext: Other Builtins. (line 6) 32161 * DD integer suffix: Decimal Float. (line 6) 32162 * dd integer suffix: Decimal Float. (line 6) 32163 * deallocating variable length arrays: Variable Length. (line 23) 32164 * debugging information options: Debugging Options. (line 6) 32165 * decimal floating types: Decimal Float. (line 6) 32166 * declaration scope: Incompatibilities. (line 80) 32167 * declarations inside expressions: Statement Exprs. (line 6) 32168 * declarations, mixed with code: Mixed Declarations. (line 6) 32169 * declaring attributes of functions: Function Attributes. 32170 (line 6) 32171 * declaring static data in C++: Static Definitions. (line 6) 32172 * defining static data in C++: Static Definitions. (line 6) 32173 * dependencies for make as output: Environment Variables. 32174 (line 151) 32175 * dependencies, make: Preprocessor Options. 32176 (line 173) 32177 * DEPENDENCIES_OUTPUT: Environment Variables. 32178 (line 150) 32179 * dependent name lookup: Name lookup. (line 6) 32180 * deprecated attribute: Variable Attributes. 32181 (line 100) 32182 * deprecated attribute.: Function Attributes. 32183 (line 143) 32184 * designated initializers: Designated Inits. (line 6) 32185 * designator lists: Designated Inits. (line 94) 32186 * designators: Designated Inits. (line 61) 32187 * destructor function attribute: Function Attributes. 32188 (line 132) 32189 * DF integer suffix: Decimal Float. (line 6) 32190 * df integer suffix: Decimal Float. (line 6) 32191 * dgettext: Other Builtins. (line 6) 32192 * diagnostic messages: Language Independent Options. 32193 (line 6) 32194 * dialect options: C Dialect Options. (line 6) 32195 * digits in constraint: Simple Constraints. (line 115) 32196 * directory options: Directory Options. (line 6) 32197 * DL integer suffix: Decimal Float. (line 6) 32198 * dl integer suffix: Decimal Float. (line 6) 32199 * dollar signs in identifier names: Dollar Signs. (line 6) 32200 * double-word arithmetic: Long Long. (line 6) 32201 * downward funargs: Nested Functions. (line 6) 32202 * drem: Other Builtins. (line 6) 32203 * dremf: Other Builtins. (line 6) 32204 * dreml: Other Builtins. (line 6) 32205 * E in constraint: Simple Constraints. (line 77) 32206 * earlyclobber operand: Modifiers. (line 25) 32207 * eight bit data on the H8/300, H8/300H, and H8S: Function Attributes. 32208 (line 240) 32209 * empty structures: Empty Structures. (line 6) 32210 * environment variables: Environment Variables. 32211 (line 6) 32212 * erf: Other Builtins. (line 6) 32213 * erfc: Other Builtins. (line 6) 32214 * erfcf: Other Builtins. (line 6) 32215 * erfcl: Other Builtins. (line 6) 32216 * erff: Other Builtins. (line 6) 32217 * erfl: Other Builtins. (line 6) 32218 * error messages: Warnings and Errors. 32219 (line 6) 32220 * escaped newlines: Escaped Newlines. (line 6) 32221 * exception handler functions on the Blackfin processor: Function Attributes. 32222 (line 250) 32223 * exclamation point: Multi-Alternative. (line 33) 32224 * exit: Other Builtins. (line 6) 32225 * exp: Other Builtins. (line 6) 32226 * exp10: Other Builtins. (line 6) 32227 * exp10f: Other Builtins. (line 6) 32228 * exp10l: Other Builtins. (line 6) 32229 * exp2: Other Builtins. (line 6) 32230 * exp2f: Other Builtins. (line 6) 32231 * exp2l: Other Builtins. (line 6) 32232 * expf: Other Builtins. (line 6) 32233 * expl: Other Builtins. (line 6) 32234 * explicit register variables: Explicit Reg Vars. (line 6) 32235 * expm1: Other Builtins. (line 6) 32236 * expm1f: Other Builtins. (line 6) 32237 * expm1l: Other Builtins. (line 6) 32238 * expressions containing statements: Statement Exprs. (line 6) 32239 * expressions, constructor: Compound Literals. (line 6) 32240 * extended asm: Extended Asm. (line 6) 32241 * extensible constraints: Simple Constraints. (line 151) 32242 * extensions, ?:: Conditionals. (line 6) 32243 * extensions, C language: C Extensions. (line 6) 32244 * extensions, C++ language: C++ Extensions. (line 6) 32245 * external declaration scope: Incompatibilities. (line 80) 32246 * externally_visible attribute.: Function Attributes. 32247 (line 907) 32248 * F in constraint: Simple Constraints. (line 82) 32249 * fabs: Other Builtins. (line 6) 32250 * fabsf: Other Builtins. (line 6) 32251 * fabsl: Other Builtins. (line 6) 32252 * fatal signal: Bug Criteria. (line 9) 32253 * fdim: Other Builtins. (line 6) 32254 * fdimf: Other Builtins. (line 6) 32255 * fdiml: Other Builtins. (line 6) 32256 * FDL, GNU Free Documentation License: GNU Free Documentation License. 32257 (line 6) 32258 * ffs: Other Builtins. (line 6) 32259 * file name suffix: Overall Options. (line 14) 32260 * file names: Link Options. (line 10) 32261 * flatten function attribute: Function Attributes. 32262 (line 91) 32263 * flexible array members: Zero Length. (line 6) 32264 * float as function value type: Incompatibilities. (line 141) 32265 * floating point precision <1>: Disappointments. (line 68) 32266 * floating point precision: Optimize Options. (line 1060) 32267 * floor: Other Builtins. (line 6) 32268 * floorf: Other Builtins. (line 6) 32269 * floorl: Other Builtins. (line 6) 32270 * fma: Other Builtins. (line 6) 32271 * fmaf: Other Builtins. (line 6) 32272 * fmal: Other Builtins. (line 6) 32273 * fmax: Other Builtins. (line 6) 32274 * fmaxf: Other Builtins. (line 6) 32275 * fmaxl: Other Builtins. (line 6) 32276 * fmin: Other Builtins. (line 6) 32277 * fminf: Other Builtins. (line 6) 32278 * fminl: Other Builtins. (line 6) 32279 * fmod: Other Builtins. (line 6) 32280 * fmodf: Other Builtins. (line 6) 32281 * fmodl: Other Builtins. (line 6) 32282 * force_align_arg_pointer attribute: Function Attributes. 32283 (line 636) 32284 * format function attribute: Function Attributes. 32285 (line 281) 32286 * format_arg function attribute: Function Attributes. 32287 (line 334) 32288 * Fortran: G++ and GCC. (line 6) 32289 * forwarding calls: Constructing Calls. (line 6) 32290 * fprintf: Other Builtins. (line 6) 32291 * fprintf_unlocked: Other Builtins. (line 6) 32292 * fputs: Other Builtins. (line 6) 32293 * fputs_unlocked: Other Builtins. (line 6) 32294 * freestanding environment: Standards. (line 6) 32295 * freestanding implementation: Standards. (line 6) 32296 * frexp: Other Builtins. (line 6) 32297 * frexpf: Other Builtins. (line 6) 32298 * frexpl: Other Builtins. (line 6) 32299 * FRV Options: FRV Options. (line 6) 32300 * fscanf: Other Builtins. (line 6) 32301 * fscanf, and constant strings: Incompatibilities. (line 17) 32302 * function addressability on the M32R/D: Function Attributes. 32303 (line 457) 32304 * function attributes: Function Attributes. 32305 (line 6) 32306 * function pointers, arithmetic: Pointer Arith. (line 6) 32307 * function prototype declarations: Function Prototypes. 32308 (line 6) 32309 * function without a prologue/epilogue code: Function Attributes. 32310 (line 485) 32311 * function, size of pointer to: Pointer Arith. (line 6) 32312 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 32313 (line 428) 32314 * functions in arbitrary sections: Function Attributes. 32315 (line 6) 32316 * functions that are passed arguments in registers on the 386: Function Attributes. 32317 (line 6) 32318 * functions that behave like malloc: Function Attributes. 32319 (line 6) 32320 * functions that do not pop the argument stack on the 386: Function Attributes. 32321 (line 6) 32322 * functions that do pop the argument stack on the 386: Function Attributes. 32323 (line 100) 32324 * functions that have no side effects: Function Attributes. 32325 (line 6) 32326 * functions that never return: Function Attributes. 32327 (line 6) 32328 * functions that pop the argument stack on the 386: Function Attributes. 32329 (line 6) 32330 * functions that return more than once: Function Attributes. 32331 (line 6) 32332 * functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 32333 (line 491) 32334 * functions which handle memory bank switching: Function Attributes. 32335 (line 256) 32336 * functions with non-null pointer arguments: Function Attributes. 32337 (line 6) 32338 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 32339 (line 6) 32340 * g in constraint: Simple Constraints. (line 108) 32341 * G in constraint: Simple Constraints. (line 86) 32342 * g++: Invoking G++. (line 13) 32343 * G++: G++ and GCC. (line 30) 32344 * gamma: Other Builtins. (line 6) 32345 * gammaf: Other Builtins. (line 6) 32346 * gammal: Other Builtins. (line 6) 32347 * GCC: G++ and GCC. (line 6) 32348 * GCC command options: Invoking GCC. (line 6) 32349 * GCC_EXEC_PREFIX: Environment Variables. 32350 (line 52) 32351 * gcc_struct: Type Attributes. (line 302) 32352 * gcc_struct attribute: Variable Attributes. 32353 (line 313) 32354 * gcov: Debugging Options. (line 238) 32355 * gettext: Other Builtins. (line 6) 32356 * global offset table: Code Gen Options. (line 163) 32357 * global register after longjmp: Global Reg Vars. (line 66) 32358 * global register variables: Global Reg Vars. (line 6) 32359 * GNAT: G++ and GCC. (line 30) 32360 * GNU C Compiler: G++ and GCC. (line 6) 32361 * GNU Compiler Collection: G++ and GCC. (line 6) 32362 * gnu_inline function attribute: Function Attributes. 32363 (line 51) 32364 * goto with computed label: Labels as Values. (line 6) 32365 * gp-relative references (MIPS): MIPS Options. (line 216) 32366 * gprof: Debugging Options. (line 205) 32367 * grouping options: Invoking GCC. (line 26) 32368 * H in constraint: Simple Constraints. (line 86) 32369 * hardware models and configurations, specifying: Submodel Options. 32370 (line 6) 32371 * hex floats: Hex Floats. (line 6) 32372 * hosted environment <1>: C Dialect Options. (line 183) 32373 * hosted environment: Standards. (line 6) 32374 * hosted implementation: Standards. (line 6) 32375 * HPPA Options: HPPA Options. (line 6) 32376 * hypot: Other Builtins. (line 6) 32377 * hypotf: Other Builtins. (line 6) 32378 * hypotl: Other Builtins. (line 6) 32379 * I in constraint: Simple Constraints. (line 69) 32380 * i in constraint: Simple Constraints. (line 58) 32381 * i386 Options: i386 and x86-64 Options. 32382 (line 6) 32383 * IA-64 Options: IA-64 Options. (line 6) 32384 * IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 32385 (line 6) 32386 * identifier names, dollar signs in: Dollar Signs. (line 6) 32387 * identifiers, names in assembler code: Asm Labels. (line 6) 32388 * ilogb: Other Builtins. (line 6) 32389 * ilogbf: Other Builtins. (line 6) 32390 * ilogbl: Other Builtins. (line 6) 32391 * imaxabs: Other Builtins. (line 6) 32392 * implementation-defined behavior, C language: C Implementation. 32393 (line 6) 32394 * implied #pragma implementation: C++ Interface. (line 46) 32395 * incompatibilities of GCC: Incompatibilities. (line 6) 32396 * increment operators: Bug Criteria. (line 17) 32397 * index: Other Builtins. (line 6) 32398 * indirect calls on ARM: Function Attributes. 32399 (line 418) 32400 * indirect calls on MIPS: Function Attributes. 32401 (line 440) 32402 * init_priority attribute: C++ Attributes. (line 9) 32403 * initializations in expressions: Compound Literals. (line 6) 32404 * initializers with labeled elements: Designated Inits. (line 6) 32405 * initializers, non-constant: Initializers. (line 6) 32406 * inline automatic for C++ member fns: Inline. (line 53) 32407 * inline functions: Inline. (line 6) 32408 * inline functions, omission of: Inline. (line 58) 32409 * inlining and C++ pragmas: C++ Interface. (line 66) 32410 * installation trouble: Trouble. (line 6) 32411 * integrating function code: Inline. (line 6) 32412 * Intel 386 Options: i386 and x86-64 Options. 32413 (line 6) 32414 * interface and implementation headers, C++: C++ Interface. (line 6) 32415 * intermediate C version, nonexistent: G++ and GCC. (line 35) 32416 * interrupt handler functions: Function Attributes. 32417 (line 384) 32418 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 32419 (line 406) 32420 * introduction: Top. (line 6) 32421 * invalid assembly code: Bug Criteria. (line 12) 32422 * invalid input: Bug Criteria. (line 42) 32423 * invoking g++: Invoking G++. (line 21) 32424 * isalnum: Other Builtins. (line 6) 32425 * isalpha: Other Builtins. (line 6) 32426 * isascii: Other Builtins. (line 6) 32427 * isblank: Other Builtins. (line 6) 32428 * iscntrl: Other Builtins. (line 6) 32429 * isdigit: Other Builtins. (line 6) 32430 * isgraph: Other Builtins. (line 6) 32431 * islower: Other Builtins. (line 6) 32432 * ISO 9899: Standards. (line 6) 32433 * ISO C: Standards. (line 6) 32434 * ISO C standard: Standards. (line 6) 32435 * ISO C90: Standards. (line 6) 32436 * ISO C94: Standards. (line 6) 32437 * ISO C95: Standards. (line 6) 32438 * ISO C99: Standards. (line 6) 32439 * ISO C9X: Standards. (line 6) 32440 * ISO support: C Dialect Options. (line 10) 32441 * ISO/IEC 9899: Standards. (line 6) 32442 * isprint: Other Builtins. (line 6) 32443 * ispunct: Other Builtins. (line 6) 32444 * isspace: Other Builtins. (line 6) 32445 * isupper: Other Builtins. (line 6) 32446 * iswalnum: Other Builtins. (line 6) 32447 * iswalpha: Other Builtins. (line 6) 32448 * iswblank: Other Builtins. (line 6) 32449 * iswcntrl: Other Builtins. (line 6) 32450 * iswdigit: Other Builtins. (line 6) 32451 * iswgraph: Other Builtins. (line 6) 32452 * iswlower: Other Builtins. (line 6) 32453 * iswprint: Other Builtins. (line 6) 32454 * iswpunct: Other Builtins. (line 6) 32455 * iswspace: Other Builtins. (line 6) 32456 * iswupper: Other Builtins. (line 6) 32457 * iswxdigit: Other Builtins. (line 6) 32458 * isxdigit: Other Builtins. (line 6) 32459 * j0: Other Builtins. (line 6) 32460 * j0f: Other Builtins. (line 6) 32461 * j0l: Other Builtins. (line 6) 32462 * j1: Other Builtins. (line 6) 32463 * j1f: Other Builtins. (line 6) 32464 * j1l: Other Builtins. (line 6) 32465 * Java: G++ and GCC. (line 6) 32466 * java_interface attribute: C++ Attributes. (line 29) 32467 * jn: Other Builtins. (line 6) 32468 * jnf: Other Builtins. (line 6) 32469 * jnl: Other Builtins. (line 6) 32470 * keywords, alternate: Alternate Keywords. (line 6) 32471 * known causes of trouble: Trouble. (line 6) 32472 * labeled elements in initializers: Designated Inits. (line 6) 32473 * labels as values: Labels as Values. (line 6) 32474 * labs: Other Builtins. (line 6) 32475 * LANG: Environment Variables. 32476 (line 21) 32477 * language dialect options: C Dialect Options. (line 6) 32478 * LC_ALL: Environment Variables. 32479 (line 21) 32480 * LC_CTYPE: Environment Variables. 32481 (line 21) 32482 * LC_MESSAGES: Environment Variables. 32483 (line 21) 32484 * ldexp: Other Builtins. (line 6) 32485 * ldexpf: Other Builtins. (line 6) 32486 * ldexpl: Other Builtins. (line 6) 32487 * length-zero arrays: Zero Length. (line 6) 32488 * lgamma: Other Builtins. (line 6) 32489 * lgammaf: Other Builtins. (line 6) 32490 * lgammal: Other Builtins. (line 6) 32491 * Libraries: Link Options. (line 24) 32492 * LIBRARY_PATH: Environment Variables. 32493 (line 91) 32494 * link options: Link Options. (line 6) 32495 * LL integer suffix: Long Long. (line 6) 32496 * llabs: Other Builtins. (line 6) 32497 * llrint: Other Builtins. (line 6) 32498 * llrintf: Other Builtins. (line 6) 32499 * llrintl: Other Builtins. (line 6) 32500 * llround: Other Builtins. (line 6) 32501 * llroundf: Other Builtins. (line 6) 32502 * llroundl: Other Builtins. (line 6) 32503 * load address instruction: Simple Constraints. (line 142) 32504 * local labels: Local Labels. (line 6) 32505 * local variables in macros: Typeof. (line 42) 32506 * local variables, specifying registers: Local Reg Vars. (line 6) 32507 * locale: Environment Variables. 32508 (line 21) 32509 * locale definition: Environment Variables. 32510 (line 100) 32511 * log: Other Builtins. (line 6) 32512 * log10: Other Builtins. (line 6) 32513 * log10f: Other Builtins. (line 6) 32514 * log10l: Other Builtins. (line 6) 32515 * log1p: Other Builtins. (line 6) 32516 * log1pf: Other Builtins. (line 6) 32517 * log1pl: Other Builtins. (line 6) 32518 * log2: Other Builtins. (line 6) 32519 * log2f: Other Builtins. (line 6) 32520 * log2l: Other Builtins. (line 6) 32521 * logb: Other Builtins. (line 6) 32522 * logbf: Other Builtins. (line 6) 32523 * logbl: Other Builtins. (line 6) 32524 * logf: Other Builtins. (line 6) 32525 * logl: Other Builtins. (line 6) 32526 * long long data types: Long Long. (line 6) 32527 * longjmp: Global Reg Vars. (line 66) 32528 * longjmp incompatibilities: Incompatibilities. (line 39) 32529 * longjmp warnings: Warning Options. (line 455) 32530 * lrint: Other Builtins. (line 6) 32531 * lrintf: Other Builtins. (line 6) 32532 * lrintl: Other Builtins. (line 6) 32533 * lround: Other Builtins. (line 6) 32534 * lroundf: Other Builtins. (line 6) 32535 * lroundl: Other Builtins. (line 6) 32536 * m in constraint: Simple Constraints. (line 17) 32537 * M32C options: M32C Options. (line 6) 32538 * M32R/D options: M32R/D Options. (line 6) 32539 * M680x0 options: M680x0 Options. (line 6) 32540 * M68hc1x options: M68hc1x Options. (line 6) 32541 * machine dependent options: Submodel Options. (line 6) 32542 * machine specific constraints: Machine Constraints. 32543 (line 6) 32544 * macro with variable arguments: Variadic Macros. (line 6) 32545 * macros containing asm: Extended Asm. (line 239) 32546 * macros, inline alternative: Inline. (line 6) 32547 * macros, local labels: Local Labels. (line 6) 32548 * macros, local variables in: Typeof. (line 42) 32549 * macros, statements in expressions: Statement Exprs. (line 6) 32550 * macros, types of arguments: Typeof. (line 6) 32551 * make: Preprocessor Options. 32552 (line 173) 32553 * malloc: Other Builtins. (line 6) 32554 * malloc attribute: Function Attributes. 32555 (line 447) 32556 * matching constraint: Simple Constraints. (line 127) 32557 * MCore options: MCore Options. (line 6) 32558 * member fns, automatically inline: Inline. (line 53) 32559 * memcmp: Other Builtins. (line 6) 32560 * memcpy: Other Builtins. (line 6) 32561 * memory references in constraints: Simple Constraints. (line 17) 32562 * mempcpy: Other Builtins. (line 6) 32563 * memset: Other Builtins. (line 6) 32564 * Mercury: G++ and GCC. (line 23) 32565 * message formatting: Language Independent Options. 32566 (line 6) 32567 * messages, warning: Warning Options. (line 6) 32568 * messages, warning and error: Warnings and Errors. 32569 (line 6) 32570 * middle-operands, omitted: Conditionals. (line 6) 32571 * MIPS options: MIPS Options. (line 6) 32572 * misunderstandings in C++: C++ Misunderstandings. 32573 (line 6) 32574 * mixed declarations and code: Mixed Declarations. (line 6) 32575 * mktemp, and constant strings: Incompatibilities. (line 13) 32576 * MMIX Options: MMIX Options. (line 6) 32577 * MN10300 options: MN10300 Options. (line 6) 32578 * mode attribute: Variable Attributes. 32579 (line 118) 32580 * modf: Other Builtins. (line 6) 32581 * modff: Other Builtins. (line 6) 32582 * modfl: Other Builtins. (line 6) 32583 * modifiers in constraints: Modifiers. (line 6) 32584 * ms_struct: Type Attributes. (line 302) 32585 * ms_struct attribute: Variable Attributes. 32586 (line 313) 32587 * MT options: MT Options. (line 6) 32588 * mudflap: Optimize Options. (line 333) 32589 * multiple alternative constraints: Multi-Alternative. (line 6) 32590 * multiprecision arithmetic: Long Long. (line 6) 32591 * n in constraint: Simple Constraints. (line 63) 32592 * names used in assembler code: Asm Labels. (line 6) 32593 * naming convention, implementation headers: C++ Interface. (line 46) 32594 * nearbyint: Other Builtins. (line 6) 32595 * nearbyintf: Other Builtins. (line 6) 32596 * nearbyintl: Other Builtins. (line 6) 32597 * nested functions: Nested Functions. (line 6) 32598 * newlines (escaped): Escaped Newlines. (line 6) 32599 * nextafter: Other Builtins. (line 6) 32600 * nextafterf: Other Builtins. (line 6) 32601 * nextafterl: Other Builtins. (line 6) 32602 * nexttoward: Other Builtins. (line 6) 32603 * nexttowardf: Other Builtins. (line 6) 32604 * nexttowardl: Other Builtins. (line 6) 32605 * NFC: Warning Options. (line 962) 32606 * NFKC: Warning Options. (line 962) 32607 * NMI handler functions on the Blackfin processor: Function Attributes. 32608 (line 502) 32609 * no_instrument_function function attribute: Function Attributes. 32610 (line 508) 32611 * nocommon attribute: Variable Attributes. 32612 (line 92) 32613 * noinline function attribute: Function Attributes. 32614 (line 513) 32615 * non-constant initializers: Initializers. (line 6) 32616 * non-static inline function: Inline. (line 70) 32617 * nonnull function attribute: Function Attributes. 32618 (line 517) 32619 * noreturn function attribute: Function Attributes. 32620 (line 540) 32621 * nothrow function attribute: Function Attributes. 32622 (line 582) 32623 * o in constraint: Simple Constraints. (line 21) 32624 * OBJC_INCLUDE_PATH: Environment Variables. 32625 (line 126) 32626 * Objective-C <1>: Standards. (line 110) 32627 * Objective-C: G++ and GCC. (line 6) 32628 * Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options. 32629 (line 6) 32630 * Objective-C++ <1>: Standards. (line 110) 32631 * Objective-C++: G++ and GCC. (line 6) 32632 * offsettable address: Simple Constraints. (line 21) 32633 * old-style function definitions: Function Prototypes. 32634 (line 6) 32635 * omitted middle-operands: Conditionals. (line 6) 32636 * open coding: Inline. (line 6) 32637 * openmp parallel: C Dialect Options. (line 200) 32638 * operand constraints, asm: Constraints. (line 6) 32639 * optimize options: Optimize Options. (line 6) 32640 * options to control diagnostics formatting: Language Independent Options. 32641 (line 6) 32642 * options to control warnings: Warning Options. (line 6) 32643 * options, C++: C++ Dialect Options. 32644 (line 6) 32645 * options, code generation: Code Gen Options. (line 6) 32646 * options, debugging: Debugging Options. (line 6) 32647 * options, dialect: C Dialect Options. (line 6) 32648 * options, directory search: Directory Options. (line 6) 32649 * options, GCC command: Invoking GCC. (line 6) 32650 * options, grouping: Invoking GCC. (line 26) 32651 * options, linking: Link Options. (line 6) 32652 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 32653 (line 6) 32654 * options, optimization: Optimize Options. (line 6) 32655 * options, order: Invoking GCC. (line 30) 32656 * options, preprocessor: Preprocessor Options. 32657 (line 6) 32658 * order of evaluation, side effects: Non-bugs. (line 196) 32659 * order of options: Invoking GCC. (line 30) 32660 * other register constraints: Simple Constraints. (line 151) 32661 * output file option: Overall Options. (line 174) 32662 * overloaded virtual fn, warning: C++ Dialect Options. 32663 (line 406) 32664 * p in constraint: Simple Constraints. (line 142) 32665 * packed attribute: Variable Attributes. 32666 (line 129) 32667 * parameter forward declaration: Variable Length. (line 60) 32668 * parameters, aliased: Code Gen Options. (line 360) 32669 * Pascal: G++ and GCC. (line 23) 32670 * PDP-11 Options: PDP-11 Options. (line 6) 32671 * PIC: Code Gen Options. (line 163) 32672 * pmf: Bound member functions. 32673 (line 6) 32674 * pointer arguments: Function Attributes. 32675 (line 111) 32676 * pointer to member function: Bound member functions. 32677 (line 6) 32678 * portions of temporary objects, pointers to: Temporaries. (line 6) 32679 * pow: Other Builtins. (line 6) 32680 * pow10: Other Builtins. (line 6) 32681 * pow10f: Other Builtins. (line 6) 32682 * pow10l: Other Builtins. (line 6) 32683 * PowerPC options: PowerPC Options. (line 6) 32684 * powf: Other Builtins. (line 6) 32685 * powl: Other Builtins. (line 6) 32686 * pragma, align: Solaris Pragmas. (line 11) 32687 * pragma, diagnostic: Diagnostic Pragmas. (line 14) 32688 * pragma, extern_prefix: Symbol-Renaming Pragmas. 32689 (line 19) 32690 * pragma, fini: Solaris Pragmas. (line 19) 32691 * pragma, init: Solaris Pragmas. (line 24) 32692 * pragma, long_calls: ARM Pragmas. (line 11) 32693 * pragma, long_calls_off: ARM Pragmas. (line 17) 32694 * pragma, longcall: RS/6000 and PowerPC Pragmas. 32695 (line 14) 32696 * pragma, mark: Darwin Pragmas. (line 11) 32697 * pragma, memregs: M32C Pragmas. (line 7) 32698 * pragma, no_long_calls: ARM Pragmas. (line 14) 32699 * pragma, options align: Darwin Pragmas. (line 14) 32700 * pragma, reason for not using: Function Attributes. 32701 (line 916) 32702 * pragma, redefine_extname: Symbol-Renaming Pragmas. 32703 (line 14) 32704 * pragma, segment: Darwin Pragmas. (line 21) 32705 * pragma, unused: Darwin Pragmas. (line 24) 32706 * pragma, visibility: Visibility Pragmas. (line 8) 32707 * pragma, weak: Weak Pragmas. (line 10) 32708 * pragmas: Pragmas. (line 6) 32709 * pragmas in C++, effect on inlining: C++ Interface. (line 66) 32710 * pragmas, interface and implementation: C++ Interface. (line 6) 32711 * pragmas, warning of unknown: Warning Options. (line 472) 32712 * precompiled headers: Precompiled Headers. 32713 (line 6) 32714 * preprocessing numbers: Incompatibilities. (line 173) 32715 * preprocessing tokens: Incompatibilities. (line 173) 32716 * preprocessor options: Preprocessor Options. 32717 (line 6) 32718 * printf: Other Builtins. (line 6) 32719 * printf_unlocked: Other Builtins. (line 6) 32720 * prof: Debugging Options. (line 199) 32721 * promotion of formal parameters: Function Prototypes. 32722 (line 6) 32723 * pure function attribute: Function Attributes. 32724 (line 590) 32725 * push address instruction: Simple Constraints. (line 142) 32726 * putchar: Other Builtins. (line 6) 32727 * puts: Other Builtins. (line 6) 32728 * qsort, and global register variables: Global Reg Vars. (line 42) 32729 * question mark: Multi-Alternative. (line 27) 32730 * r in constraint: Simple Constraints. (line 54) 32731 * ranges in case statements: Case Ranges. (line 6) 32732 * read-only strings: Incompatibilities. (line 9) 32733 * register variable after longjmp: Global Reg Vars. (line 66) 32734 * registers: Extended Asm. (line 6) 32735 * registers for local variables: Local Reg Vars. (line 6) 32736 * registers in constraints: Simple Constraints. (line 54) 32737 * registers, global allocation: Explicit Reg Vars. (line 6) 32738 * registers, global variables in: Global Reg Vars. (line 6) 32739 * regparm attribute: Function Attributes. 32740 (line 612) 32741 * relocation truncated to fit (MIPS): MIPS Options. (line 135) 32742 * remainder: Other Builtins. (line 6) 32743 * remainderf: Other Builtins. (line 6) 32744 * remainderl: Other Builtins. (line 6) 32745 * remquo: Other Builtins. (line 6) 32746 * remquof: Other Builtins. (line 6) 32747 * remquol: Other Builtins. (line 6) 32748 * reordering, warning: C++ Dialect Options. 32749 (line 327) 32750 * reporting bugs: Bugs. (line 6) 32751 * rest argument (in macro): Variadic Macros. (line 6) 32752 * restricted pointers: Restricted Pointers. 32753 (line 6) 32754 * restricted references: Restricted Pointers. 32755 (line 6) 32756 * restricted this pointer: Restricted Pointers. 32757 (line 6) 32758 * returns_twice attribute: Function Attributes. 32759 (line 649) 32760 * rindex: Other Builtins. (line 6) 32761 * rint: Other Builtins. (line 6) 32762 * rintf: Other Builtins. (line 6) 32763 * rintl: Other Builtins. (line 6) 32764 * round: Other Builtins. (line 6) 32765 * roundf: Other Builtins. (line 6) 32766 * roundl: Other Builtins. (line 6) 32767 * RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 32768 (line 6) 32769 * RTTI: Vague Linkage. (line 43) 32770 * run-time options: Code Gen Options. (line 6) 32771 * s in constraint: Simple Constraints. (line 90) 32772 * S/390 and zSeries Options: S/390 and zSeries Options. 32773 (line 6) 32774 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 32775 (line 658) 32776 * scalb: Other Builtins. (line 6) 32777 * scalbf: Other Builtins. (line 6) 32778 * scalbl: Other Builtins. (line 6) 32779 * scalbln: Other Builtins. (line 6) 32780 * scalblnf: Other Builtins. (line 6) 32781 * scalbn: Other Builtins. (line 6) 32782 * scalbnf: Other Builtins. (line 6) 32783 * scanf, and constant strings: Incompatibilities. (line 17) 32784 * scanfnl: Other Builtins. (line 6) 32785 * scope of a variable length array: Variable Length. (line 23) 32786 * scope of declaration: Disappointments. (line 21) 32787 * scope of external declarations: Incompatibilities. (line 80) 32788 * Score Options: Score Options. (line 6) 32789 * search path: Directory Options. (line 6) 32790 * section function attribute: Function Attributes. 32791 (line 663) 32792 * section variable attribute: Variable Attributes. 32793 (line 144) 32794 * sentinel function attribute: Function Attributes. 32795 (line 679) 32796 * setjmp: Global Reg Vars. (line 66) 32797 * setjmp incompatibilities: Incompatibilities. (line 39) 32798 * shared strings: Incompatibilities. (line 9) 32799 * shared variable attribute: Variable Attributes. 32800 (line 189) 32801 * side effect in ?:: Conditionals. (line 20) 32802 * side effects, macro argument: Statement Exprs. (line 35) 32803 * side effects, order of evaluation: Non-bugs. (line 196) 32804 * signal handler functions on the AVR processors: Function Attributes. 32805 (line 710) 32806 * signbit: Other Builtins. (line 6) 32807 * signbitf: Other Builtins. (line 6) 32808 * signbitl: Other Builtins. (line 6) 32809 * signed and unsigned values, comparison warning: Warning Options. 32810 (line 858) 32811 * significand: Other Builtins. (line 6) 32812 * significandf: Other Builtins. (line 6) 32813 * significandl: Other Builtins. (line 6) 32814 * simple constraints: Simple Constraints. (line 6) 32815 * sin: Other Builtins. (line 6) 32816 * sincos: Other Builtins. (line 6) 32817 * sincosf: Other Builtins. (line 6) 32818 * sincosl: Other Builtins. (line 6) 32819 * sinf: Other Builtins. (line 6) 32820 * sinh: Other Builtins. (line 6) 32821 * sinhf: Other Builtins. (line 6) 32822 * sinhl: Other Builtins. (line 6) 32823 * sinl: Other Builtins. (line 6) 32824 * sizeof: Typeof. (line 6) 32825 * smaller data references: M32R/D Options. (line 57) 32826 * smaller data references (MIPS): MIPS Options. (line 216) 32827 * smaller data references (PowerPC): RS/6000 and PowerPC Options. 32828 (line 607) 32829 * snprintf: Other Builtins. (line 6) 32830 * SPARC options: SPARC Options. (line 6) 32831 * Spec Files: Spec Files. (line 6) 32832 * specified registers: Explicit Reg Vars. (line 6) 32833 * specifying compiler version and target machine: Target Options. 32834 (line 6) 32835 * specifying hardware config: Submodel Options. (line 6) 32836 * specifying machine version: Target Options. (line 6) 32837 * specifying registers for local variables: Local Reg Vars. (line 6) 32838 * speed of compilation: Precompiled Headers. 32839 (line 6) 32840 * sprintf: Other Builtins. (line 6) 32841 * sqrt: Other Builtins. (line 6) 32842 * sqrtf: Other Builtins. (line 6) 32843 * sqrtl: Other Builtins. (line 6) 32844 * sscanf: Other Builtins. (line 6) 32845 * sscanf, and constant strings: Incompatibilities. (line 17) 32846 * sseregparm attribute: Function Attributes. 32847 (line 629) 32848 * statements inside expressions: Statement Exprs. (line 6) 32849 * static data in C++, declaring and defining: Static Definitions. 32850 (line 6) 32851 * stpcpy: Other Builtins. (line 6) 32852 * stpncpy: Other Builtins. (line 6) 32853 * strcasecmp: Other Builtins. (line 6) 32854 * strcat: Other Builtins. (line 6) 32855 * strchr: Other Builtins. (line 6) 32856 * strcmp: Other Builtins. (line 6) 32857 * strcpy: Other Builtins. (line 6) 32858 * strcspn: Other Builtins. (line 6) 32859 * strdup: Other Builtins. (line 6) 32860 * strfmon: Other Builtins. (line 6) 32861 * strftime: Other Builtins. (line 6) 32862 * string constants: Incompatibilities. (line 9) 32863 * strlen: Other Builtins. (line 6) 32864 * strncasecmp: Other Builtins. (line 6) 32865 * strncat: Other Builtins. (line 6) 32866 * strncmp: Other Builtins. (line 6) 32867 * strncpy: Other Builtins. (line 6) 32868 * strndup: Other Builtins. (line 6) 32869 * strpbrk: Other Builtins. (line 6) 32870 * strrchr: Other Builtins. (line 6) 32871 * strspn: Other Builtins. (line 6) 32872 * strstr: Other Builtins. (line 6) 32873 * struct: Unnamed Fields. (line 6) 32874 * structures: Incompatibilities. (line 146) 32875 * structures, constructor expression: Compound Literals. (line 6) 32876 * submodel options: Submodel Options. (line 6) 32877 * subscripting: Subscripting. (line 6) 32878 * subscripting and function values: Subscripting. (line 6) 32879 * suffixes for C++ source: Invoking G++. (line 6) 32880 * SUNPRO_DEPENDENCIES: Environment Variables. 32881 (line 166) 32882 * suppressing warnings: Warning Options. (line 6) 32883 * surprises in C++: C++ Misunderstandings. 32884 (line 6) 32885 * syntax checking: Warning Options. (line 22) 32886 * system headers, warnings from: Warning Options. (line 672) 32887 * tan: Other Builtins. (line 6) 32888 * tanf: Other Builtins. (line 6) 32889 * tanh: Other Builtins. (line 6) 32890 * tanhf: Other Builtins. (line 6) 32891 * tanhl: Other Builtins. (line 6) 32892 * tanl: Other Builtins. (line 6) 32893 * target machine, specifying: Target Options. (line 6) 32894 * target options: Target Options. (line 6) 32895 * TC1: Standards. (line 6) 32896 * TC2: Standards. (line 6) 32897 * Technical Corrigenda: Standards. (line 6) 32898 * Technical Corrigendum 1: Standards. (line 6) 32899 * Technical Corrigendum 2: Standards. (line 6) 32900 * template instantiation: Template Instantiation. 32901 (line 6) 32902 * temporaries, lifetime of: Temporaries. (line 6) 32903 * tgamma: Other Builtins. (line 6) 32904 * tgammaf: Other Builtins. (line 6) 32905 * tgammal: Other Builtins. (line 6) 32906 * Thread-Local Storage: Thread-Local. (line 6) 32907 * thunks: Nested Functions. (line 6) 32908 * tiny data section on the H8/300H and H8S: Function Attributes. 32909 (line 732) 32910 * TLS: Thread-Local. (line 6) 32911 * tls_model attribute: Variable Attributes. 32912 (line 213) 32913 * TMPDIR: Environment Variables. 32914 (line 45) 32915 * TMS320C3x/C4x Options: TMS320C3x/C4x Options. 32916 (line 6) 32917 * toascii: Other Builtins. (line 6) 32918 * tolower: Other Builtins. (line 6) 32919 * toupper: Other Builtins. (line 6) 32920 * towlower: Other Builtins. (line 6) 32921 * towupper: Other Builtins. (line 6) 32922 * traditional C language: C Dialect Options. (line 227) 32923 * treelang <1>: Standards. (line 123) 32924 * treelang: G++ and GCC. (line 6) 32925 * trunc: Other Builtins. (line 6) 32926 * truncf: Other Builtins. (line 6) 32927 * truncl: Other Builtins. (line 6) 32928 * two-stage name lookup: Name lookup. (line 6) 32929 * type alignment: Alignment. (line 6) 32930 * type attributes: Type Attributes. (line 6) 32931 * type_info: Vague Linkage. (line 43) 32932 * typedef names as function parameters: Incompatibilities. (line 97) 32933 * typeof: Typeof. (line 6) 32934 * ULL integer suffix: Long Long. (line 6) 32935 * Ultrix calling convention: Interoperation. (line 150) 32936 * undefined behavior: Bug Criteria. (line 17) 32937 * undefined function value: Bug Criteria. (line 17) 32938 * underscores in variables in macros: Typeof. (line 42) 32939 * union: Unnamed Fields. (line 6) 32940 * union, casting to a: Cast to Union. (line 6) 32941 * unions: Incompatibilities. (line 146) 32942 * unknown pragmas, warning: Warning Options. (line 472) 32943 * unresolved references and -nodefaultlibs: Link Options. (line 79) 32944 * unresolved references and -nostdlib: Link Options. (line 79) 32945 * unused attribute.: Function Attributes. 32946 (line 744) 32947 * used attribute.: Function Attributes. 32948 (line 749) 32949 * User stack pointer in interrupts on the Blackfin: Function Attributes. 32950 (line 413) 32951 * V in constraint: Simple Constraints. (line 41) 32952 * V850 Options: V850 Options. (line 6) 32953 * vague linkage: Vague Linkage. (line 6) 32954 * value after longjmp: Global Reg Vars. (line 66) 32955 * variable addressability on the IA-64: Function Attributes. 32956 (line 457) 32957 * variable addressability on the M32R/D: Variable Attributes. 32958 (line 294) 32959 * variable alignment: Alignment. (line 6) 32960 * variable attributes: Variable Attributes. 32961 (line 6) 32962 * variable number of arguments: Variadic Macros. (line 6) 32963 * variable-length array scope: Variable Length. (line 23) 32964 * variable-length arrays: Variable Length. (line 6) 32965 * variables in specified registers: Explicit Reg Vars. (line 6) 32966 * variables, local, in macros: Typeof. (line 42) 32967 * variadic macros: Variadic Macros. (line 6) 32968 * VAX calling convention: Interoperation. (line 150) 32969 * VAX options: VAX Options. (line 6) 32970 * vfprintf: Other Builtins. (line 6) 32971 * vfscanf: Other Builtins. (line 6) 32972 * visibility attribute: Function Attributes. 32973 (line 755) 32974 * VLAs: Variable Length. (line 6) 32975 * void pointers, arithmetic: Pointer Arith. (line 6) 32976 * void, size of pointer to: Pointer Arith. (line 6) 32977 * volatile access: Volatiles. (line 6) 32978 * volatile applied to function: Function Attributes. 32979 (line 6) 32980 * volatile read: Volatiles. (line 6) 32981 * volatile write: Volatiles. (line 6) 32982 * vprintf: Other Builtins. (line 6) 32983 * vscanf: Other Builtins. (line 6) 32984 * vsnprintf: Other Builtins. (line 6) 32985 * vsprintf: Other Builtins. (line 6) 32986 * vsscanf: Other Builtins. (line 6) 32987 * vtable: Vague Linkage. (line 28) 32988 * warn_unused_result attribute: Function Attributes. 32989 (line 849) 32990 * warning for comparison of signed and unsigned values: Warning Options. 32991 (line 858) 32992 * warning for overloaded virtual fn: C++ Dialect Options. 32993 (line 406) 32994 * warning for reordering of member initializers: C++ Dialect Options. 32995 (line 327) 32996 * warning for unknown pragmas: Warning Options. (line 472) 32997 * warning messages: Warning Options. (line 6) 32998 * warnings from system headers: Warning Options. (line 672) 32999 * warnings vs errors: Warnings and Errors. 33000 (line 6) 33001 * weak attribute: Function Attributes. 33002 (line 866) 33003 * weakref attribute: Function Attributes. 33004 (line 875) 33005 * whitespace: Incompatibilities. (line 112) 33006 * X in constraint: Simple Constraints. (line 112) 33007 * X3.159-1989: Standards. (line 6) 33008 * x86-64 options: x86-64 Options. (line 6) 33009 * x86-64 Options: i386 and x86-64 Options. 33010 (line 6) 33011 * Xstormy16 Options: Xstormy16 Options. (line 6) 33012 * Xtensa Options: Xtensa Options. (line 6) 33013 * y0: Other Builtins. (line 6) 33014 * y0f: Other Builtins. (line 6) 33015 * y0l: Other Builtins. (line 6) 33016 * y1: Other Builtins. (line 6) 33017 * y1f: Other Builtins. (line 6) 33018 * y1l: Other Builtins. (line 6) 33019 * yn: Other Builtins. (line 6) 33020 * ynf: Other Builtins. (line 6) 33021 * ynl: Other Builtins. (line 6) 33022 * zero-length arrays: Zero Length. (line 6) 33023 * zero-size structures: Empty Structures. (line 6) 33024 * zSeries options: zSeries Options. (line 6) 33025 33026 33027 33028 Tag Table: 33029 Node: Top2086 33030 Node: G++ and GCC3768 33031 Node: Standards5833 33032 Node: Invoking GCC12961 33033 Node: Option Summary16722 33034 Node: Overall Options45581 33035 Node: Invoking G++54807 33036 Node: C Dialect Options56286 33037 Node: C++ Dialect Options68699 33038 Node: Objective-C and Objective-C++ Dialect Options87749 33039 Node: Language Independent Options99345 33040 Node: Warning Options101427 33041 Node: Debugging Options154293 33042 Node: Optimize Options189449 33043 Node: Preprocessor Options269723 33044 Ref: Wtrigraphs273687 33045 Ref: dashMF278444 33046 Ref: fdollars-in-identifiers288299 33047 Node: Assembler Options296355 33048 Node: Link Options297060 33049 Ref: Link Options-Footnote-1305628 33050 Node: Directory Options305962 33051 Node: Spec Files312024 33052 Node: Target Options331330 33053 Node: Submodel Options332754 33054 Node: ARC Options334384 33055 Node: ARM Options335574 33056 Node: AVR Options347185 33057 Node: Blackfin Options349318 33058 Node: CRIS Options352086 33059 Node: CRX Options356305 33060 Node: Darwin Options356730 33061 Node: DEC Alpha Options363683 33062 Node: DEC Alpha/VMS Options375160 33063 Node: FRV Options375545 33064 Node: GNU/Linux Options382215 33065 Node: H8/300 Options382673 33066 Node: HPPA Options383740 33067 Node: i386 and x86-64 Options393333 33068 Node: IA-64 Options414778 33069 Node: M32C Options422095 33070 Node: M32R/D Options423386 33071 Node: M680x0 Options426973 33072 Node: M68hc1x Options434350 33073 Node: MCore Options435918 33074 Node: MIPS Options436939 33075 Node: MMIX Options452022 33076 Node: MN10300 Options454504 33077 Node: MT Options455922 33078 Node: PDP-11 Options456836 33079 Node: PowerPC Options458670 33080 Node: RS/6000 and PowerPC Options458904 33081 Node: S/390 and zSeries Options487573 33082 Node: Score Options494888 33083 Node: SH Options495716 33084 Node: SPARC Options504940 33085 Node: System V Options515783 33086 Node: TMS320C3x/C4x Options516617 33087 Node: V850 Options522142 33088 Node: VAX Options525287 33089 Node: x86-64 Options525834 33090 Node: Xstormy16 Options526048 33091 Node: Xtensa Options526337 33092 Node: zSeries Options530177 33093 Node: Code Gen Options530373 33094 Node: Environment Variables552430 33095 Node: Precompiled Headers560102 33096 Node: Running Protoize566339 33097 Node: C Implementation572676 33098 Node: Translation implementation574339 33099 Node: Environment implementation574913 33100 Node: Identifiers implementation575463 33101 Node: Characters implementation576517 33102 Node: Integers implementation579323 33103 Node: Floating point implementation581148 33104 Node: Arrays and pointers implementation584077 33105 Ref: Arrays and pointers implementation-Footnote-1585512 33106 Node: Hints implementation585636 33107 Node: Structures unions enumerations and bit-fields implementation587102 33108 Node: Qualifiers implementation589065 33109 Node: Declarators implementation590837 33110 Node: Statements implementation591179 33111 Node: Preprocessing directives implementation591506 33112 Node: Library functions implementation593611 33113 Node: Architecture implementation594251 33114 Node: Locale-specific behavior implementation594954 33115 Node: C Extensions595259 33116 Node: Statement Exprs599657 33117 Node: Local Labels604170 33118 Node: Labels as Values607149 33119 Ref: Labels as Values-Footnote-1609203 33120 Node: Nested Functions609386 33121 Node: Constructing Calls613280 33122 Node: Typeof615616 33123 Node: Conditionals618782 33124 Node: Long Long619673 33125 Node: Complex621174 33126 Node: Decimal Float623743 33127 Node: Hex Floats625424 33128 Node: Zero Length626465 33129 Node: Empty Structures629742 33130 Node: Variable Length630158 33131 Node: Variadic Macros632925 33132 Node: Escaped Newlines635307 33133 Node: Subscripting636146 33134 Node: Pointer Arith636869 33135 Node: Initializers637437 33136 Node: Compound Literals637933 33137 Node: Designated Inits640108 33138 Node: Case Ranges643763 33139 Node: Cast to Union644446 33140 Node: Mixed Declarations645542 33141 Node: Function Attributes646048 33142 Node: Attribute Syntax689893 33143 Node: Function Prototypes700764 33144 Node: C++ Comments702545 33145 Node: Dollar Signs703064 33146 Node: Character Escapes703529 33147 Node: Alignment703823 33148 Node: Variable Attributes705140 33149 Ref: i386 Variable Attributes718163 33150 Node: Type Attributes723660 33151 Ref: i386 Type Attributes736962 33152 Ref: PowerPC Type Attributes737806 33153 Node: Inline738659 33154 Node: Extended Asm743991 33155 Ref: Example of asm with clobbered asm reg750077 33156 Node: Constraints764173 33157 Node: Simple Constraints765023 33158 Node: Multi-Alternative771550 33159 Node: Modifiers773267 33160 Node: Machine Constraints776161 33161 Node: Asm Labels803408 33162 Node: Explicit Reg Vars805084 33163 Node: Global Reg Vars806692 33164 Node: Local Reg Vars811242 33165 Node: Alternate Keywords813683 33166 Node: Incomplete Enums815111 33167 Node: Function Names815868 33168 Node: Return Address818058 33169 Node: Vector Extensions820855 33170 Node: Offsetof824357 33171 Node: Atomic Builtins825143 33172 Node: Object Size Checking830228 33173 Node: Other Builtins835585 33174 Node: Target Builtins857673 33175 Node: Alpha Built-in Functions858406 33176 Node: ARM Built-in Functions861398 33177 Node: Blackfin Built-in Functions868105 33178 Node: FR-V Built-in Functions868722 33179 Node: Argument Types869581 33180 Node: Directly-mapped Integer Functions871337 33181 Node: Directly-mapped Media Functions872419 33182 Node: Raw read/write Functions879451 33183 Node: Other Built-in Functions880363 33184 Node: X86 Built-in Functions881552 33185 Node: MIPS DSP Built-in Functions899675 33186 Node: MIPS Paired-Single Support908100 33187 Node: Paired-Single Arithmetic909710 33188 Node: Paired-Single Built-in Functions910650 33189 Node: MIPS-3D Built-in Functions913314 33190 Node: PowerPC AltiVec Built-in Functions918683 33191 Node: SPARC VIS Built-in Functions1019987 33192 Node: Target Format Checks1021646 33193 Node: Solaris Format Checks1022053 33194 Node: Pragmas1022450 33195 Node: ARM Pragmas1023080 33196 Node: M32C Pragmas1023683 33197 Node: RS/6000 and PowerPC Pragmas1024259 33198 Node: Darwin Pragmas1025001 33199 Node: Solaris Pragmas1026068 33200 Node: Symbol-Renaming Pragmas1027229 33201 Node: Structure-Packing Pragmas1029851 33202 Node: Weak Pragmas1031482 33203 Node: Diagnostic Pragmas1032284 33204 Node: Visibility Pragmas1034277 33205 Node: Unnamed Fields1034998 33206 Node: Thread-Local1036508 33207 Node: C99 Thread-Local Edits1038592 33208 Node: C++98 Thread-Local Edits1040604 33209 Node: C++ Extensions1044049 33210 Node: Volatiles1045625 33211 Node: Restricted Pointers1048301 33212 Node: Vague Linkage1049895 33213 Node: C++ Interface1053551 33214 Ref: C++ Interface-Footnote-11057848 33215 Node: Template Instantiation1057985 33216 Node: Bound member functions1064997 33217 Node: C++ Attributes1066540 33218 Node: Namespace Association1068198 33219 Node: Java Exceptions1069616 33220 Node: Deprecated Features1071021 33221 Node: Backwards Compatibility1073996 33222 Node: Objective-C1075351 33223 Node: Executing code before main1075932 33224 Node: What you can and what you cannot do in +load1078538 33225 Node: Type encoding1080705 33226 Node: Garbage Collection1084092 33227 Node: Constant string objects1086716 33228 Node: compatibility_alias1089224 33229 Node: Compatibility1090102 33230 Node: Gcov1096669 33231 Node: Gcov Intro1097193 33232 Node: Invoking Gcov1099909 33233 Node: Gcov and Optimization1111769 33234 Node: Gcov Data Files1114422 33235 Node: Cross-profiling1115560 33236 Node: Trouble1117386 33237 Node: Actual Bugs1118926 33238 Node: Cross-Compiler Problems1119666 33239 Node: Interoperation1120080 33240 Node: Incompatibilities1127678 33241 Node: Fixed Headers1135828 33242 Node: Standard Libraries1137491 33243 Node: Disappointments1138863 33244 Node: C++ Misunderstandings1143221 33245 Node: Static Definitions1144040 33246 Node: Name lookup1145093 33247 Ref: Name lookup-Footnote-11149871 33248 Node: Temporaries1150058 33249 Node: Copy Assignment1152034 33250 Node: Protoize Caveats1153841 33251 Node: Non-bugs1157803 33252 Node: Warnings and Errors1168307 33253 Node: Bugs1170071 33254 Node: Bug Criteria1170635 33255 Node: Bug Reporting1172845 33256 Node: Service1173237 33257 Node: Contributing1174056 33258 Node: Funding1174796 33259 Node: GNU Project1177285 33260 Node: Copying1177931 33261 Node: GNU Free Documentation License1197108 33262 Node: Contributors1219514 33263 Node: Option Index1255370 33264 Node: Keyword Index1391814 33265 33266 End Tag Table 33267