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