forked from OSchip/llvm-project
MC/Matcher: Add support for over-riding the default MatchInstruction function
name (for example, to allow targets to interpose the actual MatchInstruction function). llvm-svn: 102987
This commit is contained in:
parent
ce0c1e11ce
commit
9989417f33
|
@ -485,10 +485,10 @@ def REG_SEQUENCE : Instruction {
|
|||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// AsmParser - This class can be implemented by targets that wish to implement
|
||||
// AsmParser - This class can be implemented by targets that wish to implement
|
||||
// .s file parsing.
|
||||
//
|
||||
// Subtargets can have multiple different assembly parsers (e.g. AT&T vs Intel
|
||||
// Subtargets can have multiple different assembly parsers (e.g. AT&T vs Intel
|
||||
// syntax on X86 for example).
|
||||
//
|
||||
class AsmParser {
|
||||
|
@ -501,9 +501,13 @@ class AsmParser {
|
|||
// AsmParser class to call on every matched instruction. This can be used to
|
||||
// perform target specific instruction post-processing.
|
||||
string AsmParserInstCleanup = "";
|
||||
|
||||
|
||||
// MatchInstructionName - The name of the instruction matching function to
|
||||
// generate.
|
||||
string MatchInstructionName = "MatchInstruction";
|
||||
|
||||
// Variant - AsmParsers can be of multiple different variants. Variants are
|
||||
// used to support targets that need to parser multiple formats for the
|
||||
// used to support targets that need to parser multiple formats for the
|
||||
// assembly language.
|
||||
int Variant = 0;
|
||||
|
||||
|
|
|
@ -1564,10 +1564,14 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
|
|||
Info.Instructions.begin(), ie = Info.Instructions.end();
|
||||
it != ie; ++it)
|
||||
MaxNumOperands = std::max(MaxNumOperands, (*it)->Operands.size());
|
||||
|
||||
OS << "bool " << Target.getName() << ClassName
|
||||
<< "::\nMatchInstruction(const SmallVectorImpl<MCParsedAsmOperand*> "
|
||||
"&Operands,\n MCInst &Inst) {\n";
|
||||
|
||||
const std::string &MatchName =
|
||||
AsmParser->getValueAsString("MatchInstructionName");
|
||||
OS << "bool " << Target.getName() << ClassName << "::\n"
|
||||
<< MatchName
|
||||
<< "(const SmallVectorImpl<MCParsedAsmOperand*> &Operands,\n";
|
||||
OS.indent(MatchName.size() + 1);
|
||||
OS << "MCInst &Inst) {\n";
|
||||
|
||||
// Emit the static match table; unused classes get initalized to 0 which is
|
||||
// guaranteed to be InvalidMatchClass.
|
||||
|
|
Loading…
Reference in New Issue