summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2005-06-22 16:53:12 +0000
committerJens Arnold <amiconn@rockbox.org>2005-06-22 16:53:12 +0000
commitb7aaa641b864628d76103b8c9d57c15747560ca7 (patch)
tree1d096e42e878a02ee8f80fc78cb74987e259b985 /firmware
parent4fd457a2bf590805502b98ba8b4b40c56d6c6f09 (diff)
downloadrockbox-b7aaa641b864628d76103b8c9d57c15747560ca7.tar.gz
rockbox-b7aaa641b864628d76103b8c9d57c15747560ca7.zip
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
Diffstat (limited to 'firmware')
-rw-r--r--firmware/rolo.c16
1 files 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