diff options
author | Jens Arnold <amiconn@rockbox.org> | 2005-06-22 16:53:12 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2005-06-22 16:53:12 +0000 |
commit | b7aaa641b864628d76103b8c9d57c15747560ca7 (patch) | |
tree | 1d096e42e878a02ee8f80fc78cb74987e259b985 /firmware | |
parent | 4fd457a2bf590805502b98ba8b4b40c56d6c6f09 (diff) | |
download | rockbox-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.c | 16 |
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 |