This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: RFA: MIPS patch (was Re: MEM tracking, round 3)
- To: r dot sandiford at redhat dot com
- Subject: Re: RFA: MIPS patch (was Re: MEM tracking, round 3)
- From: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner)
- Date: Mon, 9 Jul 01 12:15:24 EDT
- Cc: gcc-patches at gcc dot gnu dot org
I meant <http://gcc.gnu.org/ml/gcc-patches/2001-07/msg00245.html>. Like
I say, I don't know if it is the same problem or not.
No, it's not. That was a problem in caller-save.c, which was quickly fixed.
Yes, I agreee that describes the function of the MEM perfectly
accurately. But the old code didn't do what you describe. To requote
from above, it used to read:
operands[2] = adj_offsettable_operand (op1, 4);
which gave operands[2] the same mode as op1, i.e. a DImode or a DFmode.
Yes, that's true. But that was incorrect, though nothing ever checked it.
I mean (from the patch I sent) it would be cleaner to make the
following work:
*************** mips_move_2words (operands, insn)
*** 2552,2563 ****
}
else if (double_memory_operand (op1, GET_MODE (op1)))
! {
! operands[2] = adjust_address (op1, SImode, 4);
! ret = (reg_mentioned_p (op0, op1)
! ? "lw\t%D0,%2\n\tlw\t%0,%1"
! : "lw\t%0,%1\n\tlw\t%D0,%2");
! }
if (ret != 0 && MEM_VOLATILE_P (op1))
{
--- 2552,2560 ----
}
else if (double_memory_operand (op1, GET_MODE (op1)))
! ret = (reg_mentioned_p (op0, op1)
! ? "lw\t%D0,%D1\n\tlw\t%0,%1"
! : "lw\t%0,%1\n\tlw\t%D0,%D1");
if (ret != 0 && MEM_VOLATILE_P (op1))
{
I agree that's probably the best approach, but I'm not competant to
judge things at that level on the MIPS port.