|
|
1.1 root 1: Info file gcc.info, produced by Makeinfo, -*- Text -*- from input
2: file gcc.texinfo.
3:
1.1.1.4 ! root 4: This file documents the use and the internals of the GNU compiler.
1.1 root 5:
1.1.1.4 ! root 6: Copyright (C) 1988, 1989, 1990 Free Software Foundation, Inc.
1.1 root 7:
1.1.1.4 ! root 8: Permission is granted to make and distribute verbatim copies of
! 9: this manual provided the copyright notice and this permission notice
! 10: are preserved on all copies.
1.1 root 11:
1.1.1.4 ! root 12: Permission is granted to copy and distribute modified versions of
1.1 root 13: this manual under the conditions for verbatim copying, provided also
1.1.1.2 root 14: that the sections entitled "GNU General Public License" and "Protect
15: Your Freedom--Fight `Look And Feel'" are included exactly as in the
16: original, and provided that the entire resulting derived work is
17: distributed under the terms of a permission notice identical to this
18: one.
1.1 root 19:
1.1.1.4 ! root 20: Permission is granted to copy and distribute translations of this
1.1 root 21: manual into another language, under the above conditions for modified
1.1.1.2 root 22: versions, except that the sections entitled "GNU General Public
23: License" and "Protect Your Freedom--Fight `Look And Feel'" and this
24: permission notice may be included in translations approved by the
25: Free Software Foundation instead of in the original English.
1.1 root 26:
1.1.1.4 ! root 27:
! 28: File: gcc.info, Node: Addressing Modes, Next: Delayed Branch, Prev: Library Calls, Up: Machine Macros
! 29:
! 30: Addressing Modes
! 31: ================
! 32:
! 33: `HAVE_POST_INCREMENT'
! 34: Define this macro if the machine supports post-increment
! 35: addressing.
! 36:
! 37: `HAVE_PRE_INCREMENT'
! 38: `HAVE_POST_DECREMENT'
! 39: `HAVE_PRE_DECREMENT'
! 40: Similar for other kinds of addressing.
! 41:
! 42: `CONSTANT_ADDRESS_P (X)'
! 43: A C expression that is 1 if the RTX X is a constant whose value
! 44: is an integer. This includes integers whose values are not
! 45: explicitly known, such as `symbol_ref' and `label_ref'
! 46: expressions and `const' arithmetic expressions.
! 47:
! 48: On most machines, this can be defined as `CONSTANT_P (X)', but a
! 49: few machines are more restrictive in which constant addresses
! 50: are supported.
! 51:
! 52: `MAX_REGS_PER_ADDRESS'
! 53: A number, the maximum number of registers that can appear in a
! 54: valid memory address. Note that it is up to you to specify a
! 55: value equal to the maximum number that
! 56: `go_if_legitimate_address' would ever accept.
! 57:
! 58: `GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)'
! 59: A C compound statement with a conditional `goto LABEL;' executed
! 60: if X (an RTX) is a legitimate memory address on the target
! 61: machine for a memory operand of mode MODE.
! 62:
! 63: It usually pays to define several simpler macros to serve as
! 64: subroutines for this one. Otherwise it may be too complicated
! 65: to understand.
! 66:
! 67: This macro must exist in two variants: a strict variant and a
! 68: non-strict one. The strict variant is used in the reload pass.
! 69: It must be defined so that any pseudo-register that has not been
! 70: allocated a hard register is considered a memory reference. In
! 71: contexts where some kind of register is required, a
! 72: pseudo-register with no hard register must be rejected.
! 73:
! 74: The non-strict variant is used in other passes. It must be
! 75: defined to accept all pseudo-registers in every context where
! 76: some kind of register is required.
! 77:
! 78: Compiler source files that want to use the strict variant of
! 79: this macro define the macro `REG_OK_STRICT'. You should use an
! 80: `#ifdef REG_OK_STRICT' conditional to define the strict variant
! 81: in that case and the non-strict variant otherwise.
! 82:
! 83: Typically among the subroutines used to define
! 84: `GO_IF_LEGITIMATE_ADDRESS' are subroutines to check for
! 85: acceptable registers for various purposes (one for base
! 86: registers, one for index registers, and so on). Then only these
! 87: subroutine macros need have two variants; the higher levels of
! 88: macros may be the same whether strict or not.
! 89:
! 90: Normally, constant addresses which are the sum of a `symbol_ref'
! 91: and an integer are stored inside a `const' RTX to mark them as
! 92: constant. Therefore, there is no need to recognize such sums as
! 93: legitimate addresses.
! 94:
! 95: Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle
! 96: constant sums that are not marked with `const'. It assumes
! 97: that a naked `plus' indicates indexing. If so, then you *must*
! 98: reject such naked constant sums as illegitimate addresses, so
! 99: that none of them will be given to `PRINT_OPERAND_ADDRESS'.
! 100:
! 101: `REG_OK_FOR_BASE_P (X)'
! 102: A C expression that is nonzero if X (assumed to be a `reg' RTX)
! 103: is valid for use as a base register. For hard registers, it
! 104: should always accept those which the hardware permits and reject
! 105: the others. Whether the macro accepts or rejects pseudo
! 106: registers must be controlled by `REG_OK_STRICT' as described
! 107: above. This usually requires two variant definitions, of which
! 108: `REG_OK_STRICT' controls the one actually used.
! 109:
! 110: `REG_OK_FOR_INDEX_P (X)'
! 111: A C expression that is nonzero if X (assumed to be a `reg' RTX)
! 112: is valid for use as an index register.
! 113:
! 114: The difference between an index register and a base register is
! 115: that the index register may be scaled. If an address involves
! 116: the sum of two registers, neither one of them scaled, then
! 117: either one may be labeled the "base" and the other the "index";
! 118: but whichever labeling is used must fit the machine's
! 119: constraints of which registers may serve in each capacity. The
! 120: compiler will try both labelings, looking for one that is valid,
! 121: and will reload one or both registers only if neither labeling
! 122: works.
! 123:
! 124: `LEGITIMIZE_ADDRESS (X, OLDX, MODE, WIN)'
! 125: A C compound statement that attempts to replace X with a valid
! 126: memory address for an operand of mode MODE. WIN will be a C
! 127: statement label elsewhere in the code; the macro definition may
! 128: use
! 129:
! 130: GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN);
! 131:
! 132: to avoid further processing if the address has become legitimate.
! 133:
! 134: X will always be the result of a call to
! 135: `break_out_memory_refs', and OLDX will be the operand that was
! 136: given to that function to produce X.
! 137:
! 138: The code generated by this macro should not alter the
! 139: substructure of X. If it transforms X into a more legitimate
! 140: form, it should assign X (which will always be a C variable) a
! 141: new value.
! 142:
! 143: It is not necessary for this macro to come up with a legitimate
! 144: address. The compiler has standard ways of doing so in all
! 145: cases. In fact, it is safe for this macro to do nothing. But
! 146: often a machine-dependent strategy can generate better code.
! 147:
! 148: `GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL)'
! 149: A C statement or compound statement with a conditional `goto
! 150: LABEL;' executed if memory address X (an RTX) can have different
! 151: meanings depending on the machine mode of the memory reference
! 152: it is used for.
! 153:
! 154: Autoincrement and autodecrement addresses typically have
! 155: mode-dependent effects because the amount of the increment or
! 156: decrement is the size of the operand being addressed. Some
! 157: machines have other mode-dependent addresses. Many RISC
! 158: machines have no mode-dependent addresses.
! 159:
! 160: You may assume that ADDR is a valid address for the machine.
! 161:
! 162: `LEGITIMATE_CONSTANT_P (X)'
! 163: A C expression that is nonzero if X is a legitimate constant for
! 164: an immediate operand on the target machine. You can assume that
! 165: either X is a `const_double' or it satisfies `CONSTANT_P', so
! 166: you need not check these things. In fact, `1' is a suitable
! 167: definition for this macro on machines where any `const_double'
! 168: is valid and anything `CONSTANT_P' is valid.
! 169:
! 170:
! 171: File: gcc.info, Node: Delayed Branch, Next: Condition Code, Prev: Addressing Modes, Up: Machine Macros
! 172:
! 173: Parameters for Delayed Branch Optimization
! 174: ==========================================
! 175:
! 176: `HAVE_DELAYED_BRANCH'
! 177: Define this macro if the target machine has delayed branches,
! 178: that is, a branch does not take effect immediately, and the
! 179: actual branch instruction may be followed by one or more
! 180: instructions that will be issued before the PC is actually
! 181: changed.
! 182:
! 183: If defined, this allows a special scheduling pass to be run
! 184: after the second jump optimization to attempt to reorder
! 185: instructions to exploit this. Defining this macro also requires
! 186: the definition of certain other macros described below.
! 187:
! 188: `DBR_SLOTS_AFTER (INSN)'
! 189: This macro must be defined if `HAVE_DELAYED_BRANCH' is defined.
! 190: Its definition should be a C expression returning the number of
! 191: available delay slots following the instruction(s) output by the
! 192: pattern for INSN. The definition of "slot" is
! 193: machine-dependent, and may denote instructions, bytes, or
! 194: whatever.
! 195:
! 196: `DBR_INSN_SLOTS (INSN)'
! 197: This macro must be defined if `HAVE_DELAYED_BRANCH' is defined.
! 198: It should be a C expression returning the number of slots
! 199: (typically the number of machine instructions) consumed by INSN.
! 200:
! 201: You may assume that INSN is truly an insn, not a note, label,
! 202: barrier, dispatch table, `use', or `clobber'.
! 203:
! 204: `DBR_INSN_ELIGIBLE_P (INSN, DINSN)'
! 205: A C expression whose value is non-zero if it is legitimate to
! 206: put INSN in the delay slot following DINSN.
! 207:
! 208: You do not need to take account of data flow considerations in
! 209: the definition of this macro, because the delayed branch
! 210: optimizer always does that. This macro is needed only when
! 211: certain insns may not be placed in certain delay slots for
! 212: reasons not evident from the RTL expressions themselves. If
! 213: there are no such problems, you don't need to define this macro.
! 214:
! 215: You may assume that INSN is truly an insn, not a note, label,
! 216: barrier, dispatch table, `use', or `clobber'. You may assume
! 217: that DINSN is a jump insn with a delay slot.
! 218:
! 219: `DBR_OUTPUT_SEQEND(FILE)'
! 220: A C statement, to be executed after all slot-filler instructions
! 221: have been output. If necessary, call `dbr_sequence_length' to
! 222: determine the number of slots filled in a sequence (zero if not
! 223: currently outputting a sequence), to decide how many no-ops to
! 224: output, or whatever.
! 225:
! 226: Don't define this macro if it has nothing to do, but it is
! 227: helpful in reading assembly output if the extent of the delay
! 228: sequence is made explicit (e.g. with white space).
! 229:
! 230: Note that output routines for instructions with delay slots must
! 231: be prepared to deal with not being output as part of a sequence
! 232: (i.e. when the scheduling pass is not run, or when no slot
! 233: fillers could be found.) The variable `final_sequence' is null
! 234: when not processing a sequence, otherwise it contains the
! 235: `sequence' rtx being output.
! 236:
! 237:
! 238: File: gcc.info, Node: Condition Code, Next: Cross-compilation, Prev: Delayed Branch, Up: Machine Macros
! 239:
! 240: Condition Code Information
! 241: ==========================
! 242:
! 243: The file `conditions.h' defines a variable `cc_status' to describe
! 244: how the condition code was computed (in case the interpretation of
! 245: the condition code depends on the instruction that it was set by).
! 246: This variable contains the RTL expressions on which the condition
! 247: code is currently based, and several standard flags.
! 248:
! 249: Sometimes additional machine-specific flags must be defined in the
! 250: machine description header file. It can also add additional
! 251: machine-specific information by defining `CC_STATUS_MDEP'.
! 252:
! 253: `CC_STATUS_MDEP'
! 254: C code for a data type which is used for declaring the `mdep'
! 255: component of `cc_status'. It defaults to `int'.
! 256:
! 257: `CC_STATUS_MDEP_INIT'
! 258: A C expression to initialize the `mdep' field to "empty". The
! 259: default definition does nothing, since most machines don't use
! 260: the field anyway. If you want to use the field, you should
! 261: probably define this macro to initialize it.
! 262:
! 263: `NOTICE_UPDATE_CC (EXP, INSN)'
! 264: A C compound statement to set the components of `cc_status'
! 265: appropriately for an insn INSN whose body is EXP. It is this
! 266: macro's responsibility to recognize insns that set the condition
! 267: code as a byproduct of other activity as well as those that
! 268: explicitly set `(cc0)'.
! 269:
! 270: If there are insn that do not set the condition code but do
! 271: alter other machine registers, this macro must check to see
! 272: whether they invalidate the expressions that the condition code
! 273: is recorded as reflecting. For example, on the 68000, insns
! 274: that store in address registers do not set the condition code,
! 275: which means that usually `NOTICE_UPDATE_CC' can leave
! 276: `cc_status' unaltered for such insns. But suppose that the
! 277: previous insn set the condition code based on location
! 278: `a4@(102)' and the current insn stores a new value in `a4'.
! 279: Although the condition code is not changed by this, it will no
! 280: longer be true that it reflects the contents of `a4@(102)'.
! 281: Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this
! 282: case to say that nothing is known about the condition code value.
! 283:
! 284: The definition of `NOTICE_UPDATE_CC' must be prepared to deal
! 285: with the results of peephole optimization: insns whose patterns
! 286: are `parallel' RTXs containing various `reg', `mem' or constants
! 287: which are just the operands. The RTL structure of these insns
! 288: is not sufficient to indicate what the insns actually do. What
! 289: `NOTICE_UPDATE_CC' should do when it sees one is just to run
! 290: `CC_STATUS_INIT'.
1.1 root 291:
292:
1.1.1.3 root 293: File: gcc.info, Node: Cross-compilation, Next: Misc, Prev: Condition Code, Up: Machine Macros
294:
295: Cross Compilation and Floating-Point Format
296: ===========================================
297:
1.1.1.4 ! root 298: While all modern machines use 2's complement representation for
1.1.1.3 root 299: integers, there are a variety of representations for floating point
300: numbers. This means that in a cross-compiler the representation of
301: floating point numbers in the compiled program may be different from
302: that used in the machine doing the compilation.
303:
1.1.1.4 ! root 304: Because different representation systems may offer different
! 305: amounts of range and precision, the cross compiler cannot safely use
! 306: the host machine's floating point arithmetic. Therefore, floating
! 307: point constants must be represented in the target machine's format.
! 308: This means that the cross compiler cannot use `atof' to parse a
! 309: floating point constant; it must have its own special routine to use
! 310: instead. Also, constant folding must emulate the target machine's
! 311: arithmetic (or must not be done at all).
1.1.1.3 root 312:
1.1.1.4 ! root 313: The macros in the following table should be defined only if you
! 314: are cross compiling between different floating point formats.
1.1.1.3 root 315:
1.1.1.4 ! root 316: Otherwise, don't define them. Then default definitions will be set
! 317: up which use `double' as the data type, `==' to test for equality, etc.
1.1.1.3 root 318:
1.1.1.4 ! root 319: You don't need to worry about how many times you use an operand of
1.1.1.3 root 320: any of these macros. The compiler never uses operands which have
321: side effects.
322:
323: `REAL_VALUE_TYPE'
324: A macro for the C data type to be used to hold a floating point
325: value in the target machine's format. Typically this would be a
326: `struct' containing an array of `int'.
327:
328: `REAL_VALUES_EQUAL (X, Y)'
329: A macro for a C expression which compares for equality the two
330: values, X and Y, both of type `REAL_VALUE_TYPE'.
331:
332: `REAL_VALUES_LESS (X, Y)'
333: A macro for a C expression which tests whether X is less than Y,
334: both values being of type `REAL_VALUE_TYPE' and interpreted as
335: floating point numbers in the target machine's representation.
336:
337: `REAL_VALUE_LDEXP (X, SCALE)'
338: A macro for a C expression which performs the standard library
339: function `ldexp', but using the target machine's floating point
340: representation. Both X and the value of the expression have
341: type `REAL_VALUE_TYPE'. The second argument, SCALE, is an
342: integer.
343:
344: `REAL_VALUE_ATOF (STRING)'
345: A macro for a C expression which converts STRING, an expression
346: of type `char *', into a floating point number in the target
347: machine's representation. The value has type `REAL_VALUE_TYPE'.
348:
1.1.1.4 ! root 349: Define the following additional macros if you want to make
! 350: floating point constant folding work while cross compiling. If you
! 351: don't define them, cross compilation is still possible, but constant
1.1.1.3 root 352: folding will not happen for floating point values.
353:
354: `REAL_ARITHMETIC (OUTPUT, CODE, X, Y)'
355: A macro for a C statement which calculates an arithmetic
356: operation of the two floating point values X and Y, both of type
357: `REAL_VALUE_TYPE' in the target machine's representation, to
358: produce a result of the same type and representation which is
359: stored in OUTPUT (which will be a variable).
360:
361: The operation to be performed is specified by CODE, a tree code
362: which will always be one of the following: `PLUS_EXPR',
363: `MINUS_EXPR', `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'.
364:
365: The expansion of this macro is responsible for checking for
366: overflow. If overflow happens, the macro expansion should
367: execute the statement `return 0;', which indicates the inability
368: to perform the arithmetic operation requested.
369:
370: `REAL_VALUE_NEGATE (X)'
371: A macro for a C expression which returns the negative of the
372: floating point value X. Both X and the value of the expression
373: have type `REAL_VALUE_TYPE' and are in the target machine's
374: floating point representation.
375:
376: There is no way for this macro to report overflow, since
377: overflow can't happen in the negation operation.
378:
379: `REAL_VALUE_TO_INT (LOW, HIGH, X)'
380: A macro for a C expression which converts a floating point value
381: X into a double-precision integer which is then stored into LOW
382: and HIGH, two variables of type INT.
383:
384: `REAL_VALUE_FROM_INT (X, LOW, HIGH)'
385: A macro for a C expression which converts a double-precision
386: integer found in LOW and HIGH, two variables of type INT, into a
387: floating point value which is then stored into X.
388:
389:
390: File: gcc.info, Node: Misc, Next: Assembler Format, Prev: Cross-compilation, Up: Machine Macros
391:
392: Miscellaneous Parameters
393: ========================
394:
395: `CASE_VECTOR_MODE'
396: An alias for a machine mode name. This is the machine mode that
397: elements of a jump-table should have.
398:
399: `CASE_VECTOR_PC_RELATIVE'
400: Define this macro if jump-tables should contain relative
401: addresses.
402:
403: `CASE_DROPS_THROUGH'
404: Define this if control falls through a `case' insn when the
405: index value is out of range. This means the specified
406: default-label is actually ignored by the `case' insn proper.
407:
408: `IMPLICIT_FIX_EXPR'
409: An alias for a tree code that should be used by default for
410: conversion of floating point values to fixed point. Normally,
411: `FIX_ROUND_EXPR' is used.
412:
413: `FIXUNS_TRUNC_LIKE_FIX_TRUNC'
414: Define this macro if the same instructions that convert a
415: floating point number to a signed fixed point number also
416: convert validly to an unsigned one.
417:
418: `EASY_DIV_EXPR'
419: An alias for a tree code that is the easiest kind of division to
420: compile code for in the general case. It may be
421: `TRUNC_DIV_EXPR', `FLOOR_DIV_EXPR', `CEIL_DIV_EXPR' or
422: `ROUND_DIV_EXPR'. These four division operators differ in how
423: they round the result to an integer. `EASY_DIV_EXPR' is used
424: when it is permissible to use any of those kinds of division and
425: the choice should be made on the basis of efficiency.
426:
427: `DEFAULT_SIGNED_CHAR'
428: An expression whose value is 1 or 0, according to whether the
429: type `char' should be signed or unsigned by default. The user
430: can always override this default with the options
431: `-fsigned-char' and `-funsigned-char'.
432:
433: `SCCS_DIRECTIVE'
434: Define this if the preprocessor should ignore `#sccs' directives
435: and print no error message.
436:
437: `HAVE_VPRINTF'
438: Define this if the library function `vprintf' is available on
439: your system.
440:
441: `MOVE_MAX'
442: The maximum number of bytes that a single instruction can move
443: quickly from memory to memory.
444:
445: `INT_TYPE_SIZE'
446: A C expression for the size in bits of the type `int' on the
447: target machine. If you don't define this, the default is one
448: word.
449:
450: `SHORT_TYPE_SIZE'
451: A C expression for the size in bits of the type `short' on the
452: target machine. If you don't define this, the default is half a
453: word. (If this would be less than one storage unit, it is
454: rounded up to one unit.)
455:
456: `LONG_TYPE_SIZE'
457: A C expression for the size in bits of the type `long' on the
458: target machine. If you don't define this, the default is one
459: word.
460:
461: `LONG_LONG_TYPE_SIZE'
462: A C expression for the size in bits of the type `long long' on
463: the target machine. If you don't define this, the default is
464: two words.
465:
466: `CHAR_TYPE_SIZE'
467: A C expression for the size in bits of the type `char' on the
468: target machine. If you don't define this, the default is one
469: quarter of a word. (If this would be less than one storage
470: unit, it is rounded up to one unit.)
471:
472: `FLOAT_TYPE_SIZE'
473: A C expression for the size in bits of the type `float' on the
474: target machine. If you don't define this, the default is one
475: word.
476:
477: `DOUBLE_TYPE_SIZE'
478: A C expression for the size in bits of the type `double' on the
479: target machine. If you don't define this, the default is two
480: words.
481:
482: `LONG_DOUBLE_TYPE_SIZE'
483: A C expression for the size in bits of the type `long double' on
484: the target machine. If you don't define this, the default is
485: two words.
486:
487: `SLOW_BYTE_ACCESS'
488: Define this macro as a C expression which is nonzero if
489: accessing less than a word of memory (i.e. a `char' or a
490: `short') is slow (requires more than one instruction).
491:
492: `SLOW_ZERO_EXTEND'
493: Define this macro if zero-extension (of a `char' or `short' to
494: an `int') can be done faster if the destination is a register
495: that is known to be zero.
496:
497: If you define this macro, you must have instruction patterns
498: that recognize RTL structures like this:
499:
500: (set (strict-low-part (subreg:QI (reg:SI ...) 0)) ...)
501:
502: and likewise for `HImode'.
503:
504: `SHIFT_COUNT_TRUNCATED'
505: Define this macro if shift instructions ignore all but the
506: lowest few bits of the shift count. It implies that a
507: sign-extend or zero-extend instruction for the shift count can
508: be omitted.
509:
510: `TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)'
511: A C expression which is nonzero if on this machine it is safe to
512: "convert" an integer of INPREC bits to one of OUTPREC bits
513: (where OUTPREC is smaller than INPREC) by merely operating on it
514: as if it had only OUTPREC bits.
515:
516: On many machines, this expression can be 1.
517:
518: `NO_FUNCTION_CSE'
519: Define this macro if it is as good or better to call a constant
520: function address than to call an address kept in a register.
521:
522: `PROMOTE_PROTOTYPES'
523: Define this macro if an argument declared as `char' or `short'
524: in a prototype should actually be passed as an `int'. In
525: addition to avoiding errors in certain cases of mismatch, it
526: also makes for better code on certain machines.
527:
528: `STORE_FLAG_VALUE'
529: A C expression for the value stored by a store-flag instruction
530: (`sCOND') when the condition is true. This is usually 1 or -1;
531: it is required to be an odd number or a negative number.
532:
533: Do not define `STORE_FLAG_VALUE' if the machine has no
534: store-flag instructions.
535:
536: `Pmode'
537: An alias for the machine mode for pointers. Normally the
538: definition can be
539:
540: #define Pmode SImode
541:
542: `FUNCTION_MODE'
543: An alias for the machine mode used for memory references to
544: functions being called, in `call' RTL expressions. On most
545: machines this should be `QImode'.
546:
547: `INSN_MACHINE_INFO'
548: This macro should expand into a C structure type to use for the
549: machine-dependent info field specified with the optional last
550: argument in `define_insn' and `define_peephole' patterns. For
551: example, it might expand into `struct machine_info'; then it
552: would be up to you to define this structure in the `tm.h' file.
553:
554: You do not need to define this macro if you do not write the
555: optional last argument in any of the patterns in the machine
556: description.
557:
558: `DEFAULT_MACHINE_INFO'
559: This macro should expand into a C initializer to use to
560: initialize the machine-dependent info for one insn pattern. It
561: is used for patterns that do not specify the machine-dependent
562: info.
563:
564: If you do not define this macro, zero is used.
565:
566: `CONST_COSTS (X, CODE)'
567: A part of a C `switch' statement that describes the relative
568: costs of constant RTL expressions. It must contain `case'
569: labels for expression codes `const_int', `const', `symbol_ref',
570: `label_ref' and `const_double'. Each case must ultimately reach
571: a `return' statement to return the relative cost of the use of
572: that kind of constant value in an expression. The cost may
573: depend on the precise value of the constant, which is available
574: for examination in X.
575:
576: CODE is the expression code--redundant, since it can be obtained
577: with `GET_CODE (X)'.
578:
579: `DOLLARS_IN_IDENTIFIERS'
580: Define this to be nonzero if the character `$' should be allowed
581: by default in identifier names.
582:
583:
1.1 root 584: File: gcc.info, Node: Assembler Format, Prev: Misc, Up: Machine Macros
585:
586: Output of Assembler Code
587: ========================
588:
589: `ASM_SPEC'
590: A C string constant that tells the GNU CC driver program options
591: to pass to the assembler. It can also specify how to translate
592: options you give to GNU CC into options for GNU CC to pass to
593: the assembler. See the file `tm-sun3.h' for an example of this.
594:
595: Do not define this macro if it does not need to do anything.
596:
597: `LINK_SPEC'
598: A C string constant that tells the GNU CC driver program options
599: to pass to the linker. It can also specify how to translate
600: options you give to GNU CC into options for GNU CC to pass to
601: the linker.
602:
603: Do not define this macro if it does not need to do anything.
604:
605: `LIB_SPEC'
606: Another C string constant used much like `LINK_SPEC'. The
607: difference between the two is that `LIBS_SPEC' is used at the
608: end of the command given to the linker.
609:
610: If this macro is not defined, a default is provided that loads
611: the standard C library from the usual place. See `gcc.c'.
612:
1.1.1.4 ! root 613: `LIBG_SPEC'
! 614: Another C string constant used much like `LINK_SPEC'. This
! 615: controls whether to link `libg.a' when debugging. Some systems
! 616: expect this; others do not have any `libg.a'.
! 617:
! 618: If this macro is not defined, a default is provided that loads
! 619: the `libg.a' provided `-g' is specified. See `gcc.c'.
! 620:
1.1 root 621: `STARTFILE_SPEC'
622: Another C string constant used much like `LINK_SPEC'. The
623: difference between the two is that `STARTFILE_SPEC' is used at
624: the very beginning of the command given to the linker.
625:
626: If this macro is not defined, a default is provided that loads
627: the standard C startup file from the usual place. See `gcc.c'.
628:
629: `STANDARD_EXEC_PREFIX'
630: Define this macro as a C string constant if you wish to override
631: the standard choice of `/usr/local/lib/gcc-' as the default
632: prefix to try when searching for the executable files of the
633: compiler.
634:
635: The prefix specified by the `-B' option, if any, is tried before
636: the default prefix. After the default prefix, if the executable
637: is not found that way, `/usr/lib/gcc-' is tried next; then the
638: directories in your search path for shell commands are searched.
639:
640: `STANDARD_STARTFILE_PREFIX'
641: Define this macro as a C string constant if you wish to override
642: the standard choice of `/usr/local/lib/' as the default prefix
643: to try when searching for startup files such as `crt0.o'.
644:
645: In this search, all the prefixes tried for executable files are
646: tried first. Then comes the default startfile prefix specified
647: by this macro, followed by the prefixes `/lib/' and `/usr/lib/'
648: as last resorts.
649:
650: `ASM_FILE_START (STREAM)'
651: A C expression which outputs to the stdio stream STREAM some
652: appropriate text to go at the start of an assembler file.
653:
654: Normally this macro is defined to output a line containing
655: `#NO_APP', which is a comment that has no effect on most
656: assemblers but tells the GNU assembler that it can save time by
657: not checking for certain assembler constructs.
658:
659: On systems that use SDB, it is necessary to output certain
660: commands; see `tm-attasm.h'.
661:
662: `ASM_FILE_END (STREAM)'
663: A C expression which outputs to the stdio stream STREAM some
664: appropriate text to go at the end of an assembler file.
665:
666: If this macro is not defined, the default is to output nothing
667: special at the end of the file. Most systems don't require any
668: definition.
669:
670: On systems that use SDB, it is necessary to output certain
671: commands; see `tm-attasm.h'.
672:
673: `ASM_IDENTIFY_GCC (FILE)'
674: A C statement to output assembler commands which will identify
675: the object file as having been compiled with GNU CC (or another
676: GNU compiler).
677:
678: If you don't define this macro, the string `gcc_compiled.:' is
679: output. This string is calculated to define a symbol which, on
680: BSD systems, will never be defined for any other reason. GDB
681: checks for the presence of this symbol when reading the symbol
682: table of an executable.
683:
684: On non-BSD systems, you must arrange communication with GDB in
685: some other fashion. If GDB is not used on your system, you can
686: define this macro with an empty body.
687:
688: `ASM_APP_ON'
689: A C string constant for text to be output before each `asm'
690: statement or group of consecutive ones. Normally this is
691: `"#APP"', which is a comment that has no effect on most
692: assemblers but tells the GNU assembler that it must check the
693: lines that follow for all valid assembler constructs.
694:
695: `ASM_APP_OFF'
696: A C string constant for text to be output after each `asm'
697: statement or group of consecutive ones. Normally this is
698: `"#NO_APP"', which tells the GNU assembler to resume making the
699: time-saving assumptions that are valid for ordinary compiler
700: output.
701:
702: `TEXT_SECTION_ASM_OP'
703: A C string constant for the assembler operation that should
704: precede instructions and read-only data. Normally `".text"' is
705: right.
706:
707: `DATA_SECTION_ASM_OP'
708: A C string constant for the assembler operation to identify the
709: following data as writable initialized data. Normally `".data"'
710: is right.
711:
712: `EXTRA_SECTIONS'
713: A list of names for sections other than the standard two, which
714: are `in_text' and `in_data'. You need not define this macro on
715: a system with no other sections (that GCC needs to use).
716:
717: `EXTRA_SECTION_FUNCTIONS'
718: One or more functions to be defined in `varasm.c'. These
719: functions should do jobs analogous to those of `text_section'
720: and `data_section', for your additional sections. Do not define
721: this macro if you do not define `EXTRA_SECTIONS'.
722:
723: `SELECT_SECTION (EXP)'
724: A C statement or statements to switch to the appropriate section
725: for output of EXP. You can assume that EXP is either a
726: `VAR_DECL' node or a constant of some sort. Select the section
727: by calling `text_section' or one of the alternatives for other
728: sections.
729:
730: Do not define this macro if you use only the standard two
731: sections and put all read-only variables and constants in the
732: text section.
733:
734: `SELECT_RTX_SECTION (MODE, RTX)'
735: A C statement or statements to switch to the appropriate section
736: for output of RTX in mode MODE. You can assume that RTX is some
737: kind of constant in RTL. The argument MODE is redundant except
738: in the case of a `const_int' rtx. Select the section by calling
739: `text_section' or one of the alternatives for other sections.
740:
741: Do not define this macro if you use only the standard two
742: sections and put all constants in the text section.
743:
744: `REGISTER_NAMES'
745: A C initializer containing the assembler's names for the machine
746: registers, each one as a C string constant. This is what
747: translates register numbers in the compiler into assembler
748: language.
749:
750: `DBX_REGISTER_NUMBER (REGNO)'
751: A C expression that returns the DBX register number for the
752: compiler register number REGNO. In simple cases, the value of
753: this expression may be REGNO itself. But sometimes there are
754: some registers that the compiler knows about and DBX does not,
755: or vice versa. In such cases, some register may need to have
756: one number in the compiler and another for DBX.
757:
758: `DBX_DEBUGGING_INFO'
759: Define this macro if GNU CC should produce debugging output for
760: DBX in response to the `-g' option.
761:
762: `SDB_DEBUGGING_INFO'
763: Define this macro if GNU CC should produce debugging output for
764: SDB in response to the `-g' option.
765:
766: `PUT_SDB_OP'
767: Define these macros to override the assembler syntax for the
768: special SDB assembler directives. See `sdbout.c' for a list of
769: these macros and their arguments. If the standard syntax is
770: used, you need not define them yourself.
771:
772: `SDB_GENERATE_FAKE'
773: Define this macro to override the usual method of constructing a
774: dummy name for anonymous structure and union types. See
775: `sdbout.c' for more information.
776:
777: `DBX_NO_XREFS'
778: Define this macro if DBX on your system does not support the
779: construct `xsTAGNAME'. On some systems, this construct is used
780: to describe a forward reference to a structure named TAGNAME.
781: On other systems, this construct is not supported at all.
782:
783: `DBX_CONTIN_LENGTH'
784: A symbol name in DBX-format debugging information is normally
785: continued (split into two separate `.stabs' directives) when it
786: exceeds a certain length (by default, 80 characters). On some
787: operating systems, DBX requires this splitting; on others,
788: splitting must not be done. You can inhibit splitting by
789: defining this macro with the value zero. You can override the
790: default splitting-length by defining this macro as an expression
791: for the length you desire.
792:
793: `DBX_CONTIN_CHAR'
794: Normally continuation is indicated by adding a `\' character to
795: the end of a `.stabs' string when a continuation follows. To
796: use a different character instead, define this macro as a
797: character constant for the character you want to use. Do not
798: define this macro if backslash is correct for your system.
799:
800: `DBX_STATIC_STAB_DATA_SECTION'
801: Define this macro if it is necessary to go to the data section
802: before outputting the `.stabs' pseudo-op for a non-global static
803: variable.
804:
805: `ASM_OUTPUT_LABEL (STREAM, NAME)'
806: A C statement (sans semicolon) to output to the stdio stream
807: STREAM the assembler definition of a label named NAME. Use the
808: expression `assemble_name (STREAM, NAME)' to output the name
809: itself; before and after that, output the additional assembler
810: syntax for defining the name, and a newline.
811:
812: `ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)'
813: A C statement (sans semicolon) to output to the stdio stream
814: STREAM any text necessary for declaring the name NAME of a
815: function which is being defined. This macro is responsible for
816: outputting the label definition (perhaps using
817: `ASM_OUTPUT_LABEL'). The argument DECL is the `FUNCTION_DECL'
818: tree node representing the function.
819:
820: If this macro is not defined, then the function name is defined
821: in the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
822:
823: `ASM_GLOBALIZE_LABEL (STREAM, NAME)'
824: A C statement (sans semicolon) to output to the stdio stream
825: STREAM some commands that will make the label NAME global; that
826: is, available for reference from other files. Use the
827: expression `assemble_name (STREAM, NAME)' to output the name
828: itself; before and after that, output the additional assembler
829: syntax for making that name global, and a newline.
830:
831: `ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)'
832: A C statement (sans semicolon) to output to the stdio stream
833: STREAM any text necessary for declaring the name of an external
834: symbol named NAME which is referenced in this compilation but
835: not defined. The value of DECL is the tree node for the
836: declaration.
837:
838: This macro need not be defined if it does not need to output
839: anything. The GNU assembler and most Unix assemblers don't
840: require anything.
841:
842: `ASM_OUTPUT_LABELREF (STREAM, NAME)'
843: A C statement to output to the stdio stream STREAM a reference
844: in assembler syntax to a label named NAME. The character `_'
845: should be added to the front of the name, if that is customary
846: on your operating system, as it is in most Berkeley Unix
847: systems. This macro is used in `assemble_name'.
848:
849: `ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)'
850: A C statement to store into the string STRING a label whose name
851: is made from the string PREFIX and the number NUM.
852:
853: This string, when output subsequently by `ASM_OUTPUT_LABELREF',
854: should produce the same output that `ASM_OUTPUT_INTERNAL_LABEL'
855: would produce with the same PREFIX and NUM.
856:
857: `ASM_OUTPUT_INTERNAL_LABEL (STREAM, PREFIX, NUM)'
858: A C statement to output to the stdio stream STREAM a label whose
859: name is made from the string PREFIX and the number NUM. These
860: labels are used for internal purposes, and there is no reason
861: for them to appear in the symbol table of the object file. On
862: many systems, the letter `L' at the beginning of a label has
863: this effect. The usual definition of this macro is as follows:
864:
865: fprintf (STREAM, "L%s%d:\n", PREFIX, NUM)
866:
867: `ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)'
868: Define this if the label before a jump-table needs to be output
869: specially. The first three arguments are the same as for
870: `ASM_OUTPUT_INTERNAL_LABEL'; the fourth argument is the
871: jump-table which follows (a `jump_insn' containing an `addr_vec'
872: or `addr_diff_vec').
873:
874: This feature is used on system V to output a `swbeg' statement
875: for the table.
876:
877: If this macro is not defined, these labels are output with
878: `ASM_OUTPUT_INTERNAL_LABEL'.
879:
880: `ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)'
881: Define this if something special must be output at the end of a
882: jump-table. The definition should be a C statement to be
883: executed after the assembler code for the table is written. It
884: should write the appropriate code to stdio stream STREAM. The
885: argument TABLE is the jump-table insn, and NUM is the
886: label-number of the preceding label.
887:
888: If this macro is not defined, nothing special is output at the
889: end of the jump-table.
890:
891: `ASM_OUTPUT_ALIGN_CODE (FILE)'
892: A C expression to output text to align the location counter in
893: the way that is desirable at a point in the code that is reached
894: only by jumping.
895:
896: This macro need not be defined if you don't want any special
897: alignment to be done at such a time. Most machine descriptions
898: do not currently define the macro.
899:
900: `ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)'
901: A C expression to assign to OUTVAR (which is a variable of type
902: `char *') a newly allocated string made from the string NAME and
903: the number NUMBER, with some suitable punctuation added. Use
904: `alloca' to get space for the string.
905:
906: This string will be used as the argument to
907: `ASM_OUTPUT_LABELREF' to produce an assembler label for an
908: internal static variable whose name is NAME. Therefore, the
909: string must be such as to result in valid assembler code. The
910: argument NUMBER is different each time this macro is executed;
911: it prevents conflicts between similarly-named internal static
912: variables in different scopes.
913:
914: Ideally this string should not be a valid C identifier, to
915: prevent any conflict with the user's own symbols. Most
916: assemblers allow periods or percent signs in assembler symbols;
917: putting at least one of these between the name and the number
918: will suffice.
919:
920: `ASM_OUTPUT_REG_PUSH (STREAM, REGNO)'
921: A C expression to output to STREAM some assembler code which
922: will push hard register number REGNO onto the stack. The code
923: need not be optimal, since this macro is used only when profiling.
924:
925: `ASM_OUTPUT_REG_POP (STREAM, REGNO)'
926: A C expression to output to STREAM some assembler code which
927: will pop hard register number REGNO off of the stack. The code
928: need not be optimal, since this macro is used only when profiling.
929:
930: `ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, VALUE, REL)'
931: This macro should be provided on machines where the addresses in
932: a dispatch table are relative to the table's own address.
933:
934: The definition should be a C statement to output to the stdio
935: stream STREAM an assembler pseudo-instruction to generate a
936: difference between two labels. VALUE and REL are the numbers of
937: two internal labels. The definitions of these labels are output
938: using `ASM_OUTPUT_INTERNAL_LABEL', and they must be printed in
939: the same way here. For example,
940:
941: fprintf (STREAM, "\t.word L%d-L%d\n",
942: VALUE, REL)
943:
944: `ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)'
945: This macro should be provided on machines where the addresses in
946: a dispatch table are absolute.
947:
948: The definition should be a C statement to output to the stdio
949: stream STREAM an assembler pseudo-instruction to generate a
950: reference to a label. VALUE is the number of an internal label
951: whose definition is output using `ASM_OUTPUT_INTERNAL_LABEL'.
952: For example,
953:
954: fprintf (STREAM, "\t.word L%d\n", VALUE)
955:
956: `ASM_OUTPUT_DOUBLE (STREAM, VALUE)'
957: A C statement to output to the stdio stream STREAM an assembler
958: instruction to assemble a `double' constant whose value is
959: VALUE. VALUE will be a C expression of type `double'.
960:
961: `ASM_OUTPUT_FLOAT (STREAM, VALUE)'
962: A C statement to output to the stdio stream STREAM an assembler
963: instruction to assemble a `float' constant whose value is VALUE.
964: vALUE will be a C expression of type `float'.
965:
966: `ASM_OUTPUT_INT (STREAM, EXP)'
967: `ASM_OUTPUT_SHORT (STREAM, EXP)'
968: `ASM_OUTPUT_CHAR (STREAM, EXP)'
969: A C statement to output to the stdio stream STREAM an assembler
970: instruction to assemble a `int', `short' or `char' constant
971: whose value is VALUE. The argument EXP will be an RTL
972: expression which represents a constant value. Use
1.1.1.2 root 973: `output_addr_const (STREAM, EXP)' to output this value as an
974: assembler expression.
1.1 root 975:
976: `ASM_OUTPUT_DOUBLE_INT (STREAM, EXP)'
977: A C statement to output to the stdio stream STREAM an assembler
978: instruction to assemble a `long long' constant whose value is
979: EXP. The argument EXP will be an RTL expression which
980: represents a constant value. It may be a `const_double' RTX, or
981: it may be an ordinary single-precision constant. In the latter
982: case, you should zero-extend it.
983:
984: `ASM_OUTPUT_BYTE (STREAM, VALUE)'
985: A C statement to output to the stdio stream STREAM an assembler
986: instruction to assemble a single byte containing the number VALUE.
987:
988: `ASM_OUTPUT_ASCII (STREAM, PTR, LEN)'
989: A C statement to output to the stdio stream STREAM an assembler
990: instruction to assemble a string constant containing the LEN
991: bytes at PTR. PTR will be a C expression of type `char *' and
992: LEN a C expression of type `int'.
993:
994: If the assembler has a `.ascii' pseudo-op as found in the
995: Berkeley Unix assembler, do not define the macro
996: `ASM_OUTPUT_ASCII'.
997:
998: `ASM_OUTPUT_SKIP (STREAM, NBYTES)'
999: A C statement to output to the stdio stream STREAM an assembler
1000: instruction to advance the location counter by NBYTES bytes.
1001: NBYTES will be a C expression of type `int'.
1002:
1003: `ASM_OUTPUT_ALIGN (STREAM, POWER)'
1004: A C statement to output to the stdio stream STREAM an assembler
1005: instruction to advance the location counter to a multiple of 2
1006: to the POWER bytes. POWER will be a C expression of type `int'.
1007:
1008: `ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)'
1009: A C statement (sans semicolon) to output to the stdio stream
1010: STREAM the assembler definition of a common-label named NAME
1011: whose size is SIZE bytes. The variable ROUNDED is the size
1012: rounded up to whatever alignment the caller wants.
1013:
1014: Use the expression `assemble_name (STREAM, NAME)' to output the
1015: name itself; before and after that, output the additional
1016: assembler syntax for defining the name, and a newline.
1017:
1018: This macro controls how the assembler definitions of
1019: uninitialized global variables are output.
1020:
1021: `ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)'
1022: A C statement (sans semicolon) to output to the stdio stream
1023: STREAM the assembler definition of a local-common-label named
1024: NAME whose size is SIZE bytes. The variable ROUNDED is the size
1025: rounded up to whatever alignment the caller wants.
1026:
1027: Use the expression `assemble_name (STREAM, NAME)' to output the
1028: name itself; before and after that, output the additional
1029: assembler syntax for defining the name, and a newline.
1030:
1031: This macro controls how the assembler definitions of
1032: uninitialized static variables are output.
1033:
1034: `ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)'
1035: A C statment to output DBX or SDB debugging information which
1036: indicates that filename NAME is the current source file to the
1037: stdio stream STREAM.
1038:
1039: This macro need not be defined if the standard form of debugging
1040: information for the debugger in use is appropriate.
1041:
1042: `ASM_OUTPUT_SOURCE_LINE (STREAM, LINE)'
1043: A C statment to output DBX or SDB debugging information before
1044: code for line number LINE of the current source file to the
1045: stdio stream STREAM.
1046:
1047: This macro need not be defined if the standard form of debugging
1048: information for the debugger in use is appropriate.
1049:
1050: `ASM_OUTPUT_IDENT (STREAM, STRING)'
1051: A C statement to output something to the assembler file to
1052: handle a `#ident' directive containing the text STRING. If this
1053: macro is not defined, nothing is output for a `#ident' directive.
1054:
1055: `TARGET_BELL'
1056: A C constant expression for the integer value for escape
1057: sequence `\a'.
1058:
1059: `TARGET_BS'
1060: `TARGET_TAB'
1061: `TARGET_NEWLINE'
1062: C constant expressions for the integer values for escape
1063: sequences `\b', `\t' and `\n'.
1064:
1065: `TARGET_VT'
1066: `TARGET_FF'
1067: `TARGET_CR'
1068: C constant expressions for the integer values for escape
1069: sequences `\v', `\f' and `\r'.
1070:
1071: `ASM_OUTPUT_OPCODE (STREAM, PTR)'
1072: Define this macro if you are using an unusual assembler that
1073: requires different names for the machine instructions.
1074:
1075: The definition is a C statement or statements which output an
1076: assembler instruction opcode to the stdio stream STREAM. The
1077: macro-operand PTR is a variable of type `char *' which points to
1.1.1.2 root 1078: the opcode name in its "internal" form--the form that is written
1079: in the machine description. The definition should output the
1080: opcode name to STREAM, performing any translation you desire,
1081: and increment the variable PTR to point at the end of the opcode
1082: so that it will not be output twice.
1.1 root 1083:
1084: In fact, your macro definition may process less than the entire
1085: opcode name, or more than the opcode name; but if you want to
1086: process text that includes `%'-sequences to substitute operands,
1087: you must take care of the substitution yourself. Just be sure
1088: to increment PTR over whatever text should not be output normally.
1089:
1090: If you need to look at the operand values, they can be found as
1091: the elements of `recog_operand'.
1092:
1093: If the macro definition does nothing, the instruction is output
1094: in the usual way.
1095:
1096: `FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)'
1097: If defined, a C statement to be executed just prior to the
1098: output of assembler code for INSN, to modify the extracted
1099: operands so they will be output differently.
1100:
1101: Here the argument OPVEC is the vector containing the operands
1102: extracted from INSN, and NOPERANDS is the number of elements of
1103: the vector which contain meaningful data for this insn. The
1104: contents of this vector are what will be used to convert the
1105: insn template into assembler code, so you can change the
1106: assembler output by changing the contents of the vector.
1107:
1108: This macro is useful when various assembler syntaxes share a
1109: single file of instruction patterns; by defining this macro
1110: differently, you can cause a large class of instructions to be
1111: output differently (such as with rearranged operands).
1112: Naturally, variations in assembler syntax affecting individual
1113: insn patterns ought to be handled by writing conditional output
1114: routines in those patterns.
1115:
1116: If this macro is not defined, it is equivalent to a null
1117: statement.
1118:
1119: `PRINT_OPERAND (STREAM, X, CODE)'
1120: A C compound statement to output to stdio stream STREAM the
1121: assembler syntax for an instruction operand X. X is an RTL
1122: expression.
1123:
1124: CODE is a value that can be used to specify one of several ways
1125: of printing the operand. It is used when identical operands
1126: must be printed differently depending on the context. CODE
1127: comes from the `%' specification that was used to request
1128: printing of the operand. If the specification was just `%DIGIT'
1129: then CODE is 0; if the specification was `%LTR DIGIT' then CODE
1130: is the ASCII code for LTR.
1131:
1132: If X is a register, this macro should print the register's name.
1133: The names can be found in an array `reg_names' whose type is
1134: `char *[]'. `reg_names' is initialized from `REGISTER_NAMES'.
1135:
1136: When the machine description has a specification `%PUNCT' (a `%'
1137: followed by a punctuation character), this macro is called with
1138: a null pointer for X and the punctuation character for CODE.
1139:
1140: `PRINT_OPERAND_PUNCT_VALID_P (CODE)'
1141: A C expression which evaluates to true if CODE is a valid
1142: punctuation character for use in the `PRINT_OPERAND' macro. If
1143: `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
1144: punctuation characters (except for the standard one, `%') are
1145: used in this way.
1146:
1147: `PRINT_OPERAND_ADDRESS (STREAM, X)'
1148: A C compound statement to output to stdio stream STREAM the
1149: assembler syntax for an instruction operand that is a memory
1150: reference whose address is X. X is an RTL expression.
1151:
1152: `ASM_OPEN_PAREN'
1153: `ASM_CLOSE_PAREN'
1154: These macros are defined as C string constant, describing the
1155: syntax in the assembler for grouping arithmetic expressions.
1156: The following definitions are correct for most assemblers:
1157:
1158: #define ASM_OPEN_PAREN "("
1159: #define ASM_CLOSE_PAREN ")"
1160:
1.1.1.4 ! root 1161:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.