With the OR1KOperand structure defined, the main
MatchAndEmitInstruction
can be implemented, calling on the
MatchInstructionImpl
generated by TableGen to do
the hard work.
When called, MatchInstructionImpl
will use a
given MCInst
to store details on the instruction
if possible, returning an error value. If the instruction was
successfully parsed, the value Match_Success
is
returned and the instruction can be simply emitted via the provided
MCStreamer
.
If however there is a problem parsing the instruction, the return code
will be different and set depending on where the problem occurred.
For example Match_MissingFeature
is returned if
a required target feature is not enabled and
Match_MnemonicFail
is returned if the instruction
mnemonic is not recognized.
These return codes can be used to generate a useful error message, though the simplest case would be just to state than an error occurred and then return. This case is demonstrated below.
bool OR1KAsmParser:: MatchAndEmitInstruction(SMLoc IDLoc, SmallVectorImpl<MCParsedAsmOperand*> &Operands, MCStreamer &Out) { MCInst Inst; SMLoc ErrorLoc; unsigned ErrorInfo; if (MatchInstructionImpl(Operands, Inst, ErrorInfo)) { Out.EmitInstruction(Inst); return false; } else return Error(IDLoc, "Error parsing instruction"); }