This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: tiny mark_reg_set speedup
- From: Jan Hubicka <jh at suse dot cz>
- To: Geoff Keating <geoffk at geoffk dot org>
- Cc: Jan Hubicka <jh at suse dot cz>, gcc-patches at gcc dot gnu dot org
- Date: Mon, 2 Feb 2004 01:15:49 +0100
- Subject: Re: tiny mark_reg_set speedup
- References: <20040125221345.GC31157@kam.mff.cuni.cz> <jmptd7kqug.fsf@desire.geoffk.org>
> Jan Hubicka <jh@suse.cz> writes:
>
> > Hi,
> > second hottest line is line checking HARD_REGNO_NREGS inside flow.c...
> > I updated only the uses in flow.c and the benefits seems to be somewhere
> > in between 0.8-1.6 seconds per 2m compilation. If this seem worthwhile,
> > I can update rest of the uses.
> >
> > Bootstrapped/regtested i686-pc-gnu-linux (as all the previous patches
> > today, I think I forgot it to mention, sorry)
> > OK?
>
> This is OK, but please:
>
> - Change the rest of the cases; and then
Hi,
this is the patch changing all the uses I am about to commit. I will
prepare the hooks next.
Bootstrapped/regtested i686-pc-gnu-linux.
Honza
2004-02-02 Jan Hubicka <jh@suse.cz>
* alias.c (record_set): Use hard_regno_nregs.
* bt-load.c (find_btr_reference, note_btr_set): Likewise.
* builtins.c (apply_args_size): Likewise.
* caller-save.c (setup_save_areas, save_call_clobbered_regs,
mark_set_regs, add_stored_regs, mark_referenced_regs,
insert_restore, insert_save, insert_one_insn): Likewise.
* cfgcleanup.c: Include regs.h
(mark_effect, mentions_nonequal_regs): Likewise.
* cfgrtl.c (mark_killed_regs): Likewise
* combine.c (update_table_tick, record_value_for_reg,
record_dead_and_set_regs, get_last_value_validate, use_crosses_set_p,
reg_dead_at_p_1, reg_dead_at_p, mark_used_regs_combine, move_deaths,
reg_bitfield_target_p, distribute_notes): Likewise.
* cse.c (mention_regs, insert, invalidate, invalidate_for_call,
exp_equiv_p, cse_insn): Likewise.
* cselib.c (cselib_lookup): Likewise.
(cselib_invalidate_regno, cselib_record_set): Likewise.
* df.c (df_ref_record): Likewise.
* dwarf2out.c (reg_loc_descriptor, multiple_reg_loc_descriptor):
Likewise.
* flow.c (mark_reg, insn_dead_p, mark_set_1, mark_used_reg,
count_or_remove_death_notes_bb): Likewise.
* function.c (aggregate_value_p, keep_stack_depressed): Likewise.
* gloval.c (global_alloc, find_reg, mark_reg_store, mark_reg_conflicts,
mark_reg_death, set_preference, reg_becomes_live, reg_dies): Likewise.
* integrate.c (mark_stores): Likewise.
* jump.c (delete_prior_computation): Likewise.
* lcm.c (reg_dies, reg_becomes_live): Likewise.
* local-alloc.c (combine_regs, find_free_reg, post_mark_life): Likewise.
* loop.c (LOOP_REGNO_NREGS): Likewise.
* postreload.c (reload_combine, reload_combine_note_store,
reload_combine_note_use, reload_cse_move2add, move2add_note_store): Likewise.
* ra-colorize.c (combine, color_usable_p, get_free_reg,
calculate_dont_begin, calculate_dont_begin, colorize_one_web,
try_recolor_web, insert_coalesced_conflicts, check_colors,
break_precolored_alias): Likewise.
* ra-debug.c: Include regs.h
(ra_print_rtx_object): Likewise.
* ra-rewrite (choose_spill_colors): Likewise.
(spill_same_color_p, update_spill_colors, spill_is_free): Likewise.
* ra.c (init_ra): Likewise.
* recog.c (reg_fits_class_p, peep2_reg_dead_p,
peep2_find_free_register): Likewise.
* reg-stack.c (subst_stack_regs_pat, convert_regs_exit): Likewise.
* regclass.c (hard_regno_nregs): New array.
(init_reg_modes_once): Initialize it.
(choose_hard_reg_mode): Use it.
(record_reg_classes): Likewise.
* regmove.c (mark_flags_life_zones): Likewise.
* regrename.c (note_sets, clear_dead_regs, regrename_optimize,
scan_rtx_reg, dump_def_use_chain, kill_value, set_value_regno,
copy_value, maybe_mode_change, find_oldest_value_reg,
copyprop_hardreg_forward_1):
* regs.h (hard_regno_nregs): Declare.
* realod.c (reload_inner_reg_of_subreg): Use it.
(push_reload, combine_reloads, find_dummy_reload,
hard_reg_set_here_p, operands_match_p, decompose, find_reloads,
refers_to_regno_for_reload_p, find_equiv_reg, regno_clobbered_p,
reload_adjust_reg_for_mode): Likewise.
* reload1.c (compute_use_by_pseudos, count_pseudo,
count_spilled_pseudo, find_reg, find_reload_regs, mark_home_live,
spill_hard_reg, forget_old_reloads_1, mark_reload_reg_in_use,
clear_reload_reg_in_use, reload_reg_free_for_value_p, free_for_value_p
allocate_reload_reg, choose_reload_regs, emit_reload_insns,
delete_output_reload): Likewise.
* resource.c (update_live_status, mark_referenced_resources,
mark_set_resources, mark_target_live_regs): Likewise.
* rtlanal.c: Include regs.h
(refers_to_regno_p, reg_overlap_mentioned_p, dead_or_set_p,
dead_or_set_regno_p, find_regno_note, find_reg_fusage,
subreg_regno_offset, subreg_offset_representable_p,
hoist_test_store): Likewise.
* sched-deps.c (sched_analyze_1, sched_analyze_2): Likewise.
* sched-rgn.c (check_live_1, update_live_1): Likewise.
* stmt.c: Include regs.h
(decl_conflicts_with_clobbers_p): Likewise.
* varasm.c (make_decl_rtl): Likewise.
* Makefile.in (cfgcleanup.o, rtlanal.o, ra-debug.o): Add regs.h dependnecy.
Index: alias.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/alias.c,v
retrieving revision 1.212
diff -c -3 -p -r1.212 alias.c
*** alias.c 22 Jan 2004 11:35:58 -0000 1.212
--- alias.c 1 Feb 2004 23:36:09 -0000
*************** record_set (rtx dest, rtx set, void *dat
*** 942,948 ****
/* If this spans multiple hard registers, then we must indicate that every
register has an unusable value. */
if (regno < FIRST_PSEUDO_REGISTER)
! n = HARD_REGNO_NREGS (regno, GET_MODE (dest));
else
n = 1;
if (n != 1)
--- 942,948 ----
/* If this spans multiple hard registers, then we must indicate that every
register has an unusable value. */
if (regno < FIRST_PSEUDO_REGISTER)
! n = hard_regno_nregs[regno][GET_MODE (dest)];
else
n = 1;
if (n != 1)
Index: bt-load.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/bt-load.c,v
retrieving revision 2.14
diff -c -3 -p -r2.14 bt-load.c
*** bt-load.c 31 Jan 2004 08:02:47 -0000 2.14
--- bt-load.c 1 Feb 2004 23:36:09 -0000
*************** find_btr_reference (rtx *px, void *preg)
*** 198,204 ****
if (GET_CODE (x) != REG)
return 0;
regno = REGNO (x);
! for (i = HARD_REGNO_NREGS (regno, GET_MODE (x)) - 1; i >= 0; i--)
if (TEST_HARD_REG_BIT (all_btrs, regno+i))
{
btr_reference_found = px;
--- 198,204 ----
if (GET_CODE (x) != REG)
return 0;
regno = REGNO (x);
! for (i = hard_regno_nregs[regno][GET_MODE (x)] - 1; i >= 0; i--)
if (TEST_HARD_REG_BIT (all_btrs, regno+i))
{
btr_reference_found = px;
*************** note_btr_set (rtx dest, rtx set ATTRIBUT
*** 430,436 ****
if (GET_CODE (dest) != REG)
return;
regno = REGNO (dest);
! end_regno = regno + HARD_REGNO_NREGS (regno, GET_MODE (dest));
for (; regno < end_regno; regno++)
if (TEST_HARD_REG_BIT (all_btrs, regno))
{
--- 430,436 ----
if (GET_CODE (dest) != REG)
return;
regno = REGNO (dest);
! end_regno = regno + hard_regno_nregs[regno][GET_MODE (dest)];
for (; regno < end_regno; regno++)
if (TEST_HARD_REG_BIT (all_btrs, regno))
{
Index: builtins.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/builtins.c,v
retrieving revision 1.280
diff -c -3 -p -r1.280 builtins.c
*** builtins.c 1 Feb 2004 15:03:15 -0000 1.280
--- builtins.c 1 Feb 2004 23:36:09 -0000
*************** apply_args_size (void)
*** 941,947 ****
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
if (HARD_REGNO_MODE_OK (regno, mode)
! && HARD_REGNO_NREGS (regno, mode) == 1)
best_mode = mode;
if (best_mode == VOIDmode)
--- 941,947 ----
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
if (HARD_REGNO_MODE_OK (regno, mode)
! && hard_regno_nregs[regno][mode] == 1)
best_mode = mode;
if (best_mode == VOIDmode)
Index: caller-save.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/caller-save.c,v
retrieving revision 1.60
diff -c -3 -p -r1.60 caller-save.c
*** caller-save.c 21 Dec 2003 14:08:32 -0000 1.60
--- caller-save.c 1 Feb 2004 23:36:09 -0000
*************** setup_save_areas (void)
*** 300,306 ****
{
unsigned int regno = reg_renumber[i];
unsigned int endregno
! = regno + HARD_REGNO_NREGS (regno, GET_MODE (regno_reg_rtx[i]));
for (r = regno; r < endregno; r++)
if (call_used_regs[r])
--- 300,306 ----
{
unsigned int regno = reg_renumber[i];
unsigned int endregno
! = regno + hard_regno_nregs[regno][GET_MODE (regno_reg_rtx[i])];
for (r = regno; r < endregno; r++)
if (call_used_regs[r])
*************** save_call_clobbered_regs (void)
*** 436,442 ****
{
enum machine_mode mode;
! nregs = HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (regno));
mode = HARD_REGNO_CALLER_SAVE_MODE
(r, nregs, PSEUDO_REGNO_MODE (regno));
if (GET_MODE_BITSIZE (mode)
--- 436,442 ----
{
enum machine_mode mode;
! nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (regno)];
mode = HARD_REGNO_CALLER_SAVE_MODE
(r, nregs, PSEUDO_REGNO_MODE (regno));
if (GET_MODE_BITSIZE (mode)
*************** mark_set_regs (rtx reg, rtx setter ATTRI
*** 515,521 ****
else
return;
! endregno = regno + HARD_REGNO_NREGS (regno, mode);
for (i = regno; i < endregno; i++)
SET_HARD_REG_BIT (this_insn_sets, i);
--- 515,521 ----
else
return;
! endregno = regno + hard_regno_nregs[regno][mode];
for (i = regno; i < endregno; i++)
SET_HARD_REG_BIT (this_insn_sets, i);
*************** add_stored_regs (rtx reg, rtx setter, vo
*** 548,554 ****
return;
regno = REGNO (reg) + offset;
! endregno = regno + HARD_REGNO_NREGS (regno, mode);
for (i = regno; i < endregno; i++)
SET_REGNO_REG_SET ((regset) data, i);
--- 548,554 ----
return;
regno = REGNO (reg) + offset;
! endregno = regno + hard_regno_nregs[regno][mode];
for (i = regno; i < endregno; i++)
SET_REGNO_REG_SET ((regset) data, i);
*************** mark_referenced_regs (rtx x)
*** 595,601 ****
if (hardregno >= 0)
{
! int nregs = HARD_REGNO_NREGS (hardregno, GET_MODE (x));
while (nregs-- > 0)
SET_HARD_REG_BIT (referenced_regs, hardregno + nregs);
}
--- 595,601 ----
if (hardregno >= 0)
{
! int nregs = hard_regno_nregs[hardregno][GET_MODE (x)];
while (nregs-- > 0)
SET_HARD_REG_BIT (referenced_regs, hardregno + nregs);
}
*************** insert_restore (struct insn_chain *chain
*** 683,689 ****
mem = regno_save_mem [regno][numregs];
if (save_mode [regno] != VOIDmode
&& save_mode [regno] != GET_MODE (mem)
! && numregs == (unsigned int) HARD_REGNO_NREGS (regno, save_mode [regno]))
mem = adjust_address (mem, save_mode[regno], 0);
pat = gen_rtx_SET (VOIDmode,
gen_rtx_REG (GET_MODE (mem),
--- 683,689 ----
mem = regno_save_mem [regno][numregs];
if (save_mode [regno] != VOIDmode
&& save_mode [regno] != GET_MODE (mem)
! && numregs == (unsigned int) hard_regno_nregs[regno][save_mode [regno]])
mem = adjust_address (mem, save_mode[regno], 0);
pat = gen_rtx_SET (VOIDmode,
gen_rtx_REG (GET_MODE (mem),
*************** insert_save (struct insn_chain *chain, i
*** 755,761 ****
mem = regno_save_mem [regno][numregs];
if (save_mode [regno] != VOIDmode
&& save_mode [regno] != GET_MODE (mem)
! && numregs == (unsigned int) HARD_REGNO_NREGS (regno, save_mode [regno]))
mem = adjust_address (mem, save_mode[regno], 0);
pat = gen_rtx_SET (VOIDmode, mem,
gen_rtx_REG (GET_MODE (mem),
--- 755,761 ----
mem = regno_save_mem [regno][numregs];
if (save_mode [regno] != VOIDmode
&& save_mode [regno] != GET_MODE (mem)
! && numregs == (unsigned int) hard_regno_nregs[regno][save_mode [regno]])
mem = adjust_address (mem, save_mode[regno], 0);
pat = gen_rtx_SET (VOIDmode, mem,
gen_rtx_REG (GET_MODE (mem),
*************** insert_one_insn (struct insn_chain *chai
*** 828,834 ****
regno = reg_renumber[regno];
if (regno < 0)
continue;
! for (i = HARD_REGNO_NREGS (regno, GET_MODE (reg)) - 1;
i >= 0; i--)
SET_REGNO_REG_SET (&new->live_throughout, regno + i);
}
--- 828,834 ----
regno = reg_renumber[regno];
if (regno < 0)
continue;
! for (i = hard_regno_nregs[regno][GET_MODE (reg)] - 1;
i >= 0; i--)
SET_REGNO_REG_SET (&new->live_throughout, regno + i);
}
Index: cfgcleanup.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgcleanup.c,v
retrieving revision 1.105
diff -c -3 -p -r1.105 cfgcleanup.c
*** cfgcleanup.c 29 Jan 2004 07:47:54 -0000 1.105
--- cfgcleanup.c 1 Feb 2004 23:36:09 -0000
*************** Software Foundation, 59 Temple Place - S
*** 48,53 ****
--- 48,54 ----
#include "params.h"
#include "tm_p.h"
#include "target.h"
+ #include "regs.h"
/* cleanup_cfg maintains following flags for each basic block. */
*************** mark_effect (rtx exp, regset nonequal)
*** 220,226 ****
CLEAR_REGNO_REG_SET (nonequal, regno);
if (regno < FIRST_PSEUDO_REGISTER)
{
! int n = HARD_REGNO_NREGS (regno, GET_MODE (dest));
while (--n > 0)
CLEAR_REGNO_REG_SET (nonequal, regno + n);
}
--- 221,227 ----
CLEAR_REGNO_REG_SET (nonequal, regno);
if (regno < FIRST_PSEUDO_REGISTER)
{
! int n = hard_regno_nregs[regno][GET_MODE (dest)];
while (--n > 0)
CLEAR_REGNO_REG_SET (nonequal, regno + n);
}
*************** mark_effect (rtx exp, regset nonequal)
*** 239,245 ****
SET_REGNO_REG_SET (nonequal, regno);
if (regno < FIRST_PSEUDO_REGISTER)
{
! int n = HARD_REGNO_NREGS (regno, GET_MODE (dest));
while (--n > 0)
SET_REGNO_REG_SET (nonequal, regno + n);
}
--- 240,246 ----
SET_REGNO_REG_SET (nonequal, regno);
if (regno < FIRST_PSEUDO_REGISTER)
{
! int n = hard_regno_nregs[regno][GET_MODE (dest)];
while (--n > 0)
SET_REGNO_REG_SET (nonequal, regno + n);
}
*************** mentions_nonequal_regs (rtx *x, void *da
*** 265,271 ****
return 1;
if (regno < FIRST_PSEUDO_REGISTER)
{
! int n = HARD_REGNO_NREGS (regno, GET_MODE (*x));
while (--n > 0)
if (REGNO_REG_SET_P (nonequal, regno + n))
return 1;
--- 266,272 ----
return 1;
if (regno < FIRST_PSEUDO_REGISTER)
{
! int n = hard_regno_nregs[regno][GET_MODE (*x)];
while (--n > 0)
if (REGNO_REG_SET_P (nonequal, regno + n))
return 1;
Index: cfgrtl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgrtl.c,v
retrieving revision 1.107
diff -c -3 -p -r1.107 cfgrtl.c
*** cfgrtl.c 29 Jan 2004 07:47:54 -0000 1.107
--- cfgrtl.c 1 Feb 2004 23:36:10 -0000
*************** mark_killed_regs (rtx reg, rtx set ATTRI
*** 1352,1358 ****
SET_REGNO_REG_SET (killed, regno);
else
{
! for (i = 0; i < (int) HARD_REGNO_NREGS (regno, GET_MODE (reg)); i++)
SET_REGNO_REG_SET (killed, regno + i);
}
}
--- 1352,1358 ----
SET_REGNO_REG_SET (killed, regno);
else
{
! for (i = 0; i < (int) hard_regno_nregs[regno][GET_MODE (reg)]; i++)
SET_REGNO_REG_SET (killed, regno + i);
}
}
Index: combine.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/combine.c,v
retrieving revision 1.406
diff -c -3 -p -r1.406 combine.c
*** combine.c 31 Jan 2004 09:21:13 -0000 1.406
--- combine.c 1 Feb 2004 23:36:11 -0000
*************** update_table_tick (rtx x)
*** 11368,11374 ****
unsigned int regno = REGNO (x);
unsigned int endregno
= regno + (regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
unsigned int r;
for (r = regno; r < endregno; r++)
--- 11368,11374 ----
unsigned int regno = REGNO (x);
unsigned int endregno
= regno + (regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[regno][GET_MODE (x)] : 1);
unsigned int r;
for (r = regno; r < endregno; r++)
*************** record_value_for_reg (rtx reg, rtx insn,
*** 11433,11439 ****
unsigned int regno = REGNO (reg);
unsigned int endregno
= regno + (regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (regno, GET_MODE (reg)) : 1);
unsigned int i;
/* If VALUE contains REG and we have a previous value for REG, substitute
--- 11433,11439 ----
unsigned int regno = REGNO (reg);
unsigned int endregno
= regno + (regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[regno][GET_MODE (reg)] : 1);
unsigned int i;
/* If VALUE contains REG and we have a previous value for REG, substitute
*************** record_dead_and_set_regs (rtx insn)
*** 11590,11596 ****
unsigned int regno = REGNO (XEXP (link, 0));
unsigned int endregno
= regno + (regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (regno, GET_MODE (XEXP (link, 0)))
: 1);
for (i = regno; i < endregno; i++)
--- 11590,11596 ----
unsigned int regno = REGNO (XEXP (link, 0));
unsigned int endregno
= regno + (regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[regno][GET_MODE (XEXP (link, 0))]
: 1);
for (i = regno; i < endregno; i++)
*************** get_last_value_validate (rtx *loc, rtx i
*** 11726,11732 ****
unsigned int regno = REGNO (x);
unsigned int endregno
= regno + (regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
unsigned int j;
for (j = regno; j < endregno; j++)
--- 11726,11732 ----
unsigned int regno = REGNO (x);
unsigned int endregno
= regno + (regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[regno][GET_MODE (x)] : 1);
unsigned int j;
for (j = regno; j < endregno; j++)
*************** use_crosses_set_p (rtx x, int from_cuid)
*** 11888,11894 ****
{
unsigned int regno = REGNO (x);
unsigned endreg = regno + (regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
#ifdef PUSH_ROUNDING
/* Don't allow uses of the stack pointer to be moved,
--- 11888,11894 ----
{
unsigned int regno = REGNO (x);
unsigned endreg = regno + (regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[regno][GET_MODE (x)] : 1);
#ifdef PUSH_ROUNDING
/* Don't allow uses of the stack pointer to be moved,
*************** reg_dead_at_p_1 (rtx dest, rtx x, void *
*** 11945,11951 ****
regno = REGNO (dest);
endregno = regno + (regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (regno, GET_MODE (dest)) : 1);
if (reg_dead_endregno > regno && reg_dead_regno < endregno)
reg_dead_flag = (GET_CODE (x) == CLOBBER) ? 1 : -1;
--- 11945,11951 ----
regno = REGNO (dest);
endregno = regno + (regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[regno][GET_MODE (dest)] : 1);
if (reg_dead_endregno > regno && reg_dead_regno < endregno)
reg_dead_flag = (GET_CODE (x) == CLOBBER) ? 1 : -1;
*************** reg_dead_at_p (rtx reg, rtx insn)
*** 11968,11975 ****
/* Set variables for reg_dead_at_p_1. */
reg_dead_regno = REGNO (reg);
reg_dead_endregno = reg_dead_regno + (reg_dead_regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (reg_dead_regno,
! GET_MODE (reg))
: 1);
reg_dead_flag = 0;
--- 11968,11975 ----
/* Set variables for reg_dead_at_p_1. */
reg_dead_regno = REGNO (reg);
reg_dead_endregno = reg_dead_regno + (reg_dead_regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[reg_dead_regno]
! [GET_MODE (reg)]
: 1);
reg_dead_flag = 0;
*************** mark_used_regs_combine (rtx x)
*** 12070,12076 ****
|| regno == FRAME_POINTER_REGNUM)
return;
! endregno = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
for (r = regno; r < endregno; r++)
SET_HARD_REG_BIT (newpat_used_regs, r);
}
--- 12070,12076 ----
|| regno == FRAME_POINTER_REGNUM)
return;
! endregno = regno + hard_regno_nregs[regno][GET_MODE (x)];
for (r = regno; r < endregno; r++)
SET_HARD_REG_BIT (newpat_used_regs, r);
}
*************** move_deaths (rtx x, rtx maybe_kill_insn,
*** 12199,12208 ****
{
unsigned int deadregno = REGNO (XEXP (note, 0));
unsigned int deadend
! = (deadregno + HARD_REGNO_NREGS (deadregno,
! GET_MODE (XEXP (note, 0))));
unsigned int ourend
! = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
unsigned int i;
for (i = deadregno; i < deadend; i++)
--- 12199,12208 ----
{
unsigned int deadregno = REGNO (XEXP (note, 0));
unsigned int deadend
! = (deadregno + hard_regno_nregs[deadregno]
! [GET_MODE (XEXP (note, 0))]);
unsigned int ourend
! = regno + hard_regno_nregs[regno][GET_MODE (x)];
unsigned int i;
for (i = deadregno; i < deadend; i++)
*************** move_deaths (rtx x, rtx maybe_kill_insn,
*** 12223,12237 ****
&& (GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
< GET_MODE_SIZE (GET_MODE (x)))))
&& regno < FIRST_PSEUDO_REGISTER
! && HARD_REGNO_NREGS (regno, GET_MODE (x)) > 1)
{
unsigned int ourend
! = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
unsigned int i, offset;
rtx oldnotes = 0;
if (note)
! offset = HARD_REGNO_NREGS (regno, GET_MODE (XEXP (note, 0)));
else
offset = 1;
--- 12223,12237 ----
&& (GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
< GET_MODE_SIZE (GET_MODE (x)))))
&& regno < FIRST_PSEUDO_REGISTER
! && hard_regno_nregs[regno][GET_MODE (x)] > 1)
{
unsigned int ourend
! = regno + hard_regno_nregs[regno][GET_MODE (x)];
unsigned int i, offset;
rtx oldnotes = 0;
if (note)
! offset = hard_regno_nregs[regno][GET_MODE (XEXP (note, 0))];
else
offset = 1;
*************** reg_bitfield_target_p (rtx x, rtx body)
*** 12344,12351 ****
if (tregno >= FIRST_PSEUDO_REGISTER || regno >= FIRST_PSEUDO_REGISTER)
return target == x;
! endtregno = tregno + HARD_REGNO_NREGS (tregno, GET_MODE (target));
! endregno = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
return endregno > tregno && regno < endtregno;
}
--- 12344,12351 ----
if (tregno >= FIRST_PSEUDO_REGISTER || regno >= FIRST_PSEUDO_REGISTER)
return target == x;
! endtregno = tregno + hard_regno_nregs[tregno][GET_MODE (target)];
! endregno = regno + hard_regno_nregs[regno][GET_MODE (x)];
return endregno > tregno && regno < endtregno;
}
*************** distribute_notes (rtx notes, rtx from_in
*** 12821,12831 ****
the previous insn that used this register. */
if (place && regno < FIRST_PSEUDO_REGISTER
! && HARD_REGNO_NREGS (regno, GET_MODE (XEXP (note, 0))) > 1)
{
unsigned int endregno
! = regno + HARD_REGNO_NREGS (regno,
! GET_MODE (XEXP (note, 0)));
int all_used = 1;
unsigned int i;
--- 12821,12831 ----
the previous insn that used this register. */
if (place && regno < FIRST_PSEUDO_REGISTER
! && hard_regno_nregs[regno][GET_MODE (XEXP (note, 0))] > 1)
{
unsigned int endregno
! = regno + hard_regno_nregs[regno]
! [GET_MODE (XEXP (note, 0))];
int all_used = 1;
unsigned int i;
*************** distribute_notes (rtx notes, rtx from_in
*** 12841,12847 ****
not already dead or set. */
for (i = regno; i < endregno;
! i += HARD_REGNO_NREGS (i, reg_raw_mode[i]))
{
rtx piece = regno_reg_rtx[i];
basic_block bb = this_basic_block;
--- 12841,12847 ----
not already dead or set. */
for (i = regno; i < endregno;
! i += hard_regno_nregs[i][reg_raw_mode[i]])
{
rtx piece = regno_reg_rtx[i];
basic_block bb = this_basic_block;
Index: cse.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cse.c,v
retrieving revision 1.284
diff -c -3 -p -r1.284 cse.c
*** cse.c 31 Jan 2004 09:21:18 -0000 1.284
--- cse.c 1 Feb 2004 23:36:11 -0000
*************** mention_regs (rtx x)
*** 1162,1168 ****
unsigned int regno = REGNO (x);
unsigned int endregno
= regno + (regno >= FIRST_PSEUDO_REGISTER ? 1
! : HARD_REGNO_NREGS (regno, GET_MODE (x)));
unsigned int i;
for (i = regno; i < endregno; i++)
--- 1162,1168 ----
unsigned int regno = REGNO (x);
unsigned int endregno
= regno + (regno >= FIRST_PSEUDO_REGISTER ? 1
! : hard_regno_nregs[regno][GET_MODE (x)]);
unsigned int i;
for (i = regno; i < endregno; i++)
*************** insert (rtx x, struct table_elt *classp,
*** 1529,1535 ****
if (GET_CODE (x) == REG && REGNO (x) < FIRST_PSEUDO_REGISTER)
{
unsigned int regno = REGNO (x);
! unsigned int endregno = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
unsigned int i;
for (i = regno; i < endregno; i++)
--- 1529,1535 ----
if (GET_CODE (x) == REG && REGNO (x) < FIRST_PSEUDO_REGISTER)
{
unsigned int regno = REGNO (x);
! unsigned int endregno = regno + hard_regno_nregs[regno][GET_MODE (x)];
unsigned int i;
for (i = regno; i < endregno; i++)
*************** invalidate (rtx x, enum machine_mode ful
*** 1842,1848 ****
HOST_WIDE_INT in_table
= TEST_HARD_REG_BIT (hard_regs_in_table, regno);
unsigned int endregno
! = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
unsigned int tregno, tendregno, rn;
struct table_elt *p, *next;
--- 1842,1848 ----
HOST_WIDE_INT in_table
= TEST_HARD_REG_BIT (hard_regs_in_table, regno);
unsigned int endregno
! = regno + hard_regno_nregs[regno][GET_MODE (x)];
unsigned int tregno, tendregno, rn;
struct table_elt *p, *next;
*************** invalidate (rtx x, enum machine_mode ful
*** 1869,1875 ****
tregno = REGNO (p->exp);
tendregno
! = tregno + HARD_REGNO_NREGS (tregno, GET_MODE (p->exp));
if (tendregno > regno && tregno < endregno)
remove_from_table (p, hash);
}
--- 1869,1875 ----
tregno = REGNO (p->exp);
tendregno
! = tregno + hard_regno_nregs[tregno][GET_MODE (p->exp)];
if (tendregno > regno && tregno < endregno)
remove_from_table (p, hash);
}
*************** invalidate_for_call (void)
*** 2081,2087 ****
continue;
regno = REGNO (p->exp);
! endregno = regno + HARD_REGNO_NREGS (regno, GET_MODE (p->exp));
for (i = regno; i < endregno; i++)
if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
--- 2081,2087 ----
continue;
regno = REGNO (p->exp);
! endregno = regno + hard_regno_nregs[regno][GET_MODE (p->exp)];
for (i = regno; i < endregno; i++)
if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
*************** exp_equiv_p (rtx x, rtx y, int validate,
*** 2540,2546 ****
unsigned int regno = REGNO (y);
unsigned int endregno
= regno + (regno >= FIRST_PSEUDO_REGISTER ? 1
! : HARD_REGNO_NREGS (regno, GET_MODE (y)));
unsigned int i;
/* If the quantities are not the same, the expressions are not
--- 2540,2546 ----
unsigned int regno = REGNO (y);
unsigned int endregno
= regno + (regno >= FIRST_PSEUDO_REGISTER ? 1
! : hard_regno_nregs[regno][GET_MODE (y)]);
unsigned int i;
/* If the quantities are not the same, the expressions are not
*************** cse_insn (rtx insn, rtx libcall_insn)
*** 5974,5980 ****
unsigned int regno = REGNO (x);
unsigned int endregno
= regno + (regno >= FIRST_PSEUDO_REGISTER ? 1
! : HARD_REGNO_NREGS (regno, GET_MODE (x)));
unsigned int i;
for (i = regno; i < endregno; i++)
--- 5974,5980 ----
unsigned int regno = REGNO (x);
unsigned int endregno
= regno + (regno >= FIRST_PSEUDO_REGISTER ? 1
! : hard_regno_nregs[regno][GET_MODE (x)]);
unsigned int i;
for (i = regno; i < endregno; i++)
Index: cselib.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cselib.c,v
retrieving revision 1.37
diff -c -3 -p -r1.37 cselib.c
*** cselib.c 26 Jan 2004 20:38:54 -0000 1.37
--- cselib.c 1 Feb 2004 23:36:11 -0000
*************** cselib_lookup (rtx x, enum machine_mode
*** 900,906 ****
if (i < FIRST_PSEUDO_REGISTER)
{
! unsigned int n = HARD_REGNO_NREGS (i, mode);
if (n > max_value_regs)
max_value_regs = n;
--- 900,906 ----
if (i < FIRST_PSEUDO_REGISTER)
{
! unsigned int n = hard_regno_nregs[i][mode];
if (n > max_value_regs)
max_value_regs = n;
*************** cselib_invalidate_regno (unsigned int re
*** 980,986 ****
else
i = regno - max_value_regs;
! endregno = regno + HARD_REGNO_NREGS (regno, mode);
}
else
{
--- 980,986 ----
else
i = regno - max_value_regs;
! endregno = regno + hard_regno_nregs[regno][mode];
}
else
{
*************** cselib_invalidate_regno (unsigned int re
*** 1001,1007 ****
unsigned int this_last = i;
if (i < FIRST_PSEUDO_REGISTER && v != NULL)
! this_last += HARD_REGNO_NREGS (i, GET_MODE (v->u.val_rtx)) - 1;
if (this_last < regno || v == NULL)
{
--- 1001,1007 ----
unsigned int this_last = i;
if (i < FIRST_PSEUDO_REGISTER && v != NULL)
! this_last += hard_regno_nregs[i][GET_MODE (v->u.val_rtx)] - 1;
if (this_last < regno || v == NULL)
{
*************** cselib_record_set (rtx dest, cselib_val
*** 1177,1183 ****
{
if (dreg < FIRST_PSEUDO_REGISTER)
{
! unsigned int n = HARD_REGNO_NREGS (dreg, GET_MODE (dest));
if (n > max_value_regs)
max_value_regs = n;
--- 1177,1183 ----
{
if (dreg < FIRST_PSEUDO_REGISTER)
{
! unsigned int n = hard_regno_nregs[dreg][GET_MODE (dest)];
if (n > max_value_regs)
max_value_regs = n;
Index: df.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/df.c,v
retrieving revision 1.60
diff -c -3 -p -r1.60 df.c
*** df.c 21 Jan 2004 20:39:53 -0000 1.60
--- df.c 1 Feb 2004 23:36:11 -0000
*************** df_ref_record (struct df *df, rtx reg, r
*** 819,825 ****
are really referenced. E.g., a (subreg:SI (reg:DI 0) 0) does _not_
reference the whole reg 0 in DI mode (which would also include
reg 1, at least, if 0 and 1 are SImode registers). */
! endregno = HARD_REGNO_NREGS (regno, GET_MODE (reg));
if (GET_CODE (reg) == SUBREG)
regno += subreg_regno_offset (regno, GET_MODE (SUBREG_REG (reg)),
SUBREG_BYTE (reg), GET_MODE (reg));
--- 819,825 ----
are really referenced. E.g., a (subreg:SI (reg:DI 0) 0) does _not_
reference the whole reg 0 in DI mode (which would also include
reg 1, at least, if 0 and 1 are SImode registers). */
! endregno = hard_regno_nregs[regno][GET_MODE (reg)];
if (GET_CODE (reg) == SUBREG)
regno += subreg_regno_offset (regno, GET_MODE (SUBREG_REG (reg)),
SUBREG_BYTE (reg), GET_MODE (reg));
Index: dwarf2out.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/dwarf2out.c,v
retrieving revision 1.483
diff -c -3 -p -r1.483 dwarf2out.c
*** dwarf2out.c 29 Jan 2004 18:42:56 -0000 1.483
--- dwarf2out.c 1 Feb 2004 23:36:12 -0000
*************** reg_loc_descriptor (rtx rtl)
*** 8080,8086 ****
reg = reg_number (rtl);
regs = (*targetm.dwarf_register_span) (rtl);
! if (HARD_REGNO_NREGS (reg, GET_MODE (rtl)) > 1
|| regs)
return multiple_reg_loc_descriptor (rtl, regs);
else
--- 8080,8086 ----
reg = reg_number (rtl);
regs = (*targetm.dwarf_register_span) (rtl);
! if (hard_regno_nregs[reg][GET_MODE (rtl)] > 1
|| regs)
return multiple_reg_loc_descriptor (rtl, regs);
else
*************** multiple_reg_loc_descriptor (rtx rtl, rt
*** 8110,8116 ****
dw_loc_descr_ref loc_result = NULL;
reg = reg_number (rtl);
! nregs = HARD_REGNO_NREGS (reg, GET_MODE (rtl));
/* Simple, contiguous registers. */
if (regs == NULL_RTX)
--- 8110,8116 ----
dw_loc_descr_ref loc_result = NULL;
reg = reg_number (rtl);
! nregs = hard_regno_nregs[reg][GET_MODE (rtl)];
/* Simple, contiguous registers. */
if (regs == NULL_RTX)
Index: flow.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/flow.c,v
retrieving revision 1.575
diff -c -3 -p -r1.575 flow.c
*** flow.c 31 Jan 2004 02:06:45 -0000 1.575
--- flow.c 1 Feb 2004 23:36:12 -0000
*************** mark_reg (rtx reg, void *xset)
*** 928,934 ****
SET_REGNO_REG_SET (set, regno);
if (regno < FIRST_PSEUDO_REGISTER)
{
! int n = HARD_REGNO_NREGS (regno, GET_MODE (reg));
while (--n > 0)
SET_REGNO_REG_SET (set, regno + n);
}
--- 928,934 ----
SET_REGNO_REG_SET (set, regno);
if (regno < FIRST_PSEUDO_REGISTER)
{
! int n = hard_regno_nregs[regno][GET_MODE (reg)];
while (--n > 0)
SET_REGNO_REG_SET (set, regno + n);
}
*************** insn_dead_p (struct propagate_block_info
*** 2163,2169 ****
words are not needed. */
if (regno < FIRST_PSEUDO_REGISTER)
{
! int n = HARD_REGNO_NREGS (regno, GET_MODE (r));
while (--n > 0)
if (REGNO_REG_SET_P (pbi->reg_live, regno+n))
--- 2163,2169 ----
words are not needed. */
if (regno < FIRST_PSEUDO_REGISTER)
{
! int n = hard_regno_nregs[regno][GET_MODE (r)];
while (--n > 0)
if (REGNO_REG_SET_P (pbi->reg_live, regno+n))
*************** mark_set_1 (struct propagate_block_info
*** 2560,2566 ****
case REG:
regno_last = regno_first = REGNO (reg);
if (regno_first < FIRST_PSEUDO_REGISTER)
! regno_last += HARD_REGNO_NREGS (regno_first, GET_MODE (reg)) - 1;
break;
case SUBREG:
--- 2560,2566 ----
case REG:
regno_last = regno_first = REGNO (reg);
if (regno_first < FIRST_PSEUDO_REGISTER)
! regno_last += hard_regno_nregs[regno_first][GET_MODE (reg)] - 1;
break;
case SUBREG:
*************** mark_set_1 (struct propagate_block_info
*** 2579,2585 ****
SUBREG_BYTE (reg),
outer_mode);
regno_last = (regno_first
! + HARD_REGNO_NREGS (regno_first, outer_mode) - 1);
/* Since we've just adjusted the register number ranges, make
sure REG matches. Otherwise some_was_live will be clear
--- 2579,2585 ----
SUBREG_BYTE (reg),
outer_mode);
regno_last = (regno_first
! + hard_regno_nregs[regno_first][outer_mode] - 1);
/* Since we've just adjusted the register number ranges, make
sure REG matches. Otherwise some_was_live will be clear
*************** mark_used_reg (struct propagate_block_in
*** 3491,3497 ****
regno_last = regno_first = REGNO (reg);
if (regno_first < FIRST_PSEUDO_REGISTER)
! regno_last += HARD_REGNO_NREGS (regno_first, GET_MODE (reg)) - 1;
/* Find out if any of this register is live after this instruction. */
some_was_live = some_was_dead = 0;
--- 3491,3497 ----
regno_last = regno_first = REGNO (reg);
if (regno_first < FIRST_PSEUDO_REGISTER)
! regno_last += hard_regno_nregs[regno_first][GET_MODE (reg)] - 1;
/* Find out if any of this register is live after this instruction. */
some_was_live = some_was_dead = 0;
*************** count_or_remove_death_notes_bb (basic_bl
*** 4247,4253 ****
if (REGNO (reg) >= FIRST_PSEUDO_REGISTER)
n = 1;
else
! n = HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg));
count += n;
}
--- 4247,4253 ----
if (REGNO (reg) >= FIRST_PSEUDO_REGISTER)
n = 1;
else
! n = hard_regno_nregs[REGNO (reg)][GET_MODE (reg)];
count += n;
}
Index: function.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/function.c,v
retrieving revision 1.488
diff -c -3 -p -r1.488 function.c
*** function.c 31 Jan 2004 08:02:47 -0000 1.488
--- function.c 1 Feb 2004 23:36:13 -0000
*************** aggregate_value_p (tree exp, tree fntype
*** 4260,4266 ****
return 0;
regno = REGNO (reg);
! nregs = HARD_REGNO_NREGS (regno, TYPE_MODE (type));
for (i = 0; i < nregs; i++)
if (! call_used_regs[regno + i])
return 1;
--- 4260,4266 ----
return 0;
regno = REGNO (reg);
! nregs = hard_regno_nregs[regno][TYPE_MODE (type)];
for (i = 0; i < nregs; i++)
if (! call_used_regs[regno + i])
return 1;
*************** keep_stack_depressed (rtx insns)
*** 7489,7496 ****
&& !REGNO_REG_SET_P (EXIT_BLOCK_PTR->global_live_at_start,
regno)
&& !refers_to_regno_p (regno,
! regno + HARD_REGNO_NREGS (regno,
! Pmode),
info.equiv_reg_src, NULL)
&& info.const_equiv[regno] == 0)
break;
--- 7489,7496 ----
&& !REGNO_REG_SET_P (EXIT_BLOCK_PTR->global_live_at_start,
regno)
&& !refers_to_regno_p (regno,
! regno + hard_regno_nregs[regno]
! [Pmode],
info.equiv_reg_src, NULL)
&& info.const_equiv[regno] == 0)
break;
Index: global.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/global.c,v
retrieving revision 1.98
diff -c -3 -p -r1.98 global.c
*** global.c 20 Dec 2003 02:39:43 -0000 1.98
--- global.c 1 Feb 2004 23:36:13 -0000
*************** global_alloc (FILE *file)
*** 485,491 ****
if (reg_renumber[i] >= 0)
{
int regno = reg_renumber[i];
! int endregno = regno + HARD_REGNO_NREGS (regno, PSEUDO_REGNO_MODE (i));
int j;
for (j = regno; j < endregno; j++)
--- 485,491 ----
if (reg_renumber[i] >= 0)
{
int regno = reg_renumber[i];
! int endregno = regno + hard_regno_nregs[regno][PSEUDO_REGNO_MODE (i)];
int j;
for (j = regno; j < endregno; j++)
*************** find_reg (int num, HARD_REG_SET losers,
*** 1072,1078 ****
|| ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
{
int j;
! int lim = regno + HARD_REGNO_NREGS (regno, mode);
for (j = regno + 1;
(j < lim
&& ! TEST_HARD_REG_BIT (used, j));
--- 1072,1078 ----
|| ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
{
int j;
! int lim = regno + hard_regno_nregs[regno][mode];
for (j = regno + 1;
(j < lim
&& ! TEST_HARD_REG_BIT (used, j));
*************** find_reg (int num, HARD_REG_SET losers,
*** 1119,1125 ****
REGNO_REG_CLASS (i))))
{
int j;
! int lim = i + HARD_REGNO_NREGS (i, mode);
for (j = i + 1;
(j < lim
&& ! TEST_HARD_REG_BIT (used, j)
--- 1119,1125 ----
REGNO_REG_CLASS (i))))
{
int j;
! int lim = i + hard_regno_nregs[i][mode];
for (j = i + 1;
(j < lim
&& ! TEST_HARD_REG_BIT (used, j)
*************** find_reg (int num, HARD_REG_SET losers,
*** 1158,1164 ****
REGNO_REG_CLASS (i))))
{
int j;
! int lim = i + HARD_REGNO_NREGS (i, mode);
for (j = i + 1;
(j < lim
&& ! TEST_HARD_REG_BIT (used, j)
--- 1158,1164 ----
REGNO_REG_CLASS (i))))
{
int j;
! int lim = i + hard_regno_nregs[i][mode];
for (j = i + 1;
(j < lim
&& ! TEST_HARD_REG_BIT (used, j)
*************** find_reg (int num, HARD_REG_SET losers,
*** 1235,1241 ****
register, but the check of allocno[num].size above
was not enough. Sometimes we need more than one
register for a single-word value. */
! && HARD_REGNO_NREGS (regno, mode) == 1
&& (allocno[num].calls_crossed == 0
|| accept_call_clobbered
|| ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
--- 1235,1241 ----
register, but the check of allocno[num].size above
was not enough. Sometimes we need more than one
register for a single-word value. */
! && hard_regno_nregs[regno][mode] == 1
&& (allocno[num].calls_crossed == 0
|| accept_call_clobbered
|| ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
*************** find_reg (int num, HARD_REG_SET losers,
*** 1268,1274 ****
{
int r = reg_renumber[k];
int endregno
! = r + HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (k));
if (regno >= r && regno < endregno)
reg_renumber[k] = -1;
--- 1268,1274 ----
{
int r = reg_renumber[k];
int endregno
! = r + hard_regno_nregs[r][PSEUDO_REGNO_MODE (k)];
if (regno >= r && regno < endregno)
reg_renumber[k] = -1;
*************** find_reg (int num, HARD_REG_SET losers,
*** 1298,1304 ****
/* Make a set of the hard regs being allocated. */
CLEAR_HARD_REG_SET (this_reg);
! lim = best_reg + HARD_REGNO_NREGS (best_reg, mode);
for (j = best_reg; j < lim; j++)
{
SET_HARD_REG_BIT (this_reg, j);
--- 1298,1304 ----
/* Make a set of the hard regs being allocated. */
CLEAR_HARD_REG_SET (this_reg);
! lim = best_reg + hard_regno_nregs[best_reg][mode];
for (j = best_reg; j < lim; j++)
{
SET_HARD_REG_BIT (this_reg, j);
*************** mark_reg_store (rtx reg, rtx setter, voi
*** 1490,1496 ****
/* Handle hardware regs (and pseudos allocated to hard regs). */
if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno])
{
! int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
while (regno < last)
{
record_one_conflict (regno);
--- 1490,1496 ----
/* Handle hardware regs (and pseudos allocated to hard regs). */
if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno])
{
! int last = regno + hard_regno_nregs[regno][GET_MODE (reg)];
while (regno < last)
{
record_one_conflict (regno);
*************** mark_reg_conflicts (rtx reg)
*** 1539,1545 ****
/* Handle hardware regs (and pseudos allocated to hard regs). */
if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno])
{
! int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
while (regno < last)
{
record_one_conflict (regno);
--- 1539,1545 ----
/* Handle hardware regs (and pseudos allocated to hard regs). */
if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno])
{
! int last = regno + hard_regno_nregs[regno][GET_MODE (reg)];
while (regno < last)
{
record_one_conflict (regno);
*************** mark_reg_death (rtx reg)
*** 1573,1579 ****
{
/* Pseudo regs already assigned hardware regs are treated
almost the same as explicit hardware regs. */
! int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
while (regno < last)
{
CLEAR_HARD_REG_BIT (hard_regs_live, regno);
--- 1573,1579 ----
{
/* Pseudo regs already assigned hardware regs are treated
almost the same as explicit hardware regs. */
! int last = regno + hard_regno_nregs[regno][GET_MODE (reg)];
while (regno < last)
{
CLEAR_HARD_REG_BIT (hard_regs_live, regno);
*************** mark_reg_death (rtx reg)
*** 1590,1596 ****
static void
mark_reg_live_nc (int regno, enum machine_mode mode)
{
! int last = regno + HARD_REGNO_NREGS (regno, mode);
while (regno < last)
{
SET_HARD_REG_BIT (hard_regs_live, regno);
--- 1590,1596 ----
static void
mark_reg_live_nc (int regno, enum machine_mode mode)
{
! int last = regno + hard_regno_nregs[regno][mode];
while (regno < last)
{
SET_HARD_REG_BIT (hard_regs_live, regno);
*************** set_preference (rtx dest, rtx src)
*** 1683,1689 ****
SET_REGBIT (hard_reg_preferences,
reg_allocno[src_regno], dest_regno);
for (i = dest_regno;
! i < dest_regno + HARD_REGNO_NREGS (dest_regno, GET_MODE (dest));
i++)
SET_REGBIT (hard_reg_full_preferences, reg_allocno[src_regno], i);
}
--- 1683,1689 ----
SET_REGBIT (hard_reg_preferences,
reg_allocno[src_regno], dest_regno);
for (i = dest_regno;
! i < dest_regno + hard_regno_nregs[dest_regno][GET_MODE (dest)];
i++)
SET_REGBIT (hard_reg_full_preferences, reg_allocno[src_regno], i);
}
*************** set_preference (rtx dest, rtx src)
*** 1702,1708 ****
SET_REGBIT (hard_reg_preferences,
reg_allocno[dest_regno], src_regno);
for (i = src_regno;
! i < src_regno + HARD_REGNO_NREGS (src_regno, GET_MODE (src));
i++)
SET_REGBIT (hard_reg_full_preferences, reg_allocno[dest_regno], i);
}
--- 1702,1708 ----
SET_REGBIT (hard_reg_preferences,
reg_allocno[dest_regno], src_regno);
for (i = src_regno;
! i < src_regno + hard_regno_nregs[src_regno][GET_MODE (src)];
i++)
SET_REGBIT (hard_reg_full_preferences, reg_allocno[dest_regno], i);
}
*************** reg_becomes_live (rtx reg, rtx setter AT
*** 1750,1756 ****
regno = REGNO (reg);
if (regno < FIRST_PSEUDO_REGISTER)
{
! int nregs = HARD_REGNO_NREGS (regno, GET_MODE (reg));
while (nregs-- > 0)
{
SET_REGNO_REG_SET (live_relevant_regs, regno);
--- 1750,1756 ----
regno = REGNO (reg);
if (regno < FIRST_PSEUDO_REGISTER)
{
! int nregs = hard_regno_nregs[regno][GET_MODE (reg)];
while (nregs-- > 0)
{
SET_REGNO_REG_SET (live_relevant_regs, regno);
*************** reg_dies (int regno, enum machine_mode m
*** 1772,1778 ****
{
if (regno < FIRST_PSEUDO_REGISTER)
{
! int nregs = HARD_REGNO_NREGS (regno, mode);
while (nregs-- > 0)
{
CLEAR_REGNO_REG_SET (live_relevant_regs, regno);
--- 1772,1778 ----
{
if (regno < FIRST_PSEUDO_REGISTER)
{
! int nregs = hard_regno_nregs[regno][mode];
while (nregs-- > 0)
{
CLEAR_REGNO_REG_SET (live_relevant_regs, regno);
Index: integrate.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/integrate.c,v
retrieving revision 1.246
diff -c -3 -p -r1.246 integrate.c
*** integrate.c 25 Jan 2004 03:52:42 -0000 1.246
--- integrate.c 1 Feb 2004 23:36:13 -0000
*************** mark_stores (rtx dest, rtx x ATTRIBUTE_U
*** 2830,2836 ****
{
unsigned int uregno = regno;
unsigned int last_reg = (uregno >= FIRST_PSEUDO_REGISTER ? uregno
! : uregno + HARD_REGNO_NREGS (uregno, mode) - 1);
unsigned int i;
/* Ignore virtual stack var or virtual arg register since those
--- 2830,2836 ----
{
unsigned int uregno = regno;
unsigned int last_reg = (uregno >= FIRST_PSEUDO_REGISTER ? uregno
! : uregno + hard_regno_nregs[uregno][mode] - 1);
unsigned int i;
/* Ignore virtual stack var or virtual arg register since those
Index: jump.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/jump.c,v
retrieving revision 1.238
diff -c -3 -p -r1.238 jump.c
*** jump.c 31 Jan 2004 02:06:47 -0000 1.238
--- jump.c 1 Feb 2004 23:36:13 -0000
*************** delete_prior_computation (rtx note, rtx
*** 1551,1563 ****
int dest_endregno
= (dest_regno
+ (dest_regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (dest_regno,
! GET_MODE (SET_DEST (pat))) : 1));
int regno = REGNO (reg);
int endregno
= (regno
+ (regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (regno, GET_MODE (reg)) : 1));
if (dest_regno >= regno
&& dest_endregno <= endregno)
--- 1551,1563 ----
int dest_endregno
= (dest_regno
+ (dest_regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[dest_regno]
! [GET_MODE (SET_DEST (pat))] : 1));
int regno = REGNO (reg);
int endregno
= (regno
+ (regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[regno][GET_MODE (reg)] : 1));
if (dest_regno >= regno
&& dest_endregno <= endregno)
Index: lcm.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/lcm.c,v
retrieving revision 1.58
diff -c -3 -p -r1.58 lcm.c
*** lcm.c 11 Dec 2003 00:20:45 -0000 1.58
--- lcm.c 1 Feb 2004 23:36:14 -0000
*************** reg_dies (rtx reg, HARD_REG_SET live)
*** 932,938 ****
regno = REGNO (reg);
if (regno < FIRST_PSEUDO_REGISTER)
! for (nregs = HARD_REGNO_NREGS (regno, GET_MODE (reg)) - 1; nregs >= 0;
nregs--)
CLEAR_HARD_REG_BIT (live, regno + nregs);
}
--- 932,938 ----
regno = REGNO (reg);
if (regno < FIRST_PSEUDO_REGISTER)
! for (nregs = hard_regno_nregs[regno][GET_MODE (reg)] - 1; nregs >= 0;
nregs--)
CLEAR_HARD_REG_BIT (live, regno + nregs);
}
*************** reg_becomes_live (rtx reg, rtx setter AT
*** 953,959 ****
regno = REGNO (reg);
if (regno < FIRST_PSEUDO_REGISTER)
! for (nregs = HARD_REGNO_NREGS (regno, GET_MODE (reg)) - 1; nregs >= 0;
nregs--)
SET_HARD_REG_BIT (* (HARD_REG_SET *) live, regno + nregs);
}
--- 953,959 ----
regno = REGNO (reg);
if (regno < FIRST_PSEUDO_REGISTER)
! for (nregs = hard_regno_nregs[regno][GET_MODE (reg)] - 1; nregs >= 0;
nregs--)
SET_HARD_REG_BIT (* (HARD_REG_SET *) live, regno + nregs);
}
Index: local-alloc.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/local-alloc.c,v
retrieving revision 1.127
diff -c -3 -p -r1.127 local-alloc.c
*** local-alloc.c 21 Jan 2004 20:40:02 -0000 1.127
--- local-alloc.c 1 Feb 2004 23:36:14 -0000
*************** combine_regs (rtx usedreg, rtx setreg, i
*** 1799,1805 ****
ureg = REGNO (usedreg);
if (ureg < FIRST_PSEUDO_REGISTER)
! usize = HARD_REGNO_NREGS (ureg, GET_MODE (usedreg));
else
usize = ((GET_MODE_SIZE (GET_MODE (usedreg))
+ (REGMODE_NATURAL_SIZE (GET_MODE (usedreg)) - 1))
--- 1799,1805 ----
ureg = REGNO (usedreg);
if (ureg < FIRST_PSEUDO_REGISTER)
! usize = hard_regno_nregs[ureg][GET_MODE (usedreg)];
else
usize = ((GET_MODE_SIZE (GET_MODE (usedreg))
+ (REGMODE_NATURAL_SIZE (GET_MODE (usedreg)) - 1))
*************** combine_regs (rtx usedreg, rtx setreg, i
*** 1832,1838 ****
sreg = REGNO (setreg);
if (sreg < FIRST_PSEUDO_REGISTER)
! ssize = HARD_REGNO_NREGS (sreg, GET_MODE (setreg));
else
ssize = ((GET_MODE_SIZE (GET_MODE (setreg))
+ (REGMODE_NATURAL_SIZE (GET_MODE (setreg)) - 1))
--- 1832,1838 ----
sreg = REGNO (setreg);
if (sreg < FIRST_PSEUDO_REGISTER)
! ssize = hard_regno_nregs[sreg][GET_MODE (setreg)];
else
ssize = ((GET_MODE_SIZE (GET_MODE (setreg))
+ (REGMODE_NATURAL_SIZE (GET_MODE (setreg)) - 1))
*************** find_free_reg (enum reg_class class, enu
*** 2217,2223 ****
|| ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
{
int j;
! int size1 = HARD_REGNO_NREGS (regno, mode);
for (j = 1; j < size1 && ! TEST_HARD_REG_BIT (used, regno + j); j++);
if (j == size1)
{
--- 2217,2223 ----
|| ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
{
int j;
! int size1 = hard_regno_nregs[regno][mode];
for (j = 1; j < size1 && ! TEST_HARD_REG_BIT (used, regno + j); j++);
if (j == size1)
{
*************** find_free_reg (enum reg_class class, enu
*** 2275,2281 ****
static void
mark_life (int regno, enum machine_mode mode, int life)
{
! int j = HARD_REGNO_NREGS (regno, mode);
if (life)
while (--j >= 0)
SET_HARD_REG_BIT (regs_live, regno + j);
--- 2275,2281 ----
static void
mark_life (int regno, enum machine_mode mode, int life)
{
! int j = hard_regno_nregs[regno][mode];
if (life)
while (--j >= 0)
SET_HARD_REG_BIT (regs_live, regno + j);
*************** static void
*** 2292,2298 ****
post_mark_life (int regno, enum machine_mode mode, int life, int birth,
int death)
{
! int j = HARD_REGNO_NREGS (regno, mode);
HARD_REG_SET this_reg;
CLEAR_HARD_REG_SET (this_reg);
--- 2292,2298 ----
post_mark_life (int regno, enum machine_mode mode, int life, int birth,
int death)
{
! int j = hard_regno_nregs[regno][mode];
HARD_REG_SET this_reg;
CLEAR_HARD_REG_SET (this_reg);
Index: loop.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/loop.c,v
retrieving revision 1.489
diff -c -3 -p -r1.489 loop.c
*** loop.c 20 Jan 2004 16:55:56 -0000 1.489
--- loop.c 1 Feb 2004 23:36:14 -0000
*************** Software Foundation, 59 Temple Place - S
*** 163,169 ****
#define LOOP_REGNO_NREGS(REGNO, SET_DEST) \
((REGNO) < FIRST_PSEUDO_REGISTER \
! ? (int) HARD_REGNO_NREGS ((REGNO), GET_MODE (SET_DEST)) : 1)
/* Vector mapping INSN_UIDs to luids.
--- 163,169 ----
#define LOOP_REGNO_NREGS(REGNO, SET_DEST) \
((REGNO) < FIRST_PSEUDO_REGISTER \
! ? (int) hard_regno_nregs[(REGNO)][GET_MODE (SET_DEST)] : 1)
/* Vector mapping INSN_UIDs to luids.
Index: postreload.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/postreload.c,v
retrieving revision 2.12
diff -c -3 -p -r2.12 postreload.c
*** postreload.c 25 Jan 2004 03:52:42 -0000 2.12
--- postreload.c 1 Feb 2004 23:36:15 -0000
*************** reload_combine (void)
*** 780,787 ****
set = single_set (insn);
if (set != NULL_RTX
&& GET_CODE (SET_DEST (set)) == REG
! && (HARD_REGNO_NREGS (REGNO (SET_DEST (set)),
! GET_MODE (SET_DEST (set)))
== 1)
&& GET_CODE (SET_SRC (set)) == PLUS
&& GET_CODE (XEXP (SET_SRC (set), 1)) == REG
--- 780,787 ----
set = single_set (insn);
if (set != NULL_RTX
&& GET_CODE (SET_DEST (set)) == REG
! && (hard_regno_nregs[REGNO (SET_DEST (set))]
! [GET_MODE (SET_DEST (set))]
== 1)
&& GET_CODE (SET_SRC (set)) == PLUS
&& GET_CODE (XEXP (SET_SRC (set), 1)) == REG
*************** reload_combine (void)
*** 825,831 ****
i)
&& reg_state[i].use_index == RELOAD_COMBINE_MAX_USES
&& reg_state[i].store_ruid <= reg_state[regno].use_ruid
! && HARD_REGNO_NREGS (i, GET_MODE (reg)) == 1)
{
rtx index_reg = gen_rtx_REG (GET_MODE (reg), i);
--- 825,831 ----
i)
&& reg_state[i].use_index == RELOAD_COMBINE_MAX_USES
&& reg_state[i].store_ruid <= reg_state[regno].use_ruid
! && hard_regno_nregs[i][GET_MODE (reg)] == 1)
{
rtx index_reg = gen_rtx_REG (GET_MODE (reg), i);
*************** reload_combine (void)
*** 918,924 ****
unsigned int i;
unsigned int start_reg = REGNO (usage_rtx);
unsigned int num_regs =
! HARD_REGNO_NREGS (start_reg, GET_MODE (usage_rtx));
unsigned int end_reg = start_reg + num_regs - 1;
for (i = start_reg; i <= end_reg; i++)
if (GET_CODE (XEXP (link, 0)) == CLOBBER)
--- 918,924 ----
unsigned int i;
unsigned int start_reg = REGNO (usage_rtx);
unsigned int num_regs =
! hard_regno_nregs[start_reg][GET_MODE (usage_rtx)];
unsigned int end_reg = start_reg + num_regs - 1;
for (i = start_reg; i <= end_reg; i++)
if (GET_CODE (XEXP (link, 0)) == CLOBBER)
*************** reload_combine_note_store (rtx dst, rtx
*** 999,1005 ****
|| GET_CODE (SET_DEST (set)) == SIGN_EXTRACT
|| GET_CODE (SET_DEST (set)) == STRICT_LOW_PART)
{
! for (i = HARD_REGNO_NREGS (regno, mode) - 1 + regno; i >= regno; i--)
{
reg_state[i].use_index = -1;
reg_state[i].store_ruid = reload_combine_ruid;
--- 999,1005 ----
|| GET_CODE (SET_DEST (set)) == SIGN_EXTRACT
|| GET_CODE (SET_DEST (set)) == STRICT_LOW_PART)
{
! for (i = hard_regno_nregs[regno][mode] - 1 + regno; i >= regno; i--)
{
reg_state[i].use_index = -1;
reg_state[i].store_ruid = reload_combine_ruid;
*************** reload_combine_note_store (rtx dst, rtx
*** 1007,1013 ****
}
else
{
! for (i = HARD_REGNO_NREGS (regno, mode) - 1 + regno; i >= regno; i--)
{
reg_state[i].store_ruid = reload_combine_ruid;
reg_state[i].use_index = RELOAD_COMBINE_MAX_USES;
--- 1007,1013 ----
}
else
{
! for (i = hard_regno_nregs[regno][mode] - 1 + regno; i >= regno; i--)
{
reg_state[i].store_ruid = reload_combine_ruid;
reg_state[i].use_index = RELOAD_COMBINE_MAX_USES;
*************** reload_combine_note_use (rtx *xp, rtx in
*** 1045,1051 ****
/* Mark the return register as used in an unknown fashion. */
rtx reg = XEXP (x, 0);
int regno = REGNO (reg);
! int nregs = HARD_REGNO_NREGS (regno, GET_MODE (reg));
while (--nregs >= 0)
reg_state[regno + nregs].use_index = -1;
--- 1045,1051 ----
/* Mark the return register as used in an unknown fashion. */
rtx reg = XEXP (x, 0);
int regno = REGNO (reg);
! int nregs = hard_regno_nregs[regno][GET_MODE (reg)];
while (--nregs >= 0)
reg_state[regno + nregs].use_index = -1;
*************** reload_combine_note_use (rtx *xp, rtx in
*** 1081,1087 ****
if (regno >= FIRST_PSEUDO_REGISTER)
abort ();
! nregs = HARD_REGNO_NREGS (regno, GET_MODE (x));
/* We can't substitute into multi-hard-reg uses. */
if (nregs > 1)
--- 1081,1087 ----
if (regno >= FIRST_PSEUDO_REGISTER)
abort ();
! nregs = hard_regno_nregs[regno][GET_MODE (x)];
/* We can't substitute into multi-hard-reg uses. */
if (nregs > 1)
*************** reload_cse_move2add (rtx first)
*** 1391,1397 ****
number of calls to gen_rtx_SET to avoid memory
allocation if possible. */
&& SCALAR_INT_MODE_P (GET_MODE (XEXP (cnd, 0)))
! && HARD_REGNO_NREGS (REGNO (XEXP (cnd, 0)), GET_MODE (XEXP (cnd, 0))) == 1
&& GET_CODE (XEXP (cnd, 1)) == CONST_INT)
{
rtx implicit_set =
--- 1391,1397 ----
number of calls to gen_rtx_SET to avoid memory
allocation if possible. */
&& SCALAR_INT_MODE_P (GET_MODE (XEXP (cnd, 0)))
! && hard_regno_nregs[REGNO (XEXP (cnd, 0))][GET_MODE (XEXP (cnd, 0))] == 1
&& GET_CODE (XEXP (cnd, 1)) == CONST_INT)
{
rtx implicit_set =
*************** move2add_note_store (rtx dst, rtx set, v
*** 1450,1456 ****
regno += REGNO (dst);
if (SCALAR_INT_MODE_P (mode)
! && HARD_REGNO_NREGS (regno, mode) == 1 && GET_CODE (set) == SET
&& GET_CODE (SET_DEST (set)) != ZERO_EXTRACT
&& GET_CODE (SET_DEST (set)) != SIGN_EXTRACT
&& GET_CODE (SET_DEST (set)) != STRICT_LOW_PART)
--- 1450,1456 ----
regno += REGNO (dst);
if (SCALAR_INT_MODE_P (mode)
! && hard_regno_nregs[regno][mode] == 1 && GET_CODE (set) == SET
&& GET_CODE (SET_DEST (set)) != ZERO_EXTRACT
&& GET_CODE (SET_DEST (set)) != SIGN_EXTRACT
&& GET_CODE (SET_DEST (set)) != STRICT_LOW_PART)
*************** move2add_note_store (rtx dst, rtx set, v
*** 1551,1557 ****
}
else
{
! unsigned int endregno = regno + HARD_REGNO_NREGS (regno, mode);
for (i = regno; i < endregno; i++)
/* Reset the information about this register. */
--- 1551,1557 ----
}
else
{
! unsigned int endregno = regno + hard_regno_nregs[regno][mode];
for (i = regno; i < endregno; i++)
/* Reset the information about this register. */
Index: ra-colorize.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ra-colorize.c,v
retrieving revision 1.15
diff -c -3 -p -r1.15 ra-colorize.c
*** ra-colorize.c 13 Dec 2003 04:11:23 -0000 1.15
--- ra-colorize.c 1 Feb 2004 23:36:15 -0000
*************** ok (struct web *target, struct web *sour
*** 562,568 ****
return 0;
/* Sanity for funny modes. */
! size = HARD_REGNO_NREGS (color, GET_MODE (target->orig_x));
if (!size)
return 0;
--- 562,568 ----
return 0;
/* Sanity for funny modes. */
! size = hard_regno_nregs[color][GET_MODE (target->orig_x)];
if (!size)
return 0;
*************** combine (struct web *u, struct web *v)
*** 726,732 ****
struct web *web = u;
int nregs = 1 + v->add_hardregs;
if (u->type == PRECOLORED)
! nregs = HARD_REGNO_NREGS (u->color, GET_MODE (v->orig_x));
/* For precolored U's we need to make conflicts between V's
neighbors and as many hardregs from U as V needed if it gets
--- 726,732 ----
struct web *web = u;
int nregs = 1 + v->add_hardregs;
if (u->type == PRECOLORED)
! nregs = hard_regno_nregs[u->color][GET_MODE (v->orig_x)];
/* For precolored U's we need to make conflicts between V's
neighbors and as many hardregs from U as V needed if it gets
*************** color_usable_p (int c, HARD_REG_SET dont
*** 992,998 ****
&& HARD_REGNO_MODE_OK (c, mode))
{
int i, size;
! size = HARD_REGNO_NREGS (c, mode);
for (i = 1; i < size && TEST_HARD_REG_BIT (free_colors, c + i); i++);
if (i == size)
return 1;
--- 992,998 ----
&& HARD_REGNO_MODE_OK (c, mode))
{
int i, size;
! size = hard_regno_nregs[c][mode];
for (i = 1; i < size && TEST_HARD_REG_BIT (free_colors, c + i); i++);
if (i == size)
return 1;
*************** get_free_reg (HARD_REG_SET dont_begin_co
*** 1029,1035 ****
&& HARD_REGNO_MODE_OK (c, mode))
{
int i, size;
! size = HARD_REGNO_NREGS (c, mode);
for (i = 1; i < size && TEST_HARD_REG_BIT (free_colors, c + i); i++);
if (i != size)
{
--- 1029,1035 ----
&& HARD_REGNO_MODE_OK (c, mode))
{
int i, size;
! size = hard_regno_nregs[c][mode];
for (i = 1; i < size && TEST_HARD_REG_BIT (free_colors, c + i); i++);
if (i != size)
{
*************** calculate_dont_begin (struct web *web, H
*** 1172,1182 ****
if (ptarget->type == COLORED || ptarget->type == PRECOLORED)
{
struct web *source = (sl) ? sl->s : web;
! unsigned int tsize = HARD_REGNO_NREGS (ptarget->color,
! GET_MODE (w->orig_x));
/* ssize is only a first guess for the size. */
! unsigned int ssize = HARD_REGNO_NREGS (ptarget->color, GET_MODE
! (source->orig_x));
unsigned int tofs = 0;
unsigned int sofs = 0;
/* C1 and C2 can become negative, so unsigned
--- 1172,1182 ----
if (ptarget->type == COLORED || ptarget->type == PRECOLORED)
{
struct web *source = (sl) ? sl->s : web;
! unsigned int tsize = hard_regno_nregs[ptarget->color]
! [GET_MODE (w->orig_x)];
/* ssize is only a first guess for the size. */
! unsigned int ssize = hard_regno_nregs[ptarget->color][GET_MODE
! (source->orig_x)];
unsigned int tofs = 0;
unsigned int sofs = 0;
/* C1 and C2 can become negative, so unsigned
*************** calculate_dont_begin (struct web *web, H
*** 1202,1212 ****
c1 to a place, where the last of sources hardregs does not
overlap the first of targets colors. */
while (c1 + sofs
! + HARD_REGNO_NREGS (c1, GET_MODE (source->orig_x)) - 1
< ptarget->color + tofs)
c1++;
while (c1 > 0 && c1 + sofs
! + HARD_REGNO_NREGS (c1, GET_MODE (source->orig_x)) - 1
> ptarget->color + tofs)
c1--;
for (; c1 <= c2; c1++)
--- 1202,1212 ----
c1 to a place, where the last of sources hardregs does not
overlap the first of targets colors. */
while (c1 + sofs
! + hard_regno_nregs[c1][GET_MODE (source->orig_x)] - 1
< ptarget->color + tofs)
c1++;
while (c1 > 0 && c1 + sofs
! + hard_regno_nregs[c1][GET_MODE (source->orig_x)] - 1
> ptarget->color + tofs)
c1--;
for (; c1 <= c2; c1++)
*************** colorize_one_web (struct web *web, int h
*** 1588,1594 ****
web->color = c;
if (flag_ra_biased)
{
! int nregs = HARD_REGNO_NREGS (c, GET_MODE (web->orig_x));
for (wl = web->conflict_list; wl; wl = wl->next)
{
struct web *ptarget = alias (wl->t);
--- 1588,1594 ----
web->color = c;
if (flag_ra_biased)
{
! int nregs = hard_regno_nregs[c][GET_MODE (web->orig_x)];
for (wl = web->conflict_list; wl; wl = wl->next)
{
struct web *ptarget = alias (wl->t);
*************** try_recolor_web (struct web *web)
*** 1669,1675 ****
int i, nregs;
if (!HARD_REGNO_MODE_OK (c, GET_MODE (web->orig_x)))
continue;
! nregs = HARD_REGNO_NREGS (c, GET_MODE (web->orig_x));
for (i = 0; i < nregs; i++)
if (!TEST_HARD_REG_BIT (web->usable_regs, c + i))
break;
--- 1669,1675 ----
int i, nregs;
if (!HARD_REGNO_MODE_OK (c, GET_MODE (web->orig_x)))
continue;
! nregs = hard_regno_nregs[c][GET_MODE (web->orig_x)];
for (i = 0; i < nregs; i++)
if (!TEST_HARD_REG_BIT (web->usable_regs, c + i))
break;
*************** try_recolor_web (struct web *web)
*** 1719,1732 ****
/* Note that min_color[] contains 1-based values (zero means
undef). */
c1 = c1 == 0 ? web2->color : (c1 - 1);
! c2 = web2->color + HARD_REGNO_NREGS (web2->color, GET_MODE
! (web2->orig_x)) - 1;
for (; c1 <= c2; c1++)
if (TEST_HARD_REG_BIT (possible_begin, c1))
{
int nregs;
HARD_REG_SET colors;
! nregs = HARD_REGNO_NREGS (c1, GET_MODE (web->orig_x));
COPY_HARD_REG_SET (colors, web2->usable_regs);
for (; nregs--;)
CLEAR_HARD_REG_BIT (colors, c1 + nregs);
--- 1719,1732 ----
/* Note that min_color[] contains 1-based values (zero means
undef). */
c1 = c1 == 0 ? web2->color : (c1 - 1);
! c2 = web2->color + hard_regno_nregs[web2->color][GET_MODE
! (web2->orig_x)] - 1;
for (; c1 <= c2; c1++)
if (TEST_HARD_REG_BIT (possible_begin, c1))
{
int nregs;
HARD_REG_SET colors;
! nregs = hard_regno_nregs[c1][GET_MODE (web->orig_x)];
COPY_HARD_REG_SET (colors, web2->usable_regs);
for (; nregs--;)
CLEAR_HARD_REG_BIT (colors, c1 + nregs);
*************** try_recolor_web (struct web *web)
*** 1752,1758 ****
newcol = c;
if (newcol >= 0 && cost_neighbors[newcol] < web->spill_cost)
{
! int nregs = HARD_REGNO_NREGS (newcol, GET_MODE (web->orig_x));
unsigned HOST_WIDE_INT cost = 0;
int *old_colors;
struct conflict_link *wl_next;
--- 1752,1758 ----
newcol = c;
if (newcol >= 0 && cost_neighbors[newcol] < web->spill_cost)
{
! int nregs = hard_regno_nregs[newcol][GET_MODE (web->orig_x)];
unsigned HOST_WIDE_INT cost = 0;
int *old_colors;
struct conflict_link *wl_next;
*************** try_recolor_web (struct web *web)
*** 1775,1782 ****
wl_next = wl->next;
if (web2->type == COLORED)
{
! int nregs2 = HARD_REGNO_NREGS (web2->color, GET_MODE
! (web2->orig_x));
if (web->color >= web2->color + nregs2
|| web2->color >= web->color + nregs)
continue;
--- 1775,1782 ----
wl_next = wl->next;
if (web2->type == COLORED)
{
! int nregs2 = hard_regno_nregs[web2->color][GET_MODE
! (web2->orig_x)];
if (web->color >= web2->color + nregs2
|| web2->color >= web->color + nregs)
continue;
*************** insert_coalesced_conflicts (void)
*** 1866,1872 ****
int i;
int nregs = 1 + web->add_hardregs;
if (aweb->type == PRECOLORED)
! nregs = HARD_REGNO_NREGS (aweb->color, GET_MODE (web->orig_x));
for (i = 0; i < nregs; i++)
{
if (aweb->type == PRECOLORED)
--- 1866,1872 ----
int i;
int nregs = 1 + web->add_hardregs;
if (aweb->type == PRECOLORED)
! nregs = hard_regno_nregs[aweb->color][GET_MODE (web->orig_x)];
for (i = 0; i < nregs; i++)
{
if (aweb->type == PRECOLORED)
*************** check_colors (void)
*** 1971,1977 ****
if (aweb->type == SPILLED || web->regno >= max_normal_pseudo)
continue;
else if (aweb->type == COLORED)
! nregs = HARD_REGNO_NREGS (aweb->color, GET_MODE (web->orig_x));
else if (aweb->type == PRECOLORED)
nregs = 1;
else
--- 1971,1977 ----
if (aweb->type == SPILLED || web->regno >= max_normal_pseudo)
continue;
else if (aweb->type == COLORED)
! nregs = hard_regno_nregs[aweb->color][GET_MODE (web->orig_x)];
else if (aweb->type == PRECOLORED)
nregs = 1;
else
*************** check_colors (void)
*** 1995,2001 ****
struct web *web2 = alias (wl->t);
int nregs2;
if (web2->type == COLORED)
! nregs2 = HARD_REGNO_NREGS (web2->color, GET_MODE (web2->orig_x));
else if (web2->type == PRECOLORED)
nregs2 = 1;
else
--- 1995,2001 ----
struct web *web2 = alias (wl->t);
int nregs2;
if (web2->type == COLORED)
! nregs2 = hard_regno_nregs[web2->color][GET_MODE (web2->orig_x)];
else if (web2->type == PRECOLORED)
nregs2 = 1;
else
*************** check_colors (void)
*** 2014,2021 ****
continue;
for (sl = wl->sub; sl; sl = sl->next)
{
! int ssize = HARD_REGNO_NREGS (scol, GET_MODE (sl->s->orig_x));
! int tsize = HARD_REGNO_NREGS (tcol, GET_MODE (sl->t->orig_x));
int sofs = 0, tofs = 0;
if (SUBWEB_P (sl->t)
&& GET_MODE_SIZE (GET_MODE (sl->t->orig_x)) >= UNITS_PER_WORD)
--- 2014,2021 ----
continue;
for (sl = wl->sub; sl; sl = sl->next)
{
! int ssize = hard_regno_nregs[scol][GET_MODE (sl->s->orig_x)];
! int tsize = hard_regno_nregs[tcol][GET_MODE (sl->t->orig_x)];
int sofs = 0, tofs = 0;
if (SUBWEB_P (sl->t)
&& GET_MODE_SIZE (GET_MODE (sl->t->orig_x)) >= UNITS_PER_WORD)
*************** break_precolored_alias (struct web *web)
*** 2112,2118 ****
struct web *pre = web->alias;
struct conflict_link *wl;
unsigned int c = pre->color;
! unsigned int nregs = HARD_REGNO_NREGS (c, GET_MODE (web->orig_x));
if (pre->type != PRECOLORED)
abort ();
unalias_web (web);
--- 2112,2118 ----
struct web *pre = web->alias;
struct conflict_link *wl;
unsigned int c = pre->color;
! unsigned int nregs = hard_regno_nregs[c][GET_MODE (web->orig_x)];
if (pre->type != PRECOLORED)
abort ();
unalias_web (web);
Index: ra-debug.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ra-debug.c,v
retrieving revision 1.14
diff -c -3 -p -r1.14 ra-debug.c
*** ra-debug.c 11 Dec 2003 00:20:46 -0000 1.14
--- ra-debug.c 1 Feb 2004 23:36:15 -0000
***************
*** 32,37 ****
--- 32,38 ----
#include "output.h"
#include "ra.h"
#include "tm_p.h"
+ #include "regs.h"
/* This file contains various dumping and debug functions for
the graph coloring register allocator. */
*************** ra_print_rtx_object (FILE *file, rtx x)
*** 245,251 ****
int regno = REGNO (x);
if (regno < FIRST_PSEUDO_REGISTER)
{
! int i, nregs = HARD_REGNO_NREGS (regno, mode);
if (nregs > 1)
fputs ("[", file);
for (i = 0; i < nregs; i++)
--- 246,252 ----
int regno = REGNO (x);
if (regno < FIRST_PSEUDO_REGISTER)
{
! int i, nregs = hard_regno_nregs[regno][mode];
if (nregs > 1)
fputs ("[", file);
for (i = 0; i < nregs; i++)
*************** ra_print_rtx_object (FILE *file, rtx x)
*** 272,278 ****
&& REGNO (sub) < FIRST_PSEUDO_REGISTER)
{
int regno = REGNO (sub);
! int i, nregs = HARD_REGNO_NREGS (regno, mode);
regno += subreg_regno_offset (regno, GET_MODE (sub),
ofs, mode);
if (nregs > 1)
--- 273,279 ----
&& REGNO (sub) < FIRST_PSEUDO_REGISTER)
{
int regno = REGNO (sub);
! int i, nregs = hard_regno_nregs[regno][mode];
regno += subreg_regno_offset (regno, GET_MODE (sub),
ofs, mode);
if (nregs > 1)
Index: ra-rewrite.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ra-rewrite.c,v
retrieving revision 1.16
diff -c -3 -p -r1.16 ra-rewrite.c
*** ra-rewrite.c 11 Dec 2003 00:20:46 -0000 1.16
--- ra-rewrite.c 1 Feb 2004 23:36:15 -0000
*************** choose_spill_colors (void)
*** 352,358 ****
&& HARD_REGNO_MODE_OK (c, PSEUDO_REGNO_MODE (web->regno)))
{
int i, size;
! size = HARD_REGNO_NREGS (c, PSEUDO_REGNO_MODE (web->regno));
for (i = 1; i < size
&& TEST_HARD_REG_BIT (avail, c + i); i++);
if (i == size)
--- 352,358 ----
&& HARD_REGNO_MODE_OK (c, PSEUDO_REGNO_MODE (web->regno)))
{
int i, size;
! size = hard_regno_nregs[c][PSEUDO_REGNO_MODE (web->regno)];
for (i = 1; i < size
&& TEST_HARD_REG_BIT (avail, c + i); i++);
if (i == size)
*************** spill_same_color_p (struct web *web1, st
*** 742,750 ****
return 0;
size1 = web1->type == PRECOLORED
! ? 1 : HARD_REGNO_NREGS (c1, PSEUDO_REGNO_MODE (web1->regno));
size2 = web2->type == PRECOLORED
! ? 1 : HARD_REGNO_NREGS (c2, PSEUDO_REGNO_MODE (web2->regno));
if (c1 >= c2 + size2 || c2 >= c1 + size1)
return 0;
return 1;
--- 742,750 ----
return 0;
size1 = web1->type == PRECOLORED
! ? 1 : hard_regno_nregs[c1][PSEUDO_REGNO_MODE (web1->regno)];
size2 = web2->type == PRECOLORED
! ? 1 : hard_regno_nregs[c2][PSEUDO_REGNO_MODE (web2->regno)];
if (c1 >= c2 + size2 || c2 >= c1 + size1)
return 0;
return 1;
*************** update_spill_colors (HARD_REG_SET *in_us
*** 779,785 ****
if ((c = alias (find_web_for_subweb (web))->color) < 0
|| c == an_unusable_color)
return;
! size = HARD_REGNO_NREGS (c, GET_MODE (web->orig_x));
if (SUBWEB_P (web))
{
c += subreg_regno_offset (c, GET_MODE (SUBREG_REG (web->orig_x)),
--- 779,785 ----
if ((c = alias (find_web_for_subweb (web))->color) < 0
|| c == an_unusable_color)
return;
! size = hard_regno_nregs[c][GET_MODE (web->orig_x)];
if (SUBWEB_P (web))
{
c += subreg_regno_offset (c, GET_MODE (SUBREG_REG (web->orig_x)),
*************** spill_is_free (HARD_REG_SET *in_use, str
*** 810,816 ****
if (c == an_unusable_color)
return 1;
size = web->type == PRECOLORED
! ? 1 : HARD_REGNO_NREGS (c, PSEUDO_REGNO_MODE (web->regno));
for (; size--;)
if (TEST_HARD_REG_BIT (*in_use, c + size))
return 0;
--- 810,816 ----
if (c == an_unusable_color)
return 1;
size = web->type == PRECOLORED
! ? 1 : hard_regno_nregs[c][PSEUDO_REGNO_MODE (web->regno)];
for (; size--;)
if (TEST_HARD_REG_BIT (*in_use, c + size))
return 0;
Index: ra.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ra.c,v
retrieving revision 1.12
diff -c -3 -p -r1.12 ra.c
*** ra.c 16 Dec 2003 00:06:33 -0000 1.12
--- ra.c 1 Feb 2004 23:36:15 -0000
*************** init_ra (void)
*** 472,497 ****
{
if (! CAN_ELIMINATE (eliminables[j].from, eliminables[j].to)
|| (eliminables[j].to == STACK_POINTER_REGNUM && need_fp))
! for (i = HARD_REGNO_NREGS (eliminables[j].from, Pmode); i--;)
SET_HARD_REG_BIT (never_use_colors, eliminables[j].from + i);
}
#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
if (need_fp)
! for (i = HARD_REGNO_NREGS (HARD_FRAME_POINTER_REGNUM, Pmode); i--;)
SET_HARD_REG_BIT (never_use_colors, HARD_FRAME_POINTER_REGNUM + i);
#endif
#else
if (need_fp)
! for (i = HARD_REGNO_NREGS (FRAME_POINTER_REGNUM, Pmode); i--;)
SET_HARD_REG_BIT (never_use_colors, FRAME_POINTER_REGNUM + i);
#endif
/* Stack and argument pointer are also rather useless to us. */
! for (i = HARD_REGNO_NREGS (STACK_POINTER_REGNUM, Pmode); i--;)
SET_HARD_REG_BIT (never_use_colors, STACK_POINTER_REGNUM + i);
! for (i = HARD_REGNO_NREGS (ARG_POINTER_REGNUM, Pmode); i--;)
SET_HARD_REG_BIT (never_use_colors, ARG_POINTER_REGNUM + i);
for (i = 0; i < 256; i++)
--- 472,497 ----
{
if (! CAN_ELIMINATE (eliminables[j].from, eliminables[j].to)
|| (eliminables[j].to == STACK_POINTER_REGNUM && need_fp))
! for (i = hard_regno_nregs[eliminables[j].from][Pmode]; i--;)
SET_HARD_REG_BIT (never_use_colors, eliminables[j].from + i);
}
#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
if (need_fp)
! for (i = hard_regno_nregs[HARD_FRAME_POINTER_REGNUM][Pmode]; i--;)
SET_HARD_REG_BIT (never_use_colors, HARD_FRAME_POINTER_REGNUM + i);
#endif
#else
if (need_fp)
! for (i = hard_regno_nregs[FRAME_POINTER_REGNUM][Pmode]; i--;)
SET_HARD_REG_BIT (never_use_colors, FRAME_POINTER_REGNUM + i);
#endif
/* Stack and argument pointer are also rather useless to us. */
! for (i = hard_regno_nregs[STACK_POINTER_REGNUM][Pmode]; i--;)
SET_HARD_REG_BIT (never_use_colors, STACK_POINTER_REGNUM + i);
! for (i = hard_regno_nregs[ARG_POINTER_REGNUM][Pmode]; i--;)
SET_HARD_REG_BIT (never_use_colors, ARG_POINTER_REGNUM + i);
for (i = 0; i < 256; i++)
*************** init_ra (void)
*** 528,534 ****
for (reg = 0; reg < FIRST_PSEUDO_REGISTER; reg++)
if (HARD_REGNO_MODE_OK (reg, i)
/* Ignore VOIDmode and similar things. */
! && (size = HARD_REGNO_NREGS (reg, i)) != 0
&& (reg + size) <= FIRST_PSEUDO_REGISTER)
{
while (size--)
--- 528,534 ----
for (reg = 0; reg < FIRST_PSEUDO_REGISTER; reg++)
if (HARD_REGNO_MODE_OK (reg, i)
/* Ignore VOIDmode and similar things. */
! && (size = hard_regno_nregs[reg][i]) != 0
&& (reg + size) <= FIRST_PSEUDO_REGISTER)
{
while (size--)
Index: recog.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/recog.c,v
retrieving revision 1.195
diff -c -3 -p -r1.195 recog.c
*** recog.c 23 Jan 2004 23:49:36 -0000 1.195
--- recog.c 1 Feb 2004 23:36:15 -0000
*************** reg_fits_class_p (rtx operand, enum reg_
*** 2666,2672 ****
{
int sr;
regno += offset;
! for (sr = HARD_REGNO_NREGS (regno, mode) - 1;
sr > 0; sr--)
if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
regno + sr))
--- 2666,2672 ----
{
int sr;
regno += offset;
! for (sr = hard_regno_nregs[regno][mode] - 1;
sr > 0; sr--)
if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
regno + sr))
*************** peep2_reg_dead_p (int ofs, rtx reg)
*** 2910,2916 ****
abort ();
regno = REGNO (reg);
! n = HARD_REGNO_NREGS (regno, GET_MODE (reg));
while (--n >= 0)
if (REGNO_REG_SET_P (peep2_insn_data[ofs].live_before, regno + n))
return 0;
--- 2910,2916 ----
abort ();
regno = REGNO (reg);
! n = hard_regno_nregs[regno][GET_MODE (reg)];
while (--n >= 0)
if (REGNO_REG_SET_P (peep2_insn_data[ofs].live_before, regno + n))
return 0;
*************** peep2_find_free_register (int from, int
*** 2998,3004 ****
continue;
success = 1;
! for (j = HARD_REGNO_NREGS (regno, mode) - 1; j >= 0; j--)
{
if (TEST_HARD_REG_BIT (*reg_set, regno + j)
|| TEST_HARD_REG_BIT (live, regno + j))
--- 2998,3004 ----
continue;
success = 1;
! for (j = hard_regno_nregs[regno][mode] - 1; j >= 0; j--)
{
if (TEST_HARD_REG_BIT (*reg_set, regno + j)
|| TEST_HARD_REG_BIT (live, regno + j))
*************** peep2_find_free_register (int from, int
*** 3009,3015 ****
}
if (success)
{
! for (j = HARD_REGNO_NREGS (regno, mode) - 1; j >= 0; j--)
SET_HARD_REG_BIT (*reg_set, regno + j);
/* Start the next search with the next register. */
--- 3009,3015 ----
}
if (success)
{
! for (j = hard_regno_nregs[regno][mode] - 1; j >= 0; j--)
SET_HARD_REG_BIT (*reg_set, regno + j);
/* Start the next search with the next register. */
Index: reg-stack.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/reg-stack.c,v
retrieving revision 1.141
diff -c -3 -p -r1.141 reg-stack.c
*** reg-stack.c 21 Jan 2004 20:40:03 -0000 1.141
--- reg-stack.c 1 Feb 2004 23:36:15 -0000
*************** subst_stack_regs_pat (rtx insn, stack re
*** 1491,1497 ****
case CALL:
{
int count;
! for (count = HARD_REGNO_NREGS (REGNO (*dest), GET_MODE (*dest));
--count >= 0;)
{
regstack->reg[++regstack->top] = REGNO (*dest) + count;
--- 1491,1497 ----
case CALL:
{
int count;
! for (count = hard_regno_nregs[REGNO (*dest)][GET_MODE (*dest)];
--count >= 0;)
{
regstack->reg[++regstack->top] = REGNO (*dest) + count;
*************** convert_regs_exit (void)
*** 2484,2490 ****
{
value_reg_low = REGNO (retvalue);
value_reg_high = value_reg_low
! + HARD_REGNO_NREGS (value_reg_low, GET_MODE (retvalue)) - 1;
}
output_stack = &BLOCK_INFO (EXIT_BLOCK_PTR)->stack_in;
--- 2484,2490 ----
{
value_reg_low = REGNO (retvalue);
value_reg_high = value_reg_low
! + hard_regno_nregs[value_reg_low][GET_MODE (retvalue)] - 1;
}
output_stack = &BLOCK_INFO (EXIT_BLOCK_PTR)->stack_in;
Index: regclass.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/regclass.c,v
retrieving revision 1.183
diff -c -3 -p -r1.183 regclass.c
*** regclass.c 22 Dec 2003 18:23:15 -0000 1.183
--- regclass.c 1 Feb 2004 23:36:16 -0000
*************** static struct reg_info_data *reg_info_he
*** 252,257 ****
--- 252,259 ----
static int no_global_reg_vars = 0;
+ /* Specify number of hard registers given machine mode occupy. */
+ unsigned char hard_regno_nregs[FIRST_PSEUDO_REGISTER][MAX_MACHINE_MODE];
/* Function called only once to initialize the above data on reg usage.
Once this is done, various switches may override. */
*************** init_reg_sets_1 (void)
*** 539,545 ****
void
init_reg_modes_once (void)
{
! int i;
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
{
--- 541,551 ----
void
init_reg_modes_once (void)
{
! int i, j;
!
! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
! for (j = 0; j < MAX_MACHINE_MODE; j++)
! hard_regno_nregs[i][j] = HARD_REGNO_NREGS(i, (enum machine_mode)j);
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
{
*************** choose_hard_reg_mode (unsigned int regno
*** 658,664 ****
for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT);
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
! if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
found_mode = mode;
--- 664,670 ----
for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT);
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
! if ((unsigned) hard_regno_nregs[regno][mode] == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
found_mode = mode;
*************** choose_hard_reg_mode (unsigned int regno
*** 669,675 ****
for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
! if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
found_mode = mode;
--- 675,681 ----
for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
! if ((unsigned) hard_regno_nregs[regno][mode] == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
found_mode = mode;
*************** choose_hard_reg_mode (unsigned int regno
*** 680,686 ****
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
! if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
found_mode = mode;
--- 686,692 ----
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
! if ((unsigned) hard_regno_nregs[regno][mode] == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
found_mode = mode;
*************** choose_hard_reg_mode (unsigned int regno
*** 691,697 ****
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
! if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
found_mode = mode;
--- 697,703 ----
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
! if ((unsigned) hard_regno_nregs[regno][mode] == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
found_mode = mode;
*************** choose_hard_reg_mode (unsigned int regno
*** 703,709 ****
for (m = (unsigned int) CCmode; m < (unsigned int) NUM_MACHINE_MODES; ++m)
{
mode = (enum machine_mode) m;
! if ((unsigned) HARD_REGNO_NREGS (regno, mode) == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
return mode;
--- 709,715 ----
for (m = (unsigned int) CCmode; m < (unsigned int) NUM_MACHINE_MODES; ++m)
{
mode = (enum machine_mode) m;
! if ((unsigned) hard_regno_nregs[regno][mode] == nregs
&& HARD_REGNO_MODE_OK (regno, mode)
&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
return mode;
*************** record_reg_classes (int n_alts, int n_op
*** 1836,1849 ****
op_costs[i].cost[class] = -1;
else
{
! for (nr = 0; nr < (unsigned) HARD_REGNO_NREGS (regno, mode); nr++)
{
if (! TEST_HARD_REG_BIT (reg_class_contents[class],
regno + nr))
break;
}
! if (nr == (unsigned) HARD_REGNO_NREGS (regno,mode))
op_costs[i].cost[class] = -1;
}
}
--- 1842,1855 ----
op_costs[i].cost[class] = -1;
else
{
! for (nr = 0; nr < (unsigned) hard_regno_nregs[regno][mode]; nr++)
{
if (! TEST_HARD_REG_BIT (reg_class_contents[class],
regno + nr))
break;
}
! if (nr == (unsigned) hard_regno_nregs[regno][mode])
op_costs[i].cost[class] = -1;
}
}
Index: regmove.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/regmove.c,v
retrieving revision 1.153
diff -c -3 -p -r1.153 regmove.c
*** regmove.c 21 Jan 2004 20:40:03 -0000 1.153
--- regmove.c 1 Feb 2004 23:36:16 -0000
*************** mark_flags_life_zones (rtx flags)
*** 246,252 ****
flags_nregs = 1;
#else
flags_regno = REGNO (flags);
! flags_nregs = HARD_REGNO_NREGS (flags_regno, GET_MODE (flags));
#endif
flags_set_1_rtx = flags;
--- 246,252 ----
flags_nregs = 1;
#else
flags_regno = REGNO (flags);
! flags_nregs = hard_regno_nregs[flags_regno][GET_MODE (flags)];
#endif
flags_set_1_rtx = flags;
Index: regrename.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/regrename.c,v
retrieving revision 1.73
diff -c -3 -p -r1.73 regrename.c
*** regrename.c 14 Jan 2004 17:55:20 -0000 1.73
--- regrename.c 1 Feb 2004 23:36:16 -0000
*************** note_sets (rtx x, rtx set ATTRIBUTE_UNUS
*** 104,110 ****
if (GET_CODE (x) != REG)
return;
regno = REGNO (x);
! nregs = HARD_REGNO_NREGS (regno, GET_MODE (x));
/* There must not be pseudos at this point. */
if (regno + nregs > FIRST_PSEUDO_REGISTER)
--- 104,110 ----
if (GET_CODE (x) != REG)
return;
regno = REGNO (x);
! nregs = hard_regno_nregs[regno][GET_MODE (x)];
/* There must not be pseudos at this point. */
if (regno + nregs > FIRST_PSEUDO_REGISTER)
*************** clear_dead_regs (HARD_REG_SET *pset, enu
*** 126,132 ****
{
rtx reg = XEXP (note, 0);
unsigned int regno = REGNO (reg);
! int nregs = HARD_REGNO_NREGS (regno, GET_MODE (reg));
/* There must not be pseudos at this point. */
if (regno + nregs > FIRST_PSEUDO_REGISTER)
--- 126,132 ----
{
rtx reg = XEXP (note, 0);
unsigned int regno = REGNO (reg);
! int nregs = hard_regno_nregs[regno][GET_MODE (reg)];
/* There must not be pseudos at this point. */
if (regno + nregs > FIRST_PSEUDO_REGISTER)
*************** regrename_optimize (void)
*** 218,228 ****
{
int i;
! for (i = HARD_REGNO_NREGS (FRAME_POINTER_REGNUM, Pmode); i--;)
SET_HARD_REG_BIT (unavailable, FRAME_POINTER_REGNUM + i);
#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
! for (i = HARD_REGNO_NREGS (HARD_FRAME_POINTER_REGNUM, Pmode); i--;)
SET_HARD_REG_BIT (unavailable, HARD_FRAME_POINTER_REGNUM + i);
#endif
}
--- 218,228 ----
{
int i;
! for (i = hard_regno_nregs[FRAME_POINTER_REGNUM][Pmode]; i--;)
SET_HARD_REG_BIT (unavailable, FRAME_POINTER_REGNUM + i);
#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
! for (i = hard_regno_nregs[HARD_FRAME_POINTER_REGNUM][Pmode]; i--;)
SET_HARD_REG_BIT (unavailable, HARD_FRAME_POINTER_REGNUM + i);
#endif
}
*************** regrename_optimize (void)
*** 287,293 ****
have a closer look at each register still in there. */
for (new_reg = 0; new_reg < FIRST_PSEUDO_REGISTER; new_reg++)
{
! int nregs = HARD_REGNO_NREGS (new_reg, GET_MODE (*this->loc));
for (i = nregs - 1; i >= 0; --i)
if (TEST_HARD_REG_BIT (this_unavailable, new_reg + i)
--- 287,293 ----
have a closer look at each register still in there. */
for (new_reg = 0; new_reg < FIRST_PSEUDO_REGISTER; new_reg++)
{
! int nregs = hard_regno_nregs[new_reg][GET_MODE (*this->loc)];
for (i = nregs - 1; i >= 0; --i)
if (TEST_HARD_REG_BIT (this_unavailable, new_reg + i)
*************** scan_rtx_reg (rtx insn, rtx *loc, enum r
*** 391,397 ****
rtx x = *loc;
enum machine_mode mode = GET_MODE (x);
int this_regno = REGNO (x);
! int this_nregs = HARD_REGNO_NREGS (this_regno, mode);
if (action == mark_write)
{
--- 391,397 ----
rtx x = *loc;
enum machine_mode mode = GET_MODE (x);
int this_regno = REGNO (x);
! int this_nregs = hard_regno_nregs[this_regno][mode];
if (action == mark_write)
{
*************** scan_rtx_reg (rtx insn, rtx *loc, enum r
*** 431,437 ****
else
{
int regno = REGNO (*this->loc);
! int nregs = HARD_REGNO_NREGS (regno, GET_MODE (*this->loc));
int exact_match = (regno == this_regno && nregs == this_nregs);
if (regno + nregs <= this_regno
--- 431,437 ----
else
{
int regno = REGNO (*this->loc);
! int nregs = hard_regno_nregs[regno][GET_MODE (*this->loc)];
int exact_match = (regno == this_regno && nregs == this_nregs);
if (regno + nregs <= this_regno
*************** dump_def_use_chain (struct du_chain *cha
*** 973,979 ****
{
struct du_chain *this = chains;
int r = REGNO (*this->loc);
! int nregs = HARD_REGNO_NREGS (r, GET_MODE (*this->loc));
fprintf (rtl_dump_file, "Register %s (%d):", reg_names[r], nregs);
while (this)
{
--- 973,979 ----
{
struct du_chain *this = chains;
int r = REGNO (*this->loc);
! int nregs = hard_regno_nregs[r][GET_MODE (*this->loc)];
fprintf (rtl_dump_file, "Register %s (%d):", reg_names[r], nregs);
while (this)
{
*************** kill_value (rtx x, struct value_data *vd
*** 1084,1090 ****
if (REG_P (x))
{
unsigned int regno = REGNO (x);
! unsigned int n = HARD_REGNO_NREGS (regno, GET_MODE (x));
unsigned int i, j;
/* Kill the value we're told to kill. */
--- 1084,1090 ----
if (REG_P (x))
{
unsigned int regno = REGNO (x);
! unsigned int n = hard_regno_nregs[regno][GET_MODE (x)];
unsigned int i, j;
/* Kill the value we're told to kill. */
*************** kill_value (rtx x, struct value_data *vd
*** 1100,1106 ****
{
if (vd->e[j].mode == VOIDmode)
continue;
! n = HARD_REGNO_NREGS (j, vd->e[j].mode);
if (j + n > regno)
for (i = 0; i < n; ++i)
kill_value_regno (j + i, vd);
--- 1100,1106 ----
{
if (vd->e[j].mode == VOIDmode)
continue;
! n = hard_regno_nregs[j][vd->e[j].mode];
if (j + n > regno)
for (i = 0; i < n; ++i)
kill_value_regno (j + i, vd);
*************** set_value_regno (unsigned int regno, enu
*** 1118,1124 ****
vd->e[regno].mode = mode;
! nregs = HARD_REGNO_NREGS (regno, mode);
if (nregs > vd->max_value_regs)
vd->max_value_regs = nregs;
}
--- 1118,1124 ----
vd->e[regno].mode = mode;
! nregs = hard_regno_nregs[regno][mode];
if (nregs > vd->max_value_regs)
vd->max_value_regs = nregs;
}
*************** copy_value (rtx dest, rtx src, struct va
*** 1210,1217 ****
return;
/* If SRC and DEST overlap, don't record anything. */
! dn = HARD_REGNO_NREGS (dr, GET_MODE (dest));
! sn = HARD_REGNO_NREGS (sr, GET_MODE (dest));
if ((dr > sr && dr < sr + sn)
|| (sr > dr && sr < dr + dn))
return;
--- 1210,1217 ----
return;
/* If SRC and DEST overlap, don't record anything. */
! dn = hard_regno_nregs[dr][GET_MODE (dest)];
! sn = hard_regno_nregs[sr][GET_MODE (dest)];
if ((dr > sr && dr < sr + sn)
|| (sr > dr && sr < dr + dn))
return;
*************** copy_value (rtx dest, rtx src, struct va
*** 1237,1243 ****
We can't properly represent the latter case in our tables, so don't
record anything then. */
! else if (sn < (unsigned int) HARD_REGNO_NREGS (sr, vd->e[sr].mode)
&& (GET_MODE_SIZE (vd->e[sr].mode) > UNITS_PER_WORD
? WORDS_BIG_ENDIAN : BYTES_BIG_ENDIAN))
return;
--- 1237,1243 ----
We can't properly represent the latter case in our tables, so don't
record anything then. */
! else if (sn < (unsigned int) hard_regno_nregs[sr][vd->e[sr].mode]
&& (GET_MODE_SIZE (vd->e[sr].mode) > UNITS_PER_WORD
? WORDS_BIG_ENDIAN : BYTES_BIG_ENDIAN))
return;
*************** copy_value (rtx dest, rtx src, struct va
*** 1245,1251 ****
/* If SRC had been assigned a mode narrower than the copy, we can't
link DEST into the chain, because not all of the pieces of the
copy came from oldest_regno. */
! else if (sn > (unsigned int) HARD_REGNO_NREGS (sr, vd->e[sr].mode))
return;
/* Link DR at the end of the value chain used by SR. */
--- 1245,1251 ----
/* If SRC had been assigned a mode narrower than the copy, we can't
link DEST into the chain, because not all of the pieces of the
copy came from oldest_regno. */
! else if (sn > (unsigned int) hard_regno_nregs[sr][vd->e[sr].mode])
return;
/* Link DR at the end of the value chain used by SR. */
*************** maybe_mode_change (enum machine_mode ori
*** 1291,1298 ****
return gen_rtx_raw_REG (new_mode, regno);
else if (mode_change_ok (orig_mode, new_mode, regno))
{
! int copy_nregs = HARD_REGNO_NREGS (copy_regno, copy_mode);
! int use_nregs = HARD_REGNO_NREGS (copy_regno, new_mode);
int copy_offset
= GET_MODE_SIZE (copy_mode) / copy_nregs * (copy_nregs - use_nregs);
int offset
--- 1291,1298 ----
return gen_rtx_raw_REG (new_mode, regno);
else if (mode_change_ok (orig_mode, new_mode, regno))
{
! int copy_nregs = hard_regno_nregs[copy_regno][copy_mode];
! int use_nregs = hard_regno_nregs[copy_regno][new_mode];
int copy_offset
= GET_MODE_SIZE (copy_mode) / copy_nregs * (copy_nregs - use_nregs);
int offset
*************** find_oldest_value_reg (enum reg_class cl
*** 1330,1337 ****
Replacing r9 with r11 is invalid. */
if (mode != vd->e[regno].mode)
{
! if (HARD_REGNO_NREGS (regno, mode)
! > HARD_REGNO_NREGS (regno, vd->e[regno].mode))
return NULL_RTX;
}
--- 1330,1337 ----
Replacing r9 with r11 is invalid. */
if (mode != vd->e[regno].mode)
{
! if (hard_regno_nregs[regno][mode]
! > hard_regno_nregs[regno][vd->e[regno].mode])
return NULL_RTX;
}
*************** find_oldest_value_reg (enum reg_class cl
*** 1341,1347 ****
rtx new;
unsigned int last;
! for (last = i; last < i + HARD_REGNO_NREGS (i, mode); last++)
if (!TEST_HARD_REG_BIT (reg_class_contents[class], last))
return NULL_RTX;
--- 1341,1347 ----
rtx new;
unsigned int last;
! for (last = i; last < i + hard_regno_nregs[i][mode]; last++)
if (!TEST_HARD_REG_BIT (reg_class_contents[class], last))
return NULL_RTX;
*************** copyprop_hardreg_forward_1 (basic_block
*** 1600,1607 ****
set it in, make sure that the replacement is valid. */
if (mode != vd->e[regno].mode)
{
! if (HARD_REGNO_NREGS (regno, mode)
! > HARD_REGNO_NREGS (regno, vd->e[regno].mode))
goto no_move_special_case;
}
--- 1600,1607 ----
set it in, make sure that the replacement is valid. */
if (mode != vd->e[regno].mode)
{
! if (hard_regno_nregs[regno][mode]
! > hard_regno_nregs[regno][vd->e[regno].mode])
goto no_move_special_case;
}
Index: regs.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/regs.h,v
retrieving revision 1.31
diff -c -3 -p -r1.31 regs.h
*** regs.h 6 Dec 2003 12:22:31 -0000 1.31
--- regs.h 1 Feb 2004 23:36:16 -0000
*************** extern int caller_save_needed;
*** 224,226 ****
--- 224,229 ----
/* Allocate reg_n_info tables */
extern void allocate_reg_info (size_t, int, int);
+
+ /* Specify number of hard registers given machine mode occupy. */
+ extern unsigned char hard_regno_nregs[FIRST_PSEUDO_REGISTER][MAX_MACHINE_MODE];
Index: reload.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/reload.c,v
retrieving revision 1.233
diff -c -3 -p -r1.233 reload.c
*** reload.c 30 Jan 2004 20:42:24 -0000 1.233
--- reload.c 1 Feb 2004 23:36:16 -0000
*************** reload_inner_reg_of_subreg (rtx x, enum
*** 818,824 ****
&& output
&& GET_MODE_SIZE (GET_MODE (inner)) > UNITS_PER_WORD
&& ((GET_MODE_SIZE (GET_MODE (inner)) / UNITS_PER_WORD)
! != (int) HARD_REGNO_NREGS (REGNO (inner), GET_MODE (inner))));
}
/* Return nonzero if IN can be reloaded into REGNO with mode MODE without
--- 818,824 ----
&& output
&& GET_MODE_SIZE (GET_MODE (inner)) > UNITS_PER_WORD
&& ((GET_MODE_SIZE (GET_MODE (inner)) / UNITS_PER_WORD)
! != (int) hard_regno_nregs[REGNO (inner)][GET_MODE (inner)]));
}
/* Return nonzero if IN can be reloaded into REGNO with mode MODE without
*************** push_reload (rtx in, rtx out, rtx *inloc
*** 1038,1045 ****
> UNITS_PER_WORD)
&& ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
/ UNITS_PER_WORD)
! != (int) HARD_REGNO_NREGS (REGNO (SUBREG_REG (in)),
! GET_MODE (SUBREG_REG (in)))))
|| ! HARD_REGNO_MODE_OK (subreg_regno (in), inmode)))
#ifdef SECONDARY_INPUT_RELOAD_CLASS
|| (SECONDARY_INPUT_RELOAD_CLASS (class, inmode, in) != NO_REGS
--- 1038,1045 ----
> UNITS_PER_WORD)
&& ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
/ UNITS_PER_WORD)
! != (int) hard_regno_nregs[REGNO (SUBREG_REG (in))]
! [GET_MODE (SUBREG_REG (in))]))
|| ! HARD_REGNO_MODE_OK (subreg_regno (in), inmode)))
#ifdef SECONDARY_INPUT_RELOAD_CLASS
|| (SECONDARY_INPUT_RELOAD_CLASS (class, inmode, in) != NO_REGS
*************** push_reload (rtx in, rtx out, rtx *inloc
*** 1135,1142 ****
> UNITS_PER_WORD)
&& ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
/ UNITS_PER_WORD)
! != (int) HARD_REGNO_NREGS (REGNO (SUBREG_REG (out)),
! GET_MODE (SUBREG_REG (out)))))
|| ! HARD_REGNO_MODE_OK (subreg_regno (out), outmode)))
#ifdef SECONDARY_OUTPUT_RELOAD_CLASS
|| (SECONDARY_OUTPUT_RELOAD_CLASS (class, outmode, out) != NO_REGS
--- 1135,1142 ----
> UNITS_PER_WORD)
&& ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
/ UNITS_PER_WORD)
! != (int) hard_regno_nregs[REGNO (SUBREG_REG (out))]
! [GET_MODE (SUBREG_REG (out))]))
|| ! HARD_REGNO_MODE_OK (subreg_regno (out), outmode)))
#ifdef SECONDARY_OUTPUT_RELOAD_CLASS
|| (SECONDARY_OUTPUT_RELOAD_CLASS (class, outmode, out) != NO_REGS
*************** push_reload (rtx in, rtx out, rtx *inloc
*** 1262,1268 ****
if (HARD_REGNO_MODE_OK (i, mode)
&& TEST_HARD_REG_BIT (reg_class_contents[(int) class], i))
{
! int nregs = HARD_REGNO_NREGS (i, mode);
int j;
for (j = 1; j < nregs; j++)
--- 1262,1268 ----
if (HARD_REGNO_MODE_OK (i, mode)
&& TEST_HARD_REG_BIT (reg_class_contents[(int) class], i))
{
! int nregs = hard_regno_nregs[i][mode];
int j;
for (j = 1; j < nregs; j++)
*************** push_reload (rtx in, rtx out, rtx *inloc
*** 1520,1527 ****
&& reg_mentioned_p (XEXP (note, 0), in)
&& ! refers_to_regno_for_reload_p (regno,
(regno
! + HARD_REGNO_NREGS (regno,
! rel_mode)),
PATTERN (this_insn), inloc)
/* If this is also an output reload, IN cannot be used as
the reload register if it is set in this insn unless IN
--- 1520,1527 ----
&& reg_mentioned_p (XEXP (note, 0), in)
&& ! refers_to_regno_for_reload_p (regno,
(regno
! + hard_regno_nregs[regno]
! [rel_mode]),
PATTERN (this_insn), inloc)
/* If this is also an output reload, IN cannot be used as
the reload register if it is set in this insn unless IN
*************** push_reload (rtx in, rtx out, rtx *inloc
*** 1529,1536 ****
&& (out == 0 || in == out
|| ! hard_reg_set_here_p (regno,
(regno
! + HARD_REGNO_NREGS (regno,
! rel_mode)),
PATTERN (this_insn)))
/* ??? Why is this code so different from the previous?
Is there any simple coherent way to describe the two together?
--- 1529,1536 ----
&& (out == 0 || in == out
|| ! hard_reg_set_here_p (regno,
(regno
! + hard_regno_nregs[regno]
! [rel_mode]),
PATTERN (this_insn)))
/* ??? Why is this code so different from the previous?
Is there any simple coherent way to describe the two together?
*************** push_reload (rtx in, rtx out, rtx *inloc
*** 1548,1555 ****
&& HARD_REGNO_MODE_OK (regno, outmode))
{
unsigned int offs;
! unsigned int nregs = MAX (HARD_REGNO_NREGS (regno, inmode),
! HARD_REGNO_NREGS (regno, outmode));
for (offs = 0; offs < nregs; offs++)
if (fixed_regs[regno + offs]
--- 1548,1555 ----
&& HARD_REGNO_MODE_OK (regno, outmode))
{
unsigned int offs;
! unsigned int nregs = MAX (hard_regno_nregs[regno][inmode],
! hard_regno_nregs[regno][outmode]);
for (offs = 0; offs < nregs; offs++)
if (fixed_regs[regno + offs]
*************** push_reload (rtx in, rtx out, rtx *inloc
*** 1559,1565 ****
if (offs == nregs
&& (! (refers_to_regno_for_reload_p
! (regno, (regno + HARD_REGNO_NREGS (regno, inmode)),
in, (rtx *)0))
|| can_reload_into (in, regno, inmode)))
{
--- 1559,1565 ----
if (offs == nregs
&& (! (refers_to_regno_for_reload_p
! (regno, (regno + hard_regno_nregs[regno][inmode]),
in, (rtx *)0))
|| can_reload_into (in, regno, inmode)))
{
*************** combine_reloads (void)
*** 1830,1837 ****
&& HARD_REGNO_MODE_OK (REGNO (XEXP (note, 0)), rld[output_reload].outmode)
&& TEST_HARD_REG_BIT (reg_class_contents[(int) rld[output_reload].class],
REGNO (XEXP (note, 0)))
! && (HARD_REGNO_NREGS (REGNO (XEXP (note, 0)), rld[output_reload].outmode)
! <= HARD_REGNO_NREGS (REGNO (XEXP (note, 0)), GET_MODE (XEXP (note, 0))))
/* Ensure that a secondary or tertiary reload for this output
won't want this register. */
&& ((secondary_out = rld[output_reload].secondary_out_reload) == -1
--- 1830,1837 ----
&& HARD_REGNO_MODE_OK (REGNO (XEXP (note, 0)), rld[output_reload].outmode)
&& TEST_HARD_REG_BIT (reg_class_contents[(int) rld[output_reload].class],
REGNO (XEXP (note, 0)))
! && (hard_regno_nregs[REGNO (XEXP (note, 0))][rld[output_reload].outmode]
! <= hard_regno_nregs[REGNO (XEXP (note, 0))][GET_MODE (XEXP (note, 0))])
/* Ensure that a secondary or tertiary reload for this output
won't want this register. */
&& ((secondary_out = rld[output_reload].secondary_out_reload) == -1
*************** find_dummy_reload (rtx real_in, rtx real
*** 1923,1929 ****
&& REGNO (out) < FIRST_PSEUDO_REGISTER)
{
unsigned int regno = REGNO (out) + out_offset;
! unsigned int nwords = HARD_REGNO_NREGS (regno, outmode);
rtx saved_rtx;
/* When we consider whether the insn uses OUT,
--- 1923,1929 ----
&& REGNO (out) < FIRST_PSEUDO_REGISTER)
{
unsigned int regno = REGNO (out) + out_offset;
! unsigned int nwords = hard_regno_nregs[regno][outmode];
rtx saved_rtx;
/* When we consider whether the insn uses OUT,
*************** find_dummy_reload (rtx real_in, rtx real
*** 1984,1990 ****
? GET_MODE (out) : outmode)))
{
unsigned int regno = REGNO (in) + in_offset;
! unsigned int nwords = HARD_REGNO_NREGS (regno, inmode);
if (! refers_to_regno_for_reload_p (regno, regno + nwords, out, (rtx*) 0)
&& ! hard_reg_set_here_p (regno, regno + nwords,
--- 1984,1990 ----
? GET_MODE (out) : outmode)))
{
unsigned int regno = REGNO (in) + in_offset;
! unsigned int nwords = hard_regno_nregs[regno][inmode];
if (! refers_to_regno_for_reload_p (regno, regno + nwords, out, (rtx*) 0)
&& ! hard_reg_set_here_p (regno, regno + nwords,
*************** hard_reg_set_here_p (unsigned int beg_re
*** 2056,2062 ****
/* See if this reg overlaps range under consideration. */
if (r < end_regno
! && r + HARD_REGNO_NREGS (r, GET_MODE (op0)) > beg_regno)
return 1;
}
}
--- 2056,2062 ----
/* See if this reg overlaps range under consideration. */
if (r < end_regno
! && r + hard_regno_nregs[r][GET_MODE (op0)] > beg_regno)
return 1;
}
}
*************** operands_match_p (rtx x, rtx y)
*** 2148,2157 ****
(reg:SI 1) will be considered the same register. */
if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD
&& i < FIRST_PSEUDO_REGISTER)
! i += HARD_REGNO_NREGS (i, GET_MODE (x)) - 1;
if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (y)) > UNITS_PER_WORD
&& j < FIRST_PSEUDO_REGISTER)
! j += HARD_REGNO_NREGS (j, GET_MODE (y)) - 1;
return i == j;
}
--- 2148,2157 ----
(reg:SI 1) will be considered the same register. */
if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD
&& i < FIRST_PSEUDO_REGISTER)
! i += hard_regno_nregs[i][GET_MODE (x)] - 1;
if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (y)) > UNITS_PER_WORD
&& j < FIRST_PSEUDO_REGISTER)
! j += hard_regno_nregs[j][GET_MODE (y)] - 1;
return i == j;
}
*************** decompose (rtx x)
*** 2363,2369 ****
}
else
/* A hard reg. */
! val.end = val.start + HARD_REGNO_NREGS (val.start, GET_MODE (x));
}
else if (GET_CODE (x) == SUBREG)
{
--- 2363,2369 ----
}
else
/* A hard reg. */
! val.end = val.start + hard_regno_nregs[val.start][GET_MODE (x)];
}
else if (GET_CODE (x) == SUBREG)
{
*************** decompose (rtx x)
*** 2376,2382 ****
return decompose (SUBREG_REG (x));
else
/* A hard reg. */
! val.end = val.start + HARD_REGNO_NREGS (val.start, GET_MODE (x));
}
else if (CONSTANT_P (x)
/* This hasn't been assigned yet, so it can't conflict yet. */
--- 2376,2382 ----
return decompose (SUBREG_REG (x));
else
/* A hard reg. */
! val.end = val.start + hard_regno_nregs[val.start][GET_MODE (x)];
}
else if (CONSTANT_P (x)
/* This hasn't been assigned yet, so it can't conflict yet. */
*************** find_reloads (rtx insn, int replace, int
*** 4366,4372 ****
&& TEST_HARD_REG_BIT (reg_class_contents[rld[i].class], regno)
&& HARD_REGNO_MODE_OK (regno, rld[i].mode))
{
! int nr = HARD_REGNO_NREGS (regno, rld[i].mode);
int ok = 1, nri;
for (nri = 1; nri < nr; nri ++)
--- 4366,4372 ----
&& TEST_HARD_REG_BIT (reg_class_contents[rld[i].class], regno)
&& HARD_REGNO_MODE_OK (regno, rld[i].mode))
{
! int nr = hard_regno_nregs[regno][rld[i].mode];
int ok = 1, nri;
for (nri = 1; nri < nr; nri ++)
*************** refers_to_regno_for_reload_p (unsigned i
*** 6177,6183 ****
return (endregno > r
&& regno < r + (r < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (r, GET_MODE (x))
: 1));
case SUBREG:
--- 6177,6183 ----
return (endregno > r
&& regno < r + (r < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[r][GET_MODE (x)]
: 1));
case SUBREG:
*************** refers_to_regno_for_reload_p (unsigned i
*** 6189,6195 ****
unsigned int inner_regno = subreg_regno (x);
unsigned int inner_endregno
= inner_regno + (inner_regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
return endregno > inner_regno && regno < inner_endregno;
}
--- 6189,6195 ----
unsigned int inner_regno = subreg_regno (x);
unsigned int inner_endregno
= inner_regno + (inner_regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[regno][GET_MODE (x)] : 1);
return endregno > inner_regno && regno < inner_endregno;
}
*************** reg_overlap_mentioned_for_reload_p (rtx
*** 6328,6334 ****
abort ();
endregno = regno + (regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
return refers_to_regno_for_reload_p (regno, endregno, in, (rtx*) 0);
}
--- 6328,6334 ----
abort ();
endregno = regno + (regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[regno][GET_MODE (x)] : 1);
return refers_to_regno_for_reload_p (regno, endregno, in, (rtx*) 0);
}
*************** find_equiv_reg (rtx goal, rtx insn, enum
*** 6539,6545 ****
{
int i;
! for (i = HARD_REGNO_NREGS (valueno, mode) - 1; i >= 0; i--)
if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
valueno + i))
break;
--- 6539,6545 ----
{
int i;
! for (i = hard_regno_nregs[valueno][mode] - 1; i >= 0; i--)
if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
valueno + i))
break;
*************** find_equiv_reg (rtx goal, rtx insn, enum
*** 6581,6599 ****
if (goal_mem && value == SET_DEST (single_set (where))
&& refers_to_regno_for_reload_p (valueno,
(valueno
! + HARD_REGNO_NREGS (valueno, mode)),
goal, (rtx*) 0))
return 0;
/* Reject registers that overlap GOAL. */
if (!goal_mem && !goal_const
! && regno + (int) HARD_REGNO_NREGS (regno, mode) > valueno
! && regno < valueno + (int) HARD_REGNO_NREGS (valueno, mode))
return 0;
! nregs = HARD_REGNO_NREGS (regno, mode);
! valuenregs = HARD_REGNO_NREGS (valueno, mode);
/* Reject VALUE if it is one of the regs reserved for reloads.
Reload1 knows how to reuse them anyway, and it would get
--- 6581,6602 ----
if (goal_mem && value == SET_DEST (single_set (where))
&& refers_to_regno_for_reload_p (valueno,
(valueno
! + hard_regno_nregs[valueno][mode]),
goal, (rtx*) 0))
return 0;
/* Reject registers that overlap GOAL. */
if (!goal_mem && !goal_const
! && regno + (int) hard_regno_nregs[regno][mode] > valueno
! && regno < valueno + (int) hard_regno_nregs[valueno][mode])
return 0;
! if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER)
! nregs = hard_regno_nregs[regno][mode];
! else
! nregs = 1;
! valuenregs = hard_regno_nregs[valueno][mode];
/* Reject VALUE if it is one of the regs reserved for reloads.
Reload1 knows how to reuse them anyway, and it would get
*************** find_equiv_reg (rtx goal, rtx insn, enum
*** 6619,6626 ****
if (rld[i].reg_rtx != 0 && rld[i].in)
{
int regno1 = REGNO (rld[i].reg_rtx);
! int nregs1 = HARD_REGNO_NREGS (regno1,
! GET_MODE (rld[i].reg_rtx));
if (regno1 < valueno + valuenregs
&& regno1 + nregs1 > valueno)
return 0;
--- 6622,6629 ----
if (rld[i].reg_rtx != 0 && rld[i].in)
{
int regno1 = REGNO (rld[i].reg_rtx);
! int nregs1 = hard_regno_nregs[regno1]
! [GET_MODE (rld[i].reg_rtx)];
if (regno1 < valueno + valuenregs
&& regno1 + nregs1 > valueno)
return 0;
*************** find_equiv_reg (rtx goal, rtx insn, enum
*** 6694,6700 ****
int xregno = REGNO (dest);
int xnregs;
if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
! xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest));
else
xnregs = 1;
if (xregno < regno + nregs && xregno + xnregs > regno)
--- 6697,6703 ----
int xregno = REGNO (dest);
int xnregs;
if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
! xnregs = hard_regno_nregs[xregno][GET_MODE (dest)];
else
xnregs = 1;
if (xregno < regno + nregs && xregno + xnregs > regno)
*************** find_equiv_reg (rtx goal, rtx insn, enum
*** 6738,6744 ****
int xregno = REGNO (dest);
int xnregs;
if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
! xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest));
else
xnregs = 1;
if (xregno < regno + nregs
--- 6741,6747 ----
int xregno = REGNO (dest);
int xnregs;
if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
! xnregs = hard_regno_nregs[xregno][GET_MODE (dest)];
else
xnregs = 1;
if (xregno < regno + nregs
*************** find_equiv_reg (rtx goal, rtx insn, enum
*** 6783,6789 ****
{
int xregno = REGNO (dest);
int xnregs
! = HARD_REGNO_NREGS (xregno, GET_MODE (dest));
if (xregno < regno + nregs
&& xregno + xnregs > regno)
--- 6786,6792 ----
{
int xregno = REGNO (dest);
int xnregs
! = hard_regno_nregs[xregno][GET_MODE (dest)];
if (xregno < regno + nregs
&& xregno + xnregs > regno)
*************** int
*** 6898,6904 ****
regno_clobbered_p (unsigned int regno, rtx insn, enum machine_mode mode,
int sets)
{
! unsigned int nregs = HARD_REGNO_NREGS (regno, mode);
unsigned int endregno = regno + nregs;
if ((GET_CODE (PATTERN (insn)) == CLOBBER
--- 6901,6907 ----
regno_clobbered_p (unsigned int regno, rtx insn, enum machine_mode mode,
int sets)
{
! unsigned int nregs = hard_regno_nregs[regno][mode];
unsigned int endregno = regno + nregs;
if ((GET_CODE (PATTERN (insn)) == CLOBBER
*************** reload_adjust_reg_for_mode (rtx reloadre
*** 6944,6951 ****
regno = REGNO (reloadreg);
if (WORDS_BIG_ENDIAN)
! regno += HARD_REGNO_NREGS (regno, GET_MODE (reloadreg))
! - HARD_REGNO_NREGS (regno, mode);
return gen_rtx_REG (mode, regno);
}
--- 6947,6954 ----
regno = REGNO (reloadreg);
if (WORDS_BIG_ENDIAN)
! regno += (int) hard_regno_nregs[regno][GET_MODE (reloadreg)]
! - (int) hard_regno_nregs[regno][mode];
return gen_rtx_REG (mode, regno);
}
Index: reload1.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/reload1.c,v
retrieving revision 1.423
diff -c -3 -p -r1.423 reload1.c
*** reload1.c 31 Jan 2004 17:47:43 -0000 1.423
--- reload1.c 1 Feb 2004 23:36:17 -0000
*************** compute_use_by_pseudos (HARD_REG_SET *to
*** 534,540 ****
}
else
{
! nregs = HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (regno));
while (nregs-- > 0)
SET_HARD_REG_BIT (*to, r + nregs);
}
--- 534,540 ----
}
else
{
! nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (regno)];
while (nregs-- > 0)
SET_HARD_REG_BIT (*to, r + nregs);
}
*************** count_pseudo (int reg)
*** 1572,1578 ****
spill_add_cost[r] += freq;
! nregs = HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (reg));
while (nregs-- > 0)
spill_cost[r + nregs] += freq;
}
--- 1572,1578 ----
spill_add_cost[r] += freq;
! nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (reg)];
while (nregs-- > 0)
spill_cost[r + nregs] += freq;
}
*************** static void
*** 1634,1640 ****
count_spilled_pseudo (int spilled, int spilled_nregs, int reg)
{
int r = reg_renumber[reg];
! int nregs = HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (reg));
if (REGNO_REG_SET_P (&spilled_pseudos, reg)
|| spilled + spilled_nregs <= r || r + nregs <= spilled)
--- 1634,1640 ----
count_spilled_pseudo (int spilled, int spilled_nregs, int reg)
{
int r = reg_renumber[reg];
! int nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (reg)];
if (REGNO_REG_SET_P (&spilled_pseudos, reg)
|| spilled + spilled_nregs <= r || r + nregs <= spilled)
*************** find_reg (struct insn_chain *chain, int
*** 1685,1691 ****
{
int this_cost = spill_cost[regno];
int ok = 1;
! unsigned int this_nregs = HARD_REGNO_NREGS (regno, rl->mode);
for (j = 1; j < this_nregs; j++)
{
--- 1685,1691 ----
{
int this_cost = spill_cost[regno];
int ok = 1;
! unsigned int this_nregs = hard_regno_nregs[regno][rl->mode];
for (j = 1; j < this_nregs; j++)
{
*************** find_reg (struct insn_chain *chain, int
*** 1724,1730 ****
if (rtl_dump_file)
fprintf (rtl_dump_file, "Using reg %d for reload %d\n", best_reg, rnum);
! rl->nregs = HARD_REGNO_NREGS (best_reg, rl->mode);
rl->regno = best_reg;
EXECUTE_IF_SET_IN_REG_SET
--- 1724,1730 ----
if (rtl_dump_file)
fprintf (rtl_dump_file, "Using reg %d for reload %d\n", best_reg, rnum);
! rl->nregs = hard_regno_nregs[best_reg][rl->mode];
rl->regno = best_reg;
EXECUTE_IF_SET_IN_REG_SET
*************** find_reload_regs (struct insn_chain *cha
*** 1772,1778 ****
int regno = REGNO (chain->rld[i].reg_rtx);
chain->rld[i].regno = regno;
chain->rld[i].nregs
! = HARD_REGNO_NREGS (regno, GET_MODE (chain->rld[i].reg_rtx));
}
else
chain->rld[i].regno = -1;
--- 1772,1778 ----
int regno = REGNO (chain->rld[i].reg_rtx);
chain->rld[i].regno = regno;
chain->rld[i].nregs
! = hard_regno_nregs[regno][GET_MODE (chain->rld[i].reg_rtx)];
}
else
chain->rld[i].regno = -1;
*************** mark_home_live (int regno)
*** 2062,2068 ****
i = reg_renumber[regno];
if (i < 0)
return;
! lim = i + HARD_REGNO_NREGS (i, PSEUDO_REGNO_MODE (regno));
while (i < lim)
regs_ever_live[i++] = 1;
}
--- 2062,2068 ----
i = reg_renumber[regno];
if (i < 0)
return;
! lim = i + hard_regno_nregs[i][PSEUDO_REGNO_MODE (regno)];
while (i < lim)
regs_ever_live[i++] = 1;
}
*************** spill_hard_reg (unsigned int regno, int
*** 3516,3523 ****
if (reg_renumber[i] >= 0
&& (unsigned int) reg_renumber[i] <= regno
&& ((unsigned int) reg_renumber[i]
! + HARD_REGNO_NREGS ((unsigned int) reg_renumber[i],
! PSEUDO_REGNO_MODE (i))
> regno))
SET_REGNO_REG_SET (&spilled_pseudos, i);
}
--- 3516,3523 ----
if (reg_renumber[i] >= 0
&& (unsigned int) reg_renumber[i] <= regno
&& ((unsigned int) reg_renumber[i]
! + hard_regno_nregs[(unsigned int) reg_renumber[i]]
! [PSEUDO_REGNO_MODE (i)]
> regno))
SET_REGNO_REG_SET (&spilled_pseudos, i);
}
*************** forget_old_reloads_1 (rtx x, rtx ignored
*** 4059,4065 ****
{
unsigned int i;
! nr = HARD_REGNO_NREGS (regno, GET_MODE (x));
/* Storing into a spilled-reg invalidates its contents.
This can happen if a block-local pseudo is allocated to that reg
and it wasn't spilled because this block's total need is 0.
--- 4059,4065 ----
{
unsigned int i;
! nr = hard_regno_nregs[regno][GET_MODE (x)];
/* Storing into a spilled-reg invalidates its contents.
This can happen if a block-local pseudo is allocated to that reg
and it wasn't spilled because this block's total need is 0.
*************** static void
*** 4133,4139 ****
mark_reload_reg_in_use (unsigned int regno, int opnum, enum reload_type type,
enum machine_mode mode)
{
! unsigned int nregs = HARD_REGNO_NREGS (regno, mode);
unsigned int i;
for (i = regno; i < nregs + regno; i++)
--- 4133,4139 ----
mark_reload_reg_in_use (unsigned int regno, int opnum, enum reload_type type,
enum machine_mode mode)
{
! unsigned int nregs = hard_regno_nregs[regno][mode];
unsigned int i;
for (i = regno; i < nregs + regno; i++)
*************** static void
*** 4195,4201 ****
clear_reload_reg_in_use (unsigned int regno, int opnum,
enum reload_type type, enum machine_mode mode)
{
! unsigned int nregs = HARD_REGNO_NREGS (regno, mode);
unsigned int start_regno, end_regno, r;
int i;
/* A complication is that for some reload types, inheritance might
--- 4195,4201 ----
clear_reload_reg_in_use (unsigned int regno, int opnum,
enum reload_type type, enum machine_mode mode)
{
! unsigned int nregs = hard_regno_nregs[regno][mode];
unsigned int start_regno, end_regno, r;
int i;
/* A complication is that for some reload types, inheritance might
*************** clear_reload_reg_in_use (unsigned int re
*** 4279,4285 ****
unsigned int conflict_start = true_regnum (rld[i].reg_rtx);
unsigned int conflict_end
= (conflict_start
! + HARD_REGNO_NREGS (conflict_start, rld[i].mode));
/* If there is an overlap with the first to-be-freed register,
adjust the interval start. */
--- 4279,4285 ----
unsigned int conflict_start = true_regnum (rld[i].reg_rtx);
unsigned int conflict_end
= (conflict_start
! + hard_regno_nregs[conflict_start][rld[i].mode]);
/* If there is an overlap with the first to-be-freed register,
adjust the interval start. */
*************** reload_reg_free_for_value_p (int start_r
*** 4774,4780 ****
rtx reg = rld[i].reg_rtx;
if (reg && GET_CODE (reg) == REG
&& ((unsigned) regno - true_regnum (reg)
! <= HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg)) - (unsigned) 1)
&& i != reloadnum)
{
rtx other_input = rld[i].in;
--- 4774,4780 ----
rtx reg = rld[i].reg_rtx;
if (reg && GET_CODE (reg) == REG
&& ((unsigned) regno - true_regnum (reg)
! <= hard_regno_nregs[REGNO (reg)][GET_MODE (reg)] - (unsigned) 1)
&& i != reloadnum)
{
rtx other_input = rld[i].in;
*************** free_for_value_p (int regno, enum machin
*** 4930,4936 ****
enum reload_type type, rtx value, rtx out, int reloadnum,
int ignore_address_reloads)
{
! int nregs = HARD_REGNO_NREGS (regno, mode);
while (nregs-- > 0)
if (! reload_reg_free_for_value_p (regno, regno + nregs, opnum, type,
value, out, reloadnum,
--- 4930,4936 ----
enum reload_type type, rtx value, rtx out, int reloadnum,
int ignore_address_reloads)
{
! int nregs = hard_regno_nregs[regno][mode];
while (nregs-- > 0)
if (! reload_reg_free_for_value_p (regno, regno + nregs, opnum, type,
value, out, reloadnum,
*************** allocate_reload_reg (struct insn_chain *
*** 5103,5109 ****
&& ! TEST_HARD_REG_BIT (reload_reg_used_for_inherit,
regnum))))
{
! int nr = HARD_REGNO_NREGS (regnum, rld[r].mode);
/* Avoid the problem where spilling a GENERAL_OR_FP_REG
(on 68000) got us two FP regs. If NR is 1,
we would reject both of them. */
--- 5103,5109 ----
&& ! TEST_HARD_REG_BIT (reload_reg_used_for_inherit,
regnum))))
{
! int nr = hard_regno_nregs[regnum][rld[r].mode];
/* Avoid the problem where spilling a GENERAL_OR_FP_REG
(on 68000) got us two FP regs. If NR is 1,
we would reject both of them. */
*************** choose_reload_regs (struct insn_chain *c
*** 5436,5442 ****
{
/* If a group is needed, verify that all the subsequent
registers still have their values intact. */
! int nr = HARD_REGNO_NREGS (i, rld[r].mode);
int k;
for (k = 1; k < nr; k++)
--- 5436,5442 ----
{
/* If a group is needed, verify that all the subsequent
registers still have their values intact. */
! int nr = hard_regno_nregs[i][rld[r].mode];
int k;
for (k = 1; k < nr; k++)
*************** choose_reload_regs (struct insn_chain *c
*** 5669,5675 ****
&& (regno != HARD_FRAME_POINTER_REGNUM
|| !frame_pointer_needed))
{
! int nr = HARD_REGNO_NREGS (regno, rld[r].mode);
int k;
rld[r].reg_rtx = equiv;
reload_inherited[r] = 1;
--- 5669,5675 ----
&& (regno != HARD_FRAME_POINTER_REGNUM
|| !frame_pointer_needed))
{
! int nr = hard_regno_nregs[regno][rld[r].mode];
int k;
rld[r].reg_rtx = equiv;
reload_inherited[r] = 1;
*************** choose_reload_regs (struct insn_chain *c
*** 5884,5897 ****
int nr = 1;
if (nregno < FIRST_PSEUDO_REGISTER)
! nr = HARD_REGNO_NREGS (nregno, rld[r].mode);
while (--nr >= 0)
reg_has_output_reload[nregno + nr] = 1;
if (i >= 0)
{
! nr = HARD_REGNO_NREGS (i, rld[r].mode);
while (--nr >= 0)
SET_HARD_REG_BIT (reg_is_output_reload, i + nr);
}
--- 5884,5897 ----
int nr = 1;
if (nregno < FIRST_PSEUDO_REGISTER)
! nr = hard_regno_nregs[nregno][rld[r].mode];
while (--nr >= 0)
reg_has_output_reload[nregno + nr] = 1;
if (i >= 0)
{
! nr = hard_regno_nregs[i][rld[r].mode];
while (--nr >= 0)
SET_HARD_REG_BIT (reg_is_output_reload, i + nr);
}
*************** emit_reload_insns (struct insn_chain *ch
*** 7032,7038 ****
if (i >= 0 && rld[r].reg_rtx != 0)
{
! int nr = HARD_REGNO_NREGS (i, GET_MODE (rld[r].reg_rtx));
int k;
int part_reaches_end = 0;
int all_reaches_end = 1;
--- 7032,7038 ----
if (i >= 0 && rld[r].reg_rtx != 0)
{
! int nr = hard_regno_nregs[i][GET_MODE (rld[r].reg_rtx)];
int k;
int part_reaches_end = 0;
int all_reaches_end = 1;
*************** emit_reload_insns (struct insn_chain *ch
*** 7076,7083 ****
/* AUTO_INC */ : XEXP (rld[r].in_reg, 0));
int nregno = REGNO (out);
int nnr = (nregno >= FIRST_PSEUDO_REGISTER ? 1
! : HARD_REGNO_NREGS (nregno,
! GET_MODE (rld[r].reg_rtx)));
spill_reg_store[i] = new_spill_reg_store[i];
spill_reg_stored_to[i] = out;
--- 7076,7083 ----
/* AUTO_INC */ : XEXP (rld[r].in_reg, 0));
int nregno = REGNO (out);
int nnr = (nregno >= FIRST_PSEUDO_REGISTER ? 1
! : hard_regno_nregs[nregno]
! [GET_MODE (rld[r].reg_rtx)]);
spill_reg_store[i] = new_spill_reg_store[i];
spill_reg_stored_to[i] = out;
*************** emit_reload_insns (struct insn_chain *ch
*** 7137,7144 ****
nregno = REGNO (in);
nnr = (nregno >= FIRST_PSEUDO_REGISTER ? 1
! : HARD_REGNO_NREGS (nregno,
! GET_MODE (rld[r].reg_rtx)));
reg_last_reload_reg[nregno] = rld[r].reg_rtx;
--- 7137,7144 ----
nregno = REGNO (in);
nnr = (nregno >= FIRST_PSEUDO_REGISTER ? 1
! : hard_regno_nregs[nregno]
! [GET_MODE (rld[r].reg_rtx)]);
reg_last_reload_reg[nregno] = rld[r].reg_rtx;
*************** emit_reload_insns (struct insn_chain *ch
*** 7238,7244 ****
&& REGNO (src_reg) < FIRST_PSEUDO_REGISTER)
{
int src_regno = REGNO (src_reg);
! int nr = HARD_REGNO_NREGS (src_regno, rld[r].mode);
/* The place where to find a death note varies with
PRESERVE_DEATH_INFO_REGNO_P . The condition is not
necessarily checked exactly in the code that moves
--- 7238,7244 ----
&& REGNO (src_reg) < FIRST_PSEUDO_REGISTER)
{
int src_regno = REGNO (src_reg);
! int nr = hard_regno_nregs[src_regno][rld[r].mode];
/* The place where to find a death note varies with
PRESERVE_DEATH_INFO_REGNO_P . The condition is not
necessarily checked exactly in the code that moves
*************** emit_reload_insns (struct insn_chain *ch
*** 7269,7275 ****
}
else
{
! int num_regs = HARD_REGNO_NREGS (nregno, GET_MODE (rld[r].out));
while (num_regs-- > 0)
reg_last_reload_reg[nregno + num_regs] = 0;
--- 7269,7275 ----
}
else
{
! int num_regs = hard_regno_nregs[nregno][GET_MODE (rld[r].out)];
while (num_regs-- > 0)
reg_last_reload_reg[nregno + num_regs] = 0;
*************** delete_output_reload (rtx insn, int j, i
*** 7594,7600 ****
}
/* We will be deleting the insn. Remove the spill reg information. */
! for (k = HARD_REGNO_NREGS (last_reload_reg, GET_MODE (reg)); k-- > 0; )
{
spill_reg_store[last_reload_reg + k] = 0;
spill_reg_stored_to[last_reload_reg + k] = 0;
--- 7594,7600 ----
}
/* We will be deleting the insn. Remove the spill reg information. */
! for (k = hard_regno_nregs[last_reload_reg][GET_MODE (reg)]; k-- > 0; )
{
spill_reg_store[last_reload_reg + k] = 0;
spill_reg_stored_to[last_reload_reg + k] = 0;
Index: resource.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/resource.c,v
retrieving revision 1.66
diff -c -3 -p -r1.66 resource.c
*** resource.c 16 Dec 2003 00:06:34 -0000 1.66
--- resource.c 1 Feb 2004 23:36:17 -0000
*************** update_live_status (rtx dest, rtx x, voi
*** 104,110 ****
else
first_regno = REGNO (dest);
! last_regno = first_regno + HARD_REGNO_NREGS (first_regno, GET_MODE (dest));
if (GET_CODE (x) == CLOBBER)
for (i = first_regno; i < last_regno; i++)
--- 104,110 ----
else
first_regno = REGNO (dest);
! last_regno = first_regno + hard_regno_nregs[first_regno][GET_MODE (dest)];
if (GET_CODE (x) == CLOBBER)
for (i = first_regno; i < last_regno; i++)
*************** mark_referenced_resources (rtx x, struct
*** 233,239 ****
{
unsigned int regno = subreg_regno (x);
unsigned int last_regno
! = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
if (last_regno > FIRST_PSEUDO_REGISTER)
abort ();
--- 233,239 ----
{
unsigned int regno = subreg_regno (x);
unsigned int last_regno
! = regno + hard_regno_nregs[regno][GET_MODE (x)];
if (last_regno > FIRST_PSEUDO_REGISTER)
abort ();
*************** mark_referenced_resources (rtx x, struct
*** 246,252 ****
{
unsigned int regno = REGNO (x);
unsigned int last_regno
! = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
if (last_regno > FIRST_PSEUDO_REGISTER)
abort ();
--- 246,252 ----
{
unsigned int regno = REGNO (x);
unsigned int last_regno
! = regno + hard_regno_nregs[regno][GET_MODE (x)];
if (last_regno > FIRST_PSEUDO_REGISTER)
abort ();
*************** mark_set_resources (rtx x, struct resour
*** 771,777 ****
{
unsigned int regno = subreg_regno (x);
unsigned int last_regno
! = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
if (last_regno > FIRST_PSEUDO_REGISTER)
abort ();
--- 771,777 ----
{
unsigned int regno = subreg_regno (x);
unsigned int last_regno
! = regno + hard_regno_nregs[regno][GET_MODE (x)];
if (last_regno > FIRST_PSEUDO_REGISTER)
abort ();
*************** mark_set_resources (rtx x, struct resour
*** 786,792 ****
{
unsigned int regno = REGNO (x);
unsigned int last_regno
! = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
if (last_regno > FIRST_PSEUDO_REGISTER)
abort ();
--- 786,792 ----
{
unsigned int regno = REGNO (x);
unsigned int last_regno
! = regno + hard_regno_nregs[regno][GET_MODE (x)];
if (last_regno > FIRST_PSEUDO_REGISTER)
abort ();
*************** mark_target_live_regs (rtx insns, rtx ta
*** 970,977 ****
{
regno = reg_renumber[i];
for (j = regno;
! j < regno + HARD_REGNO_NREGS (regno,
! PSEUDO_REGNO_MODE (i));
j++)
SET_HARD_REG_BIT (current_live_regs, j);
}
--- 970,977 ----
{
regno = reg_renumber[i];
for (j = regno;
! j < regno + hard_regno_nregs[regno]
! [PSEUDO_REGNO_MODE (i)];
j++)
SET_HARD_REG_BIT (current_live_regs, j);
}
*************** mark_target_live_regs (rtx insns, rtx ta
*** 1044,1051 ****
unsigned int first_regno = REGNO (XEXP (link, 0));
unsigned int last_regno
= (first_regno
! + HARD_REGNO_NREGS (first_regno,
! GET_MODE (XEXP (link, 0))));
for (i = first_regno; i < last_regno; i++)
SET_HARD_REG_BIT (pending_dead_regs, i);
--- 1044,1051 ----
unsigned int first_regno = REGNO (XEXP (link, 0));
unsigned int last_regno
= (first_regno
! + hard_regno_nregs[first_regno]
! [GET_MODE (XEXP (link, 0))]);
for (i = first_regno; i < last_regno; i++)
SET_HARD_REG_BIT (pending_dead_regs, i);
*************** mark_target_live_regs (rtx insns, rtx ta
*** 1063,1070 ****
unsigned int first_regno = REGNO (XEXP (link, 0));
unsigned int last_regno
= (first_regno
! + HARD_REGNO_NREGS (first_regno,
! GET_MODE (XEXP (link, 0))));
for (i = first_regno; i < last_regno; i++)
CLEAR_HARD_REG_BIT (current_live_regs, i);
--- 1063,1070 ----
unsigned int first_regno = REGNO (XEXP (link, 0));
unsigned int last_regno
= (first_regno
! + hard_regno_nregs[first_regno]
! [GET_MODE (XEXP (link, 0))]);
for (i = first_regno; i < last_regno; i++)
CLEAR_HARD_REG_BIT (current_live_regs, i);
Index: rtlanal.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/rtlanal.c,v
retrieving revision 1.173
diff -c -3 -p -r1.173 rtlanal.c
*** rtlanal.c 22 Jan 2004 12:44:54 -0000 1.173
--- rtlanal.c 1 Feb 2004 23:36:17 -0000
*************** Software Foundation, 59 Temple Place - S
*** 33,38 ****
--- 33,39 ----
#include "flags.h"
#include "basic-block.h"
#include "real.h"
+ #include "regs.h"
/* Forward declarations */
static int global_reg_mentioned_p_1 (rtx *, void *);
*************** refers_to_regno_p (unsigned int regno, u
*** 1437,1443 ****
return (endregno > x_regno
&& regno < x_regno + (x_regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (x_regno, GET_MODE (x))
: 1));
case SUBREG:
--- 1438,1444 ----
return (endregno > x_regno
&& regno < x_regno + (x_regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[x_regno][GET_MODE (x)]
: 1));
case SUBREG:
*************** refers_to_regno_p (unsigned int regno, u
*** 1449,1455 ****
unsigned int inner_regno = subreg_regno (x);
unsigned int inner_endregno
= inner_regno + (inner_regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
return endregno > inner_regno && regno < inner_endregno;
}
--- 1450,1456 ----
unsigned int inner_regno = subreg_regno (x);
unsigned int inner_endregno
= inner_regno + (inner_regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[regno][GET_MODE (x)] : 1);
return endregno > inner_regno && regno < inner_endregno;
}
*************** reg_overlap_mentioned_p (rtx x, rtx in)
*** 1541,1547 ****
regno = REGNO (x);
do_reg:
endregno = regno + (regno < FIRST_PSEUDO_REGISTER
! ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
return refers_to_regno_p (regno, endregno, in, (rtx*) 0);
case MEM:
--- 1542,1548 ----
regno = REGNO (x);
do_reg:
endregno = regno + (regno < FIRST_PSEUDO_REGISTER
! ? hard_regno_nregs[regno][GET_MODE (x)] : 1);
return refers_to_regno_p (regno, endregno, in, (rtx*) 0);
case MEM:
*************** dead_or_set_p (rtx insn, rtx x)
*** 1794,1800 ****
regno = REGNO (x);
last_regno = (regno >= FIRST_PSEUDO_REGISTER ? regno
! : regno + HARD_REGNO_NREGS (regno, GET_MODE (x)) - 1);
for (i = regno; i <= last_regno; i++)
if (! dead_or_set_regno_p (insn, i))
--- 1795,1801 ----
regno = REGNO (x);
last_regno = (regno >= FIRST_PSEUDO_REGISTER ? regno
! : regno + hard_regno_nregs[regno][GET_MODE (x)] - 1);
for (i = regno; i <= last_regno; i++)
if (! dead_or_set_regno_p (insn, i))
*************** dead_or_set_regno_p (rtx insn, unsigned
*** 1844,1850 ****
regno = REGNO (dest);
endregno = (regno >= FIRST_PSEUDO_REGISTER ? regno + 1
! : regno + HARD_REGNO_NREGS (regno, GET_MODE (dest)));
return (test_regno >= regno && test_regno < endregno);
}
--- 1845,1851 ----
regno = REGNO (dest);
endregno = (regno >= FIRST_PSEUDO_REGISTER ? regno + 1
! : regno + hard_regno_nregs[regno][GET_MODE (dest)]);
return (test_regno >= regno && test_regno < endregno);
}
*************** dead_or_set_regno_p (rtx insn, unsigned
*** 1875,1881 ****
regno = REGNO (dest);
endregno = (regno >= FIRST_PSEUDO_REGISTER ? regno + 1
! : regno + HARD_REGNO_NREGS (regno, GET_MODE (dest)));
if (test_regno >= regno && test_regno < endregno)
return 1;
--- 1876,1882 ----
regno = REGNO (dest);
endregno = (regno >= FIRST_PSEUDO_REGISTER ? regno + 1
! : regno + hard_regno_nregs[regno][GET_MODE (dest)]);
if (test_regno >= regno && test_regno < endregno)
return 1;
*************** find_regno_note (rtx insn, enum reg_note
*** 1927,1934 ****
&& REGNO (XEXP (link, 0)) <= regno
&& ((REGNO (XEXP (link, 0))
+ (REGNO (XEXP (link, 0)) >= FIRST_PSEUDO_REGISTER ? 1
! : HARD_REGNO_NREGS (REGNO (XEXP (link, 0)),
! GET_MODE (XEXP (link, 0)))))
> regno))
return link;
return 0;
--- 1928,1935 ----
&& REGNO (XEXP (link, 0)) <= regno
&& ((REGNO (XEXP (link, 0))
+ (REGNO (XEXP (link, 0)) >= FIRST_PSEUDO_REGISTER ? 1
! : hard_regno_nregs[REGNO (XEXP (link, 0))]
! [GET_MODE (XEXP (link, 0))]))
> regno))
return link;
return 0;
*************** find_reg_fusage (rtx insn, enum rtx_code
*** 1990,1996 ****
if (regno < FIRST_PSEUDO_REGISTER)
{
unsigned int end_regno
! = regno + HARD_REGNO_NREGS (regno, GET_MODE (datum));
unsigned int i;
for (i = regno; i < end_regno; i++)
--- 1991,1997 ----
if (regno < FIRST_PSEUDO_REGISTER)
{
unsigned int end_regno
! = regno + hard_regno_nregs[regno][GET_MODE (datum)];
unsigned int i;
for (i = regno; i < end_regno; i++)
*************** find_regno_fusage (rtx insn, enum rtx_co
*** 2025,2031 ****
if (GET_CODE (op = XEXP (link, 0)) == code
&& GET_CODE (reg = XEXP (op, 0)) == REG
&& (regnote = REGNO (reg)) <= regno
! && regnote + HARD_REGNO_NREGS (regnote, GET_MODE (reg)) > regno)
return 1;
}
--- 2026,2032 ----
if (GET_CODE (op = XEXP (link, 0)) == code
&& GET_CODE (reg = XEXP (op, 0)) == REG
&& (regnote = REGNO (reg)) <= regno
! && regnote + hard_regno_nregs[regnote][GET_MODE (reg)] > regno)
return 1;
}
*************** subreg_regno_offset (unsigned int xregno
*** 3257,3264 ****
if (xregno >= FIRST_PSEUDO_REGISTER)
abort ();
! nregs_xmode = HARD_REGNO_NREGS (xregno, xmode);
! nregs_ymode = HARD_REGNO_NREGS (xregno, ymode);
/* If this is a big endian paradoxical subreg, which uses more actual
hard registers than the original register, we must return a negative
--- 3258,3265 ----
if (xregno >= FIRST_PSEUDO_REGISTER)
abort ();
! nregs_xmode = hard_regno_nregs[xregno][xmode];
! nregs_ymode = hard_regno_nregs[xregno][ymode];
/* If this is a big endian paradoxical subreg, which uses more actual
hard registers than the original register, we must return a negative
*************** subreg_offset_representable_p (unsigned
*** 3300,3307 ****
if (xregno >= FIRST_PSEUDO_REGISTER)
abort ();
! nregs_xmode = HARD_REGNO_NREGS (xregno, xmode);
! nregs_ymode = HARD_REGNO_NREGS (xregno, ymode);
/* paradoxical subregs are always valid. */
if (offset == 0
--- 3301,3308 ----
if (xregno >= FIRST_PSEUDO_REGISTER)
abort ();
! nregs_xmode = hard_regno_nregs[xregno][xmode];
! nregs_ymode = hard_regno_nregs[xregno][ymode];
/* paradoxical subregs are always valid. */
if (offset == 0
*************** hoist_test_store (rtx x, rtx val, regset
*** 3513,3519 ****
if (REGNO (x) < FIRST_PSEUDO_REGISTER)
{
int regno = REGNO (x);
! int n = HARD_REGNO_NREGS (regno, GET_MODE (x));
if (!live)
return false;
--- 3514,3520 ----
if (REGNO (x) < FIRST_PSEUDO_REGISTER)
{
int regno = REGNO (x);
! int n = hard_regno_nregs[regno][GET_MODE (x)];
if (!live)
return false;
Index: sched-deps.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/sched-deps.c,v
retrieving revision 1.66
diff -c -3 -p -r1.66 sched-deps.c
*** sched-deps.c 21 Jan 2004 20:40:04 -0000 1.66
--- sched-deps.c 1 Feb 2004 23:36:17 -0000
*************** sched_analyze_1 (struct deps *deps, rtx
*** 492,498 ****
If so, mark all of them just like the first. */
if (regno < FIRST_PSEUDO_REGISTER)
{
! int i = HARD_REGNO_NREGS (regno, GET_MODE (dest));
if (code == SET)
{
while (--i >= 0)
--- 492,498 ----
If so, mark all of them just like the first. */
if (regno < FIRST_PSEUDO_REGISTER)
{
! int i = hard_regno_nregs[regno][GET_MODE (dest)];
if (code == SET)
{
while (--i >= 0)
*************** sched_analyze_2 (struct deps *deps, rtx
*** 639,645 ****
int regno = REGNO (x);
if (regno < FIRST_PSEUDO_REGISTER)
{
! int i = HARD_REGNO_NREGS (regno, GET_MODE (x));
while (--i >= 0)
SET_REGNO_REG_SET (reg_pending_uses, regno + i);
}
--- 639,645 ----
int regno = REGNO (x);
if (regno < FIRST_PSEUDO_REGISTER)
{
! int i = hard_regno_nregs[regno][GET_MODE (x)];
while (--i >= 0)
SET_REGNO_REG_SET (reg_pending_uses, regno + i);
}
Index: sched-rgn.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/sched-rgn.c,v
retrieving revision 1.68
diff -c -3 -p -r1.68 sched-rgn.c
*** sched-rgn.c 30 Dec 2003 10:40:56 -0000 1.68
--- sched-rgn.c 1 Feb 2004 23:36:17 -0000
*************** check_live_1 (int src, rtx x)
*** 1323,1329 ****
if (regno < FIRST_PSEUDO_REGISTER)
{
/* Check for hard registers. */
! int j = HARD_REGNO_NREGS (regno, GET_MODE (reg));
while (--j >= 0)
{
for (i = 0; i < candidate_table[src].split_bbs.nr_members; i++)
--- 1323,1329 ----
if (regno < FIRST_PSEUDO_REGISTER)
{
/* Check for hard registers. */
! int j = hard_regno_nregs[regno][GET_MODE (reg)];
while (--j >= 0)
{
for (i = 0; i < candidate_table[src].split_bbs.nr_members; i++)
*************** update_live_1 (int src, rtx x)
*** 1397,1403 ****
{
if (regno < FIRST_PSEUDO_REGISTER)
{
! int j = HARD_REGNO_NREGS (regno, GET_MODE (reg));
while (--j >= 0)
{
for (i = 0; i < candidate_table[src].update_bbs.nr_members; i++)
--- 1397,1403 ----
{
if (regno < FIRST_PSEUDO_REGISTER)
{
! int j = hard_regno_nregs[regno][GET_MODE (reg)];
while (--j >= 0)
{
for (i = 0; i < candidate_table[src].update_bbs.nr_members; i++)
Index: stmt.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/stmt.c,v
retrieving revision 1.344
diff -c -3 -p -r1.344 stmt.c
*** stmt.c 19 Jan 2004 03:08:14 -0000 1.344
--- stmt.c 1 Feb 2004 23:36:18 -0000
*************** Software Foundation, 59 Temple Place - S
*** 58,63 ****
--- 58,64 ----
#include "predict.h"
#include "optabs.h"
#include "target.h"
+ #include "regs.h"
/* Functions and data structures for expanding case statements. */
*************** decl_conflicts_with_clobbers_p (tree dec
*** 1413,1419 ****
for (regno = REGNO (reg);
regno < (REGNO (reg)
! + HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg)));
regno++)
if (TEST_HARD_REG_BIT (clobbered_regs, regno))
{
--- 1414,1420 ----
for (regno = REGNO (reg);
regno < (REGNO (reg)
! + hard_regno_nregs[REGNO (reg)][GET_MODE (reg)]);
regno++)
if (TEST_HARD_REG_BIT (clobbered_regs, regno))
{
Index: varasm.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/varasm.c,v
retrieving revision 1.408
diff -c -3 -p -r1.408 varasm.c
*** varasm.c 31 Jan 2004 23:13:23 -0000 1.408
--- varasm.c 1 Feb 2004 23:36:18 -0000
*************** make_decl_rtl (tree decl, const char *as
*** 795,801 ****
#ifdef ASM_DECLARE_REGISTER_GLOBAL
ASM_DECLARE_REGISTER_GLOBAL (asm_out_file, decl, reg_number, name);
#endif
! nregs = HARD_REGNO_NREGS (reg_number, DECL_MODE (decl));
while (nregs > 0)
globalize_reg (reg_number + --nregs);
}
--- 795,801 ----
#ifdef ASM_DECLARE_REGISTER_GLOBAL
ASM_DECLARE_REGISTER_GLOBAL (asm_out_file, decl, reg_number, name);
#endif
! nregs = hard_regno_nregs[reg_number][DECL_MODE (decl)];
while (nregs > 0)
globalize_reg (reg_number + --nregs);
}
Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v
retrieving revision 1.1239
diff -c -3 -p -r1.1239 Makefile.in
*** Makefile.in 31 Jan 2004 00:49:53 -0000 1.1239
--- Makefile.in 2 Feb 2004 00:12:30 -0000
*************** print-rtl.o : print-rtl.c $(CONFIG_H) $(
*** 1545,1551 ****
$(RTL_H) $(TREE_H) hard-reg-set.h $(BASIC_BLOCK_H) real.h $(TM_P_H)
rtlanal.o : rtlanal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h \
$(RTL_H) hard-reg-set.h $(TM_P_H) insn-config.h $(RECOG_H) real.h flags.h \
! $(BASIC_BLOCK_H)
errors.o : errors.c $(CONFIG_H) $(SYSTEM_H) errors.h
$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
--- 1545,1551 ----
$(RTL_H) $(TREE_H) hard-reg-set.h $(BASIC_BLOCK_H) real.h $(TM_P_H)
rtlanal.o : rtlanal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h \
$(RTL_H) hard-reg-set.h $(TM_P_H) insn-config.h $(RECOG_H) real.h flags.h \
! $(BASIC_BLOCK_H) $(REGS_H)
errors.o : errors.c $(CONFIG_H) $(SYSTEM_H) errors.h
$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
*************** cfgbuild.o : cfgbuild.c $(CONFIG_H) $(SY
*** 1702,1708 ****
cfgcleanup.o : cfgcleanup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(RTL_H) $(TIMEVAR_H) $(BASIC_BLOCK_H) hard-reg-set.h output.h flags.h \
$(RECOG_H) toplev.h $(GGC_H) insn-config.h cselib.h $(TARGET_H) $(TM_P_H) \
! $(PARAMS_H)
cfgloop.o : cfgloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) coretypes.h $(TM_H) \
$(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h flags.h
cfgloopanal.o : cfgloopanal.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
--- 1702,1708 ----
cfgcleanup.o : cfgcleanup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(RTL_H) $(TIMEVAR_H) $(BASIC_BLOCK_H) hard-reg-set.h output.h flags.h \
$(RECOG_H) toplev.h $(GGC_H) insn-config.h cselib.h $(TARGET_H) $(TM_P_H) \
! $(PARAMS_H) $(REGS_H)
cfgloop.o : cfgloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) coretypes.h $(TM_H) \
$(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h flags.h
cfgloopanal.o : cfgloopanal.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
*************** ra-colorize.o : ra-colorize.c $(CONFIG_H
*** 1748,1754 ****
$(TM_P_H) function.h $(REGS_H) hard-reg-set.h $(BASIC_BLOCK_H) df.h output.h ra.h
ra-debug.o : ra-debug.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
insn-config.h $(RECOG_H) function.h hard-reg-set.h $(BASIC_BLOCK_H) df.h output.h \
! ra.h $(TM_P_H)
ra-rewrite.o : ra-rewrite.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
$(TM_P_H) function.h $(REGS_H) hard-reg-set.h $(BASIC_BLOCK_H) df.h $(EXPR_H) \
output.h except.h ra.h reload.h insn-config.h
--- 1748,1754 ----
$(TM_P_H) function.h $(REGS_H) hard-reg-set.h $(BASIC_BLOCK_H) df.h output.h ra.h
ra-debug.o : ra-debug.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
insn-config.h $(RECOG_H) function.h hard-reg-set.h $(BASIC_BLOCK_H) df.h output.h \
! ra.h $(TM_P_H) $(REGS_H)
ra-rewrite.o : ra-rewrite.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
$(TM_P_H) function.h $(REGS_H) hard-reg-set.h $(BASIC_BLOCK_H) df.h $(EXPR_H) \
output.h except.h ra.h reload.h insn-config.h