diff --git a/src/bootloader/bootloader.c b/src/bootloader/bootloader.c index b5142ce..c9cf555 100644 --- a/src/bootloader/bootloader.c +++ b/src/bootloader/bootloader.c @@ -115,14 +115,11 @@ void Jump_to(void *pEntry) __asm ( "jr %[pEntry]\n" // jump entry + "nop\n" : : [pEntry] "r" (pEntry) ); __asm - ( - "nop\n" - ); - __asm ( ".set reorder\n" ); @@ -137,18 +134,12 @@ void Exec_at(void *pEntry) __asm ( - "mfc0 $26, $12\n" // change exception vector - "li $27, 0xFFBFFFFF\n" - "and $26, $27\n" - "mtc0 $26, $12\n" - ); - - __asm - ( - "lw $v0, 16($sp)\n" + "mtc0 %[pEntry], $14\n" "nop\n" - "jr $v0\n" // jump entry + "jr %[pEntry]\n" // jump entry "rfe\n" + : + : [pEntry] "r" (pEntry) ); __asm @@ -156,6 +147,7 @@ void Exec_at(void *pEntry) ".set reorder\n" ); } + void PrintCPUinfo(void) { int result, rev_id; diff --git a/src/bootloader/bootloader_with_flash.c b/src/bootloader/bootloader_with_flash.c index 4f78a61..733cc63 100644 --- a/src/bootloader/bootloader_with_flash.c +++ b/src/bootloader/bootloader_with_flash.c @@ -136,14 +136,11 @@ void Jump_to(void *pEntry) __asm ( "jr %[pEntry]\n" // jump entry + "nop\n" : : [pEntry] "r" (pEntry) ); __asm - ( - "nop\n" - ); - __asm ( ".set reorder\n" ); @@ -158,22 +155,14 @@ void Exec_at(void *pEntry) __asm ( - "li $26, 0x1000000A\n" - "mtc0 $26, $12\n" - ); - - __asm - ( + "mtc0 %[pEntry], $14\n" + "nop\n" "jr %[pEntry]\n" // jump entry + "rfe\n" : : [pEntry] "r" (pEntry) ); - __asm - ( - "rfe\n" - ); - __asm ( ".set reorder\n" @@ -199,16 +188,14 @@ void Exec_RE_at(void *pEntry) __asm ( + "mtc0 %[pEntry], $14\n" + "nop\n" "jr %[pEntry]\n" // jump entry + "rfe\n" : : [pEntry] "r" (pEntry) ); - __asm - ( - "rfe\n" - ); - __asm ( ".set reorder\n"