LLVM: lib/Target/PowerPC/Disassembler/PPCDisassembler.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
19
20using namespace llvm;
22
24
25#define DEBUG_TYPE "ppc-disassembler"
26
28
29namespace {
31 bool IsLittleEndian;
32
33public:
35 bool IsLittleEndian)
36 : MCDisassembler(STI, Ctx), IsLittleEndian(IsLittleEndian) {}
37
41};
42}
43
47 return new PPCDisassembler(STI, Ctx, false);
48}
49
53 return new PPCDisassembler(STI, Ctx, true);
54}
55
68
75
83
84
85
86
87template <std::size_t N>
95
101
107
113
119
123 if (RegNo > 30 || (RegNo & 1))
126}
127
133
139
145
151
157
163
169
175
181
187
193
199
202 const void *Decoder) {
204}
205
208 const void *Decoder) {
210}
211
212
213
216 const void *Decoder) {
218}
219
222 const void *Decoder) {
224}
225
228 const void *Decoder) {
230}
231
232
233
235 uint64_t Address, const void *Decoder) {
237}
238
244
245#define DecodeQSRCRegisterClass DecodeQFRCRegisterClass
246#define DecodeQBRCRegisterClass DecodeQFRCRegisterClass
247
248template
250 int64_t Address,
256}
257
258template
260 int64_t Address,
266}
267
269 int64_t Address,
271 if (Imm != 0)
275}
276
285
287 int64_t Address,
289
292}
293
295 int64_t Address,
297
298
299
300
301 const int64_t Disp = SignExtend64<7>((Imm & 0x3F) + 64) * 8;
302
305}
306
308 int64_t Address,
310
313}
314
316 int64_t Address,
318
319
321
324}
325
327 int64_t Address,
329
330
332
335}
336
338 int64_t Address,
340
341
345}
346
348 int64_t Address,
350
351
353 if (Zeros >= 8)
355
358}
359
360#include "PPCGenDisassemblerTables.inc"
361
368
369
370
371
372
373
374
375
376
377 if (STI.hasFeature(PPC::FeaturePrefixInstrs) && Bytes.size() >= 8) {
378 uint32_t Prefix = ReadFunc(Bytes.data());
379 uint32_t BaseInst = ReadFunc(Bytes.data() + 4);
380 uint64_t Inst = BaseInst | (uint64_t)Prefix << 32;
382 this, STI);
385 return result;
386 }
387 }
388
389
391 if (Bytes.size() < 4) {
394 }
395
396
397 uint64_t Inst = ReadFunc(Bytes.data());
398
399 if (STI.hasFeature(PPC::FeatureSPE)) {
401 decodeInstruction(DecoderTableSPE32, MI, Inst, Address, this, STI);
403 return result;
404 }
405
406 return decodeInstruction(DecoderTable32, MI, Inst, Address, this, STI);
407}
MCDisassembler::DecodeStatus DecodeStatus
#define LLVM_EXTERNAL_VISIBILITY
static DecodeStatus decodeRegisterClass(MCInst &Inst, uint64_t RegNo, const MCPhysReg(&Regs)[N])
Definition PPCDisassembler.cpp:88
static DecodeStatus decodeVSRpEvenOperands(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:277
static DecodeStatus DecodeVSFRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:146
static DecodeStatus decodeDispSPE4Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:326
static DecodeStatus DecodeDMRRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder)
Definition PPCDisassembler.cpp:226
static DecodeStatus decodeCRBitMOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:347
DecodeStatus DecodeDMRpRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder)
Definition PPCDisassembler.cpp:234
static DecodeStatus decodeImmZeroOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:268
LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializePowerPCDisassembler()
Definition PPCDisassembler.cpp:57
static DecodeStatus DecodeCRBITRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:102
static DecodeStatus DecodeGPRC_NOR0RegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:165
static DecodeStatus DecodeG8pRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:176
static DecodeStatus decodeDispRIHashOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:294
static DecodeStatus DecodeGPRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:158
static DecodeStatus DecodeFpRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:120
static MCDisassembler * createPPCDisassembler(const Target &T, const MCSubtargetInfo &STI, MCContext &Ctx)
Definition PPCDisassembler.cpp:44
static DecodeStatus decodeDispSPE2Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:337
static DecodeStatus decodeSImmOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:259
static DecodeStatus DecodeVSRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:140
static DecodeStatus decodeCondBrTarget(MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *)
Definition PPCDisassembler.cpp:69
static DecodeStatus decodeDispSPE8Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:315
static DecodeStatus DecodeVRRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:134
static MCDisassembler * createPPCLEDisassembler(const Target &T, const MCSubtargetInfo &STI, MCContext &Ctx)
Definition PPCDisassembler.cpp:50
static DecodeStatus decodeDispRIX16Operand(MCInst &Inst, uint64_t Imm, int64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:307
static DecodeStatus DecodeCRRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:96
static DecodeStatus decodeUImmOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:249
static DecodeStatus DecodeG8RC_NOX0RegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:183
static DecodeStatus DecodeACCRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:194
static DecodeStatus DecodeVSSRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:152
static DecodeStatus DecodeWACC_HIRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder)
Definition PPCDisassembler.cpp:206
static DecodeStatus DecodeVFRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:128
static DecodeStatus DecodeF8RCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:114
static DecodeStatus DecodeSPERCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:188
DecodeStatus DecodeDMRROWRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder)
Definition PPCDisassembler.cpp:214
static DecodeStatus DecodeWACCRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder)
Definition PPCDisassembler.cpp:200
static DecodeStatus DecodeG8RCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:170
static DecodeStatus DecodeDMRROWpRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const void *Decoder)
Definition PPCDisassembler.cpp:220
static DecodeStatus decodeDispRIXOperand(MCInst &Inst, uint64_t Imm, int64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:286
static DecodeStatus DecodeF4RCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:108
static DecodeStatus DecodeVSRpRCRegisterClass(MCInst &Inst, uint64_t RegNo, uint64_t Address, const MCDisassembler *Decoder)
Definition PPCDisassembler.cpp:239
static DecodeStatus decodeDirectBrTarget(MCInst &Inst, unsigned Imm, uint64_t, const MCDisassembler *)
Definition PPCDisassembler.cpp:76
#define DEFINE_PPC_REGCLASSES
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.
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.
This class implements an extremely fast bulk output stream that can only output to a stream.
uint32_t read32be(const void *P)
uint32_t read32le(const void *P)
This is an optimization pass for GlobalISel generic memory operations.
Target & getThePPC64LETarget()
Target & getThePPC32Target()
int countr_zero(T Val)
Count number of 0's from the least significant bit to the most stopping at the first 1.
constexpr bool isUInt(uint64_t x)
Checks if an unsigned integer fits into the given bit width.
Target & getThePPC64Target()
uint16_t MCPhysReg
An unsigned integer type large enough to represent all physical registers, but not necessarily virtua...
constexpr int32_t SignExtend32(uint32_t X)
Sign-extend the number in the bottom B bits of X to a 32-bit integer.
Target & getThePPC32LETarget()
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.