PATCH middle-end: handle decimal float moves
Ben Elliston
bje@au1.ibm.com
Mon Jan 9 23:20:00 GMT 2006
This patch, originally suggested by Geoff Keating, emits moves for
decimal float modes using the existing integer mode moves, eliminating
the need for mov?d patterns in the machine descriptions.
Bootstrapping and regression testing on powerpc-unknown-linux-gnu is
currently underway. Okay for the trunk, provided testing succeeds?
:ADDPATCH middle-end:
2006-01-10 Ben Elliston <bje@au.ibm.com>
* expr.c (emit_move_change_mode): Always adjust addresses, not
just during reload. Copy replacements only during reload.
(emit_move_insn_1): Move MODE_DECIMAL_FLOAT modes by invoking
emit_move_via_integer.
Index: expr.c
===================================================================
--- expr.c (revision 109509)
+++ expr.c (working copy)
@@ -1,6 +1,7 @@
/* Convert tree expression to rtl instructions, for GNU compiler.
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+ Inc.
This file is part of GCC.
@@ -2783,7 +2784,7 @@ emit_move_change_mode (enum machine_mode
{
rtx ret;
- if (reload_in_progress && MEM_P (x))
+ if (MEM_P (x))
{
/* We can't use gen_lowpart here because it may call change_address
which is not appropriate if we were called when a reload was in
@@ -2791,9 +2792,9 @@ emit_move_change_mode (enum machine_mode
the size in bytes is supposed to be the same. Copy the MEM to
change the mode and move any substitutions from the old MEM to
the new one. */
-
ret = adjust_address_nv (x, new_mode, 0);
- copy_replacements (x, ret);
+ if (reload_in_progress)
+ copy_replacements (x, ret);
}
else
{
@@ -3128,6 +3129,9 @@ emit_move_insn_1 (rtx x, rtx y)
if (COMPLEX_MODE_P (mode))
return emit_move_complex (mode, x, y);
+ if (GET_MODE_CLASS (mode) == MODE_DECIMAL_FLOAT)
+ return emit_move_via_integer (mode, x, y, false);
+
if (GET_MODE_CLASS (mode) == MODE_CC)
return emit_move_ccmode (mode, x, y);
More information about the Gcc-patches
mailing list