struct X86Operand

Declaration

struct X86Operand : public MCParsedAsmOperand { /* full declaration omitted */ };

Description

X86Operand - Instances of this class represent a parsed X86 machine instruction.

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:31

Inherits from: MCParsedAsmOperand

Member Variables

public enum KindTy Kind
public llvm::SMLoc StartLoc
public llvm::SMLoc EndLoc
public llvm::SMLoc OffsetOfLoc
public llvm::StringRef SymName
public void* OpDecl
public bool AddressOf
public bool UseUpRegs = false
This used for inline asm which may specify base reg and index reg for MemOp. e.g. ARR[eax + ecx*4], so no extra reg can be used for MemOp.
public anonymous struct / union

Method Overview

Inherited from MCParsedAsmOperand:

Methods

static std::unique_ptr<X86Operand> CreateDXReg(
    llvm::SMLoc StartLoc,
    llvm::SMLoc EndLoc)

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:655

Parameters

llvm::SMLoc StartLoc
llvm::SMLoc EndLoc

static std::unique_ptr<X86Operand> CreateImm(
    const llvm::MCExpr* Val,
    llvm::SMLoc StartLoc,
    llvm::SMLoc EndLoc,
    llvm::StringRef SymName = llvm::StringRef(),
    void* OpDecl = nullptr,
    bool GlobalRef = true)

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:666

Parameters

const llvm::MCExpr* Val
llvm::SMLoc StartLoc
llvm::SMLoc EndLoc
llvm::StringRef SymName = llvm::StringRef()
void* OpDecl = nullptr
bool GlobalRef = true

static std::unique_ptr<X86Operand> CreateMem(
    unsigned int ModeSize,
    unsigned int SegReg,
    const llvm::MCExpr* Disp,
    unsigned int BaseReg,
    unsigned int IndexReg,
    unsigned int Scale,
    llvm::SMLoc StartLoc,
    llvm::SMLoc EndLoc,
    unsigned int Size = 0,
    unsigned int DefaultBaseReg = X86::NoRegister,
    llvm::StringRef SymName = llvm::StringRef(),
    void* OpDecl = nullptr,
    unsigned int FrontendSize = 0,
    bool UseUpRegs = false,
    bool MaybeDirectBranchDest = true)

Description

Create a generalized memory operand.

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:706

Parameters

unsigned int ModeSize
unsigned int SegReg
const llvm::MCExpr* Disp
unsigned int BaseReg
unsigned int IndexReg
unsigned int Scale
llvm::SMLoc StartLoc
llvm::SMLoc EndLoc
unsigned int Size = 0
unsigned int DefaultBaseReg = X86::NoRegister
llvm::StringRef SymName = llvm::StringRef()
void* OpDecl = nullptr
unsigned int FrontendSize = 0
bool UseUpRegs = false
bool MaybeDirectBranchDest = true

static std::unique_ptr<X86Operand> CreateMem(
    unsigned int ModeSize,
    const llvm::MCExpr* Disp,
    llvm::SMLoc StartLoc,
    llvm::SMLoc EndLoc,
    unsigned int Size = 0,
    llvm::StringRef SymName = llvm::StringRef(),
    void* OpDecl = nullptr,
    unsigned int FrontendSize = 0,
    bool UseUpRegs = false,
    bool MaybeDirectBranchDest = true)

Description

Create an absolute memory operand.

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:682

Parameters

unsigned int ModeSize
const llvm::MCExpr* Disp
llvm::SMLoc StartLoc
llvm::SMLoc EndLoc
unsigned int Size = 0
llvm::StringRef SymName = llvm::StringRef()
void* OpDecl = nullptr
unsigned int FrontendSize = 0
bool UseUpRegs = false
bool MaybeDirectBranchDest = true

static std::unique_ptr<X86Operand> CreatePrefix(
    unsigned int Prefixes,
    llvm::SMLoc StartLoc,
    llvm::SMLoc EndLoc)

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:660

Parameters

unsigned int Prefixes
llvm::SMLoc StartLoc
llvm::SMLoc EndLoc

