mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-13 08:26:02 +00:00
give MCCodeEmitters access to the current MCContext.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96038 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -72,7 +72,8 @@ namespace llvm {
|
|||||||
const MCAsmInfo &MAI,
|
const MCAsmInfo &MAI,
|
||||||
raw_ostream &O);
|
raw_ostream &O);
|
||||||
typedef MCCodeEmitter *(*CodeEmitterCtorTy)(const Target &T,
|
typedef MCCodeEmitter *(*CodeEmitterCtorTy)(const Target &T,
|
||||||
TargetMachine &TM);
|
TargetMachine &TM,
|
||||||
|
MCContext &Ctx);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// Next - The next registered target in the linked list, maintained by the
|
/// Next - The next registered target in the linked list, maintained by the
|
||||||
@@ -236,10 +237,10 @@ namespace llvm {
|
|||||||
|
|
||||||
|
|
||||||
/// createCodeEmitter - Create a target specific code emitter.
|
/// createCodeEmitter - Create a target specific code emitter.
|
||||||
MCCodeEmitter *createCodeEmitter(TargetMachine &TM) const {
|
MCCodeEmitter *createCodeEmitter(TargetMachine &TM, MCContext &Ctx) const {
|
||||||
if (!CodeEmitterCtorFn)
|
if (!CodeEmitterCtorFn)
|
||||||
return 0;
|
return 0;
|
||||||
return CodeEmitterCtorFn(*this, TM);
|
return CodeEmitterCtorFn(*this, TM, Ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
@@ -613,8 +614,9 @@ namespace llvm {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static MCCodeEmitter *Allocator(const Target &T, TargetMachine &TM) {
|
static MCCodeEmitter *Allocator(const Target &T, TargetMachine &TM,
|
||||||
return new CodeEmitterImpl(T, TM);
|
MCContext &Ctx) {
|
||||||
|
return new CodeEmitterImpl(T, TM, Ctx);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -141,7 +141,7 @@ bool LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM,
|
|||||||
case CGFT_ObjectFile: {
|
case CGFT_ObjectFile: {
|
||||||
// Create the code emitter for the target if it exists. If not, .o file
|
// Create the code emitter for the target if it exists. If not, .o file
|
||||||
// emission fails.
|
// emission fails.
|
||||||
MCCodeEmitter *MCE = getTarget().createCodeEmitter(*this);
|
MCCodeEmitter *MCE = getTarget().createCodeEmitter(*this, *Context);
|
||||||
if (MCE == 0)
|
if (MCE == 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@@ -23,6 +23,7 @@ class X86TargetMachine;
|
|||||||
class FunctionPass;
|
class FunctionPass;
|
||||||
class MachineCodeEmitter;
|
class MachineCodeEmitter;
|
||||||
class MCCodeEmitter;
|
class MCCodeEmitter;
|
||||||
|
class MCContext;
|
||||||
class JITCodeEmitter;
|
class JITCodeEmitter;
|
||||||
class Target;
|
class Target;
|
||||||
class formatted_raw_ostream;
|
class formatted_raw_ostream;
|
||||||
@@ -49,9 +50,12 @@ FunctionPass *createX87FPRegKillInserterPass();
|
|||||||
FunctionPass *createX86JITCodeEmitterPass(X86TargetMachine &TM,
|
FunctionPass *createX86JITCodeEmitterPass(X86TargetMachine &TM,
|
||||||
JITCodeEmitter &JCE);
|
JITCodeEmitter &JCE);
|
||||||
|
|
||||||
MCCodeEmitter *createHeinousX86MCCodeEmitter(const Target &, TargetMachine &TM);
|
MCCodeEmitter *createHeinousX86MCCodeEmitter(const Target &, TargetMachine &TM,
|
||||||
MCCodeEmitter *createX86_32MCCodeEmitter(const Target &, TargetMachine &TM);
|
MCContext &Ctx);
|
||||||
MCCodeEmitter *createX86_64MCCodeEmitter(const Target &, TargetMachine &TM);
|
MCCodeEmitter *createX86_32MCCodeEmitter(const Target &, TargetMachine &TM,
|
||||||
|
MCContext &Ctx);
|
||||||
|
MCCodeEmitter *createX86_64MCCodeEmitter(const Target &, TargetMachine &TM,
|
||||||
|
MCContext &Ctx);
|
||||||
|
|
||||||
/// createX86EmitCodeToMemory - Returns a pass that converts a register
|
/// createX86EmitCodeToMemory - Returns a pass that converts a register
|
||||||
/// allocated function into raw machine code in a dynamically
|
/// allocated function into raw machine code in a dynamically
|
||||||
|
@@ -1211,13 +1211,14 @@ static cl::opt<bool> EnableNewEncoder("enable-new-x86-encoder",
|
|||||||
|
|
||||||
// Ok, now you can look.
|
// Ok, now you can look.
|
||||||
MCCodeEmitter *llvm::createHeinousX86MCCodeEmitter(const Target &T,
|
MCCodeEmitter *llvm::createHeinousX86MCCodeEmitter(const Target &T,
|
||||||
TargetMachine &TM) {
|
TargetMachine &TM,
|
||||||
|
MCContext &Ctx) {
|
||||||
|
|
||||||
// FIXME: Remove the heinous one when the new one works.
|
// FIXME: Remove the heinous one when the new one works.
|
||||||
if (EnableNewEncoder) {
|
if (EnableNewEncoder) {
|
||||||
if (TM.getTargetData()->getPointerSize() == 4)
|
if (TM.getTargetData()->getPointerSize() == 4)
|
||||||
return createX86_32MCCodeEmitter(T, TM);
|
return createX86_32MCCodeEmitter(T, TM, Ctx);
|
||||||
return createX86_64MCCodeEmitter(T, TM);
|
return createX86_64MCCodeEmitter(T, TM, Ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new X86MCCodeEmitter(static_cast<X86TargetMachine&>(TM));
|
return new X86MCCodeEmitter(static_cast<X86TargetMachine&>(TM));
|
||||||
|
@@ -120,12 +120,14 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
MCCodeEmitter *llvm::createX86_32MCCodeEmitter(const Target &,
|
MCCodeEmitter *llvm::createX86_32MCCodeEmitter(const Target &,
|
||||||
TargetMachine &TM) {
|
TargetMachine &TM,
|
||||||
|
MCContext &Ctx) {
|
||||||
return new X86MCCodeEmitter(TM, false);
|
return new X86MCCodeEmitter(TM, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
MCCodeEmitter *llvm::createX86_64MCCodeEmitter(const Target &,
|
MCCodeEmitter *llvm::createX86_64MCCodeEmitter(const Target &,
|
||||||
TargetMachine &TM) {
|
TargetMachine &TM,
|
||||||
|
MCContext &Ctx) {
|
||||||
return new X86MCCodeEmitter(TM, true);
|
return new X86MCCodeEmitter(TM, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -266,14 +266,14 @@ static int AssembleInput(const char *ProgName) {
|
|||||||
if (FileType == OFT_AssemblyFile) {
|
if (FileType == OFT_AssemblyFile) {
|
||||||
IP.reset(TheTarget->createMCInstPrinter(OutputAsmVariant, *MAI, *Out));
|
IP.reset(TheTarget->createMCInstPrinter(OutputAsmVariant, *MAI, *Out));
|
||||||
if (ShowEncoding)
|
if (ShowEncoding)
|
||||||
CE.reset(TheTarget->createCodeEmitter(*TM));
|
CE.reset(TheTarget->createCodeEmitter(*TM, Ctx));
|
||||||
Str.reset(createAsmStreamer(Ctx, *Out, *MAI,
|
Str.reset(createAsmStreamer(Ctx, *Out, *MAI,
|
||||||
TM->getTargetData()->isLittleEndian(),
|
TM->getTargetData()->isLittleEndian(),
|
||||||
/*asmverbose*/true, IP.get(), CE.get(),
|
/*asmverbose*/true, IP.get(), CE.get(),
|
||||||
ShowInst));
|
ShowInst));
|
||||||
} else {
|
} else {
|
||||||
assert(FileType == OFT_ObjectFile && "Invalid file type!");
|
assert(FileType == OFT_ObjectFile && "Invalid file type!");
|
||||||
CE.reset(TheTarget->createCodeEmitter(*TM));
|
CE.reset(TheTarget->createCodeEmitter(*TM, Ctx));
|
||||||
Str.reset(createMachOStreamer(Ctx, *Out, CE.get()));
|
Str.reset(createMachOStreamer(Ctx, *Out, CE.get()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user