aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-10-12 06:31:07 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1992-10-12 06:31:07 -0400
commit83e9c679c039868eebe522bbb03cdf18eba90b34 (patch)
treedd41442db3b7b5e10606fc9bdade0dfe24591752 /gcc
parent780ed3aef39fd57a827906fb90a23db89f8480e7 (diff)
downloadgcc-83e9c679c039868eebe522bbb03cdf18eba90b34.zip
gcc-83e9c679c039868eebe522bbb03cdf18eba90b34.tar.gz
gcc-83e9c679c039868eebe522bbb03cdf18eba90b34.tar.bz2
(gen_lowpart_common): Allow MODE_PARTIAL_INT where MODE_INT is
allowed. From-SVN: r2407
Diffstat (limited to 'gcc')
-rw-r--r--gcc/emit-rtl.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index f13d0d7..7e94419 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -496,7 +496,8 @@ gen_lowpart_common (mode, x)
/ UNITS_PER_WORD);
if ((GET_CODE (x) == ZERO_EXTEND || GET_CODE (x) == SIGN_EXTEND)
- && GET_MODE_CLASS (mode) == MODE_INT)
+ && (GET_MODE_CLASS (mode) == MODE_INT
+ || GET_MODE_CLASS (mode) == MODE_PARTIAL_INT))
{
/* If we are getting the low-order part of something that has been
sign- or zero-extended, we can either just use the object being
@@ -544,7 +545,9 @@ gen_lowpart_common (mode, x)
/* 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 && GET_MODE (x) == VOIDmode
+ else if ((GET_MODE_CLASS (mode) == MODE_INT
+ || GET_MODE_CLASS (mode) == MODE_PARTIAL_INT)
+ && GET_MODE (x) == VOIDmode
&& (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE))
{
/* If MODE is twice the host word size, X is already the desired
@@ -632,7 +635,8 @@ gen_lowpart_common (mode, x)
else if (((HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT
&& HOST_BITS_PER_WIDE_INT == BITS_PER_WORD)
|| flag_pretend_float)
- && GET_MODE_CLASS (mode) == MODE_INT
+ && (GET_MODE_CLASS (mode) == MODE_INT
+ || GET_MODE_CLASS (mode) == MODE_PARTIAL_INT)
&& GET_CODE (x) == CONST_DOUBLE
&& GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT
&& GET_MODE_BITSIZE (mode) == BITS_PER_WORD)
@@ -646,7 +650,8 @@ gen_lowpart_common (mode, x)
else if (((HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT
&& HOST_BITS_PER_WIDE_INT == BITS_PER_WORD)
|| flag_pretend_float)
- && GET_MODE_CLASS (mode) == MODE_INT
+ && (GET_MODE_CLASS (mode) == MODE_INT
+ && GET_MODE_CLASS (mode) == MODE_PARTIAL_INT)
&& GET_CODE (x) == CONST_DOUBLE
&& GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT
&& GET_MODE_BITSIZE (mode) == 2 * BITS_PER_WORD)