mirror of git://sourceware.org/git/glibc.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.
This commit is contained in:
parent
52243b520e
commit
35810f5ccf
|
@ -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>
|
||||
|
||||
* elf/Versions (ld): Remove _dl_out_of_memory.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue