diff options
author | Richard Henderson <rth@redhat.com> | 2005-09-17 11:38:36 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2005-09-17 11:38:36 -0700 |
commit | 652b0932d7753aec43306dee62e5005492a6cf3c (patch) | |
tree | 586ee19cf00f968f147f254400212285835033a4 /gcc/expr.c | |
parent | 3fb90446b48b875877c4f09c0085fe59b836bbfe (diff) | |
download | gcc-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.c | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -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; } |