Thank you for your feedback!
> For '}' case, can you simply just add
>
> /* Skip over any character after a percent sign. */
> if (*p == '%' && *(p + 1))
> {
> p += 2;
> continue;
> }
>
> without changing the do-while loop to the while loop?Loop condition (*p++ != '}') must be moved to loop body for it to not execute after "continue" (we just want to skip over % with following character without any other increments or checks). Although, loop form doesn't matter so I changed it back to do-while. > That's not the same thing though. Maksim's code is correct, > although it could certainly be written more clearly. > Maybe something like > > if (*p == '%') > p++; > if (*p) > p++; Fixed. I also noticed that previous patch broke intel (or any alternative) syntax. This was because the original loop: while (*p && *p != '}' && *p++ != '|'); incremented p after '|' is found, but loop in my patch didn't: while (*p && *p != '}' && *p != '|') p += (*p == '%' && *(p + 1)) ? 2 : 1; I fixed it too. Updated patch is attached. Could you please have a look? ChangeLog: 2013-04-03 Maxim Kuznetsov <[email protected]> * final.c (do_assembler_dialects): Don't handle curly braces escaped by % as dialect delimiters. * config/i386/i386.c (ix86_print_operand_punct_valid_p): Add '{' and '}'. (ix86_print_operand): Handle '{' and '}'. testsuite/ChangeLog: 2013-04-03 Maxim Kuznetsov <[email protected]> * gcc.target/i386/asm-dialect-2.c: New testcase. -- Maxim Kuznetsov
curly_braces_20130403.patch
Description: Binary data
