target-arm: Make SETEND respect bswap_code (BE8) setting

Make the SETEND instruction respect the setting of bswap_code,
so that in BE8 mode we UNDEF for attempts to switch into
little-endian mode and nop for attempts to stay in big-endian
mode. (This is the inverse of the existing handling of SETEND
in the more common little-endian setup, which we use since
we don't implement the architecturally-mandated dynamic
endianness switching.)

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2012-04-24 18:05:05 +00:00
parent c5fad12fa0
commit 10962fd510

View File

@ -6767,8 +6767,8 @@ static void disas_arm_insn(CPUARMState * env, DisasContext *s)
if ((insn & 0x0ffffdff) == 0x01010000) { if ((insn & 0x0ffffdff) == 0x01010000) {
ARCH(6); ARCH(6);
/* setend */ /* setend */
if (insn & (1 << 9)) { if (((insn >> 9) & 1) != s->bswap_code) {
/* BE8 mode not implemented. */ /* Dynamic endianness switching not implemented. */
goto illegal_op; goto illegal_op;
} }
return; return;
@ -9710,8 +9710,8 @@ static void disas_thumb_insn(CPUARMState *env, DisasContext *s)
case 2: case 2:
/* setend */ /* setend */
ARCH(6); ARCH(6);
if (insn & (1 << 3)) { if (((insn >> 3) & 1) != s->bswap_code) {
/* BE8 mode not implemented. */ /* Dynamic endianness switching not implemented. */
goto illegal_op; goto illegal_op;
} }
break; break;