home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / gnu / gccdist / gcc / gcc.info-10 < prev    next >
Encoding:
GNU Info File  |  1992-09-10  |  49.5 KB  |  1,137 lines

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