summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/sparc/syscall
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2014-05-23 08:52:15 -0500
committerJoel Sherrill <joel.sherrill@oarcorp.com>2014-05-23 09:14:08 -0500
commit434e7f7bee74fbd5467a7c8d239bb3faf8880044 (patch)
treecfd15d67b6bce584c160a792e667afb96fddf9ab /c/src/lib/libcpu/sparc/syscall
parentscore: Use _SMP_Fatal() (diff)
downloadrtems-434e7f7bee74fbd5467a7c8d239bb3faf8880044.tar.bz2
SPARC: syscall code clean-up and minor optimizations
Diffstat (limited to 'c/src/lib/libcpu/sparc/syscall')
-rw-r--r--c/src/lib/libcpu/sparc/syscall/syscall.S27
1 files changed, 11 insertions, 16 deletions
diff --git a/c/src/lib/libcpu/sparc/syscall/syscall.S b/c/src/lib/libcpu/sparc/syscall/syscall.S
index aa69f45d48..2d53ebeae1 100644
--- a/c/src/lib/libcpu/sparc/syscall/syscall.S
+++ b/c/src/lib/libcpu/sparc/syscall/syscall.S
@@ -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 */