LLVM 19.0.0git
Classes | Macros | Typedefs | Functions
AMDGPUDisassembler.cpp File Reference

This file contains definition for AMDGPU ISA disassembler. More...

#include "Disassembler/AMDGPUDisassembler.h"
#include "MCTargetDesc/AMDGPUMCTargetDesc.h"
#include "SIDefines.h"
#include "SIRegisterInfo.h"
#include "TargetInfo/AMDGPUTargetInfo.h"
#include "Utils/AMDGPUBaseInfo.h"
#include "llvm-c/DisassemblerTypes.h"
#include "llvm/BinaryFormat/ELF.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCDecoderOps.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/MC/MCRegisterInfo.h"
#include "llvm/MC/MCSubtargetInfo.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Support/AMDHSAKernelDescriptor.h"
#include "AMDGPUGenDisassemblerTables.inc"

Go to the source code of this file.

Classes

struct  VOPModifiers
 

Macros

#define DEBUG_TYPE   "amdgpu-disassembler"
 
#define SGPR_MAX
 
#define DECODE_OPERAND(StaticDecoderName, DecoderName)
 
#define DECODE_OPERAND_REG_8(RegClass)
 
#define DECODE_SrcOp(Name, EncSize, OpWidth, EncImm, MandatoryLiteral, ImmWidth)
 
#define DECODE_OPERAND_REG_7(RegClass, OpWidth)    DECODE_SrcOp(Decode##RegClass##RegisterClass, 7, OpWidth, Imm, false, 0)
 
#define DECODE_SDWA(DecName)   DECODE_OPERAND(decodeSDWA##DecName, decodeSDWA##DecName)
 
#define GET_FIELD(MASK)   (AMDHSA_BITS_GET(FourByteBuffer, MASK))
 
#define PRINT_DIRECTIVE(DIRECTIVE, MASK)
 
#define PRINT_PSEUDO_DIRECTIVE_COMMENT(DIRECTIVE, MASK)
 
#define PRINT_DIRECTIVE(DIRECTIVE, MASK)
 

Typedefs

using DecodeStatus = llvm::MCDisassembler::DecodeStatus
 

Functions

static MCDisassembler::DecodeStatus addOperand (MCInst &Inst, const MCOperand &Opnd)
 
static int insertNamedMCOperand (MCInst &MI, const MCOperand &Op, uint16_t NameIdx)
 
static DecodeStatus decodeSOPPBrTarget (MCInst &Inst, unsigned Imm, uint64_t Addr, const MCDisassembler *Decoder)
 
static DecodeStatus decodeSMEMOffset (MCInst &Inst, unsigned Imm, uint64_t Addr, const MCDisassembler *Decoder)
 
static DecodeStatus decodeBoolReg (MCInst &Inst, unsigned Val, uint64_t Addr, const MCDisassembler *Decoder)
 
static DecodeStatus decodeSplitBarrier (MCInst &Inst, unsigned Val, uint64_t Addr, const MCDisassembler *Decoder)
 
static DecodeStatus decodeSrcOp (MCInst &Inst, unsigned EncSize, AMDGPUDisassembler::OpWidthTy OpWidth, unsigned Imm, unsigned EncImm, bool MandatoryLiteral, unsigned ImmWidth, AMDGPU::OperandSemantics Sema, const MCDisassembler *Decoder)
 
template<AMDGPUDisassembler::OpWidthTy OpWidth>
static DecodeStatus decodeAV10 (MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *Decoder)
 
template<AMDGPUDisassembler::OpWidthTy OpWidth>
static DecodeStatus decodeSrcReg9 (MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *Decoder)
 
template<AMDGPUDisassembler::OpWidthTy OpWidth>
static DecodeStatus decodeSrcA9 (MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *Decoder)
 
template<AMDGPUDisassembler::OpWidthTy OpWidth>
static DecodeStatus decodeSrcAV10 (MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *Decoder)
 
template<AMDGPUDisassembler::OpWidthTy OpWidth, unsigned ImmWidth, unsigned OperandSemantics>
static DecodeStatus decodeSrcRegOrImm9 (MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *Decoder)
 
template<AMDGPUDisassembler::OpWidthTy OpWidth, unsigned ImmWidth, unsigned OperandSemantics>
static DecodeStatus decodeSrcRegOrImmA9 (MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *Decoder)
 
template<AMDGPUDisassembler::OpWidthTy OpWidth, unsigned ImmWidth, unsigned OperandSemantics>
static DecodeStatus decodeSrcRegOrImmDeferred9 (MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *Decoder)
 
