LLVM  8.0.1
Namespaces | Macros | Functions | Variables
MipsAsmParser.cpp File Reference
#include "MCTargetDesc/MipsABIFlagsSection.h"
#include "MCTargetDesc/MipsABIInfo.h"
#include "MCTargetDesc/MipsBaseInfo.h"
#include "MCTargetDesc/MipsMCExpr.h"
#include "MCTargetDesc/MipsMCTargetDesc.h"
#include "MipsTargetStreamer.h"
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/ADT/Triple.h"
#include "llvm/ADT/Twine.h"
#include "llvm/BinaryFormat/ELF.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCInst.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/MC/MCObjectFileInfo.h"
#include "llvm/MC/MCParser/MCAsmLexer.h"
#include "llvm/MC/MCParser/MCAsmParser.h"
#include "llvm/MC/MCParser/MCAsmParserExtension.h"
#include "llvm/MC/MCParser/MCParsedAsmOperand.h"
#include "llvm/MC/MCParser/MCTargetAsmParser.h"
#include "llvm/MC/MCSectionELF.h"
#include "llvm/MC/MCStreamer.h"
#include "llvm/MC/MCSubtargetInfo.h"
#include "llvm/MC/MCSymbol.h"
#include "llvm/MC/MCSymbolELF.h"
#include "llvm/MC/MCValue.h"
#include "llvm/MC/SubtargetFeature.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/SMLoc.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/TargetRegistry.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <memory>
#include <string>
#include <utility>
#include "MipsGenAsmMatcher.inc"
Include dependency graph for MipsAsmParser.cpp:

Go to the source code of this file.

Namespaces

 llvm
 This class represents lattice values for constants.
 

Macros

#define DEBUG_TYPE   "mips-asm-parser"
 
#define GET_ASSEMBLER_HEADER
 
#define GET_OPERAND_DIAGNOSTIC_TYPES
 
#define GET_REGISTER_MATCHER
 
#define GET_MATCHER_IMPLEMENTATION
 
#define GET_MNEMONIC_SPELL_CHECKER
 

Functions

static const MCInstrDescgetInstDesc (unsigned Opcode)
 
static bool hasShortDelaySlot (MCInst &Inst)
 
static const MCSymbolgetSingleMCSymbol (const MCExpr *Expr)
 
static unsigned countMCSymbolRefExpr (const MCExpr *Expr)
 
template<unsigned N>
static bool isShiftedUIntAtAnyPosition (uint64_t x)
 Can the value be represented by a unsigned N-bit value and a shift left? More...
 
static unsigned nextReg (unsigned Reg)
 
static unsigned getRegisterForMxtrDSP (MCInst &Inst, bool IsMFDSP)
 
static unsigned getRegisterForMxtrFP (MCInst &Inst, bool IsMFTC1)
 
static unsigned getRegisterForMxtrC0 (MCInst &Inst, bool IsMFTC0)
 
static SMLoc RefineErrorLoc (const SMLoc Loc, const OperandVector &Operands, uint64_t ErrorInfo)
 
static std::string MipsMnemonicSpellCheck (StringRef S, uint64_t FBS, unsigned VariantID=0)
 
void LLVMInitializeMipsAsmParser ()
 

Variables

cl::opt< boolEmitJalrReloc
 
const MCInstrDesc llvm::MipsInsts []
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "mips-asm-parser"

Definition at line 60 of file MipsAsmParser.cpp.

◆ GET_ASSEMBLER_HEADER

#define GET_ASSEMBLER_HEADER

Definition at line 161 of file MipsAsmParser.cpp.

◆ GET_MATCHER_IMPLEMENTATION

#define GET_MATCHER_IMPLEMENTATION

Definition at line 8215 of file MipsAsmParser.cpp.

◆ GET_MNEMONIC_SPELL_CHECKER

#define GET_MNEMONIC_SPELL_CHECKER

Definition at line 8216 of file MipsAsmParser.cpp.

◆ GET_OPERAND_DIAGNOSTIC_TYPES

#define GET_OPERAND_DIAGNOSTIC_TYPES

Definition at line 478 of file MipsAsmParser.cpp.

◆ GET_REGISTER_MATCHER

#define GET_REGISTER_MATCHER

Definition at line 8214 of file MipsAsmParser.cpp.

Function Documentation

◆ countMCSymbolRefExpr()

static unsigned countMCSymbolRefExpr ( const MCExpr Expr)
static

Definition at line 1757 of file MipsAsmParser.cpp.

