(gen_{real,imag}part): Extract value from CONCAT directly.

(gen_lowpart_common, gen_highpart): Don't do it here.

From-SVN: r6377
This commit is contained in:
Richard Kenner 1994-01-10 19:32:57 -05:00
parent 28bad1cbc3
commit dc139c902a

View File

@ -1,5 +1,5 @@
/* Emit RTL for the GNU C-Compiler expander.
Copyright (C) 1987, 1988, 1992, 1993 Free Software Foundation, Inc.
Copyright (C) 1987, 1988, 1992, 1993, 1994 Free Software Foundation, Inc.
This file is part of GNU CC.
@ -620,12 +620,6 @@ gen_lowpart_common (mode, x)
else
return gen_rtx (SUBREG, mode, x, word);
}
else if (GET_CODE (x) == CONCAT)
{
if (GET_MODE (XEXP (x, 0)) != mode)
abort ();
return XEXP (x, 0);
}
/* If X is a CONST_INT or a CONST_DOUBLE, extract the appropriate bits
from the low-order part of the constant. */
else if ((GET_MODE_CLASS (mode) == MODE_INT
@ -791,7 +785,9 @@ gen_realpart (mode, x)
enum machine_mode mode;
register rtx x;
{
if (WORDS_BIG_ENDIAN)
if (GET_CODE (x) == CONCAT && GET_MODE (XEXP (x, 0)) == mode)
return XEXP (x, 0);
else if (WORDS_BIG_ENDIAN)
return gen_highpart (mode, x);
else
return gen_lowpart (mode, x);
@ -805,7 +801,9 @@ gen_imagpart (mode, x)
enum machine_mode mode;
register rtx x;
{
if (WORDS_BIG_ENDIAN)
if (GET_CODE (x) == CONCAT && GET_MODE (XEXP (x, 0)) == mode)
return XEXP (x, 1);
else if (WORDS_BIG_ENDIAN)
return gen_lowpart (mode, x);
else
return gen_highpart (mode, x);
@ -917,12 +915,6 @@ gen_highpart (mode, x)
else
return gen_rtx (SUBREG, mode, x, word);
}
else if (GET_CODE (x) == CONCAT)
{
if (GET_MODE (XEXP (x, 1)) != mode)
abort ();
return XEXP (x, 1);
}
else
abort ();
}