mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-16 08:29:43 +00:00
Add MC-inst handling for tPICADD
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114237 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
75f0288b7d
commit
fbd1873041
@ -1389,6 +1389,32 @@ void ARMAsmPrinter::printInstructionThroughMCStreamer(const MachineInstr *MI) {
|
||||
case ARM::t2MOVi32imm:
|
||||
assert(0 && "Should be lowered by thumb2it pass");
|
||||
default: break;
|
||||
case ARM::tPICADD: {
|
||||
// This is a pseudo op for a label + instruction sequence, which looks like:
|
||||
// LPC0:
|
||||
// add r0, pc
|
||||
// This adds the address of LPC0 to r0.
|
||||
|
||||
// Emit the label.
|
||||
// FIXME: MOVE TO SHARED PLACE.
|
||||
unsigned Id = (unsigned)MI->getOperand(2).getImm();
|
||||
const char *Prefix = MAI->getPrivateGlobalPrefix();
|
||||
MCSymbol *Label =OutContext.GetOrCreateSymbol(Twine(Prefix)
|
||||
+ "PC" + Twine(getFunctionNumber()) + "_" + Twine(Id));
|
||||
OutStreamer.EmitLabel(Label);
|
||||
|
||||
// Form and emit the add.
|
||||
MCInst AddInst;
|
||||
AddInst.setOpcode(ARM::tADDhirr);
|
||||
AddInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg()));
|
||||
AddInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg()));
|
||||
AddInst.addOperand(MCOperand::CreateReg(ARM::PC));
|
||||
// Add predicate operands.
|
||||
AddInst.addOperand(MCOperand::CreateImm(ARMCC::AL));
|
||||
AddInst.addOperand(MCOperand::CreateReg(0));
|
||||
OutStreamer.EmitInstruction(AddInst);
|
||||
return;
|
||||
}
|
||||
case ARM::PICADD: { // FIXME: Remove asm string from td file.
|
||||
// This is a pseudo op for a label + instruction sequence, which looks like:
|
||||
// LPC0:
|
||||
|
Loading…
Reference in New Issue
Block a user