mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
[ARM64] Add more simple diagnostics for immediate/shift ranges
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208860 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
06961bf147
commit
907c04bc4c
@ -91,11 +91,13 @@ def MovImm32ShifterOperand : AsmOperandClass {
|
||||
let SuperClasses = [ShifterOperand];
|
||||
let Name = "MovImm32Shifter";
|
||||
let RenderMethod = "addShifterOperands";
|
||||
let DiagnosticType = "InvalidMovImm32Shift";
|
||||
}
|
||||
def MovImm64ShifterOperand : AsmOperandClass {
|
||||
let SuperClasses = [ShifterOperand];
|
||||
let Name = "MovImm64Shifter";
|
||||
let RenderMethod = "addShifterOperands";
|
||||
let DiagnosticType = "InvalidMovImm64Shift";
|
||||
}
|
||||
|
||||
// Shifter operand for arithmetic register shifted encodings.
|
||||
@ -239,15 +241,6 @@ def simm7s16 : Operand<i32> {
|
||||
let PrintMethod = "printImmScale<16>";
|
||||
}
|
||||
|
||||
// imm0_65535 predicate - True if the immediate is in the range [0,65535].
|
||||
def Imm0_65535Operand : AsmOperandClass { let Name = "Imm0_65535"; }
|
||||
def imm0_65535 : Operand<i32>, ImmLeaf<i32, [{
|
||||
return ((uint32_t)Imm) < 65536;
|
||||
}]> {
|
||||
let ParserMatchClass = Imm0_65535Operand;
|
||||
let PrintMethod = "printHexImm";
|
||||
}
|
||||
|
||||
class AsmImmRange<int Low, int High> : AsmOperandClass {
|
||||
let Name = "Imm" # Low # "_" # High;
|
||||
let DiagnosticType = "InvalidImm" # Low # "_" # High;
|
||||
@ -469,6 +462,15 @@ def logical_imm64 : Operand<i64>, PatLeaf<(imm), [{
|
||||
let ParserMatchClass = LogicalImm64Operand;
|
||||
}
|
||||
|
||||
// imm0_65535 predicate - True if the immediate is in the range [0,65535].
|
||||
def Imm0_65535Operand : AsmImmRange<0, 65535>;
|
||||
def imm0_65535 : Operand<i32>, ImmLeaf<i32, [{
|
||||
return ((uint32_t)Imm) < 65536;
|
||||
}]> {
|
||||
let ParserMatchClass = Imm0_65535Operand;
|
||||
let PrintMethod = "printHexImm";
|
||||
}
|
||||
|
||||
// imm0_255 predicate - True if the immediate is in the range [0,255].
|
||||
def Imm0_255Operand : AsmOperandClass { let Name = "Imm0_255"; }
|
||||
def imm0_255 : Operand<i32>, ImmLeaf<i32, [{
|
||||
@ -479,7 +481,7 @@ def imm0_255 : Operand<i32>, ImmLeaf<i32, [{
|
||||
}
|
||||
|
||||
// imm0_127 predicate - True if the immediate is in the range [0,127]
|
||||
def Imm0_127Operand : AsmOperandClass { let Name = "Imm0_127"; }
|
||||
def Imm0_127Operand : AsmImmRange<0, 127>;
|
||||
def imm0_127 : Operand<i32>, ImmLeaf<i32, [{
|
||||
return ((uint32_t)Imm) < 128;
|
||||
}]> {
|
||||
@ -909,6 +911,7 @@ def dotCcode : Operand<i32> {
|
||||
// offset are implied zero and so are not part of the immediate.
|
||||
def PCRelLabel19Operand : AsmOperandClass {
|
||||
let Name = "PCRelLabel19";
|
||||
let DiagnosticType = "InvalidLabel";
|
||||
}
|
||||
def am_brcond : Operand<OtherVT> {
|
||||
let EncoderMethod = "getCondBranchTargetOpValue";
|
||||
|
@ -3685,6 +3685,10 @@ bool ARM64AsmParser::showMatchError(SMLoc Loc, unsigned ErrCode) {
|
||||
"expected compatible register, symbol or integer in range [0, 4095]");
|
||||
case Match_LogicalSecondSource:
|
||||
return Error(Loc, "expected compatible register or logical immediate");
|
||||
case Match_InvalidMovImm32Shift:
|
||||
return Error(Loc, "expected 'lsl' with optional integer 0 or 16");
|
||||
case Match_InvalidMovImm64Shift:
|
||||
return Error(Loc, "expected 'lsl' with optional integer 0, 16, 32 or 48");
|
||||
case Match_AddSubRegShift32:
|
||||
return Error(Loc,
|
||||
"expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]");
|
||||
@ -3719,6 +3723,10 @@ bool ARM64AsmParser::showMatchError(SMLoc Loc, unsigned ErrCode) {
|
||||
return Error(Loc, "immediate must be an integer in range [0, 31].");
|
||||
case Match_InvalidImm0_63:
|
||||
return Error(Loc, "immediate must be an integer in range [0, 63].");
|
||||
case Match_InvalidImm0_127:
|
||||
return Error(Loc, "immediate must be an integer in range [0, 127].");
|
||||
case Match_InvalidImm0_65535:
|
||||
return Error(Loc, "immediate must be an integer in range [0, 65535].");
|
||||
case Match_InvalidImm1_8:
|
||||
return Error(Loc, "immediate must be an integer in range [1, 8].");
|
||||
case Match_InvalidImm1_16:
|
||||
@ -4142,6 +4150,8 @@ bool ARM64AsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
|
||||
case Match_LogicalSecondSource:
|
||||
case Match_AddSubRegShift32:
|
||||
case Match_AddSubRegShift64:
|
||||
case Match_InvalidMovImm32Shift:
|
||||
case Match_InvalidMovImm64Shift:
|
||||
case Match_InvalidMemoryIndexed8:
|
||||
case Match_InvalidMemoryIndexed16:
|
||||
case Match_InvalidMemoryIndexed32SImm7:
|
||||
@ -4151,6 +4161,8 @@ bool ARM64AsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
|
||||
case Match_InvalidImm0_15:
|
||||
case Match_InvalidImm0_31:
|
||||
case Match_InvalidImm0_63:
|
||||
case Match_InvalidImm0_127:
|
||||
case Match_InvalidImm0_65535:
|
||||
case Match_InvalidImm1_8:
|
||||
case Match_InvalidImm1_16:
|
||||
case Match_InvalidImm1_32:
|
||||
|
Loading…
Reference in New Issue
Block a user