Commit 1a5b457d by Richard Kenner

*** empty log message ***

From-SVN: r733
parent 77f934bb
......@@ -3318,6 +3318,8 @@ handle_directive (ip, op)
*cp++ = *xp++;
SKIP_WHITE_SPACE (xp);
}
} else {
*cp++ = *xp++;
}
break;
......@@ -3325,7 +3327,7 @@ handle_directive (ip, op)
case '\"':
{
register U_CHAR *bp1
= skip_quoted_string (xp - 1, limit, ip->lineno, 0, 0, 0);
= skip_quoted_string (xp - 1, bp, ip->lineno, 0, 0, 0);
while (xp != bp1)
if (*xp == '\\') {
if (*++xp != '\n')
......
......@@ -529,13 +529,36 @@ gen_lowpart_common (mode, x)
from the low-order part of the constant. */
else if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (x) == VOIDmode
&& (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE))
return (GET_MODE_BITSIZE (mode) > HOST_BITS_PER_INT ? x
: (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_INT
&& GET_CODE (x) == CONST_INT) ? x
: gen_rtx (CONST_INT, VOIDmode,
(GET_MODE_MASK (mode)
& (GET_CODE (x) == CONST_INT
? INTVAL (x) : CONST_DOUBLE_LOW (x)))));
{
/* If MODE is twice the host word size, X is already the desired
representation. Otherwise, if MODE is wider than a word, we can't
do this. If MODE is exactly a word, return just one CONST_INT.
If MODE is smaller than a word, clear the bits that don't belong
in our mode, unless they and our sign bit are all one. So we get
either a reasonable negative value or a reasonable unsigned value
for this mode. */
if (GET_MODE_BITSIZE (mode) == 2 * HOST_BITS_PER_INT)
return x;
else if (GET_MODE_BITSIZE (mode) > HOST_BITS_PER_INT)
return 0;
else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_INT)
return (GET_CODE (x) == CONST_INT ? x
: gen_rtx (CONST_INT, VOIDmode, CONST_DOUBLE_LOW (x)));
else
{
/* MODE must be narrower than HOST_BITS_PER_INT. */
int width = GET_MODE_BITSIZE (mode);
int val = (GET_CODE (x) == CONST_INT ? INTVAL (x)
: CONST_DOUBLE_LOW (x));
if (((val & ((-1) << (width - 1))) != ((-1) << (width - 1))))
val &= (1 << width) - 1;
return (GET_CODE (x) == CONST_INT && INTVAL (x) == val ? x
: gen_rtx (CONST_INT, VOIDmode, val));
}
}
/* Otherwise, we can't do this. */
return 0;
......
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