On 9/10/07, Rask Ingemann Lambertsen <[EMAIL PROTECTED]> wrote:
> It would help a lot if you post your GO_IF_LEGITIMATE_ADDRESS.
It's really very basic:
# define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
{ if (legitimate_address_p (MODE, X, true)) goto ADDR; }
and in the .c-file:
bool
legitimate_address_p (enum machine_mode mode, rtx addr, bool strict
ATTRIBUTE_UNUSED)
{
return (legitimate_offset_address_p (mode, addr)
|| legitimate_nonoffset_address_p (mode, addr));
}
static bool
legitimate_nonoffset_address_p (enum machine_mode mode
ATTRIBUTE_UNUSED, rtx addr)
{
return (GET_CODE (addr) == REG && REG_OK_FOR_BASE_P (addr));
}
static bool
legitimate_offset_address_p (enum machine_mode mode ATTRIBUTE_UNUSED, rtx addr)
{
rtx reg, offset;
if (GET_CODE (addr) != PLUS)
return false;
reg = XEXP (addr, 0);
offset = XEXP (addr, 1);
if ((GET_CODE (reg) == REG && REG_OK_FOR_BASE_P (reg))
&& legitimate_address_integer_p (offset, 0))
return true;
return false;
}
static bool
legitimate_address_integer_p (rtx addr, int offset ATTRIBUTE_UNUSED)
{
return (GET_CODE (addr) == CONST_INT
&& SMALL_INT (INTVAL (addr));
}
/Tomas