X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=lib%2FTarget%2FX86%2FX86JITInfo.h;h=564343ffa3fa3e4b9f69e3bfbb9fb778d2adcee0;hb=eb3092083f5d66d148bd4d94f3005b47adc1b490;hp=69bebd0270cadc3f880333a28ac3403fb368d204;hpb=950a4c40b823cd4f09dc71be635229246dfd6cac;p=oota-llvm.git diff --git a/lib/Target/X86/X86JITInfo.h b/lib/Target/X86/X86JITInfo.h index 69bebd0270c..564343ffa3f 100644 --- a/lib/Target/X86/X86JITInfo.h +++ b/lib/Target/X86/X86JITInfo.h @@ -1,4 +1,4 @@ -//===- X86JITInfo.h - X86 implementation of the JIT interface --*- C++ -*-===// +//===-- X86JITInfo.h - X86 implementation of the JIT interface --*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -14,50 +14,65 @@ #ifndef X86JITINFO_H #define X86JITINFO_H +#include "llvm/CodeGen/JITCodeEmitter.h" +#include "llvm/IR/Function.h" #include "llvm/Target/TargetJITInfo.h" namespace llvm { - class X86TargetMachine; + class X86Subtarget; class X86JITInfo : public TargetJITInfo { - X86TargetMachine &TM; - intptr_t PICBase; + uintptr_t PICBase; + char *TLSOffset; + bool useSSE; public: - explicit X86JITInfo(X86TargetMachine &tm) : TM(tm) {useGOT = 0;} + explicit X86JITInfo(bool UseSSE); /// replaceMachineCodeForFunction - Make it so that calling the function /// whose machine code is at OLD turns into a call to NEW, perhaps by /// overwriting OLD with a branch to NEW. This is used for self-modifying /// code. /// - virtual void replaceMachineCodeForFunction(void *Old, void *New); + void replaceMachineCodeForFunction(void *Old, void *New) override; - /// emitGlobalValueLazyPtr - Use the specified MachineCodeEmitter object to - /// emit a lazy pointer which contains the address of the specified GV. - virtual void *emitGlobalValueLazyPtr(void *GV, MachineCodeEmitter &MCE); + /// emitGlobalValueIndirectSym - Use the specified JITCodeEmitter object + /// to emit an indirect symbol which contains the address of the specified + /// ptr. + void *emitGlobalValueIndirectSym(const GlobalValue* GV, void *ptr, + JITCodeEmitter &JCE) override; - /// emitFunctionStub - Use the specified MachineCodeEmitter object to emit a + // getStubLayout - Returns the size and alignment of the largest call stub + // on X86. + StubLayout getStubLayout() override; + + /// emitFunctionStub - Use the specified JITCodeEmitter object to emit a /// small native function that simply calls the function at the specified /// address. - virtual void *emitFunctionStub(void *Fn, MachineCodeEmitter &MCE); + void *emitFunctionStub(const Function* F, void *Target, + JITCodeEmitter &JCE) override; /// getPICJumpTableEntry - Returns the value of the jumptable entry for the /// specific basic block. - virtual intptr_t getPICJumpTableEntry(intptr_t BB, intptr_t JTBase); + uintptr_t getPICJumpTableEntry(uintptr_t BB, uintptr_t JTBase) override; /// getLazyResolverFunction - Expose the lazy resolver to the JIT. - virtual LazyResolverFn getLazyResolverFunction(JITCompilerFn); + LazyResolverFn getLazyResolverFunction(JITCompilerFn) override; /// relocate - Before the JIT can run a block of code that has been emitted, /// it must rewrite the code to contain the actual addresses of any /// referenced global symbols. - virtual void relocate(void *Function, MachineRelocation *MR, - unsigned NumRelocs, unsigned char* GOTBase); + void relocate(void *Function, MachineRelocation *MR, + unsigned NumRelocs, unsigned char* GOTBase) override; + + /// allocateThreadLocalMemory - Each target has its own way of + /// handling thread local variables. This method returns a value only + /// meaningful to the target. + char* allocateThreadLocalMemory(size_t size) override; /// setPICBase / getPICBase - Getter / setter of PICBase, used to compute /// PIC jumptable entry. - void setPICBase(intptr_t Base) { PICBase = Base; } - intptr_t getPICBase() const { return PICBase; } + void setPICBase(uintptr_t Base) { PICBase = Base; } + uintptr_t getPICBase() const { return PICBase; } }; }