Annotation of GNUtools/cc/regs.h, revision 1.1.1.1

1.1       root        1: /* Define per-register tables for data flow info and register allocation.
                      2:    Copyright (C) 1987, 1993 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: 
                     22: #define REG_BYTES(R) mode_size[(int) GET_MODE (R)]
                     23: 
                     24: /* Get the number of consecutive hard regs required to hold the REG rtx R.
                     25:    When something may be an explicit hard reg, REG_SIZE is the only
                     26:    valid way to get this value.  You cannot get it from the regno.  */
                     27: 
                     28: #define REG_SIZE(R) \
                     29:   ((mode_size[(int) GET_MODE (R)] + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
                     30: 
                     31: /* Maximum register number used in this function, plus one.  */
                     32: 
                     33: extern int max_regno;
                     34: 
                     35: /* Maximum number of SCRATCH rtx's in each block of this function.  */
                     36: 
                     37: extern int max_scratch;
                     38: 
                     39: /* Indexed by n, gives number of times (REG n) is used or set.
                     40:    References within loops may be counted more times.  */
                     41: 
                     42: extern int *reg_n_refs;
                     43: 
                     44: /* Indexed by n, gives number of times (REG n) is set.  */
                     45: 
                     46: extern short *reg_n_sets;
                     47: 
                     48: /* Indexed by N, gives number of insns in which register N dies.
                     49:    Note that if register N is live around loops, it can die
                     50:    in transitions between basic blocks, and that is not counted here.
                     51:    So this is only a reliable indicator of how many regions of life there are
                     52:    for registers that are contained in one basic block.  */
                     53: 
                     54: extern short *reg_n_deaths;
                     55: 
                     56: /* Get the number of consecutive words required to hold pseudo-reg N.  */
                     57: 
                     58: #define PSEUDO_REGNO_SIZE(N) \
                     59:   ((GET_MODE_SIZE (PSEUDO_REGNO_MODE (N)) + UNITS_PER_WORD - 1)                \
                     60:    / UNITS_PER_WORD)
                     61: 
                     62: /* Get the number of bytes required to hold pseudo-reg N.  */
                     63: 
                     64: #define PSEUDO_REGNO_BYTES(N) \
                     65:   GET_MODE_SIZE (PSEUDO_REGNO_MODE (N))
                     66: 
                     67: /* Get the machine mode of pseudo-reg N.  */
                     68: 
                     69: #define PSEUDO_REGNO_MODE(N) GET_MODE (regno_reg_rtx[N])
                     70: 
                     71: /* Indexed by N, gives number of CALL_INSNS across which (REG n) is live.  */
                     72: 
                     73: extern int *reg_n_calls_crossed;
                     74: 
                     75: /* Total number of instructions at which (REG n) is live.
                     76:    The larger this is, the less priority (REG n) gets for
                     77:    allocation in a hard register (in global-alloc).
                     78:    This is set in flow.c and remains valid for the rest of the compilation
                     79:    of the function; it is used to control register allocation.
                     80: 
                     81:    local-alloc.c may alter this number to change the priority.
                     82: 
                     83:    Negative values are special.
                     84:    -1 is used to mark a pseudo reg which has a constant or memory equivalent
                     85:    and is used infrequently enough that it should not get a hard register.
                     86:    -2 is used to mark a pseudo reg for a parameter, when a frame pointer
                     87:    is not required.  global.c makes an allocno for this but does
                     88:    not try to assign a hard register to it.  */
                     89: 
                     90: extern int *reg_live_length;
                     91: 
                     92: /* Vector of substitutions of register numbers,
                     93:    used to map pseudo regs into hardware regs.  */
                     94: 
                     95: extern short *reg_renumber;
                     96: 
                     97: /* Vector indexed by hardware reg
                     98:    saying whether that reg is ever used.  */
                     99: 
                    100: extern char regs_ever_live[FIRST_PSEUDO_REGISTER];
                    101: 
                    102: /* Vector indexed by hardware reg giving its name.  */
                    103: 
                    104: extern char *reg_names[FIRST_PSEUDO_REGISTER];
                    105: 
                    106: /* Vector indexed by regno; gives uid of first insn using that reg.
                    107:    This is computed by reg_scan for use by cse and loop.
                    108:    It is sometimes adjusted for subsequent changes during loop,
                    109:    but not adjusted by cse even if cse invalidates it.  */
                    110: 
                    111: extern int *regno_first_uid;
                    112: 
                    113: /* Vector indexed by regno; gives uid of last insn using that reg.
                    114:    This is computed by reg_scan for use by cse and loop.
                    115:    It is sometimes adjusted for subsequent changes during loop,
                    116:    but not adjusted by cse even if cse invalidates it.
                    117:    This is harmless since cse won't scan through a loop end.  */
                    118: 
                    119: extern int *regno_last_uid;
                    120: 
                    121: /* Similar, but includes insns that mention the reg in their notes.  */
                    122: 
                    123: extern int *regno_last_note_uid;
                    124: 
                    125: /* Vector indexed by regno; contains 1 for a register is considered a pointer.
                    126:    Reloading, etc. will use a pointer register rather than a non-pointer
                    127:    as the base register in an address, when there is a choice of two regs.  */
                    128: 
                    129: extern char *regno_pointer_flag;
                    130: #define REGNO_POINTER_FLAG(REGNO) regno_pointer_flag[REGNO]
                    131: 
                    132: /* List made of EXPR_LIST rtx's which gives pairs of pseudo registers
                    133:    that have to go in the same hard reg.  */
                    134: extern rtx regs_may_share;
                    135: 
                    136: /* Vector mapping pseudo regno into the REG rtx for that register.
                    137:    This is computed by reg_scan.  */
                    138: 
                    139: extern rtx *regno_reg_rtx;
                    140: 
                    141: /* Flag set by local-alloc or global-alloc if they decide to allocate
                    142:    something in a call-clobbered register.  */
                    143: 
                    144: extern int caller_save_needed;
                    145: 
                    146: /* Predicate to decide whether to give a hard reg to a pseudo which
                    147:    is referenced REFS times and would need to be saved and restored
                    148:    around a call CALLS times.  */
                    149: 
                    150: #ifndef CALLER_SAVE_PROFITABLE
                    151: #define CALLER_SAVE_PROFITABLE(REFS, CALLS)  (4 * (CALLS) < (REFS))
                    152: #endif
                    153: 
                    154: /* Allocated in local_alloc.  */
                    155: 
                    156: /* A list of SCRATCH rtl allocated by local-alloc.  */
                    157: extern rtx *scratch_list;
                    158: /* The basic block in which each SCRATCH is used.  */
                    159: extern int *scratch_block;
                    160: /* The length of the arrays pointed to by scratch_block and scratch_list.  */
                    161: extern int scratch_list_length;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.