From nobody Sun Jul 26 11:53:47 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1782779789; cv=none; d=zohomail.com; s=zohoarc; b=mjNY9BRZxq9zGaNF9WU3Fh74FvsQh4NeCKqAmjLzXwaGrJpjK2DiK9oBURPQJ4wSLOLjxEdV2I7CaWagtAEm+cax8uZ0d3S9nOraH/Kt+igSB5UI0Tu1WGxl1W+dJbb8d10T70lO3uu+7xNuDLL9xkRBcQhhlOHI3GoORmzDZzM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782779789; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gr22IlubKHJ2OEFeZd/t989XmyhwFF2RBqpMnZFqhoY=; b=G8C9bTrAzeriSsCNnpDR4ZvLV0NATXoyNOjIxXk69XUPjXvO92ES5rgmFvj1hclItTFv8P/NRX4NjrrSQSLKEdO92dH+3btr3OtcgD331TJtQ5lllj9cpQMl4s5xJ3saQOOYA376Q3cvhGPff2Ek9qJV49+NWIHs/C4Zl0tWaoc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782779789268262.0144174728007; Mon, 29 Jun 2026 17:36:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1weMS6-0001hb-JU; Mon, 29 Jun 2026 20:35:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1weJri-00053n-8b for qemu-devel@nongnu.org; Mon, 29 Jun 2026 17:50:07 -0400 Received: from mail-dl1-x1234.google.com ([2607:f8b0:4864:20::1234]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1weJre-0000Ii-2N for qemu-devel@nongnu.org; Mon, 29 Jun 2026 17:50:05 -0400 Received: by mail-dl1-x1234.google.com with SMTP id a92af1059eb24-139f3eaaa49so1456767c88.0 for ; Mon, 29 Jun 2026 14:50:01 -0700 (PDT) Received: from devone.local ([2600:8801:100:1910:7665:6164:2268:839e]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-13b2a9b425asm1755523c88.0.2026.06.29.14.49.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2026 14:49:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782769800; x=1783374600; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=gr22IlubKHJ2OEFeZd/t989XmyhwFF2RBqpMnZFqhoY=; b=afz10GP1Xe4d6kRh4VjwsjKRn8NNPtpPSS5BWgso+rvsGTsaDH6Feu7WJcfRZvpaSr D4JXsQjA4JaXwYSquUs516eRpVQ4Etu+ysMaaXuMiTJb+ZAvFEB09jUhDhOuwVSdDNhQ b4AfD8c1KRF+jKnUmbv9NX2vfAxOKdRf9PHYCci8tD7LcyidTacw9mpsuODtkd9wr9Y6 MP2ZPsIqBwzM4yREbNZ87E+okr/kPPA8N9jXScSL0Ox3o/0rDNnOc0JQuklkuRv5dwLU GoNZ5Jr0g7wHKoxVTZNblRPyH+GGXxtaEgNAKPi5AahDLpCJ34ZBERdkdEehuOP07dL5 Zn6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782769800; x=1783374600; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=gr22IlubKHJ2OEFeZd/t989XmyhwFF2RBqpMnZFqhoY=; b=bdPAlKJCBe9EUyLYXzQscvmjsNy2lMR2XvfoAXNnpdbDXzIfU2X2I6o25fwN8AO9px F1Ps21ijQU1C9J+HxPlBbpFxg1siJ+AWKmhPDm7pCwNj1iVsn3/u/NU5jkTpJa19quho DJZPu4//spBgtG2gxIVBQRvZofPoEyhfA9ayg3p9nvdxnGsU2unCrPoyWCTUbeXXPmVB kdPF/Np31ysP9wLe7PrHvxoSGbsK6UVr2zllYo+AfJXBDbaRAZKF8naetwjN6BXbHt5W U03vvll8TXbM7RsvYgVoC9JWFSY67Cdvpis+H0nprQQ1kFyWNXqobj6zMku815pd6L01 XvFQ== X-Gm-Message-State: AOJu0YwhBIwfJitNXsEv8thTWvKTpOwuDjAB4CjJ4s5JZgDfcqnjQZLi NpJH9dU5sAj9AtISKwhW7viYFQN58H9yN3FxKQRZL/2cctI7yIrgC4BIecOe4BvDKoM= X-Gm-Gg: AfdE7cnaXxgnHuRai0CnDZUbbo06+2uOI2vcZxvoByicbPptppRUmkjAzX/wqw+Omz7 LfpKSaMxSrZgENfFaumQdaeQ4M1hGkisUdjx2MHqYUy1QYgIScECMVXaGv8BR67mra6Fiunutge MV/3S44atWKwmzQptgwBAPPp5vU2fLZ38cD3B+3gcfyiwOfQ3qS5M/qXpHV2dKq4OnYG2Z6UWkZ Uos9VN27VvbELDVzQcTJdwoMFmDMYLwYDLSLUr9eD/GKGKLUPzDml/I+DCT0W4+Lm00yDR9Gi08 Revg3IS/3d7AUH4Qup5mlYYgV6uZh+jXpF3STLrlVS1BXHnWQbw+ZXmuj2rDQnes7i7esJJ22yi bHFXrKqgt9YtxIPteCVoJ1dpy3qAz2TippAVQgCDRMRUGBFzWXKgIcSc+XHYK6ldu7Lm51Pq7BT W6VKTRH8gjCL/eHZfL45Tqc6Lh X-Received: by 2002:a05:7022:e18:b0:139:ba7d:84a2 with SMTP id a92af1059eb24-13b2a16e278mr635474c88.21.1782769799662; Mon, 29 Jun 2026 14:49:59 -0700 (PDT) From: Randy Schifflin Date: Mon, 29 Jun 2026 14:49:12 -0700 Subject: [PATCH 1/2] target/sh4: add tests for sh4 fipr and ftrv instructions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260629-fixup-sh4-tcg-fpu-instructions-b4-v1-1-4356b305f971@gmail.com> References: <20260629-fixup-sh4-tcg-fpu-instructions-b4-v1-0-4356b305f971@gmail.com> In-Reply-To: <20260629-fixup-sh4-tcg-fpu-instructions-b4-v1-0-4356b305f971@gmail.com> To: qemu-devel@nongnu.org Cc: Yoshinori Sato , qemu-trivial@nongnu.org, Randy Schifflin X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openssh-sha256; t=1782769797; l=5989; i=randy.schifflin@gmail.com; s=id_rsa; h=from:subject:message-id; bh=NbSl5+Eqy3Fn4qFPP/jg1KONm/toXsKbwNh7FUGXBuY=; b=U1NIU0lHAAAAAQAAAZcAAAAHc3NoLXJzYQAAAAMBAAEAAAGBALXHj1ozDvr3TmWcPoueK1kIy Q3yQ7HL5bbiu8J+P0QBzcchmw5nwN0avQmreXhYuMhz40g0dhCJPnJqNHg1FBflQPz2cgY7Utm3 9lQrK/CQqWsjRwXMinMR7LrmtMFp9+up7MzdXoxmTLgPsKJ/dQmx0rUHx++mUSl8zl7lHO50YVD hsw1RHrkrXlxnUjRi+jtjgErRHvoRwSZpKc44yR62wV8chkTMnHtrn8hgL0Hh+jhHteNn4JTQB/ wme8MghhliXR5oh9xirpeLlS9S4TBY3Vdk6ccgvncSS4uF/y2ZAAV5sNiLZ97OFkBhIQ0bXhVx9 w1LPMkho650Iu9da5/0koNheHS2KAVC2FdPTyaxvqeFAsAB8fCprfh4lpShdcVpyChdd2KXFS53 s9MAUQmZjG0pQvS/dqGCCDWqo7cY3J3VTMXwVtdzYkgZt5eMajL7z8VljXQ08ZgAStdizC/rHNg wy+fIL+6kgxvL/NhJwoiAWhC4D+xQY7SXjJGTvwAAAAZwYXRhdHQAAAAAAAAABnNoYTUxMgAAAZ QAAAAMcnNhLXNoYTItNTEyAAABgDQF75nY5RTn+E12r9uTTRJhFonxgAnx8Zrb4D2uBUU8hGDkd 9ZOGaCpJ5rKP301TWINbUJqcAij4HL8+jEjddRl3l1Ol+sjMikjYHf4y2NRJOXvGTVBRQZ3vf8t yoVsObCv2XPpIycBQDxKcHNhyeaKp2P8uWJQGPnS+HD2qnOlp3DtUskKgiHOhC/JThKRPirzuWg U30pYn/jLfvMPnGl6yRFIJjIMfyRrXyFp89xPOOMNC63HqGjUYxtrb3DuXxnOoWLqHrHsmDXyWY yDcsBRK06iQfW9AiRZQLBFuOYzyzGcDFY8iJrybZ2HJX/AmOzMmTjPKT+l25RbM+qARBW4g3+Zq yswLBgqtB1dKh4kNWM6sqwE3lpFXAQgs9JyNq3JI+F9sMlIytvNLHSuQwpNQvCCOVHyiGpR93mJ hsB3tQSkpoL4t3hCyGLV+xGS1CgxFDLCixxHgHfK5W/wSyP+V1O2ekgpqsi7/lOzUWXaIwcFLxt nb5+0GlZxEWW+wQ== X-Developer-Key: i=randy.schifflin@gmail.com; a=openssh; fpr=SHA256:7gww1tlDoVPb7symWGdTNhRWcHyTORA23OcjS8eyd8Y Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1234; envelope-from=randy.schifflin@gmail.com; helo=mail-dl1-x1234.google.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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 29 Jun 2026 20:35:48 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1782779791037158500 Add tests for the TCG generation of the sh4-specific `fipr` and `ftrv` instructions. Signed-off-by: Randy Schifflin Reviewed-by: Yoshinori Sato --- tests/tcg/sh4/Makefile.target | 7 +++ tests/tcg/sh4/test-fpu-fipr.c | 64 ++++++++++++++++++++++++++++ tests/tcg/sh4/test-fpu-ftrv.c | 99 +++++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 170 insertions(+) diff --git a/tests/tcg/sh4/Makefile.target b/tests/tcg/sh4/Makefile.target index b7a8737be0..0975fac72d 100644 --- a/tests/tcg/sh4/Makefile.target +++ b/tests/tcg/sh4/Makefile.target @@ -16,3 +16,10 @@ TESTS +=3D test-addv =20 test-subv: CFLAGS +=3D -O -g TESTS +=3D test-subv + +test-fpu-fipr: CFLAGS +=3D -O -g +TESTS +=3D test-fpu-fipr + +test-fpu-ftrv: CFLAGS +=3D -O -g +TESTS +=3D test-fpu-ftrv + diff --git a/tests/tcg/sh4/test-fpu-fipr.c b/tests/tcg/sh4/test-fpu-fipr.c new file mode 100644 index 0000000000..bf8258fc36 --- /dev/null +++ b/tests/tcg/sh4/test-fpu-fipr.c @@ -0,0 +1,64 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include +#include +static const unsigned long FPSCR_PR_BIT =3D 1UL << 19; + +static void single_precision_mode(void) { + unsigned long fpscr; + // Read FPSCR register + asm volatile("sts fpscr, %0" : "=3Dr" (fpscr)); + // Set precision mode to single-precision + fpscr &=3D ~FPSCR_PR_BIT; + // Write FPSCR register + asm volatile("lds %0, fpscr" : : "r" (fpscr));=20 +} + +static float fipr(const float v1[4], const float v2[4]) { + float fout =3D 0.0; + // Perform inner product of fv4 and fv8 + // Result is stored in the last float register of the last vector argu= ment + asm volatile( + "fmov %1,fr4\n" + "fmov %2,fr5\n" + "fmov %3,fr6\n" + "fmov %4,fr7\n" + "fmov %5,fr8\n" + "fmov %6,fr9\n" + "fmov %7,fr10\n" + "fmov %8,fr11\n" + "fipr fv4,fv8\n" // (fr4,fr5,fr6,fr7) dot (fr8,fr9,fr10,fr11) + "fmov fr11,%0\n" // Result in fr11 + : "=3Df" (fout)=20 + : "f" (v1[0]), "f" (v1[1]), "f" (v1[2]), "f" (v1[3]), "f" (v2[0]),= "f" (v2[1]), "f" (v2[2]), "f" (v2[3])); + return fout; +} + +int main(void) +{ + // The SH4 manual specifies `fipr` is only available when FPSCR regist= er precision-mode (PR) bit is 0 + single_precision_mode(); + + float v1[4] =3D {1.0, 0.0, 0.0, 0.0}; + float mag_sq =3D 0.0; + float dot =3D 0.0; + + mag_sq =3D fipr(v1, v1); + if (mag_sq !=3D 1.0) { + abort(); + } + + v1[0] =3D 2.0; + mag_sq =3D fipr(v1, v1); + if (mag_sq !=3D 4.0) { + abort(); + } + + float v2[4] =3D {1.0, 0.0, 0.0, 0.0}; + dot =3D fipr(v1, v2); + if (dot !=3D 2.0) { + abort(); + } + + return 0; +} diff --git a/tests/tcg/sh4/test-fpu-ftrv.c b/tests/tcg/sh4/test-fpu-ftrv.c new file mode 100644 index 0000000000..1018da1b7c --- /dev/null +++ b/tests/tcg/sh4/test-fpu-ftrv.c @@ -0,0 +1,99 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#include +#include +static const unsigned long FPSCR_PR_BIT =3D 1UL << 19; + +static void single_precision_mode(void) { + unsigned long fpscr; + // Read FPSCR register + asm volatile("sts fpscr, %0" : "=3Dr" (fpscr)); + // Set precision mode to single-precision + fpscr &=3D ~FPSCR_PR_BIT; + // Write FPSCR register + asm volatile("lds %0, fpscr" : : "r" (fpscr));=20 +} + +// Set XMTRX registers to a doubling scale matrix +static void xmtrx_scale_2(void) { + asm volatile( + "fldi0 fr0\n" // Pair dr0 (fr0, fr1) =3D zero,zero + "fldi0 fr1\n" + "fldi1 fr2\n" + "fadd fr2,fr2\n" // Pair dr2 (fr2,fr3) =3D two,zero + "fldi0 fr3\n" + "fldi0 fr4\n" + "fmov fr2,fr5\n" // Pair dr4 (fr4, fr5) =3D zero,two + + // Enable pair-write + "fschg\n"=20 + // matrix[0][0] =3D 2.0 + // matrix[0][1] =3D 0.0 + "fmov dr2,xd0\n"=20 + // matrix[0][2] =3D 0.0 + // matrix[0][3] =3D 0.0 + "fmov dr0,xd2\n" + // matrix[1][0] =3D 0.0 + // matrix[1][1] =3D 2.0 + "fmov dr4,xd4\n" + // matrix[1][2] =3D 0.0 + // matrix[1][3] =3D 0.0 + "fmov dr0,xd6\n" + // matrix[2][0] =3D 0.0 + // matrix[2][1] =3D 0.0 + "fmov dr0,xd8\n" + // matrix[2][2] =3D 2.0 + // matrix[2][3] =3D 0.0 + "fmov dr2,xd10\n" + // matrix[3][0] =3D 0.0 + // matrix[3][1] =3D 0.0 + "fmov dr0,xd12\n" + // matrix[3][2] =3D 0.0 + // matrix[3][3] =3D 2.0 + "fmov dr4,xd14\n" + // Disable pair-write + "fschg" + : + : + : "fr0", "fr1", "fr2", "fr3", "fr4", "fr5"); +} + +// The SH4 manual specifies `ftrv` is only available when FPSCR register p= recision-mode (PR) bit is 0, aka single-precision +// Transform vector vin by xmtrx; store result in vector vout +static void ftrv(const float vin[4], float vout[4]) { + asm volatile("fmov %4,fr0\n"=20 + "fmov %5,fr1\n"=20 + "fmov %6,fr2\n"=20 + "fmov %7,fr3\n"=20 + "ftrv xmtrx,fv0\n" + "fmov fr0,%0\n"=20 + "fmov fr1,%1\n"=20 + "fmov fr2,%2\n"=20 + "fmov fr3,%3"=20 + : "=3Df" (vout[0]), "=3Df" (vout[1]), "=3Df" (vout[2]), "= =3Df" (vout[3]) + : "f" (vin[0]), "f" (vin[1]), "f" (vin[2]), "f" (vin[3]) + : "fr0", "fr1", "fr2", "fr3"); +} + +int main(void) +{ + single_precision_mode(); + xmtrx_scale_2(); + float vin[4] =3D {1.0, 2.0, 3.0, 4.0}; + float vout[4] =3D { 0.0, 0.0, 0.0, 0.0}; + + ftrv(vin, vout); + if (vout[0] !=3D 2.0) { + abort(); + } + if (vout[1] !=3D 4.0) { + abort(); + } + if (vout[2] !=3D 6.0) { + abort(); + } + if (vout[3] !=3D 8.0) { + abort(); + } + + return 0; +} --=20 2.43.0 From nobody Sun Jul 26 11:53:47 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1782779789; cv=none; d=zohomail.com; s=zohoarc; b=BHSh4E4emXmH2kfF2WD1XKFttD13bG4oI/addulvfyoVGDXTuFCmwwqA565G8CdQ/Ys8q3pLOPlyLKXOtGIBV3VQh1g8neYRc0uID3od+FuRMren85W94a4NqPW/lQMFdJQRdD/omtQ2VjcC+RYE2C2MqdHdJ6t+9PWmIwPg8QY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782779789; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=8lP9SVA9UjDXWbCF8REE5q6sngiCNF4hU3LBEWRVnkE=; b=RD765HKEilrF2ar4oXhCl31sN670CgEeTs1B474Ul6AkwQJIYUri4aCDXzA0eHebJlCRgXEN1AR3AK7uWr0Ts6k2KY8flCS6kud2OWhSkdfPxM4BpW2y2GrTCgjI/GBLXZ7eqddn8k7Unk0c6PwDaObqQOl1GXtMTtYVCFj05GA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782779789208345.5276614096018; Mon, 29 Jun 2026 17:36:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1weMS6-0001hZ-BA; Mon, 29 Jun 2026 20:35:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1weJri-00053q-8n for qemu-devel@nongnu.org; Mon, 29 Jun 2026 17:50:07 -0400 Received: from mail-dl1-x122c.google.com ([2607:f8b0:4864:20::122c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1weJre-0000J4-DK for qemu-devel@nongnu.org; Mon, 29 Jun 2026 17:50:05 -0400 Received: by mail-dl1-x122c.google.com with SMTP id a92af1059eb24-139a5f4ca15so4616400c88.1 for ; Mon, 29 Jun 2026 14:50:01 -0700 (PDT) Received: from devone.local ([2600:8801:100:1910:7665:6164:2268:839e]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-13b2a9b425asm1755523c88.0.2026.06.29.14.49.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2026 14:50:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782769801; x=1783374601; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=8lP9SVA9UjDXWbCF8REE5q6sngiCNF4hU3LBEWRVnkE=; b=dg9IqiET/sZ85hHm7frW5dVzPUOqRL5qA3iPvsTLfeKtLgvuqqGyyp3Qoa86QrcrNb /8OUAtNcM3uUfnpPz0pjR2AzPnRHL3xAOM+M7zEeRgwZ21Tv/1AIC8JASAM9mH3RZFiR LYPcasVn0kuhz3qyvI9lMlSUMyEA3yg8SR7FSrCRGMkTKZDhcMWfB9nX8oy5B5K1/oZy K+wH6Yl4UdFmWWeZHvigi0ufgmLHCC8uJvBpj4lma6U4UmCMuAlPOrleIAJ/pxqHFncn AkUGUHVVWpInRGJ1XwYVBRAkemgYS8u616QrA/C6oxo8m1peD5qZZIBP24rDTmKGVIW9 k80w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782769801; x=1783374601; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=8lP9SVA9UjDXWbCF8REE5q6sngiCNF4hU3LBEWRVnkE=; b=NI+qAOXtzehO17mZBA4XkhhiPPPDze5RRjNQSxXPWRpplTgRhuIb1xPMxA171CddFp J6NZj1Xuyql/6CzBdH4f0iMeutYXq5c6rASWFRv0u+hrsuS2AuSASlUdOF93ouuAvoUb XzJmxj0FZSHXXVveLJjDIw4X8vTLbZItNt+kEkf6IwZnKANnk2fJE4QskUFSlBGXjFM5 JrZK4BLjBnI0zWCR1W+v+zulGilh3ZasXh9qWHWIIbIean/Cv8LXx98QqmA+WRqbflHL IEeYO8dZjThCw3RybhFjE7/8XR+8wLd7ocWDlJ6sI6ZFmenE1wy4SNNyM//fVQOC3sdO lCAQ== X-Gm-Message-State: AOJu0YytrDXqEQTtf2/vaXaQvPCq3DR/ULROEVSV5ycDRc40ddo/E1gg /KmvRTW02nvCQFLgNd4ughyQGeG5TarXlTdh0EfUl/ti3zBuD5QYpqeybLyKYC8Wr1U= X-Gm-Gg: AfdE7ckvFeQfqOBz2C5g1pWMYsudC6cjFAYFocx1Ej1gyGIkff3JJotFOuQJ9gC2gx8 XVm8ZdYrbtOzmTiGNOJNBCXxcsjEneLEzLVlB9WBxWYplPvnYF+n6bUWqoupY/YQQ4pXH+NCP5D tEH5bOWeHWpBrQi+SzKdV10SUAA8920akrdLa7ee+S/TJOMYOw8IUrNTP1JgA6ETLnd/aXKgXXS AvqNCUUyn2yNfHMjszlNbNQgKS88Nq9yBX+VaHzsRMKyZMzP7Wo7bfYEUjdYhS9mDuTHj4+eUK1 zkCQMMKHZ9g/c8ZDyGjM379WIFLpBanzTGFBbKXkaAPlyLe135yQEcwiVeoDfXdCt8RKT8DskEr cTxTUoAA3eDfshZzA7o2NwICt7ifBAX01ZmdKemR3HlRXAjVxrtCecVhuz+/A9RKiU1YImFvEXW Hl1LJ+h056FK/4rDkgFJPM9NAX X-Received: by 2002:a05:701b:454b:10b0:13b:2bd6:1688 with SMTP id a92af1059eb24-13b2bd61871mr35190c88.39.1782769800572; Mon, 29 Jun 2026 14:50:00 -0700 (PDT) From: Randy Schifflin Date: Mon, 29 Jun 2026 14:49:13 -0700 Subject: [PATCH 2/2] target/sh4: fixup tcg for sh4 fipr/ftrv instructions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260629-fixup-sh4-tcg-fpu-instructions-b4-v1-2-4356b305f971@gmail.com> References: <20260629-fixup-sh4-tcg-fpu-instructions-b4-v1-0-4356b305f971@gmail.com> In-Reply-To: <20260629-fixup-sh4-tcg-fpu-instructions-b4-v1-0-4356b305f971@gmail.com> To: qemu-devel@nongnu.org Cc: Yoshinori Sato , qemu-trivial@nongnu.org, Randy Schifflin X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openssh-sha256; t=1782769797; l=2741; i=randy.schifflin@gmail.com; s=id_rsa; h=from:subject:message-id; bh=G8pGQipUKZ2gEWnvowuml1041wRXQUUAP+V52KmszEU=; b=U1NIU0lHAAAAAQAAAZcAAAAHc3NoLXJzYQAAAAMBAAEAAAGBALXHj1ozDvr3TmWcPoueK1kIy Q3yQ7HL5bbiu8J+P0QBzcchmw5nwN0avQmreXhYuMhz40g0dhCJPnJqNHg1FBflQPz2cgY7Utm3 9lQrK/CQqWsjRwXMinMR7LrmtMFp9+up7MzdXoxmTLgPsKJ/dQmx0rUHx++mUSl8zl7lHO50YVD hsw1RHrkrXlxnUjRi+jtjgErRHvoRwSZpKc44yR62wV8chkTMnHtrn8hgL0Hh+jhHteNn4JTQB/ wme8MghhliXR5oh9xirpeLlS9S4TBY3Vdk6ccgvncSS4uF/y2ZAAV5sNiLZ97OFkBhIQ0bXhVx9 w1LPMkho650Iu9da5/0koNheHS2KAVC2FdPTyaxvqeFAsAB8fCprfh4lpShdcVpyChdd2KXFS53 s9MAUQmZjG0pQvS/dqGCCDWqo7cY3J3VTMXwVtdzYkgZt5eMajL7z8VljXQ08ZgAStdizC/rHNg wy+fIL+6kgxvL/NhJwoiAWhC4D+xQY7SXjJGTvwAAAAZwYXRhdHQAAAAAAAAABnNoYTUxMgAAAZ QAAAAMcnNhLXNoYTItNTEyAAABgB/wZG3LQPRNDJDvg+/DDGeNtJzqBXLid65jW4xNq5UUerzRA vJfLE0M7+UTwZ/+6g+tG55K4oVUAREauCIowIR64a0RGiYT+xKKRhRNz5F0mSGQE7n18sDGwlO4 QjJ1vL3+Bw9u1nJpyMgsAJPgsTtrIK03m1s7kBqZ1YSH3nCNCdvH84KJQSReRPDv0WWqppAUgyg T6vZ/SIk/N/Z5OImUtqxTWPxShlByWnD5zhF+Jpwf7X4fyYzXF3d6w/S4qxXVYlp4q73nMjRnmW b8NNTXwyhtsRb9lKy7xUoCw9Jve3jFx3v4b54fC+qZEijD/RvBL9P9QfBe7f5TsdIuXi8+29gD4 7v0zreir7lGMonxXgtpcyYwuc8eqt1NHnlJSXjDZrrlBRzBGGocE0+VwksEEU0Uqecsgp78V259 VMSTCzaarU/BrkURx4zy4JmvUOqiBOczPdNuzXzJ789Sy6LPIIIS6vfOqMFxe0RbD0O2cW0GrVt DdDojLWqk7VWTOA== X-Developer-Key: i=randy.schifflin@gmail.com; a=openssh; fpr=SHA256:7gww1tlDoVPb7symWGdTNhRWcHyTORA23OcjS8eyd8Y Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::122c; envelope-from=randy.schifflin@gmail.com; helo=mail-dl1-x122c.google.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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 29 Jun 2026 20:35:48 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1782779791003158500 Fixes TCG generation for sh4 `fipr` and `ftrv` instructions. Updates the current logic for these instructions to check the FPSCR register appropriately (according to the sh4 cpu manual, `fipr` and `ftrv` are only defined when the FPSCR register PR flag is 0). Also fixes the mth/nth-vector operands by multiplying by 4 to convert to the correct floating point register offset. Signed-off-by: Randy Schifflin Reviewed-by: Yoshinori Sato --- target/sh4/op_helper.c | 2 +- target/sh4/translate.c | 15 +++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/target/sh4/op_helper.c b/target/sh4/op_helper.c index 90c065b217..777380f8e4 100644 --- a/target/sh4/op_helper.c +++ b/target/sh4/op_helper.c @@ -488,7 +488,7 @@ void helper_ftrv(CPUSH4State *env, uint32_t n) float32 p; =20 bank_matrix =3D (env->sr & FPSCR_FR) ? 0 : 16; - bank_vector =3D (env->sr & FPSCR_FR) ? 16 : 0; + bank_vector =3D (env->sr & FPSCR_FR) ? 16 + n : n; set_float_exception_flags(0, &env->fp_status); for (i =3D 0 ; i < 4 ; i++) { r[i] =3D float32_zero; diff --git a/target/sh4/translate.c b/target/sh4/translate.c index d38a6bd352..373950fd66 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -377,11 +377,6 @@ static inline void gen_store_fpr64(DisasContext *ctx, = TCGv_i64 t, int reg) goto do_illegal; \ } =20 -#define CHECK_FPSCR_PR_1 \ - if (!(ctx->tbflags & FPSCR_PR)) { \ - goto do_illegal; \ - } - #define CHECK_SH4A \ if (!(ctx->features & SH_FEATURE_SH4A)) { \ goto do_illegal; \ @@ -1740,22 +1735,22 @@ static void _decode_opc(DisasContext * ctx) return; case 0xf0ed: /* fipr FVm,FVn */ CHECK_FPU_ENABLED - CHECK_FPSCR_PR_1 + CHECK_FPSCR_PR_0 { - TCGv m =3D tcg_constant_i32((ctx->opcode >> 8) & 3); - TCGv n =3D tcg_constant_i32((ctx->opcode >> 10) & 3); + TCGv m =3D tcg_constant_i32(((ctx->opcode >> 8) & 3) << 2); + TCGv n =3D tcg_constant_i32(((ctx->opcode >> 10) & 3) << 2); gen_helper_fipr(tcg_env, m, n); return; } break; case 0xf0fd: /* ftrv XMTRX,FVn */ CHECK_FPU_ENABLED - CHECK_FPSCR_PR_1 + CHECK_FPSCR_PR_0 { if ((ctx->opcode & 0x0300) !=3D 0x0100) { goto do_illegal; } - TCGv n =3D tcg_constant_i32((ctx->opcode >> 10) & 3); + TCGv n =3D tcg_constant_i32(((ctx->opcode >> 10) & 3) << 2); gen_helper_ftrv(tcg_env, n); return; } --=20 2.43.0