LLVM  14.0.0git
Namespaces | Macros | Enumerations | Functions
X86AsmBackend.cpp File Reference
#include "MCTargetDesc/X86BaseInfo.h"
#include "MCTargetDesc/X86FixupKinds.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/BinaryFormat/ELF.h"
#include "llvm/BinaryFormat/MachO.h"
#include "llvm/MC/MCAsmBackend.h"
#include "llvm/MC/MCAsmLayout.h"
#include "llvm/MC/MCAssembler.h"
#include "llvm/MC/MCCodeEmitter.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCDwarf.h"
#include "llvm/MC/MCELFObjectWriter.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCFixupKindInfo.h"
#include "llvm/MC/MCInst.h"
#include "llvm/MC/MCInstrInfo.h"
#include "llvm/MC/MCMachObjectWriter.h"
#include "llvm/MC/MCObjectStreamer.h"
#include "llvm/MC/MCObjectWriter.h"
#include "llvm/MC/MCRegisterInfo.h"
#include "llvm/MC/MCSectionMachO.h"
#include "llvm/MC/MCSubtargetInfo.h"
#include "llvm/MC/MCValue.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/TargetRegistry.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/BinaryFormat/ELFRelocs/x86_64.def"
#include "llvm/BinaryFormat/ELFRelocs/i386.def"
Include dependency graph for X86AsmBackend.cpp:

Go to the source code of this file.

Namespaces

 CU
 

Macros

#define ELF_RELOC(X, Y)   .Case(#X, Y)
 
#define ELF_RELOC(X, Y)   .Case(#X, Y)
 

Enumerations

enum  CompactUnwindEncodings
 Compact unwind encoding values. More...
 

Functions

static unsigned getRelaxedOpcodeBranch (const MCInst &Inst, bool Is16BitMode)
 
static unsigned getRelaxedOpcodeArith (const MCInst &Inst)
 
static unsigned getRelaxedOpcode (const MCInst &Inst, bool Is16BitMode)
 
static X86::CondCode getCondFromBranch (const MCInst &MI, const MCInstrInfo &MCII)
 
static X86::SecondMacroFusionInstKind classifySecondInstInMacroFusion (const MCInst &MI, const MCInstrInfo &MCII)
 
static bool isRIPRelative (const MCInst &MI, const MCInstrInfo &MCII)
 Check if the instruction uses RIP relative addressing. More...
 
static bool isPrefix (const MCInst &MI, const MCInstrInfo &MCII)
 Check if the instruction is a prefix. More...
 
static bool isFirstMacroFusibleInst (const MCInst &Inst, const MCInstrInfo &MCII)
 Check if the instruction is valid as the first instruction in macro fusion. More...
 
static bool hasVariantSymbol (const MCInst &MI)
 Check if the instruction has a variant symbol operand. More...
 
static bool hasInterruptDelaySlot (const MCInst &Inst)
 X86 has certain instructions which enable interrupts exactly one instruction after the instruction which stores to SS. More...
 
static bool isRightAfterData (MCFragment *CurrentFragment, const std::pair< MCFragment *, size_t > &PrevInstPosition)
 Check if the instruction to be emitted is right after any data. More...
 
static size_t getSizeForInstFragment (const MCFragment *F)
 
static unsigned getFixupKindSize (unsigned Kind)
 
static bool isFullyRelaxed (const MCRelaxableFragment &RF)
 Return true if this instruction has been fully relaxed into it's most general available form. More...
 

Macro Definition Documentation

◆ ELF_RELOC [1/2]