static std::unique_ptr<X86Operand> CreateReg(
    unsigned int RegNo,
    llvm::SMLoc StartLoc,
    llvm::SMLoc EndLoc,
    bool AddressOf = false,
    llvm::SMLoc OffsetOfLoc = llvm::SMLoc(),
    llvm::StringRef SymName = llvm::StringRef(),
    void* OpDecl = nullptr)

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:642

Parameters

unsigned int RegNo
llvm::SMLoc StartLoc
llvm::SMLoc EndLoc
bool AddressOf = false
llvm::SMLoc OffsetOfLoc = llvm::SMLoc()
llvm::StringRef SymName = llvm::StringRef()
void* OpDecl = nullptr

static std::unique_ptr<X86Operand> CreateToken(
    llvm::StringRef Str,
    llvm::SMLoc Loc)

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:633

Parameters

llvm::StringRef Str
llvm::SMLoc Loc

X86Operand(llvm::X86Operand::KindTy K,
           llvm::SMLoc Start,
           llvm::SMLoc End)

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:90

Parameters

llvm::X86Operand::KindTy K
llvm::SMLoc Start
llvm::SMLoc End

void addAVX512RCOperands(llvm::MCInst& Inst,
                         unsigned int N) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:557

Parameters

llvm::MCInst& Inst
unsigned int N

void addAbsMemOperands(llvm::MCInst& Inst,
                       unsigned int N) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:603

Parameters

llvm::MCInst& Inst
unsigned int N

void addDstIdxOperands(llvm::MCInst& Inst,
                       unsigned int N) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:618

Parameters

llvm::MCInst& Inst
unsigned int N

void addExpr(llvm::MCInst& Inst,
             const llvm::MCExpr* Expr) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:527

Parameters

llvm::MCInst& Inst
const llvm::MCExpr* Expr

void addGR16orGR32orGR64Operands(
    llvm::MCInst& Inst,
    unsigned int N) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:548

Parameters

llvm::MCInst& Inst
unsigned int N

void addGR32orGR64Operands(llvm::MCInst& Inst,
                           unsigned int N) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:540

Parameters

llvm::MCInst& Inst
unsigned int N

void addImmOperands(llvm::MCInst& Inst,
                    unsigned int N) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:562

Parameters

llvm::MCInst& Inst
unsigned int N

void addMaskPairOperands(llvm::MCInst& Inst,
                         unsigned int N) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:567

Parameters

llvm::MCInst& Inst
unsigned int N

void addMemOffsOperands(llvm::MCInst& Inst,
                        unsigned int N) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:623

Parameters

llvm::MCInst& Inst
unsigned int N

void addMemOperands(llvm::MCInst& Inst,
                    unsigned int N) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:591

Parameters

llvm::MCInst& Inst
unsigned int N

void addRegOperands(llvm::MCInst& Inst,
                    unsigned int N) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:535

Parameters

llvm::MCInst& Inst
unsigned int N

void addSrcIdxOperands(llvm::MCInst& Inst,
                       unsigned int N) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:612

Parameters

llvm::MCInst& Inst
unsigned int N

llvm::SMLoc getEndLoc() const

Description

getEndLoc - Get the location of the last token of this operand.

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:101

const llvm::MCExpr* getImm() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:180

llvm::SMRange getLocRange() const

Description

getLocRange - Get the range between the first and last token of this operand.

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:105

unsigned int getMemBaseReg() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:193

unsigned int getMemDefaultBaseReg() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:197

const llvm::MCExpr* getMemDisp() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:185

unsigned int getMemFrontendSize() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:213

unsigned int getMemIndexReg() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:201

unsigned int getMemModeSize() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:209

unsigned int getMemScale() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:205

unsigned int getMemSegReg() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:189

llvm::SMLoc getOffsetOfLoc() const

Description

getOffsetOfLoc - Get the location of the offset operator.

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:108

void* getOpDecl()

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:95

unsigned int getPrefix() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:175

unsigned int getReg() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:170

llvm::SMLoc getStartLoc() const

Description

