34#define DEBUG_TYPE "mccodeemitter"
36STATISTIC(MCNumEmitted,
"Number of MC instructions emitted");
46 VEMCCodeEmitter(
const VEMCCodeEmitter &) =
delete;
47 VEMCCodeEmitter &
operator=(
const VEMCCodeEmitter &) =
delete;
48 ~VEMCCodeEmitter()
override =
default;
91void VEMCCodeEmitter::encodeInstruction(
const MCInst &
MI,
101unsigned VEMCCodeEmitter::getMachineOpValue(
const MCInst &
MI,
106 return Ctx.getRegisterInfo()->getEncodingValue(MO.
getReg());
108 return static_cast<unsigned>(MO.
getImm());
113 if (
const auto *SExpr = dyn_cast<MCSpecifierExpr>(Expr)) {
120 if (Expr->evaluateAsAbsolute(Res))
128VEMCCodeEmitter::getBranchTargetOpValue(
const MCInst &
MI,
unsigned OpNo,
133 return getMachineOpValue(
MI, MO, Fixups, STI);
155 getMachineOpValue(
MI, MO, Fixups, STI)));
159#include "VEGenMCCodeEmitter.inc"
163 return new VEMCCodeEmitter(MCII, Ctx);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static uint32_t getBranchTargetOpValue(const MCInst &MI, unsigned OpIdx, unsigned FixupKind, SmallVectorImpl< MCFixup > &Fixups, const MCSubtargetInfo &STI)
getBranchTargetOpValue - Helper function to get the branch target operand, which is either an immedia...
This file defines the SmallVector class.
This file defines the 'Statistic' class, which is designed to be an easy way to expose various metric...
#define STATISTIC(VARNAME, DESC)
static void addFixup(SmallVectorImpl< MCFixup > &Fixups, uint32_t Offset, const MCExpr *Value, uint16_t Kind)
MCCodeEmitter - Generic instruction encoding interface.
virtual void encodeInstruction(const MCInst &Inst, SmallVectorImpl< char > &CB, SmallVectorImpl< MCFixup > &Fixups, const MCSubtargetInfo &STI) const =0
Encode the given Inst to bytes and append to CB.
MCCodeEmitter & operator=(const MCCodeEmitter &)=delete
Context object for machine code objects.
Base class for the full range of assembler expressions which are needed for parsing.
static MCFixup create(uint32_t Offset, const MCExpr *Value, MCFixupKind Kind, bool PCRel=false)
Consider bit fields if we need more flags.
Instances of this class represent a single low-level machine instruction.
Interface to description of machine instruction set.
Instances of this class represent operands of the MCInst class.
MCRegister getReg() const
Returns the register number.
const MCExpr * getExpr() const
Generic base class for all target subtargets.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
LLVM Value Representation.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
@ fixup_ve_srel32
fixup_ve_srel32 - 32-bit fixup corresponding to foo for relative branch
@ fixup_ve_pc_hi32
fixup_ve_pc_hi32 - 32-bit fixup corresponding to foo@pc_hi
@ fixup_ve_pc_lo32
fixup_ve_pc_lo32 - 32-bit fixup corresponding to foo@pc_lo
VE::Fixups getFixupKind(uint8_t S)
This is an optimization pass for GlobalISel generic memory operations.
static unsigned VECondCodeToVal(VECC::CondCode CC)
static unsigned VERDToVal(VERD::RoundingMode R)
MCCodeEmitter * createVEMCCodeEmitter(const MCInstrInfo &MCII, MCContext &Ctx)