Commit a0cd568f by Stephane Carrez Committed by Stephane Carrez

re PR target/16925 (ICE when building a m68hc11 cross-compiler on 64-bit architectures)

	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.

From-SVN: r99388
parent 232b67d9
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> 2005-05-08 Nathan Sidwell <nathan@codesourcery.com>
Paolo Bonzini <bonzini@gnu.org> Paolo Bonzini <bonzini@gnu.org>
......
...@@ -1929,6 +1929,10 @@ m68hc11_gen_highpart (enum machine_mode mode, rtx x) ...@@ -1929,6 +1929,10 @@ m68hc11_gen_highpart (enum machine_mode mode, rtx x)
{ {
return gen_int_mode (val >> 16, HImode); 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)) if (mode == QImode && D_REG_P (x))
return gen_rtx_REG (mode, HARD_A_REGNUM); return gen_rtx_REG (mode, HARD_A_REGNUM);
...@@ -2814,15 +2818,7 @@ m68hc11_split_move (rtx to, rtx from, rtx scratch) ...@@ -2814,15 +2818,7 @@ m68hc11_split_move (rtx to, rtx from, rtx scratch)
high_to = m68hc11_gen_highpart (mode, to); high_to = m68hc11_gen_highpart (mode, to);
low_from = m68hc11_gen_lowpart (mode, from); low_from = m68hc11_gen_lowpart (mode, from);
if (mode == SImode && GET_CODE (from) == CONST_INT) high_from = m68hc11_gen_highpart (mode, from);
{
if (INTVAL (from) >= 0)
high_from = const0_rtx;
else
high_from = constm1_rtx;
}
else
high_from = m68hc11_gen_highpart (mode, from);
if (offset) if (offset)
{ {
...@@ -3006,26 +3002,8 @@ m68hc11_split_logical (enum machine_mode mode, int code, rtx *operands) ...@@ -3006,26 +3002,8 @@ m68hc11_split_logical (enum machine_mode mode, int code, rtx *operands)
low[2] = m68hc11_gen_lowpart (mode, operands[2]); low[2] = m68hc11_gen_lowpart (mode, operands[2]);
high[0] = m68hc11_gen_highpart (mode, operands[0]); high[0] = m68hc11_gen_highpart (mode, operands[0]);
high[1] = m68hc11_gen_highpart (mode, operands[1]);
if (mode == SImode && GET_CODE (operands[1]) == CONST_INT) high[2] = m68hc11_gen_highpart (mode, operands[2]);
{
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]);
low[3] = operands[3]; low[3] = operands[3];
high[3] = operands[3]; high[3] = operands[3];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment