From: Christian Borntraeger Date: Mon, 19 Jun 2017 08:59:40 +0000 (+0200) Subject: s390: optimize syscall function X-Git-Tag: upstream/2.30~3270 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=35810f5ccf735d8df0a783bc6ed5fbe455e64876;p=platform%2Fupstream%2Fglibc.git 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-32/syscall.S: Simplify code by always using SVC 0 instead of EX. * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S: Likewise. --- diff --git a/ChangeLog b/ChangeLog index f4ac921..bf6c25a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2017-06-19 Christian Borntraeger + + * sysdeps/unix/sysv/linux/s390/s390-32/syscall.S (syscall): + Simplify code by always using SVC 0 instead of EX. + * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S: Likewise. + 2017-06-16 H.J. Lu * elf/Versions (ld): Remove _dl_out_of_memory. 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..61e2485 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)