1*9880d681SAndroid Build Coastguard Worker //===-- AMDGPUDisassembler.hpp - Disassembler for AMDGPU ISA ---*- C++ -*--===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker // 10*9880d681SAndroid Build Coastguard Worker /// \file 11*9880d681SAndroid Build Coastguard Worker /// 12*9880d681SAndroid Build Coastguard Worker /// This file contains declaration for AMDGPU ISA disassembler 13*9880d681SAndroid Build Coastguard Worker // 14*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_TARGET_AMDGPU_DISASSEMBLER_AMDGPUDISASSEMBLER_H 17*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_TARGET_AMDGPU_DISASSEMBLER_AMDGPUDISASSEMBLER_H 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/ArrayRef.h" 20*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCDisassembler/MCDisassembler.h" 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker namespace llvm { 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker class MCContext; 25*9880d681SAndroid Build Coastguard Worker class MCInst; 26*9880d681SAndroid Build Coastguard Worker class MCOperand; 27*9880d681SAndroid Build Coastguard Worker class MCSubtargetInfo; 28*9880d681SAndroid Build Coastguard Worker class Twine; 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker class AMDGPUDisassembler : public MCDisassembler { 31*9880d681SAndroid Build Coastguard Worker private: 32*9880d681SAndroid Build Coastguard Worker mutable ArrayRef<uint8_t> Bytes; 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker public: AMDGPUDisassembler(const MCSubtargetInfo & STI,MCContext & Ctx)35*9880d681SAndroid Build Coastguard Worker AMDGPUDisassembler(const MCSubtargetInfo &STI, MCContext &Ctx) : 36*9880d681SAndroid Build Coastguard Worker MCDisassembler(STI, Ctx) {} 37*9880d681SAndroid Build Coastguard Worker ~AMDGPUDisassembler()38*9880d681SAndroid Build Coastguard Worker ~AMDGPUDisassembler() {} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker DecodeStatus getInstruction(MCInst &MI, uint64_t &Size, 41*9880d681SAndroid Build Coastguard Worker ArrayRef<uint8_t> Bytes, uint64_t Address, 42*9880d681SAndroid Build Coastguard Worker raw_ostream &WS, raw_ostream &CS) const override; 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker const char* getRegClassName(unsigned RegClassID) const; 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker MCOperand createRegOperand(unsigned int RegId) const; 47*9880d681SAndroid Build Coastguard Worker MCOperand createRegOperand(unsigned RegClassID, unsigned Val) const; 48*9880d681SAndroid Build Coastguard Worker MCOperand createSRegOperand(unsigned SRegClassID, unsigned Val) const; 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker MCOperand errOperand(unsigned V, const llvm::Twine& ErrMsg) const; 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker DecodeStatus tryDecodeInst(const uint8_t* Table, 53*9880d681SAndroid Build Coastguard Worker MCInst &MI, 54*9880d681SAndroid Build Coastguard Worker uint64_t Inst, 55*9880d681SAndroid Build Coastguard Worker uint64_t Address) const; 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker MCOperand decodeOperand_VGPR_32(unsigned Val) const; 58*9880d681SAndroid Build Coastguard Worker MCOperand decodeOperand_VS_32(unsigned Val) const; 59*9880d681SAndroid Build Coastguard Worker MCOperand decodeOperand_VS_64(unsigned Val) const; 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker MCOperand decodeOperand_VReg_64(unsigned Val) const; 62*9880d681SAndroid Build Coastguard Worker MCOperand decodeOperand_VReg_96(unsigned Val) const; 63*9880d681SAndroid Build Coastguard Worker MCOperand decodeOperand_VReg_128(unsigned Val) const; 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker MCOperand decodeOperand_SReg_32(unsigned Val) const; 66*9880d681SAndroid Build Coastguard Worker MCOperand decodeOperand_SReg_32_XM0(unsigned Val) const; 67*9880d681SAndroid Build Coastguard Worker MCOperand decodeOperand_SReg_64(unsigned Val) const; 68*9880d681SAndroid Build Coastguard Worker MCOperand decodeOperand_SReg_128(unsigned Val) const; 69*9880d681SAndroid Build Coastguard Worker MCOperand decodeOperand_SReg_256(unsigned Val) const; 70*9880d681SAndroid Build Coastguard Worker MCOperand decodeOperand_SReg_512(unsigned Val) const; 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker enum OpWidthTy { 73*9880d681SAndroid Build Coastguard Worker OPW32, 74*9880d681SAndroid Build Coastguard Worker OPW64, 75*9880d681SAndroid Build Coastguard Worker OPW128, 76*9880d681SAndroid Build Coastguard Worker OPW_LAST_, 77*9880d681SAndroid Build Coastguard Worker OPW_FIRST_ = OPW32 78*9880d681SAndroid Build Coastguard Worker }; 79*9880d681SAndroid Build Coastguard Worker unsigned getVgprClassId(const OpWidthTy Width) const; 80*9880d681SAndroid Build Coastguard Worker unsigned getSgprClassId(const OpWidthTy Width) const; 81*9880d681SAndroid Build Coastguard Worker unsigned getTtmpClassId(const OpWidthTy Width) const; 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker static MCOperand decodeIntImmed(unsigned Imm); 84*9880d681SAndroid Build Coastguard Worker static MCOperand decodeFPImmed(bool Is32, unsigned Imm); 85*9880d681SAndroid Build Coastguard Worker MCOperand decodeLiteralConstant() const; 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Worker MCOperand decodeSrcOp(const OpWidthTy Width, unsigned Val) const; 88*9880d681SAndroid Build Coastguard Worker MCOperand decodeSpecialReg32(unsigned Val) const; 89*9880d681SAndroid Build Coastguard Worker MCOperand decodeSpecialReg64(unsigned Val) const; 90*9880d681SAndroid Build Coastguard Worker }; 91*9880d681SAndroid Build Coastguard Worker } // namespace llvm 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker #endif //LLVM_LIB_TARGET_AMDGPU_DISASSEMBLER_AMDGPUDISASSEMBLER_H 94