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.