35#define DEBUG_TYPE "mips-disassembler"
48 IsMicroMips(STI.
hasFeature(Mips::FeatureMicroMips)),
49 IsBigEndian(IsBigEndian) {}
51 bool hasMips2()
const {
return STI.
hasFeature(Mips::FeatureMips2); }
52 bool hasMips3()
const {
return STI.
hasFeature(Mips::FeatureMips3); }
53 bool hasMips32()
const {
return STI.
hasFeature(Mips::FeatureMips32); }
55 bool hasMips32r6()
const {
59 bool isFP64()
const {
return STI.
hasFeature(Mips::FeatureFP64Bit); }
61 bool isGP64()
const {
return STI.
hasFeature(Mips::FeatureGP64Bit); }
63 bool isPTR64()
const {
return STI.
hasFeature(Mips::FeaturePTR64Bit); }
65 bool hasCnMips()
const {
return STI.
hasFeature(Mips::FeatureCnMips); }
67 bool hasCnMipsP()
const {
return STI.
hasFeature(Mips::FeatureCnMipsP); }
69 bool hasCOP3()
const {
71 return !hasMips32() && !hasMips3();
84 return new MipsDisassembler(STI, Ctx,
true);
90 return new MipsDisassembler(STI, Ctx,
false);
108 return RegInfo->getRegClass(RC).getRegister(RegNo);
123 if (RegNo > 30 || RegNo % 2)
255 unsigned Regs[] = {Mips::R16, Mips::R17, Mips::R18, Mips::R19, Mips::R20,
256 Mips::R21, Mips::R22, Mips::R23,
Mips::FP};
259 unsigned RegLst = RegListEncoding;
265 RegNum = RegLst & 0xf;
271 for (
unsigned i = 0; i < RegNum; i++)
281 unsigned RegListEncoding,
284 unsigned Regs[] = {Mips::R16, Mips::R17, Mips::R18, Mips::R19};
285 unsigned RegLst = RegListEncoding;
286 unsigned RegNum = RegLst & 0x3;
288 for (
unsigned i = 0; i <= RegNum; i++)
296template <
typename InsnType>
306 DecodeFN RegDecoder =
nullptr;
307 if ((tmp & 0x18) == 0x00) {
310 }
else if ((tmp & 0x1c) == 0x10) {
313 }
else if ((tmp & 0x1e) == 0x18) {
316 }
else if ((tmp & 0x1f) == 0x1c) {
322 assert(NSize != 0 && RegDecoder !=
nullptr);
344template <
typename InsnType>
358template <
typename InsnType>
378 MI.setOpcode(Mips::BOVC);
380 }
else if (Rs != 0 && Rs < Rt) {
381 MI.setOpcode(Mips::BEQC);
384 MI.setOpcode(Mips::BEQZALC);
397template <
typename InsnType>
406 MI.setOpcode(Mips::BOVC_MMR6);
412 }
else if (Rs != 0 && Rs < Rt) {
413 MI.setOpcode(Mips::BEQC_MMR6);
420 MI.setOpcode(Mips::BEQZALC_MMR6);
431template <
typename InsnType>
451 MI.setOpcode(Mips::BNVC);
453 }
else if (Rs != 0 && Rs < Rt) {
454 MI.setOpcode(Mips::BNEC);
457 MI.setOpcode(Mips::BNEZALC);
470template <
typename InsnType>
479 MI.setOpcode(Mips::BNVC_MMR6);
485 }
else if (Rs != 0 && Rs < Rt) {
486 MI.setOpcode(Mips::BNEC_MMR6);
493 MI.setOpcode(Mips::BNEZALC_MMR6);
504template <
typename InsnType>
523 MI.setOpcode(Mips::BGTZC_MMR6);
525 MI.setOpcode(Mips::BLTZC_MMR6);
527 MI.setOpcode(Mips::BLTC_MMR6);
543template <
typename InsnType>
562 MI.setOpcode(Mips::BLEZC_MMR6);
564 MI.setOpcode(Mips::BGEZC_MMR6);
567 MI.setOpcode(Mips::BGEC_MMR6);
582template <
typename InsnType>
605 MI.setOpcode(Mips::BLEZC);
607 MI.setOpcode(Mips::BGEZC);
610 MI.setOpcode(Mips::BGEC);
625template <
typename InsnType>
649 MI.setOpcode(Mips::BGTZC);
651 MI.setOpcode(Mips::BLTZC);
653 MI.setOpcode(Mips::BLTC);
669template <
typename InsnType>
691 MI.setOpcode(Mips::BGTZ);
693 }
else if (Rs == 0) {
694 MI.setOpcode(Mips::BGTZALC);
696 }
else if (Rs == Rt) {
697 MI.setOpcode(Mips::BLTZALC);
700 MI.setOpcode(Mips::BLTUC);
718template <
typename InsnType>
741 MI.setOpcode(Mips::BLEZALC);
743 MI.setOpcode(Mips::BGEZALC);
746 MI.setOpcode(Mips::BGEUC);
762template <
typename InsnType>
770 switch (
MI.getOpcode()) {
777 Size = Msbd + 1 + 32;
787 MI.setOpcode(Mips::DEXT);
804template <
typename InsnType>
812 switch (
MI.getOpcode()) {
815 Size = Msbd + 1 - Pos;
819 Size = Msbd + 33 - Pos;
825 Size = Msbd + 33 - Pos;
834 MI.setOpcode(Mips::DINS);
846template <
typename InsnType>
947 if (
static_cast<const MipsDisassembler *
>(
Decoder)->isGP64())
953template <
unsigned RegNo>
1128 else if (
Value == 0x7)
1152template <
unsigned Bits,
int Offset,
int Scale>
1156 Value &= ((1 << Bits) - 1);
1162template <
unsigned Bits,
int Offset = 0,
int ScaleBy = 1>
1171template <
unsigned Bits,
int Offset>
1185 int Size = (int) Insn - Pos + 1;
1206 int32_t DecodedValue;
1208 case 0: DecodedValue = 256;
break;
1209 case 1: DecodedValue = 257;
break;
1210 case 510: DecodedValue = -258;
break;
1211 case 511: DecodedValue = -257;
break;
1223 int32_t DecodedValues[] = {128, 1, 2, 3, 4, 7, 8, 15,
1224 16, 31, 32, 63, 64, 255, 32768, 65535};
1281 if (
static_cast<const MipsDisassembler *
>(
Decoder)->hasMips32r6())
1305template <
typename InsnType>
1325 MI.setOpcode(Mips::BGTZALC_MMR6);
1329 else if (Rs == Rt) {
1330 MI.setOpcode(Mips::BLTZALC_MMR6);
1335 MI.setOpcode(Mips::BLTUC_MMR6);
1354template <
typename InsnType>
1373 MI.setOpcode(Mips::BLEZALC_MMR6);
1376 else if (Rs == Rt) {
1377 MI.setOpcode(Mips::BGEZALC_MMR6);
1382 MI.setOpcode(Mips::BGEUC_MMR6);
1406#include "MipsGenDisassemblerTables.inc"
1414 if (Bytes.
size() < 2) {
1420 Insn = (Bytes[0] << 8) | Bytes[1];
1422 Insn = (Bytes[1] << 8) | Bytes[0];
1432 bool IsBigEndian,
bool IsMicroMips) {
1434 if (Bytes.
size() < 4) {
1450 (Bytes[3] << 0) | (Bytes[2] << 8) | (Bytes[1] << 16) | (Bytes[0] << 24);
1453 Insn = (Bytes[2] << 0) | (Bytes[3] << 8) | (Bytes[0] << 16) |
1456 Insn = (Bytes[0] << 0) | (Bytes[1] << 8) | (Bytes[2] << 16) |
1477 if (hasMips32r6()) {
1479 dbgs() <<
"Trying MicroMipsR616 table (16-bit instructions):\n");
1482 Result = decodeInstruction(DecoderTableMicroMipsR616, Instr, Insn,
1490 LLVM_DEBUG(
dbgs() <<
"Trying MicroMips16 table (16-bit instructions):\n");
1493 Result = decodeInstruction(DecoderTableMicroMips16, Instr, Insn,
Address,
1504 if (hasMips32r6()) {
1506 dbgs() <<
"Trying MicroMips32r632 table (32-bit instructions):\n");
1508 Result = decodeInstruction(DecoderTableMicroMipsR632, Instr, Insn,
1516 LLVM_DEBUG(
dbgs() <<
"Trying MicroMips32 table (32-bit instructions):\n");
1518 Result = decodeInstruction(DecoderTableMicroMips32, Instr, Insn,
Address,
1526 LLVM_DEBUG(
dbgs() <<
"Trying MicroMipsFP64 table (32-bit opcodes):\n");
1527 Result = decodeInstruction(DecoderTableMicroMipsFP6432, Instr, Insn,
1557 decodeInstruction(DecoderTableCOP3_32, Instr, Insn,
Address,
this, STI);
1562 if (hasMips32r6() && isGP64()) {
1564 dbgs() <<
"Trying Mips32r6_64r6 (GPR64) table (32-bit opcodes):\n");
1565 Result = decodeInstruction(DecoderTableMips32r6_64r6_GP6432, Instr, Insn,
1571 if (hasMips32r6() && isPTR64()) {
1573 dbgs() <<
"Trying Mips32r6_64r6 (PTR64) table (32-bit opcodes):\n");
1574 Result = decodeInstruction(DecoderTableMips32r6_64r6_PTR6432, Instr, Insn,
1580 if (hasMips32r6()) {
1581 LLVM_DEBUG(
dbgs() <<
"Trying Mips32r6_64r6 table (32-bit opcodes):\n");
1582 Result = decodeInstruction(DecoderTableMips32r6_64r632, Instr, Insn,
1588 if (hasMips2() && isPTR64()) {
1590 dbgs() <<
"Trying Mips32r6_64r6 (PTR64) table (32-bit opcodes):\n");
1591 Result = decodeInstruction(DecoderTableMips32_64_PTR6432, Instr, Insn,
1599 Result = decodeInstruction(DecoderTableCnMips32, Instr, Insn,
Address,
this,
1606 LLVM_DEBUG(
dbgs() <<
"Trying CnMipsP table (32-bit opcodes):\n");
1607 Result = decodeInstruction(DecoderTableCnMipsP32, Instr, Insn,
Address,
1614 LLVM_DEBUG(
dbgs() <<
"Trying Mips64 (GPR64) table (32-bit opcodes):\n");
1615 Result = decodeInstruction(DecoderTableMips6432, Instr, Insn,
Address,
this,
1623 dbgs() <<
"Trying MipsFP64 (64 bit FPU) table (32-bit opcodes):\n");
1624 Result = decodeInstruction(DecoderTableMipsFP6432, Instr, Insn,
Address,
1633 decodeInstruction(DecoderTableMips32, Instr, Insn,
Address,
this, STI);
MCDisassembler::DecodeStatus DecodeStatus
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
uint64_t const MCDisassembler * Decoder
static bool readInstruction16(ArrayRef< uint8_t > Bytes, uint64_t Address, uint64_t &Size, uint32_t &Insn)
static bool readInstruction32(ArrayRef< uint8_t > Bytes, uint64_t Address, uint64_t &Size, uint32_t &Insn)
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
#define LLVM_EXTERNAL_VISIBILITY
static DecodeStatus DecodePOOL16BEncodedField(MCInst &Inst, unsigned Value, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeSimm19Lsl2(MCInst &Inst, unsigned Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeCOP3RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBgtzlGroupBranch(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus readInstruction32(ArrayRef< uint8_t > Bytes, uint64_t Address, uint64_t &Size, uint32_t &Insn, bool IsBigEndian, bool IsMicroMips)
Read four bytes from the ArrayRef and return 32 bit word sorted according to the given endianness.
static DecodeStatus DecodeBranchTarget21(MCInst &Inst, unsigned Offset, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeJumpTargetXMM(MCInst &Inst, unsigned Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeFGR32RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeCCRRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeCOP2RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeFCCRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus readInstruction16(ArrayRef< uint8_t > Bytes, uint64_t Address, uint64_t &Size, uint32_t &Insn, bool IsBigEndian)
Read two bytes from the ArrayRef and return 16 bit halfword sorted according to the given endianness.
static DecodeStatus DecodeGPRMM16RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeSImmWithOffsetAndScale(MCInst &Inst, unsigned Value, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeSimm23Lsl2(MCInst &Inst, unsigned Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeGPRMM16MovePRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBranchTarget1SImm16(MCInst &Inst, unsigned Offset, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeMovePOperands(MCInst &Inst, unsigned Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeCRC(MCInst &MI, InsnType Insn, uint64_t Address, const MCDisassembler *Decoder)
static MCRegister getReg(const MCDisassembler *D, unsigned RC, unsigned RegNo)
static DecodeStatus DecodePOP75GroupBranchMMR6(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeDINS(MCInst &MI, InsnType Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeCPU16RegsRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeMSA128WRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBranchTarget26(MCInst &Inst, unsigned Offset, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeFixedPtrRegister(MCInst &Inst, const MCDisassembler *Decoder)
static DecodeStatus DecodeHWRegsRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeSimm9SP(MCInst &Inst, unsigned Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeUImmWithOffsetAndScale(MCInst &Inst, unsigned Value, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeDEXT(MCInst &MI, InsnType Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeGPRMM16ZeroRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeLi16Imm(MCInst &Inst, unsigned Value, uint64_t Address, const MCDisassembler *Decoder)
static MCDisassembler * createMipselDisassembler(const Target &T, const MCSubtargetInfo &STI, MCContext &Ctx)
static DecodeStatus DecodeSimm18Lsl3(MCInst &Inst, unsigned Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeSP64RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBlezlGroupBranch(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeCOP0RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBranchTarget(MCInst &Inst, unsigned Offset, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBgtzGroupBranch(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBranchTargetMM(MCInst &Inst, unsigned Offset, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodePOP35GroupBranchMMR6(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeFIXMEInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBranchTarget10MM(MCInst &Inst, unsigned Offset, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeANDI16Imm(MCInst &Inst, unsigned Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeMSA128DRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeSP32RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static MCDisassembler * createMipsDisassembler(const Target &T, const MCSubtargetInfo &STI, MCContext &Ctx)
static DecodeStatus DecodeGPR32RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeMSA128BRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeDaddiGroupBranch(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeMovePRegPair(MCInst &Inst, unsigned RegPair, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBranchTarget21MM(MCInst &Inst, unsigned Offset, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBranchTarget26MM(MCInst &Inst, unsigned Offset, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeAFGR64RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeDAHIDATI(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeGPR32Pair(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeLO32DSPRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeHI32DSPRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodePtrRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeUImmWithOffset(MCInst &Inst, unsigned Value, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeAddiGroupBranch(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeAddiur2Simm7(MCInst &Inst, unsigned Value, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeMSACtrlRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeMSA128HRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeGP64RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBranchTarget7MM(MCInst &Inst, unsigned Offset, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeFGR64RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeGPR64RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBlezGroupBranchMMR6(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeJumpTargetMM(MCInst &Inst, unsigned Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodePOP37GroupBranchMMR6(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeJumpTarget(MCInst &Inst, unsigned Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeRegListOperand(MCInst &Inst, unsigned RegListEncoding, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeACC64DSPRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBgtzGroupBranchMMR6(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodePOP65GroupBranchMMR6(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeDSPRRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeInsSize(MCInst &Inst, unsigned Insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeBlezGroupBranch(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeLBU16Offset(MCInst &Inst, unsigned Value, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeGP32RegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const MCDisassembler *Decoder)
static DecodeStatus DecodeINSVE_DF(MCInst &MI, InsnType insn, uint64_t Address, const MCDisassembler *Decoder)
LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeMipsDisassembler()
static DecodeStatus DecodeRegListOperand16(MCInst &Inst, unsigned RegListEncoding, uint64_t Address, const MCDisassembler *Decoder)
Represent a constant reference to an array (0 or more elements consecutively in memory),...
size_t size() const
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)
const MCOperand & getOperand(unsigned i) const
static MCOperand createReg(MCRegister Reg)
static MCOperand createImm(int64_t Val)
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
Wrapper class representing physical registers. Should be passed by value.
Generic base class for all target subtargets.
bool hasFeature(unsigned Feature) const
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.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
std::enable_if_t< std::is_integral_v< IntType >, IntType > fieldFromInstruction(const IntType &Insn, unsigned StartBit, unsigned NumBits)
MCRegister getCOP0Register(const MCRegisterInfo &MRI, unsigned Encoding)
constexpr unsigned getCOP0RegNum(unsigned Encoding)
constexpr unsigned getCOP0Sel(unsigned Encoding)
This is an optimization pass for GlobalISel generic memory operations.
Target & getTheMips64Target()
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Target & getTheMips64elTarget()
Target & getTheMipselTarget()
constexpr int32_t SignExtend32(uint32_t X)
Sign-extend the number in the bottom B bits of X to a 32-bit integer.
constexpr int64_t SignExtend64(uint64_t x)
Sign-extend the number in the bottom B bits of X to a 64-bit integer.
Target & getTheMipsTarget()
static void RegisterMCDisassembler(Target &T, Target::MCDisassemblerCtorTy Fn)
RegisterMCDisassembler - Register a MCDisassembler implementation for the given target.