static DecodeStatus DecodeVGPR_16RegisterClass (MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *Decoder)
 
static DecodeStatus DecodeVGPR_16_Lo128RegisterClass (MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *Decoder)
 
static DecodeStatus decodeOperand_VSrcT16_Lo128 (MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *Decoder)
 
static DecodeStatus decodeOperand_VSrcT16 (MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *Decoder)
 
static DecodeStatus decodeOperand_KImmFP (MCInst &Inst, unsigned Imm, uint64_t Addr, const MCDisassembler *Decoder)
 
static DecodeStatus decodeOperandVOPDDstY (MCInst &Inst, unsigned Val, uint64_t Addr, const void *Decoder)
 
static bool IsAGPROperand (const MCInst &Inst, int OpIdx, const MCRegisterInfo *MRI)
 
static DecodeStatus decodeAVLdSt (MCInst &Inst, unsigned Imm, AMDGPUDisassembler::OpWidthTy Opw, const MCDisassembler *Decoder)
 
template<AMDGPUDisassembler::OpWidthTy Opw>
static DecodeStatus decodeAVLdSt (MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *Decoder)
 
static DecodeStatus decodeOperand_VSrc_f64 (MCInst &Inst, unsigned Imm, uint64_t Addr, const MCDisassembler *Decoder)
 
template<typename T >
static T eatBytes (ArrayRef< uint8_t > &Bytes)
 
static DecoderUInt128 eat12Bytes (ArrayRef< uint8_t > &Bytes)
 
static bool isValidDPP8 (const MCInst &MI)
 
static VOPModifiers collectVOPModifiers (const MCInst &MI, bool IsVOP3P=false)
 
static int64_t getInlineImmVal32 (unsigned Imm)
 
static int64_t getInlineImmVal64 (unsigned Imm)
 
static int64_t getInlineImmValF16 (unsigned Imm)
 
static int64_t getInlineImmValBF16 (unsigned Imm)
 
static int64_t getInlineImmVal16 (unsigned Imm, AMDGPU::OperandSemantics Sema)
 
static MCSymbolizercreateAMDGPUSymbolizer (const Triple &, LLVMOpInfoCallback, LLVMSymbolLookupCallback, void *DisInfo, MCContext *Ctx, std::unique_ptr< MCRelocationInfo > &&RelInfo)
 
static MCDisassemblercreateAMDGPUDisassembler (const Target &T, const MCSubtargetInfo &STI, MCContext &Ctx)
 
LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAMDGPUDisassembler ()
 

Detailed Description

This file contains definition for AMDGPU ISA disassembler.

Definition in file AMDGPUDisassembler.cpp.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "amdgpu-disassembler"

Definition at line 39 of file AMDGPUDisassembler.cpp.

◆ DECODE_OPERAND

#define DECODE_OPERAND (   StaticDecoderName,
  DecoderName 
)
Value:
static DecodeStatus StaticDecoderName(MCInst &Inst, unsigned Imm, \
uint64_t /*Addr*/, \
const MCDisassembler *Decoder) { \
auto DAsm = static_cast<const AMDGPUDisassembler *>(Decoder); \
return addOperand(Inst, DAsm->DecoderName(Imm)); \
}
static MCDisassembler::DecodeStatus addOperand(MCInst &Inst, const MCOperand &Opnd)
Superclass for all disassemblers.
DecodeStatus
Ternary decode status.
Instances of this class represent a single low-level machine instruction.
Definition: MCInst.h:184

Definition at line 122 of file AMDGPUDisassembler.cpp.

◆ DECODE_OPERAND_REG_7

