Commit bc2f7bb8 by Roman Zippel Committed by Matthias Klose

m68k.c (output_move_qimode): Abort on an attempt to generate code which is generated by pushqi1 now

2004-07-15  Roman Zippel  <zippel@linux-m68k.org>

        * config/m68k/m68k.c (output_move_qimode): Abort on an attempt to
        generate code which is generated by pushqi1 now
        * config/m68k/m68k.h (MOVE_BY_PIECES_P): Remove.

From-SVN: r84780
parent 8abcb0f7
2004-07-15 Roman Zippel <zippel@linux-m68k.org> 2004-07-15 Roman Zippel <zippel@linux-m68k.org>
* config/m68k/m68k.c (output_move_qimode): Abort on an attempt to
generate code which is generated by pushqi1 now
* config/m68k/m68k.h (MOVE_BY_PIECES_P): Remove.
2004-07-15 Roman Zippel <zippel@linux-m68k.org>
* combine.c (simplify_set): match the mode of the constant 0 with * combine.c (simplify_set): match the mode of the constant 0 with
the tested operand to match the compare behaviour and the the tested operand to match the compare behaviour and the
simplify_relational_operation() expectation. simplify_relational_operation() expectation.
......
...@@ -1780,10 +1780,6 @@ output_move_himode (rtx *operands) ...@@ -1780,10 +1780,6 @@ output_move_himode (rtx *operands)
const char * const char *
output_move_qimode (rtx *operands) output_move_qimode (rtx *operands)
{ {
rtx xoperands[4];
/* This is probably useless, since it loses for pushing a struct
of several bytes a byte at a time. */
/* 68k family always modifies the stack pointer by at least 2, even for /* 68k family always modifies the stack pointer by at least 2, even for
byte pushes. The 5200 (ColdFire) does not do this. */ byte pushes. The 5200 (ColdFire) does not do this. */
if (GET_CODE (operands[0]) == MEM if (GET_CODE (operands[0]) == MEM
...@@ -1791,22 +1787,8 @@ output_move_qimode (rtx *operands) ...@@ -1791,22 +1787,8 @@ output_move_qimode (rtx *operands)
&& XEXP (XEXP (operands[0], 0), 0) == stack_pointer_rtx && XEXP (XEXP (operands[0], 0), 0) == stack_pointer_rtx
&& ! ADDRESS_REG_P (operands[1]) && ! ADDRESS_REG_P (operands[1])
&& ! TARGET_COLDFIRE) && ! TARGET_COLDFIRE)
{ /* generated by pushqi1 pattern now */
xoperands[1] = operands[1]; abort ();
xoperands[2]
= gen_rtx_MEM (QImode,
gen_rtx_PLUS (VOIDmode, stack_pointer_rtx, const1_rtx));
/* Just pushing a byte puts it in the high byte of the halfword. */
/* We must put it in the low-order, high-numbered byte. */
if (!reg_mentioned_p (stack_pointer_rtx, operands[1]))
{
xoperands[3] = stack_pointer_rtx;
output_asm_insn ("subq%.l #2,%3\n\tmove%.b %1,%2", xoperands);
}
else
output_asm_insn ("move%.b %1,%-\n\tmove%.b %@,%2", xoperands);
return "";
}
/* clr and st insns on 68000 read before writing. /* clr and st insns on 68000 read before writing.
This isn't so on the 68010, but we have no TARGET_68010. */ This isn't so on the 68010, but we have no TARGET_68010. */
......
...@@ -675,11 +675,6 @@ extern enum reg_class regno_reg_class[]; ...@@ -675,11 +675,6 @@ extern enum reg_class regno_reg_class[];
On the ColdFire, sp@- in a byte insn pushes just a byte. */ On the ColdFire, sp@- in a byte insn pushes just a byte. */
#define PUSH_ROUNDING(BYTES) (TARGET_COLDFIRE ? BYTES : ((BYTES) + 1) & ~1) #define PUSH_ROUNDING(BYTES) (TARGET_COLDFIRE ? BYTES : ((BYTES) + 1) & ~1)
/* We want to avoid trying to push bytes. */
#define MOVE_BY_PIECES_P(SIZE, ALIGN) \
(move_by_pieces_ninsns (SIZE, ALIGN) < MOVE_RATIO \
&& (((SIZE) >=16 && (ALIGN) >= 16) || (TARGET_COLDFIRE)))
#define FIRST_PARM_OFFSET(FNDECL) 8 #define FIRST_PARM_OFFSET(FNDECL) 8
/* On the 68000, the RTS insn cannot pop anything. /* On the 68000, the RTS insn cannot pop anything.
......
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