> There are two parts to it: the actual print_operand thing, that I say
> should be target-specific, since some targets already use those characters
> to mean different things; and of course the assembler dialects code needs
> to be fixed to not choke on escaped versions of the characters it is
> looking for. I say you can do this second thing without special-casing
> { | }, making it more generic and cleaner and simpler.
>>> For the logic to find the end of an alternative, you can simply always
>>> skip over the next char after any percent sign (well, check for end of
>>> string, of course); there is no need to count percent signs.
>>
>>
>> That would not be a general approach. %% stands for printing percent
>> sign, so in assembler string "{%%}" closing curly brace should be
>> handled as the end of an alternative, though it follows a percent
>> sign.
>
>
> The second % is skipped over.
Thanks for the explanation, now I understand it. I fixed the patch
according to your remarks. I removed %| support since we don't
actually need it in i386 right now, it was added for the purpose of
possible generalization.
Updated patch is attached.
ChangeLog:
2012-11-14 Maxim Kuznetsov <[email protected]>
* final.c (do_assembler_dialects): Don't handle curly braces and
vertical bar escaped by % as dialect delimiters.
* config/i386/i386.c (ix86_print_operand_punct_valid_p): Add '{' and
'}'.
(ix86_print_operand): Handle '{' and '}'.
testsuite/ChangeLog:
2012-11-14 Maxim Kuznetsov <[email protected]>
* gcc.target/i386/asm-dialect-2.c: New testcase.
--
Maxim Kuznetsov
curly_braces.patch
Description: Binary data
