aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2005-09-17 11:38:36 -0700
committerRichard Henderson <rth@gcc.gnu.org>2005-09-17 11:38:36 -0700
commit652b0932d7753aec43306dee62e5005492a6cf3c (patch)
tree586ee19cf00f968f147f254400212285835033a4 /gcc/expr.c
parent3fb90446b48b875877c4f09c0085fe59b836bbfe (diff)
downloadgcc-652b0932d7753aec43306dee62e5005492a6cf3c.zip
gcc-652b0932d7753aec43306dee62e5005492a6cf3c.tar.gz
gcc-652b0932d7753aec43306dee62e5005492a6cf3c.tar.bz2
expr.c (emit_move_via_integer): Add force argument, pass it on to emit_move_change_mode.
* expr.c (emit_move_via_integer): Add force argument, pass it on to emit_move_change_mode. Update callers. (emit_move_complex): Pass true to new force argument. * function.c (expand_function_end): Move expand_eh_return call earlier. Merge sub-word complex values into a pseudo before copying to the return hard register. From-SVN: r104371
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 50886bc..e99be6c 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -2812,7 +2812,7 @@ emit_move_change_mode (enum machine_mode new_mode,
emitted, or NULL if such a move could not be generated. */
static rtx
-emit_move_via_integer (enum machine_mode mode, rtx x, rtx y)
+emit_move_via_integer (enum machine_mode mode, rtx x, rtx y, bool force)
{
enum machine_mode imode;
enum insn_code code;
@@ -2827,10 +2827,10 @@ emit_move_via_integer (enum machine_mode mode, rtx x, rtx y)
if (code == CODE_FOR_nothing)
return NULL_RTX;
- x = emit_move_change_mode (imode, mode, x, false);
+ x = emit_move_change_mode (imode, mode, x, force);
if (x == NULL_RTX)
return NULL_RTX;
- y = emit_move_change_mode (imode, mode, y, false);
+ y = emit_move_change_mode (imode, mode, y, force);
if (y == NULL_RTX)
return NULL_RTX;
return emit_insn (GEN_FCN (code) (x, y));
@@ -2973,7 +2973,7 @@ emit_move_complex (enum machine_mode mode, rtx x, rtx y)
return get_last_insn ();
}
- ret = emit_move_via_integer (mode, x, y);
+ ret = emit_move_via_integer (mode, x, y, true);
if (ret)
return ret;
}
@@ -3011,7 +3011,7 @@ emit_move_ccmode (enum machine_mode mode, rtx x, rtx y)
}
/* Otherwise, find the MODE_INT mode of the same width. */
- ret = emit_move_via_integer (mode, x, y);
+ ret = emit_move_via_integer (mode, x, y, false);
gcc_assert (ret != NULL);
return ret;
}
@@ -3119,7 +3119,7 @@ emit_move_insn_1 (rtx x, rtx y)
fits within a HOST_WIDE_INT. */
if (!CONSTANT_P (y) || GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
{
- rtx ret = emit_move_via_integer (mode, x, y);
+ rtx ret = emit_move_via_integer (mode, x, y, false);
if (ret)
return ret;
}