- fixed problem with "fixed or forbidden register" bx or bp being spilled

for inline assembly that requires a lot of register operands. Now these
  registers are only spilled if it is safe to do so (if -fno-pic or
  -fomit-frame-pointer has been given).


git-svn-id: file:///srv/svn/repos/haiku/trunk/buildtools@10349 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Oliver Tappe 2004-12-02 16:18:25 +00:00
parent d9894d5b5c
commit f5a979fb14

View File

@ -4155,6 +4155,7 @@ order_regs_for_reload (chain)
int regno = reg_alloc_order[i];
if (hard_reg_n_uses[regno].uses == 0
&& !fixed_regs[regno]
&& ! TEST_HARD_REG_BIT (bad_spill_regs, regno))
potential_reload_regs[o++] = regno;
}
@ -4162,12 +4163,14 @@ order_regs_for_reload (chain)
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
{
if (hard_reg_n_uses[i].uses == 0 && call_used_regs[i]
&& !fixed_regs[i]
&& ! TEST_HARD_REG_BIT (bad_spill_regs, i))
potential_reload_regs[o++] = i;
}
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
{
if (hard_reg_n_uses[i].uses == 0 && ! call_used_regs[i]
&& !fixed_regs[i]
&& ! TEST_HARD_REG_BIT (bad_spill_regs, i))
potential_reload_regs[o++] = i;
}
@ -4182,10 +4185,13 @@ order_regs_for_reload (chain)
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
if (hard_reg_n_uses[i].uses != 0
&& !fixed_regs[hard_reg_n_uses[i].regno]
&& ! TEST_HARD_REG_BIT (bad_spill_regs, hard_reg_n_uses[i].regno))
potential_reload_regs[o++] = hard_reg_n_uses[i].regno;
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
if (TEST_HARD_REG_BIT (bad_spill_regs, hard_reg_n_uses[i].regno))
if (TEST_HARD_REG_BIT (bad_spill_regs, hard_reg_n_uses[i].regno)
&& !fixed_regs[hard_reg_n_uses[i].regno]
)
potential_reload_regs[o++] = hard_reg_n_uses[i].regno;
}