提交 3d185e5d 编写于 作者: P Peter Maydell 提交者: Aurelien Jarno

target-arm: Fix decoding of preload and memory hint space

Correct the decoding of the ARM preload and memory hint space,
by adding decoding of PLI, PLDW and the v7MP unallocated hint
space. This commit also corrects a slightly overexuberant
decoding of PLD(register) which was not checking that bit 4
was one.
Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
Signed-off-by: NAurelien Jarno <aurelien@aurel32.net>
上级 607b4b08
...@@ -6100,9 +6100,31 @@ static void disas_arm_insn(CPUState * env, DisasContext *s) ...@@ -6100,9 +6100,31 @@ static void disas_arm_insn(CPUState * env, DisasContext *s)
goto illegal_op; goto illegal_op;
return; return;
} }
if ((insn & 0x0d70f000) == 0x0550f000) if (((insn & 0x0f30f000) == 0x0510f000) ||
return; /* PLD */ ((insn & 0x0f30f010) == 0x0710f000)) {
else if ((insn & 0x0ffffdff) == 0x01010000) { if ((insn & (1 << 22)) == 0) {
/* PLDW; v7MP */
if (!arm_feature(env, ARM_FEATURE_V7MP)) {
goto illegal_op;
}
}
/* Otherwise PLD; v5TE+ */
return;
}
if (((insn & 0x0f70f000) == 0x0450f000) ||
((insn & 0x0f70f010) == 0x0650f000)) {
ARCH(7);
return; /* PLI; V7 */
}
if (((insn & 0x0f700000) == 0x04100000) ||
((insn & 0x0f700010) == 0x06100000)) {
if (!arm_feature(env, ARM_FEATURE_V7MP)) {
goto illegal_op;
}
return; /* v7MP: Unallocated memory hint: must NOP */
}
if ((insn & 0x0ffffdff) == 0x01010000) {
ARCH(6); ARCH(6);
/* setend */ /* setend */
if (insn & (1 << 9)) { if (insn & (1 << 9)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册