[llvm-commits] [llvm] r84710 - in /llvm/trunk/lib/Target/MSP430: AsmPrinter/MSP430AsmPrinter.cpp AsmPrinter/MSP430InstPrinter.cpp AsmPrinter/MSP430InstPrinter.h MSP430InstrInfo.td

Anton Korobeynikov asl at math.spbu.ru
Tue Oct 20 17:13:25 PDT 2009


Author: asl
Date: Tue Oct 20 19:13:25 2009
New Revision: 84710

URL: http://llvm.org/viewvc/llvm-project?rev=84710&view=rev
Log:
Distinguish between pcrel imm operands and 'normal' ones. Fix fixes gross weirdness of asmprinting.

Modified:
    llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp
    llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.cpp
    llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.h
    llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.td

Modified: llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp?rev=84710&r1=84709&r2=84710&view=diff

==============================================================================
--- llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp Tue Oct 20 19:13:25 2009
@@ -65,6 +65,9 @@
     }
     void printOperand(const MachineInstr *MI, int OpNum,
                       const char* Modifier = 0);
+    void printPCRelImmOperand(const MachineInstr *MI, int OpNum) {
+      printOperand(MI, OpNum);
+    }
     void printSrcMemOperand(const MachineInstr *MI, int OpNum,
                             const char* Modifier = 0);
     void printCCOperand(const MachineInstr *MI, int OpNum);

Modified: llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.cpp?rev=84710&r1=84709&r2=84710&view=diff

==============================================================================
--- llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.cpp (original)
+++ llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.cpp Tue Oct 20 19:13:25 2009
@@ -35,6 +35,16 @@
   printInstruction(MI);
 }
 
+void MSP430InstPrinter::printPCRelImmOperand(const MCInst *MI, unsigned OpNo) {
+  const MCOperand &Op = MI->getOperand(OpNo);
+  if (Op.isImm())
+    O << Op.getImm();
+  else {
+    assert(Op.isExpr() && "unknown pcrel immediate operand");
+    Op.getExpr()->print(O, &MAI);
+  }
+}
+
 void MSP430InstPrinter::printOperand(const MCInst *MI, unsigned OpNo,
                                      const char *Modifier) {
   const MCOperand &Op = MI->getOperand(OpNo);
@@ -44,8 +54,7 @@
     O << '#' << Op.getImm();
   } else {
     assert(Op.isExpr() && "unknown operand kind in printOperand");
-    bool isMemOp  = Modifier && !strcmp(Modifier, "mem");
-    O << (isMemOp ? '&' : '#');
+    O << '#';
     Op.getExpr()->print(O, &MAI);
   }
 }
@@ -56,9 +65,10 @@
   const MCOperand &Disp = MI->getOperand(OpNo+1);
 
   // FIXME: move global to displacement field!
-  if (Base.isExpr())
-    printOperand(MI, OpNo, "mem");
-  else if (Disp.isImm() && !Base.isReg())
+  if (Base.isExpr()) {
+    O << '&';
+    Base.getExpr()->print(O, &MAI);
+  } else if (Disp.isImm() && !Base.isReg())
     printOperand(MI, OpNo);
   else if (Base.isReg()) {
     if (Disp.getImm()) {
@@ -74,8 +84,8 @@
     Disp.dump();
     llvm_unreachable("Unsupported memory operand");
   }
-
 }
+
 void MSP430InstPrinter::printCCOperand(const MCInst *MI, unsigned OpNo) {
   unsigned CC = MI->getOperand(OpNo).getImm();
 

Modified: llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.h?rev=84710&r1=84709&r2=84710&view=diff

==============================================================================
--- llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.h (original)
+++ llvm/trunk/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.h Tue Oct 20 19:13:25 2009
@@ -35,10 +35,9 @@
 
     void printOperand(const MCInst *MI, unsigned OpNo,
                       const char *Modifier = 0);
-
+    void printPCRelImmOperand(const MCInst *MI, unsigned OpNo);
     void printSrcMemOperand(const MCInst *MI, unsigned OpNo,
                             const char *Modifier = 0);
-
     void printCCOperand(const MCInst *MI, unsigned OpNo);
 
   };

Modified: llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.td?rev=84710&r1=84709&r2=84710&view=diff

==============================================================================
--- llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.td (original)
+++ llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.td Tue Oct 20 19:13:25 2009
@@ -71,7 +71,9 @@
 }
 
 // Branch targets have OtherVT type.
-def brtarget : Operand<OtherVT>;
+def brtarget : Operand<OtherVT> {
+  let PrintMethod = "printPCRelImmOperand";
+}
 
 // Operand for printing out a condition code.
 def cc : Operand<i8> {





More information about the llvm-commits mailing list