From b7aaa641b864628d76103b8c9d57c15747560ca7 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Wed, 22 Jun 2005 16:53:12 +0000 Subject: [PATCH] H1x0: rolo_restart() now uses the actual destination address to start the code. Some asm optimisation. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6811 a1c6a512-1295-4272-9138-f99709370657 --- firmware/rolo.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/firmware/rolo.c b/firmware/rolo.c index 71a47bf23d..1401307d18 100644 --- a/firmware/rolo.c +++ b/firmware/rolo.c @@ -59,17 +59,19 @@ void rolo_restart(const unsigned char* source, unsigned char* dest, long length) { long i; + unsigned char* localdest = dest; for(i = 0;i < length;i++) - *dest++ = *source++; + *localdest++ = *source++; #if CONFIG_CPU == MCF5249 - asm volatile (" move.l #0,%d0"); - asm volatile (" move.l #0x30000000,%d0"); - asm volatile (" movec.l %d0,%vbr"); - asm volatile (" move.l 0x30000000,%sp"); - asm volatile (" move.l 0x30000004,%a0"); - asm volatile (" jmp (%a0)"); + asm ( + "movec.l %0,%%vbr \n" + "move.l (%0)+,%%sp \n" + "move.l (%0),%0 \n" + "jmp (%0) \n" + : : "a"(dest) + ); #endif } #endif