Fix x86-64 jit: remove reliance on Dwarf numbers.

llvm-svn: 44048
This commit is contained in:
Evan Cheng 2007-11-13 17:54:34 +00:00
parent b666625493
commit c891ae92dc
2 changed files with 29 additions and 12 deletions

View File

@ -385,13 +385,20 @@ static unsigned sizeOfImm(const TargetInstrDescriptor *Desc) {
bool Emitter::isX86_64ExtendedReg(const MachineOperand &MO) {
if (!MO.isRegister()) return false;
unsigned RegNo = MO.getReg();
int DWNum = II->getRegisterInfo().getDwarfRegNum(RegNo);
if (DWNum >= II->getRegisterInfo().getDwarfRegNum(X86::R8) &&
DWNum <= II->getRegisterInfo().getDwarfRegNum(X86::R15))
return true;
if (DWNum >= II->getRegisterInfo().getDwarfRegNum(X86::XMM8) &&
DWNum <= II->getRegisterInfo().getDwarfRegNum(X86::XMM15))
switch (MO.getReg()) {
default: break;
case X86::R8: case X86::R9: case X86::R10: case X86::R11:
case X86::R12: case X86::R13: case X86::R14: case X86::R15:
case X86::R8D: case X86::R9D: case X86::R10D: case X86::R11D:
case X86::R12D: case X86::R13D: case X86::R14D: case X86::R15D:
case X86::R8W: case X86::R9W: case X86::R10W: case X86::R11W:
case X86::R12W: case X86::R13W: case X86::R14W: case X86::R15W:
case X86::R8B: case X86::R9B: case X86::R10B: case X86::R11B:
case X86::R12B: case X86::R13B: case X86::R14B: case X86::R15B:
case X86::XMM8: case X86::XMM9: case X86::XMM10: case X86::XMM11:
case X86::XMM12: case X86::XMM13: case X86::XMM14: case X86::XMM15:
return true;
}
return false;
}

View File

@ -713,12 +713,22 @@ unsigned X86RegisterInfo::getX86RegNum(unsigned RegNo) {
case X86::ST4: case X86::ST5: case X86::ST6: case X86::ST7:
return RegNo-X86::ST0;
case X86::XMM0: case X86::XMM1: case X86::XMM2: case X86::XMM3:
case X86::XMM4: case X86::XMM5: case X86::XMM6: case X86::XMM7:
return getDwarfRegNum(RegNo) - getDwarfRegNum(X86::XMM0);
case X86::XMM8: case X86::XMM9: case X86::XMM10: case X86::XMM11:
case X86::XMM12: case X86::XMM13: case X86::XMM14: case X86::XMM15:
return getDwarfRegNum(RegNo) - getDwarfRegNum(X86::XMM8);
case X86::XMM0: case X86::XMM8:
return 0;
case X86::XMM1: case X86::XMM9:
return 1;
case X86::XMM2: case X86::XMM10:
return 2;
case X86::XMM3: case X86::XMM11:
return 3;
case X86::XMM4: case X86::XMM12:
return 4;
case X86::XMM5: case X86::XMM13:
return 5;
case X86::XMM6: case X86::XMM14:
return 6;
case X86::XMM7: case X86::XMM15:
return 7;
default:
assert(isVirtualRegister(RegNo) && "Unknown physical register!");