From patchwork Sun Jan 12 10:34:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 37324 Received: (qmail 14814 invoked by alias); 12 Jan 2020 10:40:50 -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 14747 invoked by uid 89); 12 Jan 2020 10:40:49 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_NUMSUBJECT, KAM_SHORT autolearn=ham version=3.3.1 spammy= X-HELO: esa6.hgst.iphmx.com DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1578825648; x=1610361648; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ztAXHBjKB3enK7y49gobSTv4EXkxqeH9KGnMQkYa1iQ=; b=cumY7rptBscYPWNLcxV4K9kgvsoHtMPM5M4DSx+2PcdyGU3v37S7lyYt Y3ZzMCa1TxebsXvgJzq+BaBzxiLsrmJOsjALxli3ZdGh4FSae16ttfPOA gFmGO33lpDpdyYoFQWCDC5Q5IhQ/zwVRzSBfikmST/u9cgH972JWfxazN g3c2NRMV3q7FDwUr0Lr/T8Yll32NEMfrV779i0eefhYs4zDEl/gde4m8A G4s/5HmwArkYJghGjNl5f+koKocOZh9UuTnUR4KvReRRd/s3vIHdKARSD GimjzZvj01qHHbgEUIw1wZA56kPepzMFMKkTVKkJSeQSgYee7WZiR3N7A Q==; IronPort-SDR: KpjQZZg00VZRAxudXheshjh2F9I0/z0B1EBnpZPi1uior8XCgkajW4m1mF/XgYjVNqpkCrBBGz EQsjdWviqdaN9OCAcvg+YO3CrIefK5NrYWIvZ+OWJb6mzwnNPumAa3hQsT3yBoNHVWGfPGFNxn 4mZZZik7mGm1x3KYTaMuTiDKmr9A05TsgwcLoUuvgbs63jWvC2hp6KBn9dGV6v+KxRI/5TcSbl u4eS+okXA8FLm73fXGPV8jnUettrc5yStR+nWXakK5eRygNTw7uD8cWsCYidCCfQNSHD059vs2 XjQ= IronPort-SDR: +2WuDWUwwF2AJI05WSuw5amniIokds59NW2VjI5P2lgHgj/6fX96bIJpAP7Y7CSnGCvhlmGPyh xlYYQNVkEUTg1KxfMzSFiaS1+WD3owK3G/zp8DLRcyOUoAFIq8jOirIqFlCTYMLtoz7U2+TCix Pkgryif00dPvg4UxX29sbz6oEe1CbKxHv/etkNr2gBliYq347bJoC7cVne3CgJKurKw+FeW2j5 AZwxVdXNGjZNUEqhA9so7D0F31joKEe5zBQSlwZqg3fRqWfvaPHVVRWAZfTV089iLGT0kDCkCF /8muRAcfPOMBeVlzxBVl4Lwj IronPort-SDR: 0rzpYub+Df91PUDq0fzRG4QGx1m6wv1qV5bzGf9Eo2v4IOoXeH2Nm62rUCw1XzA5u4c7Fsq6ri LWWcddK6I9U5Mmh+WjYbj7/x0wfurwWrzGecrBJfJ19RoSbL9hHt2l8AJvSG31EwBPC+RvuogZ TZ8pooePYCCm41y8M1cP/PTcpMnnTwOEJJymLQx/eOsX4x+VEIgKnDm/hsAmn3rimDl8ocd5Oa 45fPV1CGJdEq0tqT6qdaWnBBfXJm0/VLUhOwkz1wQfFaFrcz0d4zO80u4Q2UJ1WwUOALqotYst iUk= WDCIronportException: Internal From: Alistair Francis To: libc-alpha@sourceware.org Cc: arnd@arndb.de, adhemerval.zanella@linaro.org, fweimer@redhat.com, joseph@codesourcery.com, palmerdabbelt@google.com, macro@wdc.com, zongbox@gmail.com, alistair.francis@wdc.com, alistair23@gmail.com Subject: [RFC v6 18/23] RISC-V: Fix llrint and llround missing exceptions on RV32 Date: Sun, 12 Jan 2020 02:34:19 -0800 Message-Id: <937f0d8b6cfbb237997b6c0b60e84d68232a9af8.1578824547.git.alistair.francis@wdc.com> In-Reply-To: References: MIME-Version: 1.0 From: Zong Li Similar to the fix for MIPS, ARM and S/390, RV32 is missing correct exception on overflow from llrint and llround functions because cast from floating-point types to long long do not result in correct exceptions on overflow. --- .../riscv/rv32/fix-fp-int-convert-overflow.h | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 sysdeps/riscv/rv32/fix-fp-int-convert-overflow.h diff --git a/sysdeps/riscv/rv32/fix-fp-int-convert-overflow.h b/sysdeps/riscv/rv32/fix-fp-int-convert-overflow.h new file mode 100644 index 0000000000..9137ee0fd8 --- /dev/null +++ b/sysdeps/riscv/rv32/fix-fp-int-convert-overflow.h @@ -0,0 +1,38 @@ +/* Fix for conversion of floating point to integer overflow. RISC-V version. + Copyright (C) 2015-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + 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 + . */ + +#ifndef FIX_FP_INT_CONVERT_OVERFLOW_H +#define FIX_FP_INT_CONVERT_OVERFLOW_H 1 + +/* The generic libgcc2.c conversions from floating point + to long long may not raise the correct exceptions on overflow (and + may raise spurious "inexact" exceptions even in non-overflow cases, + see ). */ +#define FIX_FLT_LONG_CONVERT_OVERFLOW 0 +#define FIX_FLT_LLONG_CONVERT_OVERFLOW 1 + +#define FIX_DBL_LONG_CONVERT_OVERFLOW 0 +#define FIX_DBL_LLONG_CONVERT_OVERFLOW 1 + +#define FIX_LDBL_LONG_CONVERT_OVERFLOW 0 +#define FIX_LDBL_LLONG_CONVERT_OVERFLOW 0 + +#define FIX_FLT128_LONG_CONVERT_OVERFLOW 0 +#define FIX_FLT128_LLONG_CONVERT_OVERFLOW 0 + +#endif /* fix-fp-int-convert-overflow.h */