Basic support for mem=>reg moves

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70723 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/MSP430/MSP430AsmPrinter.cpp b/lib/Target/MSP430/MSP430AsmPrinter.cpp
index e8004a7..6f1c8eb 100644
--- a/lib/Target/MSP430/MSP430AsmPrinter.cpp
+++ b/lib/Target/MSP430/MSP430AsmPrinter.cpp
@@ -47,7 +47,10 @@
       return "MSP430 Assembly Printer";
     }
 
-    void printOperand(const MachineInstr *MI, int OpNum);
+    void printOperand(const MachineInstr *MI, int OpNum,
+                      const char* Modifier = 0);
+    void printSrcMemOperand(const MachineInstr *MI, int OpNum,
+                            const char* Modifier = 0);
     bool printInstruction(const MachineInstr *MI);  // autogenerated.
     void printMachineInstruction(const MachineInstr * MI);
     bool runOnMachineFunction(MachineFunction &F);
@@ -119,7 +122,8 @@
   assert(0 && "Should not happen");
 }
 
-void MSP430AsmPrinter::printOperand(const MachineInstr *MI, int OpNum) {
+void MSP430AsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
+                                    const char* Modifier) {
   const MachineOperand &MO = MI->getOperand(OpNum);
   switch (MO.getType()) {
   case MachineOperand::MO_Register:
@@ -129,7 +133,9 @@
       assert(0 && "not implemented");
     break;
   case MachineOperand::MO_Immediate:
-     O << "#" << MO.getImm();
+    if (!Modifier || strcmp(Modifier, "nohash"))
+      O << '#';
+    O << MO.getImm();
     break;
   case MachineOperand::MO_MachineBasicBlock:
     printBasicBlockLabel(MO.getMBB());
@@ -138,3 +144,21 @@
     assert(0 && "Not implemented yet!");
   }
 }
+
+void MSP430AsmPrinter::printSrcMemOperand(const MachineInstr *MI, int OpNum,
+                                          const char* Modifier) {
+  const MachineOperand &Disp = MI->getOperand(OpNum);
+  assert(Disp.isImm() && "Displacement can be only immediate!");
+
+  // Special case: 0(Reg) -> @Reg
+  if (Disp.getImm() == 0) {
+    O << "@";
+    printOperand(MI, OpNum + 1);
+  } else {
+    printOperand(MI, OpNum, "nohash");
+    O << '(';
+    printOperand(MI, OpNum + 1);
+    O << ')';
+  }
+}
+