getStartLoc - Get the location of the first token of this operand.

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:98

llvm::StringRef getSymName()

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:94

llvm::StringRef getToken() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:160

bool isAVX512RC() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:389

bool isAbsMem() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:384

bool isAbsMem16() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:393

bool isDXReg() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:479

bool isDstIdx() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:418

bool isDstIdx16() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:428

bool isDstIdx32() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:431

bool isDstIdx64() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:434

bool isDstIdx8() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:425

bool isGR16orGR32orGR64() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:487

bool isGR32orGR64() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:481

bool isImm() const

Description

isImm - Is this an immediate operand?

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:224

bool isImmSExti16i8() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:226

bool isImmSExti32i8() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:240

bool isImmSExti64i32() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:268

bool isImmSExti64i8() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:254

bool isImmUnsignedi4() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:283

bool isImmUnsignedi8() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:292

bool isMaybeDirectBranchDest() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:217

bool isMem() const

Description

isMem - Is this a memory operand?

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:305

bool isMem128() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:324

bool isMem128_RC128() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:346

bool isMem128_RC128X() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:362

bool isMem128_RC256() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:349

bool isMem128_RC256X() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:365

bool isMem16() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:312

bool isMem256() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:327

bool isMem256_RC128() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:352

bool isMem256_RC128X() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:368

bool isMem256_RC256() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:355

bool isMem256_RC256X() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:371

bool isMem256_RC512() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:374

bool isMem32() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:315

bool isMem512() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:330

bool isMem512_RC256X() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:377

bool isMem512_RC512() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:380

bool isMem64() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:318

bool isMem64_RC128() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:343

bool isMem64_RC128X() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:359

bool isMem8() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:309

bool isMem80() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:321

bool isMemIndexReg(unsigned int LowR,
                   unsigned int HighR) const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:338

Parameters

unsigned int LowR
unsigned int HighR

bool isMemOffs() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:438

bool isMemOffs16_16() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:446

bool isMemOffs16_32() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:449

bool isMemOffs16_8() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:443

bool isMemOffs32_16() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:455

bool isMemOffs32_32() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:458

bool isMemOffs32_64() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:461

bool isMemOffs32_8() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:452

bool isMemOffs64_16() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:467

bool isMemOffs64_32() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:470

bool isMemOffs64_64() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:473

bool isMemOffs64_8() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:464

bool isMemUnsized() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:306

bool isMemUseUpRegs() const

Description

isMemUseUpRegs - Is memory operand use up regs, for example, intel MS inline asm may use ARR[baseReg + IndexReg + ...] which may use up regs in [...] expr, so ARR[baseReg + IndexReg + ...] can not use extra reg for ARR. For example, calculating ARR address to a reg or use another base reg in PIC model.

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:397

bool isOffsetOfLocal() const

Description

isOffsetOfLocal - Do we need to emit code to get the offset of the local variable, rather than its value? Only valid when parsing MS-style inline assembly.

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:301

bool isPrefix() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:477

bool isReg() const

Description

isReg - Is this a register operand?

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:478

bool isSibMem() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:334

bool isSrcIdx() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:399

bool isSrcIdx16() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:408

bool isSrcIdx32() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:411

bool isSrcIdx64() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:414

bool isSrcIdx8() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:405

bool isToken() const

Description

isToken - Is this a token operand?

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:222

bool isVK16Pair() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:522

bool isVK1Pair() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:502

bool isVK2Pair() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:507

bool isVK4Pair() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:512

bool isVK8Pair() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:517

bool isVectorReg() const

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:494

bool needAddressOf() const

Description

needAddressOf - Do we need to emit code to get the address of the variable/label? Only valid when parsing MS-style inline assembly.

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:303

void print(llvm::raw_ostream& OS) const

Description

print - Print a debug representation of the operand to the given stream.

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:110

Parameters

llvm::raw_ostream& OS

void setTokenValue(llvm::StringRef Value)

Declared at: llvm/lib/Target/X86/AsmParser/X86Operand.h:164

Parameters

llvm::StringRef Value