summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/s390/s390-64/syscall.S')
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/syscall.S12
1 files changed, 8 insertions, 4 deletions
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S b/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
index 718d559c3b..5a6bcfc90d 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
@@ -37,16 +37,20 @@ ENTRY (syscall)
lgr %r4,%r5 /* Third parameter. */
lgr %r5,%r6 /* Fourth parameter. */
lg %r6,320(%r15) /* Fifth parameter. */
- basr %r7,0
-.L0: ex %r1,.L1-.L0(%r7) /* Lsb of R1 is subsituted as SVC number. */
- lg %r15,0(%r15) /* Load back chain. */
+ basr %r7,0
+0: clg %r1,4f-0b(%r7) /* svc number < 256? */
+ jl 2f
+1: svc 0
+ j 3f
+2: ex %r1,1b-0b(%r7) /* lsb of R1 is subsituted as SVC number */
+3: lg %r15,0(%r15) /* load back chain */
lmg %r6,15,48(%r15) /* Load registers. */
lghi %r0,-4095
clgr %r2,%r0 /* Check R2 for error. */
jgnl SYSCALL_ERROR_LABEL
br %r14 /* Return to caller. */
-.L1: .word 0x0A00 /* Opcode for SVC 0. */
+4: .quad 256
PSEUDO_END (syscall)