From patchwork Tue Oct 24 14:29:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Platts X-Patchwork-Id: 13435167 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CEC7BC00A8F for ; Tue, 24 Oct 2023 17:49:45 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qvLWR-0001zC-96; Tue, 24 Oct 2023 13:48:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qvIWN-0008Q1-19 for qemu-devel@nongnu.org; Tue, 24 Oct 2023 10:36:39 -0400 Received: from mail-westus2azolkn19012036.outbound.protection.outlook.com ([52.103.10.36] helo=MW2PR02CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qvIWK-0002mv-SX for qemu-devel@nongnu.org; Tue, 24 Oct 2023 10:36:38 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hEDOnRYuK4vbrtF4+lcWHNXU3lMazYhwQLJ96oc/Krtkorf0J5v24hYsNt3zEYodWMvAYFLDJVvXUoMzVB+baTMsmn/yV4EV42ufOvjc39q3WTILxwCgkUApi84mTQ/pQyWOJeH1jA0VodZLyqP4civJaEfpJcCKs434xfzR0gLyYN3VAYyCyDDv6kZUr2LkobaG9wzuszD+4jq4PQkiqt8ePPSFUgigp0c+SGMKWfYczsSGL1Qf8a89r9rN8rpcXtd/t8rNJAWH5j/e0D2h/CZ1uRhncAcARtLmEqyQjciulgS+Y0ySG6SkRQU+wTGRAeJBaTVQd0n1ug1BABc6ww== 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=+wZ1gDLrzS7qPvJTW/StAVikTmWy5YjB5GDS3qDDgCw=; b=U7EGNfGCOGGwGTEfDnmLKGTKzW2QTjXMkhcrb88NrvXCF6JzPA6Hm1UDBsXoNjQKqlWzLQ5d9SKCLdu7gSBPiDFJP8VaH6HqQGFh341vryujMiNI6VV6Wc9oDLwFH78bi1GTO4V3L7UU8Q120fXGEYU47TPYo3r1AKsJMjxxJBqHWDt8xKjqyxROdIeOC2vTTWdqtz79QaBZQlKk/9whZ6PoCsAJ7P2MNP8StFK8YyUim9xRrgVqwZMjW0z2R7NeQap7mec6ip0zNYijEHe+Gqa3ztDD/Si+WMTKRsgXYyt+/yt5+4BciMGd3wwF5wmmLmwfDckYtLG++gVFpM4DMw== 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=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+wZ1gDLrzS7qPvJTW/StAVikTmWy5YjB5GDS3qDDgCw=; b=dki9/LW+zpuRQMN1zvsnSYucEpsqwecKkeIKAiAfrUIIacZECVgDFLPxCNRv6w2nfdo0DhYcJGbVfbeAYN4jEUccuj3sALkqIkH0INML5Rumgu1xJMBCOUEdleiIQ2M2L6kXzhX10yC1jwWA18ckeU8nWXVPQRvSunuF1xC/ActVvvPb9Z5xZlN1iD0nCQYQMowX90qZWXHI5os/1v9dbmN99i5SL+TjDasip0GleYtD+7FcljCeDXd9NS+NrZR3im1BPz6/Oz1Vm5NRXr4LqWEov0PRxFSnXUotx18fN+KDp2gL3mOKJgqZZmaqMbaV/rpAYi7ch4V57m2Hqqa3pQ== Received: from SN6PR05MB5837.namprd05.prod.outlook.com (2603:10b6:805:f4::20) by PH0PR05MB7768.namprd05.prod.outlook.com (2603:10b6:510:2b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6907.31; Tue, 24 Oct 2023 14:29:59 +0000 Received: from SN6PR05MB5837.namprd05.prod.outlook.com ([fe80::8173:b78d:ab2f:e010]) by SN6PR05MB5837.namprd05.prod.outlook.com ([fe80::8173:b78d:ab2f:e010%6]) with mapi id 15.20.6907.032; Tue, 24 Oct 2023 14:29:59 +0000 From: John Platts To: "qemu-devel@nongnu.org" Subject: [PATCH] target/ppc: Fix bugs in VSX_CVT_FP_TO_INT and VSX_CVT_FP_TO_INT2 macros Thread-Topic: [PATCH] target/ppc: Fix bugs in VSX_CVT_FP_TO_INT and VSX_CVT_FP_TO_INT2 macros Thread-Index: AQHaBoOQeT3DB0E5hkqJk36Bpmg0Lw== Date: Tue, 24 Oct 2023 14:29:59 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [xCG1V8sQrucBxljFkxKMey48AXhWr7mCQBSqPg+CCWvZrTOWyH0ktnXaxFFdCIQz] x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN6PR05MB5837:EE_|PH0PR05MB7768:EE_ x-ms-office365-filtering-correlation-id: b95a7bdf-1b51-480a-ce8c-08dbd49db3c7 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 9saliswdT06XLM3kwhc1jTAbS3PlXtfC9hTar6RvGcYQQGGIxQsLseLh/KCuMjPhYRPtXooMZSWhFPDujgsjkKQRPl39peayg/QGNsbBP6ZKsKn6UIxOZiNTEKq3tEFBNOzh72K64niHmEJnOca/dNoK3yK6liTsXchvtJeAg/hLdcjTRlgxMNSuNAG3xRZSx5cak0YT2hu8DxTiOz3tJy8jprIOCDIGkCFdetZS0EWZO2VAun6CUXBv1ckhvj20EmrBrSFwd9rtWDo9bu5BGygHZH9pP9ZfPajDwWWmQUZodwbehJt+VGMpqCIVbzRXiMLioI2ru3FkgpylmFCbJ6W5Z7+PFu4JrGYshz2JlfjE8m4/8exwf8smeybDyQj3P5j55qLHPRUBLuBPtl9YJvB8/YOK2Gf5U9PiCTKVnA7VBE4xev/dp1UUKsq65eY+wLG+/S3xi8xI80KNRDgRnobmgb2g2xbrDyOT26VegfLVhpotMM5Wm4AnUy1ZQwKp1eu71FcPdfLBa9NkGTjFUPDdYO4QgYt9AV0Vyzq++01x/WRuE7ZI1591R/0UdW+w5tUKvjqElwt/+11eSeKpiWB9gArbaiyRFtfUUX/tNrg= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?b8MFvP5WJPNibqAT5IAGiRN?= =?iso-8859-1?q?olg2YKCHPeGagmVXXt67lmi+bCmrH4VYpRgL8eP9Rb5tw4gtUJG3IAIRtNaG?= =?iso-8859-1?q?hhUvoMZX66dvuiS/6GrxgP6jTOFV+Bxx/VzNZ0HAz4fIK5k6pTE4h+9iKNl7?= =?iso-8859-1?q?o1nm+ec7jk5peBQAsL7Wpp6We2HGWaCKodySDgb1JyDEToFYj71c/WbsQih3?= =?iso-8859-1?q?bc1yn8R6SOe2xiOOxeuQC3RDIvYdAbSefGZII8mBSpR/R+WYhQ69ixgSBdla?= =?iso-8859-1?q?+ZY0+kzfdu5hD7VCzHYL4bfeb6tloxFifUUIyRwjul9XaWnLGf3Clds2v6xp?= =?iso-8859-1?q?7DLjQ4XF4zVsdqQcm3OwkYJcJJmD5Lujw8TQ0u73C77Onjf9T0oOhDysrsW/?= =?iso-8859-1?q?DUu7OsmRnTDyZVxlTAJ09QB52wc7dVr5sQeSKAFOYxfzWiArnHhsM0vYY1mP?= =?iso-8859-1?q?ZGA6vGVxEjTHjTLXasd00e7nWp1EslCdccXDSIGaAGj+1pz0qb3p6Qb/TWdg?= =?iso-8859-1?q?+czOPiKGRE6Znqv5a4A4LuH5sfSNIeSyrHpt3zYTjV/5/f5lEBpXJfohcd9P?= =?iso-8859-1?q?yi2MRIWLuqMmZyuQy3pLgmJeLk+zNeLL/4KfZg6t+Y5Wrsi86As2KCYaJlxs?= =?iso-8859-1?q?OXHSE0000gWBsKs5Cm3GGEq/xRCTjKq3x4kxK/quYqZMzIQVL7bm7x9xwnTb?= =?iso-8859-1?q?kRujRlU8TFal8hMydzYTV0f1YIqo0j13n0bRPEZOU4+1IXiNx4Dx/ea6Kyyt?= =?iso-8859-1?q?t+p/Olg8L87CcWHLKv5VjvH1v2S/ui0oF7/a2Kce1++NGciOFji2X4bXMdic?= =?iso-8859-1?q?hPIP5CfgVYwea/A3nlhchDbJwko5XTQWvWsFity+pCyLLqEiwXM9sbvkNIAd?= =?iso-8859-1?q?ZKhqRcmBKhenLV+1EeVUx8Ackm2GbkCPjD7I03I28GdMrHz3+eYhbbDBV3qG?= =?iso-8859-1?q?6hT1bkaOo+xdurmXqMj2W1mdAZzqvCEhdC6W+xMMMUDFF5gC8VwOzxzojTML?= =?iso-8859-1?q?UxCL5JRBFmuOjiSmsagwWzfmMxtXPDlhFQCG1xJ1qYiJXWiMbBRyiy1yI+aO?= =?iso-8859-1?q?uUuUq/GRRkRYHpVIr5j9O0mTV2qmslSlEHdPY3sFfOuagWrksyhc4qjUyY9k?= =?iso-8859-1?q?eyH8USifzpApDFtJBVJI1CZ65qgk9rS734EPiR2mkw4g9yTAEo7lgoeVeuW4?= =?iso-8859-1?q?seuZlqZjcjHVW2iZt+nKUTQpkA0ZoTHy8zase3+Y9YpHFmcifzoNnycSuT0k?= =?iso-8859-1?q?KuqMiFhzUe9iFSXjZC6Z40RsJXsaawfp9/mbXNY9TDC7eFDDP1Hxrhpv7Hd7?= =?iso-8859-1?q?ml9Rl0qHGMvsDdMTkhw=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-4823-7-msonline-outlook-84f76.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR05MB5837.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: b95a7bdf-1b51-480a-ce8c-08dbd49db3c7 X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Oct 2023 14:29:59.3869 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR05MB7768 Received-SPF: pass client-ip=52.103.10.36; envelope-from=john_platts@hotmail.com; helo=MW2PR02CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 24 Oct 2023 13:48:29 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The patch below fixes a bug in the VSX_CVT_FP_TO_INT and VSX_CVT_FP_TO_INT2 macros in target/ppc/fpu_helper.c where a non-NaN value is incorrectly converted to 0, 0x80000000, or 0x8000000000000000 if a preceding converted floating-point value was a NaN value. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1941 Signed-off-by: John Platts diff --git a/target/ppc/fpu_helper.c b/target/ppc/fpu_helper.c index 03150a0f10..d6c8583416 100644 --- a/target/ppc/fpu_helper.c +++ b/target/ppc/fpu_helper.c @@ -2880,19 +2880,21 @@ uint64_t helper_XSCVSPDPN(uint64_t xb) #define VSX_CVT_FP_TO_INT(op, nels, stp, ttp, sfld, tfld, sfi, rnan) \ void helper_##op(CPUPPCState *env, ppc_vsr_t *xt, ppc_vsr_t *xb) \ { \ + int all_flags = 0; \ ppc_vsr_t t = { }; \ int i, flags; \ \ - helper_reset_fpstatus(env); \ - \ for (i = 0; i < nels; i++) { \ + helper_reset_fpstatus(env); \ t.tfld = stp##_to_##ttp##_round_to_zero(xb->sfld, &env->fp_status); \ flags = env->fp_status.float_exception_flags; \ + all_flags |= flags; \ if (unlikely(flags & float_flag_invalid)) { \ t.tfld = float_invalid_cvt(env, flags, t.tfld, rnan, 0, GETPC());\ } \ } \ \ + env->fp_status.float_exception_flags = all_flags; \ *xt = t; \ do_float_check_status(env, sfi, GETPC()); \ } @@ -2945,15 +2947,16 @@ VSX_CVT_FP_TO_INT128(XSCVQPSQZ, int128, 0x8000000000000000ULL); #define VSX_CVT_FP_TO_INT2(op, nels, stp, ttp, sfi, rnan) \ void helper_##op(CPUPPCState *env, ppc_vsr_t *xt, ppc_vsr_t *xb) \ { \ + int all_flags = 0; \ ppc_vsr_t t = { }; \ int i, flags; \ \ - helper_reset_fpstatus(env); \ - \ for (i = 0; i < nels; i++) { \ + helper_reset_fpstatus(env); \ t.VsrW(2 * i) = stp##_to_##ttp##_round_to_zero(xb->VsrD(i), \ &env->fp_status); \ flags = env->fp_status.float_exception_flags; \ + all_flags |= flags; \ if (unlikely(flags & float_flag_invalid)) { \ t.VsrW(2 * i) = float_invalid_cvt(env, flags, t.VsrW(2 * i), \ rnan, 0, GETPC()); \ @@ -2961,6 +2964,7 @@ void helper_##op(CPUPPCState *env, ppc_vsr_t *xt, ppc_vsr_t *xb) \ t.VsrW(2 * i + 1) = t.VsrW(2 * i); \ } \ \ + env->fp_status.float_exception_flags = all_flags; \ *xt = t; \ do_float_check_status(env, sfi, GETPC()); \ }