From patchwork Fri Jun 9 11:29:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Borntraeger X-Patchwork-Id: 773811 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3wkg771FBfz9s8N for ; Fri, 9 Jun 2017 21:29:38 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="uEgtrZJz"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id; q=dns; s= default; b=HTNtqgw5RzYTCn6WsoM8gKvsrnH4UtpyvSff+64sWKdCORbDUemcg +10mO6MuPXGdYtEBnT3gra2a1RcND6kL2EAy94Uw5a8qhYQtHOfSGKGanRgNlq8l pS9Nr6nD6sly+gF9KiLQaI5H0Whrwou2/10AVzc498qqXT62+eQzkM= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id; s=default; bh=vX+/2spoopfzDvrdPTyIilANkrk=; b=uEgtrZJzyO6BhjAbEyURjIYLgWcj Bx+HlDGKWz2o9kaeaCD9eVMNOwTVakno0lLEO30XgNSNf6lmEYiQMZDrR2jzOzG9 ZIGsw94s/5H4EHdGZk+2FoSzyxF8CmHpM4bO8oR4RVN4lQY1z4LMRfd58gNkmb17 vvu/UX9udyYCV4Q= Received: (qmail 45207 invoked by alias); 9 Jun 2017 11:29:28 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 45148 invoked by uid 89); 9 Jun 2017 11:29:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-27.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=1.7.1 X-HELO: mx0a-001b2d01.pphosted.com From: Christian Borntraeger To: Stefan Liebler , Andreas Krebbel Cc: libc-alpha@sourceware.org, Martin Schwidefsky , Christian Borntraeger Subject: [PATCH] s390: optimize syscall function Date: Fri, 9 Jun 2017 13:29:07 +0200 X-TM-AS-GCONF: 00 x-cbid: 17060911-0040-0000-0000-000003C6130A X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17060911-0041-0000-0000-0000205E29F7 Message-Id: <1497007747-191015-1-git-send-email-borntraeger@de.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-06-09_06:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1703280000 definitions=main-1706090204 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 --- 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)