Deleted Added
sdiff udiff text old ( 102780 ) new ( 104752 )
full compact
1/* Reload pseudo regs into hard regs for insns that require hard regs.
2 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free

--- 7340 unchanged lines hidden (view full) ---

7349gen_reload (out, in, opnum, type)
7350 rtx out;
7351 rtx in;
7352 int opnum;
7353 enum reload_type type;
7354{
7355 rtx last = get_last_insn ();
7356 rtx tem;
7357
7358 /* If IN is a paradoxical SUBREG, remove it and try to put the
7359 opposite SUBREG on OUT. Likewise for a paradoxical SUBREG on OUT. */
7360 if (GET_CODE (in) == SUBREG
7361 && (GET_MODE_SIZE (GET_MODE (in))
7362 > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
7363 && (tem = gen_lowpart_common (GET_MODE (SUBREG_REG (in)), out)) != 0)
7364 in = SUBREG_REG (in), out = tem;

--- 146 unchanged lines hidden (view full) ---

7511
7512 gen_reload (out, op1, opnum, type);
7513 insn = emit_insn (gen_add2_insn (out, op0));
7514 REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EQUIV, in, REG_NOTES (insn));
7515 }
7516
7517#ifdef SECONDARY_MEMORY_NEEDED
7518 /* If we need a memory location to do the move, do it that way. */
7519 else if (GET_CODE (in) == REG && REGNO (in) < FIRST_PSEUDO_REGISTER
7520 && GET_CODE (out) == REG && REGNO (out) < FIRST_PSEUDO_REGISTER
7521 && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (in)),
7522 REGNO_REG_CLASS (REGNO (out)),
7523 GET_MODE (out)))
7524 {
7525 /* Get the memory to use and rewrite both registers to its mode. */
7526 rtx loc = get_secondary_mem (in, GET_MODE (out), opnum, type);
7527
7528 if (GET_MODE (loc) != GET_MODE (out))
7529 out = gen_rtx_REG (GET_MODE (loc), REGNO (out));
7530
7531 if (GET_MODE (loc) != GET_MODE (in))
7532 in = gen_rtx_REG (GET_MODE (loc), REGNO (in));
7533
7534 gen_reload (loc, in, opnum, type);
7535 gen_reload (out, loc, opnum, type);
7536 }
7537#endif
7538
7539 /* If IN is a simple operand, use gen_move_insn. */
7540 else if (GET_RTX_CLASS (GET_CODE (in)) == 'o' || GET_CODE (in) == SUBREG)

--- 35 unchanged lines hidden (view full) ---

7576 rtx output_reload_insn = spill_reg_store[last_reload_reg];
7577 rtx reg = spill_reg_stored_to[last_reload_reg];
7578 int k;
7579 int n_occurrences;
7580 int n_inherited = 0;
7581 rtx i1;
7582 rtx substed;
7583
7584 /* Get the raw pseudo-register referred to. */
7585
7586 while (GET_CODE (reg) == SUBREG)
7587 reg = SUBREG_REG (reg);
7588 substed = reg_equiv_memory_loc[REGNO (reg)];
7589
7590 /* This is unsafe if the operand occurs more often in the current
7591 insn than it is inherited. */

--- 1963 unchanged lines hidden ---