[PATCH 1/2] SPARC: syscall code clean-up and minor optimizations

Daniel Hellstrom daniel at gaisler.com
Fri May 23 13:52:15 UTC 2014


---
 c/src/lib/libcpu/sparc/syscall/syscall.S |   27 +++++++++++----------------
 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 aa69f45..2d53ebe 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 */
-- 
1.7.0.4




More information about the devel mailing list