17 #ifndef LLVM_CODEGEN_JITCODEEMITTER_H
18 #define LLVM_CODEGEN_JITCODEEMITTER_H
22 #include "llvm/Support/DataTypes.h"
28 class MachineBasicBlock;
29 class MachineConstantPool;
30 class MachineJumpTableInfo;
31 class MachineFunction;
32 class MachineModuleInfo;
33 class MachineRelocation;
54 virtual void anchor();
74 const uint8_t *Buffer,
size_t Size,
75 unsigned Alignment) = 0;
152 if (Alignment == 0) Alignment = 1;
161 if (Alignment == 0) Alignment = 1;
178 uint8_t Byte = Value & 0x7f;
180 if (Value || PadTo != 0) Byte |= 0x80;
186 uint8_t Byte = (PadTo > 1) ? 0x80 : 0x0;
195 int32_t Sign = Value >> (8 *
sizeof(Value) - 1);
199 uint8_t Byte = Value & 0x7f;
201 IsMore = Value != Sign || ((Byte ^ Sign) & 0x40) != 0;
202 if (IsMore) Byte |= 0x80;
210 for (
size_t i = 0,
N = String.size(); i <
N; ++i) {
211 uint8_t
C = String[i];
240 (*(uint32_t*)Addr) = (uint32_t)Value;
246 (*(uint64_t*)Addr) = (uint64_t)Value;
276 virtual void *
allocateGlobal(uintptr_t Size,
unsigned Alignment) = 0;
void emitAlignment(unsigned Alignment)
virtual void startFunction(MachineFunction &F)=0
virtual void * allocateSpace(uintptr_t Size, unsigned Alignment)
virtual uintptr_t getConstantPoolEntryAddress(unsigned Index) const =0
FIXME: These should all be handled with relocations!
virtual uintptr_t getJumpTableEntryAddress(unsigned Index) const =0
void emitInt64(uint64_t Value)
emitInt64 - Emit a int64 directive.
virtual uintptr_t getLabelAddress(MCSymbol *Label) const =0
virtual void setModuleInfo(MachineModuleInfo *Info)=0
virtual uintptr_t getMachineBasicBlockAddress(MachineBasicBlock *MBB) const =0
bool earlyResolveAddresses() const
virtual DenseMap< MCSymbol *, uintptr_t > * getLabelLocations()
void emitDWordLE(uint64_t W)
void emitWordBE(uint32_t W)
virtual bool finishFunction(MachineFunction &F)=0
void emitDWordBE(uint64_t W)
void emitInt64At(uintptr_t *Addr, uintptr_t Value)
emitInt64At - Emit the Int64 Value in Addr.
void emitInt32(uint32_t Value)
emitInt32 - Emit a int32 directive.
virtual uintptr_t getCurrentPCValue() const
virtual void * allocIndirectGV(const GlobalValue *GV, const uint8_t *Buffer, size_t Size, unsigned Alignment)=0
uintptr_t getCurrentPCOffset() const
uint64_t RoundUpToAlignment(uint64_t Value, uint64_t Align)
virtual void addRelocation(const MachineRelocation &MR)=0
virtual void * allocateGlobal(uintptr_t Size, unsigned Alignment)=0
void emitAlignmentWithFill(unsigned Alignment, uint8_t Fill)
void emitWordLE(uint32_t W)
void emitULEB128Bytes(uint64_t Value, unsigned PadTo=0)
virtual ~JITCodeEmitter()
virtual void StartMachineBasicBlock(MachineBasicBlock *MBB)=0
LLVM Value Representation.
void emitInt32At(uintptr_t *Addr, uintptr_t Value)
emitInt32At - Emit the Int32 Value in Addr.
void emitString(const std::string &String)
void emitSLEB128Bytes(int64_t Value)
virtual void emitLabel(MCSymbol *Label)=0
emitLabel - Emits a label