Commit 1a5b457d by Richard Kenner

*** empty log message ***

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