summaryrefslogtreecommitdiff
path: root/lib/Target/MSP430/AsmPrinter
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2009-10-11 19:14:02 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2009-10-11 19:14:02 +0000
commitc4be951ddc193cd4dc550dc6b12436dcbaee4dc9 (patch)
tree1f43f9cbcf6146ab7a1f4ed6ae34c6598d8d49d2 /lib/Target/MSP430/AsmPrinter
parentda3d79642444858ccbd55ce1fa5aa5aa25f4bba2 (diff)
downloadllvm-c4be951ddc193cd4dc550dc6b12436dcbaee4dc9.tar.gz
llvm-c4be951ddc193cd4dc550dc6b12436dcbaee4dc9.tar.bz2
llvm-c4be951ddc193cd4dc550dc6b12436dcbaee4dc9.tar.xz
Implement proper asmprinting for the globals. This eliminates bogus "call" modifier and also adds support for offsets wrt globals.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83784 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/MSP430/AsmPrinter')
-rw-r--r--lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp b/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp
index 0f70e48315..852019febf 100644
--- a/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp
+++ b/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp
@@ -149,7 +149,7 @@ void MSP430AsmPrinter::printMachineInstruction(const MachineInstr *MI) {
// Call the autogenerated instruction printer routines.
printInstruction(MI);
-
+
if (VerboseAsm && !MI->getDebugLoc().isUnknown())
EmitComments(*MI);
O << '\n';
@@ -174,26 +174,26 @@ void MSP430AsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
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: