Commit 7d0e3dd4 by Richard Kenner

*** empty log message ***

From-SVN: r171
parent c54f9cf9
...@@ -145,8 +145,7 @@ static HARD_REG_SET *block_out_reg_set; ...@@ -145,8 +145,7 @@ static HARD_REG_SET *block_out_reg_set;
static short *block_number; static short *block_number;
/* This is the register file for all register after conversion */ /* This is the register file for all register after conversion */
static rtx SFmode_reg[FIRST_PSEUDO_REGISTER]; static rtx FP_mode_reg[FIRST_PSEUDO_REGISTER][(int) MAX_MACHINE_MODE];
static rtx DFmode_reg[FIRST_PSEUDO_REGISTER];
/* ??? set of register to delete after ASM_OPERAND */ /* ??? set of register to delete after ASM_OPERAND */
HARD_REG_SET asm_regs; HARD_REG_SET asm_regs;
...@@ -165,8 +164,6 @@ extern rtx find_regno_note (); ...@@ -165,8 +164,6 @@ extern rtx find_regno_note ();
extern rtx emit_jump_insn_before (); extern rtx emit_jump_insn_before ();
extern rtx emit_label_after (); extern rtx emit_label_after ();
extern rtx dconst0_rtx;
/* Forward declarations */ /* Forward declarations */
static void find_blocks (); static void find_blocks ();
...@@ -225,15 +222,15 @@ reg_to_stack (first, file) ...@@ -225,15 +222,15 @@ reg_to_stack (first, file)
register rtx insn; register rtx insn;
register int i; register int i;
int stack_reg_seen = 0; int stack_reg_seen = 0;
enum machine_mode mode;
current_function_returns_real current_function_returns_real
= TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) == REAL_TYPE; = TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) == REAL_TYPE;
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT); mode != VOIDmode;
{ mode = GET_MODE_WIDER_MODE (mode))
SFmode_reg[i] = gen_rtx (REG, SFmode, i); for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
DFmode_reg[i] = gen_rtx (REG, DFmode, i); FP_mode_reg[i][(int) mode] = gen_rtx (REG, mode, i);
}
/* Count the basic blocks. Also find maximum insn uid. */ /* Count the basic blocks. Also find maximum insn uid. */
{ {
...@@ -599,7 +596,8 @@ record_reg_life (insn, block, regstack) ...@@ -599,7 +596,8 @@ record_reg_life (insn, block, regstack)
cannot be used on these insns, because they do not appear in cannot be used on these insns, because they do not appear in
block_number[]. */ block_number[]. */
pat = gen_rtx (SET, VOIDmode, DFmode_reg[reg], dconst0_rtx); pat = gen_rtx (SET, VOIDmode, FP_mode_reg[reg][(int) DFmode],
CONST0_RTX (DFmode));
init = emit_insn_after (pat, insn); init = emit_insn_after (pat, insn);
PUT_MODE (init, QImode); PUT_MODE (init, QImode);
...@@ -839,7 +837,8 @@ stack_reg_life_analysis (first) ...@@ -839,7 +837,8 @@ stack_reg_life_analysis (first)
{ {
rtx init_rtx; rtx init_rtx;
init_rtx = gen_rtx (SET, VOIDmode, DFmode_reg[reg], dconst0_rtx); init_rtx = gen_rtx (SET, VOIDmode, FP_mode_reg[reg][(int) DFmode],
CONST0_RTX (DFmode));
block_begin[0] = emit_insn_after (init_rtx, first); block_begin[0] = emit_insn_after (init_rtx, first);
PUT_MODE (block_begin[0], QImode); PUT_MODE (block_begin[0], QImode);
...@@ -867,12 +866,10 @@ replace_reg (reg, regno) ...@@ -867,12 +866,10 @@ replace_reg (reg, regno)
|| ! STACK_REG_P (*reg)) || ! STACK_REG_P (*reg))
abort (); abort ();
if (GET_MODE (*reg) == DFmode) if (GET_MODE_CLASS (GET_MODE (*reg)) != MODE_FLOAT)
*reg = DFmode_reg[regno]; abort;
else if (GET_MODE (*reg) == SFmode)
*reg = SFmode_reg[regno]; *reg = FP_mode_reg[regno][(int) GET_MODE (*reg)];
else
abort ();
} }
/* Remove a note of type NOTE, which must be found, for register /* Remove a note of type NOTE, which must be found, for register
...@@ -957,14 +954,14 @@ emit_pop_insn (insn, regstack, reg, when) ...@@ -957,14 +954,14 @@ emit_pop_insn (insn, regstack, reg, when)
if (hard_regno < FIRST_STACK_REG) if (hard_regno < FIRST_STACK_REG)
abort (); abort ();
pop_rtx = gen_rtx (SET, VOIDmode, DFmode_reg[hard_regno], pop_rtx = gen_rtx (SET, VOIDmode, FP_mode_reg[hard_regno][(int) DFmode],
DFmode_reg[FIRST_STACK_REG]); FP_mode_reg[FIRST_STACK_REG][(int) DFmode]);
pop_insn = (*when) (pop_rtx, insn); pop_insn = (*when) (pop_rtx, insn);
PUT_MODE (pop_insn, VOIDmode); PUT_MODE (pop_insn, VOIDmode);
REG_NOTES (pop_insn) = gen_rtx (EXPR_LIST, REG_NOTES (pop_insn) = gen_rtx (EXPR_LIST, REG_DEAD,
REG_DEAD, DFmode_reg[FIRST_STACK_REG], FP_mode_reg[FIRST_STACK_REG][(int) DFmode],
REG_NOTES (pop_insn)); REG_NOTES (pop_insn));
regstack->reg[regstack->top - (hard_regno - FIRST_STACK_REG)] regstack->reg[regstack->top - (hard_regno - FIRST_STACK_REG)]
...@@ -997,7 +994,8 @@ emit_hard_swap_insn (insn, regstack, hard_regno, when) ...@@ -997,7 +994,8 @@ emit_hard_swap_insn (insn, regstack, hard_regno, when)
if (hard_regno == FIRST_STACK_REG) if (hard_regno == FIRST_STACK_REG)
return; return;
swap_rtx = gen_swapdf (DFmode_reg[hard_regno], DFmode_reg[FIRST_STACK_REG]); swap_rtx = gen_swapdf (FP_mode_reg[hard_regno][(int) DFmode],
FP_mode_reg[FIRST_STACK_REG][(int) DFmode]);
swap_insn = (*when) (swap_rtx, insn); swap_insn = (*when) (swap_rtx, insn);
PUT_MODE (swap_insn, VOIDmode); PUT_MODE (swap_insn, VOIDmode);
...@@ -1526,7 +1524,7 @@ change_stack (insn, old, new) ...@@ -1526,7 +1524,7 @@ change_stack (insn, old, new)
for (reg = old->top; reg >= 0; reg--) for (reg = old->top; reg >= 0; reg--)
if (! TEST_HARD_REG_BIT (new->reg_set, old->reg[reg])) if (! TEST_HARD_REG_BIT (new->reg_set, old->reg[reg]))
emit_pop_insn (insn, old, DFmode_reg[old->reg[reg]], emit_pop_insn (insn, old, FP_mode_reg[old->reg[reg]][(int) DFmode],
emit_insn_before); emit_insn_before);
if (new->top == -2) if (new->top == -2)
...@@ -1575,7 +1573,8 @@ change_stack (insn, old, new) ...@@ -1575,7 +1573,8 @@ change_stack (insn, old, new)
if (reg == -1) if (reg == -1)
abort (); abort ();
emit_swap_insn (insn, old, DFmode_reg[old->reg[reg]], emit_swap_insn (insn, old,
FP_mode_reg[old->reg[reg]][(int) DFmode],
emit_insn_before); emit_insn_before);
} }
...@@ -1586,7 +1585,8 @@ change_stack (insn, old, new) ...@@ -1586,7 +1585,8 @@ change_stack (insn, old, new)
for (reg = new->top; reg >= 0; reg--) for (reg = new->top; reg >= 0; reg--)
if (new->reg[reg] != old->reg[reg]) if (new->reg[reg] != old->reg[reg])
{ {
emit_swap_insn (insn, old, DFmode_reg[old->reg[reg]], emit_swap_insn (insn, old,
FP_mode_reg[old->reg[reg]][(int) DFmode],
emit_insn_before); emit_insn_before);
break; break;
} }
...@@ -1791,7 +1791,8 @@ convert_regs () ...@@ -1791,7 +1791,8 @@ convert_regs ()
for (reg = regstack.top; reg >= 0; reg--) for (reg = regstack.top; reg >= 0; reg--)
if (! current_function_returns_real if (! current_function_returns_real
|| regstack.reg[reg] != FIRST_STACK_REG) || regstack.reg[reg] != FIRST_STACK_REG)
insn = emit_pop_insn (insn, &regstack, DFmode_reg[regstack.reg[reg]], insn = emit_pop_insn (insn, &regstack,
FP_mode_reg[regstack.reg[reg]][(int) DFmode],
emit_insn_after); emit_insn_after);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment