Commit 3d771dfd by Michael Meissner

Do not allow SUBREGs as either base or index register.

From-SVN: r8237
parent 45524ce9
...@@ -1424,21 +1424,18 @@ legitimate_address_p (mode, addr, strict) ...@@ -1424,21 +1424,18 @@ legitimate_address_p (mode, addr, strict)
} }
/* Validate base register */ /* Validate base register */
/* Don't allow SUBREG's here, it can lead to spill failures when the base
is one word out of a two word structure, which is represented internally
as a DImode int. */
if (base) if (base)
{ {
if (GET_CODE (base) == SUBREG) if (GET_CODE (base) != REG)
{ {
if (GET_CODE (SUBREG_REG (base)) != REG || SUBREG_WORD (base) != 0) ADDR_INVALID ("Base is not a register.\n", base);
{ return FALSE;
ADDR_INVALID ("Base SUBREG is not of a REG.\n", base);
return FALSE;
}
base = SUBREG_REG (base);
} }
if (GET_CODE (base) != REG if ((strict && !REG_OK_FOR_BASE_STRICT_P (base))
|| ( strict && !REG_OK_FOR_BASE_STRICT_P (base))
|| (!strict && !REG_OK_FOR_BASE_NONSTRICT_P (base))) || (!strict && !REG_OK_FOR_BASE_NONSTRICT_P (base)))
{ {
ADDR_INVALID ("Base is not valid.\n", base); ADDR_INVALID ("Base is not valid.\n", base);
...@@ -1447,21 +1444,18 @@ legitimate_address_p (mode, addr, strict) ...@@ -1447,21 +1444,18 @@ legitimate_address_p (mode, addr, strict)
} }
/* Validate index register */ /* Validate index register */
/* Don't allow SUBREG's here, it can lead to spill failures when the index
is one word out of a two word structure, which is represented internally
as a DImode int. */
if (indx) if (indx)
{ {
if (GET_CODE (indx) == SUBREG) if (GET_CODE (indx) != REG)
{ {
if (GET_CODE (SUBREG_REG (indx)) != REG || SUBREG_WORD (indx) != 0) ADDR_INVALID ("Index is not a register.\n", indx);
{ return FALSE;
ADDR_INVALID ("Index SUBREG is not of a REG.", indx);
return FALSE;
}
indx = SUBREG_REG (indx);
} }
if (GET_CODE (indx) != REG if ((strict && !REG_OK_FOR_INDEX_STRICT_P (indx))
|| ( strict && !REG_OK_FOR_INDEX_STRICT_P (indx))
|| (!strict && !REG_OK_FOR_INDEX_NONSTRICT_P (indx))) || (!strict && !REG_OK_FOR_INDEX_NONSTRICT_P (indx)))
{ {
ADDR_INVALID ("Index is not valid.\n", indx); ADDR_INVALID ("Index is not valid.\n", indx);
......
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