|
|
1.1.1.4 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.5 ! root 6: Published by the Free Software Foundation 59 Temple Place - Suite 330
! 7: Boston, MA 02111-1307 USA
1.1.1.2 root 8:
1.1.1.5 ! root 9: Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software
! 10: Foundation, Inc.
1.1 root 11:
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.
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.4 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
26: versions, except that the sections entitled "GNU General Public
1.1.1.4 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.
1.1 root 31:
32:
1.1.1.5 ! root 33: File: gcc.info, Node: Driver, Next: Run-time Target, Up: Target Macros
1.1.1.2 root 34:
1.1.1.5 ! root 35: Controlling the Compilation Driver, `gcc'
! 36: =========================================
1.1.1.2 root 37:
1.1.1.5 ! root 38: You can control the compilation driver.
1.1.1.3 root 39:
1.1.1.5 ! root 40: `SWITCH_TAKES_ARG (CHAR)'
! 41: A C expression which determines whether the option `-CHAR' takes
! 42: arguments. The value should be the number of arguments that
! 43: option takes-zero, for many options.
! 44:
! 45: By default, this macro is defined to handle the standard options
! 46: properly. You need not define it unless you wish to add additional
! 47: options which take arguments.
! 48:
! 49: `WORD_SWITCH_TAKES_ARG (NAME)'
! 50: A C expression which determines whether the option `-NAME' takes
! 51: arguments. The value should be the number of arguments that
! 52: option takes-zero, for many options. This macro rather than
! 53: `SWITCH_TAKES_ARG' is used for multi-character option names.
! 54:
! 55: By default, this macro is defined as
! 56: `DEFAULT_WORD_SWITCH_TAKES_ARG', which handles the standard options
! 57: properly. You need not define `WORD_SWITCH_TAKES_ARG' unless you
! 58: wish to add additional options which take arguments. Any
! 59: redefinition should call `DEFAULT_WORD_SWITCH_TAKES_ARG' and then
! 60: check for additional options.
! 61:
! 62: `SWITCHES_NEED_SPACES'
! 63: A string-valued C expression which is nonempty if the linker needs
! 64: a space between the `-L' or `-o' option and its argument.
! 65:
! 66: If this macro is not defined, the default value is 0.
! 67:
! 68: `CPP_SPEC'
! 69: A C string constant that tells the GNU CC driver program options to
! 70: pass to CPP. It can also specify how to translate options you
! 71: give to GNU CC into options for GNU CC to pass to the CPP.
! 72:
! 73: Do not define this macro if it does not need to do anything.
! 74:
! 75: `NO_BUILTIN_SIZE_TYPE'
! 76: If this macro is defined, the preprocessor will not define the
! 77: builtin macro `__SIZE_TYPE__'. The macro `__SIZE_TYPE__' must
! 78: then be defined by `CPP_SPEC' instead.
! 79:
! 80: This should be defined if `SIZE_TYPE' depends on target dependent
! 81: flags which are not accessible to the preprocessor. Otherwise, it
! 82: should not be defined.
! 83:
! 84: `NO_BUILTIN_PTRDIFF_TYPE'
! 85: If this macro is defined, the preprocessor will not define the
! 86: builtin macro `__PTRDIFF_TYPE__'. The macro `__PTRDIFF_TYPE__'
! 87: must then be defined by `CPP_SPEC' instead.
! 88:
! 89: This should be defined if `PTRDIFF_TYPE' depends on target
! 90: dependent flags which are not accessible to the preprocessor.
! 91: Otherwise, it should not be defined.
! 92:
! 93: `SIGNED_CHAR_SPEC'
! 94: A C string constant that tells the GNU CC driver program options to
! 95: pass to CPP. By default, this macro is defined to pass the option
! 96: `-D__CHAR_UNSIGNED__' to CPP if `char' will be treated as
! 97: `unsigned char' by `cc1'.
! 98:
! 99: Do not define this macro unless you need to override the default
! 100: definition.
! 101:
! 102: `CC1_SPEC'
! 103: A C string constant that tells the GNU CC driver program options to
! 104: pass to `cc1'. It can also specify how to translate options you
! 105: give to GNU CC into options for GNU CC to pass to the `cc1'.
! 106:
! 107: Do not define this macro if it does not need to do anything.
! 108:
! 109: `CC1PLUS_SPEC'
! 110: A C string constant that tells the GNU CC driver program options to
! 111: pass to `cc1plus'. It can also specify how to translate options
! 112: you give to GNU CC into options for GNU CC to pass to the
! 113: `cc1plus'.
! 114:
! 115: Do not define this macro if it does not need to do anything.
! 116:
! 117: `ASM_SPEC'
! 118: A C string constant that tells the GNU CC driver program options to
! 119: pass to the assembler. It can also specify how to translate
! 120: options you give to GNU CC into options for GNU CC to pass to the
! 121: assembler. See the file `sun3.h' for an example of this.
! 122:
! 123: Do not define this macro if it does not need to do anything.
! 124:
! 125: `ASM_FINAL_SPEC'
! 126: A C string constant that tells the GNU CC driver program how to
! 127: run any programs which cleanup after the normal assembler.
! 128: Normally, this is not needed. See the file `mips.h' for an
! 129: example of this.
! 130:
! 131: Do not define this macro if it does not need to do anything.
! 132:
! 133: `LINK_SPEC'
! 134: A C string constant that tells the GNU CC driver program options to
! 135: pass to the linker. It can also specify how to translate options
! 136: you give to GNU CC into options for GNU CC to pass to the linker.
! 137:
! 138: Do not define this macro if it does not need to do anything.
! 139:
! 140: `LIB_SPEC'
! 141: Another C string constant used much like `LINK_SPEC'. The
! 142: difference between the two is that `LIB_SPEC' is used at the end
! 143: of the command given to the linker.
! 144:
! 145: If this macro is not defined, a default is provided that loads the
! 146: standard C library from the usual place. See `gcc.c'.
! 147:
! 148: `LIBGCC_SPEC'
! 149: Another C string constant that tells the GNU CC driver program how
! 150: and when to place a reference to `libgcc.a' into the linker
! 151: command line. This constant is placed both before and after the
! 152: value of `LIB_SPEC'.
! 153:
! 154: If this macro is not defined, the GNU CC driver provides a default
! 155: that passes the string `-lgcc' to the linker unless the `-shared'
! 156: option is specified.
! 157:
! 158: `STARTFILE_SPEC'
! 159: Another C string constant used much like `LINK_SPEC'. The
! 160: difference between the two is that `STARTFILE_SPEC' is used at the
! 161: very beginning of the command given to the linker.
! 162:
! 163: If this macro is not defined, a default is provided that loads the
! 164: standard C startup file from the usual place. See `gcc.c'.
! 165:
! 166: `ENDFILE_SPEC'
! 167: Another C string constant used much like `LINK_SPEC'. The
! 168: difference between the two is that `ENDFILE_SPEC' is used at the
! 169: very end of the command given to the linker.
! 170:
! 171: Do not define this macro if it does not need to do anything.
! 172:
! 173: `LINK_LIBGCC_SPECIAL'
! 174: Define this macro if the driver program should find the library
! 175: `libgcc.a' itself and should not pass `-L' options to the linker.
! 176: If you do not define this macro, the driver program will pass the
! 177: argument `-lgcc' to tell the linker to do the search and will pass
! 178: `-L' options to it.
! 179:
! 180: `LINK_LIBGCC_SPECIAL_1'
! 181: Define this macro if the driver program should find the library
! 182: `libgcc.a'. If you do not define this macro, the driver program
! 183: will pass the argument `-lgcc' to tell the linker to do the search.
! 184: This macro is similar to `LINK_LIBGCC_SPECIAL', except that it does
! 185: not affect `-L' options.
! 186:
! 187: `MULTILIB_DEFAULTS'
! 188: Define this macro as a C expression for the initializer of an
! 189: array of string to tell the driver program which options are
! 190: defaults for this target and thus do not need to be handled
! 191: specially when using `MULTILIB_OPTIONS'.
! 192:
! 193: Do not define this macro if `MULTILIB_OPTIONS' is not defined in
! 194: the target makefile fragment or if none of the options listed in
! 195: `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::.
! 196:
! 197: `RELATIVE_PREFIX_NOT_LINKDIR'
! 198: Define this macro to tell `gcc' that it should only translate a
! 199: `-B' prefix into a `-L' linker option if the prefix indicates an
! 200: absolute file name.
! 201:
! 202: `STANDARD_EXEC_PREFIX'
! 203: Define this macro as a C string constant if you wish to override
! 204: the standard choice of `/usr/local/lib/gcc-lib/' as the default
! 205: prefix to try when searching for the executable files of the
! 206: compiler.
! 207:
! 208: `MD_EXEC_PREFIX'
! 209: If defined, this macro is an additional prefix to try after
! 210: `STANDARD_EXEC_PREFIX'. `MD_EXEC_PREFIX' is not searched when the
! 211: `-b' option is used, or the compiler is built as a cross compiler.
! 212:
! 213: `STANDARD_STARTFILE_PREFIX'
! 214: Define this macro as a C string constant if you wish to override
! 215: the standard choice of `/usr/local/lib/' as the default prefix to
! 216: try when searching for startup files such as `crt0.o'.
! 217:
! 218: `MD_STARTFILE_PREFIX'
! 219: If defined, this macro supplies an additional prefix to try after
! 220: the standard prefixes. `MD_EXEC_PREFIX' is not searched when the
! 221: `-b' option is used, or when the compiler is built as a cross
! 222: compiler.
! 223:
! 224: `MD_STARTFILE_PREFIX_1'
! 225: If defined, this macro supplies yet another prefix to try after the
! 226: standard prefixes. It is not searched when the `-b' option is
! 227: used, or when the compiler is built as a cross compiler.
! 228:
! 229: `INIT_ENVIRONMENT'
! 230: Define this macro as a C string constant if you with to set
! 231: environment variables for programs called by the driver, such as
! 232: the assembler and loader. The driver passes the value of this
! 233: macro to `putenv' to initialize the necessary environment
! 234: variables.
! 235:
! 236: `LOCAL_INCLUDE_DIR'
! 237: Define this macro as a C string constant if you wish to override
! 238: the standard choice of `/usr/local/include' as the default prefix
! 239: to try when searching for local header files. `LOCAL_INCLUDE_DIR'
! 240: comes before `SYSTEM_INCLUDE_DIR' in the search order.
! 241:
! 242: Cross compilers do not use this macro and do not search either
! 243: `/usr/local/include' or its replacement.
! 244:
! 245: `SYSTEM_INCLUDE_DIR'
! 246: Define this macro as a C string constant if you wish to specify a
! 247: system-specific directory to search for header files before the
! 248: standard directory. `SYSTEM_INCLUDE_DIR' comes before
! 249: `STANDARD_INCLUDE_DIR' in the search order.
! 250:
! 251: Cross compilers do not use this macro and do not search the
! 252: directory specified.
! 253:
! 254: `STANDARD_INCLUDE_DIR'
! 255: Define this macro as a C string constant if you wish to override
! 256: the standard choice of `/usr/include' as the default prefix to try
! 257: when searching for header files.
! 258:
! 259: Cross compilers do not use this macro and do not search either
! 260: `/usr/include' or its replacement.
! 261:
! 262: `INCLUDE_DEFAULTS'
! 263: Define this macro if you wish to override the entire default
! 264: search path for include files. The default search path includes
! 265: `GCC_INCLUDE_DIR', `LOCAL_INCLUDE_DIR', `SYSTEM_INCLUDE_DIR',
! 266: `GPLUSPLUS_INCLUDE_DIR', and `STANDARD_INCLUDE_DIR'. In addition,
! 267: `GPLUSPLUS_INCLUDE_DIR' and `GCC_INCLUDE_DIR' are defined
! 268: automatically by `Makefile', and specify private search areas for
! 269: GCC. The directory `GPLUSPLUS_INCLUDE_DIR' is used only for C++
! 270: programs.
! 271:
! 272: The definition should be an initializer for an array of structures.
! 273: Each array element should have two elements: the directory name (a
! 274: string constant) and a flag for C++-only directories. Mark the
! 275: end of the array with a null element. For example, here is the
! 276: definition used for VMS:
! 277:
! 278: #define INCLUDE_DEFAULTS \
! 279: { \
! 280: { "GNU_GXX_INCLUDE:", 1}, \
! 281: { "GNU_CC_INCLUDE:", 0}, \
! 282: { "SYS$SYSROOT:[SYSLIB.]", 0}, \
! 283: { ".", 0}, \
! 284: { 0, 0} \
! 285: }
! 286:
! 287: Here is the order of prefixes tried for exec files:
! 288:
! 289: 1. Any prefixes specified by the user with `-B'.
! 290:
! 291: 2. The environment variable `GCC_EXEC_PREFIX', if any.
! 292:
! 293: 3. The directories specified by the environment variable
! 294: `COMPILER_PATH'.
! 295:
! 296: 4. The macro `STANDARD_EXEC_PREFIX'.
! 297:
! 298: 5. `/usr/lib/gcc/'.
! 299:
! 300: 6. The macro `MD_EXEC_PREFIX', if any.
! 301:
! 302: Here is the order of prefixes tried for startfiles:
! 303:
! 304: 1. Any prefixes specified by the user with `-B'.
! 305:
! 306: 2. The environment variable `GCC_EXEC_PREFIX', if any.
! 307:
! 308: 3. The directories specified by the environment variable
! 309: `LIBRARY_PATH' (native only, cross compilers do not use this).
! 310:
! 311: 4. The macro `STANDARD_EXEC_PREFIX'.
! 312:
! 313: 5. `/usr/lib/gcc/'.
! 314:
! 315: 6. The macro `MD_EXEC_PREFIX', if any.
! 316:
! 317: 7. The macro `MD_STARTFILE_PREFIX', if any.
! 318:
! 319: 8. The macro `STANDARD_STARTFILE_PREFIX'.
! 320:
! 321: 9. `/lib/'.
! 322:
! 323: 10. `/usr/lib/'.
! 324:
! 325:
! 326: File: gcc.info, Node: Run-time Target, Next: Storage Layout, Prev: Driver, Up: Target Macros
! 327:
! 328: Run-time Target Specification
! 329: =============================
! 330:
! 331: Here are run-time target specifications.
! 332:
! 333: `CPP_PREDEFINES'
! 334: Define this to be a string constant containing `-D' options to
! 335: define the predefined macros that identify this machine and system.
! 336: These macros will be predefined unless the `-ansi' option is
! 337: specified.
! 338:
! 339: In addition, a parallel set of macros are predefined, whose names
! 340: are made by appending `__' at the beginning and at the end. These
! 341: `__' macros are permitted by the ANSI standard, so they are
! 342: predefined regardless of whether `-ansi' is specified.
! 343:
! 344: For example, on the Sun, one can use the following value:
! 345:
! 346: "-Dmc68000 -Dsun -Dunix"
! 347:
! 348: The result is to define the macros `__mc68000__', `__sun__' and
! 349: `__unix__' unconditionally, and the macros `mc68000', `sun' and
! 350: `unix' provided `-ansi' is not specified.
! 351:
! 352: `extern int target_flags;'
! 353: This declaration should be present.
! 354:
! 355: `TARGET_...'
! 356: This series of macros is to allow compiler command arguments to
! 357: enable or disable the use of optional features of the target
! 358: machine. For example, one machine description serves both the
! 359: 68000 and the 68020; a command argument tells the compiler whether
! 360: it should use 68020-only instructions or not. This command
! 361: argument works by means of a macro `TARGET_68020' that tests a bit
! 362: in `target_flags'.
! 363:
! 364: Define a macro `TARGET_FEATURENAME' for each such option. Its
! 365: definition should test a bit in `target_flags'; for example:
! 366:
! 367: #define TARGET_68020 (target_flags & 1)
! 368:
! 369: One place where these macros are used is in the
! 370: condition-expressions of instruction patterns. Note how
! 371: `TARGET_68020' appears frequently in the 68000 machine description
! 372: file, `m68k.md'. Another place they are used is in the
! 373: definitions of the other macros in the `MACHINE.h' file.
! 374:
! 375: `TARGET_SWITCHES'
! 376: This macro defines names of command options to set and clear bits
! 377: in `target_flags'. Its definition is an initializer with a
! 378: subgrouping for each command option.
! 379:
! 380: Each subgrouping contains a string constant, that defines the
! 381: option name, and a number, which contains the bits to set in
! 382: `target_flags'. A negative number says to clear bits instead; the
! 383: negative of the number is which bits to clear. The actual option
! 384: name is made by appending `-m' to the specified name.
! 385:
! 386: One of the subgroupings should have a null string. The number in
! 387: this grouping is the default value for `target_flags'. Any target
! 388: options act starting with that value.
! 389:
! 390: Here is an example which defines `-m68000' and `-m68020' with
! 391: opposite meanings, and picks the latter as the default:
! 392:
! 393: #define TARGET_SWITCHES \
! 394: { { "68020", 1}, \
! 395: { "68000", -1}, \
! 396: { "", 1}}
! 397:
! 398: `TARGET_OPTIONS'
! 399: This macro is similar to `TARGET_SWITCHES' but defines names of
! 400: command options that have values. Its definition is an
! 401: initializer with a subgrouping for each command option.
! 402:
! 403: Each subgrouping contains a string constant, that defines the
! 404: fixed part of the option name, and the address of a variable. The
! 405: variable, type `char *', is set to the variable part of the given
! 406: option if the fixed part matches. The actual option name is made
! 407: by appending `-m' to the specified name.
! 408:
! 409: Here is an example which defines `-mshort-data-NUMBER'. If the
! 410: given option is `-mshort-data-512', the variable `m88k_short_data'
! 411: will be set to the string `"512"'.
! 412:
! 413: extern char *m88k_short_data;
! 414: #define TARGET_OPTIONS \
! 415: { { "short-data-", &m88k_short_data } }
! 416:
! 417: `TARGET_VERSION'
! 418: This macro is a C statement to print on `stderr' a string
! 419: describing the particular machine description choice. Every
! 420: machine description should define `TARGET_VERSION'. For example:
! 421:
! 422: #ifdef MOTOROLA
! 423: #define TARGET_VERSION \
! 424: fprintf (stderr, " (68k, Motorola syntax)");
! 425: #else
! 426: #define TARGET_VERSION \
! 427: fprintf (stderr, " (68k, MIT syntax)");
! 428: #endif
! 429:
! 430: `OVERRIDE_OPTIONS'
! 431: Sometimes certain combinations of command options do not make
! 432: sense on a particular target machine. You can define a macro
! 433: `OVERRIDE_OPTIONS' to take account of this. This macro, if
! 434: defined, is executed once just after all the command options have
! 435: been parsed.
! 436:
! 437: Don't use this macro to turn on various extra optimizations for
! 438: `-O'. That is what `OPTIMIZATION_OPTIONS' is for.
! 439:
! 440: `OPTIMIZATION_OPTIONS (LEVEL)'
! 441: Some machines may desire to change what optimizations are
! 442: performed for various optimization levels. This macro, if
! 443: defined, is executed once just after the optimization level is
! 444: determined and before the remainder of the command options have
! 445: been parsed. Values set in this macro are used as the default
! 446: values for the other command line options.
! 447:
! 448: LEVEL is the optimization level specified; 2 if `-O2' is
! 449: specified, 1 if `-O' is specified, and 0 if neither is specified.
! 450:
! 451: You should not use this macro to change options that are not
! 452: machine-specific. These should uniformly selected by the same
! 453: optimization level on all supported machines. Use this macro to
! 454: enable machbine-specific optimizations.
! 455:
! 456: *Do not examine `write_symbols' in this macro!* The debugging
! 457: options are not supposed to alter the generated code.
! 458:
! 459: `CAN_DEBUG_WITHOUT_FP'
! 460: Define this macro if debugging can be performed even without a
! 461: frame pointer. If this macro is defined, GNU CC will turn on the
! 462: `-fomit-frame-pointer' option whenever `-O' is specified.
1.1.1.2 root 463:
464:
1.1.1.5 ! root 465: File: gcc.info, Node: Storage Layout, Next: Type Layout, Prev: Run-time Target, Up: Target Macros
1.1.1.2 root 466:
1.1.1.5 ! root 467: Storage Layout
! 468: ==============
1.1.1.2 root 469:
1.1.1.5 ! root 470: Note that the definitions of the macros in this table which are
! 471: sizes or alignments measured in bits do not need to be constant. They
! 472: can be C expressions that refer to static variables, such as the
! 473: `target_flags'. *Note Run-time Target::.
! 474:
! 475: `BITS_BIG_ENDIAN'
! 476: Define this macro to have the value 1 if the most significant bit
! 477: in a byte has the lowest number; otherwise define it to have the
! 478: value zero. This means that bit-field instructions count from the
! 479: most significant bit. If the machine has no bit-field
! 480: instructions, then this must still be defined, but it doesn't
! 481: matter which value it is defined to. This macro need not be a
! 482: constant.
! 483:
! 484: This macro does not affect the way structure fields are packed into
! 485: bytes or words; that is controlled by `BYTES_BIG_ENDIAN'.
! 486:
! 487: `BYTES_BIG_ENDIAN'
! 488: Define this macro to have the value 1 if the most significant byte
! 489: in a word has the lowest number. This macro need not be a
! 490: constant.
! 491:
! 492: `WORDS_BIG_ENDIAN'
! 493: Define this macro to have the value 1 if, in a multiword object,
! 494: the most significant word has the lowest number. This applies to
! 495: both memory locations and registers; GNU CC fundamentally assumes
! 496: that the order of words in memory is the same as the order in
! 497: registers. This macro need not be a constant.
! 498:
! 499: `LIBGCC2_WORDS_BIG_ENDIAN'
! 500: Define this macro if WORDS_BIG_ENDIAN is not constant. This must
! 501: be a constant value with the same meaning as WORDS_BIG_ENDIAN,
! 502: which will be used only when compiling libgcc2.c. Typically the
! 503: value will be set based on preprocessor defines.
! 504:
! 505: `FLOAT_WORDS_BIG_ENDIAN'
! 506: Define this macro to have the value 1 if `DFmode', `XFmode' or
! 507: `TFmode' floating point numbers are stored in memory with the word
! 508: containing the sign bit at the lowest address; otherwise define it
! 509: to have the value 0. This macro need not be a constant.
! 510:
! 511: You need not define this macro if the ordering is the same as for
! 512: multi-word integers.
! 513:
! 514: `BITS_PER_UNIT'
! 515: Define this macro to be the number of bits in an addressable
! 516: storage unit (byte); normally 8.
! 517:
! 518: `BITS_PER_WORD'
! 519: Number of bits in a word; normally 32.
! 520:
! 521: `MAX_BITS_PER_WORD'
! 522: Maximum number of bits in a word. If this is undefined, the
! 523: default is `BITS_PER_WORD'. Otherwise, it is the constant value
! 524: that is the largest value that `BITS_PER_WORD' can have at
! 525: run-time.
! 526:
! 527: `UNITS_PER_WORD'
! 528: Number of storage units in a word; normally 4.
! 529:
! 530: `MIN_UNITS_PER_WORD'
! 531: Minimum number of units in a word. If this is undefined, the
! 532: default is `UNITS_PER_WORD'. Otherwise, it is the constant value
! 533: that is the smallest value that `UNITS_PER_WORD' can have at
! 534: run-time.
! 535:
! 536: `POINTER_SIZE'
! 537: Width of a pointer, in bits. You must specify a value no wider
! 538: than the width of `Pmode'. If it is not equal to the width of
! 539: `Pmode', you must define `POINTERS_EXTEND_UNSIGNED'.
! 540:
! 541: `POINTERS_EXTEND_UNSIGNED'
! 542: A C expression whose value is nonzero if pointers that need to be
! 543: extended from being `POINTER_SIZE' bits wide to `Pmode' are
! 544: sign-extended and zero if they are zero-extended.
! 545:
! 546: You need not define this macro if the `POINTER_SIZE' is equal to
! 547: the width of `Pmode'.
! 548:
! 549: `PROMOTE_MODE (M, UNSIGNEDP, TYPE)'
! 550: A macro to update M and UNSIGNEDP when an object whose type is
! 551: TYPE and which has the specified mode and signedness is to be
! 552: stored in a register. This macro is only called when TYPE is a
! 553: scalar type.
! 554:
! 555: On most RISC machines, which only have operations that operate on
! 556: a full register, define this macro to set M to `word_mode' if M is
! 557: an integer mode narrower than `BITS_PER_WORD'. In most cases,
! 558: only integer modes should be widened because wider-precision
! 559: floating-point operations are usually more expensive than their
! 560: narrower counterparts.
! 561:
! 562: For most machines, the macro definition does not change UNSIGNEDP.
! 563: However, some machines, have instructions that preferentially
! 564: handle either signed or unsigned quantities of certain modes. For
! 565: example, on the DEC Alpha, 32-bit loads from memory and 32-bit add
! 566: instructions sign-extend the result to 64 bits. On such machines,
! 567: set UNSIGNEDP according to which kind of extension is more
! 568: efficient.
! 569:
! 570: Do not define this macro if it would never modify M.
! 571:
! 572: `PROMOTE_FUNCTION_ARGS'
! 573: Define this macro if the promotion described by `PROMOTE_MODE'
! 574: should also be done for outgoing function arguments.
! 575:
! 576: `PROMOTE_FUNCTION_RETURN'
! 577: Define this macro if the promotion described by `PROMOTE_MODE'
! 578: should also be done for the return value of functions.
! 579:
! 580: If this macro is defined, `FUNCTION_VALUE' must perform the same
! 581: promotions done by `PROMOTE_MODE'.
! 582:
! 583: `PROMOTE_FOR_CALL_ONLY'
! 584: Define this macro if the promotion described by `PROMOTE_MODE'
! 585: should *only* be performed for outgoing function arguments or
! 586: function return values, as specified by `PROMOTE_FUNCTION_ARGS'
! 587: and `PROMOTE_FUNCTION_RETURN', respectively.
! 588:
! 589: `PARM_BOUNDARY'
! 590: Normal alignment required for function parameters on the stack, in
! 591: bits. All stack parameters receive at least this much alignment
! 592: regardless of data type. On most machines, this is the same as the
! 593: size of an integer.
! 594:
! 595: `STACK_BOUNDARY'
! 596: Define this macro if you wish to preserve a certain alignment for
! 597: the stack pointer. The definition is a C expression for the
! 598: desired alignment (measured in bits).
! 599:
! 600: If `PUSH_ROUNDING' is not defined, the stack will always be aligned
! 601: to the specified boundary. If `PUSH_ROUNDING' is defined and
! 602: specifies a less strict alignment than `STACK_BOUNDARY', the stack
! 603: may be momentarily unaligned while pushing arguments.
! 604:
! 605: `FUNCTION_BOUNDARY'
! 606: Alignment required for a function entry point, in bits.
! 607:
! 608: `BIGGEST_ALIGNMENT'
! 609: Biggest alignment that any data type can require on this machine,
! 610: in bits.
! 611:
! 612: `BIGGEST_FIELD_ALIGNMENT'
! 613: Biggest alignment that any structure field can require on this
! 614: machine, in bits. If defined, this overrides `BIGGEST_ALIGNMENT'
! 615: for structure fields only.
! 616:
! 617: `MAX_OFILE_ALIGNMENT'
! 618: Biggest alignment supported by the object file format of this
! 619: machine. Use this macro to limit the alignment which can be
! 620: specified using the `__attribute__ ((aligned (N)))' construct. If
! 621: not defined, the default value is `BIGGEST_ALIGNMENT'.
! 622:
! 623: `DATA_ALIGNMENT (TYPE, BASIC-ALIGN)'
! 624: If defined, a C expression to compute the alignment for a static
! 625: variable. TYPE is the data type, and BASIC-ALIGN is the alignment
! 626: that the object would ordinarily have. The value of this macro is
! 627: used instead of that alignment to align the object.
! 628:
! 629: If this macro is not defined, then BASIC-ALIGN is used.
! 630:
! 631: One use of this macro is to increase alignment of medium-size data
! 632: to make it all fit in fewer cache lines. Another is to cause
! 633: character arrays to be word-aligned so that `strcpy' calls that
! 634: copy constants to character arrays can be done inline.
! 635:
! 636: `CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN)'
! 637: If defined, a C expression to compute the alignment given to a
! 638: constant that is being placed in memory. CONSTANT is the constant
! 639: and BASIC-ALIGN is the alignment that the object would ordinarily
! 640: have. The value of this macro is used instead of that alignment to
! 641: align the object.
! 642:
! 643: If this macro is not defined, then BASIC-ALIGN is used.
! 644:
! 645: The typical use of this macro is to increase alignment for string
! 646: constants to be word aligned so that `strcpy' calls that copy
! 647: constants can be done inline.
! 648:
! 649: `EMPTY_FIELD_BOUNDARY'
! 650: Alignment in bits to be given to a structure bit field that
! 651: follows an empty field such as `int : 0;'.
! 652:
! 653: Note that `PCC_BITFIELD_TYPE_MATTERS' also affects the alignment
! 654: that results from an empty field.
! 655:
! 656: `STRUCTURE_SIZE_BOUNDARY'
! 657: Number of bits which any structure or union's size must be a
! 658: multiple of. Each structure or union's size is rounded up to a
! 659: multiple of this.
! 660:
! 661: If you do not define this macro, the default is the same as
! 662: `BITS_PER_UNIT'.
! 663:
! 664: `STRICT_ALIGNMENT'
! 665: Define this macro to be the value 1 if instructions will fail to
! 666: work if given data not on the nominal alignment. If instructions
! 667: will merely go slower in that case, define this macro as 0.
! 668:
! 669: `PCC_BITFIELD_TYPE_MATTERS'
! 670: Define this if you wish to imitate the way many other C compilers
! 671: handle alignment of bitfields and the structures that contain them.
! 672:
! 673: The behavior is that the type written for a bitfield (`int',
! 674: `short', or other integer type) imposes an alignment for the
! 675: entire structure, as if the structure really did contain an
! 676: ordinary field of that type. In addition, the bitfield is placed
! 677: within the structure so that it would fit within such a field, not
! 678: crossing a boundary for it.
! 679:
! 680: Thus, on most machines, a bitfield whose type is written as `int'
! 681: would not cross a four-byte boundary, and would force four-byte
! 682: alignment for the whole structure. (The alignment used may not be
! 683: four bytes; it is controlled by the other alignment parameters.)
! 684:
! 685: If the macro is defined, its definition should be a C expression;
! 686: a nonzero value for the expression enables this behavior.
! 687:
! 688: Note that if this macro is not defined, or its value is zero, some
! 689: bitfields may cross more than one alignment boundary. The
! 690: compiler can support such references if there are `insv', `extv',
! 691: and `extzv' insns that can directly reference memory.
! 692:
! 693: The other known way of making bitfields work is to define
! 694: `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'. Then
! 695: every structure can be accessed with fullwords.
! 696:
! 697: Unless the machine has bitfield instructions or you define
! 698: `STRUCTURE_SIZE_BOUNDARY' that way, you must define
! 699: `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value.
! 700:
! 701: If your aim is to make GNU CC use the same conventions for laying
! 702: out bitfields as are used by another compiler, here is how to
! 703: investigate what the other compiler does. Compile and run this
! 704: program:
! 705:
! 706: struct foo1
! 707: {
! 708: char x;
! 709: char :0;
! 710: char y;
! 711: };
! 712:
! 713: struct foo2
! 714: {
! 715: char x;
! 716: int :0;
! 717: char y;
! 718: };
! 719:
! 720: main ()
! 721: {
! 722: printf ("Size of foo1 is %d\n",
! 723: sizeof (struct foo1));
! 724: printf ("Size of foo2 is %d\n",
! 725: sizeof (struct foo2));
! 726: exit (0);
! 727: }
! 728:
! 729: If this prints 2 and 5, then the compiler's behavior is what you
! 730: would get from `PCC_BITFIELD_TYPE_MATTERS'.
! 731:
! 732: `BITFIELD_NBYTES_LIMITED'
! 733: Like PCC_BITFIELD_TYPE_MATTERS except that its effect is limited to
! 734: aligning a bitfield within the structure.
! 735:
! 736: `ROUND_TYPE_SIZE (STRUCT, SIZE, ALIGN)'
! 737: Define this macro as an expression for the overall size of a
! 738: structure (given by STRUCT as a tree node) when the size computed
! 739: from the fields is SIZE and the alignment is ALIGN.
! 740:
! 741: The default is to round SIZE up to a multiple of ALIGN.
! 742:
! 743: `ROUND_TYPE_ALIGN (STRUCT, COMPUTED, SPECIFIED)'
! 744: Define this macro as an expression for the alignment of a structure
! 745: (given by STRUCT as a tree node) if the alignment computed in the
! 746: usual way is COMPUTED and the alignment explicitly specified was
! 747: SPECIFIED.
! 748:
! 749: The default is to use SPECIFIED if it is larger; otherwise, use
! 750: the smaller of COMPUTED and `BIGGEST_ALIGNMENT'
! 751:
! 752: `MAX_FIXED_MODE_SIZE'
! 753: An integer expression for the size in bits of the largest integer
! 754: machine mode that should actually be used. All integer machine
! 755: modes of this size or smaller can be used for structures and
! 756: unions with the appropriate sizes. If this macro is undefined,
! 757: `GET_MODE_BITSIZE (DImode)' is assumed.
! 758:
! 759: `CHECK_FLOAT_VALUE (MODE, VALUE, OVERFLOW)'
! 760: A C statement to validate the value VALUE (of type `double') for
! 761: mode MODE. This means that you check whether VALUE fits within
! 762: the possible range of values for mode MODE on this target machine.
! 763: The mode MODE is always a mode of class `MODE_FLOAT'. OVERFLOW
! 764: is nonzero if the value is already known to be out of range.
! 765:
! 766: If VALUE is not valid or if OVERFLOW is nonzero, you should set
! 767: OVERFLOW to 1 and then assign some valid value to VALUE. Allowing
! 768: an invalid value to go through the compiler can produce incorrect
! 769: assembler code which may even cause Unix assemblers to crash.
! 770:
! 771: This macro need not be defined if there is no work for it to do.
! 772:
! 773: `TARGET_FLOAT_FORMAT'
! 774: A code distinguishing the floating point format of the target
! 775: machine. There are three defined values:
! 776:
! 777: `IEEE_FLOAT_FORMAT'
! 778: This code indicates IEEE floating point. It is the default;
! 779: there is no need to define this macro when the format is IEEE.
! 780:
! 781: `VAX_FLOAT_FORMAT'
! 782: This code indicates the peculiar format used on the Vax.
! 783:
! 784: `UNKNOWN_FLOAT_FORMAT'
! 785: This code indicates any other format.
! 786:
! 787: The value of this macro is compared with `HOST_FLOAT_FORMAT'
! 788: (*note Config::.) to determine whether the target machine has the
! 789: same format as the host machine. If any other formats are
! 790: actually in use on supported machines, new codes should be defined
! 791: for them.
! 792:
! 793: The ordering of the component words of floating point values
! 794: stored in memory is controlled by `FLOAT_WORDS_BIG_ENDIAN' for the
! 795: target machine and `HOST_FLOAT_WORDS_BIG_ENDIAN' for the host.
1.1.1.2 root 796:
797:
1.1.1.5 ! root 798: File: gcc.info, Node: Type Layout, Next: Registers, Prev: Storage Layout, Up: Target Macros
1.1.1.2 root 799:
1.1.1.5 ! root 800: Layout of Source Language Data Types
1.1.1.4 root 801: ====================================
1.1.1.2 root 802:
1.1.1.5 ! root 803: These macros define the sizes and other characteristics of the
! 804: standard basic data types used in programs being compiled. Unlike the
! 805: macros in the previous section, these apply to specific features of C
! 806: and related languages, rather than to fundamental aspects of storage
! 807: layout.
! 808:
! 809: `INT_TYPE_SIZE'
! 810: A C expression for the size in bits of the type `int' on the
! 811: target machine. If you don't define this, the default is one word.
! 812:
! 813: `MAX_INT_TYPE_SIZE'
! 814: Maximum number for the size in bits of the type `int' on the target
! 815: machine. If this is undefined, the default is `INT_TYPE_SIZE'.
! 816: Otherwise, it is the constant value that is the largest value that
! 817: `INT_TYPE_SIZE' can have at run-time. This is used in `cpp'.
! 818:
! 819: `SHORT_TYPE_SIZE'
! 820: A C expression for the size in bits of the type `short' on the
! 821: target machine. If you don't define this, the default is half a
! 822: word. (If this would be less than one storage unit, it is rounded
! 823: up to one unit.)
! 824:
! 825: `LONG_TYPE_SIZE'
! 826: A C expression for the size in bits of the type `long' on the
! 827: target machine. If you don't define this, the default is one word.
! 828:
! 829: `MAX_LONG_TYPE_SIZE'
! 830: Maximum number for the size in bits of the type `long' on the
! 831: target machine. If this is undefined, the default is
! 832: `LONG_TYPE_SIZE'. Otherwise, it is the constant value that is the
! 833: largest value that `LONG_TYPE_SIZE' can have at run-time. This is
! 834: used in `cpp'.
! 835:
! 836: `LONG_LONG_TYPE_SIZE'
! 837: A C expression for the size in bits of the type `long long' on the
! 838: target machine. If you don't define this, the default is two
! 839: words. If you want to support GNU Ada on your machine, the value
! 840: of macro must be at least 64.
! 841:
! 842: `CHAR_TYPE_SIZE'
! 843: A C expression for the size in bits of the type `char' on the
! 844: target machine. If you don't define this, the default is one
! 845: quarter of a word. (If this would be less than one storage unit,
! 846: it is rounded up to one unit.)
! 847:
! 848: `MAX_CHAR_TYPE_SIZE'
! 849: Maximum number for the size in bits of the type `char' on the
! 850: target machine. If this is undefined, the default is
! 851: `CHAR_TYPE_SIZE'. Otherwise, it is the constant value that is the
! 852: largest value that `CHAR_TYPE_SIZE' can have at run-time. This is
! 853: used in `cpp'.
! 854:
! 855: `FLOAT_TYPE_SIZE'
! 856: A C expression for the size in bits of the type `float' on the
! 857: target machine. If you don't define this, the default is one word.
! 858:
! 859: `DOUBLE_TYPE_SIZE'
! 860: A C expression for the size in bits of the type `double' on the
! 861: target machine. If you don't define this, the default is two
! 862: words.
! 863:
! 864: `LONG_DOUBLE_TYPE_SIZE'
! 865: A C expression for the size in bits of the type `long double' on
! 866: the target machine. If you don't define this, the default is two
! 867: words.
! 868:
! 869: `DEFAULT_SIGNED_CHAR'
! 870: An expression whose value is 1 or 0, according to whether the type
! 871: `char' should be signed or unsigned by default. The user can
! 872: always override this default with the options `-fsigned-char' and
! 873: `-funsigned-char'.
! 874:
! 875: `DEFAULT_SHORT_ENUMS'
! 876: A C expression to determine whether to give an `enum' type only as
! 877: many bytes as it takes to represent the range of possible values
! 878: of that type. A nonzero value means to do that; a zero value
! 879: means all `enum' types should be allocated like `int'.
! 880:
! 881: If you don't define the macro, the default is 0.
! 882:
! 883: `SIZE_TYPE'
! 884: A C expression for a string describing the name of the data type
! 885: to use for size values. The typedef name `size_t' is defined
! 886: using the contents of the string.
! 887:
! 888: The string can contain more than one keyword. If so, separate
! 889: them with spaces, and write first any length keyword, then
! 890: `unsigned' if appropriate, and finally `int'. The string must
! 891: exactly match one of the data type names defined in the function
! 892: `init_decl_processing' in the file `c-decl.c'. You may not omit
! 893: `int' or change the order--that would cause the compiler to crash
! 894: on startup.
! 895:
! 896: If you don't define this macro, the default is `"long unsigned
! 897: int"'.
! 898:
! 899: `PTRDIFF_TYPE'
! 900: A C expression for a string describing the name of the data type
! 901: to use for the result of subtracting two pointers. The typedef
! 902: name `ptrdiff_t' is defined using the contents of the string. See
! 903: `SIZE_TYPE' above for more information.
! 904:
! 905: If you don't define this macro, the default is `"long int"'.
! 906:
! 907: `WCHAR_TYPE'
! 908: A C expression for a string describing the name of the data type
! 909: to use for wide characters. The typedef name `wchar_t' is defined
! 910: using the contents of the string. See `SIZE_TYPE' above for more
! 911: information.
1.1.1.2 root 912:
1.1.1.5 ! root 913: If you don't define this macro, the default is `"int"'.
1.1.1.2 root 914:
1.1.1.5 ! root 915: `WCHAR_TYPE_SIZE'
! 916: A C expression for the size in bits of the data type for wide
! 917: characters. This is used in `cpp', which cannot make use of
! 918: `WCHAR_TYPE'.
! 919:
! 920: `MAX_WCHAR_TYPE_SIZE'
! 921: Maximum number for the size in bits of the data type for wide
! 922: characters. If this is undefined, the default is
! 923: `WCHAR_TYPE_SIZE'. Otherwise, it is the constant value that is the
! 924: largest value that `WCHAR_TYPE_SIZE' can have at run-time. This is
! 925: used in `cpp'.
! 926:
! 927: `OBJC_INT_SELECTORS'
! 928: Define this macro if the type of Objective C selectors should be
! 929: `int'.
! 930:
! 931: If this macro is not defined, then selectors should have the type
! 932: `struct objc_selector *'.
! 933:
! 934: `OBJC_SELECTORS_WITHOUT_LABELS'
! 935: Define this macro if the compiler can group all the selectors
! 936: together into a vector and use just one label at the beginning of
! 937: the vector. Otherwise, the compiler must give each selector its
! 938: own assembler label.
! 939:
! 940: On certain machines, it is important to have a separate label for
! 941: each selector because this enables the linker to eliminate
! 942: duplicate selectors.
! 943:
! 944: `TARGET_BELL'
! 945: A C constant expression for the integer value for escape sequence
! 946: `\a'.
! 947:
! 948: `TARGET_BS'
! 949: `TARGET_TAB'
! 950: `TARGET_NEWLINE'
! 951: C constant expressions for the integer values for escape sequences
! 952: `\b', `\t' and `\n'.
! 953:
! 954: `TARGET_VT'
! 955: `TARGET_FF'
! 956: `TARGET_CR'
! 957: C constant expressions for the integer values for escape sequences
! 958: `\v', `\f' and `\r'.
1.1.1.2 root 959:
960:
1.1.1.5 ! root 961: File: gcc.info, Node: Registers, Next: Register Classes, Prev: Type Layout, Up: Target Macros
1.1.1.2 root 962:
1.1.1.5 ! root 963: Register Usage
! 964: ==============
1.1.1.2 root 965:
1.1.1.5 ! root 966: This section explains how to describe what registers the target
! 967: machine has, and how (in general) they can be used.
1.1.1.2 root 968:
1.1.1.5 ! root 969: The description of which registers a specific instruction can use is
! 970: done with register classes; see *Note Register Classes::. For
! 971: information on using registers to access a stack frame, see *Note Frame
! 972: Registers::. For passing values in registers, see *Note Register
! 973: Arguments::. For returning values in registers, see *Note Scalar
! 974: Return::.
1.1.1.2 root 975:
1.1.1.5 ! root 976: * Menu:
1.1.1.2 root 977:
1.1.1.5 ! root 978: * Register Basics:: Number and kinds of registers.
! 979: * Allocation Order:: Order in which registers are allocated.
! 980: * Values in Registers:: What kinds of values each reg can hold.
! 981: * Leaf Functions:: Renumbering registers for leaf functions.
! 982: * Stack Registers:: Handling a register stack such as 80387.
! 983: * Obsolete Register Macros:: Macros formerly used for the 80387.
! 984:
! 985:
! 986: File: gcc.info, Node: Register Basics, Next: Allocation Order, Up: Registers
1.1.1.2 root 987:
1.1.1.5 ! root 988: Basic Characteristics of Registers
! 989: ----------------------------------
1.1.1.3 root 990:
1.1.1.5 ! root 991: Registers have various characteristics.
1.1.1.3 root 992:
1.1.1.5 ! root 993: `FIRST_PSEUDO_REGISTER'
! 994: Number of hardware registers known to the compiler. They receive
! 995: numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first
! 996: pseudo register's number really is assigned the number
! 997: `FIRST_PSEUDO_REGISTER'.
! 998:
! 999: `FIXED_REGISTERS'
! 1000: An initializer that says which registers are used for fixed
! 1001: purposes all throughout the compiled code and are therefore not
! 1002: available for general allocation. These would include the stack
! 1003: pointer, the frame pointer (except on machines where that can be
! 1004: used as a general register when no frame pointer is needed), the
! 1005: program counter on machines where that is considered one of the
! 1006: addressable registers, and any other numbered register with a
! 1007: standard use.
! 1008:
! 1009: This information is expressed as a sequence of numbers, separated
! 1010: by commas and surrounded by braces. The Nth number is 1 if
! 1011: register N is fixed, 0 otherwise.
! 1012:
! 1013: The table initialized from this macro, and the table initialized by
! 1014: the following one, may be overridden at run time either
! 1015: automatically, by the actions of the macro
! 1016: `CONDITIONAL_REGISTER_USAGE', or by the user with the command
! 1017: options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'.
! 1018:
! 1019: `CALL_USED_REGISTERS'
! 1020: Like `FIXED_REGISTERS' but has 1 for each register that is
! 1021: clobbered (in general) by function calls as well as for fixed
! 1022: registers. This macro therefore identifies the registers that are
! 1023: not available for general allocation of values that must live
! 1024: across function calls.
! 1025:
! 1026: If a register has 0 in `CALL_USED_REGISTERS', the compiler
! 1027: automatically saves it on function entry and restores it on
! 1028: function exit, if the register is used within the function.
! 1029:
! 1030: `CONDITIONAL_REGISTER_USAGE'
! 1031: Zero or more C statements that may conditionally modify two
! 1032: variables `fixed_regs' and `call_used_regs' (both of type `char
! 1033: []') after they have been initialized from the two preceding
! 1034: macros.
! 1035:
! 1036: This is necessary in case the fixed or call-clobbered registers
! 1037: depend on target flags.
! 1038:
! 1039: You need not define this macro if it has no work to do.
! 1040:
! 1041: If the usage of an entire class of registers depends on the target
! 1042: flags, you may indicate this to GCC by using this macro to modify
! 1043: `fixed_regs' and `call_used_regs' to 1 for each of the registers
! 1044: in the classes which should not be used by GCC. Also define the
! 1045: macro `REG_CLASS_FROM_LETTER' to return `NO_REGS' if it is called
! 1046: with a letter for a class that shouldn't be used.
! 1047:
! 1048: (However, if this class is not included in `GENERAL_REGS' and all
! 1049: of the insn patterns whose constraints permit this class are
! 1050: controlled by target switches, then GCC will automatically avoid
! 1051: using these registers when the target switches are opposed to
! 1052: them.)
! 1053:
! 1054: `NON_SAVING_SETJMP'
! 1055: If this macro is defined and has a nonzero value, it means that
! 1056: `setjmp' and related functions fail to save the registers, or that
! 1057: `longjmp' fails to restore them. To compensate, the compiler
! 1058: avoids putting variables in registers in functions that use
! 1059: `setjmp'.
! 1060:
! 1061: `INCOMING_REGNO (OUT)'
! 1062: Define this macro if the target machine has register windows.
! 1063: This C expression returns the register number as seen by the
! 1064: called function corresponding to the register number OUT as seen
! 1065: by the calling function. Return OUT if register number OUT is not
! 1066: an outbound register.
! 1067:
! 1068: `OUTGOING_REGNO (IN)'
! 1069: Define this macro if the target machine has register windows.
! 1070: This C expression returns the register number as seen by the
! 1071: calling function corresponding to the register number IN as seen
! 1072: by the called function. Return IN if register number IN is not an
! 1073: inbound register.
1.1.1.2 root 1074:
1075:
1.1.1.5 ! root 1076: File: gcc.info, Node: Allocation Order, Next: Values in Registers, Prev: Register Basics, Up: Registers
1.1.1.2 root 1077:
1.1.1.5 ! root 1078: Order of Allocation of Registers
! 1079: --------------------------------
1.1.1.2 root 1080:
1.1.1.5 ! root 1081: Registers are allocated in order.
1.1.1.4 root 1082:
1.1.1.5 ! root 1083: `REG_ALLOC_ORDER'
! 1084: If defined, an initializer for a vector of integers, containing the
! 1085: numbers of hard registers in the order in which GNU CC should
! 1086: prefer to use them (from most preferred to least).
1.1.1.4 root 1087:
1.1.1.5 ! root 1088: If this macro is not defined, registers are used lowest numbered
! 1089: first (all else being equal).
1.1.1.2 root 1090:
1.1.1.5 ! root 1091: One use of this macro is on machines where the highest numbered
! 1092: registers must always be saved and the save-multiple-registers
! 1093: instruction supports only sequences of consecutive registers. On
! 1094: such machines, define `REG_ALLOC_ORDER' to be an initializer that
! 1095: lists the highest numbered allocatable register first.
! 1096:
! 1097: `ORDER_REGS_FOR_LOCAL_ALLOC'
! 1098: A C statement (sans semicolon) to choose the order in which to
! 1099: allocate hard registers for pseudo-registers local to a basic
! 1100: block.
! 1101:
! 1102: Store the desired register order in the array `reg_alloc_order'.
! 1103: Element 0 should be the register to allocate first; element 1, the
! 1104: next register; and so on.
1.1.1.2 root 1105:
1.1.1.5 ! root 1106: The macro body should not assume anything about the contents of
! 1107: `reg_alloc_order' before execution of the macro.
1.1.1.2 root 1108:
1.1.1.5 ! root 1109: On most machines, it is not necessary to define this macro.
1.1.1.2 root 1110:
1111:
1.1.1.5 ! root 1112: File: gcc.info, Node: Values in Registers, Next: Leaf Functions, Prev: Allocation Order, Up: Registers
1.1.1.2 root 1113:
1.1.1.5 ! root 1114: How Values Fit in Registers
! 1115: ---------------------------
1.1.1.2 root 1116:
1.1.1.5 ! root 1117: This section discusses the macros that describe which kinds of values
! 1118: (specifically, which machine modes) each register can hold, and how many
! 1119: consecutive registers are needed for a given mode.
! 1120:
! 1121: `HARD_REGNO_NREGS (REGNO, MODE)'
! 1122: A C expression for the number of consecutive hard registers,
! 1123: starting at register number REGNO, required to hold a value of mode
! 1124: MODE.
! 1125:
! 1126: On a machine where all registers are exactly one word, a suitable
! 1127: definition of this macro is
! 1128:
! 1129: #define HARD_REGNO_NREGS(REGNO, MODE) \
! 1130: ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \
! 1131: / UNITS_PER_WORD))
! 1132:
! 1133: `HARD_REGNO_MODE_OK (REGNO, MODE)'
! 1134: A C expression that is nonzero if it is permissible to store a
! 1135: value of mode MODE in hard register number REGNO (or in several
! 1136: registers starting with that one). For a machine where all
! 1137: registers are equivalent, a suitable definition is
! 1138:
! 1139: #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
! 1140:
! 1141: It is not necessary for this macro to check for the numbers of
! 1142: fixed registers, because the allocation mechanism considers them
! 1143: to be always occupied.
! 1144:
! 1145: On some machines, double-precision values must be kept in even/odd
! 1146: register pairs. The way to implement that is to define this macro
! 1147: to reject odd register numbers for such modes.
! 1148:
! 1149: The minimum requirement for a mode to be OK in a register is that
! 1150: the `movMODE' instruction pattern support moves between the
! 1151: register and any other hard register for which the mode is OK; and
! 1152: that moving a value into the register and back out not alter it.
! 1153:
! 1154: Since the same instruction used to move `SImode' will work for all
! 1155: narrower integer modes, it is not necessary on any machine for
! 1156: `HARD_REGNO_MODE_OK' to distinguish between these modes, provided
! 1157: you define patterns `movhi', etc., to take advantage of this. This
! 1158: is useful because of the interaction between `HARD_REGNO_MODE_OK'
! 1159: and `MODES_TIEABLE_P'; it is very desirable for all integer modes
! 1160: to be tieable.
! 1161:
! 1162: Many machines have special registers for floating point arithmetic.
! 1163: Often people assume that floating point machine modes are allowed
! 1164: only in floating point registers. This is not true. Any
! 1165: registers that can hold integers can safely *hold* a floating
! 1166: point machine mode, whether or not floating arithmetic can be done
! 1167: on it in those registers. Integer move instructions can be used
! 1168: to move the values.
! 1169:
! 1170: On some machines, though, the converse is true: fixed-point machine
! 1171: modes may not go in floating registers. This is true if the
! 1172: floating registers normalize any value stored in them, because
! 1173: storing a non-floating value there would garble it. In this case,
! 1174: `HARD_REGNO_MODE_OK' should reject fixed-point machine modes in
! 1175: floating registers. But if the floating registers do not
! 1176: automatically normalize, if you can store any bit pattern in one
! 1177: and retrieve it unchanged without a trap, then any machine mode
! 1178: may go in a floating register, so you can define this macro to say
! 1179: so.
! 1180:
! 1181: The primary significance of special floating registers is rather
! 1182: that they are the registers acceptable in floating point arithmetic
! 1183: instructions. However, this is of no concern to
! 1184: `HARD_REGNO_MODE_OK'. You handle it by writing the proper
! 1185: constraints for those instructions.
! 1186:
! 1187: On some machines, the floating registers are especially slow to
! 1188: access, so that it is better to store a value in a stack frame
! 1189: than in such a register if floating point arithmetic is not being
! 1190: done. As long as the floating registers are not in class
! 1191: `GENERAL_REGS', they will not be used unless some pattern's
! 1192: constraint asks for one.
! 1193:
! 1194: `MODES_TIEABLE_P (MODE1, MODE2)'
! 1195: A C expression that is nonzero if it is desirable to choose
! 1196: register allocation so as to avoid move instructions between a
! 1197: value of mode MODE1 and a value of mode MODE2.
! 1198:
! 1199: If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R,
! 1200: MODE2)' are ever different for any R, then `MODES_TIEABLE_P (MODE1,
! 1201: MODE2)' must be zero.
1.1 root 1202:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.