Changes in directory llvm/lib/CodeGen:
AsmPrinter.cpp updated: 1.102 -> 1.103 --- Log message: Use $( $| $) to represent alternatives in asm blocks instead of {|}. This is needed to support targets where {|} aren't special symbols. --- Diffs of the changes: (+34 -28) AsmPrinter.cpp | 62 +++++++++++++++++++++++++++++++-------------------------- 1 files changed, 34 insertions(+), 28 deletions(-) Index: llvm/lib/CodeGen/AsmPrinter.cpp diff -u llvm/lib/CodeGen/AsmPrinter.cpp:1.102 llvm/lib/CodeGen/AsmPrinter.cpp:1.103 --- llvm/lib/CodeGen/AsmPrinter.cpp:1.102 Thu Sep 28 18:17:41 2006 +++ llvm/lib/CodeGen/AsmPrinter.cpp Tue Oct 3 18:27:09 2006 @@ -694,12 +694,45 @@ break; case '$': { ++LastEmitted; // Consume '$' character. - if (*LastEmitted == '$') { // $$ -> $ + bool Done = true; + + // Handle escapes. + switch (*LastEmitted) { + default: Done = false; break; + case '$': // $$ -> $ if (CurVariant == -1 || CurVariant == AsmPrinterVariant) O << '$'; ++LastEmitted; // Consume second '$' character. break; + case '(': // $( -> same as GCC's { character. + ++LastEmitted; // Consume '(' character. + if (CurVariant != -1) { + std::cerr << "Nested variants found in inline asm string: '" + << AsmStr << "'\n"; + exit(1); + } + CurVariant = 0; // We're in the first variant now. + break; + case '|': + ++LastEmitted; // consume '|' character. + if (CurVariant == -1) { + std::cerr << "Found '|' character outside of variant in inline asm " + << "string: '" << AsmStr << "'\n"; + exit(1); + } + ++CurVariant; // We're in the next variant. + break; + case ')': // $) -> same as GCC's } char. + ++LastEmitted; // consume ')' character. + if (CurVariant == -1) { + std::cerr << "Found '}' character outside of variant in inline asm " + << "string: '" << AsmStr << "'\n"; + exit(1); + } + CurVariant = -1; + break; } + if (Done) break; bool HasCurlyBraces = false; if (*LastEmitted == '{') { // ${variable} @@ -786,33 +819,6 @@ } break; } - case '{': - ++LastEmitted; // Consume '{' character. - if (CurVariant != -1) { - std::cerr << "Nested variants found in inline asm string: '" - << AsmStr << "'\n"; - exit(1); - } - CurVariant = 0; // We're in the first variant now. - break; - case '|': - ++LastEmitted; // consume '|' character. - if (CurVariant == -1) { - std::cerr << "Found '|' character outside of variant in inline asm " - << "string: '" << AsmStr << "'\n"; - exit(1); - } - ++CurVariant; // We're in the next variant. - break; - case '}': - ++LastEmitted; // consume '}' character. - if (CurVariant == -1) { - std::cerr << "Found '}' character outside of variant in inline asm " - << "string: '" << AsmStr << "'\n"; - exit(1); - } - CurVariant = -1; - break; } } O << "\n\t" << TAI->getInlineAsmEnd() << "\n"; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits