mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-06 06:33:24 +00:00
ARM::MOVi32imm is expanded in ARMExpandPseudoInsts, so there's no need to
handle it in the asm lowering. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117707 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9ae33fe396
commit
a3c1629ff5
@ -949,61 +949,6 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
}
|
||||
return;
|
||||
}
|
||||
case ARM::MOVi32imm: {
|
||||
// FIXME: We'd like to remove the asm string in the .td file, but the
|
||||
// This is a hack that lowers as a two instruction sequence.
|
||||
unsigned DstReg = MI->getOperand(0).getReg();
|
||||
const MachineOperand &MO = MI->getOperand(1);
|
||||
MCOperand V1, V2;
|
||||
if (MO.isImm()) {
|
||||
unsigned ImmVal = (unsigned)MI->getOperand(1).getImm();
|
||||
V1 = MCOperand::CreateImm(ImmVal & 65535);
|
||||
V2 = MCOperand::CreateImm(ImmVal >> 16);
|
||||
} else if (MO.isGlobal()) {
|
||||
MCSymbol *Symbol = MCInstLowering.GetGlobalAddressSymbol(MO.getGlobal());
|
||||
const MCSymbolRefExpr *SymRef1 =
|
||||
MCSymbolRefExpr::Create(Symbol,
|
||||
MCSymbolRefExpr::VK_ARM_LO16, OutContext);
|
||||
const MCSymbolRefExpr *SymRef2 =
|
||||
MCSymbolRefExpr::Create(Symbol,
|
||||
MCSymbolRefExpr::VK_ARM_HI16, OutContext);
|
||||
V1 = MCOperand::CreateExpr(SymRef1);
|
||||
V2 = MCOperand::CreateExpr(SymRef2);
|
||||
} else {
|
||||
// FIXME: External symbol?
|
||||
MI->dump();
|
||||
llvm_unreachable("cannot handle this operand");
|
||||
}
|
||||
|
||||
{
|
||||
MCInst TmpInst;
|
||||
TmpInst.setOpcode(ARM::MOVi16);
|
||||
TmpInst.addOperand(MCOperand::CreateReg(DstReg)); // dstreg
|
||||
TmpInst.addOperand(V1); // lower16(imm)
|
||||
|
||||
// Predicate.
|
||||
TmpInst.addOperand(MCOperand::CreateImm(MI->getOperand(2).getImm()));
|
||||
TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(3).getReg()));
|
||||
|
||||
OutStreamer.EmitInstruction(TmpInst);
|
||||
}
|
||||
|
||||
{
|
||||
MCInst TmpInst;
|
||||
TmpInst.setOpcode(ARM::MOVTi16);
|
||||
TmpInst.addOperand(MCOperand::CreateReg(DstReg)); // dstreg
|
||||
TmpInst.addOperand(MCOperand::CreateReg(DstReg)); // srcreg
|
||||
TmpInst.addOperand(V2); // upper16(imm)
|
||||
|
||||
// Predicate.
|
||||
TmpInst.addOperand(MCOperand::CreateImm(MI->getOperand(2).getImm()));
|
||||
TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(3).getReg()));
|
||||
|
||||
OutStreamer.EmitInstruction(TmpInst);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
case ARM::t2TBB:
|
||||
case ARM::t2TBH:
|
||||
case ARM::t2BR_JT: {
|
||||
|
Loading…
x
Reference in New Issue
Block a user