From patchwork Wed Jan 3 19:14:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 123333 Delivered-To: patch@linaro.org Received: by 10.140.22.227 with SMTP id 90csp10534398qgn; Wed, 3 Jan 2018 11:14:23 -0800 (PST) X-Google-Smtp-Source: ACJfBov9LTFDu6NXWUYzquj5bPc+GEtiFkV6+4vzqB9nDFJcisp89WjzeFLahHpuErXVm23GOLxP X-Received: by 10.101.68.198 with SMTP id g6mr2040268pgs.104.1515006863458; Wed, 03 Jan 2018 11:14:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1515006863; cv=none; d=google.com; s=arc-20160816; b=DQS1Y7ec5lOlta9BIZ8Td8u3NLn6YnUSJOo74z1NKam4TO2t+vfVYaNNotXTy+scVR h/U4AHDllpqXzkkWuHxgr3v+neRuqFELw37/RrbtSvE/m1mVMXFMXkEt/lifcPkUcuxo bdq9T0nIyLI57wZpt7/oWMXGgpIlbSK2sxoKq+rnLqfFxA/4eMXLeyYiu7jU9qsedZUU 4GbUtNlqy4iUpiURTVAfZy3XlC+PtgWtyJBpX25YM4jBGBkmKO7bw+DgHneBiwB8861n LrNqFuaLWwk/9+pxxz6r3U8itqbU8Ts+N9sjTm1C8JzYd6sEEAUXLdejwbeDCr2baSfN EDgg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:date:subject:to:from:delivered-to:sender:list-help :list-post:list-archive:list-subscribe:list-unsubscribe:list-id :precedence:mailing-list:dkim-signature:domainkey-signature :arc-authentication-results; bh=m3/wgGvSD3Vu0P3jBUzvc/UnfWcBBN/Gy1LeQ2jQPJ4=; b=GxpByWvLCVmwSsWTs+/fnqnRnafPz2P02Zmq6taaqoWL376IL9HqIva5Ksqzg6xTLy KRrpifWWwUamUUgmLHffKfo7RDHF9W6pgwNK/r3it7wPaUrriSwcymRXh4PifUQrmzzx fu8SELrqpQgQ89zVpSjiW3wEexAoesVDdplVh+QMnLF/mh59RM8Mim/XxMHU4Te1j18f AJxwb2mMRODpt2xKoMTAyw5Yw1GT9WL/9IQ+OkOQr2GOi4QwQGjRPumU4dzsA9m7QVG5 S/W77Ps7+ft59iWUBcLJq3mwLBN2A5JiuAYhumORBLlePB4DEeGQzipaq3htcy8iwHwc p7hQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=v+2YJxc5; spf=pass (google.com: domain of libc-alpha-return-88811-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=libc-alpha-return-88811-patch=linaro.org@sourceware.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id l6si976705pgf.344.2018.01.03.11.14.23 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Jan 2018 11:14:23 -0800 (PST) Received-SPF: pass (google.com: domain of libc-alpha-return-88811-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=v+2YJxc5; spf=pass (google.com: domain of libc-alpha-return-88811-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=libc-alpha-return-88811-patch=linaro.org@sourceware.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org 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:subject:date:message-id; q=dns; s= default; b=CAk3WJVQ+Qd1LtAHtuFfpnzQ1G13SIjpHyx+Z+OH2FGnNcgIKzIh7 BoFRS6xvx8uN0sGuqRgLzJATNtGD+v8JFioxcHd9Di8tObqvcgOkH0K3tEqTH5Z1 CqVXdt8qKRg/lPOXyYup+INUzyK+JuBh1yp7kOrFJHhsqEL4AzpSOM= 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:subject:date:message-id; s=default; bh=HJeuGCHnrsydh/AGuuFijN6oZNk=; b=v+2YJxc58OTqXnXmt8YKCG+PxfRF /v787w8x0ze+KzulCl3TYWkPCa986QS7zBvleRckyRl7qqPWZdGvggPFWB+DhAl5 tumaMa6BJn81fmjpoPj9PF+XjTTVBELMfh5viU1XXfY/0qaOKXwVmQXAJ17ozDWX AxTxqMdEDD46Q/Y= Received: (qmail 94929 invoked by alias); 3 Jan 2018 19:14:11 -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 94316 invoked by uid 89); 3 Jan 2018 19:14:11 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-qk0-f181.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=m3/wgGvSD3Vu0P3jBUzvc/UnfWcBBN/Gy1LeQ2jQPJ4=; b=jBI7SVsJ5yOL9RJunGedgUjKp/fMuTkH2F6TNSJQRVAN3ywRQIxPby/TbSwGS34Joy OEweqW0ZtIAiKhgoH1JfusHcB0n8S7LJz/yKjFRXtQx9Rs4zw0CjNPn7FDderN9gxuux eoImWt/QDGMKGDo+Ct3JODIETiX8ZEVI1fE5y0R2bZCItHHX3qJp5Uy5yILrcWvcRh4j 0Qc7I+dn3+dip4b8fLcHT0nGiIvTz5nCcbuRb7H3dhPAIBWliVc8pe2QzSDjVoPmveqU CWnyw8lpjEvztEF5dFdGvzyW56/YHoofFMt+T7MbJeffDS3arRDaddDRrZwG3Sm2mTnD XEgA== X-Gm-Message-State: AKGB3mJ4rdRqkVIrvD0Kk0VCp80Sxh/bR9R+ROoIr2rKwwfS/1gkDtd8 +wI9eVF6iP3i6YedN8FkVHnb31zLg2M= X-Received: by 10.55.102.80 with SMTP id a77mr3181202qkc.121.1515006847424; Wed, 03 Jan 2018 11:14:07 -0800 (PST) From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH] alpha: Remove s_trunc{f} implementation (BZ#22666) Date: Wed, 3 Jan 2018 17:14:00 -0200 Message-Id: <1515006840-31339-1-git-send-email-adhemerval.zanella@linaro.org> As discussed in libc-alpha [1], alpha trunc{f} implementation uses addt/suc and subt/suc and although the Alpha Architecture Handbook version 3 states that that ADDx SUBx OUTPUT Exceptions (B.3 Mapping to IEEE Standard) should not generate Inexact if INE bit is set, the Alpha 21264 [2] chip manual (A.8 IEEE Floating-Point Conformance) states that ADDx SUBx OUTPUT does generate inexact exception for inexact result regardless. As Joseph noted [3] to correctly fix it on alpha we need to either avoid the instruction or avoid any inexact bit from it being set on return from the function (while preserving the inexact bit that might be set on the entry to the function). The later will result mf_fpcr followed by a mt_fpcr to get and set the fpcr which will defeat the optimization itself. So the patch just remove the alpha optimized and rely on generic implementation. It fixes the math/test-*-{trunc} on alpha. [BZ #15479] [BZ #22666] * sysdeps/alpha/fpu/s_trunc.c: Remove file. * sysdeps/alpha/fpu/s_truncf.c: Likewise. [1] https://sourceware.org/ml/libc-alpha/2018-01/msg00114.html [2] https://www.star.bnl.gov/public/daq/HARDWARE/21264_data_sheet.pdf [3] https://sourceware.org/ml/libc-alpha/2018-01/msg00086.html --- ChangeLog | 5 +++++ sysdeps/alpha/fpu/s_trunc.c | 45 -------------------------------------------- sysdeps/alpha/fpu/s_truncf.c | 44 ------------------------------------------- 3 files changed, 5 insertions(+), 89 deletions(-) delete mode 100644 sysdeps/alpha/fpu/s_trunc.c delete mode 100644 sysdeps/alpha/fpu/s_truncf.c -- 2.7.4 diff --git a/sysdeps/alpha/fpu/s_trunc.c b/sysdeps/alpha/fpu/s_trunc.c deleted file mode 100644 index 6ba7297..0000000 --- a/sysdeps/alpha/fpu/s_trunc.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2007-2018 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - - -/* Use the chopped rounding mode conversion instructions to implement trunc. */ - -double -__trunc (double x) -{ - double two52 = copysign (0x1.0p52, x); - double r, tmp; - - if (isgreaterequal (fabs (x), 0x1.0p52)) - return x; - - __asm ( - "addt/suc %2, %3, %1\n\tsubt/suc %1, %3, %0" - : "=&f"(r), "=&f"(tmp) - : "f"(x), "f"(two52)); - - /* trunc(-0) == -0, and in general we'll always have the same - sign as our input. */ - return copysign (r, x); -} - -libm_alias_double (__trunc, trunc) diff --git a/sysdeps/alpha/fpu/s_truncf.c b/sysdeps/alpha/fpu/s_truncf.c deleted file mode 100644 index 168c5a4..0000000 --- a/sysdeps/alpha/fpu/s_truncf.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2007-2018 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - -/* Use the chopped rounding mode conversion instructions to implement trunc. */ - -float -__truncf (float x) -{ - float two23 = copysignf (0x1.0p23, x); - float r, tmp; - - if (isgreaterequal (fabsf (x), 0x1.0p23)) - return x; - - __asm ( - "adds/suc %2, %3, %1\n\tsubs/suc %1, %3, %0" - : "=&f"(r), "=&f"(tmp) - : "f"(x), "f"(two23)); - - /* trunc(-0) == -0, and in general we'll always have the same - sign as our input. */ - return copysignf (r, x); -} - -libm_alias_float (__trunc, trunc)