forked from OSchip/llvm-project
Implement proper asmprinting for the globals. This eliminates bogus "call" modifier and also adds support for offsets wrt globals.
llvm-svn: 83784
This commit is contained in:
parent
3525a4a268
commit
a58a3f930a
|
@ -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:
|
||||
|
|
|
@ -155,7 +155,7 @@ let isCall = 1 in
|
|||
let Defs = [R12W, R13W, R14W, R15W, SRW],
|
||||
Uses = [SPW] in {
|
||||
def CALLi : Pseudo<(outs), (ins i16imm:$dst, variable_ops),
|
||||
"call\t${dst:call}", [(MSP430call imm:$dst)]>;
|
||||
"call\t$dst", [(MSP430call imm:$dst)]>;
|
||||
def CALLr : Pseudo<(outs), (ins GR16:$dst, variable_ops),
|
||||
"call\t$dst", [(MSP430call GR16:$dst)]>;
|
||||
def CALLm : Pseudo<(outs), (ins memsrc:$dst, variable_ops),
|
||||
|
|
Loading…
Reference in New Issue