mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
Make the ARMCodeEmitter identify Thumb functions via ARMFunctionInfo instead
of the Subtarget. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107086 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9b93b6b49a
commit
62d24a4b92
@ -55,6 +55,7 @@ namespace {
|
||||
const std::vector<MachineConstantPoolEntry> *MCPEs;
|
||||
const std::vector<MachineJumpTableEntry> *MJTEs;
|
||||
bool IsPIC;
|
||||
bool IsThumb;
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.addRequired<MachineModuleInfo>();
|
||||
@ -67,8 +68,8 @@ namespace {
|
||||
: MachineFunctionPass(&ID), JTI(0),
|
||||
II((const ARMInstrInfo *)tm.getInstrInfo()),
|
||||
TD(tm.getTargetData()), TM(tm),
|
||||
MCE(mce), MCPEs(0), MJTEs(0),
|
||||
IsPIC(TM.getRelocationModel() == Reloc::PIC_) {}
|
||||
MCE(mce), MCPEs(0), MJTEs(0),
|
||||
IsPIC(TM.getRelocationModel() == Reloc::PIC_), IsThumb(false) {}
|
||||
|
||||
/// getBinaryCodeForInstr - This function, generated by the
|
||||
/// CodeEmitterGenerator using TableGen, produces the binary encoding for
|
||||
@ -199,6 +200,7 @@ bool ARMCodeEmitter::runOnMachineFunction(MachineFunction &MF) {
|
||||
MJTEs = 0;
|
||||
if (MF.getJumpTableInfo()) MJTEs = &MF.getJumpTableInfo()->getJumpTables();
|
||||
IsPIC = TM.getRelocationModel() == Reloc::PIC_;
|
||||
IsThumb = MF.getInfo<ARMFunctionInfo>()->isThumbFunction();
|
||||
JTI->Initialize(MF, IsPIC);
|
||||
MMI = &getAnalysis<MachineModuleInfo>();
|
||||
MCE.setModuleInfo(MMI);
|
||||
@ -1635,7 +1637,7 @@ void ARMCodeEmitter::emitNEON1RegModImmInstruction(const MachineInstr &MI) {
|
||||
unsigned Imm3 = (Imm >> 4) & 0x7;
|
||||
unsigned Imm4 = Imm & 0xf;
|
||||
Binary |= (I << 24) | (Imm3 << 16) | (Cmode << 8) | (Op << 5) | Imm4;
|
||||
if (Subtarget->isThumb())
|
||||
if (IsThumb)
|
||||
Binary = convertNEONDataProcToThumb(Binary);
|
||||
emitWordLE(Binary);
|
||||
}
|
||||
@ -1649,7 +1651,7 @@ void ARMCodeEmitter::emitNEON2RegInstruction(const MachineInstr &MI) {
|
||||
if (TID.getOperandConstraint(OpIdx, TOI::TIED_TO) != -1)
|
||||
++OpIdx;
|
||||
Binary |= encodeNEONRm(MI, OpIdx);
|
||||
if (Subtarget->isThumb())
|
||||
if (IsThumb)
|
||||
Binary = convertNEONDataProcToThumb(Binary);
|
||||
// FIXME: This does not handle VDUPfdf or VDUPfqf.
|
||||
emitWordLE(Binary);
|
||||
@ -1667,7 +1669,7 @@ void ARMCodeEmitter::emitNEON3RegInstruction(const MachineInstr &MI) {
|
||||
if (TID.getOperandConstraint(OpIdx, TOI::TIED_TO) != -1)
|
||||
++OpIdx;
|
||||
Binary |= encodeNEONRm(MI, OpIdx);
|
||||
if (Subtarget->isThumb())
|
||||
if (IsThumb)
|
||||
Binary = convertNEONDataProcToThumb(Binary);
|
||||
// FIXME: This does not handle VMOVDneon or VMOVQ.
|
||||
emitWordLE(Binary);
|
||||
|
Loading…
Reference in New Issue
Block a user