LLVM: lib/Target/SystemZ/Disassembler/SystemZDisassembler.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

19#include

20#include

21

22using namespace llvm;

24

25#define DEBUG_TYPE "systemz-disassembler"

26

28

29namespace {

30

32public:

35 ~SystemZDisassembler() override = default;

36

40};

41

42}

43

47 return new SystemZDisassembler(STI, Ctx);

48}

49

50

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

84

86 const unsigned *Regs, unsigned Size,

87 bool IsAddr = false) {

88 assert(RegNo < Size && "Invalid register");

89 if (IsAddr && RegNo == 0) {

90 RegNo = SystemZ::NoRegister;

91 } else {

92 RegNo = Regs[RegNo];

93 if (RegNo == 0)

95 }

98}

99

105

111

117

123

129

135

141

147

153

159

165

171

177

183

184template

191

192template

199

205

211

217

223

229

235

241

247

253

259

265

271

272template

281

282template

288

290 Inst, Decoder))

292

294}

295

301

307

313

319

325

326#include "SystemZGenDisassemblerTables.inc"

327

332 CommentStream = &CS;

333

334

336 if (Bytes.size() < 2)

338

339

340 const uint8_t *Table;

341 if (Bytes[0] < 0x40) {

343 Table = DecoderTable16;

344 } else if (Bytes[0] < 0xc0) {

346 Table = DecoderTable32;

347 } else {

349 Table = DecoderTable48;

350 }

351

352

356 }

357

358

359 uint64_t Inst = 0;

360 for (uint64_t I = 0; I < Size; ++I)

361 Inst = (Inst << 8) | Bytes[I];

362

363 return decodeInstruction(Table, MI, Inst, Address, this, STI);

364}

MCDisassembler::DecodeStatus DecodeStatus

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

#define LLVM_EXTERNAL_VISIBILITY

static bool isBranch(unsigned Opcode)

static DecodeStatus DecodeVR128BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:166

static DecodeStatus DecodeGR128BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:118

static DecodeStatus DecodeCR64BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:178

static DecodeStatus decodeSImmOperand(MCInst &Inst, uint64_t Imm)

Definition SystemZDisassembler.cpp:193

static DecodeStatus DecodeFP64BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:142

static DecodeStatus decodeU8ImmOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:224

static DecodeStatus DecodeAR32BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:172

static DecodeStatus DecodeVR32BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:154

static DecodeStatus decodeS32ImmOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:266

static DecodeStatus decodeU3ImmOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:212

static DecodeStatus DecodeFP128BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:148

static DecodeStatus decodeU2ImmOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:206

LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeSystemZDisassembler()

Definition SystemZDisassembler.cpp:52

static DecodeStatus decodeU1ImmOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:200

static DecodeStatus decodeU16ImmOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:236

static DecodeStatus decodePC32DBLBranchOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:314

static DecodeStatus decodePC32DBLOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:320

static DecodeStatus decodePC16DBLBranchOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:302

static DecodeStatus DecodeFP32BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:136

static DecodeStatus decodeU32ImmOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:242

static DecodeStatus decodePCDBLOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, bool isBranch, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:283

static DecodeStatus DecodeVR64BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:160

static DecodeStatus decodeS16ImmOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:254

static DecodeStatus decodeLenOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:273

static DecodeStatus decodeU12ImmOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:230

static DecodeStatus DecodeGR64BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:112

static DecodeStatus decodeU4ImmOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:218

static DecodeStatus decodeS20ImmOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:260

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

Definition SystemZDisassembler.cpp:44

static DecodeStatus decodePC24DBLBranchOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:308

static DecodeStatus DecodeGRH32BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:106

static DecodeStatus decodeS8ImmOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:248

static DecodeStatus decodeRegisterClass(MCInst &Inst, uint64_t RegNo, const unsigned *Regs, unsigned Size, bool IsAddr=false)

Definition SystemZDisassembler.cpp:85

static DecodeStatus decodeUImmOperand(MCInst &Inst, uint64_t Imm)

Definition SystemZDisassembler.cpp:185

static DecodeStatus DecodeGR32BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:100

static DecodeStatus DecodeADDR64BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:131

static DecodeStatus DecodeADDR32BitRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:125

static bool tryAddingSymbolicOperand(int64_t Value, bool IsBranch, uint64_t Address, uint64_t Offset, uint64_t Width, MCInst &MI, const MCDisassembler *Decoder)

tryAddingSymbolicOperand - trys to add a symbolic operand in place of the immediate Value in the MCIn...

Definition SystemZDisassembler.cpp:77

static DecodeStatus decodePC12DBLBranchOperand(MCInst &Inst, uint64_t Imm, uint64_t Address, const MCDisassembler *Decoder)

Definition SystemZDisassembler.cpp:296

ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...

size_t size() const

size - Get the array size.

Context object for machine code objects.

Superclass for all disassemblers.

bool tryAddingSymbolicOperand(MCInst &Inst, int64_t Value, uint64_t Address, bool IsBranch, uint64_t Offset, uint64_t OpSize, uint64_t InstSize) const

DecodeStatus

Ternary decode status.

Instances of this class represent a single low-level machine instruction.

void addOperand(const MCOperand Op)

static MCOperand createReg(MCRegister Reg)

static MCOperand createImm(int64_t Val)

Generic base class for all target subtargets.

Target - Wrapper for Target specific information.

LLVM Value Representation.

This class implements an extremely fast bulk output stream that can only output to a stream.

const unsigned GR64Regs[16]

const unsigned VR128Regs[32]

const unsigned GR128Regs[16]

const unsigned GRH32Regs[16]

const unsigned FP32Regs[16]

const unsigned GR32Regs[16]

const unsigned FP64Regs[16]

const unsigned VR64Regs[32]

const unsigned FP128Regs[16]

const unsigned AR32Regs[16]

const unsigned VR32Regs[32]

const unsigned CR64Regs[16]

This is an optimization pass for GlobalISel generic memory operations.

Target & getTheSystemZTarget()

constexpr bool isUInt(uint64_t x)

Checks if an unsigned integer fits into the given bit width.

constexpr int64_t SignExtend64(uint64_t x)

Sign-extend the number in the bottom B bits of X to a 64-bit integer.

static void RegisterMCDisassembler(Target &T, Target::MCDisassemblerCtorTy Fn)

RegisterMCDisassembler - Register a MCDisassembler implementation for the given target.