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.
This commit is contained in:
Christian Borntraeger 2017-06-19 10:59:40 +02:00 committed by Stefan Liebler
parent 52243b520e
commit 35810f5ccf
3 changed files with 12 additions and 18 deletions

View File

@ -1,3 +1,9 @@
2017-06-19 Christian Borntraeger <borntraeger@de.ibm.com>
* 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 <hongjiu.lu@intel.com> 2017-06-16 H.J. Lu <hongjiu.lu@intel.com>
* elf/Versions (ld): Remove _dl_out_of_memory. * elf/Versions (ld): Remove _dl_out_of_memory.

View File

@ -49,19 +49,13 @@ ENTRY (syscall)
l %r6,192(%r15) /* fifth parameter */ l %r6,192(%r15) /* fifth parameter */
l %r7,196(%r15) /* sixth parameter */ l %r7,196(%r15) /* sixth parameter */
basr %r8,0 svc 0
0: cl %r1,4f-0b(%r8) /* svc number < 256? */ l %r15,0(%r15) /* load back chain. */
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 */
cfi_adjust_cfa_offset (-96) cfi_adjust_cfa_offset (-96)
lm %r6,15,24(%r15) /* load registers */ lm %r6,%r15,24(%r15) /* load registers. */
lhi %r0,-4095 lhi %r0,-4095
clr %r2,%r0 /* check R2 for error */ clr %r2,%r0 /* check R2 for error */
jnl SYSCALL_ERROR_LABEL jnl SYSCALL_ERROR_LABEL
br %r14 /* return to caller */ br %r14 /* return to caller */
4: .long 256
PSEUDO_END (syscall) PSEUDO_END (syscall)

View File

@ -49,20 +49,14 @@ ENTRY (syscall)
lg %r6,320(%r15) /* Fifth parameter. */ lg %r6,320(%r15) /* Fifth parameter. */
lg %r7,328(%r15) /* Sixth parameter. */ lg %r7,328(%r15) /* Sixth parameter. */
basr %r8,0 svc 0
0: clg %r1,4f-0b(%r8) /* svc number < 256? */ lg %r15,0(%r15) /* Load back chain. */
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 */
cfi_adjust_cfa_offset (-160) cfi_adjust_cfa_offset (-160)
lmg %r6,15,48(%r15) /* Load registers. */ lmg %r6,%r15,48(%r15) /* Load registers. */
lghi %r0,-4095 lghi %r0,-4095
clgr %r2,%r0 /* Check R2 for error. */ clgr %r2,%r0 /* Check R2 for error. */
jgnl SYSCALL_ERROR_LABEL jgnl SYSCALL_ERROR_LABEL
br %r14 /* Return to caller. */ br %r14 /* Return to caller. */
4: .quad 256
PSEUDO_END (syscall) PSEUDO_END (syscall)