34 void operator=(const R600MCCodeEmitter &) LLVM_DELETED_FUNCTION;
43 : MCII(mcii), MRI(mri), STI(sti) { }
54 void EmitByte(
unsigned int byte,
raw_ostream &OS)
const;
59 unsigned getHWRegChan(
unsigned reg)
const;
60 unsigned getHWReg(
unsigned regNo)
const;
86 return new R600MCCodeEmitter(MCII, MRI, STI);
99 uint64_t InstWord01 = getBinaryCodeForInstr(MI, Fixups);
101 if (!(STI.getFeatureBits() & AMDGPU::FeatureCaymanISA)) {
102 InstWord2 |= 1 << 19;
105 Emit(InstWord01, OS);
107 Emit((uint32_t) 0, OS);
108 }
else if (
IS_TEX(Desc)) {
111 int64_t SrcSelect[4] = {
117 int64_t Offsets[3] = {
123 uint64_t Word01 = getBinaryCodeForInstr(MI, Fixups);
124 uint32_t Word2 = Sampler << 15 | SrcSelect[
ELEMENT_X] << 20 |
126 SrcSelect[
ELEMENT_W] << 29 | Offsets[0] << 0 | Offsets[1] << 5 |
131 Emit((uint32_t) 0, OS);
133 uint64_t Inst = getBinaryCodeForInstr(MI, Fixups);
134 if ((STI.getFeatureBits() & AMDGPU::FeatureR600ALUInst) &&
137 uint64_t ISAOpCode = Inst & (0x3FFULL << 39);
138 Inst &= ~(0x3FFULL << 39);
139 Inst |= ISAOpCode << 1;
145 void R600MCCodeEmitter::EmitByte(
unsigned int Byte,
raw_ostream &OS)
const {
146 OS.
write((uint8_t) Byte & 0xff);
150 for (
unsigned i = 0; i < 4; i++) {
151 OS.
write((uint8_t) ((Value >> (8 * i)) & 0xff));
155 void R600MCCodeEmitter::Emit(uint64_t Value,
raw_ostream &OS)
const {
156 for (
unsigned i = 0; i < 8; i++) {
157 EmitByte((Value >> (8 * i)) & 0xff, OS);
161 unsigned R600MCCodeEmitter::getHWRegChan(
unsigned reg)
const {
165 unsigned R600MCCodeEmitter::getHWReg(
unsigned RegNo)
const {
169 uint64_t R600MCCodeEmitter::getMachineOpValue(
const MCInst &MI,
176 return getHWReg(MO.
getReg());
178 }
else if (MO.
isImm()) {
186 #include "AMDGPUGenMCCodeEmitter.inc"
MCCodeEmitter * createR600MCCodeEmitter(const MCInstrInfo &MCII, const MCRegisterInfo &MRI, const MCSubtargetInfo &STI)
#define HAS_NATIVE_OPERANDS(Flags)
unsigned getReg() const
getReg - Returns the register number.
#define HW_REG_MASK
Defines for extracting register infomation from register encoding.
MCCodeEmitter - Generic instruction encoding interface.
raw_ostream & write(unsigned char C)
#define LLVM_DELETED_FUNCTION
unsigned getOpcode() const
Provides AMDGPU specific target descriptions.
CodeEmitter interface for R600 and SI codegen.
uint16_t getEncodingValue(unsigned RegNo) const
Returns the encoding for RegNo.
LLVM Value Representation.
const MCRegisterInfo & MRI
const MCOperand & getOperand(unsigned i) const