ARM: call thumb_pass_branch_condition() only for actual branch opcodes
authorNicolas Pitre <nico@fluxnic.net>
Tue, 27 Oct 2009 05:14:32 +0000 (01:14 -0400)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Tue, 27 Oct 2009 06:53:07 +0000 (23:53 -0700)
Calling it first with every opcodes and then testing if the opcode
was indeed a branch instruction is wasteful and rather strange.
If ever thumb_pass_branch_condition() has side effects (say, like
printing a debugging traces) then the result would be garbage for most
Thumb instructions which have no condition code.

While at it, let's make the nearby code more readable by reducing some of
the redundant brace noise and reworking the error handling construct.

Signed-off-by: Nicolas Pitre <nico@marvell.com>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
src/target/arm_simulator.c

index e2f49c390331dbc988178d9159e7850c702b0e9a..646baea70764a6359cd4f2368432641240814d60 100644 (file)
@@ -309,19 +309,17 @@ int arm_simulate_step_core(target_t *target, uint32_t *dry_run_pc, struct arm_si
        {
                uint16_t opcode;
 
-               if ((retval = target_read_u16(target, current_pc, &opcode)) != ERROR_OK)
-               {
+               retval = target_read_u16(target, current_pc, &opcode);
+               if (retval != ERROR_OK)
                        return retval;
-               }
-               if ((retval = thumb_evaluate_opcode(opcode, current_pc, &instruction)) != ERROR_OK)
-               {
+               retval = thumb_evaluate_opcode(opcode, current_pc, &instruction);
+                if (retval != ERROR_OK)
                        return retval;
-                       }
                instruction_size = 2;
 
                /* check condition code (only for branch instructions) */
-               if ((!thumb_pass_branch_condition(sim->get_cpsr(sim, 0, 32), opcode)) &&
-                       (instruction.type == ARM_B))
+               if (instruction.type == ARM_B &&
+                   !thumb_pass_branch_condition(sim->get_cpsr(sim, 0, 32), opcode))
                {
                        if (dry_run_pc)
                        {

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)