References llvm::MCInst::addOperand(), llvm::MipsABIInfo::ArePtrs64bit(), assert(), llvm::SmallVectorTemplateCommon< T >::back(), contains(), llvm::MipsMCExpr::create(), llvm::MCSymbolRefExpr::create(), llvm::MCOperand::createExpr(), llvm::MCOperand::createReg(), llvm::MipsTargetStreamer::emitDirectiveSetNoReorder(), llvm::MipsTargetStreamer::emitDirectiveSetReorder(), llvm::MipsTargetStreamer::emitEmptyDelaySlot(), llvm::MipsTargetStreamer::emitGPRestore(), llvm::MCStreamer::EmitInstruction(), llvm::MCStreamer::EmitLabel(), llvm::MCStreamer::EmitRelocDirective(), llvm::MipsTargetStreamer::emitRRI(), llvm::MipsTargetStreamer::emitRRX(), llvm::Error, llvm::MCOperand::getExpr(), llvm::MCOperand::getImm(), getInstDesc(), llvm::MCExpr::getKind(), llvm::MCSymbolRefExpr::getKind(), llvm::MCInst::getNumOperands(), llvm::MCInstrDesc::getNumOperands(), llvm::MCInst::getOpcode(), llvm::MCInst::getOperand(), llvm::MCOperand::getReg(), getRegClass(), getSingleMCSymbol(), llvm::MCTargetStreamer::getStreamer(), llvm::MCInstrDesc::hasDelaySlot(), hasShortDelaySlot(), llvm::MCInstrDesc::isBranch(), llvm::MCInstrDesc::isCall(), llvm::MCSymbol::isELF(), llvm::MCOperand::isExpr(), llvm::MCOperand::isImm(), llvm::MCSymbol::isInSection(), llvm::isInt< 16 >(), llvm::isInt< 8 >(), llvm::isIntN(), llvm::MipsII::IsPCRelativeLoad, llvm::MCOperand::isReg(), llvm::MCSymbol::isTemporary(), llvm::isUInt< 16 >(), llvm::ARM_MB::LD, LLVM_FALLTHROUGH, llvm::MCInstrDesc::mayLoad(), llvm::MCInstrDesc::mayStore(), llvm::MipsMCExpr::MEK_GOT, llvm::MipsMCExpr::MEK_GOT_CALL, llvm::MipsMCExpr::MEK_GOT_DISP, llvm::MipsMCExpr::MEK_LO, llvm::OffsetToAlignment(), llvm::MCOI::OPERAND_MEMORY, llvm::MCOI::OPERAND_UNKNOWN, llvm::MCOperandInfo::OperandType, llvm::MCInstrDesc::OpInfo, RA, llvm::AVRISD::ROL, llvm::AArch64_AM::ROR, llvm::ISD::SDIV, llvm::MCOperand::setImm(), llvm::MCInst::setLoc(), llvm::MCInst::setOpcode(), llvm::MipsTargetStreamer::setUsesMicroMips(), llvm::ELF::STB_LOCAL, llvm::MCExpr::SymbolRef, llvm::MCInstrDesc::TSFlags, llvm::ISD::UDIV, llvm::MipsTargetStreamer::updateABIInfo(), llvm::MCSymbolRefExpr::VK_None, and llvm::Warning.

◆ getInstDesc()

static const MCInstrDesc& getInstDesc ( unsigned  Opcode)
static

Definition at line 1707 of file MipsAsmParser.cpp.

References llvm::MipsInsts.

Referenced by countMCSymbolRefExpr(), getRegisterForMxtrC0(), and nextReg().

◆ getRegisterForMxtrC0()

static unsigned getRegisterForMxtrC0 ( MCInst Inst,
bool  IsMFTC0 
)
static

◆ getRegisterForMxtrDSP()

static unsigned getRegisterForMxtrDSP ( MCInst Inst,
bool  IsMFDSP 
)
static

◆ getRegisterForMxtrFP()

static unsigned getRegisterForMxtrFP ( MCInst Inst,
bool  IsMFTC1 
)
static

◆ getSingleMCSymbol()

static const MCSymbol* getSingleMCSymbol ( const MCExpr Expr)
static

Definition at line 1733 of file MipsAsmParser.cpp.

Referenced by countMCSymbolRefExpr().

◆ hasShortDelaySlot()

static bool hasShortDelaySlot ( MCInst Inst)
static

◆ isShiftedUIntAtAnyPosition()

template<unsigned N>
static bool isShiftedUIntAtAnyPosition ( uint64_t  x)
static

◆ LLVMInitializeMipsAsmParser()

void LLVMInitializeMipsAsmParser ( )

◆ MipsMnemonicSpellCheck()