#define ELF_RELOC (   X,
  Y 
)    .Case(#X, Y)

◆ ELF_RELOC [2/2]

#define ELF_RELOC (   X,
  Y 
)    .Case(#X, Y)

Enumeration Type Documentation

◆ CompactUnwindEncodings

Compact unwind encoding values.

Definition at line 1252 of file X86AsmBackend.cpp.

Function Documentation

◆ classifySecondInstInMacroFusion()

static X86::SecondMacroFusionInstKind classifySecondInstInMacroFusion ( const MCInst MI,
const MCInstrInfo MCII 
)
static

◆ getCondFromBranch()

static X86::CondCode getCondFromBranch ( const MCInst MI,
const MCInstrInfo MCII 
)
static

◆ getFixupKindSize()

static unsigned getFixupKindSize ( unsigned  Kind)
static

◆ getRelaxedOpcode()

static unsigned getRelaxedOpcode ( const MCInst Inst,
bool  Is16BitMode 
)
static

◆ getRelaxedOpcodeArith()

static unsigned getRelaxedOpcodeArith ( const MCInst Inst)
static

Definition at line 230 of file X86AsmBackend.cpp.

References llvm::MCInst::getOpcode().

Referenced by getRelaxedOpcode().

◆ getRelaxedOpcodeBranch()

static unsigned getRelaxedOpcodeBranch ( const MCInst Inst,
bool  Is16BitMode 
)
static

Definition at line 218 of file X86AsmBackend.cpp.

References llvm::MCInst::getOpcode().

Referenced by getRelaxedOpcode().

◆ getSizeForInstFragment()

static size_t getSizeForInstFragment ( const MCFragment F)
static
Returns
the fragment size if it has instructions, otherwise returns 0.

Definition at line 521 of file X86AsmBackend.cpp.

References F, llvm::MCFragment::FT_CompactEncodedInst, llvm::MCFragment::FT_Data, llvm::MCFragment::FT_Relaxable, and llvm_unreachable.

◆ hasInterruptDelaySlot()

static bool hasInterruptDelaySlot ( const MCInst Inst)
static

X86 has certain instructions which enable interrupts exactly one instruction after the instruction which stores to SS.

Return true if the given instruction has such an interrupt delay slot.

Definition at line 473 of file X86AsmBackend.cpp.

References llvm::MCInst::getOpcode(), llvm::MCInst::getOperand(), llvm::MCOperand::getReg(), and llvm::X86AS::SS.

◆ hasVariantSymbol()

static bool hasVariantSymbol ( const MCInst MI)
static

Check if the instruction has a variant symbol operand.

Definition at line 450 of file X86AsmBackend.cpp.

References llvm::MCExpr::getKind(), MI, llvm::MCExpr::SymbolRef, and llvm::MCSymbolRefExpr::VK_None.

◆ isFirstMacroFusibleInst()

static bool isFirstMacroFusibleInst ( const MCInst Inst,
const MCInstrInfo MCII 
)
static

Check if the instruction is valid as the first instruction in macro fusion.

Definition at line 362 of file X86AsmBackend.cpp.

References llvm::X86::classifyFirstOpcodeInMacroFusion(), llvm::MCInst::getOpcode(), llvm::X86::Invalid, and isRIPRelative().

◆ isFullyRelaxed()

static bool isFullyRelaxed ( const MCRelaxableFragment RF)
static

Return true if this instruction has been fully relaxed into it's most general available form.

Definition at line 860 of file X86AsmBackend.cpp.

References llvm::MCSubtargetInfo::getFeatureBits(), llvm::MCRelaxableFragment::getInst(), llvm::MCInst::getOpcode(), getRelaxedOpcode(), and llvm::MCEncodedFragment::getSubtargetInfo().

◆ isPrefix()

static bool isPrefix ( const MCInst MI,
const MCInstrInfo MCII 
)
static

Check if the instruction is a prefix.

Definition at line 357 of file X86AsmBackend.cpp.

References llvm::MCInstrInfo::get(), llvm::X86II::isPrefix(), MI, and llvm::MCInstrDesc::TSFlags.

◆ isRightAfterData()

static bool isRightAfterData ( MCFragment CurrentFragment,
const std::pair< MCFragment *, size_t > &  PrevInstPosition 
)
static

Check if the instruction to be emitted is right after any data.

Definition at line 493 of file X86AsmBackend.cpp.

References DF, and F.

◆ isRIPRelative()

static bool isRIPRelative ( const MCInst MI,
const MCInstrInfo MCII 
)
static

Check if the instruction uses RIP relative addressing.

Definition at line 343 of file X86AsmBackend.cpp.

References llvm::X86::AddrBaseReg, llvm::MCInstrInfo::get(), llvm::X86II::getMemoryOperandNo(), llvm::X86II::getOperandBias(), MI, and llvm::MCInstrDesc::TSFlags.

Referenced by isFirstMacroFusibleInst().