XScale: clean up full_context() (#2)

Streamline the loop by continuing as soon as we know there's no
work to be done; this lets us un-indent almost everything.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
__archive__
David Brownell 2009-11-29 13:06:12 -08:00
parent 8c8e53baf6
commit 5219b35be6
1 changed files with 32 additions and 41 deletions

View File

@ -1712,28 +1712,21 @@ static int xscale_full_context(struct target *target)
mode, j).valid)
valid = false;
}
if (!valid)
{
uint32_t tmp_cpsr;
if (valid)
continue;
/* request banked registers */
xscale_send_u32(target, 0x0);
tmp_cpsr = 0x0;
tmp_cpsr |= mode;
tmp_cpsr |= 0xc0; /* I/F bits */
/* send CPSR for desired mode */
xscale_send_u32(target, tmp_cpsr);
/* send CPSR for desired bank mode */
xscale_send_u32(target, mode | 0xc0 /* I/F bits */);
/* get banked registers: r8 to r14; and SPSR
* if not in USR/SYS mode
* except in USR/SYS mode
*/
if (mode != ARMV4_5_MODE_SYS) {
/* SPSR */
r = &ARMV4_5_CORE_REG_MODE(
armv4_5->core_cache,
r = &ARMV4_5_CORE_REG_MODE(armv4_5->core_cache,
mode, 16);
xscale_receive(target, buffer, 8);
@ -1748,8 +1741,7 @@ static int xscale_full_context(struct target *target)
/* move data from buffer to register cache */
for (j = 8; j <= 14; j++)
{
r = &ARMV4_5_CORE_REG_MODE(
armv4_5->core_cache,
r = &ARMV4_5_CORE_REG_MODE(armv4_5->core_cache,
mode, j);
buf_set_u32(r->value, 0, 32, buffer[j - 8]);
@ -1757,7 +1749,6 @@ static int xscale_full_context(struct target *target)
r->valid = true;
}
}
}
free(buffer);