mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
The register specified for a dregpair is the corresponding Q register, so to
get the pair, we need to look up the sub-regs based on the qreg. Create a lookup function since we don't have access to TargetRegisterInfo here to be able to use getSubReg(ARM::dsub_[01]). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113875 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f7d10f5c12
commit
fe125557dd
@ -29,73 +29,27 @@ using namespace llvm;
|
||||
#undef MachineInstr
|
||||
#undef ARMAsmPrinter
|
||||
|
||||
static unsigned NextReg(unsigned Reg) {
|
||||
switch (Reg) {
|
||||
// Get the constituent sub-regs for a dregpair from a Q register.
|
||||
static std::pair<unsigned, unsigned> GetDRegPair(unsigned QReg) {
|
||||
switch (QReg) {
|
||||
default:
|
||||
assert(0 && "Unexpected register enum");
|
||||
|
||||
case ARM::D0:
|
||||
return ARM::D1;
|
||||
case ARM::D1:
|
||||
return ARM::D2;
|
||||
case ARM::D2:
|
||||
return ARM::D3;
|
||||
case ARM::D3:
|
||||
return ARM::D4;
|
||||
case ARM::D4:
|
||||
return ARM::D5;
|
||||
case ARM::D5:
|
||||
return ARM::D6;
|
||||
case ARM::D6:
|
||||
return ARM::D7;
|
||||
case ARM::D7:
|
||||
return ARM::D8;
|
||||
case ARM::D8:
|
||||
return ARM::D9;
|
||||
case ARM::D9:
|
||||
return ARM::D10;
|
||||
case ARM::D10:
|
||||
return ARM::D11;
|
||||
case ARM::D11:
|
||||
return ARM::D12;
|
||||
case ARM::D12:
|
||||
return ARM::D13;
|
||||
case ARM::D13:
|
||||
return ARM::D14;
|
||||
case ARM::D14:
|
||||
return ARM::D15;
|
||||
case ARM::D15:
|
||||
return ARM::D16;
|
||||
case ARM::D16:
|
||||
return ARM::D17;
|
||||
case ARM::D17:
|
||||
return ARM::D18;
|
||||
case ARM::D18:
|
||||
return ARM::D19;
|
||||
case ARM::D19:
|
||||
return ARM::D20;
|
||||
case ARM::D20:
|
||||
return ARM::D21;
|
||||
case ARM::D21:
|
||||
return ARM::D22;
|
||||
case ARM::D22:
|
||||
return ARM::D23;
|
||||
case ARM::D23:
|
||||
return ARM::D24;
|
||||
case ARM::D24:
|
||||
return ARM::D25;
|
||||
case ARM::D25:
|
||||
return ARM::D26;
|
||||
case ARM::D26:
|
||||
return ARM::D27;
|
||||
case ARM::D27:
|
||||
return ARM::D28;
|
||||
case ARM::D28:
|
||||
return ARM::D29;
|
||||
case ARM::D29:
|
||||
return ARM::D30;
|
||||
case ARM::D30:
|
||||
return ARM::D31;
|
||||
case ARM::Q0: return std::pair<unsigned, unsigned>(ARM::D0, ARM::D1);
|
||||
case ARM::Q1: return std::pair<unsigned, unsigned>(ARM::D2, ARM::D3);
|
||||
case ARM::Q2: return std::pair<unsigned, unsigned>(ARM::D4, ARM::D5);
|
||||
case ARM::Q3: return std::pair<unsigned, unsigned>(ARM::D6, ARM::D7);
|
||||
case ARM::Q4: return std::pair<unsigned, unsigned>(ARM::D8, ARM::D9);
|
||||
case ARM::Q5: return std::pair<unsigned, unsigned>(ARM::D10, ARM::D11);
|
||||
case ARM::Q6: return std::pair<unsigned, unsigned>(ARM::D12, ARM::D13);
|
||||
case ARM::Q7: return std::pair<unsigned, unsigned>(ARM::D14, ARM::D15);
|
||||
case ARM::Q8: return std::pair<unsigned, unsigned>(ARM::D16, ARM::D17);
|
||||
case ARM::Q9: return std::pair<unsigned, unsigned>(ARM::D18, ARM::D19);
|
||||
case ARM::Q10: return std::pair<unsigned, unsigned>(ARM::D20, ARM::D21);
|
||||
case ARM::Q11: return std::pair<unsigned, unsigned>(ARM::D22, ARM::D23);
|
||||
case ARM::Q12: return std::pair<unsigned, unsigned>(ARM::D24, ARM::D25);
|
||||
case ARM::Q13: return std::pair<unsigned, unsigned>(ARM::D26, ARM::D27);
|
||||
case ARM::Q14: return std::pair<unsigned, unsigned>(ARM::D28, ARM::D29);
|
||||
case ARM::Q15: return std::pair<unsigned, unsigned>(ARM::D30, ARM::D31);
|
||||
}
|
||||
}
|
||||
|
||||
@ -189,19 +143,11 @@ void ARMInstPrinter::printOperand(const MCInst *MI, unsigned OpNo,
|
||||
if (Op.isReg()) {
|
||||
unsigned Reg = Op.getReg();
|
||||
if (Modifier && strcmp(Modifier, "dregpair") == 0) {
|
||||
O << '{' << getRegisterName(Reg) << ", "
|
||||
<< getRegisterName(NextReg(Reg)) << '}';
|
||||
#if 0
|
||||
// FIXME: Breaks e.g. ARM/vmul.ll.
|
||||
assert(0);
|
||||
/*
|
||||
unsigned DRegLo = TRI->getSubReg(Reg, ARM::dsub_0);
|
||||
unsigned DRegHi = TRI->getSubReg(Reg, ARM::dsub_1);
|
||||
O << '{'
|
||||
<< getRegisterName(DRegLo) << ',' << getRegisterName(DRegHi)
|
||||
<< '}';*/
|
||||
#endif
|
||||
std::pair<unsigned, unsigned> dregpair = GetDRegPair(Reg);
|
||||
O << '{' << getRegisterName(dregpair.first) << ", "
|
||||
<< getRegisterName(dregpair.second) << '}';
|
||||
} else if (Modifier && strcmp(Modifier, "lane") == 0) {
|
||||
// FIXME
|
||||
assert(0);
|
||||
/*
|
||||
unsigned RegNum = ARMRegisterInfo::getRegisterNumbering(Reg);
|
||||
|
Loading…
Reference in New Issue
Block a user