summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/m68hc11/m68hc11.c36
2 files changed, 15 insertions, 29 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 38b08bdb2a7..7762083d29c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2005-05-08 Stephane Carrez <stcarrez@nerim.fr>
+
+ PR target/16925
+ * config/m68hc11/m68hc11.c (m68hc11_gen_highpart): Handle split of
+ 64-bit constants on 64-bit hosts.
+ (m68hc11_split_logical): Simplify.
+ (m68hc11_split_move): Likewise.
+
2005-05-08 Nathan Sidwell <nathan@codesourcery.com>
Paolo Bonzini <bonzini@gnu.org>
diff --git a/gcc/config/m68hc11/m68hc11.c b/gcc/config/m68hc11/m68hc11.c
index 06c7e3ec9ae..93fe2c3d9ad 100644
--- a/gcc/config/m68hc11/m68hc11.c
+++ b/gcc/config/m68hc11/m68hc11.c
@@ -1929,6 +1929,10 @@ m68hc11_gen_highpart (enum machine_mode mode, rtx x)
{
return gen_int_mode (val >> 16, HImode);
}
+ else if (mode == SImode)
+ {
+ return gen_int_mode (val >> 32, SImode);
+ }
}
if (mode == QImode && D_REG_P (x))
return gen_rtx_REG (mode, HARD_A_REGNUM);
@@ -2814,15 +2818,7 @@ m68hc11_split_move (rtx to, rtx from, rtx scratch)
high_to = m68hc11_gen_highpart (mode, to);
low_from = m68hc11_gen_lowpart (mode, from);
- if (mode == SImode && GET_CODE (from) == CONST_INT)
- {
- if (INTVAL (from) >= 0)
- high_from = const0_rtx;
- else
- high_from = constm1_rtx;
- }
- else
- high_from = m68hc11_gen_highpart (mode, from);
+ high_from = m68hc11_gen_highpart (mode, from);
if (offset)
{
@@ -3006,26 +3002,8 @@ m68hc11_split_logical (enum machine_mode mode, int code, rtx *operands)
low[2] = m68hc11_gen_lowpart (mode, operands[2]);
high[0] = m68hc11_gen_highpart (mode, operands[0]);
-
- if (mode == SImode && GET_CODE (operands[1]) == CONST_INT)
- {
- if (INTVAL (operands[1]) >= 0)
- high[1] = const0_rtx;
- else
- high[1] = constm1_rtx;
- }
- else
- high[1] = m68hc11_gen_highpart (mode, operands[1]);
-
- if (mode == SImode && GET_CODE (operands[2]) == CONST_INT)
- {
- if (INTVAL (operands[2]) >= 0)
- high[2] = const0_rtx;
- else
- high[2] = constm1_rtx;
- }
- else
- high[2] = m68hc11_gen_highpart (mode, operands[2]);
+ high[1] = m68hc11_gen_highpart (mode, operands[1]);
+ high[2] = m68hc11_gen_highpart (mode, operands[2]);
low[3] = operands[3];
high[3] = operands[3];
OpenPOWER on IntegriCloud