17 #ifndef LLVM_CODEGEN_MACHINECODEEMITTER_H
18 #define LLVM_CODEGEN_MACHINECODEEMITTER_H
20 #include "llvm/Support/DataTypes.h"
26 class MachineBasicBlock;
27 class MachineConstantPool;
28 class MachineJumpTableInfo;
29 class MachineFunction;
30 class MachineModuleInfo;
31 class MachineRelocation;
53 virtual void anchor();
105 *Buf++ = (uint8_t)(W >> 0);
106 *Buf++ = (uint8_t)(W >> 8);
107 *Buf++ = (uint8_t)(W >> 16);
108 *Buf++ = (uint8_t)(W >> 24);
164 if (Alignment == 0) Alignment = 1;
170 ~(uintptr_t)(Alignment-1));
181 uint8_t Byte = Value & 0x7f;
183 if (Value) Byte |= 0x80;
191 uint64_t Sign = Value >> (8 *
sizeof(Value) - 1);
195 uint8_t Byte = Value & 0x7f;
197 IsMore = Value != Sign || ((Byte ^ Sign) & 0x40) != 0;
198 if (IsMore) Byte |= 0x80;
206 for (
unsigned i = 0,
N = static_cast<unsigned>(String.size());
208 uint8_t
C = String[i];
237 (*(uint32_t*)Addr) = (uint32_t)Value;
243 (*(uint64_t*)Addr) = (uint64_t)Value;
void emitAlignment(unsigned Alignment)
void emitInt64At(uintptr_t *Addr, uintptr_t Value)
emitInt64At - Emit the Int64 Value in Addr.
void emitInt32At(uintptr_t *Addr, uintptr_t Value)
emitInt32At - Emit the Int32 Value in Addr.
void emitWordLE(uint32_t W)
void emitString(const std::string &String)
static void emitWordLEInto(uint8_t *&Buf, uint32_t W)
void emitInt64(uint64_t Value)
emitInt64 - Emit a int64 directive.
virtual uintptr_t getJumpTableEntryAddress(unsigned Index) const =0
void emitDWordBE(uint64_t W)
virtual uintptr_t getLabelAddress(MCSymbol *Label) const =0
virtual void startFunction(MachineFunction &F)=0
virtual void processDebugLoc(DebugLoc DL, bool BeforePrintintInsn)
virtual uintptr_t getCurrentPCValue() const
virtual void setModuleInfo(MachineModuleInfo *Info)=0
virtual uintptr_t getMachineBasicBlockAddress(MachineBasicBlock *MBB) const =0
virtual uintptr_t getCurrentPCOffset() const
void emitULEB128Bytes(uint64_t Value)
virtual bool earlyResolveAddresses() const =0
void emitInt32(int32_t Value)
emitInt32 - Emit a int32 directive.
void emitDWordLE(uint64_t W)
void emitSLEB128Bytes(uint64_t Value)
virtual void addRelocation(const MachineRelocation &MR)=0
virtual void emitLabel(MCSymbol *Label)=0
emitLabel - Emits a label
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 bool finishFunction(MachineFunction &F)=0
LLVM Value Representation.
virtual void StartMachineBasicBlock(MachineBasicBlock *MBB)=0
virtual ~MachineCodeEmitter()
void emitWordBE(uint32_t W)