This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] s390: optimize syscall function


Since kernel 2.6.0 all Linux version accept the system call number
in register 1 for svc 0. There is no need to have special handling
that uses EX for system calls < 256. This will simplify and speed
up that code.

A microbenchmark doing "syscall(__NR_getpid);" in a loops gets faster
by ~12%.

        * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S: Simplify
        code by always using SVC 0 instead of EX.
        * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S: Likewise.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 sysdeps/unix/sysv/linux/s390/s390-32/syscall.S |   12 +++---------
 sysdeps/unix/sysv/linux/s390/s390-64/syscall.S |   12 +++---------
 2 files changed, 6 insertions(+), 18 deletions(-)

diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S b/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S
index 8506db1..0fa08cd 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S
@@ -49,19 +49,13 @@ ENTRY (syscall)
 	l      %r6,192(%r15)       /* fifth parameter  */
 	l      %r7,196(%r15)       /* sixth parameter  */
 
-	basr   %r8,0
-0:	cl     %r1,4f-0b(%r8)      /* svc number < 256? */
-	jl     2f
-1:	svc    0
-	j      3f
-2:	ex     %r1,1b-0b(%r8)      /* lsb of R1 is subsituted as SVC number */
-3:	l      %r15,0(%r15)        /* load back chain */
+	svc    0
+	l      %r15,0(%r15)        /* load back chain.  */
 	cfi_adjust_cfa_offset (-96)
-	lm     %r6,15,24(%r15)     /* load registers */
+	lm     %r6,%r15,24(%r15)   /* load registers.  */
 
 	lhi    %r0,-4095
 	clr    %r2,%r0             /* check R2 for error */
 	jnl    SYSCALL_ERROR_LABEL
 	br     %r14                /* return to caller */
-4:	.long  256
 PSEUDO_END (syscall)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S b/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
index 24c47cb..466f27a 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
@@ -49,20 +49,14 @@ ENTRY (syscall)
 	lg     %r6,320(%r15)	   /* Fifth parameter.	*/
 	lg     %r7,328(%r15)	   /* Sixth parameter.	*/
 
-	basr   %r8,0
-0:	clg    %r1,4f-0b(%r8)      /* svc number < 256? */
-	jl     2f
-1:	svc    0
-	j      3f
-2:	ex     %r1,1b-0b(%r8)      /* lsb of R1 is subsituted as SVC number */
-3:	lg     %r15,0(%r15)        /* load back chain */
+	svc    0
+	lg     %r15,0(%r15)        /* load back chain.  */
 	cfi_adjust_cfa_offset (-160)
-	lmg	%r6,15,48(%r15)	   /* Load registers.  */
+	lmg	%r6,%r15,48(%r15)  /* Load registers.  */
 
 	lghi   %r0,-4095
 	clgr   %r2,%r0		   /* Check R2 for error.  */
 	jgnl   SYSCALL_ERROR_LABEL
 	br     %r14		   /* Return to caller.	 */
-4:	.quad  256
 PSEUDO_END (syscall)
 
-- 
1.7.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]