mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-01-22 21:16:40 +00:00
Check for invalid alignment values when decoding VLDn/VSTn (single ln) instructions.
Patch by Chris Lidbury. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163321 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -3710,8 +3710,16 @@ static DecodeStatus DecodeVLD1LN(MCInst &Inst, unsigned Insn,
|
||||
if (fieldFromInstruction(Insn, 6, 1))
|
||||
return MCDisassembler::Fail; // UNDEFINED
|
||||
index = fieldFromInstruction(Insn, 7, 1);
|
||||
if (fieldFromInstruction(Insn, 4, 2) != 0)
|
||||
align = 4;
|
||||
|
||||
switch (fieldFromInstruction(Insn, 4, 2)) {
|
||||
case 0 :
|
||||
align = 0; break;
|
||||
case 3:
|
||||
align = 4; break;
|
||||
default:
|
||||
return MCDisassembler::Fail;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!Check(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
|
||||
@@ -3769,8 +3777,16 @@ static DecodeStatus DecodeVST1LN(MCInst &Inst, unsigned Insn,
|
||||
if (fieldFromInstruction(Insn, 6, 1))
|
||||
return MCDisassembler::Fail; // UNDEFINED
|
||||
index = fieldFromInstruction(Insn, 7, 1);
|
||||
if (fieldFromInstruction(Insn, 4, 2) != 0)
|
||||
align = 4;
|
||||
|
||||
switch (fieldFromInstruction(Insn, 4, 2)) {
|
||||
case 0:
|
||||
align = 0; break;
|
||||
case 3:
|
||||
align = 4; break;
|
||||
default:
|
||||
return MCDisassembler::Fail;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (Rm != 0xF) { // Writeback
|
||||
@@ -4090,8 +4106,15 @@ static DecodeStatus DecodeVLD4LN(MCInst &Inst, unsigned Insn,
|
||||
inc = 2;
|
||||
break;
|
||||
case 2:
|
||||
if (fieldFromInstruction(Insn, 4, 2))
|
||||
align = 4 << fieldFromInstruction(Insn, 4, 2);
|
||||
switch (fieldFromInstruction(Insn, 4, 2)) {
|
||||
case 0:
|
||||
align = 0; break;
|
||||
case 3:
|
||||
return MCDisassembler::Fail;
|
||||
default:
|
||||
align = 4 << fieldFromInstruction(Insn, 4, 2); break;
|
||||
}
|
||||
|
||||
index = fieldFromInstruction(Insn, 7, 1);
|
||||
if (fieldFromInstruction(Insn, 6, 1))
|
||||
inc = 2;
|
||||
@@ -4164,8 +4187,15 @@ static DecodeStatus DecodeVST4LN(MCInst &Inst, unsigned Insn,
|
||||
inc = 2;
|
||||
break;
|
||||
case 2:
|
||||
if (fieldFromInstruction(Insn, 4, 2))
|
||||
align = 4 << fieldFromInstruction(Insn, 4, 2);
|
||||
switch (fieldFromInstruction(Insn, 4, 2)) {
|
||||
case 0:
|
||||
align = 0; break;
|
||||
case 3:
|
||||
return MCDisassembler::Fail;
|
||||
default:
|
||||
align = 4 << fieldFromInstruction(Insn, 4, 2); break;
|
||||
}
|
||||
|
||||
index = fieldFromInstruction(Insn, 7, 1);
|
||||
if (fieldFromInstruction(Insn, 6, 1))
|
||||
inc = 2;
|
||||
|
||||
Reference in New Issue
Block a user