From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2122.outbound.protection.outlook.com [40.107.223.122]) by sourceware.org (Postfix) with ESMTPS id 04C7F3858022 for ; Mon, 24 May 2021 17:58:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 04C7F3858022 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=wavecomp.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=fshahbazker@wavecomp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K3A7NoebmDnC9LYR/nSS8HTdKhGfwKqr2VRFHFPkLJTKunBUcfYOwP/VudszQqLRso8OT9QabMOTjMlerbdt3rXdItxnGA8NLBod30LdI/kPmk53AxEZPafwRoy7LzdnKh4LTnclZBAdshvIxY/VshsLqL/fbgtQuHjsvizXA1v3RStJmCiSKLqZTvgaasXIkfkUuYDXPekSi4YrzcYQKB7TmT/eWChoDCnc81LlaXT5Rlw7gDOR11/aOivNXru5FuBStO+jZksFTWRoJBw9FYqWAzshdR/zpVFpxoZk8Cy8rkJ6SGa93CB6Q1xVcLnUW9KnbZS3zPcNGajeokE9sQ== 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=jAp8eF7EW7LEZuaS0IhQ8qu0i9Dt+YCzIF+jsr2bMIU=; b=BfjIcX6+MmMKxvpB/UCrJIaI29jAl/ckBGuXEBEC+zWfVBfq+pBPhdBXrQeL9L08O12d9B5PM2qSogy9pbKbs7PHyshssYnV2V7C5lW6Sl1khLY8VrIJ+T47e+WatZgMBOV5vqvbZ5W+RdlQTOw+AKItH/FqQQe2cwIDlDWZquyNIG6CFRZKT+0jaGma1mJnG2hs26nVbB9GtQNpNpHy66w4rLUFyBwbVsY6jnBsZALcsrUnvVPpiDSrnDNLCdp4HWse8wt3lwMG8jNPp7f6bN3dPm6zZP44R+4diT+n6dprLOVXsyTXd1JJYkC1GrfsiL1hwEJcmznsN9i/te3AVw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wavecomp.com; dmarc=pass action=none header.from=wavecomp.com; dkim=pass header.d=wavecomp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wavecomp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jAp8eF7EW7LEZuaS0IhQ8qu0i9Dt+YCzIF+jsr2bMIU=; b=dyo05iR3YhfLNrIpVeDicuN6BjWA7xrV4JRofegBtrmglkCKPW0af5CBbRMmYHShLL78wjVxlqY5hxy9/fr44spBkPIirPWyDhkHajoE6zKT7dX9iR5OoHpna7UcRWj34P4Eyv2Su7ZwCEqP/QT7Z47IHFCdga2nE6Y1MGpG/LM= Authentication-Results: sourceware.org; dkim=none (message not signed) header.d=none;sourceware.org; dmarc=none action=none header.from=wavecomp.com; Received: from MW3PR22MB2299.namprd22.prod.outlook.com (2603:10b6:303:47::10) by MWHPR2201MB1343.namprd22.prod.outlook.com (2603:10b6:301:1c::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.26; Mon, 24 May 2021 17:58:17 +0000 Received: from MW3PR22MB2299.namprd22.prod.outlook.com ([fe80::e098:7822:150b:bb5b]) by MW3PR22MB2299.namprd22.prod.outlook.com ([fe80::e098:7822:150b:bb5b%7]) with mapi id 15.20.4150.027; Mon, 24 May 2021 17:58:17 +0000 From: Faraz Shahbazker To: gdb-patches@sourceware.org, Mike Frysinger Cc: Chao-ying Fu , Faraz Shahbazker Subject: [PATCH v2 1/5] sim: Allow toggling of quiet NaN-bit semantics Date: Mon, 24 May 2021 23:27:58 +0530 Message-Id: <20210524175802.875687-2-fshahbazker@wavecomp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210524175802.875687-1-fshahbazker@wavecomp.com> References: <20210524175802.875687-1-fshahbazker@wavecomp.com> Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable X-Originating-IP: [175.100.139.57] X-ClientProxiedBy: SJ0PR05CA0116.namprd05.prod.outlook.com (2603:10b6:a03:334::31) To MW3PR22MB2299.namprd22.prod.outlook.com (2603:10b6:303:47::10) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from frsxps.mipstec.com (175.100.139.57) by SJ0PR05CA0116.namprd05.prod.outlook.com (2603:10b6:a03:334::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.12 via Frontend Transport; Mon, 24 May 2021 17:58:15 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bb0e0c5e-4649-4225-359c-08d91edd8231 X-MS-TrafficTypeDiagnostic: MWHPR2201MB1343: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Zf7wgLWslS4HltjmS/ZQ8wILC7VusATTv3XXoP2l35i69ERxH3cBU6dKrUTI9Ci7+AYePahryO4GkfGpE9dQEMcJfHDzDS/AVVdia7wTI3/tN6MFr/ajgrURaDvkzRIdcRGbaIqqZc7eFGECXk251eaNiHa1I9ZtL7Mt3bmLULoUa9IgPR0onyOgfsaM3CoiY3wK8IgVVcb2094rO9KwzuQZB9745PUVd5iL+E3ltSqtPjDXpYBWwiLIqEK8s6wudhBGi6nUlq2+nrWtZyQTx8DXahuWTsNuQk5GExcZ+T9WjTxZiDgTvaLrDlUe0mw5fNJj6QUnj5tIi6IwAaK7n0ULGhDDFwrbGLT1Cd0b8i9TwrKbHnvoM8VMzMB7aiOkoT5olq2ukJGNbAfOnYnl/EYWV6KKw5bsXcvPhrQSSt9llfWfvYkz4z34Ck5mxyX64jsrQBe0GQE78YoS7vpuoUwUV0jy4JnKcowi83mwZBQ5+CwlQIGjyibABM1zTyHwH7JmdiwbEtEZeELZrEPdMHy6fX9d+guIZrCpYArYf+ySVftglwfTkCKNyjzqjWmXur3YsG64vrdIS+U1IBRMmHURfL3pf2VbN/tySJ1F1q10/AVuNGjdlsiXx7lHjuRakBtpQKmJTYqMoYtPsSvBO24Vh9/8T6nkTze0vKRb7LQtocYW9thO2+W70RQt+i3nEbYn2T26zT1hX3uNkEqG2K0DaNTJg4qBcAWiS1TK1jqw+2IBVdHfi5Ub16KTdyBRicXfTwrqV9rMedxuRmsmJg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW3PR22MB2299.namprd22.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(396003)(39830400003)(136003)(346002)(376002)(478600001)(26005)(6666004)(107886003)(6512007)(4326008)(6506007)(16526019)(2906002)(6486002)(52116002)(38350700002)(6916009)(54906003)(316002)(956004)(8936002)(8676002)(86362001)(186003)(83380400001)(1076003)(66556008)(38100700002)(66946007)(66476007)(2616005)(5660300002)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?I9rdd/2CwIxl9mKo0z//+p/chHQWpuHF6mG8dlO35PRrb4yP2z7okcYjgSzP?= =?us-ascii?Q?jeIbS6RzJplUhSw0FH1e5/jo2zWCawsGux8xQdzgFsSa5/u9Dh4ybri7ynaa?= =?us-ascii?Q?gz9+d5SoD/bZhaH8RN/BIzm5XDEBHsMhjaW2he3u9KviGOScS+AAUSncrP6D?= =?us-ascii?Q?Z5ju3/QU3uxRmfIAvsxv5PAizmu8PkAZOA6ntuSRDkJtPZv1ZGsZLcTtjS+A?= =?us-ascii?Q?SUwKXSeBEwsaKe1Ny5jYlg2Cc34h1eT2qlJd23WTpcw2ECyFwkIm6hKSsx9g?= =?us-ascii?Q?mdcMeumCJTeh0AUv5ZxCv+ko4M06Won3uq3NRVIgszW6whrcXDiAbhzkK+Z2?= =?us-ascii?Q?zXy20qXlLRMbwQ3l7Wc2SvBTEoMrTdsaj8JdxHO7UGT5MxjXhG2iicjdAu7b?= =?us-ascii?Q?Sl3+uB4pQmu5zoefyrEoiYLEW1aWOD0iY0Zc+oiGI/Bb5TGtp1yeqPxijlQt?= =?us-ascii?Q?nvJBxKJBkqBWf8gvE8fVvvNCagKxTo1VCIhnvzOSLWjxIh8M0BEWoEB9SKjF?= =?us-ascii?Q?j9Topy68r66WG2/3fAOs4yhEwB1HzM6NUIdADJMNxFv5QzeUc/xWN3zqVVLY?= =?us-ascii?Q?Zo08AOotXAf6QwMYLfRnlgTKN9VUvZLCRRCSNDd1gNGXFAm7Ux47W6DzTHMI?= =?us-ascii?Q?4riCdftR+XEbruB3gMtQ7xG4pFp5/KUuiR2dYnpphl6PdDZ045NQwUdriobV?= =?us-ascii?Q?BjpO0CrlL+Bo+0v+ePpBm8E8vY92dMcgKgNJ6ofVcDztiMC6DTvf6V1ZWD2z?= =?us-ascii?Q?RTXGOcUKQPdCJYJPPDs5QRdPkWGrVrCGXFR7EgDSCh1Yy6PqouKv5YI5IbnY?= =?us-ascii?Q?XLzz9rSOTi4HUKxSWb/gFUydK8nPVIp9cT+g3Y59i7kYNlGlgkNSbTYcbGWW?= =?us-ascii?Q?AsAvZbAx/rhcF62SFi/CKcKCdzNYgdzJthh7/9lo/UhdjGJOVb71/GkUyKUJ?= =?us-ascii?Q?cQ/Q16g77R7ctGDOJE9fDEdO1Kr7s+1Qd6wBH3lABp7p2F8lmKqUonIGW+6U?= =?us-ascii?Q?tcly+0ImpoHsLPkhtzCZkYYgu/y2G7TscOvATZ1tpqSM0nc2nLN9sTzhWNk1?= =?us-ascii?Q?1k0GUbCe1LZTZ1baBwi896C2pdGxz32ov4trHsP4qcM82X/lq2PwK/RgU+E2?= =?us-ascii?Q?Z5Tmow7n0SraGeE23OMoMXRJp8b80iomTEJoqNjZcGOK74kAwrG62zkhlcmt?= =?us-ascii?Q?JuqpPPbRPkUerNKYGX2UJ0UCFJx2ZUXoN8nk6Y0C4nmZ/yM9W1HKNGP4wNj2?= =?us-ascii?Q?4BvyaBsuonqti3g5KU8acwVao4Hq5NMFk5V9tSMnq1KcJDk/hvKr1lKrNeZC?= =?us-ascii?Q?kPPvzcem8oxdUrWS7cWwi8VW?= X-OriginatorOrg: wavecomp.com X-MS-Exchange-CrossTenant-Network-Message-Id: bb0e0c5e-4649-4225-359c-08d91edd8231 X-MS-Exchange-CrossTenant-AuthSource: MW3PR22MB2299.namprd22.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2021 17:58:17.3859 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 463607d3-1db3-40a0-8a29-970c56230104 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MqoiKX1h7l25E9idIe21ngouFgEGo09LyxpUjwB9fT0a7rJbz2Ntxkw0RlWc48uBLw3NI6rX2MQ+/krhTSyiU6/O87MtuIlWT6SzIgzkf/s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR2201MB1343 X-Spam-Status: No, score=-11.7 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_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Mon, 24 May 2021 17:58:23 -0000 IEEE754-1985 specifies the top bit of the mantissa as an indicator of signalling vs. quiet NaN, but does not define the precise semantics. Most architectures treat this bit as indicating quiet NaN, but legacy (pre-R6) MIPS goes the other way and treats it as signalling NaN. This used to be controlled by a macro that was only defined for MIPS. This patch replaces the macro with a variable to track the current semantics of the NaN bit and allows differentiation between older (pre-R6) and and newer MIPS cores. 2021-05-24 Faraz Shahbazker sim/common/ChangeLog: * sim-fpu.c (sim_fpu_quiet_nan_inverted): New. (pack_fpu, unpack_fpu): Allow reversal of quiet NaN semantics. * sim-fpu.h (sim_fpu_quiet_nan_inverted): New extern. sim/mips/ChangeLog: * cp1.h (fcsr_NAN2008_mask, fcsr_NAN2008_shift): New. * mips.igen (check_fpu): Select default quiet NaN mode for legacy MIPS. * sim-main.h (SIM_QUIET_NAN_NEGATED): Remove. --- Notes: Changes from v1: Use bool/true/false for sim_fpu_quiet_nan_inverted flag. White space changes sim/common/sim-fpu.c | 35 ++++++++++++++++++++--------------- sim/common/sim-fpu.h | 2 ++ sim/mips/cp1.h | 4 ++++ sim/mips/mips.igen | 3 +++ sim/mips/sim-main.h | 3 --- 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/sim/common/sim-fpu.c b/sim/common/sim-fpu.c index fe8ecf8a3ce..4edd651fd52 100644 --- a/sim/common/sim-fpu.c +++ b/sim/common/sim-fpu.c @@ -198,11 +198,10 @@ pack_fpu (const sim_fpu *src, /* Force fraction to correct class. */ fraction =3D src->fraction; fraction >>=3D NR_GUARDS; -#ifdef SIM_QUIET_NAN_NEGATED - fraction |=3D QUIET_NAN - 1; -#else - fraction |=3D QUIET_NAN; -#endif + if (sim_fpu_quiet_nan_inverted) + fraction |=3D QUIET_NAN - 1; + else + fraction |=3D QUIET_NAN; break; case sim_fpu_class_snan: sign =3D src->sign; @@ -210,11 +209,10 @@ pack_fpu (const sim_fpu *src, /* Force fraction to correct class. */ fraction =3D src->fraction; fraction >>=3D NR_GUARDS; -#ifdef SIM_QUIET_NAN_NEGATED - fraction |=3D QUIET_NAN; -#else - fraction &=3D ~QUIET_NAN; -#endif + if (sim_fpu_quiet_nan_inverted) + fraction |=3D QUIET_NAN; + else + fraction &=3D ~QUIET_NAN; break; case sim_fpu_class_infinity: sign =3D src->sign; @@ -372,11 +370,10 @@ unpack_fpu (sim_fpu *dst, unsigned64 packed, int is_d= ouble) /* Non zero fraction, means NaN. */ dst->sign =3D sign; dst->fraction =3D (fraction << NR_GUARDS); -#ifdef SIM_QUIET_NAN_NEGATED - qnan =3D (fraction & QUIET_NAN) =3D=3D 0; -#else - qnan =3D fraction >=3D QUIET_NAN; -#endif + if (sim_fpu_quiet_nan_inverted) + qnan =3D (fraction & QUIET_NAN) =3D=3D 0; + else + qnan =3D fraction >=3D QUIET_NAN; if (qnan) dst->class =3D sim_fpu_class_qnan; else @@ -2530,6 +2527,14 @@ const sim_fpu sim_fpu_max32 =3D { const sim_fpu sim_fpu_max64 =3D { sim_fpu_class_number, 0, LSMASK64 (NR_FRAC_GUARD, NR_GUARDS64), NORMAL_E= XPMAX64 }; + +/* IEEE 754-1985 specifies the top bit of the mantissa as an indicator + of signalling vs. quiet NaN, but does not specify the semantics. + Most architectures treat this bit as quiet NaN, but legacy (pre-R6) + MIPS goes the other way and treats it as signalling. This variable + tracks the current semantics of the NaN bit and allows differentiation + between pre-R6 and R6 MIPS cores. */ +bool sim_fpu_quiet_nan_inverted =3D false; #endif =20 =20 diff --git a/sim/common/sim-fpu.h b/sim/common/sim-fpu.h index 89e6de7e35f..51bb7d2be92 100644 --- a/sim/common/sim-fpu.h +++ b/sim/common/sim-fpu.h @@ -375,7 +375,9 @@ enum { INLINE_SIM_FPU (int) sim_fpu_is (const sim_fpu *l); INLINE_SIM_FPU (int) sim_fpu_cmp (const sim_fpu *l, const sim_fpu *r); =20 +/* Toggle quiet NaN semantics. */ =20 +extern bool sim_fpu_quiet_nan_inverted; =20 /* A number of useful constants. */ =20 diff --git a/sim/mips/cp1.h b/sim/mips/cp1.h index 3a78bf4c6b3..0babdc28eca 100644 --- a/sim/mips/cp1.h +++ b/sim/mips/cp1.h @@ -40,6 +40,10 @@ along with this program. If not, see . */ #define fcsr_RM_mask (0x00000003) #define fcsr_RM_shift (0) =20 +/* FCSR bits for IEEE754-2008 compliance. */ +#define fcsr_NAN2008_mask (0x00040000) +#define fcsr_NAN2008_shift (18) + #define fenr_FS (0x00000004) =20 /* Macros to update and retrieve the FCSR condition-code bits. This diff --git a/sim/mips/mips.igen b/sim/mips/mips.igen index 522cad6fe45..160ca2a8c45 100644 --- a/sim/mips/mips.igen +++ b/sim/mips/mips.igen @@ -5050,6 +5050,9 @@ { if (! COP_Usable (1)) SignalExceptionCoProcessorUnusable (1); + + FCSR &=3D ~fcsr_NAN2008_mask; + sim_fpu_quiet_nan_inverted =3D true; } =20 =20 diff --git a/sim/mips/sim-main.h b/sim/mips/sim-main.h index 8c9abfa0b0b..e8531405ebc 100644 --- a/sim/mips/sim-main.h +++ b/sim/mips/sim-main.h @@ -20,9 +20,6 @@ along with this program. If not, see . */ #ifndef SIM_MAIN_H #define SIM_MAIN_H =20 -/* MIPS uses an unusual format for floating point quiet NaNs. */ -#define SIM_QUIET_NAN_NEGATED - #define SIM_CORE_SIGNAL(SD,CPU,CIA,MAP,NR_BYTES,ADDR,TRANSFER,ERROR) \ mips_core_signal ((SD), (CPU), (CIA), (MAP), (NR_BYTES), (ADDR), (TRANSFER= ), (ERROR)) =20 --=20 2.25.1