This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
fix 64-bit sign extend problem
- From: Richard Henderson <rth at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 23 Jan 2002 17:18:24 -0800
- Subject: fix 64-bit sign extend problem
We generate an invalid SImode CONST_INT compiling libiberty/regex.c
for m68k with -m5200 from an alpha host.
r~
* expr.c (move_by_pieces_1): Extend size before negation.
Index: expr.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/expr.c,v
retrieving revision 1.413
diff -c -p -d -r1.413 expr.c
*** expr.c 2002/01/12 14:33:18 1.413
--- expr.c 2002/01/24 01:14:22
*************** move_by_pieces_1 (genfun, mode, data)
*** 1575,1583 ****
from1 = adjust_address (data->from, mode, data->offset);
if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0)
! emit_insn (gen_add2_insn (data->to_addr, GEN_INT (-size)));
if (HAVE_PRE_DECREMENT && data->explicit_inc_from < 0)
! emit_insn (gen_add2_insn (data->from_addr, GEN_INT (-size)));
if (data->to)
emit_insn ((*genfun) (to1, from1));
--- 1575,1585 ----
from1 = adjust_address (data->from, mode, data->offset);
if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0)
! emit_insn (gen_add2_insn (data->to_addr,
! GEN_INT (-(HOST_WIDE_INT)size)));
if (HAVE_PRE_DECREMENT && data->explicit_inc_from < 0)
! emit_insn (gen_add2_insn (data->from_addr,
! GEN_INT (-(HOST_WIDE_INT)size)));
if (data->to)
emit_insn ((*genfun) (to1, from1));