[llvm-commits] CVS: llvm/lib/CodeGen/AsmPrinter.cpp

Chris Lattner lattner at cs.uiuc.edu
Mon Feb 6 14:17:35 PST 2006



Changes in directory llvm/lib/CodeGen:

AsmPrinter.cpp updated: 1.47 -> 1.48
---
Log message:

Add support for modifier characters to operand printers


---
Diffs of the changes:  (+21 -2)

 AsmPrinter.cpp |   23 +++++++++++++++++++++--
 1 files changed, 21 insertions(+), 2 deletions(-)


Index: llvm/lib/CodeGen/AsmPrinter.cpp
diff -u llvm/lib/CodeGen/AsmPrinter.cpp:1.47 llvm/lib/CodeGen/AsmPrinter.cpp:1.48
--- llvm/lib/CodeGen/AsmPrinter.cpp:1.47	Sat Feb  4 19:46:49 2006
+++ llvm/lib/CodeGen/AsmPrinter.cpp	Mon Feb  6 16:17:23 2006
@@ -538,7 +538,23 @@
       }
       LastEmitted = IDEnd;
       
+      char Modifier[2] = { 0, 0 };
+      
       if (HasCurlyBraces) {
+        // If we have curly braces, check for a modifier character.  This
+        // supports syntax like ${0:u}, which correspond to "%u0" in GCC asm.
+        if (*LastEmitted == ':') {
+          ++LastEmitted;    // Consume ':' character.
+          if (*LastEmitted == 0) {
+            std::cerr << "Bad ${:} expression in inline asm string: '" 
+                      << AsmStr << "'\n";
+            exit(1);
+          }
+          
+          Modifier[0] = *LastEmitted;
+          ++LastEmitted;    // Consume modifier character.
+        }
+        
         if (*LastEmitted != '}') {
           std::cerr << "Bad ${} expression in inline asm string: '" 
                     << AsmStr << "'\n";
@@ -553,11 +569,14 @@
         exit(1);
       }
       
+      char ExtraCode = 0;  // FIXME:
+      
       // Okay, we finally have an operand number.  Ask the target to print this
       // operand!
       if (CurVariant == -1 || CurVariant == AsmPrinterVariant)
         if (const_cast<AsmPrinter*>(this)->
-                PrintAsmOperand(MI, Val+1, AsmPrinterVariant)) {
+                PrintAsmOperand(MI, Val+1, AsmPrinterVariant,
+                                Modifier[0] ? Modifier : 0)) {
           std::cerr << "Invalid operand found in inline asm: '"
                     << AsmStr << "'\n";
           MI->dump();
@@ -601,7 +620,7 @@
 /// instruction, using the specified assembler variant.  Targets should
 /// overried this to format as appropriate.
 bool AsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
-                                 unsigned AsmVariant) {
+                                 unsigned AsmVariant, const char *ExtraCode) {
   // Target doesn't support this yet!
   return true;
 }






More information about the llvm-commits mailing list