|
|
1.1.1.3 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.4 ! root 6: Published by the Free Software Foundation 59 Temple Place - Suite 330
! 7: Boston, MA 02111-1307 USA
1.1 root 8:
1.1.1.4 ! 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.3 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.3 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.4 ! root 33: File: gcc.info, Node: Library Calls, Next: Addressing Modes, Prev: Trampolines, Up: Target Macros
1.1.1.3 root 34:
1.1.1.4 ! root 35: Implicit Calls to Library Routines
! 36: ==================================
1.1.1.3 root 37:
1.1.1.4 ! root 38: Here is an explanation of implicit calls to library routines.
1.1.1.3 root 39:
1.1.1.4 ! root 40: `MULSI3_LIBCALL'
! 41: A C string constant giving the name of the function to call for
! 42: multiplication of one signed full-word by another. If you do not
! 43: define this macro, the default name is used, which is `__mulsi3',
! 44: a function defined in `libgcc.a'.
! 45:
! 46: `DIVSI3_LIBCALL'
! 47: A C string constant giving the name of the function to call for
! 48: division of one signed full-word by another. If you do not define
! 49: this macro, the default name is used, which is `__divsi3', a
! 50: function defined in `libgcc.a'.
! 51:
! 52: `UDIVSI3_LIBCALL'
! 53: A C string constant giving the name of the function to call for
! 54: division of one unsigned full-word by another. If you do not
! 55: define this macro, the default name is used, which is `__udivsi3',
! 56: a function defined in `libgcc.a'.
! 57:
! 58: `MODSI3_LIBCALL'
! 59: A C string constant giving the name of the function to call for the
! 60: remainder in division of one signed full-word by another. If you
! 61: do not define this macro, the default name is used, which is
! 62: `__modsi3', a function defined in `libgcc.a'.
! 63:
! 64: `UMODSI3_LIBCALL'
! 65: A C string constant giving the name of the function to call for the
! 66: remainder in division of one unsigned full-word by another. If
! 67: you do not define this macro, the default name is used, which is
! 68: `__umodsi3', a function defined in `libgcc.a'.
! 69:
! 70: `MULDI3_LIBCALL'
! 71: A C string constant giving the name of the function to call for
! 72: multiplication of one signed double-word by another. If you do not
! 73: define this macro, the default name is used, which is `__muldi3',
! 74: a function defined in `libgcc.a'.
! 75:
! 76: `DIVDI3_LIBCALL'
! 77: A C string constant giving the name of the function to call for
! 78: division of one signed double-word by another. If you do not
! 79: define this macro, the default name is used, which is `__divdi3', a
! 80: function defined in `libgcc.a'.
! 81:
! 82: `UDIVDI3_LIBCALL'
! 83: A C string constant giving the name of the function to call for
! 84: division of one unsigned full-word by another. If you do not
! 85: define this macro, the default name is used, which is `__udivdi3',
! 86: a function defined in `libgcc.a'.
! 87:
! 88: `MODDI3_LIBCALL'
! 89: A C string constant giving the name of the function to call for the
! 90: remainder in division of one signed double-word by another. If
! 91: you do not define this macro, the default name is used, which is
! 92: `__moddi3', a function defined in `libgcc.a'.
! 93:
! 94: `UMODDI3_LIBCALL'
! 95: A C string constant giving the name of the function to call for the
! 96: remainder in division of one unsigned full-word by another. If
! 97: you do not define this macro, the default name is used, which is
! 98: `__umoddi3', a function defined in `libgcc.a'.
! 99:
! 100: `INIT_TARGET_OPTABS'
! 101: Define this macro as a C statement that declares additional library
! 102: routines renames existing ones. `init_optabs' calls this macro
! 103: after initializing all the normal library routines.
! 104:
! 105: `TARGET_EDOM'
! 106: The value of `EDOM' on the target machine, as a C integer constant
! 107: expression. If you don't define this macro, GNU CC does not
! 108: attempt to deposit the value of `EDOM' into `errno' directly.
! 109: Look in `/usr/include/errno.h' to find the value of `EDOM' on your
! 110: system.
! 111:
! 112: If you do not define `TARGET_EDOM', then compiled code reports
! 113: domain errors by calling the library function and letting it
! 114: report the error. If mathematical functions on your system use
! 115: `matherr' when there is an error, then you should leave
! 116: `TARGET_EDOM' undefined so that `matherr' is used normally.
! 117:
! 118: `GEN_ERRNO_RTX'
! 119: Define this macro as a C expression to create an rtl expression
! 120: that refers to the global "variable" `errno'. (On certain systems,
! 121: `errno' may not actually be a variable.) If you don't define this
! 122: macro, a reasonable default is used.
! 123:
! 124: `TARGET_MEM_FUNCTIONS'
! 125: Define this macro if GNU CC should generate calls to the System V
! 126: (and ANSI C) library functions `memcpy' and `memset' rather than
! 127: the BSD functions `bcopy' and `bzero'.
! 128:
! 129: `LIBGCC_NEEDS_DOUBLE'
! 130: Define this macro if only `float' arguments cannot be passed to
! 131: library routines (so they must be converted to `double'). This
! 132: macro affects both how library calls are generated and how the
! 133: library routines in `libgcc1.c' accept their arguments. It is
! 134: useful on machines where floating and fixed point arguments are
! 135: passed differently, such as the i860.
! 136:
! 137: `FLOAT_ARG_TYPE'
! 138: Define this macro to override the type used by the library
! 139: routines to pick up arguments of type `float'. (By default, they
! 140: use a union of `float' and `int'.)
! 141:
! 142: The obvious choice would be `float'--but that won't work with
! 143: traditional C compilers that expect all arguments declared as
! 144: `float' to arrive as `double'. To avoid this conversion, the
! 145: library routines ask for the value as some other type and then
! 146: treat it as a `float'.
! 147:
! 148: On some systems, no other type will work for this. For these
! 149: systems, you must use `LIBGCC_NEEDS_DOUBLE' instead, to force
! 150: conversion of the values `double' before they are passed.
! 151:
! 152: `FLOATIFY (PASSED-VALUE)'
! 153: Define this macro to override the way library routines redesignate
! 154: a `float' argument as a `float' instead of the type it was passed
! 155: as. The default is an expression which takes the `float' field of
! 156: the union.
! 157:
! 158: `FLOAT_VALUE_TYPE'
! 159: Define this macro to override the type used by the library
! 160: routines to return values that ought to have type `float'. (By
! 161: default, they use `int'.)
! 162:
! 163: The obvious choice would be `float'--but that won't work with
! 164: traditional C compilers gratuitously convert values declared as
! 165: `float' into `double'.
! 166:
! 167: `INTIFY (FLOAT-VALUE)'
! 168: Define this macro to override the way the value of a
! 169: `float'-returning library routine should be packaged in order to
! 170: return it. These functions are actually declared to return type
! 171: `FLOAT_VALUE_TYPE' (normally `int').
! 172:
! 173: These values can't be returned as type `float' because traditional
! 174: C compilers would gratuitously convert the value to a `double'.
! 175:
! 176: A local variable named `intify' is always available when the macro
! 177: `INTIFY' is used. It is a union of a `float' field named `f' and
! 178: a field named `i' whose type is `FLOAT_VALUE_TYPE' or `int'.
! 179:
! 180: If you don't define this macro, the default definition works by
! 181: copying the value through that union.
! 182:
! 183: `nongcc_SI_type'
! 184: Define this macro as the name of the data type corresponding to
! 185: `SImode' in the system's own C compiler.
! 186:
! 187: You need not define this macro if that type is `long int', as it
! 188: usually is.
! 189:
! 190: `nongcc_word_type'
! 191: Define this macro as the name of the data type corresponding to the
! 192: word_mode in the system's own C compiler.
! 193:
! 194: You need not define this macro if that type is `long int', as it
! 195: usually is.
! 196:
! 197: `perform_...'
! 198: Define these macros to supply explicit C statements to carry out
! 199: various arithmetic operations on types `float' and `double' in the
! 200: library routines in `libgcc1.c'. See that file for a full list of
! 201: these macros and their arguments.
! 202:
! 203: On most machines, you don't need to define any of these macros,
! 204: because the C compiler that comes with the system takes care of
! 205: doing them.
! 206:
! 207: `NEXT_OBJC_RUNTIME'
! 208: Define this macro to generate code for Objective C message sending
! 209: using the calling convention of the NeXT system. This calling
! 210: convention involves passing the object, the selector and the
! 211: method arguments all at once to the method-lookup library function.
! 212:
! 213: The default calling convention passes just the object and the
! 214: selector to the lookup function, which returns a pointer to the
! 215: method.
1.1.1.3 root 216:
217:
1.1.1.4 ! root 218: File: gcc.info, Node: Addressing Modes, Next: Condition Code, Prev: Library Calls, Up: Target Macros
1.1.1.3 root 219:
1.1.1.4 ! root 220: Addressing Modes
! 221: ================
1.1.1.3 root 222:
1.1.1.4 ! root 223: This is about addressing modes.
1.1.1.3 root 224:
1.1.1.4 ! root 225: `HAVE_POST_INCREMENT'
! 226: Define this macro if the machine supports post-increment
! 227: addressing.
! 228:
! 229: `HAVE_PRE_INCREMENT'
! 230: `HAVE_POST_DECREMENT'
! 231: `HAVE_PRE_DECREMENT'
! 232: Similar for other kinds of addressing.
! 233:
! 234: `CONSTANT_ADDRESS_P (X)'
! 235: A C expression that is 1 if the RTX X is a constant which is a
! 236: valid address. On most machines, this can be defined as
! 237: `CONSTANT_P (X)', but a few machines are more restrictive in which
! 238: constant addresses are supported.
! 239:
! 240: `CONSTANT_P' accepts integer-values expressions whose values are
! 241: not explicitly known, such as `symbol_ref', `label_ref', and
! 242: `high' expressions and `const' arithmetic expressions, in addition
! 243: to `const_int' and `const_double' expressions.
! 244:
! 245: `MAX_REGS_PER_ADDRESS'
! 246: A number, the maximum number of registers that can appear in a
! 247: valid memory address. Note that it is up to you to specify a
! 248: value equal to the maximum number that `GO_IF_LEGITIMATE_ADDRESS'
! 249: would ever accept.
! 250:
! 251: `GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)'
! 252: A C compound statement with a conditional `goto LABEL;' executed
! 253: if X (an RTX) is a legitimate memory address on the target machine
! 254: for a memory operand of mode MODE.
! 255:
! 256: It usually pays to define several simpler macros to serve as
! 257: subroutines for this one. Otherwise it may be too complicated to
! 258: understand.
! 259:
! 260: This macro must exist in two variants: a strict variant and a
! 261: non-strict one. The strict variant is used in the reload pass. It
! 262: must be defined so that any pseudo-register that has not been
! 263: allocated a hard register is considered a memory reference. In
! 264: contexts where some kind of register is required, a pseudo-register
! 265: with no hard register must be rejected.
! 266:
! 267: The non-strict variant is used in other passes. It must be
! 268: defined to accept all pseudo-registers in every context where some
! 269: kind of register is required.
! 270:
! 271: Compiler source files that want to use the strict variant of this
! 272: macro define the macro `REG_OK_STRICT'. You should use an `#ifdef
! 273: REG_OK_STRICT' conditional to define the strict variant in that
! 274: case and the non-strict variant otherwise.
! 275:
! 276: Subroutines to check for acceptable registers for various purposes
! 277: (one for base registers, one for index registers, and so on) are
! 278: typically among the subroutines used to define
! 279: `GO_IF_LEGITIMATE_ADDRESS'. Then only these subroutine macros
! 280: need have two variants; the higher levels of macros may be the
! 281: same whether strict or not.
! 282:
! 283: Normally, constant addresses which are the sum of a `symbol_ref'
! 284: and an integer are stored inside a `const' RTX to mark them as
! 285: constant. Therefore, there is no need to recognize such sums
! 286: specifically as legitimate addresses. Normally you would simply
! 287: recognize any `const' as legitimate.
! 288:
! 289: Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle constant
! 290: sums that are not marked with `const'. It assumes that a naked
! 291: `plus' indicates indexing. If so, then you *must* reject such
! 292: naked constant sums as illegitimate addresses, so that none of
! 293: them will be given to `PRINT_OPERAND_ADDRESS'.
! 294:
! 295: On some machines, whether a symbolic address is legitimate depends
! 296: on the section that the address refers to. On these machines,
! 297: define the macro `ENCODE_SECTION_INFO' to store the information
! 298: into the `symbol_ref', and then check for it here. When you see a
! 299: `const', you will have to look inside it to find the `symbol_ref'
! 300: in order to determine the section. *Note Assembler Format::.
! 301:
! 302: The best way to modify the name string is by adding text to the
! 303: beginning, with suitable punctuation to prevent any ambiguity.
! 304: Allocate the new name in `saveable_obstack'. You will have to
! 305: modify `ASM_OUTPUT_LABELREF' to remove and decode the added text
! 306: and output the name accordingly, and define `STRIP_NAME_ENCODING'
! 307: to access the original name string.
! 308:
! 309: You can check the information stored here into the `symbol_ref' in
! 310: the definitions of the macros `GO_IF_LEGITIMATE_ADDRESS' and
! 311: `PRINT_OPERAND_ADDRESS'.
! 312:
! 313: `REG_OK_FOR_BASE_P (X)'
! 314: A C expression that is nonzero if X (assumed to be a `reg' RTX) is
! 315: valid for use as a base register. For hard registers, it should
! 316: always accept those which the hardware permits and reject the
! 317: others. Whether the macro accepts or rejects pseudo registers
! 318: must be controlled by `REG_OK_STRICT' as described above. This
! 319: usually requires two variant definitions, of which `REG_OK_STRICT'
! 320: controls the one actually used.
! 321:
! 322: `REG_OK_FOR_INDEX_P (X)'
! 323: A C expression that is nonzero if X (assumed to be a `reg' RTX) is
! 324: valid for use as an index register.
! 325:
! 326: The difference between an index register and a base register is
! 327: that the index register may be scaled. If an address involves the
! 328: sum of two registers, neither one of them scaled, then either one
! 329: may be labeled the "base" and the other the "index"; but whichever
! 330: labeling is used must fit the machine's constraints of which
! 331: registers may serve in each capacity. The compiler will try both
! 332: labelings, looking for one that is valid, and will reload one or
! 333: both registers only if neither labeling works.
! 334:
! 335: `LEGITIMIZE_ADDRESS (X, OLDX, MODE, WIN)'
! 336: A C compound statement that attempts to replace X with a valid
! 337: memory address for an operand of mode MODE. WIN will be a C
! 338: statement label elsewhere in the code; the macro definition may use
! 339:
! 340: GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN);
! 341:
! 342: to avoid further processing if the address has become legitimate.
! 343:
! 344: X will always be the result of a call to `break_out_memory_refs',
! 345: and OLDX will be the operand that was given to that function to
! 346: produce X.
! 347:
! 348: The code generated by this macro should not alter the substructure
! 349: of X. If it transforms X into a more legitimate form, it should
! 350: assign X (which will always be a C variable) a new value.
! 351:
! 352: It is not necessary for this macro to come up with a legitimate
! 353: address. The compiler has standard ways of doing so in all cases.
! 354: In fact, it is safe for this macro to do nothing. But often a
! 355: machine-dependent strategy can generate better code.
! 356:
! 357: `GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL)'
! 358: A C statement or compound statement with a conditional `goto
! 359: LABEL;' executed if memory address X (an RTX) can have different
! 360: meanings depending on the machine mode of the memory reference it
! 361: is used for or if the address is valid for some modes but not
! 362: others.
! 363:
! 364: Autoincrement and autodecrement addresses typically have
! 365: mode-dependent effects because the amount of the increment or
! 366: decrement is the size of the operand being addressed. Some
! 367: machines have other mode-dependent addresses. Many RISC machines
! 368: have no mode-dependent addresses.
! 369:
! 370: You may assume that ADDR is a valid address for the machine.
! 371:
! 372: `LEGITIMATE_CONSTANT_P (X)'
! 373: A C expression that is nonzero if X is a legitimate constant for
! 374: an immediate operand on the target machine. You can assume that X
! 375: satisfies `CONSTANT_P', so you need not check this. In fact, `1'
! 376: is a suitable definition for this macro on machines where anything
! 377: `CONSTANT_P' is valid.
1.1.1.3 root 378:
379:
1.1.1.4 ! root 380: File: gcc.info, Node: Condition Code, Next: Costs, Prev: Addressing Modes, Up: Target Macros
1.1.1.3 root 381:
1.1.1.4 ! root 382: Condition Code Status
! 383: =====================
1.1.1.3 root 384:
1.1.1.4 ! root 385: This describes the condition code status.
1.1.1.3 root 386:
1.1.1.4 ! root 387: The file `conditions.h' defines a variable `cc_status' to describe
! 388: how the condition code was computed (in case the interpretation of the
! 389: condition code depends on the instruction that it was set by). This
! 390: variable contains the RTL expressions on which the condition code is
! 391: currently based, and several standard flags.
! 392:
! 393: Sometimes additional machine-specific flags must be defined in the
! 394: machine description header file. It can also add additional
! 395: machine-specific information by defining `CC_STATUS_MDEP'.
! 396:
! 397: `CC_STATUS_MDEP'
! 398: C code for a data type which is used for declaring the `mdep'
! 399: component of `cc_status'. It defaults to `int'.
! 400:
! 401: This macro is not used on machines that do not use `cc0'.
! 402:
! 403: `CC_STATUS_MDEP_INIT'
! 404: A C expression to initialize the `mdep' field to "empty". The
! 405: default definition does nothing, since most machines don't use the
! 406: field anyway. If you want to use the field, you should probably
! 407: define this macro to initialize it.
! 408:
! 409: This macro is not used on machines that do not use `cc0'.
! 410:
! 411: `NOTICE_UPDATE_CC (EXP, INSN)'
! 412: A C compound statement to set the components of `cc_status'
! 413: appropriately for an insn INSN whose body is EXP. It is this
! 414: macro's responsibility to recognize insns that set the condition
! 415: code as a byproduct of other activity as well as those that
! 416: explicitly set `(cc0)'.
! 417:
! 418: This macro is not used on machines that do not use `cc0'.
! 419:
! 420: If there are insns that do not set the condition code but do alter
! 421: other machine registers, this macro must check to see whether they
! 422: invalidate the expressions that the condition code is recorded as
! 423: reflecting. For example, on the 68000, insns that store in address
! 424: registers do not set the condition code, which means that usually
! 425: `NOTICE_UPDATE_CC' can leave `cc_status' unaltered for such insns.
! 426: But suppose that the previous insn set the condition code based
! 427: on location `a4@(102)' and the current insn stores a new value in
! 428: `a4'. Although the condition code is not changed by this, it will
! 429: no longer be true that it reflects the contents of `a4@(102)'.
! 430: Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this case
! 431: to say that nothing is known about the condition code value.
! 432:
! 433: The definition of `NOTICE_UPDATE_CC' must be prepared to deal with
! 434: the results of peephole optimization: insns whose patterns are
! 435: `parallel' RTXs containing various `reg', `mem' or constants which
! 436: are just the operands. The RTL structure of these insns is not
! 437: sufficient to indicate what the insns actually do. What
! 438: `NOTICE_UPDATE_CC' should do when it sees one is just to run
! 439: `CC_STATUS_INIT'.
! 440:
! 441: A possible definition of `NOTICE_UPDATE_CC' is to call a function
! 442: that looks at an attribute (*note Insn Attributes::.) named, for
! 443: example, `cc'. This avoids having detailed information about
! 444: patterns in two places, the `md' file and in `NOTICE_UPDATE_CC'.
! 445:
! 446: `EXTRA_CC_MODES'
! 447: A list of names to be used for additional modes for condition code
! 448: values in registers (*note Jump Patterns::.). These names are
! 449: added to `enum machine_mode' and all have class `MODE_CC'. By
! 450: convention, they should start with `CC' and end with `mode'.
! 451:
! 452: You should only define this macro if your machine does not use
! 453: `cc0' and only if additional modes are required.
! 454:
! 455: `EXTRA_CC_NAMES'
! 456: A list of C strings giving the names for the modes listed in
! 457: `EXTRA_CC_MODES'. For example, the Sparc defines this macro and
! 458: `EXTRA_CC_MODES' as
! 459:
! 460: #define EXTRA_CC_MODES CC_NOOVmode, CCFPmode, CCFPEmode
! 461: #define EXTRA_CC_NAMES "CC_NOOV", "CCFP", "CCFPE"
! 462:
! 463: This macro is not required if `EXTRA_CC_MODES' is not defined.
! 464:
! 465: `SELECT_CC_MODE (OP, X, Y)'
! 466: Returns a mode from class `MODE_CC' to be used when comparison
! 467: operation code OP is applied to rtx X and Y. For example, on the
! 468: Sparc, `SELECT_CC_MODE' is defined as (see *note Jump Patterns::.
! 469: for a description of the reason for this definition)
! 470:
! 471: #define SELECT_CC_MODE(OP,X,Y) \
! 472: (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \
! 473: ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode) \
! 474: : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS \
! 475: || GET_CODE (X) == NEG) \
! 476: ? CC_NOOVmode : CCmode))
! 477:
! 478: You need not define this macro if `EXTRA_CC_MODES' is not defined.
! 479:
! 480: `CANONICALIZE_COMPARISON (CODE, OP0, OP1)'
! 481: One some machines not all possible comparisons are defined, but
! 482: you can convert an invalid comparison into a valid one. For
! 483: example, the Alpha does not have a `GT' comparison, but you can
! 484: use an `LT' comparison instead and swap the order of the operands.
! 485:
! 486: On such machines, define this macro to be a C statement to do any
! 487: required conversions. CODE is the initial comparison code and OP0
! 488: and OP1 are the left and right operands of the comparison,
! 489: respectively. You should modify CODE, OP0, and OP1 as required.
! 490:
! 491: GNU CC will not assume that the comparison resulting from this
! 492: macro is valid but will see if the resulting insn matches a
! 493: pattern in the `md' file.
! 494:
! 495: You need not define this macro if it would never change the
! 496: comparison code or operands.
! 497:
! 498: `REVERSIBLE_CC_MODE (MODE)'
! 499: A C expression whose value is one if it is always safe to reverse a
! 500: comparison whose mode is MODE. If `SELECT_CC_MODE' can ever
! 501: return MODE for a floating-point inequality comparison, then
! 502: `REVERSIBLE_CC_MODE (MODE)' must be zero.
! 503:
! 504: You need not define this macro if it would always returns zero or
! 505: if the floating-point format is anything other than
! 506: `IEEE_FLOAT_FORMAT'. For example, here is the definition used on
! 507: the Sparc, where floating-point inequality comparisons are always
! 508: given `CCFPEmode':
1.1.1.3 root 509:
1.1.1.4 ! root 510: #define REVERSIBLE_CC_MODE(MODE) ((MODE) != CCFPEmode)
1.1.1.3 root 511:
512:
1.1.1.4 ! root 513: File: gcc.info, Node: Costs, Next: Sections, Prev: Condition Code, Up: Target Macros
1.1.1.3 root 514:
1.1.1.4 ! root 515: Describing Relative Costs of Operations
! 516: =======================================
1.1.1.3 root 517:
1.1.1.4 ! root 518: These macros let you describe the relative speed of various
! 519: operations on the target machine.
1.1.1.3 root 520:
1.1.1.4 ! root 521: `CONST_COSTS (X, CODE, OUTER_CODE)'
! 522: A part of a C `switch' statement that describes the relative costs
! 523: of constant RTL expressions. It must contain `case' labels for
! 524: expression codes `const_int', `const', `symbol_ref', `label_ref'
! 525: and `const_double'. Each case must ultimately reach a `return'
! 526: statement to return the relative cost of the use of that kind of
! 527: constant value in an expression. The cost may depend on the
! 528: precise value of the constant, which is available for examination
! 529: in X, and the rtx code of the expression in which it is contained,
! 530: found in OUTER_CODE.
! 531:
! 532: CODE is the expression code--redundant, since it can be obtained
! 533: with `GET_CODE (X)'.
! 534:
! 535: `RTX_COSTS (X, CODE, OUTER_CODE)'
! 536: Like `CONST_COSTS' but applies to nonconstant RTL expressions.
! 537: This can be used, for example, to indicate how costly a multiply
! 538: instruction is. In writing this macro, you can use the construct
! 539: `COSTS_N_INSNS (N)' to specify a cost equal to N fast
! 540: instructions. OUTER_CODE is the code of the expression in which X
! 541: is contained.
! 542:
! 543: This macro is optional; do not define it if the default cost
! 544: assumptions are adequate for the target machine.
! 545:
! 546: `ADDRESS_COST (ADDRESS)'
! 547: An expression giving the cost of an addressing mode that contains
! 548: ADDRESS. If not defined, the cost is computed from the ADDRESS
! 549: expression and the `CONST_COSTS' values.
! 550:
! 551: For most CISC machines, the default cost is a good approximation
! 552: of the true cost of the addressing mode. However, on RISC
! 553: machines, all instructions normally have the same length and
! 554: execution time. Hence all addresses will have equal costs.
! 555:
! 556: In cases where more than one form of an address is known, the form
! 557: with the lowest cost will be used. If multiple forms have the
! 558: same, lowest, cost, the one that is the most complex will be used.
! 559:
! 560: For example, suppose an address that is equal to the sum of a
! 561: register and a constant is used twice in the same basic block.
! 562: When this macro is not defined, the address will be computed in a
! 563: register and memory references will be indirect through that
! 564: register. On machines where the cost of the addressing mode
! 565: containing the sum is no higher than that of a simple indirect
! 566: reference, this will produce an additional instruction and
! 567: possibly require an additional register. Proper specification of
! 568: this macro eliminates this overhead for such machines.
! 569:
! 570: Similar use of this macro is made in strength reduction of loops.
! 571:
! 572: ADDRESS need not be valid as an address. In such a case, the cost
! 573: is not relevant and can be any value; invalid addresses need not be
! 574: assigned a different cost.
! 575:
! 576: On machines where an address involving more than one register is as
! 577: cheap as an address computation involving only one register,
! 578: defining `ADDRESS_COST' to reflect this can cause two registers to
! 579: be live over a region of code where only one would have been if
! 580: `ADDRESS_COST' were not defined in that manner. This effect should
! 581: be considered in the definition of this macro. Equivalent costs
! 582: should probably only be given to addresses with different numbers
! 583: of registers on machines with lots of registers.
! 584:
! 585: This macro will normally either not be defined or be defined as a
! 586: constant.
! 587:
! 588: `REGISTER_MOVE_COST (FROM, TO)'
! 589: A C expression for the cost of moving data from a register in class
! 590: FROM to one in class TO. The classes are expressed using the
! 591: enumeration values such as `GENERAL_REGS'. A value of 4 is the
! 592: default; other values are interpreted relative to that.
! 593:
! 594: It is not required that the cost always equal 2 when FROM is the
! 595: same as TO; on some machines it is expensive to move between
! 596: registers if they are not general registers.
! 597:
! 598: If reload sees an insn consisting of a single `set' between two
! 599: hard registers, and if `REGISTER_MOVE_COST' applied to their
! 600: classes returns a value of 2, reload does not check to ensure that
! 601: the constraints of the insn are met. Setting a cost of other than
! 602: 2 will allow reload to verify that the constraints are met. You
! 603: should do this if the `movM' pattern's constraints do not allow
! 604: such copying.
! 605:
! 606: `MEMORY_MOVE_COST (M)'
! 607: A C expression for the cost of moving data of mode M between a
! 608: register and memory. A value of 2 is the default; this cost is
! 609: relative to those in `REGISTER_MOVE_COST'.
! 610:
! 611: If moving between registers and memory is more expensive than
! 612: between two registers, you should define this macro to express the
! 613: relative cost.
! 614:
! 615: `BRANCH_COST'
! 616: A C expression for the cost of a branch instruction. A value of 1
! 617: is the default; other values are interpreted relative to that.
! 618:
! 619: Here are additional macros which do not specify precise relative
! 620: costs, but only that certain actions are more expensive than GNU CC
! 621: would ordinarily expect.
! 622:
! 623: `SLOW_BYTE_ACCESS'
! 624: Define this macro as a C expression which is nonzero if accessing
! 625: less than a word of memory (i.e. a `char' or a `short') is no
! 626: faster than accessing a word of memory, i.e., if such access
! 627: require more than one instruction or if there is no difference in
! 628: cost between byte and (aligned) word loads.
! 629:
! 630: When this macro is not defined, the compiler will access a field by
! 631: finding the smallest containing object; when it is defined, a
! 632: fullword load will be used if alignment permits. Unless bytes
! 633: accesses are faster than word accesses, using word accesses is
! 634: preferable since it may eliminate subsequent memory access if
! 635: subsequent accesses occur to other fields in the same word of the
! 636: structure, but to different bytes.
! 637:
! 638: `SLOW_ZERO_EXTEND'
! 639: Define this macro if zero-extension (of a `char' or `short' to an
! 640: `int') can be done faster if the destination is a register that is
! 641: known to be zero.
! 642:
! 643: If you define this macro, you must have instruction patterns that
! 644: recognize RTL structures like this:
! 645:
! 646: (set (strict_low_part (subreg:QI (reg:SI ...) 0)) ...)
! 647:
! 648: and likewise for `HImode'.
! 649:
! 650: `SLOW_UNALIGNED_ACCESS'
! 651: Define this macro to be the value 1 if unaligned accesses have a
! 652: cost many times greater than aligned accesses, for example if they
! 653: are emulated in a trap handler.
! 654:
! 655: When this macro is non-zero, the compiler will act as if
! 656: `STRICT_ALIGNMENT' were non-zero when generating code for block
! 657: moves. This can cause significantly more instructions to be
! 658: produced. Therefore, do not set this macro non-zero if unaligned
! 659: accesses only add a cycle or two to the time for a memory access.
! 660:
! 661: If the value of this macro is always zero, it need not be defined.
! 662:
! 663: `DONT_REDUCE_ADDR'
! 664: Define this macro to inhibit strength reduction of memory
! 665: addresses. (On some machines, such strength reduction seems to do
! 666: harm rather than good.)
! 667:
! 668: `MOVE_RATIO'
! 669: The number of scalar move insns which should be generated instead
! 670: of a string move insn or a library call. Increasing the value
! 671: will always make code faster, but eventually incurs high cost in
! 672: increased code size.
! 673:
! 674: If you don't define this, a reasonable default is used.
! 675:
! 676: `NO_FUNCTION_CSE'
! 677: Define this macro if it is as good or better to call a constant
! 678: function address than to call an address kept in a register.
! 679:
! 680: `NO_RECURSIVE_FUNCTION_CSE'
! 681: Define this macro if it is as good or better for a function to call
! 682: itself with an explicit address than to call an address kept in a
! 683: register.
! 684:
! 685: `ADJUST_COST (INSN, LINK, DEP_INSN, COST)'
! 686: A C statement (sans semicolon) to update the integer variable COST
! 687: based on the relationship between INSN that is dependent on
! 688: DEP_INSN through the dependence LINK. The default is to make no
! 689: adjustment to COST. This can be used for example to specify to
! 690: the scheduler that an output- or anti-dependence does not incur
! 691: the same cost as a data-dependence.
1.1.1.3 root 692:
693:
1.1.1.4 ! root 694: File: gcc.info, Node: Sections, Next: PIC, Prev: Costs, Up: Target Macros
1.1.1.3 root 695:
1.1.1.4 ! root 696: Dividing the Output into Sections (Texts, Data, ...)
! 697: ====================================================
1.1.1.3 root 698:
1.1.1.4 ! root 699: An object file is divided into sections containing different types of
! 700: data. In the most common case, there are three sections: the "text
! 701: section", which holds instructions and read-only data; the "data
! 702: section", which holds initialized writable data; and the "bss section",
! 703: which holds uninitialized data. Some systems have other kinds of
! 704: sections.
! 705:
! 706: The compiler must tell the assembler when to switch sections. These
! 707: macros control what commands to output to tell the assembler this. You
! 708: can also define additional sections.
! 709:
! 710: `TEXT_SECTION_ASM_OP'
! 711: A C expression whose value is a string containing the assembler
! 712: operation that should precede instructions and read-only data.
! 713: Normally `".text"' is right.
! 714:
! 715: `DATA_SECTION_ASM_OP'
! 716: A C expression whose value is a string containing the assembler
! 717: operation to identify the following data as writable initialized
! 718: data. Normally `".data"' is right.
! 719:
! 720: `SHARED_SECTION_ASM_OP'
! 721: if defined, a C expression whose value is a string containing the
! 722: assembler operation to identify the following data as shared data.
! 723: If not defined, `DATA_SECTION_ASM_OP' will be used.
1.1.1.3 root 724:
1.1.1.4 ! root 725: `INIT_SECTION_ASM_OP'
! 726: if defined, a C expression whose value is a string containing the
! 727: assembler operation to identify the following data as
! 728: initialization code. If not defined, GNU CC will assume such a
! 729: section does not exist.
! 730:
! 731: `EXTRA_SECTIONS'
! 732: A list of names for sections other than the standard two, which are
! 733: `in_text' and `in_data'. You need not define this macro on a
! 734: system with no other sections (that GCC needs to use).
! 735:
! 736: `EXTRA_SECTION_FUNCTIONS'
! 737: One or more functions to be defined in `varasm.c'. These
! 738: functions should do jobs analogous to those of `text_section' and
! 739: `data_section', for your additional sections. Do not define this
! 740: macro if you do not define `EXTRA_SECTIONS'.
! 741:
! 742: `READONLY_DATA_SECTION'
! 743: On most machines, read-only variables, constants, and jump tables
! 744: are placed in the text section. If this is not the case on your
! 745: machine, this macro should be defined to be the name of a function
! 746: (either `data_section' or a function defined in `EXTRA_SECTIONS')
! 747: that switches to the section to be used for read-only items.
! 748:
! 749: If these items should be placed in the text section, this macro
! 750: should not be defined.
! 751:
! 752: `SELECT_SECTION (EXP, RELOC)'
! 753: A C statement or statements to switch to the appropriate section
! 754: for output of EXP. You can assume that EXP is either a `VAR_DECL'
! 755: node or a constant of some sort. RELOC indicates whether the
! 756: initial value of EXP requires link-time relocations. Select the
! 757: section by calling `text_section' or one of the alternatives for
! 758: other sections.
! 759:
! 760: Do not define this macro if you put all read-only variables and
! 761: constants in the read-only data section (usually the text section).
! 762:
! 763: `SELECT_RTX_SECTION (MODE, RTX)'
! 764: A C statement or statements to switch to the appropriate section
! 765: for output of RTX in mode MODE. You can assume that RTX is some
! 766: kind of constant in RTL. The argument MODE is redundant except in
! 767: the case of a `const_int' rtx. Select the section by calling
! 768: `text_section' or one of the alternatives for other sections.
! 769:
! 770: Do not define this macro if you put all constants in the read-only
! 771: data section.
! 772:
! 773: `JUMP_TABLES_IN_TEXT_SECTION'
! 774: Define this macro if jump tables (for `tablejump' insns) should be
! 775: output in the text section, along with the assembler instructions.
! 776: Otherwise, the readonly data section is used.
! 777:
! 778: This macro is irrelevant if there is no separate readonly data
! 779: section.
! 780:
! 781: `ENCODE_SECTION_INFO (DECL)'
! 782: Define this macro if references to a symbol must be treated
! 783: differently depending on something about the variable or function
! 784: named by the symbol (such as what section it is in).
! 785:
! 786: The macro definition, if any, is executed immediately after the
! 787: rtl for DECL has been created and stored in `DECL_RTL (DECL)'.
! 788: The value of the rtl will be a `mem' whose address is a
! 789: `symbol_ref'.
! 790:
! 791: The usual thing for this macro to do is to record a flag in the
! 792: `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
! 793: name string in the `symbol_ref' (if one bit is not enough
! 794: information).
! 795:
! 796: `STRIP_NAME_ENCODING (VAR, SYM_NAME)'
! 797: Decode SYM_NAME and store the real name part in VAR, sans the
! 798: characters that encode section info. Define this macro if
! 799: `ENCODE_SECTION_INFO' alters the symbol's name string.
1.1.1.3 root 800:
801:
1.1.1.4 ! root 802: File: gcc.info, Node: PIC, Next: Assembler Format, Prev: Sections, Up: Target Macros
1.1.1.3 root 803:
1.1.1.4 ! root 804: Position Independent Code
! 805: =========================
1.1.1.3 root 806:
1.1.1.4 ! root 807: This section describes macros that help implement generation of
! 808: position independent code. Simply defining these macros is not enough
! 809: to generate valid PIC; you must also add support to the macros
! 810: `GO_IF_LEGITIMATE_ADDRESS' and `PRINT_OPERAND_ADDRESS', as well as
! 811: `LEGITIMIZE_ADDRESS'. You must modify the definition of `movsi' to do
! 812: something appropriate when the source operand contains a symbolic
! 813: address. You may also need to alter the handling of switch statements
! 814: so that they use relative addresses.
! 815:
! 816: `PIC_OFFSET_TABLE_REGNUM'
! 817: The register number of the register used to address a table of
! 818: static data addresses in memory. In some cases this register is
! 819: defined by a processor's "application binary interface" (ABI).
! 820: When this macro is defined, RTL is generated for this register
! 821: once, as with the stack pointer and frame pointer registers. If
! 822: this macro is not defined, it is up to the machine-dependent files
! 823: to allocate such a register (if necessary).
! 824:
! 825: `PIC_OFFSET_TABLE_REG_CALL_CLOBBERED'
! 826: Define this macro if the register defined by
! 827: `PIC_OFFSET_TABLE_REGNUM' is clobbered by calls. Do not define
! 828: this macro if `PPIC_OFFSET_TABLE_REGNUM' is not defined.
! 829:
! 830: `FINALIZE_PIC'
! 831: By generating position-independent code, when two different
! 832: programs (A and B) share a common library (libC.a), the text of
! 833: the library can be shared whether or not the library is linked at
! 834: the same address for both programs. In some of these
! 835: environments, position-independent code requires not only the use
! 836: of different addressing modes, but also special code to enable the
! 837: use of these addressing modes.
! 838:
! 839: The `FINALIZE_PIC' macro serves as a hook to emit these special
! 840: codes once the function is being compiled into assembly code, but
! 841: not before. (It is not done before, because in the case of
! 842: compiling an inline function, it would lead to multiple PIC
! 843: prologues being included in functions which used inline functions
! 844: and were compiled to assembly language.)
! 845:
! 846: `LEGITIMATE_PIC_OPERAND_P (X)'
! 847: A C expression that is nonzero if X is a legitimate immediate
! 848: operand on the target machine when generating position independent
! 849: code. You can assume that X satisfies `CONSTANT_P', so you need
! 850: not check this. You can also assume FLAG_PIC is true, so you need
! 851: not check it either. You need not define this macro if all
! 852: constants (including `SYMBOL_REF') can be immediate operands when
! 853: generating position independent code.
1.1.1.3 root 854:
855:
1.1.1.4 ! root 856: File: gcc.info, Node: Assembler Format, Next: Debugging Info, Prev: PIC, Up: Target Macros
1.1.1.3 root 857:
1.1.1.4 ! root 858: Defining the Output Assembler Language
! 859: ======================================
1.1.1.3 root 860:
1.1.1.4 ! root 861: This section describes macros whose principal purpose is to describe
! 862: how to write instructions in assembler language-rather than what the
! 863: instructions do.
1.1.1.3 root 864:
1.1.1.4 ! root 865: * Menu:
1.1.1.3 root 866:
1.1.1.4 ! root 867: * File Framework:: Structural information for the assembler file.
! 868: * Data Output:: Output of constants (numbers, strings, addresses).
! 869: * Uninitialized Data:: Output of uninitialized variables.
! 870: * Label Output:: Output and generation of labels.
! 871: * Initialization:: General principles of initialization
! 872: and termination routines.
! 873: * Macros for Initialization::
! 874: Specific macros that control the handling of
! 875: initialization and termination routines.
! 876: * Instruction Output:: Output of actual instructions.
! 877: * Dispatch Tables:: Output of jump tables.
! 878: * Alignment Output:: Pseudo ops for alignment and skipping data.
1.1.1.3 root 879:
880:
1.1.1.4 ! root 881: File: gcc.info, Node: File Framework, Next: Data Output, Up: Assembler Format
1.1.1.3 root 882:
1.1.1.4 ! root 883: The Overall Framework of an Assembler File
! 884: ------------------------------------------
1.1.1.3 root 885:
1.1.1.4 ! root 886: This describes the overall framework of an assembler file.
1.1.1.3 root 887:
1.1.1.4 ! root 888: `ASM_FILE_START (STREAM)'
! 889: A C expression which outputs to the stdio stream STREAM some
! 890: appropriate text to go at the start of an assembler file.
! 891:
! 892: Normally this macro is defined to output a line containing
! 893: `#NO_APP', which is a comment that has no effect on most
! 894: assemblers but tells the GNU assembler that it can save time by not
! 895: checking for certain assembler constructs.
! 896:
! 897: On systems that use SDB, it is necessary to output certain
! 898: commands; see `attasm.h'.
! 899:
! 900: `ASM_FILE_END (STREAM)'
! 901: A C expression which outputs to the stdio stream STREAM some
! 902: appropriate text to go at the end of an assembler file.
! 903:
! 904: If this macro is not defined, the default is to output nothing
! 905: special at the end of the file. Most systems don't require any
! 906: definition.
! 907:
! 908: On systems that use SDB, it is necessary to output certain
! 909: commands; see `attasm.h'.
! 910:
! 911: `ASM_IDENTIFY_GCC (FILE)'
! 912: A C statement to output assembler commands which will identify the
! 913: object file as having been compiled with GNU CC (or another GNU
! 914: compiler).
! 915:
! 916: If you don't define this macro, the string `gcc_compiled.:' is
! 917: output. This string is calculated to define a symbol which, on
! 918: BSD systems, will never be defined for any other reason. GDB
! 919: checks for the presence of this symbol when reading the symbol
! 920: table of an executable.
! 921:
! 922: On non-BSD systems, you must arrange communication with GDB in
! 923: some other fashion. If GDB is not used on your system, you can
! 924: define this macro with an empty body.
! 925:
! 926: `ASM_COMMENT_START'
! 927: A C string constant describing how to begin a comment in the target
! 928: assembler language. The compiler assumes that the comment will
! 929: end at the end of the line.
! 930:
! 931: `ASM_APP_ON'
! 932: A C string constant for text to be output before each `asm'
! 933: statement or group of consecutive ones. Normally this is
! 934: `"#APP"', which is a comment that has no effect on most assemblers
! 935: but tells the GNU assembler that it must check the lines that
! 936: follow for all valid assembler constructs.
! 937:
! 938: `ASM_APP_OFF'
! 939: A C string constant for text to be output after each `asm'
! 940: statement or group of consecutive ones. Normally this is
! 941: `"#NO_APP"', which tells the GNU assembler to resume making the
! 942: time-saving assumptions that are valid for ordinary compiler
! 943: output.
! 944:
! 945: `ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)'
! 946: A C statement to output COFF information or DWARF debugging
! 947: information which indicates that filename NAME is the current
! 948: source file to the stdio stream STREAM.
1.1.1.3 root 949:
950: This macro need not be defined if the standard form of output for
1.1.1.4 ! root 951: the file format in use is appropriate.
1.1.1.3 root 952:
1.1.1.4 ! root 953: `ASM_OUTPUT_SOURCE_LINE (STREAM, LINE)'
! 954: A C statement to output DBX or SDB debugging information before
! 955: code for line number LINE of the current source file to the stdio
! 956: stream STREAM.
! 957:
! 958: This macro need not be defined if the standard form of debugging
! 959: information for the debugger in use is appropriate.
! 960:
! 961: `ASM_OUTPUT_IDENT (STREAM, STRING)'
! 962: A C statement to output something to the assembler file to handle a
! 963: `#ident' directive containing the text STRING. If this macro is
! 964: not defined, nothing is output for a `#ident' directive.
! 965:
! 966: `ASM_OUTPUT_SECTION_NAME (STREAM, DECL, NAME)'
! 967: A C statement to output something to the assembler file to switch
! 968: to section NAME for object DECL which is either a `FUNCTION_DECL',
! 969: a `VAR_DECL' or `NULL_TREE'. Some target formats do not support
! 970: arbitrary sections. Do not define this macro in such cases.
! 971:
! 972: At present this macro is only used to support section attributes.
! 973: When this macro is undefined, section attributes are disabled.
! 974:
! 975: `OBJC_PROLOGUE'
! 976: A C statement to output any assembler statements which are
! 977: required to precede any Objective C object definitions or message
! 978: sending. The statement is executed only when compiling an
! 979: Objective C program.
1.1.1.3 root 980:
1.1.1.4 ! root 981:
! 982: File: gcc.info, Node: Data Output, Next: Uninitialized Data, Prev: File Framework, Up: Assembler Format
1.1.1.3 root 983:
1.1.1.4 ! root 984: Output of Data
! 985: --------------
1.1.1.3 root 986:
1.1.1.4 ! root 987: This describes data output.
1.1.1.3 root 988:
1.1.1.4 ! root 989: `ASM_OUTPUT_LONG_DOUBLE (STREAM, VALUE)'
! 990: `ASM_OUTPUT_DOUBLE (STREAM, VALUE)'
! 991: `ASM_OUTPUT_FLOAT (STREAM, VALUE)'
! 992: `ASM_OUTPUT_THREE_QUARTER_FLOAT (STREAM, VALUE)'
! 993: `ASM_OUTPUT_SHORT_FLOAT (STREAM, VALUE)'
! 994: `ASM_OUTPUT_BYTE_FLOAT (STREAM, VALUE)'
! 995: A C statement to output to the stdio stream STREAM an assembler
! 996: instruction to assemble a floating-point constant of `TFmode',
! 997: `DFmode', `SFmode', `TQFmode', `HFmode', or `QFmode',
! 998: respectively, whose value is VALUE. VALUE will be a C expression
! 999: of type `REAL_VALUE_TYPE'. Macros such as
! 1000: `REAL_VALUE_TO_TARGET_DOUBLE' are useful for writing these
! 1001: definitions.
! 1002:
! 1003: `ASM_OUTPUT_QUADRUPLE_INT (STREAM, EXP)'
! 1004: `ASM_OUTPUT_DOUBLE_INT (STREAM, EXP)'
! 1005: `ASM_OUTPUT_INT (STREAM, EXP)'
! 1006: `ASM_OUTPUT_SHORT (STREAM, EXP)'
! 1007: `ASM_OUTPUT_CHAR (STREAM, EXP)'
! 1008: A C statement to output to the stdio stream STREAM an assembler
! 1009: instruction to assemble an integer of 16, 8, 4, 2 or 1 bytes,
! 1010: respectively, whose value is VALUE. The argument EXP will be an
! 1011: RTL expression which represents a constant value. Use
! 1012: `output_addr_const (STREAM, EXP)' to output this value as an
! 1013: assembler expression.
! 1014:
! 1015: For sizes larger than `UNITS_PER_WORD', if the action of a macro
! 1016: would be identical to repeatedly calling the macro corresponding to
! 1017: a size of `UNITS_PER_WORD', once for each word, you need not define
! 1018: the macro.
1.1.1.3 root 1019:
1.1.1.4 ! root 1020: `ASM_OUTPUT_BYTE (STREAM, VALUE)'
! 1021: A C statement to output to the stdio stream STREAM an assembler
! 1022: instruction to assemble a single byte containing the number VALUE.
1.1.1.3 root 1023:
1.1.1.4 ! root 1024: `ASM_BYTE_OP'
! 1025: A C string constant giving the pseudo-op to use for a sequence of
! 1026: single-byte constants. If this macro is not defined, the default
! 1027: is `"byte"'.
1.1.1.3 root 1028:
1.1.1.4 ! root 1029: `ASM_OUTPUT_ASCII (STREAM, PTR, LEN)'
! 1030: A C statement to output to the stdio stream STREAM an assembler
! 1031: instruction to assemble a string constant containing the LEN bytes
! 1032: at PTR. PTR will be a C expression of type `char *' and LEN a C
! 1033: expression of type `int'.
1.1.1.3 root 1034:
1.1.1.4 ! root 1035: If the assembler has a `.ascii' pseudo-op as found in the Berkeley
! 1036: Unix assembler, do not define the macro `ASM_OUTPUT_ASCII'.
1.1.1.3 root 1037:
1.1.1.4 ! root 1038: `ASM_OUTPUT_POOL_PROLOGUE (FILE FUNNAME FUNDECL SIZE)'
! 1039: A C statement to output assembler commands to define the start of
! 1040: the constant pool for a function. FUNNAME is a string giving the
! 1041: name of the function. Should the return type of the function be
! 1042: required, it can be obtained via FUNDECL. SIZE is the size, in
! 1043: bytes, of the constant pool that will be written immediately after
! 1044: this call.
! 1045:
! 1046: If no constant-pool prefix is required, the usual case, this macro
! 1047: need not be defined.
! 1048:
! 1049: `ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN, LABELNO, JUMPTO)'
! 1050: A C statement (with or without semicolon) to output a constant in
! 1051: the constant pool, if it needs special treatment. (This macro
! 1052: need not do anything for RTL expressions that can be output
! 1053: normally.)
! 1054:
! 1055: The argument FILE is the standard I/O stream to output the
! 1056: assembler code on. X is the RTL expression for the constant to
! 1057: output, and MODE is the machine mode (in case X is a `const_int').
! 1058: ALIGN is the required alignment for the value X; you should
! 1059: output an assembler directive to force this much alignment.
! 1060:
! 1061: The argument LABELNO is a number to use in an internal label for
! 1062: the address of this pool entry. The definition of this macro is
! 1063: responsible for outputting the label definition at the proper
! 1064: place. Here is how to do this:
! 1065:
! 1066: ASM_OUTPUT_INTERNAL_LABEL (FILE, "LC", LABELNO);
! 1067:
! 1068: When you output a pool entry specially, you should end with a
! 1069: `goto' to the label JUMPTO. This will prevent the same pool entry
! 1070: from being output a second time in the usual manner.
! 1071:
! 1072: You need not define this macro if it would do nothing.
! 1073:
! 1074: `IS_ASM_LOGICAL_LINE_SEPARATOR (C)'
! 1075: Define this macro as a C expression which is nonzero if C is used
! 1076: as a logical line separator by the assembler.
! 1077:
! 1078: If you do not define this macro, the default is that only the
! 1079: character `;' is treated as a logical line separator.
! 1080:
! 1081: `ASM_OPEN_PAREN'
! 1082: `ASM_CLOSE_PAREN'
! 1083: These macros are defined as C string constant, describing the
! 1084: syntax in the assembler for grouping arithmetic expressions. The
! 1085: following definitions are correct for most assemblers:
! 1086:
! 1087: #define ASM_OPEN_PAREN "("
! 1088: #define ASM_CLOSE_PAREN ")"
! 1089:
! 1090: These macros are provided by `real.h' for writing the definitions of
! 1091: `ASM_OUTPUT_DOUBLE' and the like:
! 1092:
! 1093: `REAL_VALUE_TO_TARGET_SINGLE (X, L)'
! 1094: `REAL_VALUE_TO_TARGET_DOUBLE (X, L)'
! 1095: `REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L)'
! 1096: These translate X, of type `REAL_VALUE_TYPE', to the target's
! 1097: floating point representation, and store its bit pattern in the
! 1098: array of `long int' whose address is L. The number of elements in
! 1099: the output array is determined by the size of the desired target
! 1100: floating point data type: 32 bits of it go in each `long int' array
! 1101: element. Each array element holds 32 bits of the result, even if
! 1102: `long int' is wider than 32 bits on the host machine.
! 1103:
! 1104: The array element values are designed so that you can print them
! 1105: out using `fprintf' in the order they should appear in the target
! 1106: machine's memory.
! 1107:
! 1108: `REAL_VALUE_TO_DECIMAL (X, FORMAT, STRING)'
! 1109: This macro converts X, of type `REAL_VALUE_TYPE', to a decimal
! 1110: number and stores it as a string into STRING. You must pass, as
! 1111: STRING, the address of a long enough block of space to hold the
! 1112: result.
1.1.1.3 root 1113:
1.1.1.4 ! root 1114: The argument FORMAT is a `printf'-specification that serves as a
! 1115: suggestion for how to format the output string.
1.1 root 1116:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.