#define DECODE_OPERAND_REG_7 (   RegClass,
  OpWidth 
)     DECODE_SrcOp(Decode##RegClass##RegisterClass, 7, OpWidth, Imm, false, 0)

Definition at line 167 of file AMDGPUDisassembler.cpp.

◆ DECODE_OPERAND_REG_8

#define DECODE_OPERAND_REG_8 (   RegClass)
Value:
static DecodeStatus Decode##RegClass##RegisterClass( \
MCInst &Inst, unsigned Imm, uint64_t /*Addr*/, \
const MCDisassembler *Decoder) { \
assert(Imm < (1 << 8) && "8-bit encoding"); \
auto DAsm = static_cast<const AMDGPUDisassembler *>(Decoder); \
return addOperand( \
Inst, DAsm->createRegOperand(AMDGPU::RegClass##RegClassID, Imm)); \
}

Definition at line 132 of file AMDGPUDisassembler.cpp.

◆ DECODE_SDWA

#define DECODE_SDWA (   DecName)    DECODE_OPERAND(decodeSDWA##DecName, decodeSDWA##DecName)

Definition at line 411 of file AMDGPUDisassembler.cpp.

◆ DECODE_SrcOp

#define DECODE_SrcOp (   Name,
  EncSize,
  OpWidth,
  EncImm,
  MandatoryLiteral,
  ImmWidth 
)
Value:
static DecodeStatus Name(MCInst &Inst, unsigned Imm, uint64_t /*Addr*/, \
const MCDisassembler *Decoder) { \
assert(Imm < (1 << EncSize) && #EncSize "-bit encoding"); \
auto DAsm = static_cast<const AMDGPUDisassembler *>(Decoder); \
return addOperand(Inst, \
DAsm->decodeSrcOp(AMDGPUDisassembler::OpWidth, EncImm, \
MandatoryLiteral, ImmWidth)); \
}
std::string Name

Definition at line 142 of file AMDGPUDisassembler.cpp.

◆ GET_FIELD

#define GET_FIELD (   MASK)    (AMDHSA_BITS_GET(FourByteBuffer, MASK))

Definition at line 1886 of file AMDGPUDisassembler.cpp.

◆ PRINT_DIRECTIVE [1/2]

#define PRINT_DIRECTIVE (   DIRECTIVE,
  MASK 
)
Value:
do { \
KdStream << Indent << DIRECTIVE " " << GET_FIELD(MASK) << '\n'; \
} while (0)
#define GET_FIELD(MASK)

Definition at line 1887 of file AMDGPUDisassembler.cpp.

◆ PRINT_DIRECTIVE [2/2]

#define PRINT_DIRECTIVE (   DIRECTIVE,
  MASK 
)
Value:
do { \
KdStream << Indent << DIRECTIVE " " \
<< ((TwoByteBuffer & MASK) >> (MASK##_SHIFT)) << '\n'; \
} while (0)

Definition at line 1887 of file AMDGPUDisassembler.cpp.

◆ PRINT_PSEUDO_DIRECTIVE_COMMENT

#define PRINT_PSEUDO_DIRECTIVE_COMMENT (   DIRECTIVE,
  MASK 
)
Value:
do { \
KdStream << Indent << MAI.getCommentString() << ' ' << DIRECTIVE " " \
<< GET_FIELD(MASK) << '\n'; \
} while (0)

Definition at line 1891 of file AMDGPUDisassembler.cpp.

◆ SGPR_MAX

#define SGPR_MAX

Typedef Documentation

◆ DecodeStatus

Definition at line 45 of file AMDGPUDisassembler.cpp.

Function Documentation

◆ addOperand()

static MCDisassembler::DecodeStatus addOperand ( MCInst Inst,
const MCOperand Opnd 
)
inlinestatic

◆ collectVOPModifiers()

static VOPModifiers collectVOPModifiers ( const MCInst MI,
bool  IsVOP3P = false 
)
static

◆ createAMDGPUDisassembler()

static MCDisassembler * createAMDGPUDisassembler ( const Target T,
const MCSubtargetInfo STI,
MCContext Ctx 
)
static

Definition at line 2408 of file AMDGPUDisassembler.cpp.

Referenced by LLVMInitializeAMDGPUDisassembler().

◆ createAMDGPUSymbolizer()

static MCSymbolizer * createAMDGPUSymbolizer ( const Triple ,
LLVMOpInfoCallback  ,
LLVMSymbolLookupCallback  ,
void *  DisInfo,
MCContext Ctx,
std::unique_ptr< MCRelocationInfo > &&  RelInfo 
)
static

Definition at line 2399 of file AMDGPUDisassembler.cpp.

Referenced by LLVMInitializeAMDGPUDisassembler().

◆ decodeAV10()

template<AMDGPUDisassembler::OpWidthTy OpWidth>
static DecodeStatus decodeAV10 ( MCInst Inst,
unsigned  Imm,
uint64_t  ,
const MCDisassembler Decoder 
)
static

◆ decodeAVLdSt() [1/2]

static DecodeStatus decodeAVLdSt ( MCInst Inst,
unsigned  Imm,
AMDGPUDisassembler::OpWidthTy  Opw,
const MCDisassembler Decoder 
)
static

◆ decodeAVLdSt() [2/2]

static DecodeStatus decodeAVLdSt ( MCInst Inst,
unsigned  Imm,
uint64_t  ,
const MCDisassembler Decoder 
)
static

Definition at line 395 of file AMDGPUDisassembler.cpp.

References decodeAVLdSt().

◆ decodeBoolReg()

static DecodeStatus decodeBoolReg ( MCInst Inst,
unsigned  Val,
uint64_t  Addr,
const MCDisassembler Decoder 
)
static

Definition at line 109 of file AMDGPUDisassembler.cpp.

References addOperand().

◆ decodeOperand_KImmFP()

static DecodeStatus decodeOperand_KImmFP ( MCInst Inst,
unsigned  Imm,
uint64_t  Addr,
const MCDisassembler Decoder 
)
static

Definition at line 333 of file AMDGPUDisassembler.cpp.

References addOperand().

◆ decodeOperand_VSrc_f64()

static DecodeStatus decodeOperand_VSrc_f64 ( MCInst Inst,
unsigned  Imm,
uint64_t  Addr,
const MCDisassembler Decoder 
)
static

◆ decodeOperand_VSrcT16()

static DecodeStatus decodeOperand_VSrcT16 ( MCInst Inst,
unsigned  Imm,
uint64_t  ,
const MCDisassembler Decoder 
)
static

Definition at line 317 of file AMDGPUDisassembler.cpp.

References addOperand(), assert(), and llvm::AMDGPUDisassembler::OPW16.

◆ decodeOperand_VSrcT16_Lo128()

static DecodeStatus decodeOperand_VSrcT16_Lo128 ( MCInst Inst,
unsigned  Imm,
uint64_t  ,
const MCDisassembler Decoder 
)
static

Definition at line 301 of file AMDGPUDisassembler.cpp.

References addOperand(), assert(), and llvm::AMDGPUDisassembler::OPW16.

◆ decodeOperandVOPDDstY()

static DecodeStatus decodeOperandVOPDDstY ( MCInst Inst,
unsigned  Val,
uint64_t  Addr,
const void *  Decoder 
)
static

Definition at line 340 of file AMDGPUDisassembler.cpp.

References addOperand().

◆ decodeSMEMOffset()

static DecodeStatus decodeSMEMOffset ( MCInst Inst,
unsigned  Imm,
uint64_t  Addr,
const MCDisassembler Decoder 
)
static

Definition at line 95 of file AMDGPUDisassembler.cpp.

References addOperand(), llvm::MCOperand::createImm(), and llvm::Offset.

◆ decodeSOPPBrTarget()

static DecodeStatus decodeSOPPBrTarget ( MCInst Inst,
unsigned  Imm,
uint64_t  Addr,
const MCDisassembler Decoder 
)
static

◆ decodeSplitBarrier()

static DecodeStatus decodeSplitBarrier ( MCInst Inst,
unsigned  Val,
uint64_t  Addr,
const MCDisassembler Decoder 
)
static

Definition at line 115 of file AMDGPUDisassembler.cpp.

References addOperand().

◆ decodeSrcA9()

template<AMDGPUDisassembler::OpWidthTy OpWidth>
static DecodeStatus decodeSrcA9 ( MCInst Inst,
unsigned  Imm,
uint64_t  ,
const MCDisassembler Decoder 
)
static

Definition at line 194 of file AMDGPUDisassembler.cpp.

References decodeSrcOp(), and llvm::AMDGPU::INT.

◆ decodeSrcAV10()

template<AMDGPUDisassembler::OpWidthTy OpWidth>
static DecodeStatus decodeSrcAV10 ( MCInst Inst,
unsigned  Imm,
uint64_t  ,
const MCDisassembler Decoder 
)
static

Definition at line 203 of file AMDGPUDisassembler.cpp.

References decodeSrcOp(), and llvm::AMDGPU::INT.

◆ decodeSrcOp()

static DecodeStatus decodeSrcOp ( MCInst Inst,
unsigned  EncSize,
AMDGPUDisassembler::OpWidthTy  OpWidth,
unsigned  Imm,
unsigned  EncImm,
bool  MandatoryLiteral,
unsigned  ImmWidth,
AMDGPU::OperandSemantics  Sema,
const MCDisassembler Decoder 
)
static

◆ decodeSrcReg9()

template<AMDGPUDisassembler::OpWidthTy OpWidth>
static DecodeStatus decodeSrcReg9 ( MCInst Inst,
unsigned  Imm,
uint64_t  ,
const MCDisassembler Decoder 
)
static

Definition at line 183 of file AMDGPUDisassembler.cpp.

References decodeSrcOp(), and llvm::AMDGPU::INT.

◆ decodeSrcRegOrImm9()

template<AMDGPUDisassembler::OpWidthTy OpWidth, unsigned ImmWidth, unsigned OperandSemantics>
static DecodeStatus decodeSrcRegOrImm9 ( MCInst Inst,
unsigned  Imm,
uint64_t  ,
const MCDisassembler Decoder 
)
static

Definition at line 217 of file AMDGPUDisassembler.cpp.

References decodeSrcOp().

◆ decodeSrcRegOrImmA9()

template<AMDGPUDisassembler::OpWidthTy OpWidth, unsigned ImmWidth, unsigned OperandSemantics>
static DecodeStatus decodeSrcRegOrImmA9 ( MCInst Inst,
unsigned  Imm,
uint64_t  ,
const MCDisassembler Decoder 
)
static

Definition at line 228 of file AMDGPUDisassembler.cpp.

References decodeSrcOp().

◆ decodeSrcRegOrImmDeferred9()

template<AMDGPUDisassembler::OpWidthTy OpWidth, unsigned ImmWidth, unsigned OperandSemantics>
static DecodeStatus decodeSrcRegOrImmDeferred9 ( MCInst Inst,
unsigned  Imm,
uint64_t  ,
const MCDisassembler Decoder 
)
static

Definition at line 237 of file AMDGPUDisassembler.cpp.

References decodeSrcOp().

◆ DecodeVGPR_16_Lo128RegisterClass()

static DecodeStatus DecodeVGPR_16_Lo128RegisterClass ( MCInst Inst,
unsigned  Imm,
uint64_t  ,
const MCDisassembler Decoder 
)
static

Definition at line 291 of file AMDGPUDisassembler.cpp.

References addOperand(), and assert().

◆ DecodeVGPR_16RegisterClass()

static DecodeStatus DecodeVGPR_16RegisterClass ( MCInst Inst,
unsigned  Imm,
uint64_t  ,
const MCDisassembler Decoder 
)
static

Definition at line 278 of file AMDGPUDisassembler.cpp.

References addOperand(), and assert().

◆ eat12Bytes()

static DecoderUInt128 eat12Bytes ( ArrayRef< uint8_t > &  Bytes)
inlinestatic

◆ eatBytes()

template<typename T >
static T eatBytes ( ArrayRef< uint8_t > &  Bytes)
inlinestatic

◆ getInlineImmVal16()

static int64_t getInlineImmVal16 ( unsigned  Imm,
AMDGPU::OperandSemantics  Sema 
)
static

◆ getInlineImmVal32()

static int64_t getInlineImmVal32 ( unsigned  Imm)
static

Definition at line 1377 of file AMDGPUDisassembler.cpp.

References llvm_unreachable.

Referenced by llvm::AMDGPUDisassembler::decodeFPImmed().

◆ getInlineImmVal64()

static int64_t getInlineImmVal64 ( unsigned  Imm)
static

Definition at line 1402 of file AMDGPUDisassembler.cpp.

References llvm_unreachable.

Referenced by llvm::AMDGPUDisassembler::decodeFPImmed().

◆ getInlineImmValBF16()

static int64_t getInlineImmValBF16 ( unsigned  Imm)
static

Definition at line 1452 of file AMDGPUDisassembler.cpp.

References llvm_unreachable.

Referenced by getInlineImmVal16().

◆ getInlineImmValF16()

static int64_t getInlineImmValF16 ( unsigned  Imm)
static

Definition at line 1427 of file AMDGPUDisassembler.cpp.

References llvm_unreachable.

Referenced by getInlineImmVal16().

◆ insertNamedMCOperand()

static int insertNamedMCOperand ( MCInst MI,
const MCOperand Op,
uint16_t  NameIdx 
)
static

◆ IsAGPROperand()

static bool IsAGPROperand ( const MCInst Inst,
int  OpIdx,
const MCRegisterInfo MRI 
)
static

Definition at line 346 of file AMDGPUDisassembler.cpp.

References llvm::MCInst::getOperand(), and MRI.

◆ isValidDPP8()

static bool isValidDPP8 ( const MCInst MI)
static

◆ LLVMInitializeAMDGPUDisassembler()

LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAMDGPUDisassembler ( )