Commit 522ec94e by Ulrich Weigand Committed by Ulrich Weigand

s390.c (s390_decompose_address): Do not range check the displacement if base or…

s390.c (s390_decompose_address): Do not range check the displacement if base or index is the argument pointer...

	* config/s390/s390.c (s390_decompose_address): Do not range check the
	displacement if base or index is the argument pointer register.

From-SVN: r58530
parent 0bfd1ad0
2002-10-25 Ulrich Weigand <uweigand@de.ibm.com>
* config/s390/s390.c (s390_decompose_address): Do not range check the
displacement if base or index is the argument pointer register.
2002-10-24 Hans-Peter Nilsson <hp@bitrange.com>
PR other/3337
......
......@@ -1597,8 +1597,20 @@ s390_decompose_address (addr, out)
/* Allow integer constant in range. */
if (GET_CODE (disp) == CONST_INT)
{
if (INTVAL (disp) < 0 || INTVAL (disp) >= 4096)
return FALSE;
/* If the argument pointer is involved, the displacement will change
later anyway as the argument pointer gets eliminated. This could
make a valid displacement invalid, but it is more likely to make
an invalid displacement valid, because we sometimes access the
register save area via negative offsets to the arg pointer.
Thus we don't check the displacement for validity here. If after
elimination the displacement turns out to be invalid after all,
this is fixed up by reload in any case. */
if ((base && REGNO (base) == ARG_POINTER_REGNUM)
|| (indx && REGNO (indx) == ARG_POINTER_REGNUM))
;
else if (INTVAL (disp) < 0 || INTVAL (disp) >= 4096)
return FALSE;
}
/* In the small-PIC case, the linker converts @GOT12
......
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