Add a workaround for Darwin assembler bug where it's not setting the thumb bit in Thumb2 jumptable entries. We now pass Olden.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76991 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2009-07-24 18:54:23 +00:00
parent f20f250b6f
commit 49f846805e

View File

@ -922,11 +922,23 @@ void ARMAsmPrinter::printJTBlockOperand(const MachineInstr *MI, int OpNum) {
const std::vector<MachineJumpTableEntry> &JT = MJTI->getJumpTables();
const std::vector<MachineBasicBlock*> &JTBBs = JT[JTI].MBBs;
bool UseSet= TAI->getSetDirective() && TM.getRelocationModel() == Reloc::PIC_;
bool NeedBit0 = Subtarget->isTargetDarwin() && Subtarget->isThumb2();
SmallPtrSet<MachineBasicBlock*, 8> JTSets;
for (unsigned i = 0, e = JTBBs.size(); i != e; ++i) {
MachineBasicBlock *MBB = JTBBs[i];
if (UseSet && JTSets.insert(MBB))
printPICJumpTableSetLabel(JTI, MO2.getImm(), MBB);
if (UseSet && JTSets.insert(MBB)) {
// FIXME: Temporary workaround for an assembler bug. The assembler isn't
// setting the bit zero to 1 even though it is a thumb address.
if (NeedBit0) {
O << TAI->getSetDirective() << ' ' << TAI->getPrivateGlobalPrefix()
<< getFunctionNumber() << '_' << JTI << '_' << MO2.getImm()
<< "_set_" << MBB->getNumber() << ",(";
printBasicBlockLabel(MBB, false, false, false);
O << '-' << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber()
<< '_' << JTI << '_' << MO2.getImm() << "+1)\n";
} else
printPICJumpTableSetLabel(JTI, MO2.getImm(), MBB);
}
O << JTEntryDirective << ' ';
if (UseSet)
@ -940,7 +952,13 @@ void ARMAsmPrinter::printJTBlockOperand(const MachineInstr *MI, int OpNum) {
O << '-' << TAI->getPrivateGlobalPrefix() << "JTI"
<< getFunctionNumber() << '_' << JTI << '_' << MO2.getImm();
} else {
// FIXME: Temporary workaround for an assembler bug. The assembler isn't
// setting the bit zero to 1 even though it is a thumb address.
if (NeedBit0)
O << '(';
printBasicBlockLabel(MBB, false, false, false);
if (NeedBit0)
O << "+1)";
}
if (i != e-1)
O << '\n';