Merge pull request #1217 from ipatix/fix_O3

rewrite MultiBootWaitCycles as naked function
This commit is contained in:
PikalaxALT
2020-10-03 12:34:02 -04:00
committed by GitHub
+17 -16
View File
@@ -1,3 +1,4 @@
#include "global.h"
#include "gba/gba.h" #include "gba/gba.h"
#include "multiboot.h" #include "multiboot.h"
@@ -435,23 +436,23 @@ static int MultiBootHandShake(struct MultiBootParam *mp)
#undef must_data #undef must_data
} }
static NOINLINE void MultiBootWaitCycles(u32 cycles) NAKED
static void MultiBootWaitCycles(u32 cycles)
{ {
asm("mov r2, pc"); asm_unified("\
asm("lsr r2, #24"); mov r2, pc\n\
asm("mov r1, #12"); lsrs r2, 24\n\
asm("cmp r2, #0x02"); movs r1, 12\n\
asm("beq MultiBootWaitCyclesLoop"); cmp r2, 2\n\
beq MultiBootWaitCyclesLoop\n\
asm("mov r1, #13"); movs r1, 13\n\
asm("cmp r2, #0x08"); cmp r2, 8\n\
asm("beq MultiBootWaitCyclesLoop"); beq MultiBootWaitCyclesLoop\n\
movs r1, 4\n\
asm("mov r1, #4"); MultiBootWaitCyclesLoop:\n\
subs r0, r1\n\
asm("MultiBootWaitCyclesLoop:"); bgt MultiBootWaitCyclesLoop\n\
asm("sub r0, r1"); bx lr\n");
asm("bgt MultiBootWaitCyclesLoop");
} }
static void MultiBootWaitSendDone(void) static void MultiBootWaitSendDone(void)