static std::string MipsMnemonicSpellCheck ( StringRef  S,
uint64_t  FBS,
unsigned  VariantID = 0 
)
static

Referenced by RefineErrorLoc().

◆ nextReg()

static unsigned nextReg ( unsigned  Reg)
static

Definition at line 3154 of file MipsAsmParser.cpp.

References llvm::ISD::ADD, llvm::MCInst::addOperand(), llvm::ISD::AND, llvm::MipsABIInfo::ArePtrs64bit(), assert(), llvm::SmallVectorTemplateCommon< T >::back(), llvm::APFloat::bitcastToAPInt(), llvm::BitsToDouble(), llvm::MCInst::clear(), contains(), Context, llvm::MipsMCExpr::create(), llvm::MCSymbolRefExpr::create(), llvm::MCOperand::createExpr(), llvm::MCOperand::createImm(), llvm::MCOperand::createReg(), llvm::MCContext::createTempSymbol(), llvm::MipsTargetStreamer::emitDSLL(), llvm::MipsTargetStreamer::emitEmptyDelaySlot(), llvm::MipsTargetStreamer::emitII(), llvm::MCStreamer::EmitInstruction(), llvm::MCStreamer::EmitLabel(), llvm::MipsTargetStreamer::emitLoadWithSymOffset(), llvm::MipsTargetStreamer::emitNop(), llvm::MipsTargetStreamer::emitR(), llvm::MipsTargetStreamer::emitRI(), llvm::MipsTargetStreamer::emitRR(), llvm::MipsTargetStreamer::emitRRI(), llvm::MipsTargetStreamer::emitRRR(), llvm::MipsTargetStreamer::emitRRX(), llvm::MipsTargetStreamer::emitRX(), llvm::MipsTargetStreamer::emitStoreWithSymOffset(), llvm::Error, llvm::FloatToBits(), llvm::MCStreamer::getContext(), llvm::MCOperand::getExpr(), llvm::MCOperand::getImm(), getInstDesc(), llvm::MCInst::getLoc(), llvm::MCInst::getNumOperands(), llvm::MCInst::getOpcode(), llvm::MCInst::getOperand(), llvm::MCOperand::getReg(), llvm::MCTargetStreamer::getStreamer(), llvm::APInt::getZExtValue(), llvm::MCInstrDesc::hasDelaySlot(), llvm::APFloatBase::IEEEdouble(), llvm::MCOperand::isImm(), llvm::isInt< 16 >(), llvm::isInt< 32 >(), llvm::MCOperand::isReg(), llvm::isUInt< 16 >(), llvm::isUInt< 32 >(), llvm::ARM_MB::LD, llvm_unreachable, llvm::MipsISD::LWL, llvm::MipsISD::LWR, llvm::MipsMCExpr::MEK_GOT, llvm::MipsMCExpr::MEK_HI, llvm::MipsMCExpr::MEK_HIGHER, llvm::MipsMCExpr::MEK_HIGHEST, llvm::MipsMCExpr::MEK_LO, llvm::MipsISD::MFHI, llvm::MipsISD::MFLO, llvm::MipsISD::MULT, llvm::OffsetToAlignment(), llvm::MCInstrDesc::OpInfo, OR, RA, Reg, llvm::MCOperandInfo::RegClass, llvm::AVRISD::ROL, llvm::AArch64_AM::ROR, llvm::ISD::ROTR, llvm::ISD::SDIV, llvm::MCInst::setOpcode(), llvm::ELF::SHF_ALLOC, llvm::ELF::SHT_PROGBITS, Signed, llvm::ISD::SRA, llvm::ISD::SRL, llvm::ISD::SUB, std::swap(), llvm::MipsISD::SWL, llvm::MipsISD::SWR, T1, llvm::X86II::T8, llvm::ISD::UDIV, llvm::MCSymbolRefExpr::VK_None, llvm::Warning, and llvm::ISD::XOR.

Referenced by RefineErrorLoc().

◆ RefineErrorLoc()

static SMLoc RefineErrorLoc ( const SMLoc  Loc,
const OperandVector Operands,
uint64_t  ErrorInfo 
)
static

Definition at line 5298 of file MipsAsmParser.cpp.

