Commit 11579f33 by Andreas Jaeger Committed by Andreas Jaeger

Revert last patch from Richard Henderson.

From-SVN: r52029
parent 62afca26
2002-04-08 Andreas Jaeger <aj@suse.de>
* stmt.c (expand_asm_operands): Revert last patch from Richard
Henderson.
2002-04-08 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> 2002-04-08 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
* doc/contrib.texi (Contributors): Add John David Anglin and Loren * doc/contrib.texi (Contributors): Add John David Anglin and Loren
......
...@@ -1740,48 +1740,25 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) ...@@ -1740,48 +1740,25 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
&& (allows_mem || GET_CODE (DECL_RTL (val)) == REG) && (allows_mem || GET_CODE (DECL_RTL (val)) == REG)
&& ! (GET_CODE (DECL_RTL (val)) == REG && ! (GET_CODE (DECL_RTL (val)) == REG
&& GET_MODE (DECL_RTL (val)) != TYPE_MODE (type))) && GET_MODE (DECL_RTL (val)) != TYPE_MODE (type)))
|| ! allows_reg
|| is_inout) || is_inout)
{ {
enum { do_not_copy, do_copy_reg, do_copy_mem } do_copy; output_rtx[i] = expand_expr (val, NULL_RTX, VOIDmode, EXPAND_WRITE);
rtx op;
op = expand_expr (val, NULL_RTX, VOIDmode, EXPAND_WRITE); if (! allows_reg && GET_CODE (output_rtx[i]) != MEM)
output_rtx[i] = op;
if (! allows_reg && GET_CODE (op) != MEM)
error ("output number %d not directly addressable", i); error ("output number %d not directly addressable", i);
if ((! allows_mem && GET_CODE (output_rtx[i]) == MEM)
do_copy = do_not_copy; || GET_CODE (output_rtx[i]) == CONCAT)
if (! allows_mem && GET_CODE (op) == MEM)
do_copy = do_copy_reg;
else if (GET_CODE (op) == CONCAT)
do_copy = do_copy_reg;
else if (asm_operand_ok (op, constraints[i]) <= 0)
{
if (allows_reg && !register_operand (op, VOIDmode))
do_copy = do_copy_reg;
else if (allows_mem && GET_CODE (op) != MEM)
do_copy = do_copy_mem;
else
warning ("asm operand %d probably doesn't match constraints", i);
}
if (do_copy == do_copy_reg)
{
real_output_rtx[i] = protect_from_queue (op, 1);
output_rtx[i] = gen_reg_rtx (GET_MODE (op));
}
else if (do_copy == do_copy_mem)
{ {
real_output_rtx[i] = op; real_output_rtx[i] = protect_from_queue (output_rtx[i], 1);
output_rtx[i] = assign_temp (type, 0, 1, 1); output_rtx[i] = gen_reg_rtx (GET_MODE (output_rtx[i]));
if (is_inout)
emit_move_insn (output_rtx[i], real_output_rtx[i]);
} }
if (do_copy && is_inout)
emit_move_insn (output_rtx[i], real_output_rtx[i]);
} }
else else
{ {
output_rtx[i] = assign_temp (type, 0, !allows_reg, 1); output_rtx[i] = assign_temp (type, 0, 0, 1);
TREE_VALUE (tail) = make_tree (type, output_rtx[i]); TREE_VALUE (tail) = make_tree (type, output_rtx[i]);
} }
...@@ -1835,9 +1812,9 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) ...@@ -1835,9 +1812,9 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
if (asm_operand_ok (op, constraint) <= 0) if (asm_operand_ok (op, constraint) <= 0)
{ {
if (allows_reg && !register_operand (op, VOIDmode)) if (allows_reg)
op = force_reg (TYPE_MODE (type), op); op = force_reg (TYPE_MODE (type), op);
else if (!allows_mem || GET_CODE (op) == MEM) else if (!allows_mem)
warning ("asm operand %d probably doesn't match constraints", warning ("asm operand %d probably doesn't match constraints",
i + noutputs); i + noutputs);
else if (CONSTANT_P (op)) else if (CONSTANT_P (op))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment