1
0
Fork 0
forked from len0rd/rockbox

ATJ213x: minor changes to hwstub port

1) Make use of $gp addressing. This saves some bin size and makes
   code slightly faster.
2) Substitute jr with simple j instruction in exception handling.
   Code is small and j can easily encode target address.
3) Remove nop after eret in interrupt handler. According to mips32r2
   ISA manual eret does not have branch delay slot.

Change-Id: If63feb12eef189f08f7b50c832a8091be5e6f570
This commit is contained in:
Marcin Bukat 2023-09-28 22:04:11 +02:00
parent 0bfdb73b4d
commit 440fcb86d6
3 changed files with 12 additions and 13 deletions

View file

@ -8,7 +8,7 @@ AS=$(PREFIX)gcc
OC=$(PREFIX)objcopy
DEFINES=
INCLUDES=-I$(CURDIR)
GCCOPTS=-march=mips32r2 -G0 -msoft-float
GCCOPTS=-Os -march=mips32r2 -G128 -msoft-float
BUILD_DIR=$(CURDIR)/build/
ROOT_DIR=$(CURDIR)/..

View file

@ -130,38 +130,34 @@ stack_munge_loop:
bne t0, sp, stack_munge_loop
addiu t0, 4
# setup Global Pointer
la gp, _gp
# jump to C code with enabled interrupts
la t0, main
jr.hb t0
ei
.extern exception_jmp_ctx_ptr
.global tlb_refill_handler
.section .exception.tlb_refill,"ax",%progbits
tlb_refill_handler:
j restore_exception_jmp
li a0, EXCEPTION_ADDR
la k0, restore_exception_jmp
jr k0
nop
.global cache_error_handler
.section .exception.cache_error,"ax",%progbits
cache_error_handler:
j restore_exception_jmp
li a0, EXCEPTION_ADDR
la k0, restore_exception_jmp
jr k0
nop
.global general_exception_handler
.section .exception.general_exception,"ax",%progbits
general_exception_handler:
j restore_exception_jmp
li a0, EXCEPTION_UNSP
la k0, restore_exception_jmp
jr k0
nop
/* s0-s7 not saved as this are callee saved registers
* CO_STATUS is not saved as nested interrupts are not supported
@ -249,8 +245,6 @@ restore:
addiu sp, sp, 84
move sp, k1
eret
nop
.set reorder
.set at

View file

@ -28,6 +28,11 @@ SECTIONS
*(.rodata*)
*(.data*)
*(.rel.dyn)
. = ALIGN(8);
_gp = ABSOLUTE(. + 0x7ff0);
*(.sdata*)
} > IRAM
.bss (NOLOAD) :