This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
obvious split_long_move x86_64 fix
- To: patches at x86-64 dot org, gcc-patches at gcc dot gnu dot org
- Subject: obvious split_long_move x86_64 fix
- From: Jan Hubicka <jh at suse dot cz>
- Date: Thu, 5 Apr 2001 18:58:48 +0200
Hi,
I've installed as obvious. The change_address don't work on push operands - this
is just copy of equivalent code in split_to_parts.
It didn't get caught earlier, since we had 16 FP passing registers that was apparently
enought for absolutely everything.
Honza
Thu Apr 5 13:48:49 CEST 2001 Jan Hubicka <jh@suse.cz>
* i386.c (ix86_split_long_move): Use PUT_MODE instead of change_address.
Index: i386.c
===================================================================
RCS file: /home/cvs/Repository/gcc/gcc/config/i386/i386.c,v
retrieving revision 1.53
diff -c -3 -p -r1.53 i386.c
*** i386.c 2001/04/04 11:57:08 1.53
--- i386.c 2001/04/05 11:47:05
*************** ix86_split_long_move (operands)
*** 7980,7986 ****
&& CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0)))
operands[1] = get_pool_constant (XEXP (operands[1], 0));
if (push_operand (operands[0], VOIDmode))
! operands[0] = change_address (operands[0], DImode, XEXP (operands[0], 0));
else
operands[0] = gen_lowpart (DImode, operands[0]);
operands[1] = gen_lowpart (DImode, operands[1]);
--- 7978,7987 ----
&& CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0)))
operands[1] = get_pool_constant (XEXP (operands[1], 0));
if (push_operand (operands[0], VOIDmode))
! {
! operands[0] = copy_rtx (operands[0]);
! PUT_MODE (operands[0], Pmode);
! }
else
operands[0] = gen_lowpart (DImode, operands[0]);
operands[1] = gen_lowpart (DImode, operands[1]);