From patchwork Sun Jan 1 14:43:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Cave-Ayland X-Patchwork-Id: 1720588 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (4096-bit key; unprotected) header.d=ilande.co.uk header.i=@ilande.co.uk header.a=rsa-sha256 header.s=20220518 header.b=0bBXrQ+E; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4NlMG93Vwtz23df for ; Mon, 2 Jan 2023 01:44:31 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pBzZJ-0005al-CP; Sun, 01 Jan 2023 09:44:09 -0500 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 1pBzZ5-0005YG-Kv for qemu-devel@nongnu.org; Sun, 01 Jan 2023 09:44:00 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pBzZ3-0003lw-Jg for qemu-devel@nongnu.org; Sun, 01 Jan 2023 09:43:54 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=vK1aAymN+9LBkyrSrnEUCW1q81jdd0tJaq7LKYLCQ4Q=; b=0bBXrQ+EVC5PeVoMxRAPLwtfk/ NUXkrt6AmGlSOJHfFtXQTPlPNLuGreVBe0+SxjLyeBE//FLHhP7RAOGVbg5KoKvZhqxUOGQnFKDO4 8dlRgs1s8fbsqf/M9XcCY6TVqquxuzcvwmv+XeDaAMGWmtwaMhYe34T9R4G7844LGhSVYLofxWhb/ 5M+xTXN/qG80dgr+u9RG5C1v32t2ivU4zXw4i+CAoddkjUSNSOcQBY33DgMNVWAl4FoFwHgBdYBOe TIxHsEgRgK1Ba9q3R4V2T1d04RUMJ782nvMQdaojn2cbb6PP6mkuNNpk2hL8sMBxQRYMD3oDN0Tuc Ea1Y2qbyNhYVe92FsBtpxCJKp5bOCsYNrLTtX5n75fLqMnXoRd+Ue8I69vRm4uPqJyMSkgP0D8jxn 4ALWEJzPG7zsKKlUr9lKZB5OJMVw5nTtHErQhFkKrBnuQ6nH0jwvIixSwB3E2FmBqUstMLyNDZSBj z2vWWvmGRAInXebHK23tBcCdVYqxd922tpgOdoHz+4rtTZJIdiwHnsqfmeYneY1ErGTuvbk6vw4mA 4nwZyVX1I2zZebuCGFPYUXixHLpBD1y8G0vhlarPS1CHOEcaK/mYWhaLs2bEaWFSc6L8VNjZ4b3XU xY84EzgUBfwXT8yyXLZ2pwZQV7fIpsGUUOUuOYyaI=; Received: from [2a00:23c4:8baa:1d00:e655:fde:753f:696a] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pBzYf-0001W3-5X; Sun, 01 Jan 2023 14:43:33 +0000 From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Sun, 1 Jan 2023 14:43:35 +0000 Message-Id: <20230101144339.60307-2-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230101144339.60307-1-mark.cave-ayland@ilande.co.uk> References: <20230101144339.60307-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a00:23c4:8baa:1d00:e655:fde:753f:696a X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 1/4] target/m68k: pass quotient directly into make_quotient() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- target/m68k/fpu_helper.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/target/m68k/fpu_helper.c b/target/m68k/fpu_helper.c index fdc4937e29..0932c464fd 100644 --- a/target/m68k/fpu_helper.c +++ b/target/m68k/fpu_helper.c @@ -515,16 +515,10 @@ uint32_t HELPER(fmovemd_ld_postinc)(CPUM68KState *env, uint32_t addr, return fmovem_postinc(env, addr, mask, cpu_ld_float64_ra); } -static void make_quotient(CPUM68KState *env, floatx80 val) +static void make_quotient(CPUM68KState *env, int32_t quotient) { - int32_t quotient; int sign; - if (floatx80_is_any_nan(val)) { - return; - } - - quotient = floatx80_to_int32(val, &env->fp_status); sign = quotient < 0; if (sign) { quotient = -quotient; @@ -538,14 +532,22 @@ void HELPER(fmod)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1) { res->d = floatx80_mod(val1->d, val0->d, &env->fp_status); - make_quotient(env, res->d); + if (floatx80_is_any_nan(res->d)) { + return; + } + + make_quotient(env, floatx80_to_int32(res->d, &env->fp_status)); } void HELPER(frem)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1) { res->d = floatx80_rem(val1->d, val0->d, &env->fp_status); - make_quotient(env, res->d); + if (floatx80_is_any_nan(res->d)) { + return; + } + + make_quotient(env, floatx80_to_int32(res->d, &env->fp_status)); } void HELPER(fgetexp)(CPUM68KState *env, FPReg *res, FPReg *val) From patchwork Sun Jan 1 14:43:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Cave-Ayland X-Patchwork-Id: 1720590 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (4096-bit key; unprotected) header.d=ilande.co.uk header.i=@ilande.co.uk header.a=rsa-sha256 header.s=20220518 header.b=xtFxf5EL; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4NlMGl25mlz23df for ; Mon, 2 Jan 2023 01:45:03 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pBzZK-0005at-Im; Sun, 01 Jan 2023 09:44:10 -0500 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 1pBzZ9-0005YU-7g for qemu-devel@nongnu.org; Sun, 01 Jan 2023 09:44:02 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pBzZ6-0003mv-Sp for qemu-devel@nongnu.org; Sun, 01 Jan 2023 09:43:58 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=zSEuUxxH1qQyLUFuP2gnwCWsAUW/+hcdBsLLkJ/exF8=; b=xtFxf5ELCgGO+Dm1qO+FJg9aPg zQxa+8wkB4O+2bRvKJY0a1Yk+dIB1AueRXP8C7kEIcqlmzODw/0WAr+Iw5hee1Py5OAs9S21pkfDt NI5GUDm/ahgbaToqbCx9DXAFVGoH72K/lua3Ewksrjtb39NTw6TnHnz6jHv5UvpEwmCZrXjC5w4dk ODYoaGHqn56UM7C9QOEt1SVHFGFXBvByLppBd7GYpGaF9/84qTunjERs3vO8hjSm11aZ7/Za1lJe9 NaTGMZGTRj1rjgEdTCpY24KpQQYzrfWl0WIUUewQS5K55BHMjGq8YwavyIekfsUwyk9fM8dkdJSBs eV/1vgsG5UQKuiBPOLDNoeyGmBf5c+gLrQPf2jjPvhifKQXEfcJHFrw7y1n+XOam+VprD4Rx51UTw Sz4xAOPpCKg5hHImqD+LRdcz2324JUX4zz7OYLGFUpUz1Ml8vzFiJrl4KxX1JGuOFSmpBvR+BQu0b 1sw5lHIbCpNSKOSAj7yEKaBvr1jQvukje2r8omn59hBb6gpnMTHjFEHjB0R+epRXnlCHttQ1nkOqc R+tYfpHKe28LTWf7YSgidGVfi1nMNrqrEPby+falc0tjgDIDCDdbuqRRfb8v/8A+BlcfObWSYS93n VKdVVcwRQnUGKq/SpCUkASey7/XU2NY3qrnWtDXMU=; Received: from [2a00:23c4:8baa:1d00:e655:fde:753f:696a] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pBzYj-0001W3-9s; Sun, 01 Jan 2023 14:43:37 +0000 From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Sun, 1 Jan 2023 14:43:36 +0000 Message-Id: <20230101144339.60307-3-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230101144339.60307-1-mark.cave-ayland@ilande.co.uk> References: <20230101144339.60307-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a00:23c4:8baa:1d00:e655:fde:753f:696a X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 2/4] target/m68k: pass sign directly into make_quotient() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This enables the quotient parameter to be changed from int32_t to uint32_t and also allows the extra sign logic in make_quotient() to be removed. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- target/m68k/fpu_helper.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/target/m68k/fpu_helper.c b/target/m68k/fpu_helper.c index 0932c464fd..ae839785fa 100644 --- a/target/m68k/fpu_helper.c +++ b/target/m68k/fpu_helper.c @@ -515,15 +515,8 @@ uint32_t HELPER(fmovemd_ld_postinc)(CPUM68KState *env, uint32_t addr, return fmovem_postinc(env, addr, mask, cpu_ld_float64_ra); } -static void make_quotient(CPUM68KState *env, int32_t quotient) +static void make_quotient(CPUM68KState *env, int sign, uint32_t quotient) { - int sign; - - sign = quotient < 0; - if (sign) { - quotient = -quotient; - } - quotient = (sign << 7) | (quotient & 0x7f); env->fpsr = (env->fpsr & ~FPSR_QT_MASK) | (quotient << FPSR_QT_SHIFT); } @@ -536,7 +529,8 @@ void HELPER(fmod)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1) return; } - make_quotient(env, floatx80_to_int32(res->d, &env->fp_status)); + make_quotient(env, extractFloatx80Sign(res->d), + floatx80_to_int32(res->d, &env->fp_status)); } void HELPER(frem)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1) @@ -547,7 +541,8 @@ void HELPER(frem)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1) return; } - make_quotient(env, floatx80_to_int32(res->d, &env->fp_status)); + make_quotient(env, extractFloatx80Sign(res->d), + floatx80_to_int32(res->d, &env->fp_status)); } void HELPER(fgetexp)(CPUM68KState *env, FPReg *res, FPReg *val) From patchwork Sun Jan 1 14:43:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Cave-Ayland X-Patchwork-Id: 1720591 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (4096-bit key; unprotected) header.d=ilande.co.uk header.i=@ilande.co.uk header.a=rsa-sha256 header.s=20220518 header.b=cHHsjZ41; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4NlMGv5bgQz23db for ; Mon, 2 Jan 2023 01:45:11 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pBzZL-0005b6-D0; Sun, 01 Jan 2023 09:44:11 -0500 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 1pBzZC-0005Yu-MH for qemu-devel@nongnu.org; Sun, 01 Jan 2023 09:44:02 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pBzZB-0003nk-5o for qemu-devel@nongnu.org; Sun, 01 Jan 2023 09:44:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=nqBx6DlYZmEpLa1SeDYg29MssZayZDw/n2W4dexqTSY=; b=cHHsjZ418c0afiTe7l1n+y8BSd Z9PHrv0XeqjJbNPs80E4tRfBk3QiHt0KwqAL9oWj6BRs7qiljUoj+/e7k4MZXM+ngzj/7dGXRPMOP GaOCYBdZVxVljynJkNS0RztF/9hozGudYJ1I6dm9m3cOUB9RulJ6r5a4GQTgInKbYmM7hJFAJwEOn 3AIxB/40uNbhA5CIqUK4/aS1cNfFqGfJu9pIPP+hGiiG2iE0mS3TurOBx60jL6KoD9kwjbF/bD5zU ZHIX9nYTNXN0rz4KmytuWW4Y7lzOBb85w8yXgbZMSDSFqYQs3f1y9SVEEWo8a30inyxWpMtaJZNqo 4nN9XIiQqRDYvFfazp+DF19hExEQC4SrQ9F9D+f+gjNE1eJxYwVA0Ign24mc/zA7YyY6QifXCXyYh cvCVyBbE+0l96tnXZKLcicq/a7qjGYz2+RAMoAvSYbKRhzfyRYQf9ksjI9bS9T/l7+tCa+qBGu9fc 5Oe7xFgRaSEo9OzebFgIWX0qL4kshskOQ0meiZDmma5XN8AV99A9YXAnPzhPdVIPrJNxYXbVZegit FK4elUe8gGfVuU/hVFIe6eQt8QRGbateQtpw1QnPI4CHUJltllasPCXWB8HDgV8Xv9Pgx42F22mwo WUiz4C6irnRaJFomQSHxmGAIsdRUtymjmILYWd9WY=; Received: from [2a00:23c4:8baa:1d00:e655:fde:753f:696a] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pBzYn-0001W3-CS; Sun, 01 Jan 2023 14:43:41 +0000 From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Sun, 1 Jan 2023 14:43:37 +0000 Message-Id: <20230101144339.60307-4-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230101144339.60307-1-mark.cave-ayland@ilande.co.uk> References: <20230101144339.60307-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a00:23c4:8baa:1d00:e655:fde:753f:696a X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 3/4] target/m68k: fix FPSR quotient byte for fmod instruction X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The FPSR quotient byte should be set to the value of the quotient and not the result. Switch from using floatx80_mod() to floatx80_modrem() which returns the quotient as a uint64_t which can be used for the quotient byte. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- target/m68k/fpu_helper.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/target/m68k/fpu_helper.c b/target/m68k/fpu_helper.c index ae839785fa..18594a35af 100644 --- a/target/m68k/fpu_helper.c +++ b/target/m68k/fpu_helper.c @@ -523,14 +523,17 @@ static void make_quotient(CPUM68KState *env, int sign, uint32_t quotient) void HELPER(fmod)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1) { - res->d = floatx80_mod(val1->d, val0->d, &env->fp_status); + uint64_t quotient; + int sign = extractFloatx80Sign(val1->d) ^ extractFloatx80Sign(val0->d); + + res->d = floatx80_modrem(val1->d, val0->d, true, "ient, + &env->fp_status); if (floatx80_is_any_nan(res->d)) { return; } - make_quotient(env, extractFloatx80Sign(res->d), - floatx80_to_int32(res->d, &env->fp_status)); + make_quotient(env, sign, quotient); } void HELPER(frem)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1) From patchwork Sun Jan 1 14:43:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Cave-Ayland X-Patchwork-Id: 1720592 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (4096-bit key; unprotected) header.d=ilande.co.uk header.i=@ilande.co.uk header.a=rsa-sha256 header.s=20220518 header.b=XAgXMz+F; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4NlMH30CX6z23db for ; Mon, 2 Jan 2023 01:45:18 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pBzZK-0005ao-IA; Sun, 01 Jan 2023 09:44:10 -0500 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 1pBzZI-0005aE-4S for qemu-devel@nongnu.org; Sun, 01 Jan 2023 09:44:08 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pBzZG-0003op-FS for qemu-devel@nongnu.org; Sun, 01 Jan 2023 09:44:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=llxxRqZFmcvJQubpK2EAAkYoj3msR8RkeocpRunzdn0=; b=XAgXMz+FV+9LaoBNe8EAsiBnyQ Pud22zsjn4G5Kv2XwFU+IQH1zsQFVnoI1LQ228Bde5vahSL6HGeiEBquIbIhwixDC7UKbUrREHTiJ h0STzap1Rnp+cKDVLM+1bUztcN0LTu1MtceubLrgUD3SKzz6c246FxYZ3pYRjyFwxJl1cj8R6hE4p yoLBbIF+O/4QfDwPPk5XvNt1e6+AqQlzcfeE0goPS7RKoPezXsK5F8dygBIkqzo++M5PjjprQoxSc 44+H8dqysweXi5w3/pA76ubwHjrZG8pZevqsLMGVzHoKHsEPO6lfKLfsVc5d5QEtWZt+J01qfEMSu Sl+C4YqahW/APWVkJUUyBiLE0mPbqGziT/hKYWhuvhCDma2REsv5+btRlL5aIpykRcSeMwqNagnXq dSE3ZJ318LD8DpFEiB0N7Pp4cYid1GisdRBm5VM8kgZpzoiim4CHcOgQMjO7pN12XEMAHzAYJKC6O Mv3yUovldbZsbw8AENvDQuSZYkLXaN3hpmc5YUdJ8BeKVcpJYoFYCFCjFRDGH3l12FwtjJE9ffRu0 Y0RW/L/e9xOI4ro3VzN+QPzoveQu+XlFaDdCh5Ax4s9ctExPHbtHdsfx4dGItL1e9cfkNKSwhzfxI jJXwmcvgZnHCf2zcGD3cWEaURXqAUGu+Is2mxkzj4=; Received: from [2a00:23c4:8baa:1d00:e655:fde:753f:696a] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pBzYr-0001W3-II; Sun, 01 Jan 2023 14:43:45 +0000 From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Sun, 1 Jan 2023 14:43:38 +0000 Message-Id: <20230101144339.60307-5-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230101144339.60307-1-mark.cave-ayland@ilande.co.uk> References: <20230101144339.60307-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a00:23c4:8baa:1d00:e655:fde:753f:696a X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 4/4] target/m68k: fix FPSR quotient byte for frem instruction X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The FPSR quotient byte should be set to the value of the quotient and not the result. Manually calculate the quotient in the frem helper in round to nearest even mode (note this is different from the quotient calculated internally for fmod), and use it to set the quotient byte accordingly. Signed-off-by: Mark Cave-Ayland Fixes: https://gitlab.com/qemu-project/qemu/-/issues/1314 Reviewed-by: Laurent Vivier --- target/m68k/fpu_helper.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/target/m68k/fpu_helper.c b/target/m68k/fpu_helper.c index 18594a35af..ce6f2cd2b9 100644 --- a/target/m68k/fpu_helper.c +++ b/target/m68k/fpu_helper.c @@ -538,14 +538,23 @@ void HELPER(fmod)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1) void HELPER(frem)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1) { + FPReg fp_quot; + float_status fp_status; + + /* Calculate quotient directly using round to nearest mode */ + set_float_rounding_mode(float_round_nearest_even, &fp_status); + set_floatx80_rounding_precision( + get_floatx80_rounding_precision(&env->fp_status), &fp_status); + fp_quot.d = floatx80_div(val1->d, val0->d, &fp_status); + res->d = floatx80_rem(val1->d, val0->d, &env->fp_status); - if (floatx80_is_any_nan(res->d)) { + if (floatx80_is_any_nan(fp_quot.d)) { return; } - make_quotient(env, extractFloatx80Sign(res->d), - floatx80_to_int32(res->d, &env->fp_status)); + make_quotient(env, extractFloatx80Sign(fp_quot.d), + abs(floatx80_to_int32(fp_quot.d, &env->fp_status))); } void HELPER(fgetexp)(CPUM68KState *env, FPReg *res, FPReg *val)