From 4faa861f19b73cfd8e537e2af5379d6ba53c82d0 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 28 Jan 2014 23:13:18 +0000 Subject: Propagate MCSubtargetInfo through TableGen's getBinaryCodeForInstr() git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200349 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.h | 7 +++++-- lib/Target/R600/MCTargetDesc/R600MCCodeEmitter.cpp | 12 +++++++----- lib/Target/R600/MCTargetDesc/SIMCCodeEmitter.cpp | 8 +++++--- 3 files changed, 17 insertions(+), 10 deletions(-) (limited to 'lib/Target/R600') diff --git a/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.h b/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.h index d8cf64adb9..ab2d74697d 100644 --- a/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.h +++ b/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.h @@ -22,16 +22,19 @@ namespace llvm { class MCInst; class MCOperand; +class MCSubtargetInfo; class AMDGPUMCCodeEmitter : public MCCodeEmitter { virtual void anchor(); public: uint64_t getBinaryCodeForInstr(const MCInst &MI, - SmallVectorImpl &Fixups) const; + SmallVectorImpl &Fixups, + const MCSubtargetInfo &STI) const; virtual uint64_t getMachineOpValue(const MCInst &MI, const MCOperand &MO, - SmallVectorImpl &Fixups) const { + SmallVectorImpl &Fixups, + const MCSubtargetInfo &STI) const { return 0; } }; diff --git a/lib/Target/R600/MCTargetDesc/R600MCCodeEmitter.cpp b/lib/Target/R600/MCTargetDesc/R600MCCodeEmitter.cpp index 24609bb24d..63143382ac 100644 --- a/lib/Target/R600/MCTargetDesc/R600MCCodeEmitter.cpp +++ b/lib/Target/R600/MCTargetDesc/R600MCCodeEmitter.cpp @@ -49,7 +49,8 @@ public: /// \returns the encoding for an MCOperand. virtual uint64_t getMachineOpValue(const MCInst &MI, const MCOperand &MO, - SmallVectorImpl &Fixups) const; + SmallVectorImpl &Fixups, + const MCSubtargetInfo &STI) const; private: void EmitByte(unsigned int byte, raw_ostream &OS) const; @@ -98,7 +99,7 @@ void R600MCCodeEmitter::EncodeInstruction(const MCInst &MI, raw_ostream &OS, MI.getOpcode() == AMDGPU::KILL) { return; } else if (IS_VTX(Desc)) { - uint64_t InstWord01 = getBinaryCodeForInstr(MI, Fixups); + uint64_t InstWord01 = getBinaryCodeForInstr(MI, Fixups, STI); uint32_t InstWord2 = MI.getOperand(2).getImm(); // Offset if (!(STI.getFeatureBits() & AMDGPU::FeatureCaymanISA)) { InstWord2 |= 1 << 19; // Mega-Fetch bit @@ -122,7 +123,7 @@ void R600MCCodeEmitter::EncodeInstruction(const MCInst &MI, raw_ostream &OS, MI.getOperand(8).getImm() & 0x1F }; - uint64_t Word01 = getBinaryCodeForInstr(MI, Fixups); + uint64_t Word01 = getBinaryCodeForInstr(MI, Fixups, STI); uint32_t Word2 = Sampler << 15 | SrcSelect[ELEMENT_X] << 20 | SrcSelect[ELEMENT_Y] << 23 | SrcSelect[ELEMENT_Z] << 26 | SrcSelect[ELEMENT_W] << 29 | Offsets[0] << 0 | Offsets[1] << 5 | @@ -132,7 +133,7 @@ void R600MCCodeEmitter::EncodeInstruction(const MCInst &MI, raw_ostream &OS, Emit(Word2, OS); Emit((uint32_t) 0, OS); } else { - uint64_t Inst = getBinaryCodeForInstr(MI, Fixups); + uint64_t Inst = getBinaryCodeForInstr(MI, Fixups, STI); if ((STI.getFeatureBits() & AMDGPU::FeatureR600ALUInst) && ((Desc.TSFlags & R600_InstFlag::OP1) || Desc.TSFlags & R600_InstFlag::OP2)) { @@ -170,7 +171,8 @@ unsigned R600MCCodeEmitter::getHWReg(unsigned RegNo) const { uint64_t R600MCCodeEmitter::getMachineOpValue(const MCInst &MI, const MCOperand &MO, - SmallVectorImpl &Fixup) const { + SmallVectorImpl &Fixup, + const MCSubtargetInfo &STI) const { if (MO.isReg()) { if (HAS_NATIVE_OPERANDS(MCII.get(MI.getOpcode()).TSFlags)) { return MRI.getEncodingValue(MO.getReg()); diff --git a/lib/Target/R600/MCTargetDesc/SIMCCodeEmitter.cpp b/lib/Target/R600/MCTargetDesc/SIMCCodeEmitter.cpp index 53dad5a08c..130d2686b4 100644 --- a/lib/Target/R600/MCTargetDesc/SIMCCodeEmitter.cpp +++ b/lib/Target/R600/MCTargetDesc/SIMCCodeEmitter.cpp @@ -60,7 +60,8 @@ public: /// \returns the encoding for an MCOperand. virtual uint64_t getMachineOpValue(const MCInst &MI, const MCOperand &MO, - SmallVectorImpl &Fixups) const; + SmallVectorImpl &Fixups, + const MCSubtargetInfo &STI) const; }; } // End anonymous namespace @@ -129,7 +130,7 @@ void SIMCCodeEmitter::EncodeInstruction(const MCInst &MI, raw_ostream &OS, SmallVectorImpl &Fixups, const MCSubtargetInfo &STI) const { - uint64_t Encoding = getBinaryCodeForInstr(MI, Fixups); + uint64_t Encoding = getBinaryCodeForInstr(MI, Fixups, STI); const MCInstrDesc &Desc = MCII.get(MI.getOpcode()); unsigned bytes = Desc.getSize(); @@ -170,7 +171,8 @@ void SIMCCodeEmitter::EncodeInstruction(const MCInst &MI, raw_ostream &OS, uint64_t SIMCCodeEmitter::getMachineOpValue(const MCInst &MI, const MCOperand &MO, - SmallVectorImpl &Fixups) const { + SmallVectorImpl &Fixups, + const MCSubtargetInfo &STI) const { if (MO.isReg()) return MRI.getEncodingValue(MO.getReg()); -- cgit v1.2.3