fix pass_condition() LE condition code check
authorLennert Buytenhek <buytenh@wantstofly.org>
Tue, 13 Oct 2009 18:27:03 +0000 (20:27 +0200)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Tue, 13 Oct 2009 22:33:04 +0000 (15:33 -0700)
The LE check is obviously buggy (as easily triggered during some
testing), but I didn't audit the rest of the cases.

Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
src/target/arm_simulator.c

index 7c610a5ba804267f1cd4b77858c2d6732c836113..93fb3dd9b522b93ec0319d11b4e66f06362202a7 100644 (file)
@@ -243,9 +243,9 @@ int pass_condition(uint32_t cpsr, uint32_t opcode)
                        else
                                return 0;
                case 0xd:       /* LE */
-                       if ((cpsr & 0x40000000) &&
-                               (((cpsr & 0x80000000) && !(cpsr & 0x10000000))
-                               || (!(cpsr & 0x80000000) && (cpsr & 0x10000000))))
+                       if ((cpsr & 0x40000000) ||
+                               ((cpsr & 0x80000000) && !(cpsr & 0x10000000))
+                               || (!(cpsr & 0x80000000) && (cpsr & 0x10000000)))
                                return 1;
                        else
                                return 0;