aboutsummaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorMaxim Kuvyrkov <maxim@codesourcery.com>2009-06-01 14:45:18 +0000
committerMaxim Kuvyrkov <mkuvyrkov@gcc.gnu.org>2009-06-01 14:45:18 +0000
commitee88d9aa55398253759a68eba8fec4f05819910a (patch)
tree2159c6df6b397b405dbe18edb1e54b9ddb038a45 /gcc/calls.c
parent324c9b0242c7ea8604f8aa694d75a2e4ba075636 (diff)
downloadgcc-ee88d9aa55398253759a68eba8fec4f05819910a.zip
gcc-ee88d9aa55398253759a68eba8fec4f05819910a.tar.gz
gcc-ee88d9aa55398253759a68eba8fec4f05819910a.tar.bz2
Revert due to PR40320:
2009-06-01 Maxim Kuvyrkov <maxim@codesourcery.com> * calls.c (emit_library_call_value_1): Don't force_operand for move and push insns. From-SVN: r148046
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 0d83ff4..c10b0cd 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -3412,6 +3412,11 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
nargs++;
+ /* Make sure it is a reasonable operand for a move or push insn. */
+ if (!REG_P (addr) && !MEM_P (addr)
+ && ! (CONSTANT_P (addr) && LEGITIMATE_CONSTANT_P (addr)))
+ addr = force_operand (addr, NULL_RTX);
+
argvec[count].value = addr;
argvec[count].mode = Pmode;
argvec[count].partial = 0;
@@ -3447,6 +3452,11 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
gcc_assert (mode != BLKmode
&& (GET_MODE (val) == mode || GET_MODE (val) == VOIDmode));
+ /* Make sure it is a reasonable operand for a move or push insn. */
+ if (!REG_P (val) && !MEM_P (val)
+ && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
+ val = force_operand (val, NULL_RTX);
+
if (pass_by_reference (&args_so_far, mode, NULL_TREE, 1))
{
rtx slot;