Implement proper asmprinting for the globals. This eliminates bogus "call" modifier and also adds support for offsets wrt globals.

llvm-svn: 83784
diff --git a/llvm/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp b/llvm/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp
index 0f70e48..852019f 100644
--- a/llvm/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp
+++ b/llvm/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp
@@ -149,7 +149,7 @@
 
   // Call the autogenerated instruction printer routines.
   printInstruction(MI);
-  
+
   if (VerboseAsm && !MI->getDebugLoc().isUnknown())
     EmitComments(*MI);
   O << '\n';
@@ -174,26 +174,26 @@
     return;
   case MachineOperand::MO_GlobalAddress: {
     bool isMemOp  = Modifier && !strcmp(Modifier, "mem");
-    bool isCallOp = Modifier && !strcmp(Modifier, "call");
     std::string Name = Mang->getMangledName(MO.getGlobal());
-    assert(MO.getOffset() == 0 && "No offsets allowed!");
+    uint64_t Offset = MO.getOffset();
 
-    if (isCallOp)
-      O << '#';
-    else if (isMemOp)
-      O << '&';
+    O << (isMemOp ? '&' : '#');
+    if (Offset)
+      O << '(' << Offset << '+';
 
     O << Name;
+    if (Offset)
+      O << ')';
 
     return;
   }
   case MachineOperand::MO_ExternalSymbol: {
-    bool isCallOp = Modifier && !strcmp(Modifier, "call");
+    bool isMemOp  = Modifier && !strcmp(Modifier, "mem");
     std::string Name(MAI->getGlobalPrefix());
     Name += MO.getSymbolName();
-    if (isCallOp)
-      O << '#';
-    O << Name;
+
+    O << (isMemOp ? '&' : '#') << Name;
+
     return;
   }
   default: