diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2020-10-03 12:34:02 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-03 12:34:02 -0400 |
commit | 4a773ce18db43fd95b620413b780495854b18b83 (patch) | |
tree | 30c0e79b129ffbe210b0da6d1aea66755b169455 /src | |
parent | f0012504c636deb11b27ed4303c49498c75ddf9c (diff) | |
parent | 187c96d6e5558208266fa0ca81e41e38854ab568 (diff) |
Merge pull request #1217 from ipatix/fix_O3
rewrite MultiBootWaitCycles as naked function
Diffstat (limited to 'src')
-rw-r--r-- | src/multiboot.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/multiboot.c b/src/multiboot.c index c7e14392e..19245b5b3 100644 --- a/src/multiboot.c +++ b/src/multiboot.c @@ -1,3 +1,4 @@ +#include "global.h" #include "gba/gba.h" #include "multiboot.h" @@ -435,23 +436,23 @@ static int MultiBootHandShake(struct MultiBootParam *mp) #undef must_data } -static NOINLINE void MultiBootWaitCycles(u32 cycles) +NAKED +static void MultiBootWaitCycles(u32 cycles) { - asm("mov r2, pc"); - asm("lsr r2, #24"); - asm("mov r1, #12"); - asm("cmp r2, #0x02"); - asm("beq MultiBootWaitCyclesLoop"); - - asm("mov r1, #13"); - asm("cmp r2, #0x08"); - asm("beq MultiBootWaitCyclesLoop"); - - asm("mov r1, #4"); - - asm("MultiBootWaitCyclesLoop:"); - asm("sub r0, r1"); - asm("bgt MultiBootWaitCyclesLoop"); + asm_unified("\ + mov r2, pc\n\ + lsrs r2, 24\n\ + movs r1, 12\n\ + cmp r2, 2\n\ + beq MultiBootWaitCyclesLoop\n\ + movs r1, 13\n\ + cmp r2, 8\n\ + beq MultiBootWaitCyclesLoop\n\ + movs r1, 4\n\ +MultiBootWaitCyclesLoop:\n\ + subs r0, r1\n\ + bgt MultiBootWaitCyclesLoop\n\ + bx lr\n"); } static void MultiBootWaitSendDone(void) |