From patchwork Fri Sep 27 20:47:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul A. Clarke" X-Patchwork-Id: 1168730 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-105450-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=us.ibm.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="auigsWFB"; dkim-atps=neutral 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 46g3l91w4Sz9s4Y for ; Sat, 28 Sep 2019 06:47:33 +1000 (AEST) 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=HAvBydRVjluuhGQbvib6BE1JUXRIPfKeUc24DPFm41ZoVIiCzijvt ySlB4WXHDw1zHgErwNVo0uQX7Vx6A4+AjPfI+dtTA5/Yxlbv+3YSfaHHnlY9Esag lLmX6xLvAsX/PDRzGsXCpaWtFUKix+5e5y0BA5T1mOoQcpjr1aAHdI= 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=2gsCgDD39QCsZ6bMYgbsXkH2l+g=; b=auigsWFBhjsmUuzHGijvSClKhMON 4SZvrBiLiNPnkm+HNCovg7B+Pwz6b2H/V29spVPFph906IP/IcLBjJbiY+Jvc1rw hWDxK4Sp9CXbGHTQgz88gKc7I2d9CnDS1ue2uMmyB0itEni3HzFZpeKEvrfGZwL/ 0X4xtefImx232xE= Received: (qmail 44871 invoked by alias); 27 Sep 2019 20:47:26 -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 44863 invoked by uid 89); 27 Sep 2019 20:47:26 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 spammy=H*Ad:D*br, U*pc, H*MI:7092, pc@us.ibm.com X-HELO: mx0a-001b2d01.pphosted.com From: "Paul A. Clarke" To: libc-alpha@sourceware.org Cc: tuliom@ascii.art.br, murphyp@linux.ibm.com Subject: [PATCH v3] [powerpc] No need to enter "Ignore Exceptions Mode" Date: Fri, 27 Sep 2019 15:47:17 -0500 Message-Id: <1569617237-7092-1-git-send-email-pc@us.ibm.com> From: "Paul A. Clarke" Since at least POWER8, there is no performance advantage to entering "Ignore Exceptions Mode", and doing so conditionally requires the conditional logic as well as a system call. Make it a no-op for uses within glibc. 2019-09-27 Paul A. Clarke * sysdeps/powerpc/fpu/fenv_private.h: (__ENTER_NON_STOP): New. (__EXIT_NON_STOP): New. (libc_feholdexcept_setround_ppc): Use __ENTER_NON_STOP. (__libc_femergeenv_ppc): Use __ENTER_NON_STOP and __EXIT_NON_STOP. (libc_feholdsetround_noex_ppc_ctx): Use __EXIT_NON_STOP. --- v2: This was a new patch (#2) in the series "Various FPSCR-related changes". v3: I was a bit uncomfortable with the approach used in v1/v2, which had side effects, although these were expected to be innocuous. I reimplemented this patch to be implemented only for uses that are internal to glibc. These are all cases where the mode is to be changed only temporarily. So, the state will be consistent after the code block is complete -- no unexpected side effects. sysdeps/powerpc/fpu/fenv_private.h | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/sysdeps/powerpc/fpu/fenv_private.h b/sysdeps/powerpc/fpu/fenv_private.h index 5eedc3b..d186575 100644 --- a/sysdeps/powerpc/fpu/fenv_private.h +++ b/sysdeps/powerpc/fpu/fenv_private.h @@ -23,6 +23,15 @@ #include #include +#ifdef _ARCH_PWR8 +/* There is no performance advantage to non-stop mode. */ +#define __ENTER_NON_STOP(old, new) do {} while (old * new * 0 != 0) +#define __EXIT_NON_STOP(old, new) do {} while (old * new * 0 != 0) +#else +#define __ENTER_NON_STOP __TEST_AND_ENTER_NON_STOP +#define __EXIT_NON_STOP __TEST_AND_EXIT_NON_STOP +#endif + static __always_inline void libc_feholdexcept_setround_ppc (fenv_t *envp, int r) { @@ -30,7 +39,7 @@ libc_feholdexcept_setround_ppc (fenv_t *envp, int r) old.fenv = *envp = fegetenv_register (); - __TEST_AND_ENTER_NON_STOP (old.l, 0ULL); + __ENTER_NON_STOP (old.l, 0ULL); /* Clear everything and set the rounding mode. */ new.l = r; @@ -49,8 +58,8 @@ __libc_femergeenv_ppc (const fenv_t *envp, unsigned long long old_mask, /* Merge bits while masking unwanted bits from new and old env. */ new.l = (old.l & old_mask) | (new.l & new_mask); - __TEST_AND_EXIT_NON_STOP (old.l, new.l); - __TEST_AND_ENTER_NON_STOP (old.l, new.l); + __EXIT_NON_STOP (old.l, new.l); + __ENTER_NON_STOP (old.l, new.l); /* If requesting to keep status, replace control, and merge exceptions, and exceptions haven't changed, we can just set new control instead @@ -141,7 +150,7 @@ libc_feholdsetround_noex_ppc_ctx (struct rm_ctx *ctx, int r) ctx->env = old.fenv; if (__glibc_unlikely (new.l != old.l)) { - __TEST_AND_ENTER_NON_STOP (old.l, 0ULL); + __ENTER_NON_STOP (old.l, 0ULL); fesetenv_control (new.fenv); ctx->updated_status = true; }