mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
[PowerPC] Support basic compare mnemonics
This adds support for the basic mnemoics (with the L operand) for the fixed-point compare instructions. These are defined as aliases for the already existing CMPW/CMPD patterns, depending on the value of L. This requires use of InstAlias patterns with immediate literal operands. To make this work, we need two further changes: - define a RegisterPrefix, because otherwise literals 0 and 1 would be parsed as literal register names - provide a PPCAsmParser::validateTargetOperandClass routine to recognize immediate literals (like ARM does) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185826 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -229,6 +229,8 @@ public:
|
||||
SmallVectorImpl<MCParsedAsmOperand*> &Operands);
|
||||
|
||||
virtual bool ParseDirective(AsmToken DirectiveID);
|
||||
|
||||
unsigned validateTargetOperandClass(MCParsedAsmOperand *Op, unsigned Kind);
|
||||
};
|
||||
|
||||
/// PPCOperand - Instances of this class represent a parsed PowerPC machine
|
||||
@@ -1232,3 +1234,25 @@ extern "C" void LLVMInitializePowerPCAsmParser() {
|
||||
#define GET_REGISTER_MATCHER
|
||||
#define GET_MATCHER_IMPLEMENTATION
|
||||
#include "PPCGenAsmMatcher.inc"
|
||||
|
||||
// Define this matcher function after the auto-generated include so we
|
||||
// have the match class enum definitions.
|
||||
unsigned PPCAsmParser::validateTargetOperandClass(MCParsedAsmOperand *AsmOp,
|
||||
unsigned Kind) {
|
||||
// If the kind is a token for a literal immediate, check if our asm
|
||||
// operand matches. This is for InstAliases which have a fixed-value
|
||||
// immediate in the syntax.
|
||||
int64_t ImmVal;
|
||||
switch (Kind) {
|
||||
case MCK_0: ImmVal = 0; break;
|
||||
case MCK_1: ImmVal = 1; break;
|
||||
default: return Match_InvalidOperand;
|
||||
}
|
||||
|
||||
PPCOperand *Op = static_cast<PPCOperand*>(AsmOp);
|
||||
if (Op->isImm() && Op->getImm() == ImmVal)
|
||||
return Match_Success;
|
||||
|
||||
return Match_InvalidOperand;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user