SPARC: syscall code clean-up and minor optimizations

This commit is contained in:
Daniel Hellstrom
2014-05-23 08:52:15 -05:00
committed by Joel Sherrill
parent b3049a1d90
commit 434e7f7bee

View File

@@ -37,42 +37,37 @@ SYM(syscall):
subcc %g1, 2, %g0 ! syscall 2, disable interrupts
bne 3f
subcc %g1, 3, %g0 ! syscall 3, enable interrupts
or %l0, 0x0f00, %l4 ! set PIL=15
mov %l4, %psr
or %l0, SPARC_PSR_ET_MASK, %i0 ! return old psr with ET=1
ba,a 9f
ba 9f
or %l0, SPARC_PSR_ET_MASK, %i0 ! return old psr with ET=1
3:
subcc %g1, 3, %g0 ! syscall 3, enable interrupts
bne 1f
and %i0, SPARC_PSR_PIL_MASK, %l4
and %i0, SPARC_PSR_PIL_MASK, %l4
andn %l0, SPARC_PSR_PIL_MASK, %l5
or %l5, %l4, %l4
mov %l4, %psr
ba,a 9f
1:
ta 0 ! halt
9: ! leave
mov %l4, %psr ! Update PSR according to Syscall 2 or 3
mov 0, %g1 ! clear %g1
jmpl %l2, %g0
rett %l2 + 4
jmpl %l2, %g0
rett %l2 + 4
1:
ta 0 ! syscall 1 (not 2 or 3), halt
PUBLIC(sparc_disable_interrupts)
SYM(sparc_disable_interrupts):
mov SYS_irqdis, %g1
ta 0
retl
nop
ta 0
PUBLIC(sparc_enable_interrupts)
SYM(sparc_enable_interrupts):
mov SYS_irqen, %g1
ta 0
retl
nop
ta 0
/* end of file */