From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 95F063858D3C for ; Thu, 26 Aug 2021 22:06:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 95F063858D3C Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.0.43) with SMTP id 17QIx7BL015948; Thu, 26 Aug 2021 22:06:13 GMT Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3ap0xpahb0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Aug 2021 22:06:13 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 17QM5O4W157774; Thu, 26 Aug 2021 22:06:12 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2103.outbound.protection.outlook.com [104.47.58.103]) by aserp3020.oracle.com with ESMTP id 3ajsaa305g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Aug 2021 22:06:12 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dqpneO7fKToir8OpGhCIisJBr9IcEFCaxkdpxJubNsPtBXQDBa3fAzSQ8aE0IGwALsIepfnMxEEsNcn7bbgIKRCRlFvIAjo+9OQUufrkvctAY+fbrk5txFPajTJsl59+LczvHdKggvJ/atHdN2NW7Sh//ArX85ROBqCbjABq674bM8+7+rCGXV3G/g9Cli9LwTNv1Sguahwo82nXdQYqUfbMob5vOjVXD5uXzwJYletKxL0jcSdK1dgUFi54VgcTrBCkG4ZeTfNR8JnEB+GbDQ4v1pNKiof5Kq43OVr9OXwipU450oaAbq0LWa7RgJB11oohFWUAT9igKBlcNh+VBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sOGonXlezndmzloCWIRUWS9wZITcrYAWzlURjnhFz1c=; b=TYEoMaCyLXlUky+/3YpxGzgWFUNjVq7OfWeUZunULJ6bgzjGURu+/tJ8ZF2ocQt4WvRzP+jlJPXZ0+7+nmCrtuXZ03iy9/2F5hNo9gdUgwEesBWEqu/43ZiXrIe/nP260/LDXAvHsDbxxtGOPY4oeL/u3S+CqNYGDFld05ZzNnEuarRdH//oZei60XVe9jQBj1h5mt+UB49VNByGrd9VEiJUolrFEtRBJkwSJYBaaUkLeIXA2Fm8nolV9p3vl0YE+My9MX6Sk9+8TlExukcZNIMt/IKp6By4fMHF2WVbYl1Zm85lqb3qMf3duvAuKGW+AVFVC1oa7rKynlF7Ii/Cug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from BYAPR10MB3208.namprd10.prod.outlook.com (2603:10b6:a03:159::10) by BY5PR10MB3986.namprd10.prod.outlook.com (2603:10b6:a03:1fb::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.17; Thu, 26 Aug 2021 22:06:10 +0000 Received: from BYAPR10MB3208.namprd10.prod.outlook.com ([fe80::7c09:ef39:34f2:e79c]) by BYAPR10MB3208.namprd10.prod.outlook.com ([fe80::7c09:ef39:34f2:e79c%4]) with mapi id 15.20.4436.024; Thu, 26 Aug 2021 22:06:10 +0000 From: Patrick McGehearty To: gcc-patches@gcc.gnu.org Cc: segher@kernel.crashing.org, joseph@codesourcery.com Subject: [PATCH v4] Fix for powerpc64 long double complex divide failure Date: Thu, 26 Aug 2021 22:05:43 +0000 Message-Id: <1630015543-9604-1-git-send-email-patrick.mcgehearty@oracle.com> X-Mailer: git-send-email 1.8.3.1 Content-Type: text/plain X-ClientProxiedBy: SN4PR0801CA0017.namprd08.prod.outlook.com (2603:10b6:803:29::27) To BYAPR10MB3208.namprd10.prod.outlook.com (2603:10b6:a03:159::10) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.us.oracle.com (148.87.23.5) by SN4PR0801CA0017.namprd08.prod.outlook.com (2603:10b6:803:29::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.20 via Frontend Transport; Thu, 26 Aug 2021 22:06:09 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 43a0ca99-1c1b-480c-53c8-08d968ddb5dc X-MS-TrafficTypeDiagnostic: BY5PR10MB3986: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: J7V3UZQ/KD19wdpBWoffLr1T4m9BvlI2PHzo+Wv8mm2qorOnZcWLmX2MQ+nP1xWjmdThn7ONvDROTQL+AbS1uEfyO3IKC9r0dCvMPqxY41BoJmt/X51PyEevChHYpXqH6p9gZDnRvBYlfHEfNxVSZMvEjPTSmjMADI0+RPiqB28Jj5B1lnZ+FqxtDuZQP6W+s8feHWFYcpLyJGTuuSYbm2z4BGU91sPUvu6sISFXZLGZuiqt3/9QMJt0Cl6yrBvd6mIexZCSVK/Sy+6pqnFC1urx8QL6bWXW7crswySQaEeUj+jVe1po+JcYEXlAWOgRbYpXYZ9aM+XEMYg3u6jR2MM5/rP9V+yg73L7bNbgmGEtwZ6fZ9p9qLxDKuHGBiT9Wq0JfI83sQwPHdKWV6IRlWqBBr1R1/Edpl0lJyRW8CgpMIKui8CXxeZI+sCAyC6fcPJ0vZDGI0LTf3R1NhNrJ8vzasTs+hhSIzyB/h7sX1P5OjmmL7TQjhhxTPNTzSq8BothrZs3WRyLcnh+C3wyiSpcv92aBoU57Y6wNJZquZyvzwlxeu2+N6ekUvRTw+xfLf8AOuBq22GfdTU8aUCXCh+gWLm0pl3Th31Kf/FYj9c1IYfK9Dh+u1mitWtWvnD3IDykWO6gC3tge1ReEU+w0yND8prTCIKHUC7SVBxiMSl1H3QvyVKTv8/66FbrNGI8DpCpqantLyHydbxLfi60P9jP2Iy2CH5f713FoonarjTKcTjuY1CgubCLKX+ZzIRIXnf7K5M3RfD1UU7+RfPtrJ//SEemHs857NMoF2YnLBo= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3208.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(376002)(396003)(136003)(366004)(39860400002)(346002)(6486002)(6916009)(8676002)(956004)(8936002)(2616005)(86362001)(316002)(38100700002)(38350700002)(186003)(66556008)(66476007)(26005)(52116002)(83380400001)(4326008)(966005)(2906002)(5660300002)(478600001)(66946007)(6666004)(7696005)(36756003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?d/3Cqs+U0QqONxEg8gt7AD7AEEJ89KFJkMLG8FKANxC/sBZSAMml8bMKOKFD?= =?us-ascii?Q?J1hhrpg/85/HdDJPHjclU72R9i7RKTqlSqYH1Lm6Wgj8c6f1k4z63Cr8IAzF?= =?us-ascii?Q?5a9SX7ATZ0EiItwz5kqIY8wM8RdBuC980mp5qoNTgCCpztZnonE+P3sKdn04?= =?us-ascii?Q?V24/GM8rag/1NdfZMIn2Qa1aDLXhYY3MzQcquT8EI7xurGsiBwWILftjWi4D?= =?us-ascii?Q?UBS7U4w+B2Y7uoUUYRiRXuxHcWi+2wugcVxS9rqSgMEzMAa8DuEofurb2U6j?= =?us-ascii?Q?LzOxgIVO6HvT+XHNNd1TUuAaMASSV/qEQPFHKmhcUOMAofy2S8qFhek9LJAe?= =?us-ascii?Q?Au09HdmqmOfsBhI27F64qhJpcahnq/gWWCJuWuQnZmIICfiyvq/vnZKZGaQf?= =?us-ascii?Q?eSxlrOL3qKRjzvVFdzlmsWtFAoTM5p8vbfHjWyui5z8wOSH6DSAR5IncjMJM?= =?us-ascii?Q?XkdO+wZ699krfSxSaScdHI/nYHtT0E9Nj0gdd5MwAXG4l6Ho00sMGrkTIn0T?= =?us-ascii?Q?yth3byB+ORCLdofhxu/7INrKbPO+Mwh4cDwiwOS7vinOzabJiJchLyHWYUfT?= =?us-ascii?Q?uzay8MU1OR6Nw3Rb4Z7AWs3VYDKkShASopYIXoq1aXW533ccYlihoEfuJtHC?= =?us-ascii?Q?/juovXMuoKOxaW6HXOwaz7oTWxtn0qX6blq+xIibNxCLKxntPC4We3F72TdY?= =?us-ascii?Q?vhR0v5zRjGPP7H5gIKzxMuYC4TfptZsaENz7T4BWDmAuyFsIJNq6TYSJNdWk?= =?us-ascii?Q?wBswlMb6OfKWO4wcBqueF/7uiuy9aetYlyPzDvzkhCgS/JYbDyTkfWxL+kRz?= =?us-ascii?Q?OAu0YTm3C0UZP1JCPYXxV3MhemKN59oef8EZHHDab2ogblGYX/rshSnJPZJv?= =?us-ascii?Q?q8l5VhjB20DYQ5IePl0+O0xu7QHqlzm4xCFSWSCZ4azYPuW6hJLzSiqKAQKn?= =?us-ascii?Q?uRE9UIvzuF+ZYvtuIuQ99FC/eKVKGdiXWIY3hpt+gfAK3PQc5V3mLUk/tIj+?= =?us-ascii?Q?7Yz+aCkagpzAnN4CcEGvE5IRfZyJcjZXIPNY2kXZaRz9hxL5QMnQH0B9N9sq?= =?us-ascii?Q?TbciGrC8SGJjD0hTldkK3Wj+1iwhXjNgq1FWTbhDSbHTHrqzrSIn+X/XFCI/?= =?us-ascii?Q?tpn1pQEBj+Pcn1+iYty1ENjDHiw6QWGpl5+zubBjV8eOx+pHqgowH7JURe6f?= =?us-ascii?Q?F9hENGOoKIG5dOND7TRCNxe1+JrIjOpZicHOxmHVeW2uXDrtwKVhB0/wc0iV?= =?us-ascii?Q?LTcwCSx+ePefPxPY0WcDZJyhJQyHXYue1jk8YsFM/5r8t9D/cTtqXY+aemPL?= =?us-ascii?Q?cZd7ett4WOGYumpAdb+eVFPo?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 43a0ca99-1c1b-480c-53c8-08d968ddb5dc X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3208.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2021 22:06:09.9261 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TfnRHwjOg2LHYA4hzPE12iEvSDVWg5AqoYL06x6pfMOlKV5KgfNW9q6cN+g8tCXU9af5TPkS42X9jdvtvxmb/tFed6XhtJD1bESxL85QQ8g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB3986 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10088 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 mlxlogscore=999 bulkscore=0 mlxscore=0 adultscore=0 malwarescore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2107140000 definitions=main-2108260123 X-Proofpoint-GUID: PFbdRRxpv-y4Ps0R5EbblX-X-p_ya8kz X-Proofpoint-ORIG-GUID: PFbdRRxpv-y4Ps0R5EbblX-X-p_ya8kz X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 26 Aug 2021 22:06:27 -0000 The v4 revision adds a test in libgcc/libgcc2.c for when "__LIBGCC_TF_MANT_DIG__ == 106" to use __LIBGCC_DF_EPSILON__ instead of __LIBGCC_TF_EPSILON__. That is specific to IBM 128-bit format long doubles where EPSILON is very, very small and 1/EPSILON oveflows to infinity. This change avoids the overflow without affecting any other platform. The revision retains the use of __LIBGCC_DF_* in .../rs6000/_divkc3.c instead of __LIBGCC_KF_* since some older but still supported environments do not recognize the KF floating point mode properly. This change has a very tiny effect on the results (no cases measured in 100 million tests). - - - - This patch resolves the failure of powerpc64 long double complex divide in native ibm long double format after the patch "Practical improvement to libgcc complex divide". The new code uses the following macros which are intended to be mapped to appropriate values according to the underlying hardware representation. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101104 RBIG a value near the maximum representation RMIN a value near the minimum representation (but not in the subnormal range) RMIN2 a value moderately less than 1 RMINSCAL the inverse of RMIN2 RMAX2 RBIG * RMIN2 - a value to limit scaling to not overflow When "long double" values were not using the IEEE 128-bit format but the traditional IBM 128-bit, the previous code used the LDBL values which caused overflow for RMINSCAL. The new code uses the DBL values. RBIG LDBL_MAX = 0x1.fffffffffffff800p+1022 DBL_MAX = 0x1.fffffffffffff000p+1022 RMIN LDBL_MIN = 0x1.0000000000000000p-969 RMIN DBL_MIN = 0x1.0000000000000000p-1022 RMIN2 LDBL_EPSILON = 0x0.0000000000001000p-1022 = 0x1.0p-1074 RMIN2 DBL_EPSILON = 0x1.0000000000000000p-52 RMINSCAL 1/LDBL_EPSILON = inf (1.0p+1074 does not fit in IBM 128-bit). 1/DBL_EPSILON = 0x1.0000000000000000p+52 RMAX2 = RBIG * RMIN2 = 0x1.fffffffffffff800p-52 RBIG * RMIN2 = 0x1.fffffffffffff000p+970 The MAX and MIN values have only modest changes since the maximum and minimum values are about the same as for double precision. The EPSILON field is considerably different. Due to how very small values can be represented in the lower 64 bits of the IBM 128-bit floating point, EPSILON is extremely small, so far beyond the desired value that inversion of the value overflows and even without the overflow, the RMAX2 is so small as to eliminate most usage of the test. Instead of just replacing the use of KF_EPSILON with DF_EPSILON, we replace all uses of KF_* with DF_*. Since the exponent fields are essentially the same, we gain the positive benefits from the new formula while avoiding all under/overflow issues in the #defines. The change has been tested on gcc135.fsffrance.org and gains the expected improvements in accuracy for long double complex divide. libgcc/ PR target/101104 * config/rs6000/_divkc3.c (RBIG, RMIN, RMIN2, RMINSCAL, RMAX2): Use more correct values for native IBM 128-bit. --- libgcc/config/rs6000/_divkc3.c | 8 ++++---- libgcc/libgcc2.c | 5 +++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/libgcc/config/rs6000/_divkc3.c b/libgcc/config/rs6000/_divkc3.c index a1d29d2..2b229c8 100644 --- a/libgcc/config/rs6000/_divkc3.c +++ b/libgcc/config/rs6000/_divkc3.c @@ -38,10 +38,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #endif #ifndef __LONG_DOUBLE_IEEE128__ -#define RBIG (__LIBGCC_KF_MAX__ / 2) -#define RMIN (__LIBGCC_KF_MIN__) -#define RMIN2 (__LIBGCC_KF_EPSILON__) -#define RMINSCAL (1 / __LIBGCC_KF_EPSILON__) +#define RBIG (__LIBGCC_DF_MAX__ / 2) +#define RMIN (__LIBGCC_DF_MIN__) +#define RMIN2 (__LIBGCC_DF_EPSILON__) +#define RMINSCAL (1 / __LIBGCC_DF_EPSILON__) #define RMAX2 (RBIG * RMIN2) #else #define RBIG (__LIBGCC_TF_MAX__ / 2) diff --git a/libgcc/libgcc2.c b/libgcc/libgcc2.c index 38f935e..a0fc724 100644 --- a/libgcc/libgcc2.c +++ b/libgcc/libgcc2.c @@ -1906,8 +1906,13 @@ NAME (TYPE x, int m) # define NOTRUNC (!__LIBGCC_TF_EXCESS_PRECISION__) # define RBIG (__LIBGCC_TF_MAX__ / 2) # define RMIN (__LIBGCC_TF_MIN__) +#if __LIBGCC_TF_MANT_DIG__ == 106 +# define RMIN2 (__LIBGCC_DF_EPSILON__) +# define RMINSCAL (1 / __LIBGCC_DF_EPSILON__) +# else # define RMIN2 (__LIBGCC_TF_EPSILON__) # define RMINSCAL (1 / __LIBGCC_TF_EPSILON__) +#endif # define RMAX2 (RBIG * RMIN2) #else # error -- 1.8.3.1