Commit 2e2ed7d2 by Bernd Schmidt Committed by Bernd Schmidt

Fix c/2728

From-SVN: r42195
parent 8d2b6116
2001-05-17 Bernd Schmidt <bernds@redhat.com>
* stmt.c (expand_asm_operands): For inout operands, make sure
the substitution of '=' for '+' makes it into the rtl.
2001-05-17 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> 2001-05-17 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
* gcc.texi (gccbug): Refer to the web pages for detailed information * gcc.texi (gccbug): Refer to the web pages for detailed information
......
...@@ -1328,6 +1328,8 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) ...@@ -1328,6 +1328,8 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
rtx *real_output_rtx = (rtx *) alloca (noutputs * sizeof (rtx)); rtx *real_output_rtx = (rtx *) alloca (noutputs * sizeof (rtx));
enum machine_mode *inout_mode enum machine_mode *inout_mode
= (enum machine_mode *) alloca (noutputs * sizeof (enum machine_mode)); = (enum machine_mode *) alloca (noutputs * sizeof (enum machine_mode));
const char **output_constraints
= alloca (noutputs * sizeof (const char *));
/* The insn we have emitted. */ /* The insn we have emitted. */
rtx insn; rtx insn;
int old_generating_concat_p = generating_concat_p; int old_generating_concat_p = generating_concat_p;
...@@ -1426,6 +1428,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) ...@@ -1426,6 +1428,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
message. */ message. */
constraint = TREE_STRING_POINTER (TREE_PURPOSE (tail)); constraint = TREE_STRING_POINTER (TREE_PURPOSE (tail));
output_constraints[i] = constraint;
c_len = strlen (constraint); c_len = strlen (constraint);
/* Allow the `=' or `+' to not be at the beginning of the string, /* Allow the `=' or `+' to not be at the beginning of the string,
...@@ -1455,6 +1458,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) ...@@ -1455,6 +1458,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
memcpy (buf + 1, constraint, j); memcpy (buf + 1, constraint, j);
memcpy (buf + 1 + j, p + 1, c_len - j); /* not -j-1 - copy null */ memcpy (buf + 1 + j, p + 1, c_len - j); /* not -j-1 - copy null */
constraint = ggc_alloc_string (buf, c_len); constraint = ggc_alloc_string (buf, c_len);
output_constraints[i] = constraint;
if (j) if (j)
warning ( warning (
...@@ -1824,7 +1828,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) ...@@ -1824,7 +1828,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
if (noutputs == 1 && nclobbers == 0) if (noutputs == 1 && nclobbers == 0)
{ {
ASM_OPERANDS_OUTPUT_CONSTRAINT (body) ASM_OPERANDS_OUTPUT_CONSTRAINT (body)
= TREE_STRING_POINTER (TREE_PURPOSE (outputs)); = output_constraints[0];
insn = emit_insn (gen_rtx_SET (VOIDmode, output_rtx[0], body)); insn = emit_insn (gen_rtx_SET (VOIDmode, output_rtx[0], body));
} }
...@@ -1853,7 +1857,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) ...@@ -1853,7 +1857,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
gen_rtx_ASM_OPERANDS gen_rtx_ASM_OPERANDS
(GET_MODE (output_rtx[i]), (GET_MODE (output_rtx[i]),
TREE_STRING_POINTER (string), TREE_STRING_POINTER (string),
TREE_STRING_POINTER (TREE_PURPOSE (tail)), output_constraints[i],
i, argvec, constraints, i, argvec, constraints,
filename, line)); filename, line));
......
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