mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
Fixed a bug where the disassembler would allow an immediate
argument that had to be between 0 and 7 to have any value, firing an assert later in the AsmPrinter. Now, the disassembler rejects instructions with out-of-range values for that immediate. llvm-svn: 100694
This commit is contained in:
parent
4dc93f2195
commit
3c69c6593a
@ -1277,6 +1277,9 @@ static int readOperands(struct InternalInstruction* insn) {
|
||||
case ENCODING_IB:
|
||||
if (readImmediate(insn, 1))
|
||||
return -1;
|
||||
if (insn->spec->operands[index].type == TYPE_IMM3 &&
|
||||
insn->immediates[insn->numImmediatesConsumed - 1] > 7)
|
||||
return -1;
|
||||
break;
|
||||
case ENCODING_IW:
|
||||
if (readImmediate(insn, 2))
|
||||
|
@ -236,6 +236,7 @@ struct ContextDecision {
|
||||
ENUM_ENTRY(TYPE_IMM16, "2-byte") \
|
||||
ENUM_ENTRY(TYPE_IMM32, "4-byte") \
|
||||
ENUM_ENTRY(TYPE_IMM64, "8-byte") \
|
||||
ENUM_ENTRY(TYPE_IMM3, "1-byte immediate operand between 0 and 7") \
|
||||
ENUM_ENTRY(TYPE_RM8, "1-byte register or memory operand") \
|
||||
ENUM_ENTRY(TYPE_RM16, "2-byte") \
|
||||
ENUM_ENTRY(TYPE_RM32, "4-byte") \
|
||||
|
@ -820,7 +820,7 @@ OperandType RecognizableInstr::typeFromString(const std::string &s,
|
||||
TYPE("i128mem", TYPE_M128)
|
||||
TYPE("i64i32imm_pcrel", TYPE_REL64)
|
||||
TYPE("i32imm_pcrel", TYPE_REL32)
|
||||
TYPE("SSECC", TYPE_IMM8)
|
||||
TYPE("SSECC", TYPE_IMM3)
|
||||
TYPE("brtarget", TYPE_RELv)
|
||||
TYPE("brtarget8", TYPE_REL8)
|
||||
TYPE("f80mem", TYPE_M80FP)
|
||||
|
Loading…
Reference in New Issue
Block a user