home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 7 / FreshFishVol7.bin / bbs / gnu / gcc-2.3.3-src.lha / GNU / src / amiga / gcc-2.3.3 / reload.h < prev    next >
C/C++ Source or Header  |  1994-02-06  |  4KB  |  116 lines

  1. /* Communication between reload.c and reload1.c.
  2.    Copyright (C) 1987, 1991 Free Software Foundation, Inc.
  3.  
  4. This file is part of GNU CC.
  5.  
  6. GNU CC is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2, or (at your option)
  9. any later version.
  10.  
  11. GNU CC is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GNU CC; see the file COPYING.  If not, write to
  18. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20.  
  21. /* If secondary reloads are the same for inputs and outputs, define those
  22.    macros here.  */
  23.  
  24. #ifdef SECONDARY_RELOAD_CLASS
  25. #define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, X) \
  26.   SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
  27. #define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, X) \
  28.   SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
  29. #endif
  30.  
  31. /* If either macro is defined, show that we need secondary reloads.  */
  32. #if defined(SECONDARY_INPUT_RELOAD_CLASS) || defined(SECONDARY_OUTPUT_RELOAD_CLASS)
  33. #define HAVE_SECONDARY_RELOADS
  34. #endif
  35.  
  36. /* See reload.c and reload1.c for comments on these variables.  */
  37.  
  38. /* Maximum number of reloads we can need.  */
  39. #define MAX_RELOADS (2 * MAX_RECOG_OPERANDS * (MAX_REGS_PER_ADDRESS + 1))
  40.  
  41. extern rtx reload_in[MAX_RELOADS];
  42. extern rtx reload_out[MAX_RELOADS];
  43. extern rtx reload_in_reg[MAX_RELOADS];
  44. extern enum reg_class reload_reg_class[MAX_RELOADS];
  45. extern enum machine_mode reload_inmode[MAX_RELOADS];
  46. extern enum machine_mode reload_outmode[MAX_RELOADS];
  47. extern char reload_strict_low[MAX_RELOADS];
  48. extern char reload_optional[MAX_RELOADS];
  49. extern int reload_inc[MAX_RELOADS];
  50. extern int reload_needed_for_multiple[MAX_RELOADS];
  51. extern rtx reload_needed_for[MAX_RELOADS];
  52. extern int reload_secondary_reload[MAX_RELOADS];
  53. extern int reload_secondary_p[MAX_RELOADS];
  54. #ifdef MAX_INSN_CODE
  55. extern enum insn_code reload_secondary_icode[MAX_RELOADS];
  56. #endif
  57. extern int n_reloads;
  58.  
  59. extern rtx reload_reg_rtx[MAX_RELOADS];
  60.  
  61. enum reload_when_needed
  62. {
  63.   RELOAD_FOR_INPUT_RELOAD_ADDRESS,
  64.   RELOAD_FOR_OUTPUT_RELOAD_ADDRESS,
  65.   RELOAD_FOR_OPERAND_ADDRESS,
  66.   /* The following two are not fully implemented.
  67.      They are used in emitting insns, but they aren't distinguished from
  68.      RELOAD_OTHER when computing the number of spills.  What they accomplish
  69.      is to avoid precluding inheritance of already loaded values
  70.      for input reloads when there are also output reloads.  */
  71.   RELOAD_FOR_INPUT,
  72.   RELOAD_FOR_OUTPUT,
  73.   RELOAD_OTHER
  74. };
  75.  
  76. extern enum reload_when_needed reload_when_needed[MAX_RELOADS];
  77.  
  78. extern rtx *reg_equiv_constant;
  79. extern rtx *reg_equiv_memory_loc;
  80. extern rtx *reg_equiv_address;
  81. extern rtx *reg_equiv_mem;
  82.  
  83. /* All the "earlyclobber" operands of the current insn
  84.    are recorded here.  */
  85. extern int n_earlyclobbers;
  86. extern rtx reload_earlyclobbers[MAX_RECOG_OPERANDS];
  87.  
  88. /* First uid used by insns created by reload in this function.
  89.    Used in find_equiv_reg.  */
  90. extern int reload_first_uid;
  91.  
  92. /* Nonzero if indirect addressing is supported when the innermost MEM is
  93.    of the form (MEM (SYMBOL_REF sym)).  It is assumed that the level to
  94.    which these are valid is the same as spill_indirect_levels, above.   */
  95.  
  96. extern char indirect_symref_ok;
  97.  
  98. /* Nonzero if an address (plus (reg frame_pointer) (reg ...)) is valid.  */
  99. extern char double_reg_address_ok;
  100.  
  101. #ifdef MAX_INSN_CODE
  102. /* These arrays record the insn_code of insns that may be needed to
  103.    perform input and output reloads of special objects.  They provide a
  104.    place to pass a scratch register.  */
  105. extern enum insn_code reload_in_optab[];
  106. extern enum insn_code reload_out_optab[];
  107. #endif
  108.  
  109. extern void init_reload ();
  110. extern void find_reloads ();
  111. extern void subst_reloads ();
  112. extern rtx get_secondary_mem ();
  113. extern rtx eliminate_regs ();
  114. extern rtx gen_input_reload ();
  115. extern rtx find_replacement ();
  116.