wire up some basic printOperand goodness, giving us stuff like this before
authorChris Lattner <sabre@nondot.org>
Mon, 19 Oct 2009 20:59:55 +0000 (20:59 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 19 Oct 2009 20:59:55 +0000 (20:59 +0000)
we abort:

_main:
stm ,
mov r7, sp
sub sp, sp,
mov r0,
str r0,

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84532 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp
lib/Target/ARM/AsmPrinter/ARMInstPrinter.h

index 1d81869dd213f564d4b16874eee1132fa5c9ef57..ec26b26330e3a0d845b61a83718c39502556d44d 100644 (file)
@@ -310,25 +310,25 @@ void ARMAsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
                                  const char *Modifier) {
   const MachineOperand &MO = MI->getOperand(OpNum);
   switch (MO.getType()) {
+  default:
+    assert(0 && "<unknown operand type>");
   case MachineOperand::MO_Register: {
     unsigned Reg = MO.getReg();
-    if (TargetRegisterInfo::isPhysicalRegister(Reg)) {
-      if (Modifier && strcmp(Modifier, "dregpair") == 0) {
-        unsigned DRegLo = TRI->getSubReg(Reg, 5); // arm_dsubreg_0
-        unsigned DRegHi = TRI->getSubReg(Reg, 6); // arm_dsubreg_1
-        O << '{'
-          << getRegisterName(DRegLo) << ',' << getRegisterName(DRegHi)
-          << '}';
-      } else if (Modifier && strcmp(Modifier, "lane") == 0) {
-        unsigned RegNum = ARMRegisterInfo::getRegisterNumbering(Reg);
-        unsigned DReg = TRI->getMatchingSuperReg(Reg, RegNum & 1 ? 2 : 1,
-                                                 &ARM::DPR_VFP2RegClass);
-        O << getRegisterName(DReg) << '[' << (RegNum & 1) << ']';
-      } else {
-        O << getRegisterName(Reg);
-      }
-    } else
-      llvm_unreachable("not implemented");
+    assert(TargetRegisterInfo::isPhysicalRegister(Reg));
+    if (Modifier && strcmp(Modifier, "dregpair") == 0) {
+      unsigned DRegLo = TRI->getSubReg(Reg, 5); // arm_dsubreg_0
+      unsigned DRegHi = TRI->getSubReg(Reg, 6); // arm_dsubreg_1
+      O << '{'
+        << getRegisterName(DRegLo) << ',' << getRegisterName(DRegHi)
+        << '}';
+    } else if (Modifier && strcmp(Modifier, "lane") == 0) {
+      unsigned RegNum = ARMRegisterInfo::getRegisterNumbering(Reg);
+      unsigned DReg = TRI->getMatchingSuperReg(Reg, RegNum & 1 ? 2 : 1,
+                                               &ARM::DPR_VFP2RegClass);
+      O << getRegisterName(DReg) << '[' << (RegNum & 1) << ']';
+    } else {
+      O << getRegisterName(Reg);
+    }
     break;
   }
   case MachineOperand::MO_Immediate: {
@@ -376,8 +376,6 @@ void ARMAsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
     O << MAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
       << '_' << MO.getIndex();
     break;
-  default:
-    O << "<unknown operand type>"; abort (); break;
   }
 }
 
index 6a3759da6eb502249eb812862eac4766f50e7c91..fc1e53f38752b9850799d50b7a4ea54fe9206c22 100644 (file)
@@ -31,3 +31,19 @@ using namespace llvm;
 
 void ARMInstPrinter::printInst(const MCInst *MI) { printInstruction(MI); }
 
+void ARMInstPrinter::printOperand(const MCInst *MI, unsigned OpNo,
+                                  const char *Modifier) {
+  assert((Modifier == 0 || Modifier[0] == 0) && "Cannot print modifiers");
+  
+  const MCOperand &Op = MI->getOperand(OpNo);
+  if (Op.isReg()) {
+    O << getRegisterName(Op.getReg());
+  } else if (Op.isImm()) {
+    O << '#' << Op.getImm();
+  } else {
+    assert(Op.isExpr() && "unknown operand kind in printOperand");
+    assert(0 && "UNIMP");
+    //O << '$';
+    //Op.getExpr()->print(O, &MAI);
+  }
+}
index 15ce3b9bc302162b7ea30f66ce9563aded24cc45..9c4355fc29b42fe0dc7d55b040acb5c8e6472315 100644 (file)
@@ -31,7 +31,7 @@ public:
 
 
   void printOperand(const MCInst *MI, unsigned OpNo,
-                    const char *Modifier = 0) {}
+                    const char *Modifier = 0);
     
   void printSOImmOperand(const MCInst *MI, unsigned OpNum) {}
   void printSOImm2PartOperand(const MCInst *MI, unsigned OpNum) {}