target-arm: fix thumb CPS
authorRabin Vincent <rabin@rab.in>
Sun, 14 Feb 2010 18:32:34 +0000 (00:02 +0530)
committerPaul Brook <paul@codesourcery.com>
Fri, 19 Feb 2010 13:38:32 +0000 (13:38 +0000)
The Thumb CPS currently does not work correctly: CPSID touches more bits
than the instruction wants to, and CPSIE does nothing.  Fix it by
passing the correct mask (the "affect" bits) and value.

Signed-off-by: Rabin Vincent <rabin@rab.in>
target-arm/translate.c

index 786c329..10a516b 100644 (file)
@@ -8898,7 +8898,7 @@ static void disas_thumb_insn(CPUState *env, DisasContext *s)
                     shift = CPSR_A | CPSR_I | CPSR_F;
                 else
                     shift = 0;
-                gen_set_psr_im(s, shift, 0, ((insn & 7) << 6) & shift);
+                gen_set_psr_im(s, ((insn & 7) << 6), 0, shift);
             }
             break;