Ping 2013/4/3 Maksim Kuznetsov <maks.kuznet...@gmail.com>: > 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 <maks.kuznet...@gmail.com> > > * 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 <maks.kuznet...@gmail.com> > > * gcc.target/i386/asm-dialect-2.c: New testcase. > > -- > Maxim Kuznetsov
-- Maxim Kuznetsov