Commit 7abcb63a by Richard Henderson Committed by Richard Henderson

stmt.c (resolve_operand_names): Handle operand modifiers.

        * stmt.c (resolve_operand_names): Handle operand modifiers.

        * gcc.dg/asm-4.c: Test operand modifiers.

From-SVN: r48299
parent 6be2e1f8
2001-12-23 Richard Henderson <rth@redhat.com> 2001-12-23 Richard Henderson <rth@redhat.com>
* stmt.c (resolve_operand_names): Handle operand modifiers.
2001-12-23 Richard Henderson <rth@redhat.com>
* stmt.c (parse_input_constraint): Break out from ... * stmt.c (parse_input_constraint): Break out from ...
(expand_asm_operands): ... here. Loop over the operands twice, (expand_asm_operands): ... here. Loop over the operands twice,
the first time only calling mark_addressable. Correct and simplify the first time only calling mark_addressable. Correct and simplify
......
...@@ -2080,8 +2080,16 @@ resolve_operand_names (string, outputs, inputs, pconstraints) ...@@ -2080,8 +2080,16 @@ resolve_operand_names (string, outputs, inputs, pconstraints)
p = buffer; p = buffer;
while ((p = strchr (p, '%')) != NULL) while ((p = strchr (p, '%')) != NULL)
{ {
if (*++p != '[') if (p[1] == '[')
p += 1;
else if (ISALPHA (p[1]) && p[2] == '[')
p += 2;
else
{
p += 1;
continue; continue;
}
p = resolve_operand_name_1 (p, outputs, inputs); p = resolve_operand_name_1 (p, outputs, inputs);
} }
......
2001-12-23 Richard Henderson <rth@redhat.com> 2001-12-23 Richard Henderson <rth@redhat.com>
* gcc.dg/asm-4.c: Test operand modifiers.
2001-12-23 Richard Henderson <rth@redhat.com>
* gcc.c-torture/execute/20011219-1.c (main): Make "i" a long. * gcc.c-torture/execute/20011219-1.c (main): Make "i" a long.
2001-12-23 Joseph S. Myers <jsm28@cam.ac.uk> 2001-12-23 Joseph S. Myers <jsm28@cam.ac.uk>
......
...@@ -3,12 +3,14 @@ ...@@ -3,12 +3,14 @@
int main() int main()
{ {
int x; int x, y, z;
asm volatile ("test0 X%0Y%[arg]Z" : [arg] "=g" (x)); asm volatile ("test0 X%0Y%[arg]Z" : [arg] "=g" (x));
asm volatile ("test1 X%[out]Y%[in]Z" : [out] "=g" (x) : [in] "0"(x)); asm volatile ("test1 X%[out]Y%[in]Z" : [out] "=g" (y) : [in] "0"(y));
asm volatile ("test2 X%a0Y%a[arg]Z" : : [arg] "p" (&z));
} }
/* ??? Someone explain why the back reference dosn't work. */ /* ??? Someone explain why the back reference dosn't work. */
/* { dontdg-final { scan-assembler "test0 X(.*)Y\1Z" } } */ /* { dontdg-final { scan-assembler "test0 X(.*)Y\1Z" } } */
/* { dontdg-final { scan-assembler "test1 X(.*)Y\1Z" } } */ /* { dontdg-final { scan-assembler "test1 X(.*)Y\1Z" } } */
/* { dontdg-final { scan-assembler "test2 X(.*)Y\1Z" } } */
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