diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 89b269a70241..39b001ccc9b2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,22 @@ +Sat Sep 18 11:15:58 1999 Alex Samuel + + * rtl.h (global_rtx_index): New enum. + (global_rtl): Change to array of rtx. + (pc_rtx, cc0_rtx): Redefine accordingly. + (cc0_rtx, stack_pointer_rtx, frame_pointer_rtx): Likewise. + (hard_frame_pointer_rtx, arg_pointer_rtx): Likewise. + (virtual_incoming_args_rtx, virtual_stack_vars_rtx): Likewise. + (virtual_outgoing_args_rtx, virtual_cfa): Likewise. + (const_int_rtx): Change to array of rtx. + (const0_rtx, const1_rtx, const2_rtx, constm1_rtx): Redefine + accordingly. + * emit-rtl.c (global_rtl): Change to array of rtx. + (const_int_rtx): Change to aray of rtx. + (gen_rtx_CONST_INT): Redefine accordingly. + (init_emit_once): Allocate and initialize global_rtl. Likewise + for const_int_rtx. Add both as GC roots. + * genattrtab.c (global_rtl): Update declaration. + 1999-09-17 Ulrich Drepper * Makefile (USER_H): Add iso646.h back. diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 08f8c275398c..56886fb280f8 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -84,28 +84,7 @@ static int no_line_numbers; All of these except perhaps the floating-point CONST_DOUBLEs are unique; no other rtx-object will be equal to any of these. */ -/* Avoid warnings by initializing the `fld' field. Since its a union, - bypass problems with KNR compilers by only doing so when __GNUC__. */ -#ifdef __GNUC__ -#define FLDI , {{0}} -#else -#define FLDI -#endif - -struct _global_rtl global_rtl = -{ - {PC, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* pc_rtx */ - {CC0, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* cc0_rtx */ - {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* stack_pointer_rtx */ - {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* frame_pointer_rtx */ - {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* hard_frame_pointer_rtx */ - {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* arg_pointer_rtx */ - {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* virtual_incoming_args_rtx */ - {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* virtual_stack_vars_rtx */ - {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* virtual_stack_dynamic_rtx */ - {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* virtual_outgoing_args_rtx */ - {REG, VOIDmode, 0, 0, 0, 0, 0, 0, 0, 0, 0 FLDI }, /* virtual_cfa_rtx */ -}; +rtx global_rtl[GR_MAX]; /* We record floating-point CONST_DOUBLEs in each floating-point mode for the values of 0, 1, and 2. For the integer entries and VOIDmode, we @@ -153,7 +132,7 @@ rtx return_address_pointer_rtx; /* (REG:Pmode RETURN_ADDRESS_POINTER_REGNUM) */ to save space during the compilation and simplify comparisons of integers. */ -struct rtx_def const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1]; +rtx const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1]; /* start_sequence and gen_sequence can make a lot of rtx expressions which are shortly thrown away. We use two mechanisms to prevent this waste: @@ -197,7 +176,7 @@ gen_rtx_CONST_INT (mode, arg) HOST_WIDE_INT arg; { if (arg >= - MAX_SAVED_CONST_INT && arg <= MAX_SAVED_CONST_INT) - return &const_int_rtx[arg + MAX_SAVED_CONST_INT]; + return const_int_rtx[arg + MAX_SAVED_CONST_INT]; #if STORE_FLAG_VALUE != 1 && STORE_FLAG_VALUE != -1 if (const_true_rtx && arg == STORE_FLAG_VALUE) @@ -3515,121 +3494,32 @@ init_emit_once (line_numbers) no_line_numbers = ! line_numbers; - /* Compute the word and byte modes. */ - - byte_mode = VOIDmode; - word_mode = VOIDmode; - double_mode = VOIDmode; - - for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode; - mode = GET_MODE_WIDER_MODE (mode)) - { - if (GET_MODE_BITSIZE (mode) == BITS_PER_UNIT - && byte_mode == VOIDmode) - byte_mode = mode; - - if (GET_MODE_BITSIZE (mode) == BITS_PER_WORD - && word_mode == VOIDmode) - word_mode = mode; - } - -#ifndef DOUBLE_TYPE_SIZE -#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2) -#endif - - for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT); mode != VOIDmode; - mode = GET_MODE_WIDER_MODE (mode)) - { - if (GET_MODE_BITSIZE (mode) == DOUBLE_TYPE_SIZE - && double_mode == VOIDmode) - double_mode = mode; - } - - ptr_mode = mode_for_size (POINTER_SIZE, GET_MODE_CLASS (Pmode), 0); - - /* Create the unique rtx's for certain rtx codes and operand values. */ - - /* Don't use gen_rtx here since gen_rtx in this case - tries to use these variables. */ - for (i = - MAX_SAVED_CONST_INT; i <= MAX_SAVED_CONST_INT; i++) - { - PUT_CODE (&const_int_rtx[i + MAX_SAVED_CONST_INT], CONST_INT); - PUT_MODE (&const_int_rtx[i + MAX_SAVED_CONST_INT], VOIDmode); - INTVAL (&const_int_rtx[i + MAX_SAVED_CONST_INT]) = i; - } - - if (STORE_FLAG_VALUE >= - MAX_SAVED_CONST_INT - && STORE_FLAG_VALUE <= MAX_SAVED_CONST_INT) - const_true_rtx = &const_int_rtx[STORE_FLAG_VALUE + MAX_SAVED_CONST_INT]; - else - const_true_rtx = gen_rtx_CONST_INT (VOIDmode, STORE_FLAG_VALUE); - - dconst0 = REAL_VALUE_ATOF ("0", double_mode); - dconst1 = REAL_VALUE_ATOF ("1", double_mode); - dconst2 = REAL_VALUE_ATOF ("2", double_mode); - dconstm1 = REAL_VALUE_ATOF ("-1", double_mode); - - for (i = 0; i <= 2; i++) - { - for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT); mode != VOIDmode; - mode = GET_MODE_WIDER_MODE (mode)) - { - rtx tem = rtx_alloc (CONST_DOUBLE); - union real_extract u; - - bzero ((char *) &u, sizeof u); /* Zero any holes in a structure. */ - u.d = i == 0 ? dconst0 : i == 1 ? dconst1 : dconst2; - - bcopy ((char *) &u, (char *) &CONST_DOUBLE_LOW (tem), sizeof u); - CONST_DOUBLE_MEM (tem) = cc0_rtx; - PUT_MODE (tem, mode); - - const_tiny_rtx[i][(int) mode] = tem; - } - - const_tiny_rtx[i][(int) VOIDmode] = GEN_INT (i); - - for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode; - mode = GET_MODE_WIDER_MODE (mode)) - const_tiny_rtx[i][(int) mode] = GEN_INT (i); - - for (mode = GET_CLASS_NARROWEST_MODE (MODE_PARTIAL_INT); - mode != VOIDmode; - mode = GET_MODE_WIDER_MODE (mode)) - const_tiny_rtx[i][(int) mode] = GEN_INT (i); - } - - for (mode = CCmode; mode < MAX_MACHINE_MODE; ++mode) - if (GET_MODE_CLASS (mode) == MODE_CC) - const_tiny_rtx[0][(int) mode] = const0_rtx; - /* Assign register numbers to the globally defined register rtx. This must be done at runtime because the register number field is in a union and some compilers can't initialize unions. */ - REGNO (stack_pointer_rtx) = STACK_POINTER_REGNUM; - PUT_MODE (stack_pointer_rtx, Pmode); - REGNO (frame_pointer_rtx) = FRAME_POINTER_REGNUM; - PUT_MODE (frame_pointer_rtx, Pmode); -#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM - REGNO (hard_frame_pointer_rtx) = HARD_FRAME_POINTER_REGNUM; - PUT_MODE (hard_frame_pointer_rtx, Pmode); -#endif -#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM && HARD_FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM - REGNO (arg_pointer_rtx) = ARG_POINTER_REGNUM; - PUT_MODE (arg_pointer_rtx, Pmode); -#endif + pc_rtx = gen_rtx (PC, VOIDmode); + cc0_rtx = gen_rtx (CC0, VOIDmode); + stack_pointer_rtx = gen_rtx_raw_REG (Pmode, STACK_POINTER_REGNUM); + frame_pointer_rtx = gen_rtx_raw_REG (Pmode, FRAME_POINTER_REGNUM); + if (hard_frame_pointer_rtx == 0) + hard_frame_pointer_rtx = gen_rtx_raw_REG (Pmode, + HARD_FRAME_POINTER_REGNUM); + if (arg_pointer_rtx == 0) + arg_pointer_rtx = gen_rtx_raw_REG (Pmode, ARG_POINTER_REGNUM); + virtual_incoming_args_rtx = + gen_rtx_raw_REG (Pmode, VIRTUAL_INCOMING_ARGS_REGNUM); + virtual_stack_vars_rtx = + gen_rtx_raw_REG (Pmode, VIRTUAL_STACK_VARS_REGNUM); + virtual_stack_dynamic_rtx = + gen_rtx_raw_REG (Pmode, VIRTUAL_STACK_DYNAMIC_REGNUM); + virtual_outgoing_args_rtx = + gen_rtx_raw_REG (Pmode, VIRTUAL_OUTGOING_ARGS_REGNUM); + virtual_cfa_rtx = gen_rtx_raw_REG (Pmode, VIRTUAL_CFA_REGNUM); - REGNO (virtual_incoming_args_rtx) = VIRTUAL_INCOMING_ARGS_REGNUM; - PUT_MODE (virtual_incoming_args_rtx, Pmode); - REGNO (virtual_stack_vars_rtx) = VIRTUAL_STACK_VARS_REGNUM; - PUT_MODE (virtual_stack_vars_rtx, Pmode); - REGNO (virtual_stack_dynamic_rtx) = VIRTUAL_STACK_DYNAMIC_REGNUM; - PUT_MODE (virtual_stack_dynamic_rtx, Pmode); - REGNO (virtual_outgoing_args_rtx) = VIRTUAL_OUTGOING_ARGS_REGNUM; - PUT_MODE (virtual_outgoing_args_rtx, Pmode); - REGNO (virtual_cfa_rtx) = VIRTUAL_CFA_REGNUM; - PUT_MODE (virtual_cfa_rtx, Pmode); + /* These rtx must be roots if GC is enabled. */ + if (ggc_p) + ggc_add_rtx_root (global_rtl, GR_MAX); #ifdef RETURN_ADDRESS_POINTER_REGNUM return_address_pointer_rtx @@ -3687,6 +3577,93 @@ init_emit_once (line_numbers) INIT_EXPANDERS; #endif + /* Compute the word and byte modes. */ + + byte_mode = VOIDmode; + word_mode = VOIDmode; + double_mode = VOIDmode; + + for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode; + mode = GET_MODE_WIDER_MODE (mode)) + { + if (GET_MODE_BITSIZE (mode) == BITS_PER_UNIT + && byte_mode == VOIDmode) + byte_mode = mode; + + if (GET_MODE_BITSIZE (mode) == BITS_PER_WORD + && word_mode == VOIDmode) + word_mode = mode; + } + +#ifndef DOUBLE_TYPE_SIZE +#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2) +#endif + + for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT); mode != VOIDmode; + mode = GET_MODE_WIDER_MODE (mode)) + { + if (GET_MODE_BITSIZE (mode) == DOUBLE_TYPE_SIZE + && double_mode == VOIDmode) + double_mode = mode; + } + + ptr_mode = mode_for_size (POINTER_SIZE, GET_MODE_CLASS (Pmode), 0); + + /* Create the unique rtx's for certain rtx codes and operand values. */ + + /* Don't use gen_rtx here since gen_rtx in this case + tries to use these variables. */ + for (i = - MAX_SAVED_CONST_INT; i <= MAX_SAVED_CONST_INT; i++) + const_int_rtx[i + MAX_SAVED_CONST_INT] = + gen_rtx_raw_CONST_INT (VOIDmode, i); + if (ggc_p) + ggc_add_rtx_root (const_int_rtx, 2 * MAX_SAVED_CONST_INT + 1); + + if (STORE_FLAG_VALUE >= - MAX_SAVED_CONST_INT + && STORE_FLAG_VALUE <= MAX_SAVED_CONST_INT) + const_true_rtx = const_int_rtx[STORE_FLAG_VALUE + MAX_SAVED_CONST_INT]; + else + const_true_rtx = gen_rtx_CONST_INT (VOIDmode, STORE_FLAG_VALUE); + + dconst0 = REAL_VALUE_ATOF ("0", double_mode); + dconst1 = REAL_VALUE_ATOF ("1", double_mode); + dconst2 = REAL_VALUE_ATOF ("2", double_mode); + dconstm1 = REAL_VALUE_ATOF ("-1", double_mode); + + for (i = 0; i <= 2; i++) + { + for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT); mode != VOIDmode; + mode = GET_MODE_WIDER_MODE (mode)) + { + rtx tem = rtx_alloc (CONST_DOUBLE); + union real_extract u; + + bzero ((char *) &u, sizeof u); /* Zero any holes in a structure. */ + u.d = i == 0 ? dconst0 : i == 1 ? dconst1 : dconst2; + + bcopy ((char *) &u, (char *) &CONST_DOUBLE_LOW (tem), sizeof u); + CONST_DOUBLE_MEM (tem) = cc0_rtx; + PUT_MODE (tem, mode); + + const_tiny_rtx[i][(int) mode] = tem; + } + + const_tiny_rtx[i][(int) VOIDmode] = GEN_INT (i); + + for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode; + mode = GET_MODE_WIDER_MODE (mode)) + const_tiny_rtx[i][(int) mode] = GEN_INT (i); + + for (mode = GET_CLASS_NARROWEST_MODE (MODE_PARTIAL_INT); + mode != VOIDmode; + mode = GET_MODE_WIDER_MODE (mode)) + const_tiny_rtx[i][(int) mode] = GEN_INT (i); + } + + for (mode = CCmode; mode < MAX_MACHINE_MODE; ++mode) + if (GET_MODE_CLASS (mode) == MODE_CC) + const_tiny_rtx[0][(int) mode] = const0_rtx; + ggc_add_rtx_root (&const_tiny_rtx[0][0], sizeof(const_tiny_rtx)/sizeof(rtx)); ggc_add_rtx_root (&const_true_rtx, 1); diff --git a/gcc/genattrtab.c b/gcc/genattrtab.c index f35e0e4a5f1a..b02f2e0a22c9 100644 --- a/gcc/genattrtab.c +++ b/gcc/genattrtab.c @@ -354,7 +354,7 @@ int optimize = 0; /* These are referenced by rtlanal.c and hence need to be defined somewhere. They won't actually be used. */ -struct _global_rtl global_rtl; +rtx global_rtl[GR_MAX]; rtx pic_offset_table_rtx; static void attr_hash_add_rtx PROTO((int, rtx)); diff --git a/gcc/rtl.h b/gcc/rtl.h index b31a98b20273..59043eadaeae 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -1167,17 +1167,13 @@ extern rtx get_first_nonparm_insn PROTO((void)); extern void split_block_insns PROTO((int, int)); extern void update_flow_info PROTO((rtx, rtx, rtx, rtx)); -/* Standard pieces of rtx, to be substituted directly into things. */ -#define pc_rtx (&global_rtl.pc_val) -#define cc0_rtx (&global_rtl.cc0_val) - #define MAX_SAVED_CONST_INT 64 -extern struct rtx_def const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1]; +extern rtx const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1]; -#define const0_rtx (&const_int_rtx[MAX_SAVED_CONST_INT]) -#define const1_rtx (&const_int_rtx[MAX_SAVED_CONST_INT+1]) -#define const2_rtx (&const_int_rtx[MAX_SAVED_CONST_INT+2]) -#define constm1_rtx (&const_int_rtx[MAX_SAVED_CONST_INT-1]) +#define const0_rtx (const_int_rtx[MAX_SAVED_CONST_INT]) +#define const1_rtx (const_int_rtx[MAX_SAVED_CONST_INT+1]) +#define const2_rtx (const_int_rtx[MAX_SAVED_CONST_INT+2]) +#define constm1_rtx (const_int_rtx[MAX_SAVED_CONST_INT-1]) extern rtx const_true_rtx; extern rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE]; @@ -1192,24 +1188,64 @@ extern rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE]; #define CONST1_RTX(MODE) (const_tiny_rtx[1][(int) (MODE)]) #define CONST2_RTX(MODE) (const_tiny_rtx[2][(int) (MODE)]) -extern struct _global_rtl +/* If HARD_FRAME_POINTER_REGNUM is defined, then a special dummy reg + is used to represent the frame pointer. This is because the + hard frame pointer and the automatic variables are separated by an amount + that cannot be determined until after register allocation. We can assume + that in this case ELIMINABLE_REGS will be defined, one action of which + will be to eliminate FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM. */ +#ifndef HARD_FRAME_POINTER_REGNUM +#define HARD_FRAME_POINTER_REGNUM FRAME_POINTER_REGNUM +#endif + +/* Index labels for global_rtl. */ +enum global_rtl_index { - struct rtx_def pc_val, cc0_val; - struct rtx_def stack_pointer_val, frame_pointer_val; - struct rtx_def hard_frame_pointer_val; - struct rtx_def arg_pointer_val; - struct rtx_def virtual_incoming_args_val; - struct rtx_def virtual_stack_vars_val; - struct rtx_def virtual_stack_dynamic_val; - struct rtx_def virtual_outgoing_args_val; - struct rtx_def virtual_cfa_val; -} global_rtl; + GR_PC, + GR_CC0, + GR_STACK_POINTER, + GR_FRAME_POINTER, +/* For register elimination to work properly these hard_frame_pointer_rtx, + frame_pointer_rtx, and arg_pointer_rtx must be the same if they refer to + the same register. */ +#if FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM + GR_ARG_POINTER = GR_FRAME_POINTER, +#endif +#if HARD_FRAME_POINTER_REGNUM == FRAME_POINTER_REGNUM + GR_HARD_FRAME_POINTER = GR_FRAME_POINTER, +#else + GR_HARD_FRAME_POINTER, +#endif +#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM +#if HARD_FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM + GR_ARG_POINTER = GR_HARD_FRAME_POINTER, +#else + GR_ARG_POINTER, +#endif +#endif + GR_VIRTUAL_INCOMING_ARGS, + GR_VIRTUAL_STACK_ARGS, + GR_VIRTUAL_STACK_DYNAMIC, + GR_VIRTUAL_OUTGOING_ARGS, + GR_VIRTUAL_CFA, + + GR_MAX +}; + +/* Pointers to standard pieces of rtx are stored here. */ +extern rtx global_rtl[GR_MAX]; + +/* Standard pieces of rtx, to be substituted directly into things. */ +#define pc_rtx (global_rtl[GR_PC]) +#define cc0_rtx (global_rtl[GR_CC0]) /* All references to certain hard regs, except those created by allocating pseudo regs into them (when that's possible), go through these unique rtx objects. */ -#define stack_pointer_rtx (&global_rtl.stack_pointer_val) -#define frame_pointer_rtx (&global_rtl.frame_pointer_val) +#define stack_pointer_rtx (global_rtl[GR_STACK_POINTER]) +#define frame_pointer_rtx (global_rtl[GR_FRAME_POINTER]) +#define hard_frame_pointer_rtx (global_rtl[GR_HARD_FRAME_POINTER]) +#define arg_pointer_rtx (global_rtl[GR_ARG_POINTER]) extern rtx pic_offset_table_rtx; extern rtx struct_value_rtx; @@ -1239,35 +1275,6 @@ extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx)); and without prototypes. */ #define GEN_INT(N) gen_rtx_CONST_INT (VOIDmode, (HOST_WIDE_INT) (N)) -/* If HARD_FRAME_POINTER_REGNUM is defined, then a special dummy reg - is used to represent the frame pointer. This is because the - hard frame pointer and the automatic variables are separated by an amount - that cannot be determined until after register allocation. We can assume - that in this case ELIMINABLE_REGS will be defined, one action of which - will be to eliminate FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM. */ -#ifndef HARD_FRAME_POINTER_REGNUM -#define HARD_FRAME_POINTER_REGNUM FRAME_POINTER_REGNUM -#endif - -/* For register elimination to work properly these hard_frame_pointer_rtx, - frame_pointer_rtx, and arg_pointer_rtx must be the same if they refer to - the same register. */ -#if HARD_FRAME_POINTER_REGNUM == FRAME_POINTER_REGNUM -#define hard_frame_pointer_rtx (&global_rtl.frame_pointer_val) -#else -#define hard_frame_pointer_rtx (&global_rtl.hard_frame_pointer_val) -#endif - -#if FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM -#define arg_pointer_rtx (&global_rtl.frame_pointer_val) -#else -#if HARD_FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM -#define arg_pointer_rtx (&global_rtl.hard_frame_pointer_val) -#else -#define arg_pointer_rtx (&global_rtl.arg_pointer_val) -#endif -#endif - /* Virtual registers are used during RTL generation to refer to locations into the stack frame when the actual location isn't known until RTL generation is complete. The routine instantiate_virtual_regs replaces these with @@ -1280,7 +1287,7 @@ extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx)); either by the caller or by the callee when pretending it was passed by the caller. */ -#define virtual_incoming_args_rtx (&global_rtl.virtual_incoming_args_val) +#define virtual_incoming_args_rtx (global_rtl[GR_VIRTUAL_INCOMING_ARGS]) #define VIRTUAL_INCOMING_ARGS_REGNUM (FIRST_VIRTUAL_REGISTER) @@ -1288,7 +1295,7 @@ extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx)); variable on the stack. Otherwise, it points to the first variable on the stack. */ -#define virtual_stack_vars_rtx (&global_rtl.virtual_stack_vars_val) +#define virtual_stack_vars_rtx (global_rtl[GR_VIRTUAL_STACK_ARGS]) #define VIRTUAL_STACK_VARS_REGNUM ((FIRST_VIRTUAL_REGISTER) + 1) @@ -1296,7 +1303,7 @@ extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx)); immediately after the stack pointer has been adjusted by the amount desired. */ -#define virtual_stack_dynamic_rtx (&global_rtl.virtual_stack_dynamic_val) +#define virtual_stack_dynamic_rtx (global_rtl[GR_VIRTUAL_STACK_DYNAMIC]) #define VIRTUAL_STACK_DYNAMIC_REGNUM ((FIRST_VIRTUAL_REGISTER) + 2) @@ -1304,7 +1311,7 @@ extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx)); be written when the stack is pre-pushed (arguments pushed using push insns always use sp). */ -#define virtual_outgoing_args_rtx (&global_rtl.virtual_outgoing_args_val) +#define virtual_outgoing_args_rtx (global_rtl[GR_VIRTUAL_OUTGOING_ARGS]) #define VIRTUAL_OUTGOING_ARGS_REGNUM ((FIRST_VIRTUAL_REGISTER) + 3) @@ -1314,7 +1321,7 @@ extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx)); frame pointer nor stack pointer are necessarily fixed relative to the CFA until after reload. */ -#define virtual_cfa_rtx (&global_rtl.virtual_cfa_val) +#define virtual_cfa_rtx (global_rtl[GR_VIRTUAL_CFA]) #define VIRTUAL_CFA_REGNUM ((FIRST_VIRTUAL_REGISTER) + 4)