ARM: Detect a bad offset field for the VFP Ldm/Stm instructions in the decoder.

This commit is contained in:
Gabe Black 2010-06-02 12:58:17 -05:00
parent 563db6cb99
commit 5a6bf8301a

View file

@ -96,20 +96,25 @@ let {{
}
break;
case 0x1:
switch (bits(opcode, 1, 0)) {
case 0x0:
return new VLdmStm(machInst, rn, vd, single,
true, false, false, offset);
case 0x1:
return new VLdmStm(machInst, rn, vd, single,
true, false, true, offset);
case 0x2:
return new VLdmStm(machInst, rn, vd, single,
true, true, false, offset);
case 0x3:
// If rn == sp, then this is called vpop.
return new VLdmStm(machInst, rn, vd, single,
true, true, true, offset);
{
if (offset == 0 || vd + offset > NumFloatArchRegs) {
break;
}
switch (bits(opcode, 1, 0)) {
case 0x0:
return new VLdmStm(machInst, rn, vd, single,
true, false, false, offset);
case 0x1:
return new VLdmStm(machInst, rn, vd, single,
true, false, true, offset);
case 0x2:
return new VLdmStm(machInst, rn, vd, single,
true, true, false, offset);
case 0x3:
// If rn == sp, then this is called vpop.
return new VLdmStm(machInst, rn, vd, single,
true, true, true, offset);
}
}
case 0x2:
if (bits(opcode, 1, 0) == 0x2) {