References llvm::MCBinaryExpr::Add, llvm::MCInst::addOperand(), llvm::AsmToken::Amp, llvm::MCBinaryExpr::And, assert(), llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::SmallVectorTemplateCommon< T >::back(), llvm::MCExpr::Binary, llvm::AsmToken::Caret, llvm::StringSwitch< T, R >::Case(), llvm::StringSwitch< T, R >::Cases(), llvm::SmallVectorImpl< T >::clear(), llvm::AsmToken::Comma, llvm::MCExpr::Constant, llvm::MCConstantExpr::create(), llvm::MCSymbolRefExpr::create(), llvm::MCBinaryExpr::create(), llvm::MCOperand::createReg(), llvm::dbgs(), llvm::StringSwitch< T, R >::Default(), llvm::MCBinaryExpr::Div, llvm::SourceMgr::DK_Warning, llvm::AsmToken::Dollar, llvm::StringRef::drop_front(), llvm::dyn_cast(), E, llvm::MCAsmParser::eatToEndOfStatement(), llvm::StringRef::empty(), llvm::StringMap< ValueTy, AllocatorTy >::end(), llvm::AsmToken::EndOfStatement, llvm::AsmToken::Equal, llvm::Error, llvm::StringMap< ValueTy, AllocatorTy >::find(), llvm::StringRef::front(), llvm::SmallVectorTemplateCommon< T >::front(), llvm::StringRef::getAsInteger(), llvm::SMLoc::getFromPointer(), llvm::AsmToken::getIdentifier(), llvm::AsmToken::getIntVal(), llvm::MCExpr::getKind(), llvm::AsmToken::getKind(), llvm::MCAsmParser::getLexer(), llvm::MCBinaryExpr::getLHS(), llvm::AsmToken::getLoc(), llvm::MCAsmLexer::getLoc(), llvm::AsmToken::getLocRange(), llvm::MCSymbol::getName(), llvm::MCInst::getOpcode(), llvm::SMLoc::getPointer(), getReg(), llvm::MCBinaryExpr::getRHS(), llvm::AsmToken::getString(), llvm::MCSymbolRefExpr::getSymbol(), llvm::MCAsmParser::getTok(), llvm::MCConstantExpr::getValue(), llvm::MCSymbol::getVariableValue(), llvm::AsmToken::GreaterGreater, llvm::AsmToken::Identifier, Info, llvm::AsmToken::Integer, llvm::tgtok::IntVal, llvm::AsmToken::is(), llvm::MCAsmLexer::is(), llvm::AsmToken::isNot(), llvm::MCAsmLexer::isNot(), llvm::MCSymbol::isUnset(), llvm::MCSymbol::isVariable(), llvm::AsmToken::LBrac, llvm::AsmToken::LessLess, llvm::MCAsmParser::Lex(), LLVM_DEBUG, llvm_unreachable, llvm::AsmToken::LParen, llvm::MCBinaryExpr::LShr, llvm::MatchOperand_NoMatch, llvm::MatchOperand_ParseFail, llvm::MatchOperand_Success, llvm::AsmToken::Minus, MipsMnemonicSpellCheck(), llvm::MCBinaryExpr::Mod, llvm::MCBinaryExpr::Mul, Name, nextReg(), op, llvm::MCBinaryExpr::Or, llvm::MCAsmParser::parseExpression(), llvm::MCAsmParser::parseIdentifier(), llvm::MCAsmLexer::peekTok(), llvm::AsmToken::Percent, llvm::AsmToken::Pipe, llvm::AsmToken::Plus, llvm::SmallVectorTemplateBase< T >::pop_back(), llvm::SmallVectorTemplateBase< T, bool >::pop_back(), llvm::SmallVectorTemplateBase< T >::push_back(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), RA, llvm::AsmToken::RBrac, llvm::Ref, Reg, llvm::AsmToken::RParen, llvm::MipsABIFlagsSection::S32, llvm::MipsABIFlagsSection::S64, llvm::ARMBuildAttrs::Section, llvm::MCSubtargetInfo::setFeatureBits(), llvm::MCSymbol::setVariableValue(), llvm::ELF::SHF_ALLOC, llvm::ELF::SHF_MIPS_GPREL, llvm::ELF::SHF_WRITE, llvm::MCBinaryExpr::Shl, llvm::ELF::SHT_NOBITS, llvm::ELF::SHT_PROGBITS, llvm::SmallVectorBase::size(), llvm::AsmToken::Slash, llvm::AsmToken::Star, llvm::SMRange::Start, llvm::StringRef::startswith(), llvm::MCBinaryExpr::Sub, llvm::StringRef::substr(), llvm::AMDGPU::HSAMD::Kernel::Key::SymbolName, llvm::MCExpr::SymbolRef, llvm::MCExpr::Target, llvm::MCExpr::Unary, llvm::MCSymbolRefExpr::VK_None, llvm::Warning, llvm::MCBinaryExpr::Xor, and llvm::MipsABIFlagsSection::XX.

Variable Documentation

◆ EmitJalrReloc

cl::opt<bool> EmitJalrReloc