From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60136.outbound.protection.outlook.com [40.107.6.136]) by sourceware.org (Postfix) with ESMTPS id AB6363858C74 for ; Tue, 1 Feb 2022 12:53:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org AB6363858C74 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=syrmia.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=syrmia.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B1amSVYckwjuwlXn2BD4cnJ9JAOiFWWqKC7VGI+GXYSTlhgYkvgaCvK7b63vB4dboAJXphmpvHBBH9oTUHZvnnAh5d8A5nhd0COn+ZAl1wDRkDSidJf0DCejADZzUYBF81uhc9cKfi3tXoMsTzjeq47rdab4vH6sTipwtalJmFGcIFNBoCbt5YDQU9Ug02hc6HSUseLz8DKEncrrW6lhBLY3s08iMP4UtfcJDF2L6G6+E2kOnLyUu3MLZhd3rHouTK1NevL4hF7cDfufIoWloTENfckowJClrmT3W7GGMtmHpLX1QqtnfckiAPaVevrWc7Eys6uI9MBZjYmJ6+H3Ig== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xdghU5W5Oe0t1LYLAcmIVAUTWL0fvUaXRP9lDRNQow8=; b=Kf5tqUxU+O8fJb/IxzGAXMtBf1XEeC6q9kHJ/yiklRPjp/PpjlruoEv5bQnC3jZFvyCR8CRkxdWfyoTYLojiXPtZlFeFs3x588+BGX2SgT3O94m1oy3llgiRyqemMqMLUqKISU/HqpJ9Tc+opePqKTT9ElYJ3U9FrRtVcQgayClpsStRWoQ0iIIKRyNawEXQdPc7vFJB5PuWTwBP3uBjdvD34LIF/RYrp3rG1YL8vVz7e1Zqw+/mOazRgQArsdmZrcpXHhHVvubjtNc+FVhpGHlcg2BiRvgHn+KB1PCpIryMFXgccKVN8k240BDQAnOpYS5vkm+gtSEk6ZCtK6SWPw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xdghU5W5Oe0t1LYLAcmIVAUTWL0fvUaXRP9lDRNQow8=; b=DAwDPq55Binb6xtQU2ujGSTkIOktrmXl+IPrt5e9WhRTqp7cUvL6YiMAl09QBxGSaSUifHRHN5j+n2UUT1ZuG1f0KxPZxnP0IORM/NwiHOzyYyofwEz7YxPppH8h9oPaSgebNLgNc8fJRhgj0KLlX856GGHKYAR0LXLTYk+ua2o= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from VI1PR03MB4208.eurprd03.prod.outlook.com (2603:10a6:803:51::25) by VE1PR03MB5407.eurprd03.prod.outlook.com (2603:10a6:802:ac::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.22; Tue, 1 Feb 2022 12:53:26 +0000 Received: from VI1PR03MB4208.eurprd03.prod.outlook.com ([fe80::2403:1065:f4bd:86c5]) by VI1PR03MB4208.eurprd03.prod.outlook.com ([fe80::2403:1065:f4bd:86c5%6]) with mapi id 15.20.4930.021; Tue, 1 Feb 2022 12:53:26 +0000 From: Dragan Mladjenovic To: gdb-patches@sourceware.org Cc: Mike Frysinger , "Maciej W . Rozycki" , Chao-ying Fu , Faraz Shahbazker Subject: [PATCH v4 2/4] sim: Factor out NaN handling in floating point operations Date: Tue, 1 Feb 2022 13:53:00 +0100 Message-Id: <20220201125302.30137-3-Dragan.Mladjenovic@syrmia.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220201125302.30137-1-Dragan.Mladjenovic@syrmia.com> References: <20220201125302.30137-1-Dragan.Mladjenovic@syrmia.com> Content-Type: text/plain X-ClientProxiedBy: VI1PR0102CA0057.eurprd01.prod.exchangelabs.com (2603:10a6:803::34) To VI1PR03MB4208.eurprd03.prod.outlook.com (2603:10a6:803:51::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1750d266-8e50-4363-fb0b-08d9e581d62d X-MS-TrafficTypeDiagnostic: VE1PR03MB5407:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tjjgCcrsnicm2T0NBhXukLVkEP7fRrCqxVVRWK0MytTnQIXAmsdhkIwK3oi0FXF+JzS9f+fRB1nUFErHMHe1zRs7NBcA3WP2LW5c/sXNKbsidvfktFLhwTSIS4hvUqE6NbzS1fenvJSOY2hVk2Y/WlVDgQ9u/E7S2NDIEEzegnS7ltQjoSAnHpmchSLYUjSYyQoOrUhxcPCpcEKbDTRe+/3BtfgNEFzlyXJFsw+mn19ex3nBmTZbQ5fLYiSFWx54oarFboF4eYJHKCpmiPJBkFRX+SBBKpWLsuHWGhvVJhfM2jqj4hpWu6iZDTun+gDBPHcDYAkEDF3V4+q687vam8qP8b5aEWGi9+gg30dK2mDn6rfYa/9nqGAigxlAOewN8T+epUo1sCeXU7awX8Hfa/WnQOFBHuhuTqTNre3HcGFHwnYC2gwPjt2Sc9vXDb8XHSWqWD86p6spGw2vl3LrCIuuYL1VFKktkODEhGAC9d8AlJL/ISBGWQ7KUgP805+dVkwEY6k8JsF/70gyCvcI450TcODTJxBWLZL+Y3zXTp+wGMSGRQBwI4xX52w/G37Zpk1dAWBrxGnYRsI6rxZpVeS1kaHQ9ySU5pTW6cU/l9dyZlJZaS1LXG7HXyMq8RhXxV8MrEq7GzuFs6VwiiI+wc1016F4dZKusv8pkI9LzTTmBizrz/5MbohAtsM2j15qP2OH+jZhbGNlSoiG3g8Iww== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR03MB4208.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(136003)(39840400004)(346002)(396003)(376002)(38350700002)(6506007)(2616005)(86362001)(6916009)(54906003)(1076003)(26005)(36756003)(38100700002)(186003)(316002)(8676002)(66476007)(83380400001)(6512007)(66946007)(6486002)(4326008)(66556008)(2906002)(52116002)(508600001)(6666004)(5660300002)(8936002)(20210929001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?DN+joHYcRX9p+LTEo2qjIY/uzWpNpsvTdPDH6+ZX95Rer+6TVPxFaHDOWCx2?= =?us-ascii?Q?7Dn2yThI4hAe9fG1CK/aC3jnc5TBekEenTtkq1SFJJ2/9jAtx26yXje6v3d+?= =?us-ascii?Q?2dXCXqE8SbnEhho4SRlXbsEkd3hi+Yk8ynL6PTJeUL0HBPcZrD0/wrDQMNZc?= =?us-ascii?Q?Y62fY+Ww/T7T2R62F93BMMyHV9ubYElCn4rHhSJzSBwEHtq3wwO8KaNxZ5G/?= =?us-ascii?Q?KpJ8mecaxWIAygowiUCrD8q+QwKh1TvTds7via9UhDhRjmASE7+CxVEduXUd?= =?us-ascii?Q?J50aStzoTRLbB4u52N50XgJCUPs3uJrz3tQKpPOvViq9cgLhGcTRIeWaEQjL?= =?us-ascii?Q?/JWkd5AGRV56UJmWuxOWCLH55L02N0c7ghzvESaa3fkhtXPgKrFZt4PBD40T?= =?us-ascii?Q?WL3ovN7jHL1BzENCw0IZAiDNH8d8qTF+ScveDPUVpvbCb70QFsoS10yrZFS6?= =?us-ascii?Q?6HCebRGhdzEBgvCgHJkrftRL1H7fdnAYtjuBhUAjl76jhZR9hwq/JJIfM6U6?= =?us-ascii?Q?wyNAlHIdKK5IRvipAQ69FBXyl5NwuhNgptxbak1FayQ2sBEUmvryszy4B9zn?= =?us-ascii?Q?VEVnHXp+MO+6cXbRcuxYQlJWcuxZmlJCDIOEu0Q1+MHgpsl/EkunDbSvFQrx?= =?us-ascii?Q?3ZrmSzkXkb3qPZqMfnRxtofeqNPMnX5dcsHdpfow3Hlw3Ewk85nZBI2Vm/X1?= =?us-ascii?Q?Y+kNTXLLYPO7EkCmmbDVJGyfgpQdTs2aBEss9mXrFi/+GT4l/29lARMuKUtH?= =?us-ascii?Q?09yGerZaSJ/D1EazGRYDKJmflhII3MOdABPQsBVAYcMiWYnRkkdH6kaj8ZDC?= =?us-ascii?Q?EMyBSH9lpISS2l/qxn528JzcgSab5zj3M6/jBXfNZNMKgNdsf5IUW5kjq9sq?= =?us-ascii?Q?6Ax4o18P6eqQxUYzayYDufu53oF/pRG6SGE9VIRIPkNvOuwQBzJrFX7lJUfN?= =?us-ascii?Q?x5Bmq4gOcubqdpYijRilzPhlD1853SS2KPWvNn2Zwsv5jjQsYDa8TIuBq2fG?= =?us-ascii?Q?y3N43w6874yINL4nhlT6HFjGy71UA+oxUtYG7l3XoPAmVI4pJISiVNMU9eu4?= =?us-ascii?Q?K/n6+wi/yJc1wZfwkWklEHJcGRdTSaA2gL9eBT8nWQ0cktVgL77bqXhmh6T8?= =?us-ascii?Q?UFulfIs8O1VmAea+jEz1+hoKJHZBughab44Ctit/JG4h0N5d+PRL5EIyZHpt?= =?us-ascii?Q?slLyYGciqZQZOSoXjxpNzvBeV9IjePtXaLZFU4fBEl9wVCVoT8gYR7T75jap?= =?us-ascii?Q?8R9fCjX2wJIEDr7AgdQrxYpJfLOaqtZak93RQ+GbN6PkDibv4ugOyaAD5Dfy?= =?us-ascii?Q?4qaxZmKQySWy0SVEf1zqXJ7zEbk6u1svH9gMtcphU8O+LGcJLMTZP1xmxwoz?= =?us-ascii?Q?UhXZk7aPrZAMajKP4dRnJw5VeK/Wjdw9w8cV2APtkKwWG/fJRnjp9wPk2wLz?= =?us-ascii?Q?unz0iAhvubMFhpsJxGEXCrjcDiDpF6PV8RnQgWG0PdlP0sVPQ4p+JKW9dRZo?= =?us-ascii?Q?gQvUVdg8nopDCa+/Fn5+N0Cd31nC1ec4Welglfb6vH62+jkAWPaZzL2fS92r?= =?us-ascii?Q?hviqI0QEuubfDt/qn9OBhHKYzBL+gitDcVJw1oG9DJpLBD+oTDndYTIKkrpT?= =?us-ascii?Q?K3/KFE08NRNYj+RwBnZDPJlYHubFZIMg4TNAD07GaWtHdfe1gZxOUkLnv1Qv?= =?us-ascii?Q?IkVdHQ=3D=3D?= X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1750d266-8e50-4363-fb0b-08d9e581d62d X-MS-Exchange-CrossTenant-AuthSource: VI1PR03MB4208.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Feb 2022 12:53:25.7921 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: oEbPLjpdKAlWg8MHi2aRUHDzBYf6EoJ0tTIwFVkijb0YyuVSzUKtlaNx+ZynMFtxOmsz6MZ1AFmJ++j8d7EJ1mSOHlrgZgO1HymTyCtXELc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR03MB5407 X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Feb 2022 12:53:34 -0000 From: Faraz Shahbazker 2022-02-01 Faraz Shahbazker sim/common/ChangeLog: * sim-fpu.c (sim_fpu_op_nan): New. (sim_fpu_add): Factor out NaN operand handling with a call to sim_fpu_op_nan. (sim_fpu_sub, sim_fpu_mul, sim_fpu_div): Likewise. (sim_fpu_rem, sim_fpu_max, sim_fpu_min): Likewise. * sim-fpu.h (sim_fpu_op_nan): New declaration. --- sim/common/sim-fpu.c | 189 +++++++------------------------------------ sim/common/sim-fpu.h | 10 +++ 2 files changed, 41 insertions(+), 158 deletions(-) diff --git a/sim/common/sim-fpu.c b/sim/common/sim-fpu.c index 78592b1f790..4d16a392dc9 100644 --- a/sim/common/sim-fpu.c +++ b/sim/common/sim-fpu.c @@ -986,7 +986,24 @@ sim_fpu_round_64 (sim_fpu *f, return do_round (f, 1, round, denorm); } +/* NaN handling for binary operations. */ +INLINE_SIM_FPU (int) +sim_fpu_op_nan (sim_fpu *f, const sim_fpu *l, const sim_fpu *r) +{ + if (sim_fpu_is_snan (l) || sim_fpu_is_snan (r)) + { + *f = sim_fpu_is_snan (l) ? *l : *r; + f->class = sim_fpu_class_qnan; + return sim_fpu_status_invalid_snan; + } + ASSERT (sim_fpu_is_nan (l) || sim_fpu_is_nan (r)); + if (sim_fpu_is_qnan (l)) + *f = *l; + else /* if (sim_fpu_is_qnan (r)) */ + *f = *r; + return 0; +} /* Arithmetic ops */ @@ -995,28 +1012,8 @@ sim_fpu_add (sim_fpu *f, const sim_fpu *l, const sim_fpu *r) { - if (sim_fpu_is_snan (l)) - { - *f = *l; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_snan (r)) - { - *f = *r; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_qnan (l)) - { - *f = *l; - return 0; - } - if (sim_fpu_is_qnan (r)) - { - *f = *r; - return 0; - } + if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r)) + return sim_fpu_op_nan (f, l, r); if (sim_fpu_is_infinity (l)) { if (sim_fpu_is_infinity (r) @@ -1144,28 +1141,8 @@ sim_fpu_sub (sim_fpu *f, const sim_fpu *l, const sim_fpu *r) { - if (sim_fpu_is_snan (l)) - { - *f = *l; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_snan (r)) - { - *f = *r; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_qnan (l)) - { - *f = *l; - return 0; - } - if (sim_fpu_is_qnan (r)) - { - *f = *r; - return 0; - } + if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r)) + return sim_fpu_op_nan (f, l, r); if (sim_fpu_is_infinity (l)) { if (sim_fpu_is_infinity (r) @@ -1298,28 +1275,8 @@ sim_fpu_mul (sim_fpu *f, const sim_fpu *l, const sim_fpu *r) { - if (sim_fpu_is_snan (l)) - { - *f = *l; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_snan (r)) - { - *f = *r; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_qnan (l)) - { - *f = *l; - return 0; - } - if (sim_fpu_is_qnan (r)) - { - *f = *r; - return 0; - } + if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r)) + return sim_fpu_op_nan (f, l, r); if (sim_fpu_is_infinity (l)) { if (sim_fpu_is_zero (r)) @@ -1423,30 +1380,8 @@ sim_fpu_div (sim_fpu *f, const sim_fpu *l, const sim_fpu *r) { - if (sim_fpu_is_snan (l)) - { - *f = *l; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_snan (r)) - { - *f = *r; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_qnan (l)) - { - *f = *l; - f->class = sim_fpu_class_qnan; - return 0; - } - if (sim_fpu_is_qnan (r)) - { - *f = *r; - f->class = sim_fpu_class_qnan; - return 0; - } + if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r)) + return sim_fpu_op_nan (f, l, r); if (sim_fpu_is_infinity (l)) { if (sim_fpu_is_infinity (r)) @@ -1556,30 +1491,8 @@ sim_fpu_rem (sim_fpu *f, const sim_fpu *l, const sim_fpu *r) { - if (sim_fpu_is_snan (l)) - { - *f = *l; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_snan (r)) - { - *f = *r; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_qnan (l)) - { - *f = *l; - f->class = sim_fpu_class_qnan; - return 0; - } - if (sim_fpu_is_qnan (r)) - { - *f = *r; - f->class = sim_fpu_class_qnan; - return 0; - } + if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r)) + return sim_fpu_op_nan (f, l, r); if (sim_fpu_is_infinity (l)) { *f = sim_fpu_qnan; @@ -1639,28 +1552,8 @@ sim_fpu_max (sim_fpu *f, const sim_fpu *l, const sim_fpu *r) { - if (sim_fpu_is_snan (l)) - { - *f = *l; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_snan (r)) - { - *f = *r; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_qnan (l)) - { - *f = *l; - return 0; - } - if (sim_fpu_is_qnan (r)) - { - *f = *r; - return 0; - } + if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r)) + return sim_fpu_op_nan (f, l, r); if (sim_fpu_is_infinity (l)) { if (sim_fpu_is_infinity (r) @@ -1722,28 +1615,8 @@ sim_fpu_min (sim_fpu *f, const sim_fpu *l, const sim_fpu *r) { - if (sim_fpu_is_snan (l)) - { - *f = *l; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_snan (r)) - { - *f = *r; - f->class = sim_fpu_class_qnan; - return sim_fpu_status_invalid_snan; - } - if (sim_fpu_is_qnan (l)) - { - *f = *l; - return 0; - } - if (sim_fpu_is_qnan (r)) - { - *f = *r; - return 0; - } + if (sim_fpu_is_nan (l) || sim_fpu_is_nan (r)) + return sim_fpu_op_nan (f, l, r); if (sim_fpu_is_infinity (l)) { if (sim_fpu_is_infinity (r) diff --git a/sim/common/sim-fpu.h b/sim/common/sim-fpu.h index da67130d761..228d2c7e1d6 100644 --- a/sim/common/sim-fpu.h +++ b/sim/common/sim-fpu.h @@ -261,6 +261,16 @@ INLINE_SIM_FPU (int) sim_fpu_sqrt (sim_fpu *f, +/* NaN handling. + + Assuming that at least one of the inputs is NAN choose the correct + NAN result for the binary operation. */ + +INLINE_SIM_FPU (int) sim_fpu_op_nan (sim_fpu *f, + const sim_fpu *l, const sim_fpu *r); + + + /* Conversion of integer <-> floating point. */ INLINE_SIM_FPU (int) sim_fpu_i32to (sim_fpu *f, int32_t i, -- 2.17.1