aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-05-14 21:37:58 +0000
committerRichard Stallman <rms@gnu.org>1992-05-14 21:37:58 +0000
commitb7a091350e9895124553f7d5109776f985e693b7 (patch)
tree5887ae2244b50e8b460d879967f0a1af77e7e310 /gcc
parent282ea52ada40ec3efd6e754baf7e5b701538102f (diff)
downloadgcc-b7a091350e9895124553f7d5109776f985e693b7.zip
gcc-b7a091350e9895124553f7d5109776f985e693b7.tar.gz
gcc-b7a091350e9895124553f7d5109776f985e693b7.tar.bz2
*** empty log message ***
From-SVN: r979
Diffstat (limited to 'gcc')
-rw-r--r--gcc/expmed.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 44dc7ec..e7a9af1 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -972,7 +972,13 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp,
if (GET_MODE (xtarget) != maxmode)
{
if (GET_CODE (xtarget) == REG)
- xspec_target_subreg = xtarget = gen_lowpart (maxmode, xtarget);
+ {
+ int wider = (GET_MODE_SIZE (maxmode)
+ > GET_MODE_SIZE (GET_MODE (xtarget)));
+ xtarget = gen_lowpart (maxmode, xtarget);
+ if (wider)
+ xspec_target_subreg = xtarget;
+ }
else
xtarget = gen_reg_rtx (maxmode);
}
@@ -1098,7 +1104,13 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp,
if (GET_MODE (xtarget) != maxmode)
{
if (GET_CODE (xtarget) == REG)
- xspec_target_subreg = xtarget = gen_lowpart (maxmode, xtarget);
+ {
+ int wider = (GET_MODE_SIZE (maxmode)
+ > GET_MODE_SIZE (GET_MODE (xtarget)));
+ xtarget = gen_lowpart (maxmode, xtarget);
+ if (wider)
+ xspec_target_subreg = xtarget;
+ }
else
xtarget = gen_reg_rtx (maxmode);
}