X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FX86%2FX86JITInfo.h;h=564343ffa3fa3e4b9f69e3bfbb9fb778d2adcee0;hb=7ad7c75048eb32f95eae04847908793e0183802f;hp=0ebb4c5208e26b7abb2005f643ec05706abac6f3;hpb=4482715f3d1c165be82bd5aed07231f956e472ef;p=oota-llvm.git diff --git a/lib/Target/X86/X86JITInfo.h b/lib/Target/X86/X86JITInfo.h index 0ebb4c5208e..564343ffa3f 100644 --- a/lib/Target/X86/X86JITInfo.h +++ b/lib/Target/X86/X86JITInfo.h @@ -1,10 +1,10 @@ -//===- X86JITInfo.h - X86 implementation of the JIT interface --*- C++ -*-===// -// +//===-- X86JITInfo.h - X86 implementation of the JIT interface --*- C++ -*-===// +// // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. -// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// //===----------------------------------------------------------------------===// // // This file contains the X86 implementation of the TargetJITInfo class. @@ -14,36 +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 TargetMachine; - class IntrinsicLowering; + class X86Subtarget; class X86JITInfo : public TargetJITInfo { - TargetMachine &TM; - IntrinsicLowering &IL; + uintptr_t PICBase; + char *TLSOffset; + bool useSSE; public: - X86JITInfo(TargetMachine &tm, IntrinsicLowering &il) : TM(tm), IL(il) {} + explicit X86JITInfo(bool UseSSE); - /// addPassesToJITCompile - Add passes to the specified pass manager to - /// implement a fast dynamic compiler for this target. Return true if this - /// is not supported for this target. - /// - virtual void addPassesToJITCompile(FunctionPassManager &PM); - /// 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); - - /// getJITStubForFunction - Create or return a stub for the specified - /// function. This stub acts just like the specified function, except that - /// it allows the "address" of the function to be taken without having to - /// generate code for it. - virtual void *getJITStubForFunction(Function *F, MachineCodeEmitter &MCE); + void replaceMachineCodeForFunction(void *Old, void *New) override; + + /// 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; + + // 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. + void *emitFunctionStub(const Function* F, void *Target, + JITCodeEmitter &JCE) override; + + /// getPICJumpTableEntry - Returns the value of the jumptable entry for the + /// specific basic block. + uintptr_t getPICJumpTableEntry(uintptr_t BB, uintptr_t JTBase) override; + + /// getLazyResolverFunction - Expose the lazy resolver to the JIT. + 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. + 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(uintptr_t Base) { PICBase = Base; } + uintptr_t getPICBase() const { return PICBase; } }; }