|
|
1.1.1.7 root 1: This is Info file gcc.info, produced by Makeinfo-1.55 from the input
1.1 root 2: file gcc.texi.
3:
4: This file documents the use and the internals of the GNU compiler.
5:
1.1.1.8 ! root 6: Published by the Free Software Foundation 59 Temple Place - Suite 330
! 7: Boston, MA 02111-1307 USA
1.1.1.5 root 8:
1.1.1.8 ! root 9: Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software
! 10: Foundation, Inc.
1.1 root 11:
1.1.1.3 root 12: Permission is granted to make and distribute verbatim copies of this
13: manual provided the copyright notice and this permission notice are
14: preserved on all copies.
1.1 root 15:
16: Permission is granted to copy and distribute modified versions of
17: this manual under the conditions for verbatim copying, provided also
1.1.1.7 root 18: that the sections entitled "GNU General Public License," "Funding for
19: Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
20: included exactly as in the original, and provided that the entire
21: resulting derived work is distributed under the terms of a permission
22: notice identical to this one.
1.1 root 23:
24: Permission is granted to copy and distribute translations of this
25: manual into another language, under the above conditions for modified
1.1.1.3 root 26: versions, except that the sections entitled "GNU General Public
1.1.1.7 root 27: License," "Funding for Free Software," and "Protect Your Freedom--Fight
28: `Look And Feel'", and this permission notice, may be included in
29: translations approved by the Free Software Foundation instead of in the
30: original English.
31:
32:
1.1.1.8 ! root 33: File: gcc.info, Node: Directory Options, Next: Target Options, Prev: Link Options, Up: Invoking GCC
! 34:
! 35: Options for Directory Search
! 36: ============================
! 37:
! 38: These options specify directories to search for header files, for
! 39: libraries and for parts of the compiler:
! 40:
! 41: `-IDIR'
! 42: Add the directory DIRECTORY to the head of the list of directories
! 43: to be searched for header files. This can be used to override a
! 44: system header file, substituting your own version, since these
! 45: directories are searched before the system header file
! 46: directories. If you use more than one `-I' option, the
! 47: directories are scanned in left-to-right order; the standard
! 48: system directories come after.
! 49:
! 50: `-I-'
! 51: Any directories you specify with `-I' options before the `-I-'
! 52: option are searched only for the case of `#include "FILE"'; they
! 53: are not searched for `#include <FILE>'.
! 54:
! 55: If additional directories are specified with `-I' options after
! 56: the `-I-', these directories are searched for all `#include'
! 57: directives. (Ordinarily *all* `-I' directories are used this way.)
! 58:
! 59: In addition, the `-I-' option inhibits the use of the current
! 60: directory (where the current input file came from) as the first
! 61: search directory for `#include "FILE"'. There is no way to
! 62: override this effect of `-I-'. With `-I.' you can specify
! 63: searching the directory which was current when the compiler was
! 64: invoked. That is not exactly the same as what the preprocessor
! 65: does by default, but it is often satisfactory.
! 66:
! 67: `-I-' does not inhibit the use of the standard system directories
! 68: for header files. Thus, `-I-' and `-nostdinc' are independent.
! 69:
! 70: `-LDIR'
! 71: Add directory DIR to the list of directories to be searched for
! 72: `-l'.
! 73:
! 74: `-BPREFIX'
! 75: This option specifies where to find the executables, libraries,
! 76: include files, and data files of the compiler itself.
! 77:
! 78: The compiler driver program runs one or more of the subprograms
! 79: `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each
! 80: program it tries to run, both with and without `MACHINE/VERSION/'
! 81: (*note Target Options::.).
! 82:
! 83: For each subprogram to be run, the compiler driver first tries the
! 84: `-B' prefix, if any. If that name is not found, or if `-B' was
! 85: not specified, the driver tries two standard prefixes, which are
! 86: `/usr/lib/gcc/' and `/usr/local/lib/gcc-lib/'. If neither of
! 87: those results in a file name that is found, the unmodified program
! 88: name is searched for using the directories specified in your
! 89: `PATH' environment variable.
! 90:
! 91: `-B' prefixes that effectively specify directory names also apply
! 92: to libraries in the linker, because the compiler translates these
! 93: options into `-L' options for the linker. They also apply to
! 94: includes files in the preprocessor, because the compiler
! 95: translates these options into `-isystem' options for the
! 96: preprocessor. In this case, the compiler appends `include' to the
! 97: prefix.
! 98:
! 99: The run-time support file `libgcc.a' can also be searched for using
! 100: the `-B' prefix, if needed. If it is not found there, the two
! 101: standard prefixes above are tried, and that is all. The file is
! 102: left out of the link if it is not found by those means.
! 103:
! 104: Another way to specify a prefix much like the `-B' prefix is to use
! 105: the environment variable `GCC_EXEC_PREFIX'. *Note Environment
! 106: Variables::.
! 107:
! 108:
! 109: File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Directory Options, Up: Invoking GCC
! 110:
! 111: Specifying Target Machine and Compiler Version
! 112: ==============================================
! 113:
! 114: By default, GNU CC compiles code for the same type of machine that
! 115: you are using. However, it can also be installed as a cross-compiler,
! 116: to compile for some other type of machine. In fact, several different
! 117: configurations of GNU CC, for different target machines, can be
! 118: installed side by side. Then you specify which one to use with the
! 119: `-b' option.
! 120:
! 121: In addition, older and newer versions of GNU CC can be installed side
! 122: by side. One of them (probably the newest) will be the default, but
! 123: you may sometimes wish to use another.
! 124:
! 125: `-b MACHINE'
! 126: The argument MACHINE specifies the target machine for compilation.
! 127: This is useful when you have installed GNU CC as a cross-compiler.
! 128:
! 129: The value to use for MACHINE is the same as was specified as the
! 130: machine type when configuring GNU CC as a cross-compiler. For
! 131: example, if a cross-compiler was configured with `configure
! 132: i386v', meaning to compile for an 80386 running System V, then you
! 133: would specify `-b i386v' to run that cross compiler.
! 134:
! 135: When you do not specify `-b', it normally means to compile for the
! 136: same type of machine that you are using.
! 137:
! 138: `-V VERSION'
! 139: The argument VERSION specifies which version of GNU CC to run.
! 140: This is useful when multiple versions are installed. For example,
! 141: VERSION might be `2.0', meaning to run GNU CC version 2.0.
! 142:
! 143: The default version, when you do not specify `-V', is the last
! 144: version of GNU CC that you installed.
! 145:
! 146: The `-b' and `-V' options actually work by controlling part of the
! 147: file name used for the executable files and libraries used for
! 148: compilation. A given version of GNU CC, for a given target machine, is
! 149: normally kept in the directory `/usr/local/lib/gcc-lib/MACHINE/VERSION'.
! 150:
! 151: Thus, sites can customize the effect of `-b' or `-V' either by
! 152: changing the names of these directories or adding alternate names (or
! 153: symbolic links). If in directory `/usr/local/lib/gcc-lib/' the file
! 154: `80386' is a link to the file `i386v', then `-b 80386' becomes an alias
! 155: for `-b i386v'.
! 156:
! 157: In one respect, the `-b' or `-V' do not completely change to a
! 158: different compiler: the top-level driver program `gcc' that you
! 159: originally invoked continues to run and invoke the other executables
! 160: (preprocessor, compiler per se, assembler and linker) that do the real
! 161: work. However, since no real work is done in the driver program, it
! 162: usually does not matter that the driver program in use is not the one
! 163: for the specified target and version.
! 164:
! 165: The only way that the driver program depends on the target machine is
! 166: in the parsing and handling of special machine-specific options.
! 167: However, this is controlled by a file which is found, along with the
! 168: other executables, in the directory for the specified version and
! 169: target machine. As a result, a single installed driver program adapts
! 170: to any specified target machine and compiler version.
! 171:
! 172: The driver program executable does control one significant thing,
! 173: however: the default version and target machine. Therefore, you can
! 174: install different instances of the driver program, compiled for
! 175: different targets or versions, under different names.
! 176:
! 177: For example, if the driver for version 2.0 is installed as `ogcc'
! 178: and that for version 2.1 is installed as `gcc', then the command `gcc'
! 179: will use version 2.1 by default, while `ogcc' will use 2.0 by default.
! 180: However, you can choose either version with either command with the
! 181: `-V' option.
! 182:
! 183:
! 184: File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC
! 185:
! 186: Hardware Models and Configurations
! 187: ==================================
! 188:
! 189: Earlier we discussed the standard option `-b' which chooses among
! 190: different installed compilers for completely different target machines,
! 191: such as Vax vs. 68000 vs. 80386.
! 192:
! 193: In addition, each of these target machine types can have its own
! 194: special options, starting with `-m', to choose among various hardware
! 195: models or configurations--for example, 68010 vs 68020, floating
! 196: coprocessor or none. A single installed version of the compiler can
! 197: compile for any model or configuration, according to the options
! 198: specified.
! 199:
! 200: Some configurations of the compiler also support additional special
! 201: options, usually for compatibility with other compilers on the same
! 202: platform.
! 203:
! 204: These options are defined by the macro `TARGET_SWITCHES' in the
! 205: machine description. The default for the options is also defined by
! 206: that macro, which enables you to change the defaults.
! 207:
! 208: * Menu:
! 209:
! 210: * M680x0 Options::
! 211: * VAX Options::
! 212: * SPARC Options::
! 213: * Convex Options::
! 214: * AMD29K Options::
! 215: * ARM Options::
! 216: * M88K Options::
! 217: * RS/6000 and PowerPC Options::
! 218: * RT Options::
! 219: * MIPS Options::
! 220: * i386 Options::
! 221: * HPPA Options::
! 222: * Intel 960 Options::
! 223: * DEC Alpha Options::
! 224: * Clipper Options::
! 225: * H8/300 Options::
! 226: * System V Options::
! 227:
! 228:
! 229: File: gcc.info, Node: M680x0 Options, Next: VAX Options, Up: Submodel Options
! 230:
! 231: M680x0 Options
! 232: --------------
! 233:
! 234: These are the `-m' options defined for the 68000 series. The default
! 235: values for these options depends on which style of 68000 was selected
! 236: when the compiler was configured; the defaults for the most common
! 237: choices are given below.
! 238:
! 239: `-m68000'
! 240: `-mc68000'
! 241: Generate output for a 68000. This is the default when the
! 242: compiler is configured for 68000-based systems.
! 243:
! 244: `-m68020'
! 245: `-mc68020'
! 246: Generate output for a 68020. This is the default when the
! 247: compiler is configured for 68020-based systems.
! 248:
! 249: `-m68881'
! 250: Generate output containing 68881 instructions for floating point.
! 251: This is the default for most 68020 systems unless `-nfp' was
! 252: specified when the compiler was configured.
! 253:
! 254: `-m68030'
! 255: Generate output for a 68030. This is the default when the
! 256: compiler is configured for 68030-based systems.
! 257:
! 258: `-m68040'
! 259: Generate output for a 68040. This is the default when the
! 260: compiler is configured for 68040-based systems.
! 261:
! 262: This option inhibits the use of 68881/68882 instructions that have
! 263: to be emulated by software on the 68040. If your 68040 does not
! 264: have code to emulate those instructions, use `-m68040'.
! 265:
! 266: `-m68020-40'
! 267: Generate output for a 68040, without using any of the new
! 268: instructions. This results in code which can run relatively
! 269: efficiently on either a 68020/68881 or a 68030 or a 68040. The
! 270: generated code does use the 68881 instructions that are emulated
! 271: on the 68040.
! 272:
! 273: `-mfpa'
! 274: Generate output containing Sun FPA instructions for floating point.
! 275:
! 276: `-msoft-float'
! 277: Generate output containing library calls for floating point.
! 278: *Warning:* the requisite libraries are not available for all m68k
! 279: targets. Normally the facilities of the machine's usual C
! 280: compiler are used, but this can't be done directly in
! 281: cross-compilation. You must make your own arrangements to provide
! 282: suitable library functions for cross-compilation. The embedded
! 283: targets `m68k-*-aout' and `m68k-*-coff' do provide software
! 284: floating point support.
! 285:
! 286: `-mshort'
! 287: Consider type `int' to be 16 bits wide, like `short int'.
! 288:
! 289: `-mnobitfield'
! 290: Do not use the bit-field instructions. The `-m68000' option
! 291: implies `-mnobitfield'.
! 292:
! 293: `-mbitfield'
! 294: Do use the bit-field instructions. The `-m68020' option implies
! 295: `-mbitfield'. This is the default if you use a configuration
! 296: designed for a 68020.
! 297:
! 298: `-mrtd'
! 299: Use a different function-calling convention, in which functions
! 300: that take a fixed number of arguments return with the `rtd'
! 301: instruction, which pops their arguments while returning. This
! 302: saves one instruction in the caller since there is no need to pop
! 303: the arguments there.
! 304:
! 305: This calling convention is incompatible with the one normally used
! 306: on Unix, so you cannot use it if you need to call libraries
! 307: compiled with the Unix compiler.
! 308:
! 309: Also, you must provide function prototypes for all functions that
! 310: take variable numbers of arguments (including `printf'); otherwise
! 311: incorrect code will be generated for calls to those functions.
! 312:
! 313: In addition, seriously incorrect code will result if you call a
! 314: function with too many arguments. (Normally, extra arguments are
! 315: harmlessly ignored.)
! 316:
! 317: The `rtd' instruction is supported by the 68010 and 68020
! 318: processors, but not by the 68000.
! 319:
! 320:
! 321: File: gcc.info, Node: VAX Options, Next: SPARC Options, Prev: M680x0 Options, Up: Submodel Options
! 322:
! 323: VAX Options
! 324: -----------
! 325:
! 326: These `-m' options are defined for the Vax:
! 327:
! 328: `-munix'
! 329: Do not output certain jump instructions (`aobleq' and so on) that
! 330: the Unix assembler for the Vax cannot handle across long ranges.
! 331:
! 332: `-mgnu'
! 333: Do output those jump instructions, on the assumption that you will
! 334: assemble with the GNU assembler.
! 335:
! 336: `-mg'
! 337: Output code for g-format floating point numbers instead of
! 338: d-format.
! 339:
! 340:
! 341: File: gcc.info, Node: SPARC Options, Next: Convex Options, Prev: VAX Options, Up: Submodel Options
! 342:
! 343: SPARC Options
! 344: -------------
! 345:
! 346: These `-m' switches are supported on the SPARC:
! 347:
! 348: `-mno-app-regs'
! 349: `-mapp-regs'
! 350: Specify `-mapp-regs' to generate output using the global registers
! 351: 2 through 4, which the SPARC SVR4 ABI reserves for applications.
! 352: This is the default.
! 353:
! 354: To be fully SVR4 ABI compliant at the cost of some performance
! 355: loss, specify `-mno-app-regs'. You should compile libraries and
! 356: system software with this option.
! 357:
! 358: `-mfpu'
! 359: `-mhard-float'
! 360: Generate output containing floating point instructions. This is
! 361: the default.
! 362:
! 363: `-mno-fpu'
! 364: `-msoft-float'
! 365: Generate output containing library calls for floating point.
! 366: *Warning:* the requisite libraries are not available for all SPARC
! 367: targets. Normally the facilities of the machine's usual C
! 368: compiler are used, but this cannot be done directly in
! 369: cross-compilation. You must make your own arrangements to provide
! 370: suitable library functions for cross-compilation. The embedded
! 371: targets `sparc-*-aout' and `sparclite-*-*' do provide software
! 372: floating point support.
! 373:
! 374: `-msoft-float' changes the calling convention in the output file;
! 375: therefore, it is only useful if you compile *all* of a program with
! 376: this option. In particular, you need to compile `libgcc.a', the
! 377: library that comes with GNU CC, with `-msoft-float' in order for
! 378: this to work.
! 379:
! 380: `-mhard-quad-float'
! 381: Generate output containing quad-word (long double) floating point
! 382: instructions.
! 383:
! 384: `-msoft-quad-float'
! 385: Generate output containing library calls for quad-word (long
! 386: double) floating point instructions. The functions called are
! 387: those specified in the SPARC ABI. This is the default.
! 388:
! 389: As of this writing, there are no sparc implementations that have
! 390: hardware support for the quad-word floating point instructions.
! 391: They all invoke a trap handler for one of these instructions, and
! 392: then the trap handler emulates the effect of the instruction.
! 393: Because of the trap handler overhead, this is much slower than
! 394: calling the ABI library routines. Thus the `-msoft-quad-float'
! 395: option is the default.
! 396:
! 397: `-mno-epilogue'
! 398: `-mepilogue'
! 399: With `-mepilogue' (the default), the compiler always emits code for
! 400: function exit at the end of each function. Any function exit in
! 401: the middle of the function (such as a return statement in C) will
! 402: generate a jump to the exit code at the end of the function.
! 403:
! 404: With `-mno-epilogue', the compiler tries to emit exit code inline
! 405: at every function exit.
! 406:
! 407: `-mno-flat'
! 408: `-mflat'
! 409: With `-mflat', the compiler does not generate save/restore
! 410: instructions and will use a "flat" or single register window
! 411: calling convention. This model uses %i7 as the frame pointer and
! 412: is compatible with the normal register window model. Code from
! 413: either may be intermixed although debugger support is still
! 414: incomplete. The local registers and the input registers (0-5) are
! 415: still treated as "call saved" registers and will be saved on the
! 416: stack as necessary.
! 417:
! 418: With `-mno-flat' (the default), the compiler emits save/restore
! 419: instructions (except for leaf functions) and is the normal mode of
! 420: operation.
! 421:
! 422: `-mno-unaligned-doubles'
! 423: `-munaligned-doubles'
! 424: Assume that doubles have 8 byte alignment. This is the default.
! 425:
! 426: With `-munaligned-doubles', GNU CC assumes that doubles have 8 byte
! 427: alignment only if they are contained in another type, or if they
! 428: have an absolute address. Otherwise, it assumes they have 4 byte
! 429: alignment. Specifying this option avoids some rare compatibility
! 430: problems with code generated by other compilers. It is not the
! 431: default because it results in a performance loss, especially for
! 432: floating point code.
! 433:
! 434: `-mv8'
! 435: `-msparclite'
! 436: These two options select variations on the SPARC architecture.
! 437:
! 438: By default (unless specifically configured for the Fujitsu
! 439: SPARClite), GCC generates code for the v7 variant of the SPARC
! 440: architecture.
! 441:
! 442: `-mv8' will give you SPARC v8 code. The only difference from v7
! 443: code is that the compiler emits the integer multiply and integer
! 444: divide instructions which exist in SPARC v8 but not in SPARC v7.
! 445:
! 446: `-msparclite' will give you SPARClite code. This adds the integer
! 447: multiply, integer divide step and scan (`ffs') instructions which
! 448: exist in SPARClite but not in SPARC v7.
! 449:
! 450: `-mcypress'
! 451: `-msupersparc'
! 452: These two options select the processor for which the code is
! 453: optimised.
! 454:
! 455: With `-mcypress' (the default), the compiler optimizes code for the
! 456: Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx
! 457: series. This is also appropriate for the older SparcStation 1, 2,
! 458: IPX etc.
! 459:
! 460: With `-msupersparc' the compiler optimizes code for the SuperSparc
! 461: cpu, as used in the SparcStation 10, 1000 and 2000 series. This
! 462: flag also enables use of the full SPARC v8 instruction set.
! 463:
! 464: In a future version of GCC, these options will very likely be
! 465: renamed to `-mcpu=cypress' and `-mcpu=supersparc'.
! 466:
! 467: These `-m' switches are supported in addition to the above on SPARC
! 468: V9 processors:
! 469:
! 470: `-mmedlow'
! 471: Generate code for the Medium/Low code model: assume a 32 bit
! 472: address space. Programs are statically linked, PIC is not
! 473: supported. Pointers are still 64 bits.
! 474:
! 475: It is very likely that a future version of GCC will rename this
! 476: option.
! 477:
! 478: `-mmedany'
! 479: Generate code for the Medium/Anywhere code model: assume a 32 bit
! 480: text segment starting at offset 0, and a 32 bit data segment
! 481: starting anywhere (determined at link time). Programs are
! 482: statically linked, PIC is not supported. Pointers are still 64
! 483: bits.
! 484:
! 485: It is very likely that a future version of GCC will rename this
! 486: option.
! 487:
! 488: `-mint64'
! 489: Types long and int are 64 bits.
! 490:
! 491: `-mlong32'
! 492: Types long and int are 32 bits.
! 493:
! 494: `-mlong64'
! 495: `-mint32'
! 496: Type long is 64 bits, and type int is 32 bits.
! 497:
! 498: `-mstack-bias'
! 499: `-mno-stack-bias'
! 500: With `-mstack-bias', GNU CC assumes that the stack pointer, and
! 501: frame pointer if present, are offset by -2047 which must be added
! 502: back when making stack frame references. Otherwise, assume no
! 503: such offset is present.
! 504:
! 505:
1.1.1.7 root 506: File: gcc.info, Node: Convex Options, Next: AMD29K Options, Prev: SPARC Options, Up: Submodel Options
507:
508: Convex Options
509: --------------
510:
511: These `-m' options are defined for Convex:
512:
513: `-mc1'
514: Generate output for C1. The code will run on any Convex machine.
515: The preprocessor symbol `__convex__c1__' is defined.
516:
517: `-mc2'
518: Generate output for C2. Uses instructions not available on C1.
519: Scheduling and other optimizations are chosen for max performance
520: on C2. The preprocessor symbol `__convex_c2__' is defined.
521:
522: `-mc32'
523: Generate output for C32xx. Uses instructions not available on C1.
524: Scheduling and other optimizations are chosen for max performance
525: on C32. The preprocessor symbol `__convex_c32__' is defined.
526:
527: `-mc34'
528: Generate output for C34xx. Uses instructions not available on C1.
529: Scheduling and other optimizations are chosen for max performance
530: on C34. The preprocessor symbol `__convex_c34__' is defined.
531:
532: `-mc38'
533: Generate output for C38xx. Uses instructions not available on C1.
534: Scheduling and other optimizations are chosen for max performance
535: on C38. The preprocessor symbol `__convex_c38__' is defined.
536:
537: `-margcount'
538: Generate code which puts an argument count in the word preceding
539: each argument list. This is compatible with regular CC, and a few
540: programs may need the argument count word. GDB and other
541: source-level debuggers do not need it; this info is in the symbol
542: table.
543:
544: `-mnoargcount'
545: Omit the argument count word. This is the default.
546:
547: `-mvolatile-cache'
548: Allow volatile references to be cached. This is the default.
549:
550: `-mvolatile-nocache'
551: Volatile references bypass the data cache, going all the way to
552: memory. This is only needed for multi-processor code that does
553: not use standard synchronization instructions. Making
554: non-volatile references to volatile locations will not necessarily
555: work.
556:
557: `-mlong32'
558: Type long is 32 bits, the same as type int. This is the default.
559:
560: `-mlong64'
561: Type long is 64 bits, the same as type long long. This option is
562: useless, because no library support exists for it.
563:
564:
565: File: gcc.info, Node: AMD29K Options, Next: ARM Options, Prev: Convex Options, Up: Submodel Options
566:
567: AMD29K Options
568: --------------
569:
570: These `-m' options are defined for the AMD Am29000:
571:
572: `-mdw'
573: Generate code that assumes the `DW' bit is set, i.e., that byte and
574: halfword operations are directly supported by the hardware. This
575: is the default.
576:
577: `-mndw'
578: Generate code that assumes the `DW' bit is not set.
579:
580: `-mbw'
581: Generate code that assumes the system supports byte and halfword
582: write operations. This is the default.
583:
584: `-mnbw'
585: Generate code that assumes the systems does not support byte and
586: halfword write operations. `-mnbw' implies `-mndw'.
587:
588: `-msmall'
589: Use a small memory model that assumes that all function addresses
590: are either within a single 256 KB segment or at an absolute
591: address of less than 256k. This allows the `call' instruction to
592: be used instead of a `const', `consth', `calli' sequence.
593:
594: `-mnormal'
595: Use the normal memory model: Generate `call' instructions only when
596: calling functions in the same file and `calli' instructions
597: otherwise. This works if each file occupies less than 256 KB but
598: allows the entire executable to be larger than 256 KB. This is
599: the default.
600:
601: `-mlarge'
602: Always use `calli' instructions. Specify this option if you expect
603: a single file to compile into more than 256 KB of code.
604:
605: `-m29050'
606: Generate code for the Am29050.
607:
608: `-m29000'
609: Generate code for the Am29000. This is the default.
610:
611: `-mkernel-registers'
612: Generate references to registers `gr64-gr95' instead of to
613: registers `gr96-gr127'. This option can be used when compiling
614: kernel code that wants a set of global registers disjoint from
615: that used by user-mode code.
616:
617: Note that when this option is used, register names in `-f' flags
618: must use the normal, user-mode, names.
619:
620: `-muser-registers'
621: Use the normal set of global registers, `gr96-gr127'. This is the
622: default.
623:
624: `-mstack-check'
625: `-mno-stack-check'
626: Insert (or do not insert) a call to `__msp_check' after each stack
627: adjustment. This is often used for kernel code.
628:
629: `-mstorem-bug'
630: `-mno-storem-bug'
631: `-mstorem-bug' handles 29k processors which cannot handle the
632: separation of a mtsrim insn and a storem instruction (most 29000
633: chips to date, but not the 29050).
634:
635: `-mno-reuse-arg-regs'
636: `-mreuse-arg-regs'
637: `-mno-reuse-arg-regs' tells the compiler to only use incoming
638: argument registers for copying out arguments. This helps detect
639: calling a function with fewer arguments than it was declared with.
640:
641: `-msoft-float'
642: Generate output containing library calls for floating point.
643: *Warning:* the requisite libraries are not part of GNU CC.
644: Normally the facilities of the machine's usual C compiler are
645: used, but this can't be done directly in cross-compilation. You
646: must make your own arrangements to provide suitable library
647: functions for cross-compilation.
648:
649:
650: File: gcc.info, Node: ARM Options, Next: M88K Options, Prev: AMD29K Options, Up: Submodel Options
651:
652: ARM Options
653: -----------
654:
655: These `-m' options are defined for Advanced RISC Machines (ARM)
656: architectures:
657:
658: `-m2'
659: `-m3'
660: These options are identical. Generate code for the ARM2 and ARM3
661: processors. This option is the default. You should also use this
662: option to generate code for ARM6 processors that are running with a
663: 26-bit program counter.
664:
665: `-m6'
666: Generate code for the ARM6 processor when running with a 32-bit
667: program counter.
668:
669: `-mapcs'
1.1.1.8 ! root 670: Generate a stack frame that is compliant with the ARM Procedure
1.1.1.7 root 671: Call Standard for all functions, even if this is not strictly
672: necessary for correct execution of the code.
673:
674: `-mbsd'
675: This option only applies to RISC iX. Emulate the native BSD-mode
676: compiler. This is the default if `-ansi' is not specified.
677:
678: `-mxopen'
679: This option only applies to RISC iX. Emulate the native
680: X/Open-mode compiler.
681:
682: `-mno-symrename'
683: This option only applies to RISC iX. Do not run the assembler
684: post-processor, `symrename', after code has been assembled.
685: Normally it is necessary to modify some of the standard symbols in
686: preparation for linking with the RISC iX C library; this option
687: suppresses this pass. The post-processor is never run when the
688: compiler is built for cross-compilation.
689:
690:
691: File: gcc.info, Node: M88K Options, Next: RS/6000 and PowerPC Options, Prev: ARM Options, Up: Submodel Options
692:
693: M88K Options
694: ------------
695:
696: These `-m' options are defined for Motorola 88k architectures:
697:
698: `-m88000'
699: Generate code that works well on both the m88100 and the m88110.
700:
701: `-m88100'
702: Generate code that works best for the m88100, but that also runs
703: on the m88110.
704:
705: `-m88110'
706: Generate code that works best for the m88110, and may not run on
707: the m88100.
708:
709: `-mbig-pic'
710: Obsolete option to be removed from the next revision. Use `-fPIC'.
711:
712: `-midentify-revision'
713: Include an `ident' directive in the assembler output recording the
714: source file name, compiler name and version, timestamp, and
715: compilation flags used.
716:
717: `-mno-underscores'
718: In assembler output, emit symbol names without adding an underscore
719: character at the beginning of each name. The default is to use an
720: underscore as prefix on each name.
721:
722: `-mocs-debug-info'
723: `-mno-ocs-debug-info'
724: Include (or omit) additional debugging information (about
725: registers used in each stack frame) as specified in the 88open
726: Object Compatibility Standard, "OCS". This extra information
727: allows debugging of code that has had the frame pointer
728: eliminated. The default for DG/UX, SVr4, and Delta 88 SVr3.2 is
729: to include this information; other 88k configurations omit this
730: information by default.
731:
732: `-mocs-frame-position'
733: When emitting COFF debugging information for automatic variables
734: and parameters stored on the stack, use the offset from the
735: canonical frame address, which is the stack pointer (register 31)
736: on entry to the function. The DG/UX, SVr4, Delta88 SVr3.2, and
737: BCS configurations use `-mocs-frame-position'; other 88k
738: configurations have the default `-mno-ocs-frame-position'.
739:
740: `-mno-ocs-frame-position'
741: When emitting COFF debugging information for automatic variables
742: and parameters stored on the stack, use the offset from the frame
743: pointer register (register 30). When this option is in effect,
744: the frame pointer is not eliminated when debugging information is
745: selected by the -g switch.
746:
747: `-moptimize-arg-area'
748: `-mno-optimize-arg-area'
749: Control how function arguments are stored in stack frames.
750: `-moptimize-arg-area' saves space by optimizing them, but this
751: conflicts with the 88open specifications. The opposite
752: alternative, `-mno-optimize-arg-area', agrees with 88open
753: standards. By default GNU CC does not optimize the argument area.
754:
755: `-mshort-data-NUM'
756: Generate smaller data references by making them relative to `r0',
757: which allows loading a value using a single instruction (rather
758: than the usual two). You control which data references are
759: affected by specifying NUM with this option. For example, if you
760: specify `-mshort-data-512', then the data references affected are
761: those involving displacements of less than 512 bytes.
762: `-mshort-data-NUM' is not effective for NUM greater than 64k.
763:
764: `-mserialize-volatile'
765: `-mno-serialize-volatile'
766: Do, or don't, generate code to guarantee sequential consistency of
767: volatile memory references. By default, consistency is guaranteed.
768:
769: The order of memory references made by the MC88110 processor does
770: not always match the order of the instructions requesting those
771: references. In particular, a load instruction may execute before
772: a preceding store instruction. Such reordering violates
773: sequential consistency of volatile memory references, when there
774: are multiple processors. When consistency must be guaranteed,
775: GNU C generates special instructions, as needed, to force
776: execution in the proper order.
777:
778: The MC88100 processor does not reorder memory references and so
779: always provides sequential consistency. However, by default, GNU
780: C generates the special instructions to guarantee consistency even
781: when you use `-m88100', so that the code may be run on an MC88110
782: processor. If you intend to run your code only on the MC88100
783: processor, you may use `-mno-serialize-volatile'.
784:
785: The extra code generated to guarantee consistency may affect the
786: performance of your application. If you know that you can safely
787: forgo this guarantee, you may use `-mno-serialize-volatile'.
788:
789: `-msvr4'
790: `-msvr3'
791: Turn on (`-msvr4') or off (`-msvr3') compiler extensions related
792: to System V release 4 (SVr4). This controls the following:
793:
794: 1. Which variant of the assembler syntax to emit.
795:
796: 2. `-msvr4' makes the C preprocessor recognize `#pragma weak'
797: that is used on System V release 4.
798:
799: 3. `-msvr4' makes GNU CC issue additional declaration directives
800: used in SVr4.
801:
802: `-msvr4' is the default for the m88k-motorola-sysv4 and
803: m88k-dg-dgux m88k configurations. `-msvr3' is the default for all
804: other m88k configurations.
805:
806: `-mversion-03.00'
807: This option is obsolete, and is ignored.
808:
809: `-mno-check-zero-division'
810: `-mcheck-zero-division'
811: Do, or don't, generate code to guarantee that integer division by
812: zero will be detected. By default, detection is guaranteed.
813:
814: Some models of the MC88100 processor fail to trap upon integer
815: division by zero under certain conditions. By default, when
816: compiling code that might be run on such a processor, GNU C
817: generates code that explicitly checks for zero-valued divisors and
818: traps with exception number 503 when one is detected. Use of
819: mno-check-zero-division suppresses such checking for code
820: generated to run on an MC88100 processor.
821:
822: GNU C assumes that the MC88110 processor correctly detects all
823: instances of integer division by zero. When `-m88110' is
824: specified, both `-mcheck-zero-division' and
825: `-mno-check-zero-division' are ignored, and no explicit checks for
826: zero-valued divisors are generated.
827:
828: `-muse-div-instruction'
829: Use the div instruction for signed integer division on the MC88100
830: processor. By default, the div instruction is not used.
831:
832: On the MC88100 processor the signed integer division instruction
833: div) traps to the operating system on a negative operand. The
834: operating system transparently completes the operation, but at a
835: large cost in execution time. By default, when compiling code
836: that might be run on an MC88100 processor, GNU C emulates signed
837: integer division using the unsigned integer division instruction
838: divu), thereby avoiding the large penalty of a trap to the
839: operating system. Such emulation has its own, smaller, execution
840: cost in both time and space. To the extent that your code's
841: important signed integer division operations are performed on two
842: nonnegative operands, it may be desirable to use the div
843: instruction directly.
844:
845: On the MC88110 processor the div instruction (also known as the
846: divs instruction) processes negative operands without trapping to
847: the operating system. When `-m88110' is specified,
848: `-muse-div-instruction' is ignored, and the div instruction is used
849: for signed integer division.
850:
851: Note that the result of dividing INT_MIN by -1 is undefined. In
852: particular, the behavior of such a division with and without
853: `-muse-div-instruction' may differ.
854:
855: `-mtrap-large-shift'
856: `-mhandle-large-shift'
857: Include code to detect bit-shifts of more than 31 bits;
858: respectively, trap such shifts or emit code to handle them
859: properly. By default GNU CC makes no special provision for large
860: bit shifts.
861:
862: `-mwarn-passed-structs'
863: Warn when a function passes a struct as an argument or result.
864: Structure-passing conventions have changed during the evolution of
865: the C language, and are often the source of portability problems.
866: By default, GNU CC issues no such warning.
1.1.1.4 root 867:
868:
1.1.1.6 root 869: File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RT Options, Prev: M88K Options, Up: Submodel Options
870:
871: IBM RS/6000 and PowerPC Options
872: -------------------------------
873:
874: These `-m' options are defined for the IBM RS/6000 and PowerPC:
875: `-mpower'
876: `-mno-power'
877: `-mpower2'
878: `-mno-power2'
879: `-mpowerpc'
880: `-mno-powerpc'
1.1.1.7 root 881: `-mpowerpc-gpopt'
882: `-mno-powerpc-gpopt'
883: `-mpowerpc-gfxopt'
884: `-mno-powerpc-gfxopt'
1.1.1.6 root 885: GNU CC supports two related instruction set architectures for the
886: RS/6000 and PowerPC. The "POWER" instruction set are those
887: instructions supported by the `rios' chip set used in the original
888: RS/6000 systems and the "PowerPC" instruction set is the
889: architecture of the Motorola MPC6xx microprocessors. The PowerPC
890: architecture defines 64-bit instructions, but they are not
891: supported by any current processors.
892:
893: Neither architecture is a subset of the other. However there is a
894: large common subset of instructions supported by both. An MQ
895: register is included in processors supporting the POWER
896: architecture.
897:
898: You use these options to specify which instructions are available
899: on the processor you are using. The default value of these
900: options is determined when configuring GNU CC. Specifying the
901: `-mcpu=CPU_TYPE' overrides the specification of these options. We
902: recommend you use that option rather than these.
903:
904: The `-mpower' option allows GNU CC to generate instructions that
905: are found only in the POWER architecture and to use the MQ
906: register. Specifying `-mpower2' implies `-power' and also allows
907: GNU CC to generate instructions that are present in the POWER2
908: architecture but not the original POWER architecture.
909:
910: The `-mpowerpc' option allows GNU CC to generate instructions that
911: are found only in the 32-bit subset of the PowerPC architecture.
1.1.1.7 root 912: Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows
913: GNU CC to use the optional PowerPC architecture instructions in the
914: General Purpose group, including floating-point square root.
915: Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows
916: GNU CC to use the optional PowerPC architecture instructions in
917: the Graphics group, including floating-point select.
1.1.1.6 root 918:
919: If you specify both `-mno-power' and `-mno-powerpc', GNU CC will
920: use only the instructions in the common subset of both
1.1.1.7 root 921: architectures plus some special AIX common-mode calls, and will
922: not use the MQ register. Specifying both `-mpower' and `-mpowerpc'
923: permits GNU CC to use any instruction from either architecture and
924: to allow use of the MQ register; specify this for the Motorola
925: MPC601.
1.1.1.6 root 926:
927: `-mnew-mnemonics'
928: `-mold-mnemonics'
929: Select which mnemonics to use in the generated assembler code.
930: `-mnew-mnemonics' requests output that uses the assembler mnemonics
931: defined for the PowerPC architecture, while `-mold-mnemonics'
932: requests the assembler mnemonics defined for the POWER
933: architecture. Instructions defined in only one architecture have
934: only one mnemonic; GNU CC uses that mnemonic irrespective of which
1.1.1.8 ! root 935: of these options is specified.
1.1.1.6 root 936:
937: PowerPC assemblers support both the old and new mnemonics, as will
938: later POWER assemblers. Current POWER assemblers only support the
939: old mnemonics. Specify `-mnew-mnemonics' if you have an assembler
940: that supports them, otherwise specify `-mold-mnemonics'.
941:
942: The default value of these options depends on how GNU CC was
1.1.1.8 ! root 943: configured. Specifying `-mcpu=CPU_TYPE' sometimes overrides the
1.1.1.7 root 944: value of these option. Unless you are building a cross-compiler,
1.1.1.6 root 945: you should normally not specify either `-mnew-mnemonics' or
946: `-mold-mnemonics', but should instead accept the default.
947:
948: `-mcpu=CPU_TYPE'
949: Set architecture type, register usage, choice of mnemonics, and
950: instruction scheduling parameters for machine type CPU_TYPE. By
951: default, CPU_TYPE is the target system defined when GNU CC was
952: configured. Supported values for CPU_TYPE are `rios1', `rios2',
1.1.1.8 ! root 953: `rsc', `601', `603', `604', `power', `powerpc', `403', and
! 954: `common'. `-mcpu=power' and `-mcpu=powerpc' specify generic POWER
! 955: and pure PowerPC (i.e., not MPC601) architecture machine types,
! 956: with an appropriate, generic processor model assumed for
! 957: scheduling purposes.
1.1.1.7 root 958:
959: Specifying `-mcpu=rios1', `-mcpu=rios2', `-mcpu=rsc', or
960: `-mcpu=power' enables the `-mpower' option and disables the
961: `-mpowerpc' option; `-mcpu=601' enables both the `-mpower' and
1.1.1.8 ! root 962: `-mpowerpc' options; `-mcpu=603', `-mcpu=604', `-mcpu=403', and
! 963: `-mcpu=powerpc' enable the `-mpowerpc' option and disable the
! 964: `-mpower' option; `-mcpu=common' disables both the `-mpower' and
! 965: `-mpowerpc' options.
1.1.1.6 root 966:
967: To generate code that will operate on all members of the RS/6000
1.1.1.7 root 968: and PowerPC families, specify `-mcpu=common'. In that case, GNU CC
969: will use only the instructions in the common subset of both
970: architectures plus some special AIX common-mode calls, and will
971: not use the MQ register. GNU CC assumes a generic processor model
972: for scheduling purposes.
973:
974: Specifying `-mcpu=rios1', `-mcpu=rios2', `-mcpu=rsc', or
975: `-mcpu=power' also disables the `new-mnemonics' option.
1.1.1.8 ! root 976: Specifying `-mcpu=601', `-mcpu=603', `-mcpu=604', `403', or
1.1.1.7 root 977: `-mcpu=powerpc' also enables the `new-mnemonics' option.
1.1.1.6 root 978:
1.1.1.7 root 979: `-mfull-toc'
1.1.1.6 root 980: `-mno-fp-in-toc'
1.1.1.7 root 981: `-mno-sum-in-toc'
1.1.1.6 root 982: `-mminimal-toc'
983: Modify generation of the TOC (Table Of Contents), which is created
1.1.1.7 root 984: for every executable file. The `-mfull-toc' option is selected by
985: default. In that case, GNU CC will allocate at least one TOC
1.1.1.6 root 986: entry for each unique non-automatic variable reference in your
987: program. GNU CC will also place floating-point constants in the
1.1.1.7 root 988: TOC. However, only 16,384 entries are available in the TOC.
1.1.1.6 root 989:
1.1.1.7 root 990: If you receive a linker error message that saying you have
991: overflowed the available TOC space, you can reduce the amount of
992: TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
993: options. `-mno-fp-in-toc' prevents GNU CC from putting
994: floating-point constants in the TOC and `-mno-sum-in-toc' forces
995: GNU CC to generate code to calculate the sum of an address and a
996: constant at run-time instead of putting that sum into the TOC.
997: You may specify one or both of these options. Each causes GNU CC
998: to produce very slightly slower and larger code at the expense of
999: conserving TOC space.
1000:
1001: If you still run out of space in the TOC even when you specify
1002: both of these options, specify `-mminimal-toc' instead. This
1003: option causes GNU CC to make only one TOC entry for every file.
1004: When you specify this option, GNU CC will produce code that is
1005: slower and larger but which uses extremely little TOC space. You
1006: may wish to use this option only on files that contain less
1007: frequently executed code.
1.1.1.6 root 1008:
1.1.1.8 ! root 1009: `-msoft-float'
! 1010: `-mhard-float'
! 1011: Generate code that does not use (uses) the floating-point register
! 1012: set. Software floating point emulation is provided if you use the
! 1013: `-msoft-float' option, and pass the option to GNU CC when linking.
! 1014:
! 1015: `-mmultiple'
! 1016: `-mno-multiple'
! 1017: Generate code that uses (does not use) the load multiple word
! 1018: instructions and the store multiple word instructions. These
! 1019: instructions are generated by default on POWER systems, and not
! 1020: generated on PowerPC systems. Do not use `-mmultiple' on little
! 1021: endian PowerPC systems, since those instructions do not work when
! 1022: the processor is in little endian mode.
! 1023:
! 1024: `-mstring'
! 1025: `-mno-string'
! 1026: Generate code that uses (does not use) the load string
! 1027: instructions and the store string word instructions to save
! 1028: multiple registers and do small block moves. These instructions
! 1029: are generated by default on POWER systems, anod not generated on
! 1030: PowerPC systems. Do not use `-mstring' on little endian PowerPC
! 1031: systems, since those instructions do not work when the processor
! 1032: is in little endian mode.
! 1033:
! 1034: `-mno-bit-align'
! 1035: `-mbit-align'
! 1036: On System V.4 and embedded PowerPC systems do not (do) force
! 1037: structures and unions that contain bit fields to be aligned to the
! 1038: base type of the bit field.
! 1039:
! 1040: For example, by default a structure containing nothing but 8
! 1041: `unsigned' bitfields of length 1 would be aligned to a 4 byte
! 1042: boundary and have a size of 4 bytes. By using `-mno-bit-align',
! 1043: the structure would be aligned to a 1 byte boundary and be one
! 1044: byte in size.
! 1045:
! 1046: `-mno-strict-align'
! 1047: `-mstrict-align'
! 1048: On System V.4 and embedded PowerPC systems do not (do) assume that
! 1049: unaligned memory references will be handled by the system.
! 1050:
! 1051: `-mrelocatable'
! 1052: `-mno-relocatable'
! 1053: On embedded PowerPC systems generate code that allows (does not
! 1054: allow) the program to be relocated to a different address at
! 1055: runtime.
! 1056:
! 1057: `-mno-toc'
! 1058: `-mtoc'
! 1059: On System V.4 and embedded PowerPC systems do not (do) assume that
! 1060: register 2 contains a pointer to a global area pointing to the
! 1061: addresses used in the program.
! 1062:
! 1063: `-mno-traceback'
! 1064: `-mtraceback'
! 1065: On embedded PowerPC systems do not (do) generate a traceback tag
! 1066: before the start of the function. This tag can be used by the
! 1067: debugger to identify where the start of a function is.
! 1068:
! 1069: `-mlittle'
! 1070: `-mlittle-endian'
! 1071: On System V.4 and embedded PowerPC systems compile code for the
! 1072: processor in little endian mode. The `-mlittle-endian' option is
! 1073: the same as `-mlittle'.
! 1074:
! 1075: `-mbig'
! 1076: `-mbig-endian'
! 1077: On System V.4 and embedded PowerPC systems compile code for the
! 1078: processor in big endian mode. The `-mbig-endian' option is the
! 1079: same as `-mbig'.
! 1080:
! 1081: `-mcall-sysv'
! 1082: On System V.4 and embedded PowerPC systems compile code using
! 1083: calling conventions that adheres to the March 1995 draft of the
! 1084: System V Application Binary Interface, PowerPC processor
! 1085: supplement. This is the default unless you configured GCC using
! 1086: `powerpc-*-eabiaix'.
! 1087:
! 1088: `-mcall-aix'
! 1089: On System V.4 and embedded PowerPC systems compile code using
! 1090: calling conventions that are similar to those used on AIX. This
! 1091: is the default if you configured GCC using `powerpc-*-eabiaix'.
! 1092:
! 1093: `-mprototype'
! 1094: `-mno-prototype'
! 1095: On System V.4 and embedded PowerPC systems assume that all calls to
! 1096: variable argument functions are properly prototyped. Otherwise,
! 1097: the compiler must insert an instruction before every non
! 1098: prototyped call to set or clear bit 6 of the condition code
! 1099: register (CR) to indicate whether floating point values were
! 1100: passed in the floating point registers in case the function takes
! 1101: a variable arguments. With `-mprototype', only calls to
! 1102: prototyped variable argument functions will set or clear the bit.
! 1103:
1.1.1.6 root 1104:
1105: File: gcc.info, Node: RT Options, Next: MIPS Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options
1106:
1107: IBM RT Options
1108: --------------
1109:
1110: These `-m' options are defined for the IBM RT PC:
1111:
1112: `-min-line-mul'
1113: Use an in-line code sequence for integer multiplies. This is the
1114: default.
1115:
1116: `-mcall-lib-mul'
1117: Call `lmul$$' for integer multiples.
1118:
1119: `-mfull-fp-blocks'
1120: Generate full-size floating point data blocks, including the
1121: minimum amount of scratch space recommended by IBM. This is the
1122: default.
1123:
1124: `-mminimum-fp-blocks'
1125: Do not include extra scratch space in floating point data blocks.
1126: This results in smaller code, but slower execution, since scratch
1127: space must be allocated dynamically.
1128:
1129: `-mfp-arg-in-fpregs'
1130: Use a calling sequence incompatible with the IBM calling
1131: convention in which floating point arguments are passed in
1132: floating point registers. Note that `varargs.h' and `stdargs.h'
1133: will not work with floating point operands if this option is
1134: specified.
1135:
1136: `-mfp-arg-in-gregs'
1137: Use the normal calling convention for floating point arguments.
1138: This is the default.
1139:
1140: `-mhc-struct-return'
1141: Return structures of more than one word in memory, rather than in a
1142: register. This provides compatibility with the MetaWare HighC (hc)
1143: compiler. Use the option `-fpcc-struct-return' for compatibility
1144: with the Portable C Compiler (pcc).
1145:
1146: `-mnohc-struct-return'
1147: Return some structures of more than one word in registers, when
1148: convenient. This is the default. For compatibility with the
1149: IBM-supplied compilers, use the option `-fpcc-struct-return' or the
1150: option `-mhc-struct-return'.
1151:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.