mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-28 22:00:30 +00:00
MC: Move target specific fixup info descriptors to TargetAsmBackend instead of
the MCCodeEmitter, which seems like a better organization. - Also, cleaned up some magic constants while in the area. llvm-svn: 121953
This commit is contained in:
parent
2f4a8d7553
commit
fc14f1e5f6
@ -11,7 +11,6 @@
|
||||
#define LLVM_MC_MCCODEEMITTER_H
|
||||
|
||||
#include "llvm/MC/MCFixup.h"
|
||||
#include "llvm/MC/MCFixupKindInfo.h"
|
||||
|
||||
#include <cassert>
|
||||
|
||||
@ -32,17 +31,6 @@ protected: // Can only create subclasses.
|
||||
public:
|
||||
virtual ~MCCodeEmitter();
|
||||
|
||||
/// @name Target Independent Fixup Information
|
||||
/// @{
|
||||
|
||||
/// getNumFixupKinds - Get the number of target specific fixup kinds.
|
||||
virtual unsigned getNumFixupKinds() const = 0;
|
||||
|
||||
/// getFixupKindInfo - Get information on a fixup kind.
|
||||
virtual const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const;
|
||||
|
||||
/// @}
|
||||
|
||||
/// EncodeInstruction - Encode the given \arg Inst to bytes on the output
|
||||
/// stream \arg OS.
|
||||
virtual void EncodeInstruction(const MCInst &Inst, raw_ostream &OS,
|
||||
|
@ -11,6 +11,8 @@
|
||||
#define LLVM_TARGET_TARGETASMBACKEND_H
|
||||
|
||||
#include "llvm/MC/MCDirectives.h"
|
||||
#include "llvm/MC/MCFixup.h"
|
||||
#include "llvm/MC/MCFixupKindInfo.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
namespace llvm {
|
||||
@ -80,12 +82,28 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
/// @name Target Fixup Interfaces
|
||||
/// @{
|
||||
|
||||
/// getNumFixupKinds - Get the number of target specific fixup kinds.
|
||||
virtual unsigned getNumFixupKinds() const = 0;
|
||||
|
||||
/// getFixupKindInfo - Get information on a fixup kind.
|
||||
virtual const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const;
|
||||
|
||||
/// @}
|
||||
|
||||
/// ApplyFixup - Apply the \arg Value for given \arg Fixup into the provided
|
||||
/// data fragment, at the offset specified by the fixup and following the
|
||||
/// fixup kind as appropriate.
|
||||
virtual void ApplyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize,
|
||||
uint64_t Value) const = 0;
|
||||
|
||||
/// @}
|
||||
|
||||
/// @name Target Relaxation Interfaces
|
||||
/// @{
|
||||
|
||||
/// MayNeedRelaxation - Check whether the given instruction may need
|
||||
/// relaxation.
|
||||
///
|
||||
@ -100,6 +118,8 @@ public:
|
||||
/// \parm Res [output] - On return, the relaxed instruction.
|
||||
virtual void RelaxInstruction(const MCInst &Inst, MCInst &Res) const = 0;
|
||||
|
||||
/// @}
|
||||
|
||||
/// WriteNopData - Write an (optimal) nop sequence of Count bytes to the given
|
||||
/// output. If the target cannot generate such a sequence, it should return an
|
||||
/// error.
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "llvm/MC/MCCodeEmitter.h"
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCFixupKindInfo.h"
|
||||
#include "llvm/MC/MCInst.h"
|
||||
#include "llvm/MC/MCInstPrinter.h"
|
||||
#include "llvm/MC/MCSectionMachO.h"
|
||||
@ -794,7 +795,7 @@ void MCAsmStreamer::AddEncodingComment(const MCInst &Inst) {
|
||||
|
||||
for (unsigned i = 0, e = Fixups.size(); i != e; ++i) {
|
||||
MCFixup &F = Fixups[i];
|
||||
const MCFixupKindInfo &Info = Emitter->getFixupKindInfo(F.getKind());
|
||||
const MCFixupKindInfo &Info = AsmBackend->getFixupKindInfo(F.getKind());
|
||||
for (unsigned j = 0; j != Info.TargetSize; ++j) {
|
||||
unsigned Index = F.getOffset() * 8 + Info.TargetOffset + j;
|
||||
assert(Index < Code.size() * 8 && "Invalid offset in fixup!");
|
||||
@ -848,7 +849,7 @@ void MCAsmStreamer::AddEncodingComment(const MCInst &Inst) {
|
||||
|
||||
for (unsigned i = 0, e = Fixups.size(); i != e; ++i) {
|
||||
MCFixup &F = Fixups[i];
|
||||
const MCFixupKindInfo &Info = Emitter->getFixupKindInfo(F.getKind());
|
||||
const MCFixupKindInfo &Info = AsmBackend->getFixupKindInfo(F.getKind());
|
||||
OS << " fixup " << char('A' + i) << " - " << "offset: " << F.getOffset()
|
||||
<< ", value: " << *F.getValue() << ", kind: " << Info.Name << "\n";
|
||||
}
|
||||
|
@ -224,7 +224,7 @@ bool MCAssembler::EvaluateFixup(const MCObjectWriter &Writer,
|
||||
|
||||
Value = Target.getConstant();
|
||||
|
||||
bool IsPCRel = Emitter.getFixupKindInfo(
|
||||
bool IsPCRel = Backend.getFixupKindInfo(
|
||||
Fixup.getKind()).Flags & MCFixupKindInfo::FKF_IsPCRel;
|
||||
bool IsResolved = true;
|
||||
bool IsThumb = false;
|
||||
@ -248,7 +248,7 @@ bool MCAssembler::EvaluateFixup(const MCObjectWriter &Writer,
|
||||
if (IsResolved)
|
||||
IsResolved = Writer.IsFixupFullyResolved(*this, Target, IsPCRel, DF);
|
||||
|
||||
bool ShouldAlignPC = Emitter.getFixupKindInfo(Fixup.getKind()).Flags &
|
||||
bool ShouldAlignPC = Backend.getFixupKindInfo(Fixup.getKind()).Flags &
|
||||
MCFixupKindInfo::FKF_IsAlignedDownTo32Bits;
|
||||
assert((ShouldAlignPC ? IsPCRel : true) &&
|
||||
"FKF_IsAlignedDownTo32Bits is only allowed on PC-relative fixups!");
|
||||
|
@ -16,18 +16,3 @@ MCCodeEmitter::MCCodeEmitter() {
|
||||
|
||||
MCCodeEmitter::~MCCodeEmitter() {
|
||||
}
|
||||
|
||||
const MCFixupKindInfo &MCCodeEmitter::getFixupKindInfo(MCFixupKind Kind) const {
|
||||
static const MCFixupKindInfo Builtins[] = {
|
||||
{ "FK_Data_1", 0, 8, 0 },
|
||||
{ "FK_Data_2", 0, 16, 0 },
|
||||
{ "FK_Data_4", 0, 32, 0 },
|
||||
{ "FK_Data_8", 0, 64, 0 },
|
||||
{ "FK_PCRel_1", 0, 8, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "FK_PCRel_2", 0, 16, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "FK_PCRel_4", 0, 32, MCFixupKindInfo::FKF_IsPCRel }
|
||||
};
|
||||
|
||||
assert(Kind <= 6 && "Unknown fixup kind");
|
||||
return Builtins[Kind];
|
||||
}
|
||||
|
@ -18,3 +18,20 @@ TargetAsmBackend::TargetAsmBackend()
|
||||
|
||||
TargetAsmBackend::~TargetAsmBackend() {
|
||||
}
|
||||
|
||||
const MCFixupKindInfo &
|
||||
TargetAsmBackend::getFixupKindInfo(MCFixupKind Kind) const {
|
||||
static const MCFixupKindInfo Builtins[] = {
|
||||
{ "FK_Data_1", 0, 8, 0 },
|
||||
{ "FK_Data_2", 0, 16, 0 },
|
||||
{ "FK_Data_4", 0, 32, 0 },
|
||||
{ "FK_Data_8", 0, 64, 0 },
|
||||
{ "FK_PCRel_1", 0, 8, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "FK_PCRel_2", 0, 16, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "FK_PCRel_4", 0, 32, MCFixupKindInfo::FKF_IsPCRel }
|
||||
};
|
||||
|
||||
assert(Kind <= sizeof(Builtins) / sizeof(Builtins[0]) &&
|
||||
"Unknown fixup kind");
|
||||
return Builtins[Kind];
|
||||
}
|
||||
|
@ -32,6 +32,46 @@ class ARMAsmBackend : public TargetAsmBackend {
|
||||
public:
|
||||
ARMAsmBackend(const Target &T) : TargetAsmBackend(), isThumbMode(false) {}
|
||||
|
||||
unsigned getNumFixupKinds() const { return ARM::NumTargetFixupKinds; }
|
||||
|
||||
const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const {
|
||||
const static MCFixupKindInfo Infos[ARM::NumTargetFixupKinds] = {
|
||||
// This table *must* be in the order that the fixup_* kinds are defined in
|
||||
// ARMFixupKinds.h.
|
||||
//
|
||||
// Name Offset (bits) Size (bits) Flags
|
||||
{ "fixup_arm_ldst_pcrel_12", 1, 24, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_t2_ldst_pcrel_12", 0, 32, MCFixupKindInfo::FKF_IsPCRel |
|
||||
MCFixupKindInfo::FKF_IsAlignedDownTo32Bits},
|
||||
{ "fixup_arm_pcrel_10", 1, 24, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_t2_pcrel_10", 0, 32, MCFixupKindInfo::FKF_IsPCRel |
|
||||
MCFixupKindInfo::FKF_IsAlignedDownTo32Bits},
|
||||
{ "fixup_thumb_adr_pcrel_10",0, 8, MCFixupKindInfo::FKF_IsPCRel |
|
||||
MCFixupKindInfo::FKF_IsAlignedDownTo32Bits},
|
||||
{ "fixup_arm_adr_pcrel_12", 1, 24, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_t2_adr_pcrel_12", 0, 32, MCFixupKindInfo::FKF_IsPCRel |
|
||||
MCFixupKindInfo::FKF_IsAlignedDownTo32Bits},
|
||||
{ "fixup_arm_branch", 0, 24, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_t2_condbranch", 0, 32, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_t2_uncondbranch", 0, 32, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_br", 0, 16, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_bl", 0, 32, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_blx", 7, 21, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_cb", 0, 16, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_cp", 1, 8, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_bcc", 1, 8, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_movt_hi16", 0, 16, 0 },
|
||||
{ "fixup_arm_movw_lo16", 0, 16, 0 },
|
||||
};
|
||||
|
||||
if (Kind < FirstTargetFixupKind)
|
||||
return TargetAsmBackend::getFixupKindInfo(Kind);
|
||||
|
||||
assert(unsigned(Kind - FirstTargetFixupKind) < getNumFixupKinds() &&
|
||||
"Invalid kind!");
|
||||
return Infos[Kind - FirstTargetFixupKind];
|
||||
}
|
||||
|
||||
bool MayNeedRelaxation(const MCInst &Inst) const;
|
||||
|
||||
void RelaxInstruction(const MCInst &Inst, MCInst &Res) const;
|
||||
|
@ -41,45 +41,6 @@ public:
|
||||
|
||||
~ARMMCCodeEmitter() {}
|
||||
|
||||
unsigned getNumFixupKinds() const { return ARM::NumTargetFixupKinds; }
|
||||
|
||||
const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const {
|
||||
const static MCFixupKindInfo Infos[] = {
|
||||
// This table *must* be in the order that the fixup_* kinds are defined in
|
||||
// ARMFixupKinds.h.
|
||||
//
|
||||
// Name Offset (bits) Size (bits) Flags
|
||||
{ "fixup_arm_ldst_pcrel_12", 1, 24, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_t2_ldst_pcrel_12", 0, 32, MCFixupKindInfo::FKF_IsPCRel |
|
||||
MCFixupKindInfo::FKF_IsAlignedDownTo32Bits},
|
||||
{ "fixup_arm_pcrel_10", 1, 24, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_t2_pcrel_10", 0, 32, MCFixupKindInfo::FKF_IsPCRel |
|
||||
MCFixupKindInfo::FKF_IsAlignedDownTo32Bits},
|
||||
{ "fixup_thumb_adr_pcrel_10",0, 8, MCFixupKindInfo::FKF_IsPCRel |
|
||||
MCFixupKindInfo::FKF_IsAlignedDownTo32Bits},
|
||||
{ "fixup_arm_adr_pcrel_12", 1, 24, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_t2_adr_pcrel_12", 0, 32, MCFixupKindInfo::FKF_IsPCRel |
|
||||
MCFixupKindInfo::FKF_IsAlignedDownTo32Bits},
|
||||
{ "fixup_arm_branch", 0, 24, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_t2_condbranch", 0, 32, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_t2_uncondbranch", 0, 32, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_br", 0, 16, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_bl", 0, 32, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_blx", 7, 21, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_cb", 0, 16, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_cp", 1, 8, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_bcc", 1, 8, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_movt_hi16", 0, 16, 0 },
|
||||
{ "fixup_arm_movw_lo16", 0, 16, 0 },
|
||||
};
|
||||
|
||||
if (Kind < FirstTargetFixupKind)
|
||||
return MCCodeEmitter::getFixupKindInfo(Kind);
|
||||
|
||||
assert(unsigned(Kind - FirstTargetFixupKind) < getNumFixupKinds() &&
|
||||
"Invalid kind!");
|
||||
return Infos[Kind - FirstTargetFixupKind];
|
||||
}
|
||||
unsigned getMachineSoImmOpValue(unsigned SoImm) const;
|
||||
|
||||
// getBinaryCodeForInstr - TableGen'erated function for getting the
|
||||
|
@ -47,6 +47,10 @@ public:
|
||||
: TargetAsmBackend() {
|
||||
}
|
||||
|
||||
unsigned getNumFixupKinds() const {
|
||||
return 2;
|
||||
}
|
||||
|
||||
bool MayNeedRelaxation(const MCInst &Inst) const;
|
||||
|
||||
void RelaxInstruction(const MCInst &Inst, MCInst &Res) const;
|
||||
|
@ -51,10 +51,6 @@ public:
|
||||
return getMachineOpValue(MI, MI.getOperand(OpIdx));
|
||||
}
|
||||
|
||||
unsigned getNumFixupKinds() const {
|
||||
return 2;
|
||||
}
|
||||
|
||||
static unsigned GetMBlazeRegNum(const MCOperand &MO) {
|
||||
// FIXME: getMBlazeRegisterNumbering() is sufficient?
|
||||
assert(0 && "MBlazeMCCodeEmitter::GetMBlazeRegNum() not yet implemented.");
|
||||
|
@ -22,6 +22,26 @@ namespace {
|
||||
const Target &TheTarget;
|
||||
public:
|
||||
PPCAsmBackend(const Target &T) : TargetAsmBackend(), TheTarget(T) {}
|
||||
|
||||
unsigned getNumFixupKinds() const { return PPC::NumTargetFixupKinds; }
|
||||
|
||||
const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const {
|
||||
const static MCFixupKindInfo Infos[PPC::NumTargetFixupKinds] = {
|
||||
// name offset bits flags
|
||||
{ "fixup_ppc_br24", 6, 24, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_ppc_brcond14", 16, 14, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_ppc_lo16", 16, 16, 0 },
|
||||
{ "fixup_ppc_ha16", 16, 16, 0 },
|
||||
{ "fixup_ppc_lo14", 16, 14, 0 }
|
||||
};
|
||||
|
||||
if (Kind < FirstTargetFixupKind)
|
||||
return TargetAsmBackend::getFixupKindInfo(Kind);
|
||||
|
||||
assert(unsigned(Kind - FirstTargetFixupKind) < getNumFixupKinds() &&
|
||||
"Invalid kind!");
|
||||
return Infos[Kind - FirstTargetFixupKind];
|
||||
}
|
||||
|
||||
bool MayNeedRelaxation(const MCInst &Inst) const {
|
||||
// FIXME.
|
||||
|
@ -37,26 +37,6 @@ public:
|
||||
}
|
||||
|
||||
~PPCMCCodeEmitter() {}
|
||||
|
||||
unsigned getNumFixupKinds() const { return PPC::NumTargetFixupKinds; }
|
||||
|
||||
const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const {
|
||||
const static MCFixupKindInfo Infos[] = {
|
||||
// name offset bits flags
|
||||
{ "fixup_ppc_br24", 6, 24, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_ppc_brcond14", 16, 14, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_ppc_lo16", 16, 16, 0 },
|
||||
{ "fixup_ppc_ha16", 16, 16, 0 },
|
||||
{ "fixup_ppc_lo14", 16, 14, 0 }
|
||||
};
|
||||
|
||||
if (Kind < FirstTargetFixupKind)
|
||||
return MCCodeEmitter::getFixupKindInfo(Kind);
|
||||
|
||||
assert(unsigned(Kind - FirstTargetFixupKind) < getNumFixupKinds() &&
|
||||
"Invalid kind!");
|
||||
return Infos[Kind - FirstTargetFixupKind];
|
||||
}
|
||||
|
||||
unsigned getDirectBrEncoding(const MCInst &MI, unsigned OpNo,
|
||||
SmallVectorImpl<MCFixup> &Fixups) const;
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/MC/MCAssembler.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCFixupKindInfo.h"
|
||||
#include "llvm/MC/MCObjectFormat.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCSectionCOFF.h"
|
||||
@ -49,6 +50,26 @@ public:
|
||||
X86AsmBackend(const Target &T)
|
||||
: TargetAsmBackend() {}
|
||||
|
||||
unsigned getNumFixupKinds() const {
|
||||
return X86::NumTargetFixupKinds;
|
||||
}
|
||||
|
||||
const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const {
|
||||
const static MCFixupKindInfo Infos[X86::NumTargetFixupKinds] = {
|
||||
{ "reloc_riprel_4byte", 0, 4 * 8, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "reloc_riprel_4byte_movq_load", 0, 4 * 8, MCFixupKindInfo::FKF_IsPCRel},
|
||||
{ "reloc_signed_4byte", 0, 4 * 8, 0},
|
||||
{ "reloc_global_offset_table", 0, 4 * 8, 0}
|
||||
};
|
||||
|
||||
if (Kind < FirstTargetFixupKind)
|
||||
return TargetAsmBackend::getFixupKindInfo(Kind);
|
||||
|
||||
assert(unsigned(Kind - FirstTargetFixupKind) < getNumFixupKinds() &&
|
||||
"Invalid kind!");
|
||||
return Infos[Kind - FirstTargetFixupKind];
|
||||
}
|
||||
|
||||
void ApplyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize,
|
||||
uint64_t Value) const {
|
||||
unsigned Size = 1 << getFixupKindLog2Size(Fixup.getKind());
|
||||
|
@ -20,9 +20,12 @@ enum Fixups {
|
||||
reloc_signed_4byte, // 32-bit signed. Unlike FK_Data_4
|
||||
// this will be sign extended at
|
||||
// runtime.
|
||||
reloc_global_offset_table // 32-bit, relative to the start
|
||||
reloc_global_offset_table, // 32-bit, relative to the start
|
||||
// of the instruction. Used only
|
||||
// for _GLOBAL_OFFSET_TABLE_.
|
||||
// Marker
|
||||
LastTargetFixupKind,
|
||||
NumTargetFixupKinds = LastTargetFixupKind - FirstTargetFixupKind
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -38,26 +38,6 @@ public:
|
||||
|
||||
~X86MCCodeEmitter() {}
|
||||
|
||||
unsigned getNumFixupKinds() const {
|
||||
return 7;
|
||||
}
|
||||
|
||||
const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const {
|
||||
const static MCFixupKindInfo Infos[] = {
|
||||
{ "reloc_riprel_4byte", 0, 4 * 8, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "reloc_riprel_4byte_movq_load", 0, 4 * 8, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "reloc_signed_4byte", 0, 4 * 8, 0},
|
||||
{ "reloc_global_offset_table", 0, 4 * 8, 0}
|
||||
};
|
||||
|
||||
if (Kind < FirstTargetFixupKind)
|
||||
return MCCodeEmitter::getFixupKindInfo(Kind);
|
||||
|
||||
assert(unsigned(Kind - FirstTargetFixupKind) < getNumFixupKinds() &&
|
||||
"Invalid kind!");
|
||||
return Infos[Kind - FirstTargetFixupKind];
|
||||
}
|
||||
|
||||
static unsigned GetX86RegNum(const MCOperand &MO) {
|
||||
return X86RegisterInfo::getX86RegNum(MO.getReg());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user