Commit 3fbd5c2c by Richard Henderson Committed by Richard Henderson

* stmt.c (expand_asm_operands): Accept `=' or `+' at any position.

From-SVN: r23356
parent 386c8529
Mon Oct 26 13:32:31 1998 Richard Henderson <rth@cygnus.com>
* stmt.c (expand_asm_operands): Accept `=' or `+' at any position.
Mon Oct 26 12:53:14 1998 Jeffrey A Law (law@cygnus.com) Mon Oct 26 12:53:14 1998 Jeffrey A Law (law@cygnus.com)
* tm.texi (ASM_OUTPUT_MAX_SKIP_ALIGN): Document. * tm.texi (ASM_OUTPUT_MAX_SKIP_ALIGN): Document.
......
...@@ -1230,6 +1230,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) ...@@ -1230,6 +1230,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
tree val = TREE_VALUE (tail); tree val = TREE_VALUE (tail);
tree type = TREE_TYPE (val); tree type = TREE_TYPE (val);
char *constraint; char *constraint;
char *p;
int c_len; int c_len;
int j; int j;
int is_inout = 0; int is_inout = 0;
...@@ -1247,13 +1248,31 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) ...@@ -1247,13 +1248,31 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
c_len = TREE_STRING_LENGTH (TREE_PURPOSE (tail)) - 1; c_len = TREE_STRING_LENGTH (TREE_PURPOSE (tail)) - 1;
constraint = TREE_STRING_POINTER (TREE_PURPOSE (tail)); constraint = TREE_STRING_POINTER (TREE_PURPOSE (tail));
if (c_len == 0 /* Allow the `=' or `+' to not be at the beginning of the string,
|| (constraint[0] != '=' && constraint[0] != '+')) since it wasn't explicitly documented that way, and there is a
large body of code that puts it last. Swap the character to
the front, so as not to uglify any place else. */
switch (c_len)
{ {
default:
if ((p = strchr (constraint, '=')) != NULL)
break;
if ((p = strchr (constraint, '+')) != NULL)
break;
case 0:
error ("output operand constraint lacks `='"); error ("output operand constraint lacks `='");
return; return;
} }
if (p != constraint)
{
j = *p;
bcopy (constraint, constraint+1, p-constraint);
*constraint = j;
warning ("output constraint `%c' for operand %d is not at the beginning", j, i);
}
is_inout = constraint[0] == '+'; is_inout = constraint[0] == '+';
/* Replace '+' with '='. */ /* Replace '+' with '='. */
constraint[0] = '='; constraint[0] = '=';
......
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