aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteve Chamberlain <sac@gnu.org>1994-09-08 22:48:52 +0000
committerSteve Chamberlain <sac@gnu.org>1994-09-08 22:48:52 +0000
commit07bd02ca781addebb9d869c2746dbfcbbd4db154 (patch)
tree1fcb77c0fcbcf4f33cedfda14b070ee8b6965d5c /gcc
parent13ce26b042ae661fde957ed094fdecae4757e865 (diff)
downloadgcc-07bd02ca781addebb9d869c2746dbfcbbd4db154.zip
gcc-07bd02ca781addebb9d869c2746dbfcbbd4db154.tar.gz
gcc-07bd02ca781addebb9d869c2746dbfcbbd4db154.tar.bz2
*** empty log message ***
From-SVN: r8046
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/sh/sh.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index a841ec9..7aa323f 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -170,6 +170,7 @@ output_stack_adjust (size)
}
}
+
/* Generate code to push the regs specified in the mask, and return
the number of bytes the insns take. */
@@ -462,7 +463,7 @@ synth_constant (operands, mode)
{
rtx dst;
int i = INTVAL (operands[1]) & 0xffffffff;
-
+
if (CONST_OK_FOR_I (i))
return 0;
@@ -536,7 +537,19 @@ synth_constant (operands, mode)
else
return 0;
- if (mode != SImode)
+ if (mode == DImode)
+ {
+ /* Moving from SI to DI, we've got to zero out the high part */
+
+ emit_insn (gen_rtx (SET, VOIDmode,
+ gen_rtx (SUBREG, SImode, operands[0], 0),
+ dst));
+ emit_insn (gen_rtx (SET, VOIDmode,
+ gen_rtx (SUBREG, SImode, operands[0], 1),
+ const0_rtx));
+
+ }
+ else if (mode != SImode)
{
emit_insn (gen_rtx (SET, VOIDmode, operands[0],
gen_rtx (SUBREG, mode, dst, 0)));
@@ -1240,9 +1253,9 @@ add_constant (x, mode)
if (XINT (x, 3) != XINT (pool_vector[i].value, 3))
continue;
}
+ if (rtx_equal_p (x, pool_vector[i].value))
+ return pool_vector[i].label;
}
- if (rtx_equal_p (x, pool_vector[i].value))
- return pool_vector[i].label;
}
/* Need a new one */