From nobody Sat May 30 18:34:48 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=1779207972; cv=none; d=zohomail.com; s=zohoarc; b=UBrFDkWo4SUzPuIo2TTR0Ys3scQnnUA61s5yAqkHkOqyxv9aoAlFCd0YyFIIbPgQrYF/wVuEKoykFBWJfENqOI1pxnpvY/sEW7zVHAVhlLxtojRQqSylNqKM8R3O9jz0kU/adf5Fxga2oq6X9yqYB724kgGjB31v2706amtkeX0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207972; 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=7jM1jwUY6doQWw7cNzzrKAiwqt9SLepu9Iq35gPFd94=; b=CmkgmrO+NNR0RriBzwLa6gdVo2gq6t2trrfGzUDelgQC/Gk2VYaU/9vxJ/T5Fv7BVJQBe6EayAjfLdhiRvyoAyFrzEwmvdogdmWxPCRK0i0gY5baQ3z6QPV9lg7kN30O992A6q+02i4xpNjT2YzZ2cAELaAHUqbEt9EZZKqAteU= 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 1779207972212631.8153430923908; Tue, 19 May 2026 09:26:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDj-0006iv-CG; Tue, 19 May 2026 12:23:03 -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 1wPNDT-0006ca-1t for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:48 -0400 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDM-0000dP-0o for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:42 -0400 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-439a8366831so1528817fac.3 for ; Tue, 19 May 2026 09:22:37 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207756; x=1779812556; 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=7jM1jwUY6doQWw7cNzzrKAiwqt9SLepu9Iq35gPFd94=; b=Ow4vZGkTbavzxuCINgDKePSRcBs72ljYUimbbAV2Us1COsAcWIitptQyLc+yJGnobQ 1JSCeOgrA6DzpoMRaq8sLrsG+iWtAMc+o5c1AHf/2ItwOgMTfpY7XzG4p+MJ0fUGt/p8 1j4BjeZ2Bs715Y/qFgGD92Y1OE7KF1mSS7K4cLDqoReRVuNKLYXjv9Lh1pvN8Y3QQvY1 neW7cBZxdc+6s9QQQAiLhMxgLFWRNCLcw4p3r/teS0SVvEHmtdnKLDDSiQJwfk7B7gcq 0JhdXZG7eW8adej4z+q/qm+HxQ+iaCCpP32oFSDEPZMuC60CNuHkAF9BvLso48ILk5CE j31A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207756; x=1779812556; 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=7jM1jwUY6doQWw7cNzzrKAiwqt9SLepu9Iq35gPFd94=; b=WoUkygB1TON4HwlMmbaAjv/gGiaHPomj4GkjXraRO8Wxur8uoOhhyv4QvhNqZaf70Z ZjphyO/QN5WgPQrzm/8ASH3X8IaHgomMdo0l7tIJlSE2tmIqjMTnr2Dqu+1AE1tPIOGm DlDRiHKa+txTbhZfXWXr9SZicWAWUSu3WGAA2GDSUjihYSR3iVOzrqTIu/Z1XssJfHIY 7E3ZNzcBKrD4dqNOTX5e5y6TdHEKPE5+/AM+x269GCoIZ7asrqsXPSwh4N/DxJdAs+2G yQeUekRAa5dfu8/Kepq/jpRKIApJ6T58ib3p3KmUBAjLViKbvUvKDnPNHdWl2nGXGk9A GsYA== X-Gm-Message-State: AOJu0Yx66Z7zx4g+FF2tXEViLrCIw0qW5ABXfLPyKFpy64KxhE5XOOg3 uN2d8HIezIqaIDHXseOYxg/vCGGKAtFGNKrdpEY7ARbzVFD+v96b48RB X-Gm-Gg: Acq92OEVjJbR4stLGqdCTk0s1TMELOozU9YjPyNnts5uskZ5J5+fNAMM041L4MJ9qi6 8cb5HPg4x2gIMUPIDZsPh/2Ibg0mGUPOd+lx3MaKKqCKEJAHujCCbKkaDQkHtgGv1ym5UiK+qSP +tYtXEoBdbvf85Kv2FKei5xD+8TGOqtBUFxhHkV8khPIv3nscSTURsaogs1WVlE/xaXpPYOhKzO 4iPFi24AnpQZXnqlcS4QyrSmCC25gWG1xj+hEs4SQZyvB1fIxEKYhwLq1cPDTWR4f+mGLxyWBhi IEaZ+ipULdaHlB0YWD7B5AWy29d/fq3HD8ZI9x/hUwu/f8LggWn6YyL3RfCW0AYtAmgK8dVqr1K w2EQwXPyhMDqn3VfhxFUo9gLtCK1HB6sfWv03W1NHHYtWKg53PqAdRHBxz94I5nhpXzZVcXt44R OdFaR+yp9/b9N5bWf8/xV9bipGRo74A3CGrRA5+O0QoBUtQ7NymSw/CcATSSiCMXPVkaja5Ut5q hG27Dp4yhIhn1rwTLFSYQdOrUJylur8Go8Ikkc5FcEKkOqeNvxf3VHZrqBWjWbJZIyv X-Received: by 2002:a05:6870:ff04:b0:42f:fc34:78bd with SMTP id 586e51a60fabf-43a2de7ba6cmr12118895fac.33.1779207755884; Tue, 19 May 2026 09:22:35 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:03 -0600 Subject: [PATCH v9 01/40] linux-user/mips: implement sysmips(MIPS_FLUSH_CACHE) MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-1-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::36; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x36.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207974832154101 Add the target sysmips dispatcher and implement MIPS_FLUSH_CACHE as a successful no-op for linux-user. Self-modifying code is handled by QEMU's normal user-mode translation invalidation machinery, so the target ABI only needs the syscall command to be accepted. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split MIPS_FLUSH_CACHE out of the combined sysmips/MIPS_FIXADE patch. (suggested by Richard Henderson) --- linux-user/mips/target_syscall.h | 1 + linux-user/mips64/target_syscall.h | 1 + linux-user/syscall.c | 17 +++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/linux-user/mips/target_syscall.h b/linux-user/mips/target_sysc= all.h index dfcdf320b7..3f36c1695a 100644 --- a/linux-user/mips/target_syscall.h +++ b/linux-user/mips/target_syscall.h @@ -10,6 +10,7 @@ #define TARGET_MCL_ONFAULT 4 =20 #define TARGET_FORCE_SHMLBA +#define TARGET_SYSMIPS_FLUSH_CACHE 3 =20 static inline abi_ulong target_shmlba(CPUMIPSState *env) { diff --git a/linux-user/mips64/target_syscall.h b/linux-user/mips64/target_= syscall.h index 9135bf5e8b..20ea7c6ab9 100644 --- a/linux-user/mips64/target_syscall.h +++ b/linux-user/mips64/target_syscall.h @@ -10,6 +10,7 @@ #define TARGET_MCL_ONFAULT 4 =20 #define TARGET_FORCE_SHMLBA +#define TARGET_SYSMIPS_FLUSH_CACHE 3 =20 static inline abi_ulong target_shmlba(CPUMIPSState *env) { diff --git a/linux-user/syscall.c b/linux-user/syscall.c index d3d9fffb54..73f09bb775 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -6630,6 +6630,19 @@ static abi_long do_prctl_syscall_user_dispatch(CPUAr= chState *env, } } =20 +#ifdef TARGET_NR_sysmips +static abi_long do_sysmips(CPUArchState *env, abi_long cmd, abi_long arg1, + abi_long arg2) +{ + switch (cmd) { + case TARGET_SYSMIPS_FLUSH_CACHE: + return 0; + default: + return -TARGET_EINVAL; + } +} +#endif + static abi_long do_prctl(CPUArchState *env, abi_long option, abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5) { @@ -12102,6 +12115,10 @@ static abi_long do_syscall1(CPUArchState *cpu_env,= int num, abi_long arg1, case TARGET_NR_prctl: return do_prctl(cpu_env, arg1, arg2, arg3, arg4, arg5); break; +#ifdef TARGET_NR_sysmips + case TARGET_NR_sysmips: + return do_sysmips(cpu_env, arg1, arg2, arg3); +#endif #ifdef TARGET_NR_arch_prctl case TARGET_NR_arch_prctl: return do_arch_prctl(cpu_env, arg1, arg2); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207792; cv=none; d=zohomail.com; s=zohoarc; b=Zk4YBG0mAcaGGEhNtG0DSFN9KF44IcIoIHbLDeryp/wMT+V6VDvOIX00KDMy2sCUN5VVjdc1d+wJ2eR+0jcHtcn9ByfgeBz1BRKdivpu9py7BuB7OrTDuUG8k4Hgccfnw1VGBs7UdAYDD3HZgsAXOxNLecRzH8XLCC+JzEQVeaU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207792; 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=khVlB/iuHBqSxDf1ci1EMIV9f0Ywmy6N/0aX6cS55HM=; b=iV8UdHFWPk31sgHpb/CkIDb9UZoTa+5f+6s+Ho1L3cNQsjnxNtp84eSzfShmyiV/jxOV7VdfnoNR0W+e28po8ZQMNu3ANVHTpLoPuO/P9ot5KBNegNwCxHvsUow95k5l0xIHmn5gMcahbEfmb6+eANC4XqXx3pUAv2KvbvbhwFM= 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 1779207792959594.7756942486852; Tue, 19 May 2026 09:23:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDg-0006hv-LZ; Tue, 19 May 2026 12:23:00 -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 1wPNDT-0006cb-1z for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:48 -0400 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDM-0000dT-1T for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:46 -0400 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-439bdb1d75bso2455115fac.1 for ; Tue, 19 May 2026 09:22:37 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207757; x=1779812557; 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=khVlB/iuHBqSxDf1ci1EMIV9f0Ywmy6N/0aX6cS55HM=; b=kMTGlQnh5XzJJxq5Fj6WHcLcmNZfGhhanANk3rmRP+RylSCFltHE8w4CgbOqpZBlw7 av+FHT0eeUyNdSDya9K+BDAz8vW1U8YZ+ZbaEkI+FmmWWDG59Z0gqtTDRjCjtHJyvBfp 5yuSMtnbFtO+NToqKm9UaEKobs8TqFguSUM4Ghvc5lHqZkbiCUkWQ22mLF156w5ptIf1 V37KCprz1CEe4ieHrgsyczJqGOVEjqsr43+0ARLL+h5hH+u9gGBmLpHgsOOZdpcU2ByT GctOrSeYvz+odD3o8k5GWNbpk0Q8DJP95UgPR7IZe3sB+0cg5Fax2GsjPXFl2BI1S+N4 RHxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207757; x=1779812557; 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=khVlB/iuHBqSxDf1ci1EMIV9f0Ywmy6N/0aX6cS55HM=; b=lLj6Lfhl3eZ66mUDiAkN4/HU0T13aIm/3gTknm4/DEuLFU37PSInon6dfroEGrVCv0 TlIaYp1mMtVHQgJGwwC88yo/cWHgvodiVf1i5nyUSDIFQM4G6UofkNeoLzI2pmuMajPg e1nk81vgqJfHELGsNLC+UaTxFORhHN3G5NjEIyvBsoane1voEe3sNzj1blW/43pUsa+n 8MrAGo9/GoWcEarZxJTzm6qFmVzTgvtknSiaTJUKi8XFHuFZJq9wf2rfL+xJChLhapTx QDOZnLzmmHABfY5wjttdF+3aq/IIAIPieTtNOkzQbPxQrUlJAwyNajjc1OppAU6hwx21 ln2w== X-Gm-Message-State: AOJu0YycOzO0dewbWpa7vwHs3pJN0Ik9O2ygWJRuIfgc9TlsfFLCxgTb HGTpGC7cWfdBvwKKwzvj7ozWYCbpLbKLR8wRzs7rmW2oJvsVfc1yzyBK X-Gm-Gg: Acq92OHIqfKP05ZI2bZ9g9uPmjaTuQKvtv6/5WlQzVD2e0LslwBrBD9KanOGVnIDAxR +cILU91Pgpwx6RicOL95LNHm2yC33xBA3OtWpiFObEzMZb8cUb7HTeh7EnRc8YdeWGeFAg6jdj2 BY6PlXriqEfS6UMZ/0BzM5L5wEIUkrmfcpiBXMIq6foQZXyU4/MmqaJW9La6bapW1U++rOlHUuF gmRl0/BnA/s9ppyiSYQkAM9gjhXv2OgjzoYYk1aQTq9tv0R/YG9ZsZnfPcJHlLkA3GQjBy/VWwR 4sQaaQzDQtxCIJb2ShwRfShzjVd5vXFPkN8eH8s/zArZMb2H6xMPcn2nqy1iN/26f/0xaA2+QVo ZAehQUM29r7nJZZ3xjHn/+B92DVtkW0MDrLp+MUxTPM7GuBk0a55S3gQy1gG+CfvaWEznnL+sjU 8rQGYKaCDbXfr6sLIIWtwsVpT+mheT4V5E1qbO7/XGTYJZ8IXLPY2BSAOJMdVpL5BV+vwteIXSs 62SM7kCOCSbCeOMHbScsq9WJb7st3IY8oadPy3wm70AjyhBTJ9fb3cHEC/tn6LG/Pt2 X-Received: by 2002:a05:687c:408c:b0:42c:1e4a:8e28 with SMTP id 586e51a60fabf-43a2da2a5e5mr13510313fac.12.1779207756866; Tue, 19 May 2026 09:22:36 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:04 -0600 Subject: [PATCH v9 02/40] linux-user/mips: implement sysmips(MIPS_ATOMIC_SET) MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-2-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::32; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x32.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207794752158500 Implement the MIPS_ATOMIC_SET sysmips command as an aligned 32-bit atomic exchange in target memory. MIPS reports syscall errors through a separate register, so successful old values can overlap the errno range. Write the return value and error flag directly and return -QEMU_ESIGRETURN so the common syscall path leaves the registers unchanged. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split MIPS_ATOMIC_SET out of the combined sysmips/MIPS_FIXADE patch. (suggested by Richard Henderson) - Always use the explicit MIPS return-register path for successful atomic_set results. (suggested by Richard Henderson) --- linux-user/mips/target_syscall.h | 1 + linux-user/mips64/target_syscall.h | 1 + linux-user/syscall.c | 31 +++++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/linux-user/mips/target_syscall.h b/linux-user/mips/target_sysc= all.h index 3f36c1695a..9206694f4f 100644 --- a/linux-user/mips/target_syscall.h +++ b/linux-user/mips/target_syscall.h @@ -11,6 +11,7 @@ =20 #define TARGET_FORCE_SHMLBA #define TARGET_SYSMIPS_FLUSH_CACHE 3 +#define TARGET_SYSMIPS_ATOMIC_SET 2001 =20 static inline abi_ulong target_shmlba(CPUMIPSState *env) { diff --git a/linux-user/mips64/target_syscall.h b/linux-user/mips64/target_= syscall.h index 20ea7c6ab9..e07687f8ac 100644 --- a/linux-user/mips64/target_syscall.h +++ b/linux-user/mips64/target_syscall.h @@ -11,6 +11,7 @@ =20 #define TARGET_FORCE_SHMLBA #define TARGET_SYSMIPS_FLUSH_CACHE 3 +#define TARGET_SYSMIPS_ATOMIC_SET 2001 =20 static inline abi_ulong target_shmlba(CPUMIPSState *env) { diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 73f09bb775..3786a34041 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -6631,10 +6631,41 @@ static abi_long do_prctl_syscall_user_dispatch(CPUA= rchState *env, } =20 #ifdef TARGET_NR_sysmips +static abi_long do_sysmips_atomic_set(CPUArchState *env, abi_ulong addr, + abi_long value) +{ + uint32_t *ptr; + abi_long old; + + if (addr & 3) { + return -TARGET_EINVAL; + } + + ptr =3D lock_user(VERIFY_WRITE, addr, sizeof(*ptr), true); + if (!ptr) { + return -TARGET_EINVAL; + } + + old =3D tswap32(qatomic_xchg(ptr, tswap32((uint32_t)value))); + unlock_user(ptr, addr, sizeof(*ptr)); + + /* + * MIPS uses a separate error flag, but the common linux-user syscall + * path infers that flag from the return value. Successful atomic_set + * results can overlap the target errno range, so write the result + * registers here and ask the CPU loop to leave them alone. + */ + env->active_tc.gpr[2] =3D old; + env->active_tc.gpr[7] =3D 0; + return -QEMU_ESIGRETURN; +} + static abi_long do_sysmips(CPUArchState *env, abi_long cmd, abi_long arg1, abi_long arg2) { switch (cmd) { + case TARGET_SYSMIPS_ATOMIC_SET: + return do_sysmips_atomic_set(env, arg1, arg2); case TARGET_SYSMIPS_FLUSH_CACHE: return 0; default: --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207924; cv=none; d=zohomail.com; s=zohoarc; b=hl8DrUMvkM8ggEz5px5V1k6NSBjpP1zeqB+T4R466GYGMn+aH+UuVIpfHtFuG9wy1IB4+m0yqLLBt6W0Jq+9wklSraB6MLQzeNkYUxwd3thbAiut8bO3tay+MhttEFMMJtYuiNzbsatCwHoZozquViydIOIb1Cnlvb4wQ6ZIvdo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207924; 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=y1A496IYbHhu4AhVtkPulY0r+igz3b9SIXrIkY/qQzs=; b=e3r54rdqUIjfUg0DFJIBpwzurplJv8vuETx2x3e83KPzXri9c50vUWXWjNlbvf1bRpTL4cBYKjuSpZbNMphcBYJtvGfeTswTa7ru4E3NEROda1mAO445XiNxUtdtjg+7ziJg6evy411mDU07Fx4ehwqRGo/MGxPOBoyvWL2aW5w= 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 1779207924208673.961201494783; Tue, 19 May 2026 09:25:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDh-0006iU-KN; Tue, 19 May 2026 12:23:01 -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 1wPNDT-0006cc-EQ for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:48 -0400 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDM-0000da-1M for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:46 -0400 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-4043b27ddeaso2277511fac.1 for ; Tue, 19 May 2026 09:22:38 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207758; x=1779812558; 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=y1A496IYbHhu4AhVtkPulY0r+igz3b9SIXrIkY/qQzs=; b=YYlsfSaFQMUOkeQqF7rZvHvIblgC9iVkO4x4YLLrVxJseGp2uErxjJYq0QXVzHPTcc y4wlyvHK77zz1wn3fKaM62EgTMtI/gwZzD0/0Hbt6Qs8ceJF5DiKLIS/Ka0xB3woqsxo 2rhir05Aq1dRE2ErXh/zFsfK/riQQf3QBXBC3dw3mpW7WdqCGj2k5gS0cmNRZ6ILReu4 5LdLVZo+dTi+ozJKRAFda+1RkH2mTccpWwyIxJN9EMzw4+sL1/iD3+vFsprzNRb1KruR WCQGmRwM+woHwe3bHDGfZdcXAwC3jk3SujXwGhanxEnfp5iAY+7OztxJmd3sHoEiGawx KwZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207758; x=1779812558; 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=y1A496IYbHhu4AhVtkPulY0r+igz3b9SIXrIkY/qQzs=; b=LTrhelUAqFvFJhK4Uz9jX6B7l38DefkZn5cToTiR0Nxcdmesi6DVKr2jSmoP6bxDzH Bgn5WOyr2h7qITqS9O1OOSrCsJ9XyW+pPmf6F34luvPu7bCHXdATF3oy98bWnLnuNotN pX6uetmKkeeI2X5tjZltGxbhJIQT7d0Rz8UeBwkf51Y+SmY6LpZyDitJRDnDGkJCoRUE JpKYPDsy/MErF+PJgGBUp5ykizbyyGKcQbWYJhdIKUpvaXuCoYiTUrhiJ6xPksBAXByp Yd1lagv4f9j5+ASaULlG0KXEDrPwBwqOmLZTFPMqApOGtKtj2FmOsj33NxVC7/0z8dnu a6rw== X-Gm-Message-State: AOJu0YxCZE4E7dnr9aOGShe8WhxIzMPGdDFFuj6laxhz4oRTryNiunVt tb7/OiW45EJQY9je/i3tAGOGo8YeYTugtrB377xEDJJyzD8sy6vTQamM X-Gm-Gg: Acq92OEybJZ1mH+z1oEPf67JqdnKeEhKBj+ZY8u50Xj9kpWurA/yCOzZ30CwE+DAZBx i48OpwOmiwi5MzBQg87ojXaL+vvHcUqgU4BhQitGJvb5HsJI3UJhqBa1C1/Bcart1qRxqH5+4zW nmtBz8tsFmGG7FWK90Xja01rWFJMDVZXXxPwOLJayDNwssmNA5sP2aY2od+9EL+LkEr8pNo7WNe fD2kYOKDeSanA9ayR4l1fDNLS5w+1KgDgij142RKjqq5nicwHEAn+MEIdCW9BtrkeeSWdEZblbN dnzjvCKs3BFnUsWChT5iiFUQOE2WezueTSvLNiGsRs6kS+ZgArB6xwKYV9kcUYBomC5Xxug83Dd XrbE8tFLPeavV0iuiCqmvD3oVX2S7iyfN8r5P9Zs7J5tkSfnNUwKoAVp0uvH+b4E1CIZ9/nPkHQ DsKf5OAynn8YNkFJHZ7k+uWslTtcXi2skm0ffneGByUnQ+a115kyFN3o4otXC7HYLK+OmDQrA8W F7agFdN66WtrcjnSHUA/ujkG1dJcGoUTYHk52pt/3S78dul6CtW7ZFkuWgwUDW+xZvaZx1vfkcB +gA= X-Received: by 2002:a05:6870:b0f6:b0:417:4888:328b with SMTP id 586e51a60fabf-43a2dce8700mr13342430fac.20.1779207757728; Tue, 19 May 2026 09:22:37 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:05 -0600 Subject: [PATCH v9 03/40] linux-user/mips, target/mips: honor MIPS_FIXADE for unaligned accesses MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-3-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::32; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x32.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207925940154100 Linux/MIPS enables software fixups for user-mode unaligned scalar accesses by default through MIPS_FIXADE/TIF_FIXADE. QEMU linux-user did not model that ABI, so MIPS guests took fatal AdEL/AdES exceptions unless translation was forced to use unaligned host accesses. Key MIPS translation blocks on the linux-user unaligned policy, implement sysmips(MIPS_FIXADE) to toggle that policy, and raise SIGBUS/BUS_ADRALN when fixups are disabled. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard --- Changes v6 -> v7: - Replace the compact TB_FLAG_MIPS_FIXADE multiplication with an explicit conditional branch for readability. (suggested by Philippe Mathieu-Dau= d=C3=A9) Changes v5 -> v6: - Rename the TB flag from TB_FLAG_UNALIGN to TB_FLAG_MIPS_FIXADE to match the MIPS_FIXADE ABI policy. Changes v2 -> v3: - Split MIPS_FLUSH_CACHE and MIPS_ATOMIC_SET into preparatory sysmips patches. (suggested by Richard Henderson) --- linux-user/mips/cpu_loop.c | 5 +++++ linux-user/mips/target_syscall.h | 1 + linux-user/mips64/target_syscall.h | 1 + linux-user/syscall.c | 8 ++++++++ target/mips/cpu.c | 10 ++++++++-- target/mips/cpu.h | 4 ++++ target/mips/tcg/translate.c | 6 +++++- 7 files changed, 32 insertions(+), 3 deletions(-) diff --git a/linux-user/mips/cpu_loop.c b/linux-user/mips/cpu_loop.c index fa264b27ec..ff9d293c29 100644 --- a/linux-user/mips/cpu_loop.c +++ b/linux-user/mips/cpu_loop.c @@ -161,6 +161,11 @@ done_syscall: case EXCP_DSPDIS: force_sig(TARGET_SIGILL); break; + case EXCP_AdEL: + case EXCP_AdES: + force_sig_fault(TARGET_SIGBUS, TARGET_BUS_ADRALN, + env->CP0_BadVAddr); + break; case EXCP_INTERRUPT: /* just indicate that signals should be handled asap */ break; diff --git a/linux-user/mips/target_syscall.h b/linux-user/mips/target_sysc= all.h index 9206694f4f..be6942445a 100644 --- a/linux-user/mips/target_syscall.h +++ b/linux-user/mips/target_syscall.h @@ -11,6 +11,7 @@ =20 #define TARGET_FORCE_SHMLBA #define TARGET_SYSMIPS_FLUSH_CACHE 3 +#define TARGET_SYSMIPS_FIXADE 7 #define TARGET_SYSMIPS_ATOMIC_SET 2001 =20 static inline abi_ulong target_shmlba(CPUMIPSState *env) diff --git a/linux-user/mips64/target_syscall.h b/linux-user/mips64/target_= syscall.h index e07687f8ac..c11d0a0888 100644 --- a/linux-user/mips64/target_syscall.h +++ b/linux-user/mips64/target_syscall.h @@ -11,6 +11,7 @@ =20 #define TARGET_FORCE_SHMLBA #define TARGET_SYSMIPS_FLUSH_CACHE 3 +#define TARGET_SYSMIPS_FIXADE 7 #define TARGET_SYSMIPS_ATOMIC_SET 2001 =20 static inline abi_ulong target_shmlba(CPUMIPSState *env) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 3786a34041..551caa8e7c 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -6663,9 +6663,17 @@ static abi_long do_sysmips_atomic_set(CPUArchState *= env, abi_ulong addr, static abi_long do_sysmips(CPUArchState *env, abi_long cmd, abi_long arg1, abi_long arg2) { + CPUState *cs =3D env_cpu(env); + switch (cmd) { case TARGET_SYSMIPS_ATOMIC_SET: return do_sysmips_atomic_set(env, arg1, arg2); + case TARGET_SYSMIPS_FIXADE: + if (arg1 & ~3) { + return -TARGET_EINVAL; + } + cs->prctl_unalign_sigbus =3D !(arg1 & 1); + return 0; case TARGET_SYSMIPS_FLUSH_CACHE: return 0; default: diff --git a/target/mips/cpu.c b/target/mips/cpu.c index 88bb59d506..57935adea4 100644 --- a/target/mips/cpu.c +++ b/target/mips/cpu.c @@ -565,11 +565,17 @@ static int mips_cpu_mmu_index(CPUState *cs, bool ifun= c) static TCGTBCPUState mips_get_tb_cpu_state(CPUState *cs) { CPUMIPSState *env =3D cpu_env(cs); + uint32_t flags =3D env->hflags & MIPS_HFLAG_TB_MASK; + +#ifdef CONFIG_USER_ONLY + if (!cs->prctl_unalign_sigbus) { + flags |=3D TB_FLAG_MIPS_FIXADE; + } +#endif =20 return (TCGTBCPUState){ .pc =3D env->active_tc.PC, - .flags =3D env->hflags & (MIPS_HFLAG_TMASK | MIPS_HFLAG_BMASK | - MIPS_HFLAG_HWRENA_ULR), + .flags =3D flags, }; } =20 diff --git a/target/mips/cpu.h b/target/mips/cpu.h index cbb9b3e1b1..b478f834c1 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -1161,6 +1161,10 @@ typedef struct CPUArchState { #define MIPS_HFLAG_ELPA 0x4000000 #define MIPS_HFLAG_ITC_CACHE 0x8000000 /* CACHE instr. operates on ITC ta= g */ #define MIPS_HFLAG_ERL 0x10000000 /* error level flag */ +#define MIPS_HFLAG_TB_MASK (MIPS_HFLAG_TMASK | MIPS_HFLAG_BMASK | \ + MIPS_HFLAG_HWRENA_ULR) + +#define TB_FLAG_MIPS_FIXADE 0x40000000 target_ulong btarget; /* Jump / branch target */ target_ulong bcond; /* Branch condition (if needed) */ =20 diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c index 54ed253a7d..dac30aff8d 100644 --- a/target/mips/tcg/translate.c +++ b/target/mips/tcg/translate.c @@ -15070,6 +15070,7 @@ static void mips_tr_init_disas_context(DisasContext= Base *dcbase, CPUState *cs) { DisasContext *ctx =3D container_of(dcbase, DisasContext, base); CPUMIPSState *env =3D cpu_env(cs); + uint32_t tb_flags =3D ctx->base.tb->flags; =20 ctx->page_start =3D ctx->base.pc_first & TARGET_PAGE_MASK; ctx->saved_pc =3D -1; @@ -15092,7 +15093,7 @@ static void mips_tr_init_disas_context(DisasContext= Base *dcbase, CPUState *cs) ctx->CP0_LLAddr_shift =3D env->CP0_LLAddr_shift; ctx->cmgcr =3D (env->CP0_Config3 >> CP0C3_CMGCR) & 1; /* Restore delay slot state from the tb context. */ - ctx->hflags =3D (uint32_t)ctx->base.tb->flags; /* FIXME: maybe use 64 = bits? */ + ctx->hflags =3D tb_flags & MIPS_HFLAG_TB_MASK; ctx->ulri =3D (env->CP0_Config3 >> CP0C3_ULRI) & 1; ctx->ps =3D ((env->active_fpu.fcr0 >> FCR0_PS) & 1) || (env->insn_flags & (INSN_LOONGSON2E | INSN_LOONGSON2F)); @@ -15112,6 +15113,9 @@ static void mips_tr_init_disas_context(DisasContext= Base *dcbase, CPUState *cs) ctx->default_tcg_memop_mask =3D (!(ctx->insn_flags & ISA_NANOMIPS32) && (ctx->insn_flags & (ISA_MIPS_R6 | INSN_LOONGSON3A))) ? MO_UNALN : MO_ALIGN; + if (tb_flags & TB_FLAG_MIPS_FIXADE) { + ctx->default_tcg_memop_mask =3D MO_UNALN; + } =20 /* * Execute a branch and its delay slot as a single instruction. --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779208023; cv=none; d=zohomail.com; s=zohoarc; b=Q1TLgiWkS+vFN19kv5lyAgwpfnMtzdCSdxK9j9myctVItX7pWg/PfDHsu+JRkgnmQnHzNUHW2+H/56nOX1TwI+bMa+JSYbHj02IJqdd/JCNucMwehcNh8j4HbOrNRfBt6NtWBsXFIl18jlQ/fGqTzWp7FWjA61AsdEKUctGPlPA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779208023; 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=a0YJCz/+Op9OtTioAKAD1sf9gr9b0ChAoB2bIjmnyqQ=; b=RknA2YesrqusstVfvf8vkvx0jTpTptD2pBmGKB30c8YiiED7lW//alJZAH8Omfn1XLA9wN2J+x+J1LXeoJGEuVRk/mbWb9EmzMENwh/lgs8C2sQB85VwHPcR6aVPDVkVHEYvU11u54wAtlNx21FwwayjHnPC8yfHIBMDBu2V9H8= 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 1779208023630124.25379148507682; Tue, 19 May 2026 09:27:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDc-0006fS-2S; Tue, 19 May 2026 12:22:56 -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 1wPNDV-0006cm-75 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:50 -0400 Received: from mail-oi1-x22f.google.com ([2607:f8b0:4864:20::22f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDN-0000do-SI for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:48 -0400 Received: by mail-oi1-x22f.google.com with SMTP id 5614622812f47-479d85152c9so1458588b6e.2 for ; Tue, 19 May 2026 09:22:39 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207759; x=1779812559; 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=a0YJCz/+Op9OtTioAKAD1sf9gr9b0ChAoB2bIjmnyqQ=; b=peFP067+AfOR8qGHpUwg/DVG1Umr7y3wjxaeGoRclMYXwles3QbYSrzEpmT2yveGia 9cmXUBY967utT4BKcSWP04H8Qb8o0jlnIS+yB7Wwbj/FsukKEys7K+sqL4TXYpTXdxB+ cRj76hdPj4ulisluYRamGkccL2q1P6fObFIK9fujkaJlWkQoKLcGO2RgozmXYYVkLSdj 4Le38l4OOkmCEDiqJLPpROtgpMhm0L1+dX2a0bcN+wU2brv02lS4Lk1IgREWShpkMZSh 8+JcI7uGyi32zzcVYC0AVK7iAeQJkGoRF/XkLlPY0h5G74cW6X8KKJBiHC0S4lrZSace 5+hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207759; x=1779812559; 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=a0YJCz/+Op9OtTioAKAD1sf9gr9b0ChAoB2bIjmnyqQ=; b=O2JkT31E+Ln41Ckcwp4NtQTEOrKvarrMT8AXuAfwT7rxSmxrYAIct+kU6EqO2nL3Q/ CnGndlNdSfWoy2HiXdhrt2t/Mcs7mBMiKnskodZgjVvgF/IpvQqQCPZxCkmg30Xw8kB6 ffSR8sn9cEzC3nrnaATtnvMd6qHsTWsSCiplCmh24cUtDphETnQrCIX2wOk04T1wsiLy VSgad594/XxenrNZtgRXQJtS0F4V/WmdtoRYfDB7lR11xxyT6EcUZhXQjef5f+ZV+AcO iRZbq+Y8f3KXHouNz4AziuAE3ZE8RcN1cv65yrA/6PLVUeB9EfofIw1K0pjs0yb9jCLO tFvg== X-Gm-Message-State: AOJu0YwyKXUPLekEptoFJ50T+uGnq1N/j/7+6w+7LeuCGU65Hx6/7Bth bNlndFP8nCaIwiCUqMFr5uhH+crbX83g5rEvidSL4MtT4XaokRKDXVdJ X-Gm-Gg: Acq92OEFqw1aLrYiCXzSTuV5RMK3kHbumizHvhYU68b4ZZeClm4wbeGqwS5VOv9LKS4 u2BD6t58Y4pRf0X/X7k9IWoS1aLxHUYMX42Z6b3TGOtfkJzsKGjDZZzXOhyZNbgkvV4qt52lpup ZI43V9NlQn96QisayVQWJnFwUPqsI6Ycsy4uwBCOD1zgd0LUf9V1hWA+osfEq+cxaHMVKGzxtgI XjtMs7l0UGRqxBpmnonPoSQRRvxuUCeQJ9UkfpoJYuQCERtW2thb1CMuRahH7KnO6t5ZXOkVKqf 5nQ11gcBA4zoz5b25YHePFiTHUW79LboeJ9pmRJpR3D8tGFrod8Y67bbQ6+P5LP4MEUhvUA1fAu v/oV3fbCaBpmdl5hdnTANWlfMeHo0fLT69Ws1Bl+OkO6LC3JQAZIBIM2J+bAGidpAVk9+qVdCWI mNuEFL2cnpT5Y+/UIk1Z8qirET1r7qg8huO6nYqNomNCRsVc6S3d/hfTjc+mZYtLxvYZIAiVAdk tREc7i8oKJrQ690TY6U5tpcSrydl1ZpuCtSIDgQO8vIuWzgJCZW6ERgcen/51OHwGGV X-Received: by 2002:a05:6820:3087:b0:685:7d77:27 with SMTP id 006d021491bc7-69c9bfd47e6mr13111495eaf.33.1779207758850; Tue, 19 May 2026 09:22:38 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:06 -0600 Subject: [PATCH v9 04/40] target/mips: fix Octeon arithmetic destination handling MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-4-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::22f; envelope-from=james.hilliard1@gmail.com; helo=mail-oi1-x22f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779208025722154100 BADDU and DMUL write their results to rd, not rt. Route writes through gen_store_gpr() so rd =3D=3D $zero is handled consistently. Reviewed-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: James Hilliard --- Changes v1 -> v2: - Split the BADDU/DMUL destination handling fix out of the Octeon arithmetic instruction patch. (suggested by Philippe Mathieu-Daud=C3= =A9) Changes v2 -> v3: - Remove the rd =3D=3D $zero fast paths and let gen_store_gpr() discard writes to $zero. (suggested by Richard Henderson) --- target/mips/tcg/octeon_translate.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index e1f52d444a..4dd7626835 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -45,18 +45,14 @@ static bool trans_BADDU(DisasContext *ctx, arg_BADDU *a) { TCGv_i64 t0, t1; =20 - if (a->rt =3D=3D 0) { - /* nop */ - return true; - } - t0 =3D tcg_temp_new_i64(); t1 =3D tcg_temp_new_i64(); gen_load_gpr(t0, a->rs); gen_load_gpr(t1, a->rt); =20 tcg_gen_add_i64(t0, t0, t1); - tcg_gen_andi_i64(cpu_gpr[a->rd], t0, 0xff); + tcg_gen_andi_i64(t0, t0, 0xff); + gen_store_gpr(t0, a->rd); return true; } =20 @@ -64,17 +60,13 @@ static bool trans_DMUL(DisasContext *ctx, arg_DMUL *a) { TCGv_i64 t0, t1; =20 - if (a->rt =3D=3D 0) { - /* nop */ - return true; - } - t0 =3D tcg_temp_new_i64(); t1 =3D tcg_temp_new_i64(); gen_load_gpr(t0, a->rs); gen_load_gpr(t1, a->rt); =20 - tcg_gen_mul_i64(cpu_gpr[a->rd], t0, t1); + tcg_gen_mul_i64(t0, t0, t1); + gen_store_gpr(t0, a->rd); return true; } =20 --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207950; cv=none; d=zohomail.com; s=zohoarc; b=YmkCanwPm0/S84SDN15rpQvQNKf8yJJXIznEWhWUwtJym3kgmMesS7rZC9ZfoWZMW4gakM3i1gpNQNDcqEkZElL9KmivMyP00yUxBSqrcjja7K1nDQPbIVTJwMMZiLp/xdhSIDOH6Q6rTBHznOfhQOOaWOXJYLm1e9Zc/MbweqM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207950; 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=dHHO0+eLtIM55QW60taazGzRUaV2VP4TeBWDtHdLRxw=; b=cXQnJZtDpe3nj7KTy21KYHSEATitFL9bqlFsUB6ZikQVzcM4ruHKO1va6uBJg9t4O2y9y382SRu/wgEUKRrJy/ScXGJhoC61qQiOQbWkuOxhfv2j1yTWIWP4nlEvhePjlnAZ4soWjdyJK6un+EQXnDjMTK9R2wdcedzEez7mMdk= 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 1779207950920432.80864918508996; Tue, 19 May 2026 09:25:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDc-0006fi-VG; Tue, 19 May 2026 12:22:57 -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 1wPNDV-0006ck-7E for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:50 -0400 Received: from mail-oo1-xc30.google.com ([2607:f8b0:4864:20::c30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDP-0000e0-F2 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:48 -0400 Received: by mail-oo1-xc30.google.com with SMTP id 006d021491bc7-69d42abd04cso1019094eaf.2 for ; Tue, 19 May 2026 09:22:40 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207760; x=1779812560; 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=dHHO0+eLtIM55QW60taazGzRUaV2VP4TeBWDtHdLRxw=; b=r93FKdaETjGmj/J/SWnT2Mbt/QSs3gwHjvVajDEUztjmZCfEI8Q9dtSx/OWWj8/EgG RcZ26sIGopifWhLCDuPRB36NQWK9gqfoo8ktkIAvFpFN5KW3OGBM/T33TECG9EFLH/s8 qTYm1PikUevfFerzwr3pZDqE5XQd/9oupULvgD8Xb32NHWuX5UZ+tOwKW/+eVTQctE68 w7+g6G4KT0m2yeLlR5gp6uIFz3uxsP2hsFLzRtJzNteNlfyQsfY6Adtb0SWaQVuSJ4Yz riTMtUD22SipmyI17vegMVNsSp7JybEC+ruYBnWdYXbf6Zs3J0b2+/+XepXwLIIExKdH mc/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207760; x=1779812560; 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=dHHO0+eLtIM55QW60taazGzRUaV2VP4TeBWDtHdLRxw=; b=S0GwSNvxCu7ZiFh762VNyMy2JAf3o4ukRwj6SLANhaZhoJXxoi13gPlmrlnIANGnk/ A6VtZaMI/8+4pRxpCO5xEHGi0ZO2a1csII3rc9ey8tQDOyiEhxZwZ42FwelYT3Qf2jUo vkZyebqqD+hjqS3MnYMV0k/M+jSVhjc32U2WaZCEIjkYCGozX/QnVOxrkxsAfF2WsNGk UTX75/xqsHZefTHqPOp+9PjcpDOMJMaKQ67zFw6zkkkacmr4RQgKm+VH3RzmGTUoOplG WeWPf1PnLF06k1qMD/Tjw36gaYpjsPY6zaRpKu8UKZR6QchySIAk3Olp6Ie8JpbY52nP tp3g== X-Gm-Message-State: AOJu0YyWJ5wycQrFOJcuuCn1Hl8APeh/oJJUsjWSs8HpxAeor1XY4Ml/ w7hevYcImbgXZYMr482MSfHiXvZ1kqtGqq6dWnPnf8AuQpIrlOmdiMEo X-Gm-Gg: Acq92OGhTXfoCdkMWBXVZoiUROR6/E5qJKpgbHdAARWBMPfgsQdMN4fXr76OuxmgdgX EKmOsxGAM3g8XJ2Qb5AyKIc44qeM35woVEVVQ9UWhhd/zWQVKkUDNsyvXKgQTIWJInqoQRuZVZ2 vLwtTV2G9BdzPwp+3B7EtFLTMiniY52B88MTkVUs0p1xz6mfk1KpI7vjYnQS6LDmxEGwNufQwmy 04EKEvwLBp8XDGpw7UcALYaA/RFdEI4YmMP9LReQCWdtkgOjNsvIm9aKtwYO9MvZjuhdk5a7usK Tzc1KWhYmOZQJ5XAPZppiFf712F0iRoZhvnIjt9+5ttUt/c9cRbLJfq5/NoGNtUdj1rW3H33flN oyR1neOrusSae8iBmoGS+GhKR/ti1eC8MpJGoH7D+8gaimfRQObFswv+laROw7JVPJjm6yx1s02 ELTAlzmSA1bRed2CMUubkmKJFxe1hh05mY3rqUW8s65rwTadmp/YL2rDnihjrpB0dk0gPHe38Ch o8evuvmLhAeUxdJza1/geM3ULBomwihHns/LtMVkTXymk4MeRgxpCOQCl3KnWWdNGj5cTW0drGx QMs= X-Received: by 2002:a05:6820:2685:b0:67e:36e9:79ac with SMTP id 006d021491bc7-69c9431b961mr12362273eaf.27.1779207759897; Tue, 19 May 2026 09:22:39 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:07 -0600 Subject: [PATCH v9 05/40] target/mips: drop Octeon zero-register fast paths MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-5-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::c30; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc30.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207952520158500 EXTS, CINS, and POP route their destination writes through gen_store_gpr(), which already discards writes to $zero. Remove the remaining translator fast paths for destination $zero so these Octeon instructions follow the same shape as BADDU/DMUL and the generic MIPS translator helpers. Reviewed-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: James Hilliard --- Changes v2 -> v3: - Remove the remaining destination $zero fast paths and let gen_store_gpr() discard writes to $zero. (suggested by Richard Henderson) --- target/mips/tcg/octeon_translate.c | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 4dd7626835..b7531653e5 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -74,11 +74,6 @@ static bool trans_EXTS(DisasContext *ctx, arg_EXTS *a) { TCGv_i64 t0; =20 - if (a->rt =3D=3D 0) { - /* nop */ - return true; - } - t0 =3D tcg_temp_new_i64(); gen_load_gpr(t0, a->rs); tcg_gen_sextract_i64(t0, t0, a->p, a->lenm1 + 1); @@ -90,11 +85,6 @@ static bool trans_CINS(DisasContext *ctx, arg_CINS *a) { TCGv_i64 t0; =20 - if (a->rt =3D=3D 0) { - /* nop */ - return true; - } - t0 =3D tcg_temp_new_i64(); gen_load_gpr(t0, a->rs); tcg_gen_deposit_z_i64(t0, t0, a->p, a->lenm1 + 1); @@ -106,11 +96,6 @@ static bool trans_POP(DisasContext *ctx, arg_POP *a) { TCGv_i64 t0; =20 - if (a->rd =3D=3D 0) { - /* nop */ - return true; - } - t0 =3D tcg_temp_new_i64(); gen_load_gpr(t0, a->rs); if (!a->dw) { --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207826; cv=none; d=zohomail.com; s=zohoarc; b=NwEoQSJVt2+xjnOXAZi1ZapkeUSom6NIog4AHge9B8a7MWhuQTvb7GQ+HeR1c8l0e/tmDUhafcVX/VMWKV4qxFJ65ikVrlDi3bjfaEBjIE2b5eWb5heJ9iQWhAQ4LJCQIBdj/J4N+VEDda7yL5FvD+zhz+w/t4tpUg2A0LUSi80= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207826; 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=iNGUkUQb5J29ukIe0u9qyTma9foPdK9x44s0U5JWP3E=; b=FSykqadkf/DnacocmvMf3L5xpViS1yGGK/41wCA+66yGSjDhv3lFA3hj08VKsoZcxEUK8FFzOmmRElQv9OJ0xGdPgdjRMlwO1yyp+imHP2jv82KhzuwQG3QNZLtw+Gc8EVim76eVjyZIN3Iw5uf2Jl0ikOTrvNUcFt9+Ad6I1MQ= 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 1779207826962998.241399799286; Tue, 19 May 2026 09:23:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDi-0006il-Gk; Tue, 19 May 2026 12:23:03 -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 1wPNDV-0006cl-7e for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:50 -0400 Received: from mail-oa1-x30.google.com ([2001:4860:4864:20::30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDR-0000eB-Dt for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:48 -0400 Received: by mail-oa1-x30.google.com with SMTP id 586e51a60fabf-439712b3416so1159022fac.2 for ; Tue, 19 May 2026 09:22:41 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207761; x=1779812561; 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=iNGUkUQb5J29ukIe0u9qyTma9foPdK9x44s0U5JWP3E=; b=k4IsYIdssMvI8DFE+6UqK0QgD6wvluybwUAZNRe+6yS1Jk1cNPaUOdWO5pcvV/BaOa f1rxPiniNVfcLk+UrShYIBTJHwjPBfmH6gZR070/G8FvVPAn27yVzFR87TNRbNLx7Oht bFsiLadeeCJr+6vuc3dEAqAqrf3O1ctGu8dEY6ak0PIQq0z8bm8wmClCUDfftJgN6cwL cgyiWS/rduLznPH0+BrOlx9s/lZIY2ESGqCgryLN9MZ9SjNBEpoMr9Kxt8YzvVL9CNBl 0RMnh0nXPxiWQD6r5JHwuNW0Ks4+euapadUmRrwgNofD0wD4XGaR8jIuv3QQ9h7Y2IDE AnCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207761; x=1779812561; 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=iNGUkUQb5J29ukIe0u9qyTma9foPdK9x44s0U5JWP3E=; b=dZBTGSQ+itRHw0TviAbzgxHKTmjizaMgifNtd3LtthwbabzqSssPBxG7zjQLPtaptC 95RC4TMMg1zAC5ePmctm6oNFGNlbsOmrbmNIA9Qomtbrpq7vf2BoxRbkGUW4ucro/Q8h LbFysOBvw1+pctXv7n58e+3h8/YC/J7dJkNsa0sdEQgu5HlbWlhmxOFxwmMWMaTyIsKE d5cTXVwiXL4/TR8EwoAGUjJ8VmMM00CJF1Z3+n6NEvBT2Xy7jiKEpwgIsI4hS141pvIl pfB3GzhvwDtBXDocMlOK8NPkWXRnHpqXbzF1hMp2+EUkM/7OR0K1Owt+GZoQqADHnJT1 aT5Q== X-Gm-Message-State: AOJu0YyJ5v4jzTZZ2amRt1Jl7ZmdcHbKxOSAhNkiLNA+Se5pO7Uk+vLz gUFoV/36FFNsfbUk7wYkaQoRA0O0mv1f+weZASkYwHZSBykUcuU1dYgf X-Gm-Gg: Acq92OE/Xi0yrsoYkOkVl86WHdrBZQhilFtKCK6aM6wNpUgo+s19tazdB8ycO6YRM5L djoKTP9Xoqqi4+RiI55/J0cfAt/P9ufhDn6Y/QO//dTApt1cPTllCo1w6Sq2Qp6FNDM6+Ni61j2 dml1K3ghQQIaqqFYb/Q1BpboJRaWqISuGLDfH38LmlR73KhaGmQ8wfbAu/d4Z3Os3IOQDk8gJSN nJP03AeeIows6N63NXjYoPtMYijCe7kckqmjFKzMioXbbHvJKI0uxYGvdCN2yKEIGam52qDgSi7 CGNDbfe2Xu0xkOVfVJIZF7/Mbq+vmQ7/epjbsrQjxkw1wEA9apYwuvMJDT3T04nKRDdj+UiKRWP JJ5wH5Z8JLygTIRDDHEgSUFs27QIMuvEkg10pKl9/r6Ixw9MquQ0qt82Kw/WvXK82ah+pOKcY72 wMWcx4Mv0ZHHlx+OO+LFCa/otv3f/NbiS0PEVHTMY9DdYcHEfbr4pIe5opCUSAtnFP/uBD9Qv74 vBPtYuP+f6X9Kw+i5M5yHmOalxPsD+/jpAUhOlJT2xQH5qlPYWf86+3zMIvGUB+TueK X-Received: by 2002:a05:6820:f013:b0:696:8325:f7f5 with SMTP id 006d021491bc7-69c94330876mr11702214eaf.4.1779207761090; Tue, 19 May 2026 09:22:41 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:08 -0600 Subject: [PATCH v9 06/40] target/mips: split Octeon SEQ/SNE decode MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-6-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::30; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x30.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207829297154101 Decode the equality and inequality forms as explicit SEQ/SNE and SEQI/SNEI instructions rather than using shared generated SEQNE/SEQNEI entries. The explicit decoder names match the architectural mnemonics, which makes the translator entry points and trace/debug output easier to correlate with the instruction set. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard --- Changes v1 -> v2: - Split the SEQ/SNE decode cleanup out of the Octeon arithmetic instruction patch. (suggested by Philippe Mathieu-Daud=C3=A9) Changes v2 -> v3: - Remove the decoded ne field now that the instructions are split. - Reuse @r3 for SEQ/SNE and pass the TCG condition into a shared translator helper. (suggested by Richard Henderson) --- target/mips/tcg/octeon.decode | 7 +++-- target/mips/tcg/octeon_translate.c | 52 ++++++++++++++++++++--------------= ---- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 102a05860d..a2bfd0751d 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -30,6 +30,7 @@ BBIT 11 set:1 . 10 rs:5 ..... offset:s16 p=3D%bbi= t_p # SNEI rt, rs, immediate =20 @r3 ...... rs:5 rt:5 rd:5 ..... ...... +&cmpi rs rt imm %bitfield_p 0:1 6:5 @bitfield ...... rs:5 rt:5 lenm1:5 ..... ..... . p=3D%bitfield_p =20 @@ -38,8 +39,10 @@ DMUL 011100 ..... ..... ..... 00000 000011 @r3 EXTS 011100 ..... ..... ..... ..... 11101 . @bitfield CINS 011100 ..... ..... ..... ..... 11001 . @bitfield POP 011100 rs:5 00000 rd:5 00000 10110 dw:1 -SEQNE 011100 rs:5 rt:5 rd:5 00000 10101 ne:1 -SEQNEI 011100 rs:5 rt:5 imm:s10 10111 ne:1 +SEQ 011100 ..... ..... ..... 00000 101010 @r3 +SNE 011100 ..... ..... ..... 00000 101011 @r3 +SEQI 011100 rs:5 rt:5 imm:s10 101110 &cmpi +SNEI 011100 rs:5 rt:5 imm:s10 101111 &cmpi =20 &lx base index rd @lx ...... base:5 index:5 rd:5 ...... ..... &lx diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index b7531653e5..5497ddfb10 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -106,52 +106,54 @@ static bool trans_POP(DisasContext *ctx, arg_POP *a) return true; } =20 -static bool trans_SEQNE(DisasContext *ctx, arg_SEQNE *a) +static bool do_seq_sne(DisasContext *ctx, const arg_decode_ext_octeon1 *a, + TCGCond cond) { TCGv_i64 t0, t1; =20 - if (a->rd =3D=3D 0) { - /* nop */ - return true; - } - t0 =3D tcg_temp_new_i64(); t1 =3D tcg_temp_new_i64(); =20 gen_load_gpr(t0, a->rs); gen_load_gpr(t1, a->rt); =20 - if (a->ne) { - tcg_gen_setcond_i64(TCG_COND_NE, cpu_gpr[a->rd], t1, t0); - } else { - tcg_gen_setcond_i64(TCG_COND_EQ, cpu_gpr[a->rd], t1, t0); - } + tcg_gen_setcond_i64(cond, t0, t1, t0); + gen_store_gpr(t0, a->rd); return true; } =20 -static bool trans_SEQNEI(DisasContext *ctx, arg_SEQNEI *a) +static bool trans_SEQ(DisasContext *ctx, arg_SEQ *a) { - TCGv_i64 t0; + return do_seq_sne(ctx, a, TCG_COND_EQ); +} =20 - if (a->rt =3D=3D 0) { - /* nop */ - return true; - } +static bool trans_SNE(DisasContext *ctx, arg_SNE *a) +{ + return do_seq_sne(ctx, a, TCG_COND_NE); +} =20 - t0 =3D tcg_temp_new_i64(); +static bool do_seqi_snei(DisasContext *ctx, const arg_cmpi *a, TCGCond con= d) +{ + TCGv_i64 t0; =20 + t0 =3D tcg_temp_new_i64(); gen_load_gpr(t0, a->rs); =20 - /* Sign-extend to 64 bit value */ - target_ulong imm =3D a->imm; - if (a->ne) { - tcg_gen_setcondi_i64(TCG_COND_NE, cpu_gpr[a->rt], t0, imm); - } else { - tcg_gen_setcondi_i64(TCG_COND_EQ, cpu_gpr[a->rt], t0, imm); - } + tcg_gen_setcondi_i64(cond, t0, t0, a->imm); + gen_store_gpr(t0, a->rt); return true; } =20 +static bool trans_SEQI(DisasContext *ctx, arg_SEQI *a) +{ + return do_seqi_snei(ctx, a, TCG_COND_EQ); +} + +static bool trans_SNEI(DisasContext *ctx, arg_SNEI *a) +{ + return do_seqi_snei(ctx, a, TCG_COND_NE); +} + static bool trans_lx(DisasContext *ctx, arg_lx *a, MemOp mop) { gen_lx(ctx, a->rd, a->base, a->index, mop); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207943; cv=none; d=zohomail.com; s=zohoarc; b=O4RilIhAkI5jaI7n+dWPvWT9+YXvtX3Jr1DFuOf0G57YhjYkuFJCkSCToQ54x5LEN0GEEMmgPWwZZ8HPU3tb+f3PCT5UqLIpuNIUnOkQTTOjrY1ux1nmBj1OtyeeCYdMmrZltsgoYSlWKOEEuSkzoU5ikXczoYsJ6UC1pX2hXeY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207943; 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=RGGA0O2hVedaSvcxfeu4Aj34rW6xAzUt7vUilCpMyqI=; b=M2263FgpenqxXLVY3mzuW5/QyXWe9N7ky3xy4L5DavQdTxH7/mFN6Do7vEkyopXLP5wkuVXyFA4pKMBeK3gPtu4eU+LUBzllRv+NljTQO+WqLP5vtxcP8krrmPGAhd36dkYDgcPD9kQcGtylBLwP1MhvUw5vwEkyR/8HGBFsoD0= 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 17792079439231000.3587556395596; Tue, 19 May 2026 09:25:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDf-0006gm-BU; Tue, 19 May 2026 12:22:59 -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 1wPNDX-0006d1-12 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:52 -0400 Received: from mail-oa1-x33.google.com ([2001:4860:4864:20::33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDS-0000eI-R0 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:49 -0400 Received: by mail-oa1-x33.google.com with SMTP id 586e51a60fabf-40946982a78so1162683fac.2 for ; Tue, 19 May 2026 09:22:44 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207762; x=1779812562; 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=RGGA0O2hVedaSvcxfeu4Aj34rW6xAzUt7vUilCpMyqI=; b=lJNO1aWLQiOm4Kac9oz8pUhGD76BjIyiw3bUYwBWRxVX/5EY9Zpfi8qVle2i4ekdGx oy0iZY8SXVOl8AZX1q6RaumYL8EhQPLMkV9i/HjsUFHUt3ywR7HeIwCr/ldCkm2OojjB rNCAtlroYYHN+nsZhPNPYbiwtZwAnSVIN7+1WWCnaAUR8z5f/fvjBcuWbZOivC3AKyGK dHumtuxcOwcUXJohPd/Ge3EkKE99qU7B6SFnArhxnlyWU7cEu7C2JPyD8dufncxlY6gx 7A5wkqY4uhQF61nRqt9I1yyXJHYLTdPQvx0wgMLqdFM5l9xy3RzeWc3X+a3m2tHkr6u9 kvCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207762; x=1779812562; 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=RGGA0O2hVedaSvcxfeu4Aj34rW6xAzUt7vUilCpMyqI=; b=sum2hL6NT1oE2HXI/WbH5g2ItDXvsFfCVgrzLcHcpFpWmFsJsnW2jdqD1HyTe7jmJl 6hezz4XZTkRtkXTg1YW8/335antrxRZF0fOQYmvUetYLbMF06qdUy1tYxLdZGwl+Qzcu nmXXm107Eml1qpaVjZtiwJZLzjCWLHJkVj57W9afZQsmcZzbaBfhQeEmkvQ3lPgxoty9 TuyVHzZKHuBStIssntPw3g1jwh+S+7WdhJL58OKhBlCD4OSQ2fKHgjEI7p4NXl3E63C7 Mxeri7tkoUzzZ1I1rDM7+PCoj7VRHFlbpASgbVaTZRwysjL2XBQz9Si8pnVV/Woqx4+g 8vGw== X-Gm-Message-State: AOJu0YzUj7HPuXt0ess4dR4Liroz56nKakaKstHT538S6oUfzavMWbNr T9MmTnjEbXcLowp+xJ/Mik8Pe9Th9J9J7NmnnsMjw4fCO8J6mE5xgr+o X-Gm-Gg: Acq92OH0j6AQWABxYdPFypL0CKc5A3Se+ho/VxKR3dmvS1i48YDQkjGjH70ZzPWMWhi YX4bVam646D4lJ3eK74kKJnG6eqKuv4wVZ8eaUUf50nd6TrM6zWM5ltEhKA9ZQ4ETCmC9R1ZTqa AHOCsLY0yV3w/fHVqTnUk2lDGCH7y6x+dDWJDMlgg58oO7fXtIV13+9z8O/WfP4BpdLY01jda98 Fp9jBBguz7nihR85vq84c5BNCcuuSBNcWQRzkMk4DLdPi043gDHS9qVIPiZHHEDHc69/IgKUVSC kXV/CMi8y1H33bJlb8GOAegRjSP/n4MHLVVlyg+zCKV8OEEHDT57eAxyyyDcKeGdlFRgDKEmfMa 2YAv6IBEKcAVCGPaxhvqjksqhHw1Ilw8D0gPt3GstrPiRBQ7oK8w9afcl/XkhI40jC3l8nt/xNk 8HeAhiCH6WexLgz1gVssXnybQomakN8bj0x5ttfM5M0fWUzZcYXGcSAdtFpE/SFb1BPPWAIDIxn KVpC2+L2GmfRYEW98Q7mRffi7oRgxYslB+Ws46sSdcuUwpkdGJYNGqVuIePxmVKhVim X-Received: by 2002:a05:6870:3d9b:b0:439:fced:ed2 with SMTP id 586e51a60fabf-43a2d96277dmr12641384fac.4.1779207762059; Tue, 19 May 2026 09:22:42 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:09 -0600 Subject: [PATCH v9 07/40] target/mips: add Octeon LBX instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-7-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::33; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x33.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207944398158500 LBX performs an indexed signed byte load from base + index and writes the sign-extended result to rd. Wire the existing indexed-load helper to MO_SB so Octeon user-mode binaries can use the signed byte variant alongside the existing LBUX path. Reviewed-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split LBX out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) --- target/mips/tcg/octeon.decode | 1 + target/mips/tcg/octeon_translate.c | 1 + 2 files changed, 2 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index a2bfd0751d..efb1a48b38 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -49,4 +49,5 @@ SNEI 011100 rs:5 rt:5 imm:s10 101111 &cmpi LWX 011111 ..... ..... ..... 00000 001010 @lx LHX 011111 ..... ..... ..... 00100 001010 @lx LBUX 011111 ..... ..... ..... 00110 001010 @lx +LBX 011111 ..... ..... ..... 10110 001010 @lx LDX 011111 ..... ..... ..... 01000 001010 @lx diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 5497ddfb10..451737cda1 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -161,6 +161,7 @@ static bool trans_lx(DisasContext *ctx, arg_lx *a, MemO= p mop) return true; } =20 +TRANS(LBX, trans_lx, MO_SB); TRANS(LBUX, trans_lx, MO_UB); TRANS(LHX, trans_lx, MO_SW); TRANS(LWX, trans_lx, MO_SL); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207951; cv=none; d=zohomail.com; s=zohoarc; b=k1TF72DnCvM89RBBHFbAvLbvNyqZULSqWdMetAbiUrvzTMh0/DnuOuDhaT/pomUFlLD/mbUjrWd5o6QO0FAi/5vcGjpH4Iq2s1LvSdOP6rgdDAKn1+6rPCe5H8C8BBn52x+XF7qmFRzT/tykOkwf8epuYYEfdkJEoT6iutoPgvc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207951; 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=Lf7g3NWu9At1XLoLVfrABfLqdMiHDWY7+mwRcC6wpBQ=; b=YM4quaCKSKTgPk0xQj3LojUwUJEZwhURFQc/0574k4wbEqMBmU5uypaUxaCLWI8E30eNLWWFK9lepNBg2zbLpD88zaJjEsQESWc8TPBsyjbMUCQZB2h2XCS8emSdlAkrpwbFrJnJ4hvEAus/aG8TQACxO4pYnzLKZOBEzgHWcC4= 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 1779207951786453.73892726197664; Tue, 19 May 2026 09:25:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDi-0006ig-6O; Tue, 19 May 2026 12:23:02 -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 1wPNDV-0006cq-PB for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:50 -0400 Received: from mail-oa1-x2f.google.com ([2001:4860:4864:20::2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDS-0000eH-Qd for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:49 -0400 Received: by mail-oa1-x2f.google.com with SMTP id 586e51a60fabf-43a2ad7bcc4so1587972fac.1 for ; Tue, 19 May 2026 09:22:43 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207763; x=1779812563; 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=Lf7g3NWu9At1XLoLVfrABfLqdMiHDWY7+mwRcC6wpBQ=; b=bJMutUUOAfm5uc6GnTOJgld4kfK6MZ7w4ajPB4YNRIJu0BzqlC+Zr9Dra/RNQed4mL htswpkmcRWz/LTjPYiho261SIUbovwovT4UMaciBLvUWULpy9R0mV2aZJbmcUh0HHd5T XjDwDag0Bf2e0T6vqeI0FuFznRFzZ8P3ucPI4q5rplSoH1cE27BlZ1LeJPHrZI7W5u6F bt9M7EVH8XzH08hR5bIaKi4NmcC2RCWSo7chIgWZXZmYy9279vX8cyiMrGnDXy7o7zvz 3GwxxWK9ynDCZ5Ejc5Prov9Jaet1zoZgVQl/H7w4uUP20sWSAwTJb4eJI1OSKStvl2S1 LRQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207763; x=1779812563; 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=Lf7g3NWu9At1XLoLVfrABfLqdMiHDWY7+mwRcC6wpBQ=; b=LKZrn8PgKDik+N9YyeenEawYOEAHTcmI6jYSKKs0JTGD4yStmCKuOHD2tPyvP5NyD/ pncRSJ9cnBe9wwVhYikmzRdF1Xmbeo/iEPyAIrjQ5jgON9VGnk3RmU0JPi4Yu05sVs43 x2JRDSU7pILLnYX3XCO6EWR6a+RiuXcS8od2FG2MJhSI6xXr7jSuK0q3kcwDMxe6J/40 MBtYzRWo7xEg2yZvA0gQ74c073m81DEAreCUcC+PWSMAkPIBqBXEpGiyBsH3FnKdJV7S h5ZZgPZh9fEGavYQIVunWJ4ZWv1Y7j3wOKRf27Ytr0GU/9EmlQLCuY6gqT0qyVB1ZjtU 6JFg== X-Gm-Message-State: AOJu0YxNE2CP6eD1tsK7V8hWltl+ayS0qQ7L9S5PtXtem7J/I6t3USR0 s4NbSleZHHm49LxWbMub6VhInl43niBI1wIcYxSaplDlVFvv4Df8FV+h X-Gm-Gg: Acq92OEFZo6PB0Cx0extRxle1ATSiGq/HKnw3mfDT607ojN98RqU3o2bjhVu5q63hML 1c5vmVec1q91vgWz5A+QHNwWHx45RzGSE1efPS2ldCRn4P6Z5ctbln5iWcmlpHK7U3/JmWjTDOA 14X6GXWMNWkOHtRfQTcNvHjzVUixQUmdIMd2zPKZmJRl/AqXyWaDYXVg35qmo89J2wZ6xmLtQ0R kl40bNzeWoGXZOW39mJfJyhSHyzOzrEvp9HKRZFCkmp1G62UeAweZn6cVsi+CxY4gwezUnd/+4N w+BuwYz1sGIbQ5QcEm/gb1f4/0xzcRfrgStTydkmssn/+v/c0/zeV0sShHQDNZ7gdbknd4mKtP5 pTKJJzHbqhPNy8IOem9BEBvh5LmcSQU8Zu7fnEtWDr2F1wncrviY4IUX6ZugtbuJBtZHyRVn8nf JtoIMaOJPmoNcXpUwtlK9cODNksdYRzrYqUJjHadfhby5WYilW7Kw2/pcXjVi0o8IDUT9FhceRE AsxYB+ZGDweuD42AAL/lWsPjj/W1JbAFIj0ly3BP3wFgMduT6/4uFRvvuctd5AkayM6uj+tj9D+ Myc= X-Received: by 2002:a05:6870:41d1:b0:417:f38:f54d with SMTP id 586e51a60fabf-43a2dda1925mr12977387fac.29.1779207763005; Tue, 19 May 2026 09:22:43 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:10 -0600 Subject: [PATCH v9 08/40] target/mips: add Octeon LHUX instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-8-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::2f; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x2f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207954364154100 LHUX performs an indexed unsigned halfword load from base + index and zero-extends the result into rd. Add the decode entry and reuse the common indexed-load translator with MO_UW. Reviewed-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split LHUX out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) --- target/mips/tcg/octeon.decode | 1 + target/mips/tcg/octeon_translate.c | 1 + 2 files changed, 2 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index efb1a48b38..8a755075e8 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -48,6 +48,7 @@ SNEI 011100 rs:5 rt:5 imm:s10 101111 &cmpi @lx ...... base:5 index:5 rd:5 ...... ..... &lx LWX 011111 ..... ..... ..... 00000 001010 @lx LHX 011111 ..... ..... ..... 00100 001010 @lx +LHUX 011111 ..... ..... ..... 10100 001010 @lx LBUX 011111 ..... ..... ..... 00110 001010 @lx LBX 011111 ..... ..... ..... 10110 001010 @lx LDX 011111 ..... ..... ..... 01000 001010 @lx diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 451737cda1..f897b42807 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -164,5 +164,6 @@ static bool trans_lx(DisasContext *ctx, arg_lx *a, MemO= p mop) TRANS(LBX, trans_lx, MO_SB); TRANS(LBUX, trans_lx, MO_UB); TRANS(LHX, trans_lx, MO_SW); +TRANS(LHUX, trans_lx, MO_UW); TRANS(LWX, trans_lx, MO_SL); TRANS(LDX, trans_lx, MO_UQ); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207937; cv=none; d=zohomail.com; s=zohoarc; b=gOGrIDYI6VpMfcwyRETKsXRnXcZs9n3XxtZWhYAKqeoAMSfebrO4BmaxkLk5SbM42VeMPCafVehcUHDhal3wnb9KWdHQFJgjP8V3BRMKNJxEZQIxFStHKFtUgg6chefADAYJ7ElP/v8bEEy9UHsQDzEyP2RBPRm1rSGe5IfzU+Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207937; 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=7mCE7v1CMCCdQhzPLrKhoNSMg70i/ioZcq2tZRejjeA=; b=HY7dxrvVOERGkT1Zt7PBrmSbUxos0iBSi8OJ5Tfkik7hIIBA0l1+4y6Gyp4FtWTnbLYJsnrjdOcwUDAjuHgKPpDY2JEOcQGIelFGvmoXhjTgOTCT14wAdi/lrZ79tBdUTZAD8GDqCFH8tEiPGRHeznQQRUUx6c+aT0EG0CwsOHo= 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 1779207937968426.4716319619273; Tue, 19 May 2026 09:25:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDi-0006im-GK; Tue, 19 May 2026 12:23:03 -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 1wPNDV-0006cr-Q4 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:50 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDS-0000eP-R2 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:49 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-43a12c2ecedso2391415fac.2 for ; Tue, 19 May 2026 09:22:45 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207764; x=1779812564; 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=7mCE7v1CMCCdQhzPLrKhoNSMg70i/ioZcq2tZRejjeA=; b=bHMLHfeEOPpyakoSI9xauWtRodtSTzj3CTdbnwJFZspl/Xs60j4M8w8MBUTdeRlOBn jvGunRi45Y123xa1PptVVGWmNavFs3hzXGvhArmfOQSHTb9WHWbrH/sQ2tTbpTDb9/xs kMsHYX1ZaFakjN0WBJ0FMyPakd96q2DKZbcpVCka6s8XcExawWzOh50DmyWEBypnlSIz lFmp/GoG4AbPaBzg7bkErH31g65CKzXZAbVWbDkMjWkNAAZj3Dxl5QXul5tvszO1JqQs Mh8Lty79HgRe2K1GpQ3/FunirAb1tWtBMPYOs7yxT3hpdvNn6ODvrhrItbEJgk9tDlxh eEMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207764; x=1779812564; 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=7mCE7v1CMCCdQhzPLrKhoNSMg70i/ioZcq2tZRejjeA=; b=BYsog+STj9MiU5kxWD57fjcegkgE21Gn47FKYZ1YdfdnfGdUZU5p/mxOJsTcN3aj5r YF3+MVgZ52Ix3o2crWF2KSH74aoI/fTBSrAbV3uEtpBGJki5HA0ATsYOJFPE3rdQ1RjU Fl2GWOLH+i9vUIOLQG0cFO0FOUIT4f9woZ0lILn0co+dkMDj3x20bLkaqykCOFOPxY/O YyvE1GMUng4gHO5Ql1P+xTUfBGgEKs4b+9JIYhj/9isWoEjSIERAsaAajWQAm4vHRuvJ Rz8ZLMz8FHugS74oqGsf12R1JF+T6ndt0bdfsbkRP7SFenPcgvo2BkK1fqHrXe6KW+wu E10Q== X-Gm-Message-State: AOJu0YwMaUssKiHYXsMjWwtwulGnpLYbRZiqy5G1dxjlp6kEkCkx3pmw JRZ5qyDyM2VUHm/LB0TLCMxFEUtKlUnFiek7O6GFpHLG6rAoXmXLs8SKT7Qcow== X-Gm-Gg: Acq92OEPbz9icdNObTA7C3IGTIiBY3vIKzp50i1xGkfXUPXshrmX9a540KFMJJH/Mhz DAi+mGwTIooUjXte54HdBx9i4PFMguP0A88/N6Yij87KnpKikf13r2p04RPl9sCAHHAtkoUNdRf DZLJ1s61oASxTXFO5bc68LevBrJ4t/W4n9KyfqFzHipQGb9OuJynpC0Pzfp/Omb+6bxRsP4WCFy 6EjCpjlD1oJXQoYlG29mHCDtLCnpIGoSXDSAzP6/fwtZ9sC73gFUUd54BgYD0XhKAjhwWITEva1 m61hziLf82KK835bZDxNk8Bw7fKo7G1P3iWKtflzmBoM3tnBz52kJG41ADMHv4+itxUa+gApJ65 hD4zXxMip8hFe1FOpLB8taXBxaVzci/FaZtZfMQGwscHHFfhc3WZR0wtB4lVn85QzYSCj5WcD5G j4scEbEKmyrPHpJGZHDZm13RdfWgBbFYXWLahictTZKTrtV5ygCBOCK1jQL7EeNJ4rLoquZP8eh zqriJu2mcc6ETMCKhh4nV55nziYM6OH2/al5IXov/GTQHw+Oh20Lp59C5pqGyoCrY+3 X-Received: by 2002:a05:6871:14b:b0:430:b01:1f79 with SMTP id 586e51a60fabf-43a2db5afabmr12658614fac.2.1779207763877; Tue, 19 May 2026 09:22:43 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:11 -0600 Subject: [PATCH v9 09/40] target/mips: add Octeon LWUX instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-9-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::31; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x31.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207940118154100 LWUX performs an indexed unsigned word load from base + index and zero-extends the result into rd. Add the decode entry and route it through the common indexed-load translator with MO_UL. Reviewed-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split LWUX out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) --- target/mips/tcg/octeon.decode | 1 + target/mips/tcg/octeon_translate.c | 1 + 2 files changed, 2 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 8a755075e8..db7d5f55f0 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -50,5 +50,6 @@ LWX 011111 ..... ..... ..... 00000 001010 @lx LHX 011111 ..... ..... ..... 00100 001010 @lx LHUX 011111 ..... ..... ..... 10100 001010 @lx LBUX 011111 ..... ..... ..... 00110 001010 @lx +LWUX 011111 ..... ..... ..... 10000 001010 @lx LBX 011111 ..... ..... ..... 10110 001010 @lx LDX 011111 ..... ..... ..... 01000 001010 @lx diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index f897b42807..401c4bd14b 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -166,4 +166,5 @@ TRANS(LBUX, trans_lx, MO_UB); TRANS(LHX, trans_lx, MO_SW); TRANS(LHUX, trans_lx, MO_UW); TRANS(LWX, trans_lx, MO_SL); +TRANS(LWUX, trans_lx, MO_UL); TRANS(LDX, trans_lx, MO_UQ); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207833; cv=none; d=zohomail.com; s=zohoarc; b=LeeUGUuY0P5RiENtRuWCYGUJATglTQbsBJ3IW9IdiLTFXG6g3O2cwN1avajgyfcOewSMjkWtQcXTMWYOG3nNKuTLWgDZw8UW/2ascHztvN9CSKBEtCGT2IBwiXbt1qvgl7TwlUU3dn+DHwXzF9RW7y7oX3vo20Mgtzsr3w9vO5A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207833; 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=V+Z5Xa+4C9Lk0TNV9LgOzbpa9crqmSVwKd0svd97e8w=; b=l/0k6nOhSNSs/l0l9T8w4UtJo5tN9UyUX7Kd4Gqo+hLggXo+hIar5oT/guF9P4x87x269VbI8baubk8zI/cJlrKm2+lmIzWW14/HRcc6ByxVcmTY32qoxgPJ8VTS7JIxH3vULVN78aJ69dPIhWHFprM6AGg0HftZcGbWfxbQnTE= 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 1779207833756707.1493103486056; Tue, 19 May 2026 09:23:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDk-0006k3-TU; Tue, 19 May 2026 12:23:04 -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 1wPNDX-0006cx-12 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:52 -0400 Received: from mail-oo1-xc2c.google.com ([2607:f8b0:4864:20::c2c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDU-0000ed-U7 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:50 -0400 Received: by mail-oo1-xc2c.google.com with SMTP id 006d021491bc7-6949192b843so968215eaf.1 for ; Tue, 19 May 2026 09:22:47 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207766; x=1779812566; 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=V+Z5Xa+4C9Lk0TNV9LgOzbpa9crqmSVwKd0svd97e8w=; b=Fw6pLxQA7Fp4vrJV/bV3CARjHjpaMKnDFJwgQaceNzqaLgft6sj5+Ki2SFwB7PRACP CqiS4n9e6ggvd3ZdRjcrrT/vA9H9nR+aLm0RlHLlvHdWDCjNvmdotUhj/BScQBjaz6og MjEcEOaIIGq7SQXtzpuDfGln+8Cas7LY9STmP3epcIo7lLnpLaH2oJ5hSxxjQIWwLe1k dB+l5GhbAorJgZEQ+KEaRPpSaQoiTQBGSRNe80rvGPoUxUCjJK9b6I7IFFlLjxahLfPM 7Qh/TqEW174vu1eS1btWtMr8a7DYRf4V/rRyqGkDL5ZjRN4eup+MDwlotYkLxXZPXACY pivA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207766; x=1779812566; 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=V+Z5Xa+4C9Lk0TNV9LgOzbpa9crqmSVwKd0svd97e8w=; b=heLwdWrBh3pyk/9omjR5u82tYxQnrxHn2jF5xzbJkse7lccvPBje0bZ3FRstQyPP5p E6EmlKcH/lnn1d0OuwX8uL4t4uoB57DJzxtWBiDGwzerr6XLfeKiSQyZRbPVIDvzqe86 q5iTqqV4F0yTrZAjhxBoSaZ42Hey8sp1saaGr7nkeNkH63BvC88hsWKIsG8pXVp3L0um qsgkcqc3EjF0vOnqnMKinH9Nl+hNI19so4UxV9fl2t9+MdR/qfjA4VGLQS0y4lepHTh7 5pDsqUSG6t253dPDGh7YOra+K6bQWc9UCo8hbaZn0jlytDRuEn+jLpuR7tC2kGyRerNc k9gA== X-Gm-Message-State: AOJu0Yy380vIq1wayEe/rY/k4NuCG+b6AflY6Uam6sCu2OakGuvbpb9P /y2eheetKDIGSQ4XjxGhP0/GFclIJJ+Rgw3U8t4Qo5SWLV8k4hrWmDj8 X-Gm-Gg: Acq92OHGgEVLgKBYbcikaCy3s6J1rN4mKSAWoWFh9I98tJ5L1jxQH1bV7OtNtsCwS/6 wA7QGPS7LIz1zYb1HxJ+fqp52WgOza5sBAdYy2lY3TrtIG8Z42Yx8zMERnE9CxRgtbfxj7VAD8R RiuatM6aKEibKLl9XYRCX8HClDIGb3AhwYoW36pb1R+xuUmZqIbeoWHIeudPTo4Q9hiJTWIPcny ra6gA8hANnCnHjDhqUk0hTlMoU4bEjhzzNzV3LlenHmDPJw5HJO/+6qghTSJ95+pdNVZT/VAU0+ n6o4WvivFHkNiGarEEsfd6j/JuJzOjejDJT0oKTQnTem08+FGgw7d8RP+N/HVpYU01GAvZIfbTT JKtJu5ybV3DdjZiKWgvr0u5RaqxjDURuetxcmg/mwSVrWVNCM/6BMH21nsFBu8/OHB31z21gadg 8HFty5sampFTxBg1oHyByC0kDQDcQuwnmXk4oSKzSE+iPreiolXPZxVoXnHfD6j7OcBAbxPd7Cb ucuOne0370b+gYrAf/CfbWQTuHanM/hgMNiB7T3Bn2ITe15fdFKqjmSxVSVXCELe4eP X-Received: by 2002:a05:6820:200d:b0:69b:f252:c622 with SMTP id 006d021491bc7-69c9bfd597amr12315546eaf.57.1779207764810; Tue, 19 May 2026 09:22:44 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:12 -0600 Subject: [PATCH v9 10/40] target/mips: add Octeon SAA instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-10-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::c2c; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc2c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207834856158500 SAA atomically adds rt to the naturally aligned 32-bit word at base and discards the old memory value. Implement the common SAA/SAAD translator with TCG atomic_fetch_add_i64. The MemOp selects the word or doubleword transaction size. QEMU only has one Octeon CPU model today, so keep SAA/SAAD under the existing Octeon instruction feature bucket instead of adding a finer-grained Octeon+ feature bit. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard --- Changes v6 -> v7: - Use MO_32 for the word-size atomic transaction; the signedness bits are irrelevant for a discarded fetch-add result. (suggested by Philippe Mathieu-Daud=C3=A9) Changes v2 -> v3: - Split SAA out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) Changes v3 -> v4: - Gate SAA/SAAD behind an Octeon+ feature bit. (reported by Richard Henderson) - Use the i64 TCG atomic add path for both word and doubleword sizes. (suggested by Richard Henderson) Changes v4 -> v5: - Drop the separate Octeon+ feature bit; QEMU only has one Octeon CPU model today. (comment by Richard Henderson) --- target/mips/tcg/octeon.decode | 4 ++++ target/mips/tcg/octeon_translate.c | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index db7d5f55f0..d6b241de42 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -44,6 +44,10 @@ SNE 011100 ..... ..... ..... 00000 101011 @r3 SEQI 011100 rs:5 rt:5 imm:s10 101110 &cmpi SNEI 011100 rs:5 rt:5 imm:s10 101111 &cmpi =20 +&saa base rt +@saa ...... base:5 rt:5 ................ &saa +SAA 011100 ..... ..... 00000 00000 011000 @saa + &lx base index rd @lx ...... base:5 index:5 rd:5 ...... ..... &lx LWX 011111 ..... ..... ..... 00000 001010 @lx diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 401c4bd14b..f00692830a 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -161,6 +161,20 @@ static bool trans_lx(DisasContext *ctx, arg_lx *a, Mem= Op mop) return true; } =20 +static bool trans_saa(DisasContext *ctx, arg_saa *a, MemOp mop) +{ + TCGv_i64 addr =3D tcg_temp_new_i64(); + TCGv_i64 value =3D tcg_temp_new_i64(); + TCGv_i64 old =3D tcg_temp_new_i64(); + MemOp amo =3D mo_endian(ctx) | mop | MO_ALIGN; + + gen_base_offset_addr(ctx, addr, a->base, 0); + gen_load_gpr(value, a->rt); + tcg_gen_atomic_fetch_add_i64(old, addr, value, ctx->mem_idx, amo); + return true; +} + +TRANS(SAA, trans_saa, MO_32); TRANS(LBX, trans_lx, MO_SB); TRANS(LBUX, trans_lx, MO_UB); TRANS(LHX, trans_lx, MO_SW); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207873; cv=none; d=zohomail.com; s=zohoarc; b=Yk75bQHk9Hmhb9ZlMiKDBGqe6Vu+cQhz+imgg0/5lwhhuy+0+uhXsuIWjijtR/Ic1DHltgL9S1AB97orPpgrJyoZWzWjYC2Y0mMkH7JWKUGrq0Az1dyqkfiDAsy+fYsXOTAfItaDOe26IHKUv7/aff7YcnJOt370DPIDJH0XAU8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207873; 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=UADH+4H0+NWhce4iEtIjPf3ElkgBOHbMXUCIk3Pg91I=; b=M6hqLAHn6UEFptoRKE0CgyrycZtuwZRb4Df6uw+BJTfOOJUiSvrVKqJrdypOx92FRNkwUEMYRdKbVv4bw8v/KZxO09aneiUyMomFoYueGRn9gE0LUzWLyyO1lNHXDZTCYimsgW961Izp6KjX0yXyXVEQ+k0NXiqJSMxGyfXrY08= 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 1779207873346201.5608016345991; Tue, 19 May 2026 09:24:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDg-0006hC-2q; Tue, 19 May 2026 12:23:00 -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 1wPNDX-0006d7-1p for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:52 -0400 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDT-0000eX-7u for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:50 -0400 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-4042905015cso3226741fac.0 for ; Tue, 19 May 2026 09:22:46 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207766; x=1779812566; 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=UADH+4H0+NWhce4iEtIjPf3ElkgBOHbMXUCIk3Pg91I=; b=T9yOEICfmPl0sVjTyQzd00lP5g8wOeT7s5f41XeRp/wfVdBva5eKFcWHNQL90QMp97 uup9tJMdBdBKgYhPxJEUGBqzI7TAr6fVA2M5oQN4r7Wfz70NkTKccu0ZLt5xI/l2IHSM I1dN2RK8LqBdhkEgAmLeoDs78zAFfe40xwl23Ivdk3LOkxgtsrq7aKIyOVEV044GA9P+ 9s01g5B9csVYVPaRIWdQnijo/OZsqBY1ruosrmNN3Cjq0R050vUsVuJPkmKVBKtRJw23 5whNz0Q0H77QtuAlpdc2X0WwRl/VgMDkm/x2ucK9962xn1+f07WaQ5IdGebiFrVtg9sQ GYnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207766; x=1779812566; 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=UADH+4H0+NWhce4iEtIjPf3ElkgBOHbMXUCIk3Pg91I=; b=cp+Nm6pJ7EBn2eeqhZ4stQ8ByUCPVzoh8SBYe9s4FVQnPstl0faan1D2v16TcAFJhT 68f/PQ24psHcZGkCot3VKqBihrKYy+UCRr9MVRrfoE1yQx+CGcLgKvEWqMFaTooG7Cma cnxru6Ip+sSYlHKv6ZGfE7MOLaR9Qc28oK7EH+TT62b/khnBjoNugrNw1urN8ZbjjDtl b3QsChyGXnhLsHXhVOdAgqIh7qItTOBj4j+yhtDcEZ1JyPOIoR59zE/S+LhN8wyPz2an n43m+bhJSEtqSbJT65vp2cpn/hFwb5vQekJi/qks5UiHx1ZMKdJFGoAzz1ks+DfRyrL/ lXqw== X-Gm-Message-State: AOJu0YyF6u1NB5kv1th46zwplxskUUN9dwGEDRWlajqjrAGvBDsN9GRW FipWy88Qa+owTUE4hT7NKJx8MQq4eahR69fgntMZWYNeop0Sda1AFVc7 X-Gm-Gg: Acq92OGgQeC7Q4L7RZyLsWCFiWJ+hKL2qlh5FnHkvq3/RWO2x/k4ksvmR7Kyv1bCReS VccPeiBuYesMpKCQJxQdUI+d1+9VfxxKZToVMiHv4QNWoW1A/U35/OT/LUyedPx9lvqeHtNL+8U iCwfWsoAxQUWcAfN+WJlgv2sfiBuaQL9pUmJRJFRHvZbiNkwDsQz/FN+KIMEiT3ze4hJKZjv3NK YyaLLwsve7XJrrofK2AzEMe/2yTJJL7qnkV++tgOSvrAh04OkCibnRskh+Xw4NtIW+jHh0f1gdV RHN973InLjv23x7REKhGVmWlpCOiGkXhbu1dQhCRJoHBtlk4mP53WmdVUSHAJYu4TUaqjyGyLjh Vs/wTGeGAan1cK4yYLY4A9KW9kN22xMKY4IlJRYLpinByDmouengg7xeuxhECwDvvDDFrckuyVA SQccmJE0b2WsD/fTDpTAaKS0hoUUEq+TAC0Ib7i7ugqFJaZ2O+XCiAUIS3P9zgZoZLEJ4sydsml 0NsPg3FBXCu5Xr7BhKRMmdSAEFN1B3X7dv5uTuDUw7/eO8wwIGwj5pR8G8O/KPWU96Y X-Received: by 2002:a05:6870:d628:b0:42f:efe3:1b58 with SMTP id 586e51a60fabf-43a2d9a243bmr13275564fac.13.1779207765789; Tue, 19 May 2026 09:22:45 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:13 -0600 Subject: [PATCH v9 11/40] target/mips: add Octeon SAAD instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-11-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::36; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x36.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207875450158500 SAAD is the doubleword form of SAA: it atomically adds rt to the naturally aligned 64-bit doubleword at base and discards the old memory value. Route it through the common SAA/SAAD translator so the MemOp selects the aligned doubleword transaction size. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard --- Changes v6 -> v7: - Use MO_64 for the doubleword atomic transaction; the signedness bits are irrelevant for a discarded fetch-add result. (suggested by Philippe Mathieu-Daud=C3=A9) Changes v2 -> v3: - Split SAAD out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) Changes v3 -> v4: - Note that SAAD shares the Octeon+ gated SAA translator path. Changes v4 -> v5: - Drop the Octeon+ gated wording/path and keep SAAD under the existing Octeon feature bucket. --- target/mips/tcg/octeon.decode | 1 + target/mips/tcg/octeon_translate.c | 1 + 2 files changed, 2 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index d6b241de42..d77717cd50 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -47,6 +47,7 @@ SNEI 011100 rs:5 rt:5 imm:s10 101111 &cmpi &saa base rt @saa ...... base:5 rt:5 ................ &saa SAA 011100 ..... ..... 00000 00000 011000 @saa +SAAD 011100 ..... ..... 00000 00000 011001 @saa =20 &lx base index rd @lx ...... base:5 index:5 rd:5 ...... ..... &lx diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index f00692830a..d3dfef2e0c 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -175,6 +175,7 @@ static bool trans_saa(DisasContext *ctx, arg_saa *a, Me= mOp mop) } =20 TRANS(SAA, trans_saa, MO_32); +TRANS(SAAD, trans_saa, MO_64); TRANS(LBX, trans_lx, MO_SB); TRANS(LBUX, trans_lx, MO_UB); TRANS(LHX, trans_lx, MO_SW); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207890; cv=none; d=zohomail.com; s=zohoarc; b=KjYUJqJ45Bt5o2TzLxprREYwbYmfqfJBqd2+zROJiDP00NxX0r2VYaw4b9ko9PkUqNROwWT6fGxa6Whs01OkDwvSMc2yBWmhk6nfbPkJAntTmAsm5dSxqS8mA+GOHeRSpU018NCfsorBfBkabaVFGiynZVF0/YnSE5W3Bbfb/uQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207890; 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=lsK81F0syPTphslU+QA3ef80444bfDXtbrnfPQ1ATFs=; b=FexxpxX5h1vTM9MToGS1NvpMWodvumwiWO8XmFvZZsam6ymoqMlW+miYy5KJvCU8ZcH/UbKa/NcVbs5roTLyhcJ0aN+2N54WB7kV5jHHVgYdHezyf94U4m7TnfUKR59gXxnlYEehzhfAkjFmEG+3O/6nXCXkwT4v9cTlPvm/1po= 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 177920789098863.29147173736874; Tue, 19 May 2026 09:24:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDe-0006fx-EJ; Tue, 19 May 2026 12:22:58 -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 1wPNDX-0006cy-1A for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:52 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDU-0000fV-VB for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:50 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-43ab7bfaa18so1105526fac.0 for ; Tue, 19 May 2026 09:22:47 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207767; x=1779812567; 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=lsK81F0syPTphslU+QA3ef80444bfDXtbrnfPQ1ATFs=; b=Au1otY4vvcwjwdhu0btbdbQwFbsrAgSanR7lzIDoAdTH1MbLewFMMruO7rLRx39S+T 0PCEvCV74asUfFke5vQWsNgXol210erCv/J1gbFE59YzUk7UjBTrIRyTK3Mgolzj55y0 +alo5BsR7kJG+V8LQDW1rYV4Pe/i5FHypZ3OoFss+2qJ8WU/s0kPhzkt1f1HJqRmMT4e SMagf3eAPjc9rXXgYF8QidMvNHIKwX4Sx75Zlw+XMNnyltf9ZBBs+lt77LYVPSwONu4V Sns4ek/mmKanlNTsTjpofbbr78c1Av3gMc0feqTLoYZo30JeRmffBsGe88UkxusTQFtN 2aQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207767; x=1779812567; 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=lsK81F0syPTphslU+QA3ef80444bfDXtbrnfPQ1ATFs=; b=kI4IYsynXVQ1F+7S7EBeVHL4tRux4luw9zrT2WQA/8Rt3t1AHNhvwiJHTK+dXKDC7c W8ElA8qWW0tUYrtA2CO10vJ4WQwXwWbo9PxxXgyusC0+Xn2roDpBpt1YqTUgiwRNJl8J rN6Pj07grwEXyNJnyvml7m3vUUQ0LgBx4WIDYvH4KtaDYn1bLW8mPct9Kl6A/PueqYhw UarZH9gi8hSrTjKx9TzY7pHQfCNYzKL2Po6hQA8BRIhjth1jbfyWLGmJO6u9R9fzu9ll /oMcADq1aI8ZNAEMKAkiydMfybMEUquWXic7ZB3MgbQATnUXs5AfrfBDb9QzFGyFFkQF +9uA== X-Gm-Message-State: AOJu0YxB54moxdk56gMsb4G6vltGBI+giVRBdzQp2Ji9liqNMR+Zg53U u0f/Zvz0AxEcx7Hf6b3mgStuv9uo9NapRM/+jbN46LAZXVUmMKcsxkb6 X-Gm-Gg: Acq92OHJiM5mZLUxf2CmZhCFS7wvAy0Ndx2GWz8EQhkuegG708AvuRmLzJYd+Vmruu3 YubQcS02DO2N7q7tAZx3tR5bac68eBKima/nE7qnYQcxnQ/HdNc5QgXNSJKeLoSujTvT3C1o/Yj 9JYnQ4q66wQlXBZVH+OES99gglzVohv4oMb1bBFfh5rspVBPKsSJv/9VRea5IReblXNjtU5/nzy Eb4CtApjy5FPeGfa9uOqFydZFeNZODRCHv7roTV07pYhlyYdoJ5OuHfG3pwAYm2X12viw86ncJ3 xqJNUm5EE5Po3y4Y8KTIngXrL9fCpbpfRbPyUoVbJ4JiceUaUgRMG+JhA46ZhAitHEq4GEDakqg wk99hUxj20hUA0HGUdmXAMtz/SKWCmOJWSLgZnePOF5yJwDTq9K3m7w/Vsdjie/ik3F4r5Jak7e idjgjjdZFMNbvig9YwMOyQqgafQkNxhKeHMRaKFp6ZdUnEwzXEP36KJrbP1b/bQhiCrqbJ3NZRW wJ61gcCGgzrz7GfXF0tLlXbu93hRd0WMTDJXspEF6Ucxt4dZ6zDtMLLEt371Bkn3kIp X-Received: by 2002:a05:6870:45a3:b0:435:b230:fc0 with SMTP id 586e51a60fabf-43a2de7cd1fmr12571295fac.37.1779207766884; Tue, 19 May 2026 09:22:46 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:14 -0600 Subject: [PATCH v9 12/40] target/mips: add Octeon ZCB and ZCBT instructions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-12-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::31; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x31.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207893245154101 ZCB zeros the 128-byte cache block containing the base address. ZCBT has the same user-mode-visible memory effect for QEMU purposes. Model both forms with a single decodetree wildcard entry, align the address down to a 128-byte line, and store eight zero 128-bit chunks to guest memory. Acked-by: Richard Henderson Signed-off-by: James Hilliard Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- Changes v8 -> v9: - Use MO_ATOM_NONE for the 128-bit zero stores so TCG does not require unavailable 128-bit atomic stores on hosts that lack them. Changes v7 -> v8: - Fold the ZCBT wildcard decode into the ZCB patch so the series does not add a ZCB-only decode and rewrite it in the next patch. Changes v6 -> v7: - Use 128-bit zero stores with MO_128 instead of sixteen 64-bit stores. (suggested by Philippe Mathieu-Daud=C3=A9) - Fold ZCB and ZCBT into a single decodetree wildcard entry instead of using a duplicate entry with a selector comment. (suggested by Philippe Mathieu-Daud=C3=A9) Changes v2 -> v3: - Split ZCB/ZCBT out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) --- target/mips/tcg/octeon.decode | 3 +++ target/mips/tcg/octeon_translate.c | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index d77717cd50..01ed3b50be 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -49,6 +49,9 @@ SNEI 011100 rs:5 rt:5 imm:s10 101111 &cmpi SAA 011100 ..... ..... 00000 00000 011000 @saa SAAD 011100 ..... ..... 00000 00000 011001 @saa =20 +&zcb base +ZCB 011100 base:5 00000 00000 1110- 011111 &zcb + &lx base index rd @lx ...... base:5 index:5 rd:5 ...... ..... &lx LWX 011111 ..... ..... ..... 00000 001010 @lx diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index d3dfef2e0c..721a9a8d9d 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -176,6 +176,33 @@ static bool trans_saa(DisasContext *ctx, arg_saa *a, M= emOp mop) =20 TRANS(SAA, trans_saa, MO_32); TRANS(SAAD, trans_saa, MO_64); + +static bool trans_ZCB(DisasContext *ctx, arg_ZCB *a) +{ + TCGv_i64 addr =3D tcg_temp_new_i64(); + TCGv_i64 line =3D tcg_temp_new_i64(); + TCGv_i64 zero64 =3D tcg_constant_i64(0); + TCGv_i128 zero128 =3D tcg_temp_new_i128(); + + gen_base_offset_addr(ctx, addr, a->base, 0); + tcg_gen_concat_i64_i128(zero128, zero64, zero64); + + /* + * QEMU models ZCB/ZCBT as zeroing the containing 128-byte cache line + * in guest memory. + */ + tcg_gen_andi_i64(line, addr, ~0x7fULL); + + for (int i =3D 0; i < 8; i++) { + TCGv_i64 slot =3D tcg_temp_new_i64(); + + tcg_gen_addi_i64(slot, line, i * 16); + tcg_gen_qemu_st_i128(zero128, slot, ctx->mem_idx, + mo_endian(ctx) | MO_128 | MO_ATOM_NONE); + } + + return true; +} TRANS(LBX, trans_lx, MO_SB); TRANS(LBUX, trans_lx, MO_UB); TRANS(LHX, trans_lx, MO_SW); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779208046; cv=none; d=zohomail.com; s=zohoarc; b=VKfQf+SIYJi9yNNuoW3kQDGdfzDSXRbxbHqkUtrR4bq55ZxVAML+H3GvzP5Dk/B+/ZaEZErs6vqrs6L5jjJuWxYJJGhl6veSi4XSZJPgwuQvO77yurnwmty1OyA19H71ZoZqCCl85M2nHDSKEgAcxOpzUvBPqon0H8yKIjuHiPc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779208046; 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=vlxXuOxT+NYJ7cIBM5cb2IVyDziWrmPqOCWZ9Z4002I=; b=FI6X9cZE9aNZOE+NFcTRKAwXLfX0fItbw4DBfsDguF5RrCr4wE1c9kW60IwZfMN5Ecvjd3oQk1jNNeXkOZ3MRdpAxzfNgrp9u+q5AiwwIRMNuN7PDyUxFsKpxN5J5F3Ebb+b1nnWeSqM8gDCwBXXsyXOTZXVBNfXcWLraAGq4p0= 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 177920804644563.02847945629776; Tue, 19 May 2026 09:27:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDl-0006kE-HZ; Tue, 19 May 2026 12:23:05 -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 1wPNDY-0006e0-RM for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:55 -0400 Received: from mail-oo1-xc2a.google.com ([2607:f8b0:4864:20::c2a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDV-0000fl-H3 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:52 -0400 Received: by mail-oo1-xc2a.google.com with SMTP id 006d021491bc7-6969c864c89so2075764eaf.2 for ; Tue, 19 May 2026 09:22:49 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207768; x=1779812568; 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=vlxXuOxT+NYJ7cIBM5cb2IVyDziWrmPqOCWZ9Z4002I=; b=D0l+r27KZxAuQLhD1Xr6mpDz15QqO9Pw83vy7pH1IbtBxxCLeiWDDzKKZc/aVCH999 nR5B9CAYE1SJjfmVU3eBYZO3t08v9Wt9SNOH2p61u6Wl8UfYj34+YXabK4jxpaxJBAL+ 4Oacqf5VlEd/unbyv1WUgbRMc0HMhFKxqn3lWvqC2sZ2jCO3DOBGY6RdanptRSiwOvri QUGf8HMq0BJonZ7ihFfsSjDqAh+akgMaf4NSCoQzI5/6fBV12xqwl3OumW5kiAGkplTn 07CGv8Nou2bEDaHhbpfCaLUaC7d9X9eUznSk5OcRqikNk0aTcC6psLWbdXcUIY+WVVxT Ji0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207768; x=1779812568; 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=vlxXuOxT+NYJ7cIBM5cb2IVyDziWrmPqOCWZ9Z4002I=; b=p/7Q3Qw7YAS00o2SqBvElEpZnwpfoMaG3ppB4Fvjh3Rjbofp8wuJVD6i8Ve2HB0I5n J8QQJ2IDHyLQrA+yXOKlSJLpfoSCETlofr/MFfdJMs9wo4qjYcaITqG9Xf2FoVTSnN7P xPsyVBGIAnpLcalAUmOPor3Sw2cyakW5Kn/Inj6s9NwL5UEnTUqLBbJp0DPfapivOB6O KJve/4iwyzWq4LTgFCHRr2HgYWeeJq+36CHaCnd4vIwpXcHkIddB2siQddXWz18Ksko1 eSFTo8Ue5eOlLoFvq8xtPY9zqAvmu0nO0Xc5chfvoMmMsx9N8uRmieiBruuSLqgzy9j9 Ff2Q== X-Gm-Message-State: AOJu0YypdPEfGXqqyxNlz2WOmzxqWllHp46eQPXiZsY1kkRlJ6IXwssa e72Yo8OcTjlzh+AqvVmVScrPLktzkGwyLedbwvs2Qlfh0mm5Gcg7hbam X-Gm-Gg: Acq92OG+HV6Z/HjgaYE14e23euWybgjf0X3JtV8bcRj9w8RrxoYK62SL6jSRWtkjsDu r/lKiv0JeX4V3waxZvJ8raaE6H1/1Zn7Zp0z0iZetZBXQSYIU9wgdl/eUlNZ9d5GA9KKx9Hknoj S9iAPNd8A9nJ7KZiy6N1RUf7ok141c1mZS3zfsgVOTQx7aJnHS8P76orHdMA4jX4xXMO5lcJCoZ Qi4DQw1dQ4vXNBcgXND/ysRMNfbVgDZ+Y40zZtDfE9f4ddGwTbyEHOB1099v0fbasEnAP+a/iCw ksmpN1EKV9RQoTCNM6YxB60mu9bdvcc6C7TU0XEig/EA2dUfzr6nBRxWubTU98Kp8b3qGOrXMmG kUY2rnylSm4X5tjxopoKc/DJfNJUSavi1xKPWINd1npUK7232DwgjjOLKimZvftI16ip5csU+ih dtb4Iaf3UXhSRA8s21fGO74gKIqrMajX0miIQsqPnkN72PZjlnGxsqT0LFbV7M0gsg6vi3LeU0m UfNJud7m7vFpPqf7xpXmk1zsRW3zOtA4tI+fP44FI4nrJf/q0Fidec1lIZhjU1M50Be X-Received: by 2002:a05:6820:6189:b0:69d:521d:a4f1 with SMTP id 006d021491bc7-69d521da817mr876394eaf.55.1779207768019; Tue, 19 May 2026 09:22:48 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:15 -0600 Subject: [PATCH v9 13/40] tcg: Introduce tcg_gen_addN_i64 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-13-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::c2a; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc2a.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779208047537158500 From: Richard Henderson Add a helper for multi-limb 64-bit addition. The helper emits native carry-chain TCG ops when they are available and falls back to explicit carry propagation otherwise. This lets target translators build wider integer accumulators inline without open-coding the same add-with-carry sequence at each use site. Signed-off-by: Richard Henderson --- Changes v7 -> v8: - New patch from Richard Henderson's v7.5 multiplier rework. --- include/tcg/tcg-op-common.h | 1 + tcg/tcg-op.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/include/tcg/tcg-op-common.h b/include/tcg/tcg-op-common.h index e02f209c09..ee0ad5f6a3 100644 --- a/include/tcg/tcg-op-common.h +++ b/include/tcg/tcg-op-common.h @@ -251,6 +251,7 @@ void tcg_gen_sub2_i64(TCGv_i64 rl, TCGv_i64 rh, TCGv_i6= 4 al, TCGv_i64 ah, TCGv_i64 bl, TCGv_i64 bh); void tcg_gen_addcio_i64(TCGv_i64 r, TCGv_i64 co, TCGv_i64 a, TCGv_i64 b, TCGv_i64 ci); +void tcg_gen_addN_i64(int n, TCGv_i64 *r, TCGv_i64 *a, TCGv_i64 *b); void tcg_gen_mulu2_i64(TCGv_i64 rl, TCGv_i64 rh, TCGv_i64 arg1, TCGv_i64 a= rg2); void tcg_gen_muls2_i64(TCGv_i64 rl, TCGv_i64 rh, TCGv_i64 arg1, TCGv_i64 a= rg2); void tcg_gen_mulsu2_i64(TCGv_i64 rl, TCGv_i64 rh, TCGv_i64 arg1, TCGv_i64 = arg2); diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c index d8ae57d604..28ef5bacfd 100644 --- a/tcg/tcg-op.c +++ b/tcg/tcg-op.c @@ -2275,6 +2275,48 @@ void tcg_gen_addcio_i64(TCGv_i64 r, TCGv_i64 co, } } =20 +void tcg_gen_addN_i64(int n, TCGv_i64 *r, TCGv_i64 *a, TCGv_i64 *b) +{ + tcg_debug_assert(n > 2); + + /* ??? Don't allow overlap for now. */ + for (int i =3D 0; i < n - 1; ++i) { + for (int j =3D i + 1; j < n; ++j) { + tcg_debug_assert(r[i] !=3D a[j]); + tcg_debug_assert(r[i] !=3D b[j]); + } + } + + if (tcg_op_supported(INDEX_op_addci, TCG_TYPE_I64, 0)) { + tcg_gen_op3_i64(INDEX_op_addco, r[0], a[0], b[0]); + for (int i =3D 1; i < n - 1; ++i) { + tcg_gen_op3_i64(INDEX_op_addcio, r[i], a[i], b[i]); + } + tcg_gen_op3_i64(INDEX_op_addci, r[n - 1], a[n - 1], b[n - 1]); + } else { + TCGv_i64 t =3D tcg_temp_ebb_new_i64(); + TCGv_i64 c =3D tcg_temp_ebb_new_i64(); + + tcg_gen_add_i64(t, a[0], b[0]); + tcg_gen_setcond_i64(TCG_COND_LTU, c, t, a[0]); + tcg_gen_mov_i64(r[0], t); + + for (int i =3D 1; i < n - 1; ++i) { + tcg_gen_add_i64(t, a[i], c); + tcg_gen_setcond_i64(TCG_COND_LTU, c, t, c); + tcg_gen_add_i64(r[i], b[i], t); + tcg_gen_setcond_i64(TCG_COND_LTU, t, r[i], t); + tcg_gen_or_i64(c, c, t); + } + + tcg_gen_add_i64(r[n - 1], a[n - 1], b[n - 1]); + tcg_gen_add_i64(r[n - 1], r[n - 1], c); + + tcg_temp_free_i64(t); + tcg_temp_free_i64(c); + } +} + void tcg_gen_sub2_i64(TCGv_i64 rl, TCGv_i64 rh, TCGv_i64 al, TCGv_i64 ah, TCGv_i64 bl, TCGv_i64 bh) { --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207840; cv=none; d=zohomail.com; s=zohoarc; b=aGHOCPjpS+Ga6s+r0+nB3DWfITsvooBHwmaLXCe+ndJ3EnM6LVEIHMTzHPf1koIyD9eqU8USTBIfMP0FxEUXNDsoWZkg1yxUolkdn1kSnrmLjejQh7/qR77VnqdNoLMqe9LJwluTaf2jp7xYvtHP7aJgYS5zbg0caVIyzK9I9/8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207840; 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=lCm1V909eQzvanOLLp3AM+2hWgzt/YQUZTI+85aC+C8=; b=bQ99X/P4ggVsFd/S8jwPp0wK+hRejJi+RwREdbGA7zury8InoqwkQ+Q0yHeCtJlRrvaHOBuS1ZiwLCUMAfCjVYDUSq9poyg8F9Bypwp0UA4taOC8gmczyG9FIrclBQKxqDV83Zks1ae2iVjO7wU7eEqfeC29QhJkj3ER805NYuE= 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 1779207840817542.3597708970282; Tue, 19 May 2026 09:24:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDe-0006g7-Oo; Tue, 19 May 2026 12:22:58 -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 1wPNDY-0006dz-CM for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:54 -0400 Received: from mail-ot1-x331.google.com ([2607:f8b0:4864:20::331]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDW-0000gF-NB for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:52 -0400 Received: by mail-ot1-x331.google.com with SMTP id 46e09a7af769-7e5c85b47c6so436116a34.0 for ; Tue, 19 May 2026 09:22:49 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207769; x=1779812569; 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=lCm1V909eQzvanOLLp3AM+2hWgzt/YQUZTI+85aC+C8=; b=mk1TZFvfte3U9lRd1i4bbcFHyGcVXibLF7P6bLzT5SflunF2uBXY94HFhrWNtcCzPU bdDIONVMFVw5Tzm+X541h1Gw4G/6kJu/jT62qmV7vb6THRLX6s/jR+GQD6Dom0LA3tAi mPsTNHeXJiVc/ykj4IepkB2wuwiheYQVqnaFWsUGJQWoIjYvd4qQx1wqnqG7IavvSlCl SCAUBjBRWBTVql5OAxHK+PzOjgaUkMkndRgo9oED12TaxzVqP12bkRukdAZ4Y8M5M95Z LYRHfqRrKgxxw3V/tsSgJ9WhOi0qcTa88uJsHxbuhvNuUxt+dmUHbmCgexSjhCyTByVC HMeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207769; x=1779812569; 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=lCm1V909eQzvanOLLp3AM+2hWgzt/YQUZTI+85aC+C8=; b=OsnFCNz6EmEr+Dok4fu7myyaaHAE4nqT2KxXCA6hSOMueuOWxXZ1Mey9oLeDEDj4M9 c6VCYVIwzFJW8r3nDF55G01Bxu3NUbtCGw5LMfeWk9UTmb7OE5W0DmsDGyG3otImsdcu 3J7Bu19qsxW3nuCWLuJ2TLTdKqyPSQe389Op96Cy/q1G3T7C0a2V0uPuaMmdgZbGqfQJ bKznqyKL+WiK/5PHJx0bMRzmgT2R4wqVEUZFngxcjNPqMekkehEe2lrSIBlEBCKTWZUD UDS+QR2n1sYSI0Kerog4+36Du668119W9wCS63mh5ZVdeWZ21IvaSYMt8bYWL6vDdbYF alMw== X-Gm-Message-State: AOJu0YwVaVsCpMtOtWxkGWk5wiMespuLWtAqZj+xvidh213l/tTs+OV2 XJO8uL2oBhiFPfmU0CbPOTnUyZSqoVVBEm3BQLfgbGX36cq1tFwQgBoo X-Gm-Gg: Acq92OEZf2LUOkdvIWAqtQz7n/+STw7nU6Iu4/1wA7VIKiPM3G99tfYWTjqIaLCu6WL Y7qQUBEDvQlsA6Dakv6dzCO7ABlCPFOIhIcBSRRVVaRRkijBb5NBk9tyrwZPeapAWoFVB2gwV99 bMNCTuOQpKPyKCC+e60L7WTWZiJelOiy37oVD0YylaLrrw0zfJYvySLe5sUqR2G8QcukU0vxVnw h3zoumHgqfZlgVWxocnYKnRqvYuRkg9flUS5zz73PMCIxU3/4U2f7iXzi2ld8piQIN3OtJvtNWg 55Se4zyLjjtfA6MZig72OG3bliaeFxvMZOOWjISDHhfvhL2QEQNphMs6tbQIFyLeT+lf8bpp1I+ RG2q0pA0sPNJQb//jni3/l6aZC5bMrhATwdqRqDQkTgBpKnNYerlU1Y79fwp4C1reT4WfaJkoSp DG/EXBSo8gRclJ04qYMeYukTPFKq412gwxc25XcP9i83Hm2Mz3FonxkXiMtAYOEHGemBASfUnHr 7TxYQGlWOSiIisw++qxiF9dYhjZ/a8aSSEDcOjHDFV8zjaLzkIDzlfO0lakU4KNilZO X-Received: by 2002:a05:6820:1625:b0:694:9d3d:e040 with SMTP id 006d021491bc7-69c94367940mr12066616eaf.31.1779207769012; Tue, 19 May 2026 09:22:49 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:16 -0600 Subject: [PATCH v9 14/40] tcg: Optimize INDEX_op_mul[us]2 for 0 and 1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-14-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::331; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x331.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207842418154100 From: Richard Henderson Zero operands produce a zero high and low product. One operands produce a copy of the other operand and a zero or sign extension in the high half. Fold those cases during TCG optimization so wide-multiply idioms used by target translators can collapse before code generation. Signed-off-by: Richard Henderson --- Changes v7 -> v8: - New patch from Richard Henderson's v7.5 multiplier rework. --- tcg/optimize.c | 92 ++++++++++++++++++++++++++++++++++++++----------------= ---- 1 file changed, 60 insertions(+), 32 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index b1abec69a5..a42ab16fb4 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -2173,45 +2173,73 @@ static bool fold_multiply2(OptContext *ctx, TCGOp *= op) { swap_commutative(op->args[0], &op->args[2], &op->args[3]); =20 - if (arg_is_const(op->args[2]) && arg_is_const(op->args[3])) { - uint64_t a =3D arg_const_val(op->args[2]); + if (arg_is_const(op->args[3])) { uint64_t b =3D arg_const_val(op->args[3]); - uint64_t h, l; - TCGArg rl, rh; + TCGArg rl =3D op->args[0]; + TCGArg rh =3D op->args[1]; TCGOp *op2; =20 - switch (op->opc) { - case INDEX_op_mulu2: - if (ctx->type =3D=3D TCG_TYPE_I32) { - l =3D (uint64_t)(uint32_t)a * (uint32_t)b; - h =3D (int32_t)(l >> 32); - l =3D (int32_t)l; - } else { - mulu64(&l, &h, a, b); - } - break; - case INDEX_op_muls2: - if (ctx->type =3D=3D TCG_TYPE_I32) { - l =3D (int64_t)(int32_t)a * (int32_t)b; - h =3D l >> 32; - l =3D (int32_t)l; - } else { - muls64(&l, &h, a, b); + if (arg_is_const(op->args[2])) { + uint64_t a =3D arg_const_val(op->args[2]); + uint64_t h, l; + + switch (op->opc) { + case INDEX_op_mulu2: + if (ctx->type =3D=3D TCG_TYPE_I32) { + l =3D (uint64_t)(uint32_t)a * (uint32_t)b; + h =3D (int32_t)(l >> 32); + l =3D (int32_t)l; + } else { + mulu64(&l, &h, a, b); + } + break; + case INDEX_op_muls2: + if (ctx->type =3D=3D TCG_TYPE_I32) { + l =3D (int64_t)(int32_t)a * (int32_t)b; + h =3D l >> 32; + l =3D (int32_t)l; + } else { + muls64(&l, &h, a, b); + } + break; + default: + g_assert_not_reached(); } - break; - default: - g_assert_not_reached(); - } =20 - rl =3D op->args[0]; - rh =3D op->args[1]; + /* The proper opcode is supplied by tcg_opt_gen_mov. */ + op2 =3D opt_insert_before(ctx, op, 0, 2); + tcg_opt_gen_movi(ctx, op2, rl, l); + tcg_opt_gen_movi(ctx, op, rh, h); + return true; + } =20 - /* The proper opcode is supplied by tcg_opt_gen_mov. */ - op2 =3D opt_insert_before(ctx, op, 0, 2); + if (b =3D=3D 0) { + op2 =3D opt_insert_before(ctx, op, 0, 2); + tcg_opt_gen_movi(ctx, op2, rl, 0); + tcg_opt_gen_movi(ctx, op, rh, 0); + return true; + } + if (b =3D=3D 1) { + op2 =3D opt_insert_before(ctx, op, 0, 2); + tcg_opt_gen_mov(ctx, op2, rl, op->args[2]); + + switch (op->opc) { + case INDEX_op_mulu2: + tcg_opt_gen_movi(ctx, op, rh, 0); + break; + case INDEX_op_muls2: + op->opc =3D INDEX_op_sar; + op->args[0] =3D rh; + op->args[1] =3D rl; + op->args[2] =3D + arg_new_constant(ctx, tcg_type_size(ctx->type) * 8 - 1= ); + break; + default: + g_assert_not_reached(); + } =20 - tcg_opt_gen_movi(ctx, op, rl, l); - tcg_opt_gen_movi(ctx, op2, rh, h); - return true; + return true; + } } return finish_folding(ctx, op); } --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207913; cv=none; d=zohomail.com; s=zohoarc; b=aN2+hMeZ3mYzED0Hv58ImfC03DD3s8wZU091/8PGoaph8p8hGlOqcOobZt1cc216XSatR0qDQTn3oMCyZBxdnoLi/vxzgI7UyQPA/BBM8lA8m5GpE4FNYPQqwf4leQYB6xu4Iux0IrfA9LyCCqTCI8278uVkcc+jKnsPyde0k24= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207913; 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=2GwP5cCH4UfiaQKX7UsB28XhQ0mXlfLfaYCHR8sP+pE=; b=c/h92PvxkmWOfjhZAstLeaxggUFVNUcVyXheZbHwQiraUmaRYu8JsadMCjTHkgk9bzClorFhKVZAGuUP4iU5dDukSbCCcpTYD0E9b1p1Zp9bZBtwn1yGPEoVZt957vK37VNvkdij326akh1H/VFFP3wvULSbetI0Wy5PWdK7tj0= 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 1779207913878274.70457727176597; Tue, 19 May 2026 09:25:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDm-0006kJ-90; Tue, 19 May 2026 12:23:06 -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 1wPNDZ-0006e7-RO for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:55 -0400 Received: from mail-oo1-xc2b.google.com ([2607:f8b0:4864:20::c2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDX-0000gS-TE for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:53 -0400 Received: by mail-oo1-xc2b.google.com with SMTP id 006d021491bc7-699a23b2b08so1084335eaf.0 for ; Tue, 19 May 2026 09:22:50 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207770; x=1779812570; 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=2GwP5cCH4UfiaQKX7UsB28XhQ0mXlfLfaYCHR8sP+pE=; b=UD5q8LwPizfAOq8aBqKtkpV4iOwYDlggbSAYZUonFo+b5NEIFNtK9/EaLIo8LqA8cg CVHoVua1AqRadd5xft3yPWerdreZuldSHnRV4YtdEQjdZCuwb4LdgRFivvVYU4FEG+rg AG03s+2Rcvj4uBi0n1D95FFe/if+528iClR6vyBB9CnbHFf6ODHqV198yk8iIeOQRSYJ FkSHEdZvl6oSQtcN2soLkGPy8Ud6MnEKkNlN5TH9ebuVOxCY3PFQqDsl9sn/fGxSjulo iwMkdslTzcR0BZUzcUerSog0LNwW3sNvQaquFRsJwYEOzb2HX7iho+anvpDRQruHw/b6 v+5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207770; x=1779812570; 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=2GwP5cCH4UfiaQKX7UsB28XhQ0mXlfLfaYCHR8sP+pE=; b=rXtrFDE2wTuQsrLWgVInFuUF5TqKxey1NEiM+NEXpAZtImvffAoFZPG7NqCcVjHgqw 0pSStuka7ax9z8EMwuckcB3SJddFC88ju+zcAJcbxG+uI+wru2Jo85AlWCEKyT1CVzDi ZzWFzucYK6jtupKensmDMJmjVtyemo4JF7Fvb+8gDQfDw6C6wMoOpxQKhaKU+PIY9IqG 1ZzM1/bVv6N6d2oXxB1yp30f0RvYlJrZF1fI43PWNg6PS1ljWKAYAGh6DkJCBHqZEVk6 6I+j7dO8kncyz/Meoa6YN/OQrGgiHtj7fKm5EOosmd2wk9c+TkQheKYUL5fXkOAqb4qL j8eg== X-Gm-Message-State: AOJu0YwjewqWtZ92WFouKd/PpNCjdrSNbNJA/DdGwpVtSbVIfOjIAqhl zv9uJiBstYGwRyz9Vi0hwjWpzn5WLVB4upAO5qnjlqYioCBQuvM7NxnM X-Gm-Gg: Acq92OES9MhATRCGbelWrfeX14vEhGPRqqOVwjQUX9+sA3ecMAc+YRYWuwAl6yTD8co kXis/9QytdmFq7UoIDhmkAQ8h/FDtPnsxaQzcwiH0JC+jg22b4xzKPunOKHMeAYRpOLQfvNwqV4 0KLRsETRJvK4Ek3wSwVGKL1USse86SoukVqfFS9MQ+IQ77itdFGaF0lMH69uzeAwXWcNDTWLsg9 VIuWik5bNDMGptN3E+VfxeqoFif6qqjrSYPAillwxaNoYmDynsWYCpede9Wltz4AoELVfVH7RG/ ptNWNUFj9ngCn6NXlo30aIMSYOytsMUsapVR7o+RGtRf56Uyl4y3dn/oxyA/eLkimW3/81Y3NqL 2Onxh33i0oglZ7L5jUXJQ9Y7T/k795H7zLYxZGBcXvuYc/Rp+/sib24gJCiQ7DnujfUlCW+tXGJ iVVRF+RVaOIZMaesKR+klGfqcgg43gkoninw4GdXywmOx9oUJ1ULmpHhp4KzZjY2TTxMKcs0HxE bGuR2BGPLkFsbldaFZ5nl5x9w7UaxHhySM0cSiYk/c9DSDoCo5lVgdo9rTeESEyXY2t X-Received: by 2002:a05:6820:2bc1:b0:69d:50f5:eb0a with SMTP id 006d021491bc7-69d50f5ec97mr1007523eaf.20.1779207770035; Tue, 19 May 2026 09:22:50 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:17 -0600 Subject: [PATCH v9 15/40] target/mips: add Octeon multiplier state MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-15-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::c2b; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc2b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207915813154100 Add per-thread Octeon multiplier state for the MPL and P limb banks used by the VMULU/VMM0/V3MULU instruction family. Octeon3 extends the older MPL0-MPL2/P0-P2 state with high lanes MPL3-MPL5/P3-P5, programmed by the two-source MTM/MTP forms. Represent both banks as uint64_t arrays so the TC state matches the architected 64-bit limb layout used by Octeon68XX user-mode code. Expose MPL/P as global TCG variables so the multiplier translators can expand inline without helper calls. Migrate the multiplier registers in an Octeon-only subsection so non-Octeon CPU models do not grow migration state. Reviewed-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: James Hilliard Signed-off-by: Richard Henderson --- Changes v2 -> v3: - Split the multiplier state out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) Changes v3 -> v4: - Document and keep the Octeon3 MPL3-MPL5/P3-P5 high-lane state used by the two-source MTM/MTP forms. Changes v7 -> v8: - Incorporate Richard Henderson's v7.5 global TCG variable setup for inline multiplier translation. --- target/mips/cpu.h | 12 ++++++++++++ target/mips/system/machine.c | 33 +++++++++++++++++++++++++++++++++ target/mips/tcg/translate.c | 18 ++++++++++++++++++ target/mips/tcg/translate.h | 2 ++ 4 files changed, 65 insertions(+) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index b478f834c1..346713705a 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -459,6 +459,14 @@ typedef struct mips_def_t mips_def_t; =20 =20 typedef struct TCState TCState; + +/* + * Octeon3 adds a second bank of multiplier/product limbs used by the + * two-source MTM/MTP forms: MPL0..2/P0..2 from rs and MPL3..5/P3..5 from = rt. + */ +#define OCTEON_MULTIPLIER_LANES 3 +#define OCTEON_MULTIPLIER_REGS (2 * OCTEON_MULTIPLIER_LANES) + struct TCState { target_ulong gpr[32]; #if defined(TARGET_MIPS64) @@ -497,6 +505,10 @@ struct TCState { target_ulong CP0_TCScheFBack; int32_t CP0_Debug_tcstatus; target_ulong CP0_UserLocal; + struct { + uint64_t MPL[OCTEON_MULTIPLIER_REGS]; + uint64_t P[OCTEON_MULTIPLIER_REGS]; + } octeon; =20 int32_t msacsr; =20 diff --git a/target/mips/system/machine.c b/target/mips/system/machine.c index 5880b401b0..f988b3695b 100644 --- a/target/mips/system/machine.c +++ b/target/mips/system/machine.c @@ -120,6 +120,17 @@ static const VMStateDescription vmstate_inactive_tc = =3D { .fields =3D vmstate_tc_fields }; =20 +static const VMStateDescription vmstate_octeon_multiplier_tc =3D { + .name =3D "cpu/tc/octeon_multiplier", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT64_ARRAY(octeon.MPL, TCState, OCTEON_MULTIPLIER_REGS), + VMSTATE_UINT64_ARRAY(octeon.P, TCState, OCTEON_MULTIPLIER_REGS), + VMSTATE_END_OF_LIST() + } +}; + /* MVP state */ =20 static const VMStateDescription vmstate_mvp =3D { @@ -247,6 +258,27 @@ static const VMStateDescription mips_vmstate_timer =3D= { } }; =20 +static bool mips_octeon_needed(void *opaque) +{ + MIPSCPU *cpu =3D opaque; + + return cpu->env.insn_flags & INSN_OCTEON; +} + +static const VMStateDescription mips_vmstate_octeon_multiplier =3D { + .name =3D "cpu/octeon_multiplier", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D mips_octeon_needed, + .fields =3D (const VMStateField[]) { + VMSTATE_STRUCT(env.active_tc, MIPSCPU, 1, + vmstate_octeon_multiplier_tc, TCState), + VMSTATE_STRUCT_ARRAY(env.tcs, MIPSCPU, MIPS_SHADOW_SET_MAX, 1, + vmstate_octeon_multiplier_tc, TCState), + VMSTATE_END_OF_LIST() + } +}; + const VMStateDescription vmstate_mips_cpu =3D { .name =3D "cpu", .version_id =3D 21, @@ -363,6 +395,7 @@ const VMStateDescription vmstate_mips_cpu =3D { }, .subsections =3D (const VMStateDescription * const []) { &mips_vmstate_timer, + &mips_vmstate_octeon_multiplier, NULL } }; diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c index dac30aff8d..123d2c89c3 100644 --- a/target/mips/tcg/translate.c +++ b/target/mips/tcg/translate.c @@ -1179,6 +1179,8 @@ static TCGv cpu_lladdr, cpu_llval; static TCGv_i32 hflags; TCGv_i32 fpu_fcr0, fpu_fcr31; TCGv_i64 fpu_f64[32]; +TCGv_i64 oct_mpl[OCTEON_MULTIPLIER_REGS]; +TCGv_i64 oct_p[OCTEON_MULTIPLIER_REGS]; =20 static const char regnames_HI[][4] =3D { "HI0", "HI1", "HI2", "HI3", @@ -15276,6 +15278,22 @@ void mips_tcg_init(void) active_tc.gpr_hi[i= ]), rname); } + + for (unsigned i =3D 0; i < OCTEON_MULTIPLIER_REGS; ++i) { + static const char mpl_names[OCTEON_MULTIPLIER_REGS][5] =3D { + "MPL0", "MPL1", "MPL2", "MPL3", "MPL4", "MPL5", + }; + static const char p_names[OCTEON_MULTIPLIER_REGS][3] =3D { + "P0", "P1", "P2", "P3", "P4", "P5", + }; + + oct_mpl[i] =3D tcg_global_mem_new_i64( + tcg_env, offsetof(CPUMIPSState, active_tc.octeon.MPL[i]), + mpl_names[i]); + oct_p[i] =3D tcg_global_mem_new_i64( + tcg_env, offsetof(CPUMIPSState, active_tc.octeon.P[i]), + p_names[i]); + } #endif /* !TARGET_MIPS64 */ for (unsigned i =3D 0; i < 32; i++) { int off =3D offsetof(CPUMIPSState, active_fpu.fpr[i].wr.d[0]); diff --git a/target/mips/tcg/translate.h b/target/mips/tcg/translate.h index 89dde1e712..ab2e217367 100644 --- a/target/mips/tcg/translate.h +++ b/target/mips/tcg/translate.h @@ -189,6 +189,8 @@ void gen_crc32(DisasContext *ctx, int rd, int rs, int r= t, int sz, int crc32c); extern TCGv cpu_gpr[32], cpu_PC; #if defined(TARGET_MIPS64) extern TCGv_i64 cpu_gpr_hi[32]; +extern TCGv_i64 oct_mpl[OCTEON_MULTIPLIER_REGS]; +extern TCGv_i64 oct_p[OCTEON_MULTIPLIER_REGS]; #endif extern TCGv cpu_HI[MIPS_DSP_ACC], cpu_LO[MIPS_DSP_ACC]; extern TCGv_i32 fpu_fcr0, fpu_fcr31; --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207805; cv=none; d=zohomail.com; s=zohoarc; b=TG18RTjCV70/520G7l0HuMEp0fAG+gftD6zvcH1GvHAm4Mj0L94/ixie2Qo4wTcZ9dAep1TyuUyhwnWQxufBr1lcwYFCE/WsZz7AzZ/Ko/Giz5wtbcfS1hk6N+NhxlOs2ZZ+QWm6ygkzZmvdghE4Un7zp+JyrYj8Uhz06PjrTqQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207805; 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=SEpaBN+Cf5DSQcUo9bhdwLJ6wNzQO70+KKi67N4ETPs=; b=iXdVpSoSOSn587TgtiwCetFvJ+2lRpkluwZN0dV05Y/59uUDhEZ/oIY7qCv7ZO5ByY3/5WaYOdR5Ti+HKOBkQTuDm76du5bRK8g2ult/P2S/ad6NkTczoICJvw86AF9aN/uiDrD8MS7+Cd07eBVxkkCvpCb6OViHLDFiYTADaOw= 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 1779207805608548.4621985682428; Tue, 19 May 2026 09:23:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDd-0006fj-4p; Tue, 19 May 2026 12:22:57 -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 1wPNDa-0006eK-Aq for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:55 -0400 Received: from mail-oa1-x34.google.com ([2001:4860:4864:20::34]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDY-0000gz-JF for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:54 -0400 Received: by mail-oa1-x34.google.com with SMTP id 586e51a60fabf-43acf1694daso1313600fac.3 for ; Tue, 19 May 2026 09:22:52 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207771; x=1779812571; 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=SEpaBN+Cf5DSQcUo9bhdwLJ6wNzQO70+KKi67N4ETPs=; b=rgwcZiOvP8BuuZDuqmSFfpCFg/fjRjvNguaP+DaVMSK9LDpQQ1bAR7zp1D2zUl6dxT mgARggcGIBJoaB2nHQ/JT8GZhAJhFeZ/nbknhOefw83zZMIsBfYIij/tJrXyz//v8egw PvFjELBPR5ctdjOu4rRPpBVEGKp9OPUA3vznLGlgyGIFSrAs9VkZK3OTo4S8f+8qRMkI XOOhDwWi+s2PpgbVbIm2oQxq78F9E1vDFiAJ58++1Qe1pt8tIsgK7JDtKvngjPlLmj9o wBQ98Mn82nObLpg/w4QDcX2hBNkQ33W31naSCec0rnh8WzTaz3tZUXEvsZy1bjTIVjRF QG4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207771; x=1779812571; 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=SEpaBN+Cf5DSQcUo9bhdwLJ6wNzQO70+KKi67N4ETPs=; b=eqaBdsuhkS6/YTCFgMaq7aBdQaURxc0nvE3/gjfKO//0YJCOMdc98c1mQCnQp6AMoY 90CwlOQ03riZ64X+B7MuPGs/O6uQjbntf/X2elsR+hG8dJeOpqFlSXk5/fv/ZjNVEK1t 1mhmZcC4fL8wbJDFtq4AULd/hvhgbnjd5ZGUH0e4nfnD2hPW/Pbkm7MfTpyMHwomvy+O zlh3iYECc0qzmTYK64jS60J+S9HcuRM5cPXUp7A7wVlgUw/rte3v4Vm8bYI51a/7ZCci 1ITFDMKnsXU26cL0vIoUnIuYO2gs4InnJ35YDyobtYJnWn2ie/XsJM1gleLyKkRdDaMm VThA== X-Gm-Message-State: AOJu0YzZ9Re2ybWXcHgffw3XDElacrtjxKlJ4SmWSfnHSX+qHJn2OMhw Dwn5jxSaf/k9Gs4NKGMBQYrerRjH24tkcihbEavtVA92k+QRm5Ijz8nu X-Gm-Gg: Acq92OGcCa91VFJ+MwA8dX/iT6jQvNcm3pLy3QgdYoCeqvq5tVmuMIsRQqLSES/zmdQ d6quygZZm0QxAtjPpWG9Ogu2ciF3v6F5lqMxLUmcP9ioIzqBtrCxVCkeF4tEjiVQHf+BTtgD6d6 Kzv5QklifeSWwJbE7/aR6efSTtQCRXVd6rRB3Gm7e0brOeflKy7mA9F4uDQXc0rTUzOIy36lWgK 0WzNGPn692+RYrBkyTJuM5uw+1JWzpm8vcKdtVOS9oqP4CGZIlPMe44EYfsX8CogfSSCWk21nb5 Ze6SIGifhKjA8U3Dwb59j3mObey8GtICxiBPY6x7zyucv3DNk3ucO5k326sREHnmyJPB5yOp3oc xvPvRHzPJKSmQ/8xjUlYde7NceIilpLSkHqiVplBJE96WerywfuecZN8G7E9516lehrf5G56Z8p sHTsvAuN1Lb1zxAfsTdhXWEO01Dd1FulnDdGRuhmahoQ80vBHoF0ggmjajMhNsJMspskkq03up/ Objhij77P4ZLdAvGYj36kIlGPe8qS0/XRln5tD83x9qP3bFUsyOsIMr/+pTKS94vM76 X-Received: by 2002:a05:6870:891d:b0:417:5285:6c7b with SMTP id 586e51a60fabf-43a2db4d89fmr13643328fac.8.1779207770900; Tue, 19 May 2026 09:22:50 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:18 -0600 Subject: [PATCH v9 16/40] target/mips: add Octeon MTM instructions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-16-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::34; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x34.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207806901158500 Add the MTM0, MTM1, and MTM2 forms that load the Octeon3 multiplier operand pair from rs/rt into MPL[x] and MPL[x+3], then clear the partial products. For MPL0, also set MPL[1] to zero for backward compatibility with Octeon2 VMULU. Legacy single-source encodings have rt encoded as $zero, so the same translator path also preserves the older Octeon behavior. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard Signed-off-by: Richard Henderson --- Changes v2 -> v3: - Split MTM0 out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) Changes v3 -> v4: - Keep the Octeon3 two-source rt high-lane operand and document that legacy one-source MTM encodings use rt =3D=3D $zero. Changes v5 -> v6: - Clarify the CN71XX-defined MPL1 zeroing after checking the register-state table and description. Changes v7 -> v8: - Combine MTM0/MTM1/MTM2 in the v7.5 inline TCG translator form from Richard Henderson. --- target/mips/tcg/octeon.decode | 7 +++++++ target/mips/tcg/octeon_translate.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 01ed3b50be..5139543b15 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -44,6 +44,13 @@ SNE 011100 ..... ..... ..... 00000 101011 @r3 SEQI 011100 rs:5 rt:5 imm:s10 101110 &cmpi SNEI 011100 rs:5 rt:5 imm:s10 101111 &cmpi =20 +&r2 rs rt +@r2 ...... rs:5 rt:5 ..... ..... ...... &r2 + +MTM0 011100 ..... ..... 00000 00000 001000 @r2 +MTM1 011100 ..... ..... 00000 00000 001100 @r2 +MTM2 011100 ..... ..... 00000 00000 001101 @r2 + &saa base rt @saa ...... base:5 rt:5 ................ &saa SAA 011100 ..... ..... 00000 00000 011000 @saa diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 721a9a8d9d..67d95423c1 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -210,3 +210,35 @@ TRANS(LHUX, trans_lx, MO_UW); TRANS(LWX, trans_lx, MO_SL); TRANS(LWUX, trans_lx, MO_UL); TRANS(LDX, trans_lx, MO_UQ); + +static void octeon_zero_partial_product_state(void) +{ + for (int i =3D 0; i < OCTEON_MULTIPLIER_REGS; i++) { + tcg_gen_movi_i64(oct_p[i], 0); + } +} + +static bool trans_mtm(DisasContext *ctx, arg_r2 *a, unsigned int index) +{ + /* + * Octeon3 two-source MTM forms load lane index from rs and lane index= + 3 + * from rt. Legacy one-source forms encode rt as $zero. + */ + gen_load_gpr(oct_mpl[index], a->rs); + gen_load_gpr(oct_mpl[index + 3], a->rt); + + /* + * Octeon3 clears MPL1 with MPL0 so that VMULU sequences remain + * backward compatible with Octeon2. + */ + if (index =3D=3D 0) { + tcg_gen_movi_i64(oct_mpl[1], 0); + } + + octeon_zero_partial_product_state(); + return true; +} + +TRANS(MTM0, trans_mtm, 0); +TRANS(MTM1, trans_mtm, 1); +TRANS(MTM2, trans_mtm, 2); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207929; cv=none; d=zohomail.com; s=zohoarc; b=m3L356M+6KBZj31rMKTWQ6TKy9nqTY+aa0Y8jpmUYi6DLnJbpVBkpcXnN33XGJOFAaCJMBzmp6jtb8xQAPZXWXnCYCkf3TAfsSY4nr+93ZNkxQH6YSVN5qyfKsX51EX0RJaBrmt7Dq1Zc1kBD36t2EacoNkyiBfRDX8WJVH/ELo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207929; 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=Qx1EB3AzUT0IaeA4UDNUUR4EbpM8WjBRGlVYCivFgZU=; b=ezIwCbx/wAjZBbHyDBCbhIms7oOMGdu/bbw7WR2PqcAuyMurCR4w+EBjTsKJD4wpZBbtF2P2JTrJ/cn4r0hBJcfmeQR59kdN1dsg+aWij5K3ATfpbQbaqxxBCwPCaSc14kt4lVOewnAHe2oiczancnMCBRBY30+YkE7HC8gJJxw= 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 1779207929984864.8253448802931; Tue, 19 May 2026 09:25:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDm-0006kn-PI; Tue, 19 May 2026 12:23:06 -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 1wPNDc-0006fl-RL for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:56 -0400 Received: from mail-oa1-x35.google.com ([2001:4860:4864:20::35]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDa-0000hR-Vn for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:56 -0400 Received: by mail-oa1-x35.google.com with SMTP id 586e51a60fabf-439b2aad735so1597311fac.0 for ; Tue, 19 May 2026 09:22:54 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207772; x=1779812572; 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=Qx1EB3AzUT0IaeA4UDNUUR4EbpM8WjBRGlVYCivFgZU=; b=l+1Ie/mYrcRE6fHgJpBfnJ8y4qAXxxIpiOpOObuMlJGYC6rrpg3Vy9r1PLMH2p6/Ss nh5kaQQAjcIljp4iT8/pqE8QgdtFwv+1xngN3BCD91mJxobzumstpcKF3+ddS3mVG3qr wafEOsI2hEGAyTknH0YjF5r3AN26TUQClhLISrMbqkHt8kexsz/I8AFzMO5/2/LBquC8 zLFylmbwyfG3hpSmbUGSTwvt1FW65n/Srhqil0kZbn8xRZVh8ZeKTWuje4OkHHD9F9WT UaZdoCxR0VgXwoBeSw1Sciqk1T7gZ8aRilPgsFCZQCjSU14Co3106xE4AL/ANWJqSo9E EblQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207772; x=1779812572; 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=Qx1EB3AzUT0IaeA4UDNUUR4EbpM8WjBRGlVYCivFgZU=; b=JTTvN+9EBinJYhMwfu7yLUSP05Tky13sEJ+6kyadhTIV54TW9x685eMKLKI4BvO48h NeXcwPyvJy6cdTgP7buYU0w07IPzKm12GpNWlFrFjqQH71ql6mLCdKWAImcpe8DPNRwi 0J7f8qOTPv5DZAkn3IuozbzbVLnW6sm592OPkZb95mYfzN/4mM2SDNEtR9Kzl6HCZQTj NxHP/amB9bDPYpDR5SWt1zRosA3RZuCq+zpwk8qNvHx9TKAfSzCCYrGOU58euFNWxy51 klGIkgbfYFaXXY89qARSw2q6BisKMELHML3O4yJaCvKnHbMyceqfm3oPVuaZ9oTIpOcq RohQ== X-Gm-Message-State: AOJu0Yy6ZmRN59WAPTuApvyGSERwuNPV/5LqMze19VW2jXKvHsfUUeRI Heyr3V5dxMxesitkMmpODFjl0Hg1puW2swgHrB0G5F3TqXgoxpKXlUY8 X-Gm-Gg: Acq92OG4s7xiy2I0NdGRaRqc+uHxtUxJFh/s9TnHRm2nx724wVixWGiKfHy9MqBbW5N 8bIYYOsQ9XDdfmtfGwop65PpEarCbUd7DVbQAm5rINpGZDRClctyjuh95Ycq8WK5G4AQev2/1t+ lkm9z4ToCkHvxuvBAJ7UfSS0FnxfIGKTg1tpG2LkP1dGPj2htc3eHzUtiB36y/KKK+f/FlEIWG5 KrN+0Q2gtqAvv+JM2nlLRaKa1o0pUPfyWcJG0+KqBxdy69cTEr7UplIwH/lmBJE+L+hZUEJI23s qx8WECQtD6K+Nfh1bD2WEhEs6nyMQCg1fK/a4Cy0ZRvtqcatDlzAJS4kfEJu6VjBjzKPtTlc274 Lva5GcK89KezlzwNqK/hbngmTrArgYRMP4SwgLYTwQx+NMJ2IZ0wbj/bPvjktiaSyoUjqt5Rzde Ow2caCIhDK4wn3JoN+UtAitFzA7ZnDWcb4HlZaGiDQFOfgtB8Yb8GJakTqVfGlZYSp9UNa4thBc /CCwNz42SGawAebB1zNWSIS2rXJnKn6lIwBD+eTipXbxHmvjuGrPwNPD204DF/C/cN0IWaz+2zd wNo= X-Received: by 2002:a05:6870:e6c1:b0:439:b52e:5e83 with SMTP id 586e51a60fabf-43a2dedb48emr12860332fac.37.1779207771966; Tue, 19 May 2026 09:22:51 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:19 -0600 Subject: [PATCH v9 17/40] target/mips: add Octeon MTP instructions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-17-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::35; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x35.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207932295158500 Add the MTP0, MTP1, and MTP2 forms. MTP0 loads the low Octeon3 partial-product pair from rs/rt into P[0]/P[3], MTP1 loads the middle pair into P[1]/P[4], and MTP2 loads the high pair into P[2]/P[5]. For MTP0, also set P[1] to zero for backward compatibility with Octeon2 VMULU. Legacy single-source encodings have rt encoded as $zero, so the same translator path also preserves the older Octeon behavior. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard Signed-off-by: Richard Henderson --- Changes v2 -> v3: - Split MTP0/MTP1/MTP2 out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) Changes v3 -> v4: - Keep the Octeon3 two-source rt high-lane operand and document that legacy one-source MTP encodings use rt =3D=3D $zero. Changes v5 -> v6: - Zero P1 after checking the CN71XX register-state table and description. Changes v7 -> v8: - Combine MTP0/MTP1/MTP2 in the v7.5 inline TCG translator form from Richard Henderson. --- target/mips/tcg/octeon.decode | 4 ++++ target/mips/tcg/octeon_translate.c | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 5139543b15..bb0a9f1d99 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -51,6 +51,10 @@ MTM0 011100 ..... ..... 00000 00000 001000 @r2 MTM1 011100 ..... ..... 00000 00000 001100 @r2 MTM2 011100 ..... ..... 00000 00000 001101 @r2 =20 +MTP0 011100 ..... ..... 00000 00000 001001 @r2 +MTP1 011100 ..... ..... 00000 00000 001010 @r2 +MTP2 011100 ..... ..... 00000 00000 001011 @r2 + &saa base rt @saa ...... base:5 rt:5 ................ &saa SAA 011100 ..... ..... 00000 00000 011000 @saa diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 67d95423c1..f778ca22f0 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -242,3 +242,26 @@ static bool trans_mtm(DisasContext *ctx, arg_r2 *a, un= signed int index) TRANS(MTM0, trans_mtm, 0); TRANS(MTM1, trans_mtm, 1); TRANS(MTM2, trans_mtm, 2); + +static bool trans_mtp(DisasContext *ctx, arg_r2 *a, unsigned int index) +{ + /* + * Octeon3 two-source MTP forms load lane index from rs and lane index= + 3 + * from rt. Legacy one-source forms encode rt as $zero. + */ + gen_load_gpr(oct_p[index], a->rs); + gen_load_gpr(oct_p[index + 3], a->rt); + + /* + * Octeon3 clears P1 with P0 so that VMULU sequences remain + * backward compatible with Octeon2. + */ + if (index =3D=3D 0) { + tcg_gen_movi_i64(oct_p[1], 0); + } + return true; +} + +TRANS(MTP0, trans_mtp, 0); +TRANS(MTP1, trans_mtp, 1); +TRANS(MTP2, trans_mtp, 2); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207980; cv=none; d=zohomail.com; s=zohoarc; b=KvkS96bKtksyzN0MrJq7uINvsD60xcC1TUJCcJJK6Mm0vovCuC3txZlULpnHR2rSPtZms4+R0CYo09BjXBYIht17OcMnXVO5a0er+8Ra7OjmIdikpd2BLpibg4GDfGqk4ti/OXylRA0G9YUPmfAbAUx8Ou7Tx1rXEWvOhjZC0ZM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207980; 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=mgKAzKnR77d/l6h+4Aftoi97MN3PXeprHi74gTNB9oY=; b=CGB+Ts3QU15LJ7WJIVyPsEfXwyghLyWk8k4pdVcXs8H4vAHy0eyWm+0U2trvzrEWsxSo+463elLp6PDEaJZT3Vl57NzVWJWoonjVU9ZsbIlL9LNwT6uPLe2Wpo34mBM3JfnKCdhm6VIG5aPg7Ocv64xKWA/4gZWCVzU5Z1QRWk0= 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 1779207980566303.1042119263682; Tue, 19 May 2026 09:26:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDm-0006kH-6G; Tue, 19 May 2026 12:23:06 -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 1wPNDb-0006fa-OZ for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:56 -0400 Received: from mail-oa1-x35.google.com ([2001:4860:4864:20::35]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDa-0000hM-3F for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:55 -0400 Received: by mail-oa1-x35.google.com with SMTP id 586e51a60fabf-4042fe53946so1434826fac.3 for ; Tue, 19 May 2026 09:22:53 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207773; x=1779812573; 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=mgKAzKnR77d/l6h+4Aftoi97MN3PXeprHi74gTNB9oY=; b=bguN7kp3K6AS03vCNCeuLjO31jLSSpDBPiQdRC86PGrQUhxIu17BuGpFlGr8gCmgXg RMBT5Kakp3N4/eto4y2JPCY8L+invxZF8KLJUMiw3h2nF/LWXarDdLQncAlZmkYb+eBD kKxLDq4EimcgPlgEh6tzjCR2MCajFBFoaNSTPy7MKjpa+4rrqvCgL8qdAucoqrhMsObV S9SGyEDbC2DuL8t6UxgVGkCRdVRW2+5fNBQRurbssmz8nKgVHhkR4QuUUXTJV0juG8AR rd5u/1QB0+Z2I8YkqdbXQbFv/Yu49PZam98FUhLuJMYTn7Ssh0voM7DZonkN9dwB+5BZ GKYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207773; x=1779812573; 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=mgKAzKnR77d/l6h+4Aftoi97MN3PXeprHi74gTNB9oY=; b=hf41ZuKasUaqBi1G5uuZTRBQd0tc3yWVCaaHUMW4sS/4kn76pDCBw5qUI619qkG4q5 PIBG/Pdfms1z5fF7ww5BHTyzYGjuyjZ8K24YHWkrchzKzDhRxpU/82pdrRMb0RzPN9jT 0jvxb/GTmF0SotKC1jtddgDvPsLkxZd2p8/tmj3KweFyyc2b53VSp1evAxxp4mA6pqlj AjPXP0t4oG2UBC+IWkovdiBiXujrB7d/mQ+wPwyhkZPVxKjVAeAkInObxLHTnxJtZvgN P3CY/0tosa1VJqPSdvfqACTprfPSOs8/2jKtsbaRGmvdMe32WTdVfgViAqXoj+LIVpuK btIw== X-Gm-Message-State: AOJu0YzoXwwt0V1MXl186GZVVpRe8bkT4C+t+y18IFa/yBphR0pZE7nn gGxjbzgr600QlrRWCm/AMYcsAhRRu1HQqbfv8SZMOEiJcbGqUmDSVURz X-Gm-Gg: Acq92OEVCACSXPc/Tn3dbSO6KVW0b23nKGWyoM3oNYLblNInWCY1H4JicAWWO7HXPBD Df3toaD3TUZd2mcTI5yHIIPEPQLExqAJVJnCLfJYmnmxKCk3t9s6GdyG1F19e0pMg8rpUaV5Xg8 i04nHu0wvtGHJaOqG87Tx6WnZEXRGsr6S1x19bUznT8YTGIMx3OssCNU4KoZTyU7jpB1SSu5Wg3 l4vNIuVQIVMrUO7jrEtWKxY2WzClaFSf54PACar+ozSqCSLmTk6U3VnGYE2O54CQlkTUwKd+fmJ T9xKErzF9gRFe2IMsbe6t8jeBvMt0yvxVqh3GMVsqjBUtpGw7LLZniHX7xLUnpvsD1OWTcQ7thl PDsArOTZufjfLT13HZi/GdIvWj68j4FQdJYZeQeDGq2703E680A/PN1ywTMy0QQg7cf/cl+Zk52 1nkWGN3t//2ZqLDIXc09GHG09absLJpr8OZ6Enc6ewimRlUZtCX9ZTKbfKC20geZTQHNhn9pLPP STGbzQjPv+/wzp6R50uefgqqeyX3jKFpxHqhuYFH2Fp2WEoGVtU5EddKxTYAIPb6R3l X-Received: by 2002:a05:6870:1683:b0:42c:2c15:375f with SMTP id 586e51a60fabf-43a2d90adaemr12421250fac.2.1779207772888; Tue, 19 May 2026 09:22:52 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:20 -0600 Subject: [PATCH v9 18/40] target/mips: add Octeon VMULU instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-18-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::35; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x35.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207983014154100 VMULU multiplies the active Octeon multiplier state by rs, adds rt and queued partial products, returns the low result, and advances P[0]/P[1] with carry limbs. Expand the two-limb accumulator operation inline with TCG so the result and partial-product state stay visible to the optimizer. Signed-off-by: James Hilliard Signed-off-by: Richard Henderson Tested-by: Philippe Mathieu-Daud=C3=A9 --- Changes v2 -> v3: - Split VMULU out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) Changes v5 -> v6: - Rename the translator helper callback typedef for clarity. Changes v7 -> v8: - Use Richard Henderson's v7.5 inline TCG translator with tcg_gen_addN_i64. --- target/mips/tcg/octeon.decode | 2 ++ target/mips/tcg/octeon_translate.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index bb0a9f1d99..36ced0bb33 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -55,6 +55,8 @@ MTP0 011100 ..... ..... 00000 00000 001001 @r2 MTP1 011100 ..... ..... 00000 00000 001010 @r2 MTP2 011100 ..... ..... 00000 00000 001011 @r2 =20 +VMULU 011100 ..... ..... ..... 00000 001111 @r3 + &saa base rt @saa ...... base:5 rt:5 ................ &saa SAA 011100 ..... ..... 00000 00000 011000 @saa diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index f778ca22f0..3216f2b2eb 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -265,3 +265,38 @@ static bool trans_mtp(DisasContext *ctx, arg_r2 *a, un= signed int index) TRANS(MTP0, trans_mtp, 0); TRANS(MTP1, trans_mtp, 1); TRANS(MTP2, trans_mtp, 2); + +static bool trans_VMULU(DisasContext *ctx, arg_VMULU *a) +{ + TCGv_i64 x[3], y[3], z[3]; + TCGv_i64 tmp =3D tcg_temp_new_i64(); + TCGv_i64 zero =3D tcg_constant_i64(0); + + z[0] =3D y[0] =3D tcg_temp_new_i64(); + z[1] =3D y[1] =3D tcg_temp_new_i64(); + z[2] =3D y[2] =3D tcg_temp_new_i64(); + x[0] =3D tcg_temp_new_i64(); + x[1] =3D tcg_temp_new_i64(); + x[2] =3D zero; + + /* Z =3D rs * (mpl1 : mpl0) + rt */ + gen_load_gpr(tmp, a->rs); + gen_load_gpr(y[0], a->rt); + tcg_gen_mulu2_i64(x[0], x[1], tmp, oct_mpl[0]); + tcg_gen_mulu2_i64(y[1], y[2], tmp, oct_mpl[1]); + tcg_gen_addN_i64(3, z, y, x); + + /* X =3D=3D (0 : p1 : p0) */ + x[0] =3D oct_p[0]; + x[1] =3D oct_p[1]; + + /* Y =3D=3D (p1 : p0 : tmp) */ + y[0] =3D tmp; + y[1] =3D oct_p[0]; + y[2] =3D oct_p[1]; + + /* (p1 : p0 : rd) =3D Z + (0 : p1 : p0) */ + tcg_gen_addN_i64(3, y, z, x); + gen_store_gpr(tmp, a->rd); + return true; +} --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779208039; cv=none; d=zohomail.com; s=zohoarc; b=NtIYvJ8vsG3VzQIETP2h4ol4bpV/vt6ld20xI3wlrwfdTRlMKlh/hU9t4pdGPcfNBZT7BMTz0XcUcdqKTQddxAmf7x7TqjH7343lEndxdpd8SlDedE1132X+vAUhg/6+hFl/y9+xjUtHO4scOAuNtLhRtI+X6ScLq6aXicGRKB0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779208039; 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=+K7GsPrs74NhySxVr9/jdD/zzn0n+VAvyT3Viig4CUI=; b=geeNQd6ZWi/mp05PJ4jiaqdByOQ1uOqC/QIBLIbBqgCD84hf8ZxtDEg7PeW+4/3dRRdc1+TL+Z1pAk4JdioYXykeTyF3l2INhCm//xkIHz7D2CNbzhtXOfev0xknfwRGLQDYa02y+gMJIXKyiyauQti/974SQNSfLadhiQieoEo= 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 177920803995667.87497118373142; Tue, 19 May 2026 09:27:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDm-0006ks-Rp; Tue, 19 May 2026 12:23:06 -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 1wPNDd-0006fn-1i for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:57 -0400 Received: from mail-oo1-xc30.google.com ([2607:f8b0:4864:20::c30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDb-0000ha-4J for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:56 -0400 Received: by mail-oo1-xc30.google.com with SMTP id 006d021491bc7-68470763896so1948072eaf.1 for ; Tue, 19 May 2026 09:22:54 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207774; x=1779812574; 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=+K7GsPrs74NhySxVr9/jdD/zzn0n+VAvyT3Viig4CUI=; b=ESDT/9xahIk+zLcR+IId1/yzlL3W8HKEbt11vQO7HT63Dk9rnw7uwoN0Y8caTrbx68 y7/NC/itDBH1Ynb3RRFNaNhzWzWaS0xn6w1SEK2QaAmDJ+8ZLJ0x58Rz/iGfI8fWwoT2 8zLT3rm8rKMIYH5F7U2Y4Umfo4doine+xO2yVRCK0CDJdJ5aemP8DRe0+5jjmme9dqLU KFpGtJCABxkvIqw5oGRFprVnMyHNz9JI+hnQgosQMDQvDV3SXUT+bdE6B8OXlzFdy/wm P5jbEfyO4hJTIJhPF8e42orhg6t3ImUlY70CL+fJEAdjaYdqt+vr11/8zz7AcN9QlVUG xajw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207774; x=1779812574; 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=+K7GsPrs74NhySxVr9/jdD/zzn0n+VAvyT3Viig4CUI=; b=hphG0DWvAYpPf/iXwd6obfyJhcfei+bDdXpOBb4DmndmZxpcKQFIt2WWhV0tQQSBDV 9NQMFs/xIS4jfjxBJnG93X4Sq88CdqyX98EHxPuZWvYBnBH6Nft/FkxRgI+xxLQN6fMj 2RnADzYBKtDytWzxrscfYKrtFaqTHGVSm37+SwjltwbVZDgtvjj42Ubr5/0LfIdWk8/u 0Lqzoin6e7/MfphEwUHvKsm9M4AhCUWIFteOVizkhb6P6x2xE7iet2RN5K4WQlO3KUKD hPhTf57MFoQ4Xpq87ZJ3Z89Tan/0uP0GSwApjs+SCOLfqJRYWBlZcsCxsiEBFAnVIkfT fF3w== X-Gm-Message-State: AOJu0YwlH2TixS9p+f0bwiC22tg5+kHXbypZvva/1c8lchVeqznzQrtM dekOBa2WVrqRQjb6sNSnzIaFw16C9mRLOD/RN32eQYuTzQn/UrWdmdyT X-Gm-Gg: Acq92OFgcu81StWjqleIhMzLio3X7GKDRs7nMDrVz/FlZgmOfIjBnXzgPysCMgTc3uQ 0Bg1AW8WVXreb9iinLnVn6zyZVipHbn/gKlKD4hR7HwgycUS6YmHnAYHr99Im+Uvj2ISR/iXw0j cHswlgxzVDcfI3SNmg3TI/M72elUag/uMAEW/8NX4Fq3UOzdG1xM7iRH/BMqCmaplnaoCfa4fsb ToMdjAMJ9mdJFx4+3Nk30ikMoWItHYw+aE69Z0SLq+/09tc9E7h0AJ8XffKw3trWZlrAHmS5jBp JwtLwflTg+9VG5FiWErKon27tWYayIfdlKku5Vhw3uov7fTY0GyG6AIM1dHfYDZDUjrojiNShMc kLRRVhCvSKXx9C0c87VwaY/DIlQbsL9zsMbl9YzIGNs3cR1BFnVDHY9bLEWgczyb07Ibh3Io75y NMKZqv68qQ9/Vj58DvK6AX3IDrsEDGcy8jGjeRS4zlGT+GGZ46kgXo2niU6mfYpaW+vZYOix958 SzoozXNbVoET8qfpMFM0oeQ7O3jvEcqFVhmn07jihLDIrxjyzmtnhjvHLAunSvCWqP9 X-Received: by 2002:a05:6820:4deb:b0:69b:6d47:8181 with SMTP id 006d021491bc7-69c942e20f8mr13849864eaf.18.1779207773721; Tue, 19 May 2026 09:22:53 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:21 -0600 Subject: [PATCH v9 19/40] target/mips: add Octeon VMM0 instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-19-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::c30; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc30.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779208041434158500 VMM0 multiplies MPL[0] by rs, adds rt and the queued P[0] partial product, returns the low result, and feeds that result back into MPL[0]. It sets MPL[1] to zero and clears partial products. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard Signed-off-by: Richard Henderson Tested-by: Philippe Mathieu-Daud=C3=A9 --- Changes v8 -> v9: - Reuse octeon_zero_partial_product_state() for partial-product clearing. Changes v2 -> v3: - Split VMM0 out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) Changes v3 -> v4: - Document the Octeon3 chain update behavior. Changes v5 -> v6: - Zero MPL1 after checking the CN71XX VMM0 definition and add MPL1 smoke coverage. Changes v7 -> v8: - Use Richard Henderson's v7.5 inline TCG translator, which keeps only the architecturally defined MPL1 and partial-product clearing. --- target/mips/tcg/octeon.decode | 1 + target/mips/tcg/octeon_translate.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 36ced0bb33..f9c32e1dee 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -56,6 +56,7 @@ MTP1 011100 ..... ..... 00000 00000 001010 @r2 MTP2 011100 ..... ..... 00000 00000 001011 @r2 =20 VMULU 011100 ..... ..... ..... 00000 001111 @r3 +VMM0 011100 ..... ..... ..... 00000 010000 @r3 =20 &saa base rt @saa ...... base:5 rt:5 ................ &saa diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 3216f2b2eb..10fd4e9ab2 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -300,3 +300,19 @@ static bool trans_VMULU(DisasContext *ctx, arg_VMULU *= a) gen_store_gpr(tmp, a->rd); return true; } + +static bool trans_VMM0(DisasContext *ctx, arg_VMM0 *a) +{ + TCGv_i64 tmp =3D tcg_temp_new_i64(); + + gen_load_gpr(tmp, a->rs); + tcg_gen_mul_i64(oct_mpl[0], oct_mpl[0], tmp); + gen_load_gpr(tmp, a->rt); + tcg_gen_add_i64(oct_mpl[0], oct_mpl[0], tmp); + tcg_gen_add_i64(oct_mpl[0], oct_mpl[0], oct_p[0]); + gen_store_gpr(oct_mpl[0], a->rd); + + tcg_gen_movi_i64(oct_mpl[1], 0); + octeon_zero_partial_product_state(); + return true; +} --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779208082; cv=none; d=zohomail.com; s=zohoarc; b=V9qSB/gzvAOsL9pYO39mWaqpYmJV2Gmky9mePLMsLhD1jGLBFsWLCZjHUbmi7cJPOtFnXap9YFi5yn6pJ8P5TTxPGleQ3QNixGGyElo+6WtcrG6Xy/d7SffSSLUXtMkn9Qp/SdkrsLUcb1HeTtEub/LFlrONR2RozMQZQTJBzaw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779208082; 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=fkzFn/bWS3NMM2yiowce5yNaZJIo3NGIidCKxRI0gLU=; b=M/GCtljcAyukgoWd5t+jJ6/QpTRok63HMTBUBw3EEL0TueDt75hYkbjtJtHyfHcuphp1l888Hbr6nhsEwkmZb0mdSi0o+ROHHJ0JMrjvGZTWszmtL+8fVQfDLSrBQhBfhrnuq1z2BVCNnAU2K5hLkge3GUzsX+XGsUcmSLuMQlE= 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 1779208082513892.1267852098186; Tue, 19 May 2026 09:28:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDn-0006lY-Fz; Tue, 19 May 2026 12:23:07 -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 1wPNDe-0006gL-K9 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:58 -0400 Received: from mail-ot1-x334.google.com ([2607:f8b0:4864:20::334]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDc-0000hy-SN for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:58 -0400 Received: by mail-ot1-x334.google.com with SMTP id 46e09a7af769-7e4de538f83so2225457a34.1 for ; Tue, 19 May 2026 09:22:56 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207775; x=1779812575; 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=fkzFn/bWS3NMM2yiowce5yNaZJIo3NGIidCKxRI0gLU=; b=omWd3LWeIO/PubzrirbX8JtsFy3Z5A8LNaVIBxVNFBgpEd9vDN/ubY5HmRNaXNbtLH uhwWyTXpylySulnnC1iDJsMs65lHfF4bnV5L/Y+NXxXN9+wA3S5BtFjJ2de452pwOxE7 w+A4E0nSEz1Zrn1CZY/mxnQUSs4osaLgzlsDs0zrAsVj6Rc1ZW8JiAhduDO8QNnCLr0L +ZGike/RPHTq9aoFf6BJ6bFWkw7/ysSpZRpjxNJDx9Sijs/c1LlTnYG+fX35hv35CcV1 xBqzwfo7XOu05TzAOI9QsSlxAzgYPtH1Cr4nB5+6QMGr5TdR7RrjwjXggC2N2zwK56xo cZkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207775; x=1779812575; 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=fkzFn/bWS3NMM2yiowce5yNaZJIo3NGIidCKxRI0gLU=; b=sW0MJrunq6KL+jwKh5Ft0GeszcF6eY1nZg+8518fKN250+dgmzUeoAhhrCXCNNmJA5 QA7WIQpI8M2alPExieks1cFf7LFvyU7WhH48wqUHDpBi5MW7m7fLXNFkklkJFmM+Q7eR Q1/T6wWtSfZg+Yu9kXGi6moo85WCpVyWxM2Xu5PTHj0aVbgarPoWio5DYojewTnpakVG hDfUDA19fATcvCn9T4WsFXxMdodqTjtflLNBu1hjbrqhKeh2DcIgd1ZqvkXwrNYb7w+Z S1lNR67fYv4Blegu/2ph6L1dktR3Txf1+UhokktYa4BH3vBex+gzO7TXXn0Sp3V3eL4Y dSqQ== X-Gm-Message-State: AOJu0Yzm0xwORvs3G4Eu8joP9DQ26WtVEIVPV/yoc6kvAjzzmC8XDVjM uVvKdduFfUM7AzAQPl1Q650bAtRdKjegNoNWzQBG8xE1aMNiF2IFyrAR X-Gm-Gg: Acq92OGT9I//7TLsKaA0e/nr+sVlnMitJRa6y8Dhle+/j+mP0ZrVuK6vu9UQd1RZ/Ae G9N7IplR4C235mcEk6bGAaIaWl3z695vr4HwxKxwzxBPWJ2jzYclIpRRjneHYm3GMLM6kSOq13z aluucC9NCu/elP0JeL38Vv/Xt6CG9ERUcm6bBjUfjcJuQl35MQgoJDH7jjaEtApNykf1VtUy+vh VTgMPxr62o7eRfdDUzc2P83cnvh1+H/bm1KbTTZ44UGQhjjESlYrSNWFQ9Z4lXWnUzsdpIgZa3J +oBCcqbJUWE6l+j1d1jaSObMLVbBvuLQfIxC2SGiAq4YXmxryJiWdRtO7wm6k2uvt1EV1RCSS5X HCAvn/idbzNI2rqlRgjcJosOEgX5s9St+JqjQB5uvOuTsVt39r7B7ewnNapYS+6/F/m92f5ouzp plwhVxFbSCQF2VoZ2rVyg72I65QiyKINdPVCubIRFucvo8bIo3v40zf40uApuDCBmMls1ta35xQ vh1+6S6dgP0PCoJu3t3R8IkBguMz3dC2P4VG+cdrfOsYt2EwuiidVOavTAg2RLSw1Tw X-Received: by 2002:a05:6820:f01:b0:694:a02f:75aa with SMTP id 006d021491bc7-69c9c05bcabmr12138000eaf.57.1779207774621; Tue, 19 May 2026 09:22:54 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:22 -0600 Subject: [PATCH v9 20/40] target/mips: add Octeon V3MULU instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-20-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::334; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x334.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779208084727154100 V3MULU extends VMULU across the full Octeon3 multiplier state, adding rt and queued partial products. Return the low result while shifting the remaining accumulated limbs back into P[0] through P[5]. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard Signed-off-by: Richard Henderson --- Changes v2 -> v3: - Split V3MULU out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) Changes v3 -> v4: - Keep the Octeon3 MPL3-MPL5/P3-P5 high lanes used by the two-source MTM/MTP forms and Cavium SDK/runtime code. Changes v7 -> v8: - Use Richard Henderson's v7.5 inline TCG translator with tcg_gen_addN_i64. --- target/mips/tcg/octeon.decode | 1 + target/mips/tcg/octeon_translate.c | 40 ++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 41 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index f9c32e1dee..4d0ad05834 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -57,6 +57,7 @@ MTP2 011100 ..... ..... 00000 00000 001011 @r2 =20 VMULU 011100 ..... ..... ..... 00000 001111 @r3 VMM0 011100 ..... ..... ..... 00000 010000 @r3 +V3MULU 011100 ..... ..... ..... 00000 010001 @r3 =20 &saa base rt @saa ...... base:5 rt:5 ................ &saa diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 10fd4e9ab2..d57724e903 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -316,3 +316,43 @@ static bool trans_VMM0(DisasContext *ctx, arg_VMM0 *a) octeon_zero_partial_product_state(); return true; } + +static bool trans_V3MULU(DisasContext *ctx, arg_V3MULU *a) +{ + TCGv_i64 x[7], y[7], z[7]; + TCGv_i64 tmp =3D tcg_temp_new_i64(); + + for (int i =3D 0; i < 7; ++i) { + z[i] =3D tcg_temp_new_i64(); + y[i] =3D tcg_temp_new_i64(); + } + memcpy(&x[0], z, 6 * sizeof(TCGv_i64)); + x[6] =3D tcg_constant_i64(0); + + /* + * Z =3D rs * mpl -- 64x384->448 bit multiply + * Compute even partial products into X and odd partial products into = Y. + * Include RT into the odd partial products, which are 0 in bits [63:0= ]. + */ + gen_load_gpr(tmp, a->rs); + gen_load_gpr(y[0], a->rt); + for (int i =3D 0; i < 6; i +=3D 2) { + tcg_gen_mulu2_i64(x[i + 0], x[i + 1], tmp, oct_mpl[i]); + tcg_gen_mulu2_i64(y[i + 1], y[i + 2], tmp, oct_mpl[i + 1]); + } + + /* Sum even and odd to produce final product, plus rt. */ + tcg_gen_addN_i64(7, z, x, y); + + /* X =3D=3D (0 : p5 : p4 : p3 : p2 : p1 : p0) -- x[6] is still 0 */ + memcpy(&x[0], oct_p, 6 * sizeof(TCGv_i64)); + + /* Y =3D=3D (p5 : p4 : p3 : p2 : p1 : p0 : tmp) */ + memcpy(&y[1], oct_p, 6 * sizeof(TCGv_i64)); + y[0] =3D tmp; + + /* (p* : rd) =3D (0 : p*) + (rs * mpl + rt) */ + tcg_gen_addN_i64(7, y, x, z); + gen_store_gpr(tmp, a->rd); + return true; +} --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207805; cv=none; d=zohomail.com; s=zohoarc; b=PWjQtC+D46/f0TrcpuremW1hHzT076M+ciRvCBRUJL4atQCPwiNfphnNU5dBkkfZ6e01WbF9Q2lNNMspDlxb6crB4OTaNZRwbP65h/b4FJFlHM5p2CtSLqYtLKiJk4fMMzxz29B3vuC3eDjWi6U49t7lo3pKC99AdFnpbJ4weHs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207805; 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=HrebxwzUBDd0SY3zdVVezouUr7mNIVnHEblwsK+x06o=; b=eSiIR7DNtKgxYqXMqI1uhcbgSMgMEe/K2DUMCdOBZ+FcijVT3zzwutYlXPrvvYULPgjOypPWHTaOnesj8p8STqGIjZXjmArxCEWx1iZPdWpLguIdn7IPgwGvLx+c21MnZMH1j6k0coGxApQWptdGXIWYUZMbraxIJPMFz9MFaMU= 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 1779207805609491.87609920321904; Tue, 19 May 2026 09:23:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDk-0006k4-TV; Tue, 19 May 2026 12:23:04 -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 1wPNDf-0006gq-GP for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:59 -0400 Received: from mail-ot1-x32c.google.com ([2607:f8b0:4864:20::32c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDd-0000iY-Oq for qemu-devel@nongnu.org; Tue, 19 May 2026 12:22:59 -0400 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-7df05fc49e5so3961270a34.3 for ; Tue, 19 May 2026 09:22:57 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207775; x=1779812575; 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=HrebxwzUBDd0SY3zdVVezouUr7mNIVnHEblwsK+x06o=; b=FZc22upW8O58x0S4YFzQt5OG21TRuRdC8ItunaBnjj3WeypWULX+rzx7Un53kR8V93 Sb/03M0Nc9iilmLwkcppk4BYfs+pWoU7gpA2mwW7S7ptIYzXvjjiKZ7ZziGD40yrBKdo NbG9izlgdnz38cMlG6QhVOIqc32KKKbl41CJgLj86z+TjD+jdhI2KKw5fWz+FkXLh8LF L3zHHSc6V8TDjma5/P7Fp3XTc+HxcsLLmc39BpFzRV0xxhWAAKkNBs2RENCXL8juovJc 6UrclvYSBSQeVTcTcjrhftzeplhUYq4brpIGSUIizIb7w7SWVegVWd167EEFN68LhJQV Y4rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207775; x=1779812575; 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=HrebxwzUBDd0SY3zdVVezouUr7mNIVnHEblwsK+x06o=; b=Jt4UznAxKm85s13U5mPTlo/bdsrMMmy6clCZjjKJGUVFv+svmUSLU81SzLMekwAAfT bydH6sDfOcubBa1VeknacgcyNX7nck7+yPvH/g5AxuUMhbP5UAhtu5HPSd7SminY1LRN q9Oph4j0/xEpX2oxMLjUVSJCtDx6mbtz9rR228YjcFYsNByOSU7kRF/R9uinGEj/Q7XI ilnw7O27Q2/CO5rOHK9YAQA76XDLR7Cm7BDGGaPoFLGwnQaJUtGh07xjZHWv8HNEwICu deP5QdZ7dnCfi/Cr5PAfM5jbVzMrl/liwxY984SdYt5tor/gj5BYHPl/I/4mSwpSoBBU Ja0w== X-Gm-Message-State: AOJu0YwFXgtjjtW99YJGZvh7v76cc3vs/ieaxlDz/PpdaxeLQYUZAMT9 yBoaj633U0QOkssCNz+6/LrbUtrYNjS/T9yt3b7s9dGzi3QwWGgcENz8 X-Gm-Gg: Acq92OH4eFcg8/MDV5u8MHMbHcbXyKKYfZCd5Vj7ey2laxwZw8+BFIUxOpgKRkGyj+V CVqz9GX2bsp0ktfxm2lLTo+OgaVHkTem+WQgEkUE5N7/ACl/UiCTEFTz9BZwVxUqnVsoTT6V1k6 NY9qHxiZM6aj/q5rBYl90rvs9T0YIl57ZBRd5XSpZGwBXUslkVF3BF+ZFKQM+zhUoNqWpobkEyD EcLwa8zIw/Sz85IDfc3r2611aX5HFJJZybGOI97yN/muK51L+L/yUaGvlrs8USUTC7zBPmJhYLY zqQZhMaVU9J6yPCQFp94ZPMj5z2xfEzeyvVr75KLth/FQZbddLkWDL8bea2mN/NQUoPb9o4byW6 wAsfp4Duj+e4aPIIawKZw1Jhoq5RUdIVvkh/2glXI9WYgL2/da71cLvFE3awAbKRv7U+5vXGYIa 7AE01tBGr7EQOYXCxlG3ufnZ/+z1Ggz/K/GZ+D4GTOfAgXuTYGiNu5TI9luojMnXI8yAOh+fJpo l8Ofz2uh02NR5qK8B0aTdFmsANAqmozZQeU3KHnS6xCnw5uIk3MzRG1Hf65UZOuDxxh X-Received: by 2002:a05:6820:f005:b0:694:9c71:2772 with SMTP id 006d021491bc7-69c942d9802mr14114527eaf.16.1779207775554; Tue, 19 May 2026 09:22:55 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:23 -0600 Subject: [PATCH v9 21/40] target/mips: add Octeon QMAC instructions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-21-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::32c; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x32c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207806869158500 QMAC.0x and QMACS.0x multiply the selected signed Q15 halfword lane from rs by rt<15:0> and accumulate the Q31 product into the Octeon HI/LO accumulator state. QMAC updates the full 64-bit HI/LO accumulator. QMACS saturates the 32-bit Q31 result in LO and keeps HI<0> as the sticky saturation flag. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard Signed-off-by: Richard Henderson --- Changes v5 -> v6: - New patch. Changes v7 -> v8: - Use Richard Henderson's v7.5 inline TCG translator. --- target/mips/tcg/octeon.decode | 4 +++ target/mips/tcg/octeon_translate.c | 60 ++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 64 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 4d0ad05834..2d02b4e0bc 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -28,6 +28,8 @@ BBIT 11 set:1 . 10 rs:5 ..... offset:s16 p=3D%bbi= t_p # SEQI rt, rs, immediate # SNE rd, rs, rt # SNEI rt, rs, immediate +# QMAC.0x rs, rt +# QMACS.0x rs, rt =20 @r3 ...... rs:5 rt:5 rd:5 ..... ...... &cmpi rs rt imm @@ -43,6 +45,8 @@ SEQ 011100 ..... ..... ..... 00000 101010 @r3 SNE 011100 ..... ..... ..... 00000 101011 @r3 SEQI 011100 rs:5 rt:5 imm:s10 101110 &cmpi SNEI 011100 rs:5 rt:5 imm:s10 101111 &cmpi +QMACS 011100 rs:5 rt:5 00000 000 lane:2 010010 +QMAC 011100 rs:5 rt:5 00000 100 lane:2 010010 =20 &r2 rs rt @r2 ...... rs:5 rt:5 ..... ..... ...... &r2 diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index d57724e903..d484b4ccdb 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -356,3 +356,63 @@ static bool trans_V3MULU(DisasContext *ctx, arg_V3MULU= *a) gen_store_gpr(tmp, a->rd); return true; } + +static bool trans_QMAC(DisasContext *ctx, arg_QMAC *a) +{ + TCGv_i64 t0 =3D tcg_temp_new_i64(); + TCGv_i64 t1 =3D tcg_temp_new_i64(); + + gen_load_gpr(t0, a->rt); + gen_load_gpr(t1, a->rs); + + /* t0 =3D rt<0> * rs * 2 */ + tcg_gen_ext16s_i64(t0, t0); + tcg_gen_sextract_i64(t1, t1, a->lane * 16, 16); + tcg_gen_mul_i64(t0, t0, t1); + tcg_gen_add_i64(t0, t0, t0); + + /* Saturate -0x8000 * -0x8000 * 2 =3D 0x80000000 -> 0x7fffffff */ + tcg_gen_smin_i64(t0, t0, tcg_constant_i64(INT32_MAX)); + + /* HI:LO +=3D t0 */ + tcg_gen_concat32_i64(t1, cpu_LO[0], cpu_HI[0]); + tcg_gen_add_i64(t0, t0, t1); + tcg_gen_sextract_i64(cpu_LO[0], t0, 0, 32); + tcg_gen_sextract_i64(cpu_HI[0], t0, 32, 32); + return true; +} + +static bool trans_QMACS(DisasContext *ctx, arg_QMACS *a) +{ + TCGv_i64 t0 =3D tcg_temp_new_i64(); + TCGv_i64 t1 =3D tcg_temp_new_i64(); + + gen_load_gpr(t0, a->rt); + gen_load_gpr(t1, a->rs); + + /* t0 =3D rt<0> * rs * 2 */ + tcg_gen_ext16s_i64(t0, t0); + tcg_gen_sextract_i64(t1, t1, a->lane * 16, 16); + tcg_gen_mul_i64(t0, t0, t1); + tcg_gen_add_i64(t0, t0, t0); + + /* + * Saturate -0x8000 * -0x8000 * 2 =3D 0x80000000 -> 0x7fffffff. + * Accumulate overflow in HI[0]. + */ + tcg_gen_smin_i64(t1, t0, tcg_constant_i64(INT32_MAX)); + tcg_gen_setcond_i64(TCG_COND_NE, t0, t0, t1); + tcg_gen_or_i64(cpu_HI[0], cpu_HI[0], t0); + + /* + * LO =3D sat32(LO + t0) + * Accumulate overflow in HI[0]. + */ + tcg_gen_ext32s_i64(t0, cpu_LO[0]); + tcg_gen_add_i64(t0, t0, t1); + tcg_gen_smin_i64(cpu_LO[0], t0, tcg_constant_i64(INT32_MAX)); + tcg_gen_smax_i64(cpu_LO[0], cpu_LO[0], tcg_constant_i64(INT32_MIN)); + tcg_gen_setcond_i64(TCG_COND_NE, t0, t0, cpu_LO[0]); + tcg_gen_or_i64(cpu_HI[0], cpu_HI[0], t0); + return true; +} --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779208027; cv=none; d=zohomail.com; s=zohoarc; b=kV3QE81nNbvjdPkiFywn8FtZd2CRC1RtBsAFeiNVA3KhyBJ4s3BiVefbpJe963CTX+/JOB+7ujXl739x7QCSL+605NAg8wxu1G3OXyCxKawe+tqxjxBMLFUiJhf2ar30ZpSKXg4HUnS39EbMD/5k1lSLmEouYRFD5ZrgI24Dh30= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779208027; 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=R4mdzt2/MyKbuB5ApeT3m0f/aA2/nCudLZAsrFcpXbs=; b=HHz9iHQFWGCQTqSXSw4f/UjWWtHldfiQmBM0+nKnGUTJSbyo9MDOkR4ecTfihPMfF9OwBN9zQcD4SRijRPwaDjolT4y3s5cWB4LnVJjI/ANX1Cz9W8D0ZrVlTUYo2JeI0NtS7qCRnruQmJddjJOthKnm1SfUx/yWFvOdxLn+Qv0= 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 1779208027253893.14300053258; Tue, 19 May 2026 09:27:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDh-0006iY-Rq; Tue, 19 May 2026 12:23:01 -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 1wPNDg-0006hm-DR for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:00 -0400 Received: from mail-ot1-x32f.google.com ([2607:f8b0:4864:20::32f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDd-0000ic-TF for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:00 -0400 Received: by mail-ot1-x32f.google.com with SMTP id 46e09a7af769-7e36bb16a92so2267155a34.2 for ; Tue, 19 May 2026 09:22:57 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207777; x=1779812577; 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=R4mdzt2/MyKbuB5ApeT3m0f/aA2/nCudLZAsrFcpXbs=; b=o/2DhJKrDYnZeGvusn/+/BljRWGGDf1KeDKlC+f0F5mdRPZWcayA5mvKafVb38RJiq 6M4TPa5tdoplcvhUYz7QscumTnPJ8U5R0MDkWtvHaViohj8RwPh0wGEiTwAx+e2h2VyG YdtQQgXci1nw0GX5W9LPq8c6FJvH8rbirRKToZuysJlAmYBUyfReiTuyQjTswxRvZAS0 B7GoQY6fRkxgy0aUrXEHzEvBPiZK7cGKH8l3x32Jf0m/TLeLaq9l7UfW8aQUaoCBtzog BI0E7jcS9IndTwCFP+1b/L+rIsWqAfgTWmWmGDMtd+kE2Mnzx8L5dzP/fzSXq8AVL0nt sfeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207777; x=1779812577; 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=R4mdzt2/MyKbuB5ApeT3m0f/aA2/nCudLZAsrFcpXbs=; b=UCNqPiS/0W8yXjCg687oqT5sN3hju5mCB1OgK3m6GsFOg+UZveaaiL69e+O++KK/gJ HfJ2gip3uu8oJBp1vjIhhlZLxq87Is1DNjDA+iz3CBSom6ptaXCsw8LpfHQ5OFk1ruYb LC33iMikFghVjcBwh8OjzaADfPS1VtdTC+nVtSq2CYTguXHNVZUBS2coSDsbZgmq6xGi NBSx2uY9qSQrIMyopqGnJn3CRSxvVjDsA9IdG9A71JUEQidbtA4mJCL9OOplTh0AqgSx p5SlAKfWpnkg3gkyAV/nSvVtxH9WPGBv5Q0o/Dmf2jlG+1C+XytFQ0yuiUTu9nTryEIU X2jQ== X-Gm-Message-State: AOJu0YyyR08ZGEQwkg3QSjbOltbn+swDi+ME3QWZapDwDzYAu9r2bF5a ZJ3Z4pRnMS4bh6NT0dK3u+QeKAeVLKUQjRwb13pmvyf8aTbtGZFEy2tf X-Gm-Gg: Acq92OH9q0J6BrnXQa/SljwJSiT69N41A3yvMGNPxNPKlOJf25/4unC8iACnXkTFz1h 75t59j3pIqfQsx8fp0BzrLzrzSJOslIcUjajdoc4RU47k48aRIDkRNwl+MCLUfyEpzNNQaTGSup Cwq+RmO5lMRJX7hibcKN1aHXr1Y6Qx1CXuxS1DbeHM3iHx8GoiCUO4Vi9XqKUzfNmRD4gDW/Y3O F5BN7V10xjG9J/LlPrXagNlBKBfBispa9VPQqD4/U2FZsPSacWigZwmHOQZTuaQrmXAFv86pZUn LWsBTymWAZNFFTFZMnseWz0+MrYprceq+c3M+JqxDDEX8HNJ6VXsTdPsXp2MsRbglAy3AW64IlN NpoVZY9SgnQ4K8yZ76eZkR+8ScMddJS/7AEphvVsgRY6udPPlkqhG1HjwflWyq8kKesfjLL/kEB YPX3zJxBMEiCDVAiMaiffTh8pAsPAKceAwXgJJ+exaa3xCMz+09UbfrvdUSC3qjwY81HenVMmzu VrIuzjNsJn/oXeX+bUcIcKpkUJQiqtYaehsoTGBUYsm10pgscMi4mnPMj64Wq+nf+U/ X-Received: by 2002:a05:6820:6ae1:b0:694:a062:1aa0 with SMTP id 006d021491bc7-69c945887cdmr7226629eaf.47.1779207776621; Tue, 19 May 2026 09:22:56 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:24 -0600 Subject: [PATCH v9 22/40] tests/tcg/mips: add Octeon instruction smoke test MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-22-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::32f; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x32f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779208029334158500 Add a mips64/mips64el linux-user TCG smoke test for representative Octeon integer, comparison, population count, and multiplier instruction paths. Include hardware-backed regression coverage for VMM0 MPL1 zeroing and MTP0 P1 zeroing. Run the test with -cpu Octeon68XX and share the source between the mips64 and mips64el target directories. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split the smoke test out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) Changes v5 -> v6: - Add VMM0/MPL1 and MTP0/P1 reset checks for the CN71XX-defined reset-state behavior. --- MAINTAINERS | 2 + tests/tcg/mips/user/isa/octeon/octeon-insns.c | 204 ++++++++++++++++++++++= ++++ tests/tcg/mips64/Makefile.target | 20 +++ tests/tcg/mips64el/Makefile.target | 8 + 4 files changed, 234 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index eda1e84268..0b405b710d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -311,6 +311,8 @@ F: target/mips/ F: disas/*mips.c F: docs/system/cpu-models-mips.rst.inc F: tests/tcg/mips/ +F: tests/tcg/mips64/ +F: tests/tcg/mips64el/ =20 OpenRISC TCG CPUs M: Stafford Horne diff --git a/tests/tcg/mips/user/isa/octeon/octeon-insns.c b/tests/tcg/mips= /user/isa/octeon/octeon-insns.c new file mode 100644 index 0000000000..9153e37e9e --- /dev/null +++ b/tests/tcg/mips/user/isa/octeon/octeon-insns.c @@ -0,0 +1,204 @@ +/* + * Test Octeon-specific user-mode instructions. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include + +static uint64_t octeon_baddu(uint64_t rs, uint64_t rt) +{ + uint64_t rd; + + asm volatile( + "move $8, %[rs]\n\t" + "move $9, %[rt]\n\t" + ".word 0x71095028\n\t" /* baddu $10, $8, $9 */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [rs] "r" (rs), [rt] "r" (rt) + : "$8", "$9", "$10"); + + return rd; +} + +static uint64_t octeon_dmul(uint64_t rs, uint64_t rt) +{ + uint64_t rd; + + asm volatile( + "move $8, %[rs]\n\t" + "move $9, %[rt]\n\t" + ".word 0x71095003\n\t" /* dmul $10, $8, $9 */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [rs] "r" (rs), [rt] "r" (rt) + : "$8", "$9", "$10"); + + return rd; +} + +static uint64_t octeon_dpop(uint64_t rs) +{ + uint64_t rd; + + asm volatile( + "move $8, %[rs]\n\t" + ".word 0x7100502d\n\t" /* dpop $10, $8 */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [rs] "r" (rs) + : "$8", "$10"); + + return rd; +} + +static uint64_t octeon_seq(uint64_t rs, uint64_t rt) +{ + uint64_t rd; + + asm volatile( + "move $8, %[rs]\n\t" + "move $9, %[rt]\n\t" + ".word 0x7109502a\n\t" /* seq $10, $8, $9 */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [rs] "r" (rs), [rt] "r" (rt) + : "$8", "$9", "$10"); + + return rd; +} + +static uint64_t octeon_sne(uint64_t rs, uint64_t rt) +{ + uint64_t rd; + + asm volatile( + "move $8, %[rs]\n\t" + "move $9, %[rt]\n\t" + ".word 0x7109502b\n\t" /* sne $10, $8, $9 */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [rs] "r" (rs), [rt] "r" (rt) + : "$8", "$9", "$10"); + + return rd; +} + +static uint64_t octeon_vmulu(uint64_t mpl0, uint64_t rs, uint64_t rt) +{ + uint64_t rd; + + asm volatile( + "move $8, %[mpl0]\n\t" + "move $9, $0\n\t" + ".word 0x71090008\n\t" /* mtm0 $8, $9 */ + "move $8, %[rs]\n\t" + "move $9, %[rt]\n\t" + ".word 0x7109500f\n\t" /* vmulu $10, $8, $9 */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [mpl0] "r" (mpl0), [rs] "r" (rs), [rt] "r" (rt) + : "$8", "$9", "$10"); + + return rd; +} + +static uint64_t octeon_vmm0(uint64_t mpl0, uint64_t p0, + uint64_t rs, uint64_t rt) +{ + uint64_t rd; + + asm volatile( + "move $8, %[mpl0]\n\t" + "move $9, $0\n\t" + ".word 0x71090008\n\t" /* mtm0 $8, $9 */ + "move $8, %[p0]\n\t" + "move $9, $0\n\t" + ".word 0x71090009\n\t" /* mtp0 $8, $9 */ + "move $8, %[rs]\n\t" + "move $9, %[rt]\n\t" + ".word 0x71095010\n\t" /* vmm0 $10, $8, $9 */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [mpl0] "r" (mpl0), [p0] "r" (p0), + [rs] "r" (rs), [rt] "r" (rt) + : "$8", "$9", "$10"); + + return rd; +} + +static uint64_t octeon_vmm0_zeroes_mpl1(void) +{ + uint64_t rd; + + asm volatile( + "move $8, %[mpl0]\n\t" + "move $9, $0\n\t" + ".word 0x71090008\n\t" /* mtm0 $8, $9 */ + "move $8, %[mpl1]\n\t" + "move $9, $0\n\t" + ".word 0x7109000c\n\t" /* mtm1 $8, $9 */ + "move $8, %[vmm0_rs]\n\t" + "move $9, $0\n\t" + ".word 0x71095010\n\t" /* vmm0 $10, $8, $9 */ + "move $8, %[vmulu_rs]\n\t" + "move $9, $0\n\t" + ".word 0x7109500f\n\t" /* vmulu $10, $8, $9 */ + "move $8, $0\n\t" + "move $9, $0\n\t" + ".word 0x7109500f\n\t" /* vmulu $10, $8, $9 */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [mpl0] "r" (1ULL), [mpl1] "r" (1ULL), + [vmm0_rs] "r" (2ULL), [vmulu_rs] "r" (1ULL) + : "$8", "$9", "$10"); + + return rd; +} + +static uint64_t octeon_mtp0_zeroes_p1(void) +{ + uint64_t rd; + + asm volatile( + "move $8, %[mpl0]\n\t" + "move $9, $0\n\t" + ".word 0x71090008\n\t" /* mtm0 $8, $9 */ + "move $8, %[p1]\n\t" + "move $9, $0\n\t" + ".word 0x7109000a\n\t" /* mtp1 $8, $9 */ + "move $8, $0\n\t" + "move $9, $0\n\t" + ".word 0x71090009\n\t" /* mtp0 $8, $9 */ + "move $8, $0\n\t" + "move $9, $0\n\t" + ".word 0x7109500f\n\t" /* vmulu $10, $8, $9 */ + "move $8, $0\n\t" + "move $9, $0\n\t" + ".word 0x7109500f\n\t" /* vmulu $10, $8, $9 */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [mpl0] "r" (0ULL), [p1] "r" (1ULL) + : "$8", "$9", "$10"); + + return rd; +} + +int main(void) +{ + assert(octeon_baddu(0x123, 0x0f0) =3D=3D 0x13); + assert(octeon_dmul(0x12345678, 0x10) =3D=3D 0x123456780); + assert(octeon_dpop(0xf0f0f0f0f0f0f0f0ULL) =3D=3D 32); + assert(octeon_seq(0xabc, 0xabc) =3D=3D 1); + assert(octeon_seq(0xabc, 0xdef) =3D=3D 0); + assert(octeon_sne(0xabc, 0xabc) =3D=3D 0); + assert(octeon_sne(0xabc, 0xdef) =3D=3D 1); + assert(octeon_vmulu(5, 7, 11) =3D=3D 46); + assert(octeon_vmm0(5, 13, 7, 11) =3D=3D 59); + assert(octeon_vmm0_zeroes_mpl1() =3D=3D 0); + assert(octeon_mtp0_zeroes_p1() =3D=3D 0); + + return 0; +} diff --git a/tests/tcg/mips64/Makefile.target b/tests/tcg/mips64/Makefile.t= arget new file mode 100644 index 0000000000..042855844a --- /dev/null +++ b/tests/tcg/mips64/Makefile.target @@ -0,0 +1,20 @@ +# -*- Mode: makefile -*- +# +# SPDX-License-Identifier: GPL-2.0-or-later +# +# MIPS64 - included from tests/tcg/Makefile.target +# + +MIPS64_SRC=3D$(SRC_PATH)/tests/tcg/mips64 +MIPS_OCTEON_SRC=3D$(SRC_PATH)/tests/tcg/mips/user/isa/octeon + +# Set search path for all sources +VPATH +=3D $(MIPS64_SRC) $(MIPS_OCTEON_SRC) + +MIPS64_TESTS=3Docteon-insns + +TESTS +=3D $(MIPS64_TESTS) + +$(MIPS64_TESTS): CFLAGS+=3D-mabi=3D64 + +run-octeon-insns: QEMU_OPTS+=3D-cpu Octeon68XX diff --git a/tests/tcg/mips64el/Makefile.target b/tests/tcg/mips64el/Makefi= le.target new file mode 100644 index 0000000000..dbc5f8dc5f --- /dev/null +++ b/tests/tcg/mips64el/Makefile.target @@ -0,0 +1,8 @@ +# -*- Mode: makefile -*- +# +# SPDX-License-Identifier: GPL-2.0-or-later +# +# MIPS64 little-endian - included from tests/tcg/Makefile.target +# + +include $(SRC_PATH)/tests/tcg/mips64/Makefile.target --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207883; cv=none; d=zohomail.com; s=zohoarc; b=DHPgG/DbiHK8LFby8xT9dUt54buOYPOAOF743+FD0HJ7n9GCwWKD7Jknz3E8Ojr5kFzQId3OOHOWGeOO22YS+gEU3Kiyyt84JczEssmBi2qsatz2OKexg8rV6BO/Y3L0MhpA1kVi03a/SL0zmjVkuOpBwyIzbsZLp+WqBsDiypU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207883; 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=ZDOTOwNv3ykJEBKyQWEhKSJArSLHuel/8WiGZhPyhwA=; b=L2QGxQpHlIJICGvdu5Db/hwn8oFmSzWjNC6fWER3NDI0V4RoLs4gM+IiolA7UfYnrujY93C+/4BmYK3Ad6+uPR6LmXAC+l6Qt1hoAyOXpZga0BKcVxR9FDmuYRQjdSOZBzTu9fCT69oZs5xVAgbOkWIiWP+JlKqL6klTKKQp208= 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 1779207883170727.8801022236585; Tue, 19 May 2026 09:24:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDk-0006k0-Pj; Tue, 19 May 2026 12:23:04 -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 1wPNDg-0006iD-UO for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:01 -0400 Received: from mail-oa1-x2c.google.com ([2001:4860:4864:20::2c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDe-0000jd-TQ for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:00 -0400 Received: by mail-oa1-x2c.google.com with SMTP id 586e51a60fabf-439bdbc86b1so1913756fac.1 for ; Tue, 19 May 2026 09:22:58 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207778; x=1779812578; 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=ZDOTOwNv3ykJEBKyQWEhKSJArSLHuel/8WiGZhPyhwA=; b=lJygNGkhCkB9kCjBZd2WCEYbOhAYiSekIfqO1fojFuimL0NpGE9OMxhL2xl55E9J2L x9OHU895MvwXfm0ZyiDeAvF1MTvNwbjDhQC8BhMeWNn0J3SxB8NzVEB++GdwgXtlo4f0 c+lCgOGI+GeU7yGZpJs+SNhJWOM7ICRK5U+nkrplkzO68w16B95PTsFg2mapwLKt6WgI zwDtrYjw4+X9TDpoK5FwEnDRtPJ5dBD9T5JNFB04uviDZlz3Fp2R0YfP9YU9btoCpRUc 8cKv5DbsaCWwbY8QH0LFGTFSxw/ope810inNo6M2g4bUCz91DHkPOVN5y7w7mEQ8TGS1 NbQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207778; x=1779812578; 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=ZDOTOwNv3ykJEBKyQWEhKSJArSLHuel/8WiGZhPyhwA=; b=pgtPzrsV3zJHApAbSd3xXi6lyTENbA2iXpaY2OLu87NP7NAJuLabF3iJKoiJQc91ks K2pCfrPuSqzO6Na+pQs9+iVSmvCk4OiK5Jwkfww+VXE5RmXq8yJ/WZCfIgDsLB2YybEy ebjCvJ6wHebWFjFvkWp7rBKk0/InbCsxrRmq/YBFx9OmU/JvSnDRnsyLcDD7WVTpN+s1 HQGSp2YRTuiKhPXb3kaMwHktEf43vNdF2o6yqMyN/NiX92WnK/OP1tsSD7nHN6Hrz50I N+zeKm0OZPzCwBRQs5Gtl7hPKlWKUZ+N3m91smvd4EgPuE1lr6Tg4JaGhxXOITKTYwk2 kqtw== X-Gm-Message-State: AOJu0YwheKYJvOeADdylUpLhxceoNadlS4eyy2gDzCdRd+WJAjde1oia cv+H0xYIJ9uABrSpz7KXvR2X5o/xWVrIfXiSXEu6Q9tdkG6vMj9K93nh X-Gm-Gg: Acq92OFwnuXuxBrSXHTtd1hXbz7BywGhK1Yy/g7m4/WTOxhjVlc5KqvwhDR1s/ksb0i QOoFSPdYHgbPGgclk2hZnpMiJ1z5fqST5v1G+ohjMmJhEqt8vabgqudWGxB+Oj1v32odoH00nFk 9apMwQHGVa5m86Csbh2xTcB7mdv5IaRSsnUPDjQbSTIgwqWeoTEdfoZSJHp1fOsraFiJwk1tBJe dOTEar9ZHujg2NYK9j3ODdWy9bWUYQMuaOQC6xp8LMHbmaYkiyl+mMYQrqswxq/nAHcklbCGPaD dlW2p4HqixrMPUp2RMb4iqF2PUXBm6oxg07cPYrXcztUKfjdT0FbzKyXuN78u9D69HmgYXCyRvh gfr6lbOhdZesBOpIhUhHpAmyiokiLOM9BL6mMHB86sdGmQKCkhS9eaFntCvqo09OBKlYdxfs+10 0OGnkTvyQcYOcUuZUdfPMrE2X3KyPzA32o2GCMtxCaGfxHSwhXfuKqMrlD6pKu1wgQXElQ5XRiQ 5ZagXK/kUIe3J8abFihGX5lmei/8Jebwrfdk6scXKkmUgH+hWQfvQQ8kra5yOz5toB5i3azU2xi doY= X-Received: by 2002:a05:6870:ec93:b0:3e8:9b72:5cda with SMTP id 586e51a60fabf-439f91d6efdmr13319613fac.11.1779207777678; Tue, 19 May 2026 09:22:57 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:25 -0600 Subject: [PATCH v9 23/40] target/mips: add Octeon LA* atomic instructions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-23-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::2c; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x2c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207883826158500 Implement the Octeon LA* read-modify-write atomic instruction family: LAI/LAID, LAD/LADD, LAA/LAAD, LAS/LASD, LAC/LACD, and LAW/LAWD. These operations are architecturally distinct from SAA/SAAD and are used by existing Octeon user-mode code for atomic counters, bit operations, and exchange-style updates. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard --- Changes v1 -> v2: - Keep LA* atomics naturally aligned per Octeon L2 transaction semantics. - Use explicit i64 TCG ops in the LA* translator paths. (suggested by Philippe Mathieu-Daud=C3=A9) Changes v2 -> v3: - Drop redundant TARGET_LONG_BITS guards from doubleword atomic paths. (suggested by Richard Henderson) - Group LA* translator wrappers by argument shape instead of adding one wrapper per instruction. (suggested by Richard Henderson) Changes v3 -> v4: - Use i64 atomic helpers for both word and doubleword paths and select word sign-extension through MO_SL. (suggested by Richard Henderson) Changes v5 -> v6: - Rename the shared translator helpers to distinguish fetch-add and exchange operations. --- target/mips/tcg/octeon.decode | 17 +++++++++ target/mips/tcg/octeon_translate.c | 75 ++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 92 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 2d02b4e0bc..1e44c588dd 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -68,6 +68,23 @@ V3MULU 011100 ..... ..... ..... 00000 010001 @r3 SAA 011100 ..... ..... 00000 00000 011000 @saa SAAD 011100 ..... ..... 00000 00000 011001 @saa =20 +&la base rd +&laa base add rd +@la ...... base:5 ..... rd:5 ........... &la +@laa ...... base:5 add:5 rd:5 ........... &laa +LAI 011100 ..... 00000 ..... 00010 011111 @la +LAID 011100 ..... 00000 ..... 00011 011111 @la +LAD 011100 ..... 00000 ..... 00110 011111 @la +LADD 011100 ..... 00000 ..... 00111 011111 @la +LAA 011100 ..... ..... ..... 10010 011111 @laa +LAAD 011100 ..... ..... ..... 10011 011111 @laa +LAS 011100 ..... 00000 ..... 01010 011111 @la +LASD 011100 ..... 00000 ..... 01011 011111 @la +LAC 011100 ..... 00000 ..... 01110 011111 @la +LACD 011100 ..... 00000 ..... 01111 011111 @la +LAW 011100 ..... ..... ..... 10110 011111 @laa +LAWD 011100 ..... ..... ..... 10111 011111 @laa + &zcb base ZCB 011100 base:5 00000 00000 1110- 011111 &zcb =20 diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index d484b4ccdb..5ab7b4d659 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -177,6 +177,68 @@ static bool trans_saa(DisasContext *ctx, arg_saa *a, M= emOp mop) TRANS(SAA, trans_saa, MO_32); TRANS(SAAD, trans_saa, MO_64); =20 +static bool trans_la_fetch_add(DisasContext *ctx, int base, int add_reg, + int rd, int64_t imm, MemOp mop) +{ + TCGv_i64 addr =3D tcg_temp_new_i64(); + TCGv_i64 value =3D tcg_temp_new_i64(); + TCGv_i64 old =3D tcg_temp_new_i64(); + MemOp amo =3D mo_endian(ctx) | mop | MO_ALIGN; + + gen_base_offset_addr(ctx, addr, base, 0); + + if (add_reg >=3D 0) { + gen_load_gpr(value, add_reg); + } else { + tcg_gen_movi_i64(value, imm); + } + + tcg_gen_atomic_fetch_add_i64(old, addr, value, ctx->mem_idx, amo); + gen_store_gpr(old, rd); + return true; +} + +static bool trans_la_xchg(DisasContext *ctx, int base, int add_reg, int rd, + int64_t imm, MemOp mop) +{ + TCGv_i64 addr =3D tcg_temp_new_i64(); + TCGv_i64 value =3D tcg_temp_new_i64(); + TCGv_i64 old =3D tcg_temp_new_i64(); + MemOp amo =3D mo_endian(ctx) | mop | MO_ALIGN; + + gen_base_offset_addr(ctx, addr, base, 0); + + if (add_reg >=3D 0) { + gen_load_gpr(value, add_reg); + } else { + tcg_gen_movi_i64(value, imm); + } + + tcg_gen_atomic_xchg_i64(old, addr, value, ctx->mem_idx, amo); + gen_store_gpr(old, rd); + return true; +} + +static bool do_la_imm_add(DisasContext *ctx, arg_la *a, int64_t imm, MemOp= mop) +{ + return trans_la_fetch_add(ctx, a->base, -1, a->rd, imm, mop); +} + +static bool do_la_reg_add(DisasContext *ctx, arg_laa *a, MemOp mop) +{ + return trans_la_fetch_add(ctx, a->base, a->add, a->rd, 0, mop); +} + +static bool do_la_imm_xchg(DisasContext *ctx, arg_la *a, int64_t imm, MemO= p mop) +{ + return trans_la_xchg(ctx, a->base, -1, a->rd, imm, mop); +} + +static bool do_la_reg_xchg(DisasContext *ctx, arg_laa *a, MemOp mop) +{ + return trans_la_xchg(ctx, a->base, a->add, a->rd, 0, mop); +} + static bool trans_ZCB(DisasContext *ctx, arg_ZCB *a) { TCGv_i64 addr =3D tcg_temp_new_i64(); @@ -416,3 +478,16 @@ static bool trans_QMACS(DisasContext *ctx, arg_QMACS *= a) tcg_gen_or_i64(cpu_HI[0], cpu_HI[0], t0); return true; } + +TRANS(LAI, do_la_imm_add, 1, MO_SL); +TRANS(LAID, do_la_imm_add, 1, MO_UQ); +TRANS(LAD, do_la_imm_add, -1, MO_SL); +TRANS(LADD, do_la_imm_add, -1, MO_UQ); +TRANS(LAA, do_la_reg_add, MO_SL); +TRANS(LAAD, do_la_reg_add, MO_UQ); +TRANS(LAS, do_la_imm_xchg, -1, MO_SL); +TRANS(LASD, do_la_imm_xchg, -1, MO_UQ); +TRANS(LAC, do_la_imm_xchg, 0, MO_SL); +TRANS(LACD, do_la_imm_xchg, 0, MO_UQ); +TRANS(LAW, do_la_reg_xchg, MO_SL); +TRANS(LAWD, do_la_reg_xchg, MO_UQ); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779208058; cv=none; d=zohomail.com; s=zohoarc; b=VtL/2uAV4P0SpE5nnlfJpUezVhjVaFs4YpV0uuAZ+Ns6j3Op8dck7W60JZS7bmZlEjpc2qoz4LjU3usy8o36RH5/oEPo7FL83CGawOioZSBRPdhUA0HFbL2rmAKJUJFW3AgGTIeD7yPNAB6KIZAf+JjVvnF/LRs5X7j3bczTZSQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779208058; 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=tJTOJpARwPfc/tocOh1bggQi70PenUs9b33stQ3sgD8=; b=XT3mV1mQu/zWklHRUyM6F1z0ZuWH50cTvQX267A/kwHo5LTuuiYfIJ5bNTd7k/GKgTLFByxGnsGSbMizrammQdz8BGM0FlQUpZlkEs2tBHdbQlE7IxQUzIFcoOdUQOhVjSv5l4zI3cvYRT7Vs7s9jv4icevazrczONmv1qXR1C0= 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 1779208058831854.3035966029173; Tue, 19 May 2026 09:27:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDl-0006kF-IW; Tue, 19 May 2026 12:23:05 -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 1wPNDh-0006ib-Ti for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:01 -0400 Received: from mail-oa1-x33.google.com ([2001:4860:4864:20::33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDf-0000l3-UP for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:01 -0400 Received: by mail-oa1-x33.google.com with SMTP id 586e51a60fabf-40423dbe98bso1809566fac.2 for ; Tue, 19 May 2026 09:22:59 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207779; x=1779812579; 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=tJTOJpARwPfc/tocOh1bggQi70PenUs9b33stQ3sgD8=; b=V5jiU1g8LfUnOQl5UEHRz8thQw4GsDxPhqD12xLeRxWBt9/NOn4T6+wZbdN/gOPB3r C2gzI6YFyI+THvYQ2+VTGdfgs8xe1NgXXF1nS6erZ4qfELAw8iQQxJ42hUG6HuPoKHRv a1UEUTKIxGzwOnskW3C742oOzhRqQVteBLYvPQG1mJvK05KeWQ0IG9fp0XibKHoec2OS i759oU8Wxw2GUvQBw6Na9St/M8B4PA473ssnYG+37piNvLz47bRYxnrTBvl/CkiOM5gC HhJwVUNrj0JFevdgGiwnp+biMTZYgcDazB5J909wuYAx6M2rrYalF09tPbmQ/vuEpt/K tKLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207779; x=1779812579; 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=tJTOJpARwPfc/tocOh1bggQi70PenUs9b33stQ3sgD8=; b=rmqwqC2/HX+894MjPUwn9jF/xnP75WFMY5jhQ8WD9omjiGmNS2jW+/mLc4IPUzRa5I kM7aMLXwZcWLBD3yP/I5a+fWfabWj8LHyDPGS7/raX0MZi9B89n/Rt6o4649V56jAS6S etJ7nc/I8DOrt2MSYkGfm9iVmkMfV7A/wY7LeCRKHiyUldZfTuWGLhSsgu6diZeEQbRc 9Sv6TjgFvvfr8kndDL7N6rlZGOOfa84uVkYplQURZ9RAiw+0RxqjSTK276D8QuaYf+to YPOgxeo5+/zeUbvSuj2QEX7AtuyD8boENYrPp2/eQKMfq+ZgBNwK4EoRLKX4+6seWhuR 1KMQ== X-Gm-Message-State: AOJu0YwVWBrUCJzAi2gbdJ5PeDPFMsRZYTIPkdwphm5OskGGv3OFgZys kYnizEQqlynQp8yd+rq9Xuc4ks6TegbC049djVCFVsAdQMuskFWkYSCK X-Gm-Gg: Acq92OFKcorMmvPlI+Vk2s3hQjS3a/kkckOk/OuD+iMQOtADavNWH5yrgp4uPJk7JM1 2C79yCsq54JViwMQeNdi8VHiAcb5G9mCTg/jEYcxlMZ4JXs4SPtBnAEy82k8KZoKdBXU7xOnF1Y rcVPQ2TGHx2Bsuk0T6hkv1XoMSncN/uTeTUu8ikZ5TcYaC6FwJe167IqGdbQHfelMh1aL9yc0Zh fNKJPIbEfcY/Np+3bbwpWf2rbqN5Z3Y2LtlgayuI92raynn+BWev6Z8fPgcuRNEKqinpsA1/1yG iqXpNRbtVXpIu/TIu+2aGwmIjPJFdmHaTgjMy8FqVYbwFZziYZMyK9v032sWeU1wYuwO95uJ6BB PG7pDEQEEATZxSaItC0xnamjlzksomRhZa/JI6jgaiPg5XNbaEq4RNrOableiGqFlmbvZfa6gz4 eDUgwcuwMZL85bIzFHQUtPvwi7Tuk8TNqFi9X6zxSYJn4uhyji+VIOcTB8VxM1XuuAsDF6rSWUm z3IQbaaUD7JSc1fsSaenMx+TBu5S3/28nySsJCdaQiSXOGMXLY0Qf9SgKQZ7cSh27QC X-Received: by 2002:a05:6871:724b:b0:42f:24c4:e317 with SMTP id 586e51a60fabf-43a2da1b958mr13079506fac.14.1779207778788; Tue, 19 May 2026 09:22:58 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:26 -0600 Subject: [PATCH v9 24/40] target/mips: add Octeon COP2 crypto state MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-24-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::33; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x33.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779208060297154100 Add the common state needed by Octeon's selector-driven COP2 crypto interfaces. This includes storage for the base hash, AES, CRC, GFM, 3DES, KASUMI, and SNOW3G engines, plus the shared selector-window mode used by overlapping hardware register banks. Describe the shared HSH/SHA512, SHA3, SNOW3G, and ZUC selector window up front so later engine patches can add their own state and helper logic without rewriting common comments. Keep selector values out of the CPU state header; decodetree owns instruction decode and helper-local constants cover the few shared-window arithmetic cases. Migrate the state in an Octeon-only subsection so non-Octeon CPU models do not grow migration data. Later patches wire helpers and explicit selector decode on top of this state. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Remove the MIPSOcteonCop2Sel enum; selector values are decoded by decodetree or kept local to helper plumbing. - Leave only COP2 state and migration data in this patch. Changes v7 -> v8: - Split COP2 crypto state and migration coverage out of the combined COP2 crypto core patch. --- target/mips/cpu.h | 37 +++++++++++++++++++++++++++++++++++++ target/mips/system/machine.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index 346713705a..66c8653211 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -537,6 +537,41 @@ struct TCState { }; =20 struct MIPSITUState; +typedef enum MIPSOcteonSharedMode { + OCTEON_SHARED_MODE_NONE =3D 0, + OCTEON_SHARED_MODE_SHA512, + OCTEON_SHARED_MODE_SNOW3G, +} MIPSOcteonSharedMode; + +typedef struct MIPSOcteonCryptoState { + uint64_t des3_key[3]; + uint64_t des3_iv; + uint64_t des3_result; + uint64_t hsh_iv[4]; + uint64_t hsh_dat[8]; + uint64_t hsh_ivw[8]; + uint64_t hsh_datw[16]; + uint64_t aes_iv[2]; + uint64_t aes_key[4]; + uint64_t aes_result[2]; + uint64_t aes_input[2]; + uint64_t gfm_mul[2]; + uint64_t gfm_resinp[2]; + uint64_t gfm_xor0; + uint64_t gfm_reflect_mul[2]; + uint64_t gfm_reflect_resinp[2]; + uint64_t gfm_reflect_xor0; + uint16_t gfm_poly; + uint8_t aes_keylen; + uint32_t shared_mode; + uint32_t crc_poly; + uint32_t crc_iv; + uint32_t crc_len; + uint32_t snow3g_fsm[3]; + uint32_t snow3g_lfsr[16]; + uint64_t snow3g_result; +} MIPSOcteonCryptoState; + typedef struct CPUArchState { TCState active_tc; CPUMIPSFPUContext active_fpu; @@ -558,6 +593,8 @@ typedef struct CPUArchState { #define MSAIR_ProcID 8 #define MSAIR_Rev 0 =20 + MIPSOcteonCryptoState octeon_crypto; + /* * CP0 Register 0 */ diff --git a/target/mips/system/machine.c b/target/mips/system/machine.c index f988b3695b..ebfa0a9eb0 100644 --- a/target/mips/system/machine.c +++ b/target/mips/system/machine.c @@ -279,6 +279,42 @@ static const VMStateDescription mips_vmstate_octeon_mu= ltiplier =3D { } }; =20 +static const VMStateDescription mips_vmstate_octeon_crypto =3D { + .name =3D "cpu/octeon_crypto", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D mips_octeon_needed, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT64_ARRAY(env.octeon_crypto.des3_key, MIPSCPU, 3), + VMSTATE_UINT64(env.octeon_crypto.des3_iv, MIPSCPU), + VMSTATE_UINT64(env.octeon_crypto.des3_result, MIPSCPU), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.hsh_iv, MIPSCPU, 4), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.hsh_dat, MIPSCPU, 8), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.hsh_ivw, MIPSCPU, 8), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.hsh_datw, MIPSCPU, 16), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_iv, MIPSCPU, 2), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_key, MIPSCPU, 4), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_result, MIPSCPU, 2), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_input, MIPSCPU, 2), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.gfm_mul, MIPSCPU, 2), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.gfm_resinp, MIPSCPU, 2), + VMSTATE_UINT64(env.octeon_crypto.gfm_xor0, MIPSCPU), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.gfm_reflect_mul, MIPSCPU, 2= ), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.gfm_reflect_resinp, MIPSCPU= , 2), + VMSTATE_UINT64(env.octeon_crypto.gfm_reflect_xor0, MIPSCPU), + VMSTATE_UINT16(env.octeon_crypto.gfm_poly, MIPSCPU), + VMSTATE_UINT8(env.octeon_crypto.aes_keylen, MIPSCPU), + VMSTATE_UINT32(env.octeon_crypto.shared_mode, MIPSCPU), + VMSTATE_UINT32(env.octeon_crypto.crc_poly, MIPSCPU), + VMSTATE_UINT32(env.octeon_crypto.crc_iv, MIPSCPU), + VMSTATE_UINT32(env.octeon_crypto.crc_len, MIPSCPU), + VMSTATE_UINT32_ARRAY(env.octeon_crypto.snow3g_fsm, MIPSCPU, 3), + VMSTATE_UINT32_ARRAY(env.octeon_crypto.snow3g_lfsr, MIPSCPU, 16), + VMSTATE_UINT64(env.octeon_crypto.snow3g_result, MIPSCPU), + VMSTATE_END_OF_LIST() + } +}; + const VMStateDescription vmstate_mips_cpu =3D { .name =3D "cpu", .version_id =3D 21, @@ -396,6 +432,7 @@ const VMStateDescription vmstate_mips_cpu =3D { .subsections =3D (const VMStateDescription * const []) { &mips_vmstate_timer, &mips_vmstate_octeon_multiplier, + &mips_vmstate_octeon_crypto, NULL } }; --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779208006; cv=none; d=zohomail.com; s=zohoarc; b=SeFT46u6hA2cy6ayxnLo2N5nHYYG8gfaMQV4WbNoxsshEKnIrULF0pqUNrUo4yx2EjXWSLmbje0kZ8dMiXkBY/p/NO19zSbH0qR/HI7rKE/pViyNkJjRJVKG9MZK1tGZeGPzx8OJadDAGY+dNgzBITPCXMzscMKmuh1sR5jWu9E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779208006; 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=FO0azwR+GpNVaHd0K7Iv0la3bhCKm2knHJslFgvy2m8=; b=Xic+CMXgZIkN4FjOhExr78M48Z1H23qow/kzQ4qQR+dlLe4yF9PxRcTLxhtcPFF1v/3vFnl8LsOWggoFxZHiMKWNgzJGr5HoDU7NzjbF6TMlEvvy1blF4nZ92KpAdSUSXbjGopaNbeP/Iakrvoq9fAv0LH5mB4PBsZ3AgdD3uxY= 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 177920800690980.0178046865766; Tue, 19 May 2026 09:26:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDo-0006mD-0N; Tue, 19 May 2026 12:23:08 -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 1wPNDi-0006iq-PY for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:03 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDh-0000mW-5W for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:02 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-4042fe53946so1434897fac.3 for ; Tue, 19 May 2026 09:23:00 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.22.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:22:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207780; x=1779812580; 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=FO0azwR+GpNVaHd0K7Iv0la3bhCKm2knHJslFgvy2m8=; b=bFpvYmHMeEE6WhF8fSnlQ8RjG91jXwAe3qrosXNIhe2r2/5d4DgwB6fOh6L5/hbI5T lCkJcBBiKjNpdaiZFpXym7IvAC+rZfAbA1JDx5Hb/cRm/2zRd/NatYMNlOZgM4gp3oOC m0MwuFDngWa6lrNG1Ak1G8n/J/4ynv/HxfaO+6PyFhf3CmlS7h+G0/yNtiR6W1Sy5yxw z+lf3+7L9/2aboZHWxJX3F0bnXpon9JUl7g7i34ztJ9ogFUVv17GOMLsrtddLMmFglHJ A1D1Q66aAJA3aQjUF7ryXBSEvESP5/h6wxn3ro8Z5M88j7/Pne6u0Ebz/vvfwCL1TYVW G3Ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207780; x=1779812580; 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=FO0azwR+GpNVaHd0K7Iv0la3bhCKm2knHJslFgvy2m8=; b=VctaoZCicUlIRcIV9vLrfPwRjju5DOkiTEw40GQcjwm+bbJMgWK+Y8kKmAkqCYyzbW NkWHPe7nWKZI8L6dtnRGh5FGTFIBBOkG5F+5Jowx1jxaJLpgpQ0ahjAltA8ESgibX2ry PRb9QyKdXIsJoh6qfdjdivuMSWjPaxBzAZc4d6vL0mNSMNcs0khPhlEUy7IngJk7rpNf GkKC4g0Rk1X86CteQsc3hbJX/H6BFP53Cury8961eURlOj24qIpAAjubp3l0H4eMgKNH zyLLOvzUvyFdsQDwmMlM2VYyPtMGCCQmgzB3qrXNK+Xqvs76G4qqTIfpZI3KNID3+oR8 lmoA== X-Gm-Message-State: AOJu0YyFYgT3/OWS01HJhC8OZpvxF3w7HIoLlJ1zonBqXgTl94Bi02/H 6dUANPF7sHNIAgf+RZHV6slrdElvlzJ0S1wvctKUNv88b1O+is6UnkTQ X-Gm-Gg: Acq92OGc7r5BjA7uWFGKtIVbt1qq/MJn3UUUHqeaCKBpXPylBoCtmqRqj7U8Yba9/kU rVfa/bcpvYHHr2uJOqSp44bHgki7RsyK3sdrMGcE6/NYatXGneqpc9IeaaRJbyNRUYHxCdBoXOE hQnYlLvSzvPC8O37ffQqrPDSa4PbhSVvS68yOUbKxTg61qFHGdxbbxs7vnQjPmnfs/3sRLejyAq qxmYfNtic/dEeKP2pEmLc/9fU/LL6zUwJlEeLI0ZJAbhrVyGBRlrimsdCHTJ4qLpRQ8g8nl0g4u oo4COlukKZ60oA7Mu4rBKMy/0IwfM2vdNHcaIRMgB2gvUET6lAY/XQYoBA0/p16tqgI2kLddfCv EyzjmxLEPOGaNgaZJbVrDEBgH1c4XaBsKpKweqOSvEcJkuj55iVlroEIR2PRiY5LVjyR2IHFRBD w9tI7+fe3lNcOWCQ2O4asrnoLPlbZayyvU4uos94EwHRiXxiqkX2j5UsSvsoB/uyajSyV1AEY9+ Bh2obXbDRjekeKbO5lniK4tQH43+z7rX2xodoE2Ar9Vpg1CJ0kYMNACu7ht0sZ7TJzVve67giJf NyQ= X-Received: by 2002:a05:6870:c233:b0:42c:711:a235 with SMTP id 586e51a60fabf-43a2de6d4e8mr12687717fac.35.1779207779960; Tue, 19 May 2026 09:22:59 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:27 -0600 Subject: [PATCH v9 25/40] target/mips: add Octeon COP2 crypto helper plumbing MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-25-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::29; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x29.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779208007469154100 Add the Octeon COP2 crypto helper source file and build it with the MIPS TCG target. The initial file contains the shared selector-window helper constants and mode setter used by later COP2 engine patches. Keep these selector constants local to the helper implementation. The instruction dispatch itself remains fully decoded by decodetree, and later operation selectors call per-operation helpers rather than a common selector-dispatch helper. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Split helper plumbing out of the former monolithic COP2 helper patch. - Keep shared-window selector arithmetic local to octeon_crypto.c. --- target/mips/tcg/meson.build | 1 + target/mips/tcg/octeon_crypto.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/target/mips/tcg/meson.build b/target/mips/tcg/meson.build index fff9cd6c7f..4ee359874a 100644 --- a/target/mips/tcg/meson.build +++ b/target/mips/tcg/meson.build @@ -18,6 +18,7 @@ mips_ss.add(files( 'lmmi_helper.c', 'msa_helper.c', 'msa_translate.c', + 'octeon_crypto.c', 'op_helper.c', 'rel6_translate.c', 'translate.c', diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c new file mode 100644 index 0000000000..f9b54f7017 --- /dev/null +++ b/target/mips/tcg/octeon_crypto.c @@ -0,0 +1,37 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * MIPS Octeon crypto emulation helpers. + * + * Copyright (c) 2026 James Hilliard + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "internal.h" +#include "exec/helper-proto.h" +#include "crypto/aes.h" +#include "crypto/clmul.h" +#include "crypto/sm4.h" +#include "qemu/bitops.h" +#include "qemu/host-utils.h" + +/* + * The shared HSH/SHA3/SNOW3G/ZUC register window needs selector-position + * arithmetic. Instruction dispatch itself is still fully decoded by + * decodetree and calls per-operation helpers. + */ +#define OCTEON_HSH_DATW(N) (0x0240u + (N)) +#define OCTEON_HSH_IVW(N) (0x0250u + (N)) +#define OCTEON_SHA3_DAT24_SEL 0x0050u +#define OCTEON_SHA3_DAT15_MT_SEL 0x0051u +#define OCTEON_SHA3_DAT15_MF_SEL OCTEON_HSH_DATW(15) +#define OCTEON_SNOW3G_LFSR(N) OCTEON_HSH_DATW(N) +#define OCTEON_SNOW3G_RESULT_SEL OCTEON_HSH_IVW(0) +#define OCTEON_SNOW3G_FSM(N) OCTEON_HSH_IVW(1 + (N)) + +static inline void octeon_set_shared_mode(MIPSOcteonCryptoState *crypto, + MIPSOcteonSharedMode mode) +{ + crypto->shared_mode =3D mode; +} --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779208079; cv=none; d=zohomail.com; s=zohoarc; b=GXd5ONSaJjDQEcD411twuw58XqLnnHraC4adsAkmoPWYYpBTpwTdgecJ5x0V62KIPEDyCVrTvfG/HYUbVFA0kSkSABZUPuW5tGZ5FSaloZdIBrpET1ArZ36ULjnTbBEC/6qwMP0l5rkLGzuxS1cRLXM2qwZbKXF178FAhggtvr8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779208079; 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=bPx+cOwWltjcaeaYn7JciuYK27ATvwskbHY6d5rI1oE=; b=H60gjg9rLIucQS8j53s1U3xU06sAac/lXzhbhnSI/bjTHQKVTJIT0HnO45G9Vg/yTdY9hT7wZwLcG7tyqOi4rfeo6gA5g8915DuVnd+qWf6Ner1AOWK3CVlwMqre39TqFfNYufXrjBmth92YuZowHYPpICgB+Cl2U2eJY/ppWjc= 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 1779208079877736.38988414685; Tue, 19 May 2026 09:27:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDn-0006lQ-AJ; Tue, 19 May 2026 12:23:07 -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 1wPNDk-0006js-DD for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:04 -0400 Received: from mail-oo1-xc2f.google.com ([2607:f8b0:4864:20::c2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDi-0000my-If for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:04 -0400 Received: by mail-oo1-xc2f.google.com with SMTP id 006d021491bc7-69b94acd958so1926119eaf.3 for ; Tue, 19 May 2026 09:23:02 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207781; x=1779812581; 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=bPx+cOwWltjcaeaYn7JciuYK27ATvwskbHY6d5rI1oE=; b=T4hSiv4ZlV+8XLBIIO/VvmDtJ5eaEqomU0RFR9zjHucYLJFNPhyAehTv4KSq/STyEO zdySz9PYP1aXWksJvDBd16e2XFq2/TTF7Wfz3rnVVw3JgSizDXAuyR3wXbqTtRme+SCL iVkXHkwhNIQG3WMGzY/ABtE1FJxKGQIdHvp7c0c3FPVSC9wR9n04pxw4MFIautas6Uhn gml1KLN/8YzDrV46PTNQn959+AZA3KngVFiMBxrO0U4NnVMWV2Pa0wXn57gXyLQSBK4o 2G2humWKDNyOsKpLclVCSTGz3FkKLPIivcvBDSF8e78YwnI4hHJQ7Dm6nR8nZVYLnd9Q 2osQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207781; x=1779812581; 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=bPx+cOwWltjcaeaYn7JciuYK27ATvwskbHY6d5rI1oE=; b=kXiNd9ifdkczJ8uDmfENyMjZecz4lNwMrBMugV41jlqTe/jfk3DT7A/FUl4kX9XaqG pnOG+Uun+DoiyG+eefMsPNE5eXSv+gTd2ZBAOxFJAj0RoLod3ig+T6nvWcjUsdnAac3D FQkSHc66BYRcUAd1HeviW706bq/Lu6NHy7yT9GHtlgstSWpBe009q9oua1smEbteKHl5 M/fSEEFzzsMDp3f6dwlar08+UTurZkawkEwx40q6r17g1WqNaxOh2JlOopW1Jv/25ZBw LmLwrfAUiMXQGoLLpZACSKUIGU3e5pNzH8JlXZYgTbPbjcH4QhCkuZ6Bi+2WOqDhUh1V RU4g== X-Gm-Message-State: AOJu0YyzCpf2vSLvthamanVzvzjLllQ7L8QQSB3wOnWQ1JU87Yyh2dkY NM80zTnTvXcIPyCKjBTsKV2EBf8FZ98wMLmD+MCy7cn25bZoLbsKSTPJ X-Gm-Gg: Acq92OFgQHVL7dy2yL9Z7lyNAVoE04d49Lfx0ad3C3KMbHZO7BspmGE1xcPoeMuwd1L jHTDHUTHzSUiuB+PIvXlFMgKL2NUus/V+CEJThCsKjFyY0K9qIVrmcfne9hPwudCyKicAAuTtFT QSJYYZ4ZB0KD1u/H89QJ/IzmTpBpyWq2O56wL2nv/N5ViZCVyJ6r5b3zY4cLPN7iq0XT28i0lP7 v0IvwbGbSyhIZPyUW1YX8lZ/5cfDg08BmH/JsjnOdhMlgUwv6CviWgKjHSjrrC9LVzXpKr+ceMF P+XMreE/rSyXnqo1moGqSQPHhWS3iWU7smnnEAFHPYLyj/SaIj2j0OVi8Cg2xEFw9z4Ho6DD6sV X2jqh8HCKgt7Z9nZFE+rxEFlTQF9TWCGIuTuKYlsrVspZvwxC54k1XxuGeHSTt/G+CE8xUz5wOa BD8AulgdkA7lT8hjEW6QgxJcVUVbTj04SghvyUe3UqPx0ybI6uq71iYJ0wsoSN/0B9hYqOOic0Y CleXAymfSqqlKnuFfj3CNcaQ8QMBFYOmO2o5aPUNNMkkGY+32BxuLmyv4YFU3TwCunY X-Received: by 2002:a05:6820:81c7:b0:69b:8c27:8a0 with SMTP id 006d021491bc7-69c9bfcae95mr13374879eaf.55.1779207781119; Tue, 19 May 2026 09:23:01 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:28 -0600 Subject: [PATCH v9 26/40] target/mips: add Octeon CRC COP2 helpers MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-26-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::c2f; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc2f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779208096595154100 Add helper support for the Octeon COP2 CRC register interface. This covers normal and reflected CRC state handling, byte/halfword/word/ doubleword/variable-width update selectors, and the reflected IV readback operation. The register moves that can be represented as direct TCG loads/stores are left to the later explicit selector decode patch. This patch only adds the side-effecting CRC helper implementation. Signed-off-by: James Hilliard Reviewed-by: Richard Henderson --- Changes v8 -> v9: - Split CRC selector operations into their own COP2 helper patch. - Expose per-operation helpers instead of a generic selector helper. - Add matching helper.h declarations with the helper implementation. --- target/mips/helper.h | 14 +++++ target/mips/tcg/octeon_crypto.c | 128 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 142 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index e2b83a1d19..e802f50fd6 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -25,6 +25,20 @@ DEF_HELPER_3(crc32, tl, tl, tl, i32) DEF_HELPER_3(crc32c, tl, tl, tl, i32) DEF_HELPER_FLAGS_4(rotx, TCG_CALL_NO_RWG_SE, tl, tl, i32, i32, i32) =20 +/* Octeon COP2 selector operation helpers. */ +DEF_HELPER_1(octeon_cp2_mf_crc_iv_reflect, i64, env) +DEF_HELPER_2(octeon_cp2_mt_crc_write_iv_reflect, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_crc_write_byte, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_crc_write_half, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_crc_write_word, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_crc_write_byte_reflect, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_crc_write_half_reflect, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_crc_write_word_reflect, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_crc_write_dword, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_crc_write_var, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_crc_write_dword_reflect, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_crc_write_var_reflect, void, env, i64) + /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) DEF_HELPER_4(swm, void, env, tl, tl, i32) diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index f9b54f7017..b79ccdd162 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -35,3 +35,131 @@ static inline void octeon_set_shared_mode(MIPSOcteonCry= ptoState *crypto, { crypto->shared_mode =3D mode; } +static inline uint32_t octeon_crc_reflect32_by_byte(uint32_t v) +{ + return bswap32(revbit32(v)); +} + +static uint32_t octeon_crc_state_reflect(const MIPSOcteonCryptoState *cryp= to) +{ + return octeon_crc_reflect32_by_byte(crypto->crc_iv); +} + +static void octeon_crc_set_state_reflect(MIPSOcteonCryptoState *crypto, + uint32_t state) +{ + crypto->crc_iv =3D octeon_crc_reflect32_by_byte(state); +} + +static void octeon_crc_update_normal(MIPSOcteonCryptoState *crypto, + uint64_t value, unsigned int bytes) +{ + uint32_t crc =3D crypto->crc_iv; + uint32_t poly =3D crypto->crc_poly; + + for (unsigned int i =3D 0; i < bytes; i++) { + uint8_t byte =3D value >> ((bytes - 1 - i) * 8); + + crc ^=3D (uint32_t)byte << 24; + for (int bit =3D 0; bit < 8; bit++) { + if (crc & 0x80000000U) { + crc =3D (crc << 1) ^ poly; + } else { + crc <<=3D 1; + } + } + } + + crypto->crc_iv =3D crc; +} + +static void octeon_crc_update_reflect(MIPSOcteonCryptoState *crypto, + uint64_t value, unsigned int bytes) +{ + uint32_t crc =3D octeon_crc_state_reflect(crypto); + uint32_t poly =3D bswap32(crypto->crc_poly); + + for (unsigned int i =3D 0; i < bytes; i++) { + uint8_t byte =3D value >> ((bytes - 1 - i) * 8); + + crc ^=3D byte; + for (int bit =3D 0; bit < 8; bit++) { + if (crc & 1U) { + crc =3D (crc >> 1) ^ poly; + } else { + crc >>=3D 1; + } + } + } + + octeon_crc_set_state_reflect(crypto, crc); +} +uint64_t helper_octeon_cp2_mf_crc_iv_reflect(CPUMIPSState *env) +{ + return octeon_crc_reflect32_by_byte(env->octeon_crypto.crc_iv); +} +void helper_octeon_cp2_mt_crc_write_iv_reflect(CPUMIPSState *env, + uint64_t value) +{ + env->octeon_crypto.crc_iv =3D + octeon_crc_reflect32_by_byte((uint32_t)value); +} + +void helper_octeon_cp2_mt_crc_write_byte(CPUMIPSState *env, uint64_t value) +{ + octeon_crc_update_normal(&env->octeon_crypto, value, 1); +} + +void helper_octeon_cp2_mt_crc_write_half(CPUMIPSState *env, uint64_t value) +{ + octeon_crc_update_normal(&env->octeon_crypto, value, 2); +} + +void helper_octeon_cp2_mt_crc_write_word(CPUMIPSState *env, uint64_t value) +{ + octeon_crc_update_normal(&env->octeon_crypto, value, 4); +} + +void helper_octeon_cp2_mt_crc_write_dword(CPUMIPSState *env, uint64_t valu= e) +{ + octeon_crc_update_normal(&env->octeon_crypto, value, 8); +} + +void helper_octeon_cp2_mt_crc_write_var(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + octeon_crc_update_normal(crypto, value, MIN(8U, crypto->crc_len)); +} + +void helper_octeon_cp2_mt_crc_write_byte_reflect(CPUMIPSState *env, + uint64_t value) +{ + octeon_crc_update_reflect(&env->octeon_crypto, value, 1); +} + +void helper_octeon_cp2_mt_crc_write_half_reflect(CPUMIPSState *env, + uint64_t value) +{ + octeon_crc_update_reflect(&env->octeon_crypto, value, 2); +} + +void helper_octeon_cp2_mt_crc_write_word_reflect(CPUMIPSState *env, + uint64_t value) +{ + octeon_crc_update_reflect(&env->octeon_crypto, value, 4); +} + +void helper_octeon_cp2_mt_crc_write_dword_reflect(CPUMIPSState *env, + uint64_t value) +{ + octeon_crc_update_reflect(&env->octeon_crypto, value, 8); +} + +void helper_octeon_cp2_mt_crc_write_var_reflect(CPUMIPSState *env, + uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + octeon_crc_update_reflect(crypto, value, MIN(8U, crypto->crc_len)); +} --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779208023; cv=none; d=zohomail.com; s=zohoarc; b=GGJNqYTrRxsLNKRqdLoURuXIS6nHyk65ppyVg0aU30h0Y1Ync9hlif3KWlWCZAP26BVV4lEGtKFZu9X2OSHWKZtXyjofJzOLyQFEfxrjWygsJRxFFcGedGYy4RN/vqm+rwI/6yQxhfV1iK11xS4wrapsmDGjPzPMtkV8VxtkDvs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779208023; 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=l6iO5cCPGOYFPb3KVLbGSJQx31T0/SdzlJO8X3IH9zk=; b=RSHhhvADPjk+KrTbtsit3cqx3qRX1dp33VWZQ99pmBIU4hSh5A6SRQxYzmzDqIThfiTq16odAdC0nxSr64IOiMSctHxTBMsNyrKmMyn42ZQVHX7ONYp+tnXKovPZSdVFqWMQ28/0xZXaIqexGROyVt4WzvYjp+RKOgIyN+zrRY4= 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 177920802330197.79530326404586; Tue, 19 May 2026 09:27:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDu-0006ti-6B; Tue, 19 May 2026 12:23:14 -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 1wPNDl-0006k5-2B for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:05 -0400 Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDj-0000nC-EM for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:04 -0400 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-43a1004f686so1443955fac.1 for ; Tue, 19 May 2026 09:23:03 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207782; x=1779812582; 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=l6iO5cCPGOYFPb3KVLbGSJQx31T0/SdzlJO8X3IH9zk=; b=nm9fcCMQgELjaTJhSNFVDBZNF6i8DWmjsEVdlUyU7hkD9LP5opu+S7fruN8ELZeY1V YUd0HbVcv+OAELP2vQoSMuu8slhHd70ItSTCa0NJY69+zYQ4PBPFBSRhqSusH+ZKOGH/ kZbAPRzbfJ7ICuANrKTOIO7AntMpVR7cN2/XJBUYefVO8rwiOsFUh/ZgeGv3jRD5a5vY 89Tk4XBOt9uUMpguKtZkAeIBqGsFKv/HtkIdqi6gNRI3zkln19mkz0Yb/zC4Vp5B3dnc sInjepD1hQe+WM8zsGllIORcJs+uMgXB0OUuoq1SxxcqAwDYBwu4JjblExT0Zoj8C2OY gc9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207782; x=1779812582; 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=l6iO5cCPGOYFPb3KVLbGSJQx31T0/SdzlJO8X3IH9zk=; b=aH4yYpwk3IhN+Zc/SS14mRyG6xuBTwaVaoGJRY7XSPSJlnHrum37BSpHhO/OXENssZ 4c2CiHYwsZJnO+aT95ntLbMGX934OZcdR6cC3ei0YnMA86ZGEwhs3HDuixm7eDodPE+i XgPNTJJ9tDVZCZ5ksTq1We0+buOF5s3ONQ51+PWjKh8Z4ljKR+d2gJ0+95iTOP7ERm6s duQV70MENJaI3iGIT5n+nOwVcsnNsyVU4TWMbdRZFG5jIuQjEf9p80KfFrR3eaHTp+N8 TBV2F2i3Nd0O4K9fg4k1JAcIpQZ56bKA6gv9fVy+gzxc2WjrsDGtUFw+YwpTdJfa5AED ZtHw== X-Gm-Message-State: AOJu0YzaF0nQ2PHhrNQxIiqoOfvGAGRMbehhD/QL4m6Ccak+7/VzNTQJ HFCX/jSVDwU8NDlOzsD+PAW19LS6T8WJE9xjHc0afM8zuqnBX+wU7wwF X-Gm-Gg: Acq92OGWoerluON/Y+C6jY0IY/AE1I4rmDXWBhzhoJxuzYCKDxgRyn3TTaaT62L+q2d 2qyl7Q1H5pe63gp5z3mfpM5+G8hYzYHFY5UEthJ0zqmm9IQTr1XohGdZrluzF6BbRs35yu0dSSp WKq8oPdvndMNkcLabdvG7nzen8R7H230PQ0Jz/F2NQJlbgJOMz3TFKszYNrm1D6qhI4rdDFuzKi /t9ZMXPWSxABHJA5klh5qB/dxCSae1Vyk05ZaLF3Q4wcPJjfhnKmlNuLsrIhi+cnpwcqweh5Qth fbZ1JJV0hnxYncC45snOUnlf5UIqjiQbv6nAkry4ztMyThbIpSHVzrE5CEk5pUVQQ4vhWyubdVf U6whP1qms9KASzMUmebvoy/Hs4OxPQsWJnhfNbvUp+GmXdVwLjCykKSdxCoJSUqZpKHF9BSTLrn VSi4HZUiSPlK8Gh63j4kYu0DoTQEpNmNNV3lNZvqoVJNflJ0DmT2bZJy1t9ul/nejxfv/9SLDur jCy4zN7dNvKbPgcYiVHpLmVDm0NeZV2Npp7u5oFkYNkASeVo341/NrXp1uLQEc3E2Fm X-Received: by 2002:a05:6870:3264:b0:42c:1ba9:c1c1 with SMTP id 586e51a60fabf-43a2d90ade6mr13318656fac.8.1779207782206; Tue, 19 May 2026 09:23:02 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:29 -0600 Subject: [PATCH v9 27/40] target/mips: add Octeon GFM COP2 helpers MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-27-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::2e; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x2e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779208025757154100 Add helper support for the Octeon GFM carryless multiply selectors. This models the normal and reflected multiplication paths, including the XOR-and-multiply forms that update the result/input state used by Octeon crypto code. Use QEMU's crypto/clmul helpers for the reflected 128-bit carryless multiply operation instead of carrying a target-local multiply loop. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Split GFM selector operations into their own COP2 helper patch. - Expose per-operation helpers instead of a generic selector helper. - Add matching helper.h declarations with the helper implementation. --- target/mips/helper.h | 2 + target/mips/tcg/octeon_crypto.c | 98 +++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 100 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index e802f50fd6..dac9dd8755 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -38,6 +38,8 @@ DEF_HELPER_2(octeon_cp2_mt_crc_write_dword, void, env, i6= 4) DEF_HELPER_2(octeon_cp2_mt_crc_write_var, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_crc_write_dword_reflect, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_crc_write_var_reflect, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_gfm_xormul1_reflect, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_gfm_xormul1, void, env, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index b79ccdd162..7394108c54 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -94,10 +94,108 @@ static void octeon_crc_update_reflect(MIPSOcteonCrypto= State *crypto, =20 octeon_crc_set_state_reflect(crypto, crc); } +static uint64_t octeon_gfm_reduce64(Int128 product, uint8_t poly) +{ + uint64_t lo =3D int128_getlo(product); + uint64_t hi =3D int128_gethi(product); + + while (hi) { + int bit =3D 63 - clz64(hi); + uint64_t shifted_poly =3D (uint64_t)poly << bit; + + hi ^=3D 1ULL << bit; + lo ^=3D shifted_poly; + if (bit > 56) { + hi ^=3D (uint64_t)poly >> (64 - bit); + } + } + + return lo; +} + +static void octeon_gfm_mul64_uia2(const uint64_t x[2], const uint64_t y[2], + uint8_t poly, uint64_t out[2]) +{ + uint64_t vx =3D revbit64(x[1]); + uint64_t vy =3D revbit64(y[0]); + Int128 product =3D clmul_64(vx, vy); + uint64_t res =3D octeon_gfm_reduce64(product, revbit32(poly) >> 24); + + out[0] =3D 0; + out[1] =3D revbit64(res); +} + +static void octeon_gfm_mul_reflect(MIPSOcteonCryptoState *crypto, uint64_t= data) +{ + uint64_t in[2] =3D { + crypto->gfm_reflect_resinp[0] ^ crypto->gfm_reflect_xor0, + crypto->gfm_reflect_resinp[1] ^ data, + }; + + octeon_gfm_mul64_uia2(in, crypto->gfm_reflect_mul, + crypto->gfm_poly, crypto->gfm_reflect_resinp); + crypto->gfm_reflect_xor0 =3D 0; +} +static void octeon_gfm_mul(const uint64_t x[2], const uint64_t y[2], + uint16_t poly, uint64_t out[2]) +{ + uint64_t zh =3D 0, zl =3D 0; + uint64_t vh =3D y[0], vl =3D y[1]; + uint64_t rh =3D (uint64_t)poly << 48; + int i; + + for (i =3D 0; i < 128; i++) { + bool bit; + bool lsb; + + if (i < 64) { + bit =3D (x[0] >> (63 - i)) & 1; + } else { + bit =3D (x[1] >> (127 - i)) & 1; + } + if (bit) { + zh ^=3D vh; + zl ^=3D vl; + } + + lsb =3D vl & 1; + vl =3D (vh << 63) | (vl >> 1); + vh >>=3D 1; + if (lsb) { + vh ^=3D rh; + } + } + + out[0] =3D zh; + out[1] =3D zl; +} uint64_t helper_octeon_cp2_mf_crc_iv_reflect(CPUMIPSState *env) { return octeon_crc_reflect32_by_byte(env->octeon_crypto.crc_iv); } +void helper_octeon_cp2_mt_gfm_xormul1_reflect(CPUMIPSState *env, + uint64_t value) +{ + octeon_gfm_mul_reflect(&env->octeon_crypto, value); +} + +void helper_octeon_cp2_mt_gfm_xormul1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + uint64_t in[2] =3D { + crypto->gfm_resinp[0] ^ crypto->gfm_xor0, + crypto->gfm_resinp[1] ^ value, + }; + + if (crypto->gfm_poly <=3D 0xff && crypto->gfm_mul[1] =3D=3D 0 && in[0]= =3D=3D 0) { + octeon_gfm_mul64_uia2(in, crypto->gfm_mul, + crypto->gfm_poly, crypto->gfm_resinp); + } else { + octeon_gfm_mul(in, crypto->gfm_mul, crypto->gfm_poly, + crypto->gfm_resinp); + } + crypto->gfm_xor0 =3D 0; +} void helper_octeon_cp2_mt_crc_write_iv_reflect(CPUMIPSState *env, uint64_t value) { --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207850; cv=none; d=zohomail.com; s=zohoarc; b=I1VC+C1vmNvkk4ELazCRiovnSgu75faozypvbvgWPGQKBBT0fcL6NeHPDAmPYy+vp0ZTa5UqvGQ3Zw4XcuCiWzJ4YWfK7XdHD4t9Dlc43d+IU4dgQLHjMrKqfCoOWD9nyLVkIAbWYx1LrYMOCLYPFn/3fi/gUvkf6CcCRPOApHc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207850; 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=+LF/w6vZJJy8YuU4QSMXlfWK8+cL6bD/zaog2spGsqk=; b=NRYqcbusZ9zk/MAhzE0GEhQfocjzYBz9rjBebCMEzZO8M7HZDWC5l96lWxjc1JBfEdcs/JVNnd/nIqoXn6rFC/QGOH40cWXluVkubOmHEtE9Ed+WtHVOq9hbIROBfPYQ/uXL8hvPyWUmYvI01hScyBldAeydSzIIB68LuuVfoIM= 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 1779207850515965.9059443552238; Tue, 19 May 2026 09:24:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDq-0006oo-Tn; Tue, 19 May 2026 12:23:11 -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 1wPNDn-0006l7-0l for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:07 -0400 Received: from mail-ot1-x32f.google.com ([2607:f8b0:4864:20::32f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDk-0000nI-Pi for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:06 -0400 Received: by mail-ot1-x32f.google.com with SMTP id 46e09a7af769-7df05fc49e5so3961421a34.3 for ; Tue, 19 May 2026 09:23:04 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207783; x=1779812583; 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=+LF/w6vZJJy8YuU4QSMXlfWK8+cL6bD/zaog2spGsqk=; b=HDB4/joB+cQB69aAQ4zTEDc7daL5ffJurGiWXlTTzqsBpDFn2Anu7MHasQkRUH2zh+ FJKZz8vyjlCeJMnlDDWzzqFCi9Uqn1mPFzy3nS1/ZbLBaK6AM+p9jhPRrBrJtLPRQWbK NRn4mDw6RUY9qJgEZ2FSiACqYA9qjsVxxS8PqfKcEPeCqO/msIZPTz2QJkj7b5kr+orB TfVOze0K9T68izOp6bVjwMarx/H6a4Pkv9I2IJC4wF9sTooUcvYAsITe+SPsY4MuOEha 0oIf/Tb0DBC8rVjBY1y+R4zP9Pxwk75soi6v8S/acxh3fXz1vzks1WjGFXDWILPFz21N lVRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207783; x=1779812583; 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=+LF/w6vZJJy8YuU4QSMXlfWK8+cL6bD/zaog2spGsqk=; b=MQIoq3UQSUqTQpw5dtDalTGunyKrDhwPUxYrucXqMzReDQJoxD6gtsnQQpbe96AHzu ht/BGrK4db5F1i9KGKeUWidWrpzG6krAsy6J4LdKdRaXuSFR3rGZd8rNtYaFbfx6KUF5 Y+jUNVjYBAkaUu0bxRKDTcIvc1HYGaQ+GPnSqjIMOCE2M9RFD+8fyW92NCaDy3KFf9fb hvYcJBPdgD3qvt8jOyyq6r8tcjGZJdM9bEqplG1289QC8OlP+nwz3ECCpRXvrV5nQ9qO 15erPa+EboR5YJ+MKEL8vIEqTOUwiGIYVzEKcaGbsJCzu+PBBa3mJ2erCCzMaD8Dgh02 3QVQ== X-Gm-Message-State: AOJu0YzcoPeL6fR57Dsvs6CPFqBYgwlpfgVUhP75uBPccyGPxvXfhBBy KSm9+6S7/Tv1VONJyxz2HFm/ElH8D0gZZ+fw/7EaXMTXzkLYRg/0onoZvogdbw== X-Gm-Gg: Acq92OH64t//MfDnrkZFo5UNAHKw/q20OP8rA1gJ11KpXeXikRDPllQTVhY8qLxM7kz 8+AGnstk++YOJGbvBpcfaogIEQq0WFHMS3SmuV26x4i8grTMpySVzzgarhsQfikOkHfUnJszBil L+UunTUzxZqel4c0Chg1LuuoUtMQJfCW9LliWF8/KHes1eucTixn0XP3I8GrbS1SpK44jiguGQu Z+Rk/l42UgevYdibIA4KkU/9NcGwLVo6rsky6rq8A5+AEmgpQS7dP+DLWDcPJcITgnCTG8Fy6zm qdnnKF8AALtN5/EAKBj7aKMPHjyhO2Y/35wdMXuig52uoZrHkDszUar/2oYkulkGAJBIsQfzMBm +flL9dXDEACr5qRDF3itcr2UY7L8YXCWedp6fdhtK22eV2PGYqAjkfW2Fn93tA+tyFlLPjShLZq TtT7G+4gBUO/1u39O0ycTRoNlzki6pvIfw4qXBUwi/VWd5EAFHJaxxJOJhMGhqOF7LLEmHEfsPD GHHCGU/kzphvq2y8o08GzyHcmQ+eq9VnjmOFkhGwCcTuNcxazKulnyt+8SjnOqT1AIP X-Received: by 2002:a05:6820:2e81:b0:69d:5149:e6b7 with SMTP id 006d021491bc7-69d5149e8cbmr994347eaf.5.1779207783427; Tue, 19 May 2026 09:23:03 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:30 -0600 Subject: [PATCH v9 28/40] target/mips: add Octeon SHA3 COP2 helpers MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-28-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::32f; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x32f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207852458154100 Add the Octeon SHA3 register-window state and helper operations. Keep the shared HSH/SHA3/SHA512 write path coherent, model the dedicated 25-lane Keccak state, and implement the Keccak-f[1600] permutation for the STARTOP selector. The shared selector window still uses explicit selector-position arithmetic internally because multiple COP2 engines alias the same numeric window. Decode of the individual DMFC2/DMTC2 instructions remains in the later decodetree patch. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Split SHA3 selector operations into their own COP2 helper patch. - Replace generic selector dispatch with per-operation SHA3 helpers. - Use helper-local selector constants for shared-window position logic. - Add matching helper.h declarations with the helper implementation. Changes v1 -> v2: - Use switch ranges and g_assert_not_reached() for SHA3 selector position decoding. (suggested by Philippe Mathieu-Daud=C3=A9) - Add selector dispatch updates in octeon_translate.c after moving COP2 decode out of translate.c. (suggested by Philippe Mathieu-Daud=C3=A9) Changes v5 -> v6: - Rename SHA3 DAT15 selector aliases with MF/MT direction suffixes. --- target/mips/cpu.h | 2 + target/mips/helper.h | 22 +++++ target/mips/system/machine.c | 1 + target/mips/tcg/octeon_crypto.c | 208 ++++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 233 insertions(+) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index 66c8653211..a061a86658 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -541,6 +541,7 @@ typedef enum MIPSOcteonSharedMode { OCTEON_SHARED_MODE_NONE =3D 0, OCTEON_SHARED_MODE_SHA512, OCTEON_SHARED_MODE_SNOW3G, + OCTEON_SHARED_MODE_SHA3, } MIPSOcteonSharedMode; =20 typedef struct MIPSOcteonCryptoState { @@ -551,6 +552,7 @@ typedef struct MIPSOcteonCryptoState { uint64_t hsh_dat[8]; uint64_t hsh_ivw[8]; uint64_t hsh_datw[16]; + uint64_t sha3_state[25]; uint64_t aes_iv[2]; uint64_t aes_key[4]; uint64_t aes_result[2]; diff --git a/target/mips/helper.h b/target/mips/helper.h index dac9dd8755..c0aa361ad8 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -27,6 +27,7 @@ DEF_HELPER_FLAGS_4(rotx, TCG_CALL_NO_RWG_SE, tl, tl, i32,= i32, i32) =20 /* Octeon COP2 selector operation helpers. */ DEF_HELPER_1(octeon_cp2_mf_crc_iv_reflect, i64, env) +DEF_HELPER_1(octeon_cp2_mf_sha3_dat24, i64, env) DEF_HELPER_2(octeon_cp2_mt_crc_write_iv_reflect, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_crc_write_byte, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_crc_write_half, void, env, i64) @@ -40,6 +41,27 @@ DEF_HELPER_2(octeon_cp2_mt_crc_write_dword_reflect, void= , env, i64) DEF_HELPER_2(octeon_cp2_mt_crc_write_var_reflect, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_gfm_xormul1_reflect, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_gfm_xormul1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_dat24, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_dat15, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat0, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat2, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat3, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat4, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat5, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat6, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat7, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat8, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat9, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat10, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat11, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat12, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat13, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat14, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat15, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat16, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_xordat17, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sha3_startop, void, env, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/system/machine.c b/target/mips/system/machine.c index ebfa0a9eb0..e6336534f4 100644 --- a/target/mips/system/machine.c +++ b/target/mips/system/machine.c @@ -292,6 +292,7 @@ static const VMStateDescription mips_vmstate_octeon_cry= pto =3D { VMSTATE_UINT64_ARRAY(env.octeon_crypto.hsh_dat, MIPSCPU, 8), VMSTATE_UINT64_ARRAY(env.octeon_crypto.hsh_ivw, MIPSCPU, 8), VMSTATE_UINT64_ARRAY(env.octeon_crypto.hsh_datw, MIPSCPU, 16), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.sha3_state, MIPSCPU, 25), VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_iv, MIPSCPU, 2), VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_key, MIPSCPU, 4), VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_result, MIPSCPU, 2), diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index 7394108c54..caad685cde 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -136,6 +136,140 @@ static void octeon_gfm_mul_reflect(MIPSOcteonCryptoSt= ate *crypto, uint64_t data) crypto->gfm_poly, crypto->gfm_reflect_resinp); crypto->gfm_reflect_xor0 =3D 0; } +static const uint64_t octeon_sha3_round_constants[24] =3D { + 0x0000000000000001ULL, 0x0000000000008082ULL, + 0x800000000000808aULL, 0x8000000080008000ULL, + 0x000000000000808bULL, 0x0000000080000001ULL, + 0x8000000080008081ULL, 0x8000000000008009ULL, + 0x000000000000008aULL, 0x0000000000000088ULL, + 0x0000000080008009ULL, 0x000000008000000aULL, + 0x000000008000808bULL, 0x800000000000008bULL, + 0x8000000000008089ULL, 0x8000000000008003ULL, + 0x8000000000008002ULL, 0x8000000000000080ULL, + 0x000000000000800aULL, 0x800000008000000aULL, + 0x8000000080008081ULL, 0x8000000000008080ULL, + 0x0000000080000001ULL, 0x8000000080008008ULL, +}; + +static const uint8_t octeon_sha3_rotation_constants[24] =3D { + 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14, + 27, 41, 56, 8, 25, 43, 62, 18, 39, 61, 20, 44, +}; + +static const uint8_t octeon_sha3_pi_lanes[24] =3D { + 10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4, + 15, 23, 19, 13, 12, 2, 20, 14, 22, 9, 6, 1, +}; + +static void octeon_sha3_permute(MIPSOcteonCryptoState *crypto) +{ + uint64_t *state =3D crypto->sha3_state; + + for (int round =3D 0; round < 24; round++) { + uint64_t bc[5]; + uint64_t temp; + + for (int x =3D 0; x < 5; x++) { + bc[x] =3D state[x] ^ state[5 + x] ^ state[10 + x] ^ + state[15 + x] ^ state[20 + x]; + } + for (int x =3D 0; x < 5; x++) { + temp =3D bc[(x + 4) % 5] ^ rol64(bc[(x + 1) % 5], 1); + for (int y =3D 0; y < 25; y +=3D 5) { + state[y + x] ^=3D temp; + } + } + + temp =3D state[1]; + for (int i =3D 0; i < 24; i++) { + uint64_t next =3D state[octeon_sha3_pi_lanes[i]]; + + state[octeon_sha3_pi_lanes[i]] =3D + rol64(temp, octeon_sha3_rotation_constants[i]); + temp =3D next; + } + + for (int y =3D 0; y < 25; y +=3D 5) { + for (int x =3D 0; x < 5; x++) { + bc[x] =3D state[y + x]; + } + for (int x =3D 0; x < 5; x++) { + state[y + x] =3D bc[x] ^ ((~bc[(x + 1) % 5]) & bc[(x + 2) = % 5]); + } + } + + state[0] ^=3D octeon_sha3_round_constants[round]; + } +} + +static bool octeon_sha3_is_dat_sel(uint32_t sel) +{ + switch (sel) { + case OCTEON_HSH_DATW(0) ... OCTEON_HSH_DATW(15): + case OCTEON_HSH_IVW(0) ... OCTEON_HSH_IVW(7): + case OCTEON_SHA3_DAT15_MT_SEL: + case OCTEON_SHA3_DAT24_SEL: + return true; + default: + return false; + } +} + +static int octeon_sha3_dat_pos_from_sel(uint32_t sel) +{ + switch (sel) { + case OCTEON_HSH_DATW(0) ... OCTEON_HSH_DATW(14): + return sel - OCTEON_HSH_DATW(0); + case OCTEON_HSH_IVW(0) ... OCTEON_HSH_IVW(7): + return 16 + (sel - OCTEON_HSH_IVW(0)); + case OCTEON_HSH_DATW(15): + case OCTEON_SHA3_DAT15_MT_SEL: + return 15; + case OCTEON_SHA3_DAT24_SEL: + return 24; + default: + g_assert_not_reached(); + } +} + +static uint64_t octeon_sha3_reg_to_lane(uint64_t value) +{ + /* + * The COP2 register interface is consumed by big-endian MIPS code as + * 64-bit register values, while Keccak lanes are byte-little-endian. + */ + return bswap64(value); +} + +static uint64_t octeon_sha3_lane_to_reg(uint64_t value) +{ + return bswap64(value); +} + +static void octeon_store_shared_hsh_window(MIPSOcteonCryptoState *crypto, + uint32_t sel, uint64_t value) +{ + switch (sel) { + case OCTEON_HSH_DATW(0) ... OCTEON_HSH_DATW(14): + crypto->hsh_datw[sel - OCTEON_HSH_DATW(0)] =3D value; + crypto->sha3_state[sel - OCTEON_HSH_DATW(0)] =3D + octeon_sha3_reg_to_lane(value); + break; + case OCTEON_HSH_IVW(0) ... OCTEON_HSH_IVW(7): + crypto->hsh_ivw[sel - OCTEON_HSH_IVW(0)] =3D value; + crypto->sha3_state[16 + (sel - OCTEON_HSH_IVW(0))] =3D + octeon_sha3_reg_to_lane(value); + break; + case OCTEON_SHA3_DAT15_MT_SEL: + crypto->sha3_state[15] =3D octeon_sha3_reg_to_lane(value); + break; + case OCTEON_SHA3_DAT24_SEL: + crypto->sha3_state[24] =3D octeon_sha3_reg_to_lane(value); + break; + default: + g_assert_not_reached(); + } +} static void octeon_gfm_mul(const uint64_t x[2], const uint64_t y[2], uint16_t poly, uint64_t out[2]) { @@ -169,10 +303,84 @@ static void octeon_gfm_mul(const uint64_t x[2], const= uint64_t y[2], out[0] =3D zh; out[1] =3D zl; } +uint64_t helper_octeon_cp2_mf_sha3_dat24(CPUMIPSState *env) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + if (crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_SHA3) { + return octeon_sha3_lane_to_reg(crypto->sha3_state[24]); + } + return 0; +} uint64_t helper_octeon_cp2_mf_crc_iv_reflect(CPUMIPSState *env) { return octeon_crc_reflect32_by_byte(env->octeon_crypto.crc_iv); } +static void octeon_sha3_mt_dat(MIPSOcteonCryptoState *crypto, + uint32_t sel, uint64_t value) +{ + if (crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_ZUC && + octeon_zuc_is_shared_dmtc2_sel(sel)) { + octeon_store_shared_hsh_window(crypto, sel, value); + return; + } + + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA3); + octeon_store_shared_hsh_window(crypto, sel, value); +} + +void helper_octeon_cp2_mt_sha3_dat24(CPUMIPSState *env, uint64_t value) +{ + octeon_sha3_mt_dat(&env->octeon_crypto, OCTEON_SHA3_DAT24_SEL, + value); +} + +void helper_octeon_cp2_mt_sha3_dat15(CPUMIPSState *env, uint64_t value) +{ + octeon_sha3_mt_dat(&env->octeon_crypto, OCTEON_SHA3_DAT15_MT_SEL, + value); +} + +static void octeon_sha3_xordat(MIPSOcteonCryptoState *crypto, + unsigned int index, uint64_t value) +{ + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA3); + crypto->sha3_state[index] ^=3D octeon_sha3_reg_to_lane(value); +} + +#define OCTEON_SHA3_XORDAT_HELPER(N) \ +void helper_octeon_cp2_mt_sha3_xordat ## N(CPUMIPSState *env, uint64_t val= ue) \ +{ \ + octeon_sha3_xordat(&env->octeon_crypto, N, value); \ +} +OCTEON_SHA3_XORDAT_HELPER(0) +OCTEON_SHA3_XORDAT_HELPER(1) +OCTEON_SHA3_XORDAT_HELPER(2) +OCTEON_SHA3_XORDAT_HELPER(3) +OCTEON_SHA3_XORDAT_HELPER(4) +OCTEON_SHA3_XORDAT_HELPER(5) +OCTEON_SHA3_XORDAT_HELPER(6) +OCTEON_SHA3_XORDAT_HELPER(7) +OCTEON_SHA3_XORDAT_HELPER(8) +OCTEON_SHA3_XORDAT_HELPER(9) +OCTEON_SHA3_XORDAT_HELPER(10) +OCTEON_SHA3_XORDAT_HELPER(11) +OCTEON_SHA3_XORDAT_HELPER(12) +OCTEON_SHA3_XORDAT_HELPER(13) +OCTEON_SHA3_XORDAT_HELPER(14) +OCTEON_SHA3_XORDAT_HELPER(15) +OCTEON_SHA3_XORDAT_HELPER(16) +OCTEON_SHA3_XORDAT_HELPER(17) +#undef OCTEON_SHA3_XORDAT_HELPER + +void helper_octeon_cp2_mt_sha3_startop(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + (void)value; + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA3); + octeon_sha3_permute(crypto); +} void helper_octeon_cp2_mt_gfm_xormul1_reflect(CPUMIPSState *env, uint64_t value) { --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779208078; cv=none; d=zohomail.com; s=zohoarc; b=Qumw+NeaE6e0Uu/Olg4Ff7IYaLIGFwx96FIWd7cl/F2wWT36wkbQdJ6n15m5OX3pecAtVqqGv41UgHfbFavQjEsk0ubW28cjKBmyK68TRZUAFR3I6YBQ95gEZi9+Vpn799jPT8gzA1cDySUKJAoPz5C/+9+MAzIO5Yx6U0ZAjiw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779208078; 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=7mFjqFege3N5MhFTYwu2Vh6X/u9SKjNii2bEMV2Iaks=; b=OaP6YVTyCWDw6WvEG16k4ELsaENaMi6VcfXM6xxIq9BxCfR3en4gJcdfrRWqQBoiI5+iwAx3qJCnLSmZAR6tXq5LqOUyfnUqTmtNHAbi3u4m/hwkdKDGIShe100IwmOeb9ucm/3/sidRursDF9XVTK+vU/+6gzTal0zH4/gVJtU= 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 1779208078206330.83526901478774; Tue, 19 May 2026 09:27:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDr-0006p2-II; Tue, 19 May 2026 12:23:11 -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 1wPNDo-0006mY-BM for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:08 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDl-0000nW-SH for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:08 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-408778a8ec4so2314170fac.0 for ; Tue, 19 May 2026 09:23:05 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207784; x=1779812584; 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=7mFjqFege3N5MhFTYwu2Vh6X/u9SKjNii2bEMV2Iaks=; b=Lx4C6IzXlCayZC6t2YSioyraFni5+865lW2bwbcTGZc5NezTvIYmAGquV0hmgR9V3z b4E9U6B9na6hZIRxVhD3OhgfD4NBbdUMi2Leu7CN9CQF3BDrib6X7kv60FA+bcX4Tv2/ L6gqXg9+Tc/6SFmb9IYVQZ4BG9r/9YwJ4O0Y4xNjFvBnboUF0weV7Ve9chhrRt2E6qcK raKCj6nyHcPepk7b7MMvmpIwEaC4OXxmG7EBq5Xfli6Nf+/Y6PyE+1w0ofLp7RkRt+HO RtP0bOSsDBmqFv2DKCzIuLamOiD+Ef6VpIaBH7cbKbmfUjxCpAgvOddCfBy9Czn31WLi ESrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207784; x=1779812584; 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=7mFjqFege3N5MhFTYwu2Vh6X/u9SKjNii2bEMV2Iaks=; b=hVsCdBVqMtSq3rAHrjilqUj/SQzJBG/kkEOjOprePmpQiU5ZA2vv8tW0dcuPs2f4iC uoDtLJrAO2cH57aUBaQRa8PsU+cI7JLt92fws+6Ou7JPBSBfe+sufHAOUFrycrFAgYcT 4vz3dajT3gEEmihvcSEgnpgl9V92OhieKNQV+b82Lrcn7siMq6klhjiSbf/gAnK7OZjg rygRdi2UL6AVZ4JzYTRQJqz8thss9/mHC+KgBU8HkhdnqUSpGCEMRi8Cwp/VMRYbkIjq SAV9B0/j1AMuWs3YwKL/FiSszYIDrevBLhJAvhCi2BS/Bu8YfG+T699rZdSitPlZeFbt lHJw== X-Gm-Message-State: AOJu0YyBcaYm3zgpZTC5tNuEktUQqbhSFRcH6mtOXZPNYRMheopb6XnE 91InkaxZyHA0ijZzSh0CWf6uJCTy6j2/qt4eca/z6ihKqfmGjhljPY1H X-Gm-Gg: Acq92OG66ZhuLz0IOkPiS0713nhkwBnuWI+Uu4mkTdMpb3Kacc9wIgP5xSn44sAe8AJ f+FyziTLDrM7T9oCtdUm99ysJEFgs6tAP7bRu/5wxGgZ9494KrxStNhVtknR0XF4yZOLdq7oPor 6jG2bB5qT+ntPugzRqpPnm/jAAdhCQe3D6nLMNPVCG63Fcj/lNh/uFdv5hc3UrxUz2kCht9l7mR 4Yi2rHGT/s/ijQIzRTInKrc44+otg804l955STZWXyxifPV5azCASqduczmeTeCR3fxbTM5MiYq V8cKiz0UArCRn/q1Iz5yO73PgnpIq+65WIhiXdWYy0f+zCOnGBf1pEG4cf9M5YXON66SReB1RAd CNuZ8SScmSd0TIovDTrM9/JJCcX2bf3gQ2K1kVyd9jmx37f6TvqCAs2q76u3DVXxI+XvJI3r55r 6E3vyrB9o6LJl4OWYe858MN9lzjMM/v/TeswVMgBiGc5O5KTA71W4gR/i8OI6/4G7bXdbjK29ei GpzUPCczjHNnM+84oleaymiAZ7cZAtsJz7GTegXUr1R5qalYxt25TmAmGbTXcx4HU2/ X-Received: by 2002:a05:687c:408c:b0:42c:1e4a:8e28 with SMTP id 586e51a60fabf-43a2da2a5e5mr13511840fac.12.1779207784518; Tue, 19 May 2026 09:23:04 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:31 -0600 Subject: [PATCH v9 29/40] target/mips: add Octeon ZUC COP2 helpers MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-29-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::2b; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x2b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779208080580154100 Add the Octeon ZUC START and MORE helper operations and model the shared state window used by the hardware interface. This covers the keystream and MAC engine state, including the save-and-restore view that overlaps the HSH/SHA3 bank. Shared-window writes also update the SHA512/SHA3 backing state so guests can switch between engines without stale register contents. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Split ZUC selector operations into their own COP2 helper patch. - Replace generic selector dispatch with per-operation ZUC helpers. - Use helper-local selector constants for shared-window position logic. - Add matching helper.h declarations with the helper implementation. Changes v1 -> v2: - Add shared-window selector predicates and assert on unreachable ZUC selector switches. (suggested by Philippe Mathieu-Daud=C3=A9) - Preserve aliased HSH/SHA3/SHA512 backing state during ZUC shared-window writes. - Add selector dispatch updates in octeon_translate.c after moving COP2 decode out of translate.c. (suggested by Philippe Mathieu-Daud=C3=A9) Changes v5 -> v6: - Use the manual-aligned HSH_DATW field and shared HSH window helper names introduced by the COP2 crypto core patch. --- target/mips/cpu.h | 5 + target/mips/helper.h | 2 + target/mips/system/machine.c | 4 + target/mips/tcg/octeon_crypto.c | 324 ++++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 335 insertions(+) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index a061a86658..b57a7a0584 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -541,6 +541,7 @@ typedef enum MIPSOcteonSharedMode { OCTEON_SHARED_MODE_NONE =3D 0, OCTEON_SHARED_MODE_SHA512, OCTEON_SHARED_MODE_SNOW3G, + OCTEON_SHARED_MODE_ZUC, OCTEON_SHARED_MODE_SHA3, } MIPSOcteonSharedMode; =20 @@ -572,6 +573,10 @@ typedef struct MIPSOcteonCryptoState { uint32_t snow3g_fsm[3]; uint32_t snow3g_lfsr[16]; uint64_t snow3g_result; + uint32_t zuc_fsm[2]; + uint32_t zuc_lfsr[16]; + uint32_t zuc_window[3]; + uint32_t zuc_tresult; } MIPSOcteonCryptoState; =20 typedef struct CPUArchState { diff --git a/target/mips/helper.h b/target/mips/helper.h index c0aa361ad8..3e6025b7de 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -62,6 +62,8 @@ DEF_HELPER_2(octeon_cp2_mt_sha3_xordat15, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_sha3_xordat16, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_sha3_xordat17, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_sha3_startop, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_zuc_start, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_zuc_more, void, env, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/system/machine.c b/target/mips/system/machine.c index e6336534f4..9bcb066245 100644 --- a/target/mips/system/machine.c +++ b/target/mips/system/machine.c @@ -312,6 +312,10 @@ static const VMStateDescription mips_vmstate_octeon_cr= ypto =3D { VMSTATE_UINT32_ARRAY(env.octeon_crypto.snow3g_fsm, MIPSCPU, 3), VMSTATE_UINT32_ARRAY(env.octeon_crypto.snow3g_lfsr, MIPSCPU, 16), VMSTATE_UINT64(env.octeon_crypto.snow3g_result, MIPSCPU), + VMSTATE_UINT32_ARRAY(env.octeon_crypto.zuc_fsm, MIPSCPU, 2), + VMSTATE_UINT32_ARRAY(env.octeon_crypto.zuc_lfsr, MIPSCPU, 16), + VMSTATE_UINT32_ARRAY(env.octeon_crypto.zuc_window, MIPSCPU, 3), + VMSTATE_UINT32(env.octeon_crypto.zuc_tresult, MIPSCPU), VMSTATE_END_OF_LIST() } }; diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index caad685cde..673932ceba 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -270,6 +270,276 @@ static void octeon_store_shared_hsh_window(MIPSOcteon= CryptoState *crypto, g_assert_not_reached(); } } +static const uint8_t octeon_zuc_s0[256] =3D { + 0x3e, 0x72, 0x5b, 0x47, 0xca, 0xe0, 0x00, 0x33, + 0x04, 0xd1, 0x54, 0x98, 0x09, 0xb9, 0x6d, 0xcb, + 0x7b, 0x1b, 0xf9, 0x32, 0xaf, 0x9d, 0x6a, 0xa5, + 0xb8, 0x2d, 0xfc, 0x1d, 0x08, 0x53, 0x03, 0x90, + 0x4d, 0x4e, 0x84, 0x99, 0xe4, 0xce, 0xd9, 0x91, + 0xdd, 0xb6, 0x85, 0x48, 0x8b, 0x29, 0x6e, 0xac, + 0xcd, 0xc1, 0xf8, 0x1e, 0x73, 0x43, 0x69, 0xc6, + 0xb5, 0xbd, 0xfd, 0x39, 0x63, 0x20, 0xd4, 0x38, + 0x76, 0x7d, 0xb2, 0xa7, 0xcf, 0xed, 0x57, 0xc5, + 0xf3, 0x2c, 0xbb, 0x14, 0x21, 0x06, 0x55, 0x9b, + 0xe3, 0xef, 0x5e, 0x31, 0x4f, 0x7f, 0x5a, 0xa4, + 0x0d, 0x82, 0x51, 0x49, 0x5f, 0xba, 0x58, 0x1c, + 0x4a, 0x16, 0xd5, 0x17, 0xa8, 0x92, 0x24, 0x1f, + 0x8c, 0xff, 0xd8, 0xae, 0x2e, 0x01, 0xd3, 0xad, + 0x3b, 0x4b, 0xda, 0x46, 0xeb, 0xc9, 0xde, 0x9a, + 0x8f, 0x87, 0xd7, 0x3a, 0x80, 0x6f, 0x2f, 0xc8, + 0xb1, 0xb4, 0x37, 0xf7, 0x0a, 0x22, 0x13, 0x28, + 0x7c, 0xcc, 0x3c, 0x89, 0xc7, 0xc3, 0x96, 0x56, + 0x07, 0xbf, 0x7e, 0xf0, 0x0b, 0x2b, 0x97, 0x52, + 0x35, 0x41, 0x79, 0x61, 0xa6, 0x4c, 0x10, 0xfe, + 0xbc, 0x26, 0x95, 0x88, 0x8a, 0xb0, 0xa3, 0xfb, + 0xc0, 0x18, 0x94, 0xf2, 0xe1, 0xe5, 0xe9, 0x5d, + 0xd0, 0xdc, 0x11, 0x66, 0x64, 0x5c, 0xec, 0x59, + 0x42, 0x75, 0x12, 0xf5, 0x74, 0x9c, 0xaa, 0x23, + 0x0e, 0x86, 0xab, 0xbe, 0x2a, 0x02, 0xe7, 0x67, + 0xe6, 0x44, 0xa2, 0x6c, 0xc2, 0x93, 0x9f, 0xf1, + 0xf6, 0xfa, 0x36, 0xd2, 0x50, 0x68, 0x9e, 0x62, + 0x71, 0x15, 0x3d, 0xd6, 0x40, 0xc4, 0xe2, 0x0f, + 0x8e, 0x83, 0x77, 0x6b, 0x25, 0x05, 0x3f, 0x0c, + 0x30, 0xea, 0x70, 0xb7, 0xa1, 0xe8, 0xa9, 0x65, + 0x8d, 0x27, 0x1a, 0xdb, 0x81, 0xb3, 0xa0, 0xf4, + 0x45, 0x7a, 0x19, 0xdf, 0xee, 0x78, 0x34, 0x60, +}; + +static const uint8_t octeon_zuc_s1[256] =3D { + 0x55, 0xc2, 0x63, 0x71, 0x3b, 0xc8, 0x47, 0x86, + 0x9f, 0x3c, 0xda, 0x5b, 0x29, 0xaa, 0xfd, 0x77, + 0x8c, 0xc5, 0x94, 0x0c, 0xa6, 0x1a, 0x13, 0x00, + 0xe3, 0xa8, 0x16, 0x72, 0x40, 0xf9, 0xf8, 0x42, + 0x44, 0x26, 0x68, 0x96, 0x81, 0xd9, 0x45, 0x3e, + 0x10, 0x76, 0xc6, 0xa7, 0x8b, 0x39, 0x43, 0xe1, + 0x3a, 0xb5, 0x56, 0x2a, 0xc0, 0x6d, 0xb3, 0x05, + 0x22, 0x66, 0xbf, 0xdc, 0x0b, 0xfa, 0x62, 0x48, + 0xdd, 0x20, 0x11, 0x06, 0x36, 0xc9, 0xc1, 0xcf, + 0xf6, 0x27, 0x52, 0xbb, 0x69, 0xf5, 0xd4, 0x87, + 0x7f, 0x84, 0x4c, 0xd2, 0x9c, 0x57, 0xa4, 0xbc, + 0x4f, 0x9a, 0xdf, 0xfe, 0xd6, 0x8d, 0x7a, 0xeb, + 0x2b, 0x53, 0xd8, 0x5c, 0xa1, 0x14, 0x17, 0xfb, + 0x23, 0xd5, 0x7d, 0x30, 0x67, 0x73, 0x08, 0x09, + 0xee, 0xb7, 0x70, 0x3f, 0x61, 0xb2, 0x19, 0x8e, + 0x4e, 0xe5, 0x4b, 0x93, 0x8f, 0x5d, 0xdb, 0xa9, + 0xad, 0xf1, 0xae, 0x2e, 0xcb, 0x0d, 0xfc, 0xf4, + 0x2d, 0x46, 0x6e, 0x1d, 0x97, 0xe8, 0xd1, 0xe9, + 0x4d, 0x37, 0xa5, 0x75, 0x5e, 0x83, 0x9e, 0xab, + 0x82, 0x9d, 0xb9, 0x1c, 0xe0, 0xcd, 0x49, 0x89, + 0x01, 0xb6, 0xbd, 0x58, 0x24, 0xa2, 0x5f, 0x38, + 0x78, 0x99, 0x15, 0x90, 0x50, 0xb8, 0x95, 0xe4, + 0xd0, 0x91, 0xc7, 0xce, 0xed, 0x0f, 0xb4, 0x6f, + 0xa0, 0xcc, 0xf0, 0x02, 0x4a, 0x79, 0xc3, 0xde, + 0xa3, 0xef, 0xea, 0x51, 0xe6, 0x6b, 0x18, 0xec, + 0x1b, 0x2c, 0x80, 0xf7, 0x74, 0xe7, 0xff, 0x21, + 0x5a, 0x6a, 0x54, 0x1e, 0x41, 0x31, 0x92, 0x35, + 0xc4, 0x33, 0x07, 0x0a, 0xba, 0x7e, 0x0e, 0x34, + 0x88, 0xb1, 0x98, 0x7c, 0xf3, 0x3d, 0x60, 0x6c, + 0x7b, 0xca, 0xd3, 0x1f, 0x32, 0x65, 0x04, 0x28, + 0x64, 0xbe, 0x85, 0x9b, 0x2f, 0x59, 0x8a, 0xd7, + 0xb0, 0x25, 0xac, 0xaf, 0x12, 0x03, 0xe2, 0xf2, +}; + +static inline uint32_t octeon_zuc_addm(uint32_t a, uint32_t b) +{ + uint32_t c =3D a + b; + + c =3D (c & 0x7fffffffU) + (c >> 31); + return c ? c : 0x7fffffffU; +} + +static inline uint32_t octeon_zuc_mul_by_pow2(uint32_t v, unsigned int shi= ft) +{ + return ((v << shift) | (v >> (31 - shift))) & 0x7fffffffU; +} + +static inline uint32_t octeon_zuc_make_u32(uint8_t a, uint8_t b, + uint8_t c, uint8_t d) +{ + return ((uint32_t)a << 24) | ((uint32_t)b << 16) | + ((uint32_t)c << 8) | d; +} + +static inline uint64_t octeon_zuc_pack_pair(uint32_t hi, uint32_t lo) +{ + return ((uint64_t)hi << 32) | lo; +} + +static void octeon_zuc_bit_reorganization(const MIPSOcteonCryptoState *cry= pto, + uint32_t x[4]) +{ + x[0] =3D ((crypto->zuc_lfsr[15] & 0x7fff8000U) << 1) | + (crypto->zuc_lfsr[14] & 0xffffU); + x[1] =3D ((crypto->zuc_lfsr[11] & 0xffffU) << 16) | + (crypto->zuc_lfsr[9] >> 15); + x[2] =3D ((crypto->zuc_lfsr[7] & 0xffffU) << 16) | + (crypto->zuc_lfsr[5] >> 15); + x[3] =3D ((crypto->zuc_lfsr[2] & 0xffffU) << 16) | + (crypto->zuc_lfsr[0] >> 15); +} + +static inline uint32_t octeon_zuc_l1(uint32_t x) +{ + return x ^ rol32(x, 2) ^ rol32(x, 10) ^ + rol32(x, 18) ^ rol32(x, 24); +} + +static inline uint32_t octeon_zuc_l2(uint32_t x) +{ + return x ^ rol32(x, 8) ^ rol32(x, 14) ^ + rol32(x, 22) ^ rol32(x, 30); +} + +static uint32_t octeon_zuc_f(MIPSOcteonCryptoState *crypto, const uint32_t= x[4]) +{ + uint32_t w =3D (x[0] ^ crypto->zuc_fsm[0]) + crypto->zuc_fsm[1]; + uint32_t w1 =3D crypto->zuc_fsm[0] + x[1]; + uint32_t w2 =3D crypto->zuc_fsm[1] ^ x[2]; + uint32_t u =3D octeon_zuc_l1((w1 << 16) | (w2 >> 16)); + uint32_t v =3D octeon_zuc_l2((w2 << 16) | (w1 >> 16)); + + crypto->zuc_fsm[0] =3D octeon_zuc_make_u32(octeon_zuc_s0[u >> 24], + octeon_zuc_s1[(uint8_t)(u >> = 16)], + octeon_zuc_s0[(uint8_t)(u >> = 8)], + octeon_zuc_s1[(uint8_t)u]); + crypto->zuc_fsm[1] =3D octeon_zuc_make_u32(octeon_zuc_s0[v >> 24], + octeon_zuc_s1[(uint8_t)(v >> = 16)], + octeon_zuc_s0[(uint8_t)(v >> = 8)], + octeon_zuc_s1[(uint8_t)v]); + return w; +} + +static void octeon_zuc_lfsr_step(MIPSOcteonCryptoState *crypto, + bool init_mode, uint32_t u) +{ + uint32_t f =3D crypto->zuc_lfsr[0]; + + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(crypto->zuc_lfsr[0], 8= )); + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(crypto->zuc_lfsr[4], 2= 0)); + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(crypto->zuc_lfsr[10], = 21)); + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(crypto->zuc_lfsr[13], = 17)); + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(crypto->zuc_lfsr[15], = 15)); + if (init_mode) { + f =3D octeon_zuc_addm(f, u); + } + + memmove(&crypto->zuc_lfsr[0], &crypto->zuc_lfsr[1], + 15 * sizeof(crypto->zuc_lfsr[0])); + crypto->zuc_lfsr[15] =3D f; +} + +static uint32_t octeon_zuc_generate_word(MIPSOcteonCryptoState *crypto) +{ + uint32_t x[4]; + uint32_t z; + + octeon_zuc_bit_reorganization(crypto, x); + z =3D octeon_zuc_f(crypto, x) ^ x[3]; + octeon_zuc_lfsr_step(crypto, false, 0); + return z; +} + +static void octeon_zuc_fill_window(MIPSOcteonCryptoState *crypto) +{ + crypto->zuc_window[0] =3D octeon_zuc_generate_word(crypto); + crypto->zuc_window[1] =3D octeon_zuc_generate_word(crypto); + crypto->zuc_window[2] =3D octeon_zuc_generate_word(crypto); +} + +static inline uint32_t +octeon_zuc_window_word(const MIPSOcteonCryptoState *crypto, unsigned int b= it) +{ + if (bit =3D=3D 0) { + return crypto->zuc_window[0]; + } + if (bit < 32) { + return (crypto->zuc_window[0] << bit) | + (crypto->zuc_window[1] >> (32 - bit)); + } + if (bit =3D=3D 32) { + return crypto->zuc_window[1]; + } + return (crypto->zuc_window[1] << (bit - 32)) | + (crypto->zuc_window[2] >> (64 - bit)); +} + +static void octeon_zuc_advance_window(MIPSOcteonCryptoState *crypto) +{ + crypto->zuc_window[0] =3D crypto->zuc_window[2]; + crypto->zuc_window[1] =3D octeon_zuc_generate_word(crypto); + crypto->zuc_window[2] =3D octeon_zuc_generate_word(crypto); +} + +static void octeon_zuc_start(MIPSOcteonCryptoState *crypto, uint64_t data) +{ + uint32_t x[4]; + bool restore_active =3D crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_= ZUC; + + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_ZUC); + if (!restore_active) { + for (int i =3D 0; i < 7; i++) { + uint64_t pair =3D crypto->hsh_datw[i]; + + crypto->zuc_lfsr[i * 2] =3D (pair >> 32) & 0x7fffffffU; + crypto->zuc_lfsr[i * 2 + 1] =3D pair & 0x7fffffffU; + } + } + crypto->zuc_lfsr[14] =3D (data >> 32) & 0x7fffffffU; + crypto->zuc_lfsr[15] =3D data & 0x7fffffffU; + crypto->zuc_fsm[0] =3D 0; + crypto->zuc_fsm[1] =3D 0; + crypto->zuc_tresult =3D 0; + + for (int i =3D 0; i < 32; i++) { + octeon_zuc_bit_reorganization(crypto, x); + octeon_zuc_lfsr_step(crypto, true, octeon_zuc_f(crypto, x) >> 1); + } + + octeon_zuc_bit_reorganization(crypto, x); + (void)octeon_zuc_f(crypto, x); + octeon_zuc_lfsr_step(crypto, false, 0); + octeon_zuc_fill_window(crypto); +} + +static void octeon_zuc_more(MIPSOcteonCryptoState *crypto, uint64_t data) +{ + uint32_t t =3D crypto->zuc_tresult; + + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_ZUC); + for (unsigned int bit =3D 0; bit < 64; bit++) { + if ((data >> (63 - bit)) & 1) { + t ^=3D octeon_zuc_window_word(crypto, bit); + } + } + crypto->zuc_tresult =3D t; + octeon_zuc_advance_window(crypto); +} + +static bool octeon_zuc_is_shared_dmfc2_sel(uint32_t sel) +{ + switch (sel) { + case OCTEON_HSH_DATW(0) ... OCTEON_HSH_DATW(11): + case OCTEON_HSH_IVW(0) ... OCTEON_HSH_IVW(3): + case OCTEON_SHA3_DAT15_MF_SEL: + case OCTEON_SHA3_DAT24_SEL: + return true; + default: + return false; + } +} + +static bool octeon_zuc_is_shared_dmtc2_sel(uint32_t sel) +{ + switch (sel) { + case OCTEON_HSH_DATW(0) ... OCTEON_HSH_DATW(11): + case OCTEON_HSH_IVW(0) ... OCTEON_HSH_IVW(3): + case OCTEON_SHA3_DAT15_MT_SEL: + case OCTEON_SHA3_DAT24_SEL: + return true; + default: + return false; + } +} static void octeon_gfm_mul(const uint64_t x[2], const uint64_t y[2], uint16_t poly, uint64_t out[2]) { @@ -316,6 +586,51 @@ uint64_t helper_octeon_cp2_mf_crc_iv_reflect(CPUMIPSSt= ate *env) { return octeon_crc_reflect32_by_byte(env->octeon_crypto.crc_iv); } +static bool octeon_zuc_store_shared(MIPSOcteonCryptoState *crypto, + uint32_t sel, uint64_t value) +{ + if (crypto->shared_mode !=3D OCTEON_SHARED_MODE_ZUC || + !octeon_zuc_is_shared_dmtc2_sel(sel)) { + return false; + } + + octeon_store_shared_hsh_window(crypto, sel, value); + if (sel >=3D OCTEON_HSH_DATW(0) && + sel <=3D OCTEON_HSH_DATW(7)) { + unsigned int idx =3D sel - OCTEON_HSH_DATW(0); + + crypto->zuc_lfsr[idx * 2] =3D (value >> 32) & 0x7fffffffU; + crypto->zuc_lfsr[idx * 2 + 1] =3D value & 0x7fffffffU; + return true; + } + + switch (sel) { + case OCTEON_HSH_DATW(8): + crypto->zuc_fsm[0] =3D value >> 32; + crypto->zuc_fsm[1] =3D value; + return true; + case OCTEON_HSH_DATW(9): + case OCTEON_HSH_IVW(0): + crypto->zuc_window[0] =3D value >> 32; + crypto->zuc_window[1] =3D value; + return true; + case OCTEON_HSH_DATW(10): + crypto->zuc_window[2] =3D value; + return true; + case OCTEON_HSH_DATW(11): + case OCTEON_HSH_IVW(3): + crypto->zuc_tresult =3D value; + return true; + case OCTEON_HSH_IVW(1): + crypto->zuc_fsm[0] =3D value; + return true; + case OCTEON_HSH_IVW(2): + crypto->zuc_fsm[1] =3D value; + return true; + default: + g_assert_not_reached(); + } +} static void octeon_sha3_mt_dat(MIPSOcteonCryptoState *crypto, uint32_t sel, uint64_t value) { @@ -404,6 +719,15 @@ void helper_octeon_cp2_mt_gfm_xormul1(CPUMIPSState *en= v, uint64_t value) } crypto->gfm_xor0 =3D 0; } +void helper_octeon_cp2_mt_zuc_start(CPUMIPSState *env, uint64_t value) +{ + octeon_zuc_start(&env->octeon_crypto, value); +} + +void helper_octeon_cp2_mt_zuc_more(CPUMIPSState *env, uint64_t value) +{ + octeon_zuc_more(&env->octeon_crypto, value); +} void helper_octeon_cp2_mt_crc_write_iv_reflect(CPUMIPSState *env, uint64_t value) { --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779208043; cv=none; d=zohomail.com; s=zohoarc; b=IfjgXoIWbwrmV1RZaR+Iod4aFmdbuq266l3qah+CvAGubXti6yVJjojJfO+td+I8Tkz0OfCVrUtx97yYrQAqT6iiYpFfFPRMt/yaaYqRffm96EY/rrylA9Bf9SPE5Bwb1Bbrc9w+rZcMu0hfX2zmWZvN0IG2Oy6xoNdmv+wZedk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779208043; 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=WmpcUUIKla9bX8SwPlvt8bu0mc2DcmFkLSpAmOaqkfE=; b=b+b7ifMU1dQhaIF1nf2ZG2rLNwlNimzzxf30M7EptRcePhpyT3fzjj8JFYS7Yrmqkg6MWxNJ3WMrwfcSgCXPeD+NgFuExSx72x/xDtR4kV2AN0b9bZnCoOmG/PqEMTTfF4nWH6nSNgWKCcK5eK4mZegYbFQ7Br7koj7PLChqQqA= 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 1779208043894419.2589879758914; Tue, 19 May 2026 09:27:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDs-0006qj-Ji; Tue, 19 May 2026 12:23:12 -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 1wPNDp-0006nV-7L for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:09 -0400 Received: from mail-oa1-x33.google.com ([2001:4860:4864:20::33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDm-0000nb-Qo for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:08 -0400 Received: by mail-oa1-x33.google.com with SMTP id 586e51a60fabf-439c3768d56so1682847fac.3 for ; Tue, 19 May 2026 09:23:06 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207785; x=1779812585; 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=WmpcUUIKla9bX8SwPlvt8bu0mc2DcmFkLSpAmOaqkfE=; b=LYLClZKzHHmQI+l/KwURmwKqfQ+059dVt+A6R4/tf646wt8FprS7HNtXZpOxejn/lz TG9VvJwxSQpOd73qLxJlz4FgAJlHA3/S6CuD3/sKZInSs58z1F+Lmi0LoSXgN9tFKHog csYZEVgRIoDV4pk3OS6G8Z/tncmPVu5Eo0j7WrgVwFkFC0aH8Z5U9CzGRVRSILW0axtu 9MbVBhXRulWBQr8LeMxxGdYZmV/4UxTQATEYXRoPZiGBlBIWeGVZhnnTOwI0hRC66jnV j0JdJF5fCkjpGdP57Lm1Zh8loYJfSn/WAWjjsZ0FxO09hJL8qKJR6Demu1mGJbZqFjPE os/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207785; x=1779812585; 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=WmpcUUIKla9bX8SwPlvt8bu0mc2DcmFkLSpAmOaqkfE=; b=OWxebf8RqL+x1/mB/zIEJw3Wr0dm7yXWuQ5IPsd1Y+3vdeEAy/G1wRJG9ugqBR4xLb h9lSRQtwihD1m1qDSXXAfnt3bkGSGa2WOxpalluAHPL1H1bREURuEfOfnVuIuBnaC8La 27ORDkt0tdZbwMIxLksycuiv0M5/iq7i0mp0zHPRNL5AEDTRqBRF8OVIS/8wfDMY245O ayuHNZbjWsq+wIVg7SsC0j4HAtag9QpaT43ufNAUR4R8WyHCiWDWN/I+DTE0IDv6Q4w0 lfwnyI/n6pG1XAI7VE3OoeXjlhW5br5mVJI0ubVmA9viJVBITGkH/fvEJjdluQXuf12c qM5g== X-Gm-Message-State: AOJu0Yw3djBajOyH4fCGGrbjY4T3GgCRr5aFSNWpjCLfkZ11mDv7ai43 KUvsWdZzIPwF0WpdUpfsdhnXG4unPNxhKnq7gJSgxIiKXszhpMGHVZM1 X-Gm-Gg: Acq92OHXfh+ZvyNspMHKy7yw5klH0Dv/1QsiVAbb9e0BuJ9y5tj42GznU34a/wQDKae 1NbEXd3qfblUBHZ/aXNVo46KqV3LGhdjU9huEpGnMxNjd/tWlfn+ZEBwYCIs1gtWNcSPEMrCntw o3ry6GnuRBSCbWYEK+D+7G6XV6FvjDVpPfUSECaREpxvigZIHL/6xhLdq4cdwv5qRewNWqJxlg1 +iJzSmPG6Is56LF0kLTDUylXcctmdiy/50eFYj0smV1cIer3FPzvvG4y69fWyXr1o3mvl/cavrV KaRKog5VUC4UuGSre7dd+9r9OdpwQzvNr72aAxsuufyekmkyRwER/Sk28RT504eCay54zkesYyO QXE1PqfCZD9aLmDTmGXGSnqPn5soP5ObA9di8ZqGgcTIWC5RqV1N1F0n/noxxVynNBxPoIOeD7h HYxYSWmflN/RYMt6JNaewaoYfycCo2qlB4+ls+YpILyrneE7DPnCr17z/CRTRp0Sa5K9eczEwfO GKDKvjmw8YD8xNE5jxtCVFibghuimAz5VmArPAd3xTh+LUk9rR05FFT5goSnB8StV21hOZgU3IQ EF4= X-Received: by 2002:a05:687c:22c3:10b0:43a:c6c1:e40d with SMTP id 586e51a60fabf-43ac6c1eebdmr2544946fac.16.1779207785504; Tue, 19 May 2026 09:23:05 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:32 -0600 Subject: [PATCH v9 30/40] target/mips: add Octeon SNOW3G COP2 helpers MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-30-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::33; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x33.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779208045438158500 Add helper support for the Octeon SNOW3G START and MORE selectors. This models the LFSR/FSM state, the hardware result window, and the shared HSH/SHA3/SNOW3G/ZUC register window used for state save and restore. The helpers preserve the shared-window mode so DMFC2/DMTC2 accesses to the aliased window return the active engine view. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Split SNOW3G selector operations into their own COP2 helper patch. - Replace generic selector dispatch with per-operation SNOW3G helpers. - Add matching helper.h declarations with the helper implementation. --- target/mips/helper.h | 2 + target/mips/tcg/octeon_crypto.c | 233 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 235 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index 3e6025b7de..056a9d3fc8 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -64,6 +64,8 @@ DEF_HELPER_2(octeon_cp2_mt_sha3_xordat17, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_sha3_startop, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_zuc_start, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_zuc_more, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_snow3g_start, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_snow3g_more, void, env, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index 673932ceba..ee4d33c24f 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -540,6 +540,229 @@ static bool octeon_zuc_is_shared_dmtc2_sel(uint32_t s= el) return false; } } +static const uint8_t octeon_snow3g_sr[256] =3D { + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, + 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, + 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, + 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, + 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, + 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, + 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, + 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, + 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, + 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, + 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, + 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, + 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, + 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, + 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, + 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, + 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16, +}; + +static const uint8_t octeon_snow3g_sq[256] =3D { + 0x25, 0x24, 0x73, 0x67, 0xd7, 0xae, 0x5c, 0x30, + 0xa4, 0xee, 0x6e, 0xcb, 0x7d, 0xb5, 0x82, 0xdb, + 0xe4, 0x8e, 0x48, 0x49, 0x4f, 0x5d, 0x6a, 0x78, + 0x70, 0x88, 0xe8, 0x5f, 0x5e, 0x84, 0x65, 0xe2, + 0xd8, 0xe9, 0xcc, 0xed, 0x40, 0x2f, 0x11, 0x28, + 0x57, 0xd2, 0xac, 0xe3, 0x4a, 0x15, 0x1b, 0xb9, + 0xb2, 0x80, 0x85, 0xa6, 0x2e, 0x02, 0x47, 0x29, + 0x07, 0x4b, 0x0e, 0xc1, 0x51, 0xaa, 0x89, 0xd4, + 0xca, 0x01, 0x46, 0xb3, 0xef, 0xdd, 0x44, 0x7b, + 0xc2, 0x7f, 0xbe, 0xc3, 0x9f, 0x20, 0x4c, 0x64, + 0x83, 0xa2, 0x68, 0x42, 0x13, 0xb4, 0x41, 0xcd, + 0xba, 0xc6, 0xbb, 0x6d, 0x4d, 0x71, 0x21, 0xf4, + 0x8d, 0xb0, 0xe5, 0x93, 0xfe, 0x8f, 0xe6, 0xcf, + 0x43, 0x45, 0x31, 0x22, 0x37, 0x36, 0x96, 0xfa, + 0xbc, 0x0f, 0x08, 0x52, 0x1d, 0x55, 0x1a, 0xc5, + 0x4e, 0x23, 0x69, 0x7a, 0x92, 0xff, 0x5b, 0x5a, + 0xeb, 0x9a, 0x1c, 0xa9, 0xd1, 0x7e, 0x0d, 0xfc, + 0x50, 0x8a, 0xb6, 0x62, 0xf5, 0x0a, 0xf8, 0xdc, + 0x03, 0x3c, 0x0c, 0x39, 0xf1, 0xb8, 0xf3, 0x3d, + 0xf2, 0xd5, 0x97, 0x66, 0x81, 0x32, 0xa0, 0x00, + 0x06, 0xce, 0xf6, 0xea, 0xb7, 0x17, 0xf7, 0x8c, + 0x79, 0xd6, 0xa7, 0xbf, 0x8b, 0x3f, 0x1f, 0x53, + 0x63, 0x75, 0x35, 0x2c, 0x60, 0xfd, 0x27, 0xd3, + 0x94, 0xa5, 0x7c, 0xa1, 0x05, 0x58, 0x2d, 0xbd, + 0xd9, 0xc7, 0xaf, 0x6b, 0x54, 0x0b, 0xe0, 0x38, + 0x04, 0xc8, 0x9d, 0xe7, 0x14, 0xb1, 0x87, 0x9c, + 0xdf, 0x6f, 0xf9, 0xda, 0x2a, 0xc4, 0x59, 0x16, + 0x74, 0x91, 0xab, 0x26, 0x61, 0x76, 0x34, 0x2b, + 0xad, 0x99, 0xfb, 0x72, 0xec, 0x33, 0x12, 0xde, + 0x98, 0x3b, 0xc0, 0x9b, 0x3e, 0x18, 0x10, 0x3a, + 0x56, 0xe1, 0x77, 0xc9, 0x1e, 0x9e, 0x95, 0xa3, + 0x90, 0x19, 0xa8, 0x6c, 0x09, 0xd0, 0xf0, 0x86, +}; + +static inline uint8_t octeon_snow3g_mulx(uint8_t v, uint8_t c) +{ + return (v & 0x80) ? ((v << 1) ^ c) : (v << 1); +} + +static uint8_t octeon_snow3g_mulxpow(uint8_t v, unsigned int n, uint8_t c) +{ + while (n-- > 0) { + v =3D octeon_snow3g_mulx(v, c); + } + return v; +} + +static inline uint32_t octeon_snow3g_pack32(uint8_t b0, uint8_t b1, + uint8_t b2, uint8_t b3) +{ + return ((uint32_t)b0 << 24) | ((uint32_t)b1 << 16) | + ((uint32_t)b2 << 8) | b3; +} + +static uint32_t octeon_snow3g_mulalpha(uint8_t c) +{ + return octeon_snow3g_pack32(octeon_snow3g_mulxpow(c, 23, 0xa9), + octeon_snow3g_mulxpow(c, 245, 0xa9), + octeon_snow3g_mulxpow(c, 48, 0xa9), + octeon_snow3g_mulxpow(c, 239, 0xa9)); +} + +static uint32_t octeon_snow3g_divalpha(uint8_t c) +{ + return octeon_snow3g_pack32(octeon_snow3g_mulxpow(c, 16, 0xa9), + octeon_snow3g_mulxpow(c, 39, 0xa9), + octeon_snow3g_mulxpow(c, 6, 0xa9), + octeon_snow3g_mulxpow(c, 64, 0xa9)); +} + +static uint32_t octeon_snow3g_s1(uint32_t w) +{ + uint8_t x0 =3D octeon_snow3g_sr[w >> 24]; + uint8_t x1 =3D octeon_snow3g_sr[(uint8_t)(w >> 16)]; + uint8_t x2 =3D octeon_snow3g_sr[(uint8_t)(w >> 8)]; + uint8_t x3 =3D octeon_snow3g_sr[(uint8_t)w]; + uint8_t r0 =3D octeon_snow3g_mulx(x0, 0x1b) ^ x1 ^ x2 ^ + octeon_snow3g_mulx(x3, 0x1b) ^ x3; + uint8_t r1 =3D octeon_snow3g_mulx(x0, 0x1b) ^ x0 ^ + octeon_snow3g_mulx(x1, 0x1b) ^ x2 ^ x3; + uint8_t r2 =3D x0 ^ octeon_snow3g_mulx(x1, 0x1b) ^ x1 ^ + octeon_snow3g_mulx(x2, 0x1b) ^ x3; + uint8_t r3 =3D x0 ^ x1 ^ octeon_snow3g_mulx(x2, 0x1b) ^ x2 ^ + octeon_snow3g_mulx(x3, 0x1b); + + return octeon_snow3g_pack32(r0, r1, r2, r3); +} + +static uint32_t octeon_snow3g_s2(uint32_t w) +{ + uint8_t x0 =3D octeon_snow3g_sq[w >> 24]; + uint8_t x1 =3D octeon_snow3g_sq[(uint8_t)(w >> 16)]; + uint8_t x2 =3D octeon_snow3g_sq[(uint8_t)(w >> 8)]; + uint8_t x3 =3D octeon_snow3g_sq[(uint8_t)w]; + uint8_t r0 =3D octeon_snow3g_mulx(x0, 0x69) ^ x1 ^ x2 ^ + octeon_snow3g_mulx(x3, 0x69) ^ x3; + uint8_t r1 =3D octeon_snow3g_mulx(x0, 0x69) ^ x0 ^ + octeon_snow3g_mulx(x1, 0x69) ^ x2 ^ x3; + uint8_t r2 =3D x0 ^ octeon_snow3g_mulx(x1, 0x69) ^ x1 ^ + octeon_snow3g_mulx(x2, 0x69) ^ x3; + uint8_t r3 =3D x0 ^ x1 ^ octeon_snow3g_mulx(x2, 0x69) ^ x2 ^ + octeon_snow3g_mulx(x3, 0x69); + + return octeon_snow3g_pack32(r0, r1, r2, r3); +} + +static uint32_t octeon_snow3g_clock_fsm(MIPSOcteonCryptoState *crypto) +{ + uint32_t f =3D (uint32_t)(crypto->snow3g_lfsr[15] + crypto->snow3g_fsm= [0]) ^ + crypto->snow3g_fsm[1]; + uint32_t r =3D (uint32_t)(crypto->snow3g_fsm[1] + + (crypto->snow3g_fsm[2] ^ crypto->snow3g_lfsr[5= ])); + + crypto->snow3g_fsm[2] =3D octeon_snow3g_s2(crypto->snow3g_fsm[1]); + crypto->snow3g_fsm[1] =3D octeon_snow3g_s1(crypto->snow3g_fsm[0]); + crypto->snow3g_fsm[0] =3D r; + return f; +} + +static void octeon_snow3g_clock_lfsr(MIPSOcteonCryptoState *crypto, + bool init_mode, uint32_t f) +{ + uint32_t s0 =3D crypto->snow3g_lfsr[0]; + uint32_t s11 =3D crypto->snow3g_lfsr[11]; + uint32_t v =3D (s0 << 8) ^ octeon_snow3g_mulalpha(s0 >> 24) ^ + crypto->snow3g_lfsr[2] ^ (s11 >> 8) ^ + octeon_snow3g_divalpha((uint8_t)s11); + int i; + + if (init_mode) { + v ^=3D f; + } + + for (i =3D 0; i < 15; i++) { + crypto->snow3g_lfsr[i] =3D crypto->snow3g_lfsr[i + 1]; + } + crypto->snow3g_lfsr[15] =3D v; +} + +static uint32_t octeon_snow3g_generate_word(MIPSOcteonCryptoState *crypto) +{ + uint32_t f =3D octeon_snow3g_clock_fsm(crypto); + uint32_t z =3D f ^ crypto->snow3g_lfsr[0]; + + octeon_snow3g_clock_lfsr(crypto, false, 0); + return z; +} + +static void octeon_snow3g_queue_result(MIPSOcteonCryptoState *crypto) +{ + uint32_t z0 =3D octeon_snow3g_generate_word(crypto); + uint32_t z1 =3D octeon_snow3g_generate_word(crypto); + + crypto->snow3g_result =3D ((uint64_t)z0 << 32) | z1; +} + +static void octeon_snow3g_start(MIPSOcteonCryptoState *crypto, uint64_t da= ta) +{ + int i; + + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SNOW3G); + for (i =3D 0; i < 7; i++) { + uint64_t pair =3D crypto->hsh_datw[i]; + + crypto->snow3g_lfsr[i * 2] =3D pair >> 32; + crypto->snow3g_lfsr[i * 2 + 1] =3D pair; + } + crypto->snow3g_lfsr[14] =3D data >> 32; + crypto->snow3g_lfsr[15] =3D data; + memset(crypto->snow3g_fsm, 0, sizeof(crypto->snow3g_fsm)); + + for (i =3D 0; i < 32; i++) { + uint32_t f =3D octeon_snow3g_clock_fsm(crypto); + + octeon_snow3g_clock_lfsr(crypto, true, f); + } + + (void)octeon_snow3g_clock_fsm(crypto); + octeon_snow3g_clock_lfsr(crypto, false, 0); + octeon_snow3g_queue_result(crypto); +} + +static void octeon_snow3g_more(MIPSOcteonCryptoState *crypto) +{ + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SNOW3G); + octeon_snow3g_queue_result(crypto); +} static void octeon_gfm_mul(const uint64_t x[2], const uint64_t y[2], uint16_t poly, uint64_t out[2]) { @@ -719,6 +942,16 @@ void helper_octeon_cp2_mt_gfm_xormul1(CPUMIPSState *en= v, uint64_t value) } crypto->gfm_xor0 =3D 0; } +void helper_octeon_cp2_mt_snow3g_start(CPUMIPSState *env, uint64_t value) +{ + octeon_snow3g_start(&env->octeon_crypto, value); +} + +void helper_octeon_cp2_mt_snow3g_more(CPUMIPSState *env, uint64_t value) +{ + (void)value; + octeon_snow3g_more(&env->octeon_crypto); +} void helper_octeon_cp2_mt_zuc_start(CPUMIPSState *env, uint64_t value) { octeon_zuc_start(&env->octeon_crypto, value); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207872; cv=none; d=zohomail.com; s=zohoarc; b=me0qwXtBE0csdk8uXz/Q8VxXM3jqJOaJ2hEtMiBSAVHQYup5Pr3c+bqid6rnDOnAqgQZroy7791KCwcviZ59yCpBdzfLQAfW9Z2y1V/a6wLiMZgRjZZ8G7c1UZEMXxOVntqQjY+cb7CdScT/6hRe8LD8brll0egKlVgGDvVgK4c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207872; 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=VHLIfK+38fqBZdETISwd7QkQU8tnCZw4bWsHAd0fwUg=; b=Euf/DFx7WtJZE6lj1m/f6K6xM0UqhGXx/sd1KEhotw76xOEFkd1gWxWZjp4aeh8He9K/uX94IEILZ3eMLloTIJ/mMdLfHljmiu04uQpErs7nwucZk9TgHDnOaIt1qgPrfTbI9x6VRR17NvWcrEv567DIKc/O2yWPvTHR64ozfXM= 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 1779207872898731.1316190946072; Tue, 19 May 2026 09:24:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDq-0006oN-Fd; Tue, 19 May 2026 12:23:10 -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 1wPNDp-0006o5-SK for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:09 -0400 Received: from mail-oa1-x30.google.com ([2001:4860:4864:20::30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDn-0000nj-Iz for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:09 -0400 Received: by mail-oa1-x30.google.com with SMTP id 586e51a60fabf-40946982a78so1162863fac.2 for ; Tue, 19 May 2026 09:23:07 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207786; x=1779812586; 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=VHLIfK+38fqBZdETISwd7QkQU8tnCZw4bWsHAd0fwUg=; b=RrZ6tHVwQaoE19qLOsRbpL1Lm6jWJ1ZOIgAT3bP4efN0O7rwIU1LB5CqMGREZcPe+M FU18uTCpQgFYf4n4CKvUgdrWy1sBr2aOKkCCtKeXk37zW5p74V6AH37x8BKIUA32I/rM sgnpwgbBXsNHRYfrq4S9djigpZLoRl/uGuxSrTyuBBgJQwvx7P4hBCOkGBi9S0eiwzs3 WxLCPR67B5/S7XpV8ClcVihMlAaa/RhznG0x7w8sK0AL7+yRajiRzkIfgleNzaze1AM+ UCj6Z1oth4Sb5j1B3Y2GDwrat2XHbnM5QJl3/KzFP6zlfzy89DW3FRnVkgYWULyXX4Wl Dmkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207786; x=1779812586; 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=VHLIfK+38fqBZdETISwd7QkQU8tnCZw4bWsHAd0fwUg=; b=RLs0UG00ci3dVGdx0lNGQsA575mAQsqT1P3C5X/BNJzW1PghoP15Wo8DOgqZy7oWRN QLwKV/s/WJPv/Z5RchvBArToVKQdxRA9kX0sx18XAa8OdBdtRCtuB0pZQQMMBR130fsC jGAzW4MDZWq+7IpsRqgFDkDhSo4SHEIXh63sX2fItRrHtiWouOZMW7mBAThPZx0tpqOR H8LJa+CQg/ZvXs78UEaCx3rc7bNlxbJTdr4vePGFVKUVBscCo5z4dW6TK2/atXTYAA38 GM7PCTUH1394mhxLCNoxnwETrJ/oSPPakobGsNSvgqMLiGDAN6VR5FP8qllDy5a3fVL8 ZcNQ== X-Gm-Message-State: AOJu0YzBifCSUi5Ovl9xFulSj5goGVXuC4F2o2h1GhUIwEsKZd4P3rAZ 5K2METkD3EP7Oy46KkOV7XiQ7ZLp+wrbVEp2nXEHmW9oMRwjCHZFzrUz X-Gm-Gg: Acq92OFOYDahLYYqUkX8JQOYX82WkIE/uBoX1M3GcsbHZQR9Jecwv3S2ta1Vagg7IXJ pwoNT9CllvVmEMUnHmpQ5aVxgS/Nx+uYIhtcyPwEb7iMiz38uCZrgr+a7D+rwou1DtLphCct+UT pkhC0HKmpTc1leLwU59DtUHMnF8Gv19LuwEhamNrto6bgFV7MsbyQJewsi/n+kE4dw6ndr8Hbrv pgDjjJGycwcZELp//yFkdWuXNUnm9myQrw9bNIf1hkwj5ZrOTnYb8Z+aTAzQUAuQINFkLnjNXD9 q+I5MsLsH8lOE2YCj0qjtIaxcTE8VE/Dc4yI8UJvOCU/eilsGbXXXKYEAYwZ77OV0G8e21Ys+IX 6VfY9gZyt3w3R5LeRBw7NgQkaElzFK87G8qRioN0K5ltv83hY1O1XPv2OgoN7KMuiYUaXp9H/yP F2XhCVeCqrrZMOj1NewwYGuXZAdDwEYXN47zA5MLaN3eth38PyRRm3TtPip3f/uBRrCqSXg9H7w 0+KQ5PHwLPWTCJYSz9+ZzpGJFSY9OaoC/umAF/rofIFPWnooOPlAbs7hTMFSrOZzZAT X-Received: by 2002:a05:6870:ff04:b0:42f:fc34:78bd with SMTP id 586e51a60fabf-43a2de7ba6cmr12120552fac.33.1779207786435; Tue, 19 May 2026 09:23:06 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:33 -0600 Subject: [PATCH v9 31/40] target/mips: add Octeon AES COP2 helpers MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-31-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::30; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x30.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207873478158500 Add helper support for the Octeon AES operation selectors. The direct register-transfer selectors are handled later by the explicit decode patch; this patch adds the ECB/CBC encrypt and decrypt operations that consume the AES input, key, IV, and key-length state. The AESRESINP direct write path keeps a separate input latch and readback view. Later translator comments document that split where the direct TCG stores are emitted. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Split AES operation selectors into their own COP2 helper patch. - Replace generic selector dispatch with per-operation AES helpers. - Add matching helper.h declarations with the helper implementation. --- target/mips/cpu.h | 5 ++ target/mips/helper.h | 4 ++ target/mips/tcg/octeon_crypto.c | 141 ++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 150 insertions(+) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index b57a7a0584..801893b67f 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -556,6 +556,11 @@ typedef struct MIPSOcteonCryptoState { uint64_t sha3_state[25]; uint64_t aes_iv[2]; uint64_t aes_key[4]; + /* + * AESRESINP is one architectural selector bank. Keep a separate input + * latch so operation selectors can consume a pending block while DMFC2 + * reads expose the latest result/readback value. + */ uint64_t aes_result[2]; uint64_t aes_input[2]; uint64_t gfm_mul[2]; diff --git a/target/mips/helper.h b/target/mips/helper.h index 056a9d3fc8..d8ba1f19dd 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -66,6 +66,10 @@ DEF_HELPER_2(octeon_cp2_mt_zuc_start, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_zuc_more, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_snow3g_start, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_snow3g_more, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_aes_enc_cbc1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_aes_enc1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_aes_dec_cbc1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_aes_dec1, void, env, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index ee4d33c24f..55d8818ee2 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -763,6 +763,116 @@ static void octeon_snow3g_more(MIPSOcteonCryptoState = *crypto) octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SNOW3G); octeon_snow3g_queue_result(crypto); } +static int octeon_aes_key_bits(const MIPSOcteonCryptoState *crypto) +{ + enum { + OCTEON_AES_KEYLEN_128 =3D 1, + OCTEON_AES_KEYLEN_192 =3D 2, + OCTEON_AES_KEYLEN_256 =3D 3, + }; + + switch (crypto->aes_keylen) { + case OCTEON_AES_KEYLEN_128: + return 128; + case OCTEON_AES_KEYLEN_192: + return 192; + case OCTEON_AES_KEYLEN_256: + return 256; + default: + return 0; + } +} +static void octeon_aes_load_key(const MIPSOcteonCryptoState *crypto, + uint8_t *key, size_t keylen) +{ + stq_be_p(key, crypto->aes_key[0]); + stq_be_p(key + 8, crypto->aes_key[1]); + if (keylen > 16) { + stq_be_p(key + 16, crypto->aes_key[2]); + } + if (keylen > 24) { + stq_be_p(key + 24, crypto->aes_key[3]); + } +} + +static void octeon_aes_load_block(const uint64_t regs[2], uint8_t *block) +{ + stq_be_p(block, regs[0]); + stq_be_p(block + 8, regs[1]); +} + +static void octeon_aes_store_block(uint64_t regs[2], const uint8_t *block) +{ + regs[0] =3D ldq_be_p(block); + regs[1] =3D ldq_be_p(block + 8); +} +static void octeon_aes_encrypt_common(MIPSOcteonCryptoState *crypto, bool = cbc) +{ + AES_KEY key; + uint8_t in[16]; + uint8_t out[16]; + uint8_t iv[16]; + uint8_t raw_key[32] =3D {}; + int bits =3D octeon_aes_key_bits(crypto); + + if (!bits) { + return; + } + + octeon_aes_load_key(crypto, raw_key, bits / 8); + octeon_aes_load_block(crypto->aes_input, in); + if (cbc) { + int i; + + octeon_aes_load_block(crypto->aes_iv, iv); + for (i =3D 0; i < sizeof(in); i++) { + in[i] ^=3D iv[i]; + } + } + + AES_set_encrypt_key(raw_key, bits, &key); + AES_encrypt(in, out, &key); + octeon_aes_store_block(crypto->aes_result, out); + if (cbc) { + octeon_aes_store_block(crypto->aes_iv, out); + } +} + +static void octeon_aes_decrypt_common(MIPSOcteonCryptoState *crypto, bool = cbc) +{ + AES_KEY key; + uint8_t in[16]; + uint8_t out[16]; + uint8_t iv[16]; + uint8_t next_iv[16]; + uint8_t raw_key[32] =3D {}; + int bits =3D octeon_aes_key_bits(crypto); + int i; + + if (!bits) { + return; + } + + octeon_aes_load_key(crypto, raw_key, bits / 8); + octeon_aes_load_block(crypto->aes_input, in); + if (cbc) { + memcpy(next_iv, in, sizeof(next_iv)); + octeon_aes_load_block(crypto->aes_iv, iv); + } + + AES_set_decrypt_key(raw_key, bits, &key); + AES_decrypt(in, out, &key); + if (cbc) { + for (i =3D 0; i < sizeof(out); i++) { + out[i] ^=3D iv[i]; + } + } + + octeon_aes_store_block(crypto->aes_result, out); + if (cbc) { + octeon_aes_store_block(crypto->aes_iv, next_iv); + } +} static void octeon_gfm_mul(const uint64_t x[2], const uint64_t y[2], uint16_t poly, uint64_t out[2]) { @@ -919,6 +1029,37 @@ void helper_octeon_cp2_mt_sha3_startop(CPUMIPSState *= env, uint64_t value) octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA3); octeon_sha3_permute(crypto); } +void helper_octeon_cp2_mt_aes_enc_cbc1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->aes_input[1] =3D value; + octeon_aes_encrypt_common(crypto, true); +} + +void helper_octeon_cp2_mt_aes_enc1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->aes_input[1] =3D value; + octeon_aes_encrypt_common(crypto, false); +} + +void helper_octeon_cp2_mt_aes_dec_cbc1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->aes_input[1] =3D value; + octeon_aes_decrypt_common(crypto, true); +} + +void helper_octeon_cp2_mt_aes_dec1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->aes_input[1] =3D value; + octeon_aes_decrypt_common(crypto, false); +} void helper_octeon_cp2_mt_gfm_xormul1_reflect(CPUMIPSState *env, uint64_t value) { --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779208059; cv=none; d=zohomail.com; s=zohoarc; b=SZK3nEo96CV6PEMJTkLub/ZATSqVLvzL8I0v9rJAgQjDn4zbwSOaEpUt5e1TlIwppr/5o0+tJuzmwQYfQ3Y9HwtU6MFvNJVyQFgpNTU+by8MxDkVnzUEkO5HrkFkO3BPZZDB4/nUMV3gh6Ay9VaLbcrr9bQ5psfpB4NJXwX+7wk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779208059; 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=evbNxhCtg9xYMHfeUJZnoO+ymh7Qiu1fHqdZXQRYFrE=; b=lPeLOy8JY4y+eYM48moW0MN2+bH9yp1KtllI+RLzAD5zwI4WgBAJ0iWH29tIAHPc8OTe6Ox7XDDbCg66SxtRCZCttH0eJJf6hzORiM9fY9jvh+fSzYT7/QR+H3xkLZ7ZIpYE2V2I8Tb4CmiDte4I3akaUx8UH5Jgu7hICNyvChI= 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 177920805953274.68958916475503; Tue, 19 May 2026 09:27:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDs-0006qb-H4; Tue, 19 May 2026 12:23:12 -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 1wPNDq-0006oP-Fe for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:10 -0400 Received: from mail-ot1-x32e.google.com ([2607:f8b0:4864:20::32e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDo-0000o6-Iu for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:10 -0400 Received: by mail-ot1-x32e.google.com with SMTP id 46e09a7af769-7e568ab0bc5so4273235a34.0 for ; Tue, 19 May 2026 09:23:08 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207787; x=1779812587; 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=evbNxhCtg9xYMHfeUJZnoO+ymh7Qiu1fHqdZXQRYFrE=; b=NWh/IPdOVJwliLVk0odlZ/TqPA6ogMLXQym/ey19a0fGjbikcoWkeM81TRYu6wfpAj 21A05UjPoYVsOGUgaf71IM6ZvY27yPdR4sR/3WTBUA3fpznN8A6PTodmHbxUxdVXnZ7u wfWCiVfqGOSv7qhQUdCyoDl3BuooMALTo5tTyQYI/MrkM3ph9ib7u6FHkMWB9m8qyxxj Tzu3zof97+MawHoqvtH1u/U2SpAx7A7SIomKVdwLeP6zDr19pLDx1PWzXCkxZKqcKCG6 TRWBWjpGi1aS2viVHuIGus9cCGiYDJZcP4bBVOxyxUrxFQXvhockwGh7y3v3nfo/1+z2 9ZPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207787; x=1779812587; 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=evbNxhCtg9xYMHfeUJZnoO+ymh7Qiu1fHqdZXQRYFrE=; b=hCVjOt0i+k8a6ft6Rh11jd/v/ZQQnCTyuh+7r+I8VxmXYPghoTJOC3SMExMLJNj7D1 QDO3iI40OEfthXFW+HujkixVG9Q6Tn+V7LmncckyTktvJ+nfQY6zBBnhS9R3ViLsanWU RTuIfxfu5Ykv3iXlwlyUsEmg/KNek53Y4+0b+lFEAPYfBZgBOwqTfMocN9WFZsA4N8WC omKppsKmTwZ0SRfArcTlHiVPq9Fwq+O0sfuhBGV5v444iwETjxJPKwyvxF5tmsGA/wIN vosyhsv1ONJLQCJoIa4JeWr1BUzlTGHBikdlrMr9jdf9a3Xx1jhknpHtOYchYWUW6nSh uXzQ== X-Gm-Message-State: AOJu0YxexbY/qUNSEx8mOiaIQwR7TZjVg5AL2vtsW1cx13NVHUDAYLrd 029dBbcwSgNTmS5hhecvvZPqq/ms3y1ul8F80Hc7yiTZtM5bLYURXB3z X-Gm-Gg: Acq92OFribWMWbqdyYBD1aydEhVABsD132qBd+7Hk7QTtZXJgdqAxFWGV8I1M/pv4YW Pl/cNGZHNgmjc00w85gAxRAc+jqNlQSujo78MxwTODLvt4KuQ4QpzZ2Hm9LCkC5yv/pHXFVEKHm VgcaQH8XKmRS4oSdMdCEJvFOH7lW8kS8xHATKH+/jpXAOJbvYxzj4rOghJ0ox5qYoUfzxM+FWMe e2RzvAQvvyCf0FwI5QzpLRgTRZdNCIrUqQheiwuYODf1VenPWZGAavcxKtZBY73CUrXv7byEXsf f6aHfuMHXHb0a9fmwfMYmnnCHyLYSs/Gq8ykMSrEEQwpjcrq06KbbQCrd7S1TXTXHSsUZfuaV8d DkCobF1EHkdd43JmsQw1UF8YG0UvVuDHfrNbhlpJRjRIrDAhRafMjx7ZfyFheZ4RCbNwrqNHXk2 B2owDgWIrHsYVlu8YgZftSTRRnUUCHTg5ql/Qqfcmof93CvFKNNTZ+fTp7M9vwCfkMlwYR8aXZm Efbi9r9wnUOPtD1eCDaQHFXzLHJx6Vtehb/wl8jWCGewT67gQhBJz/zYSxfLjK2Unhw X-Received: by 2002:a05:6820:13a:b0:696:72e9:f92e with SMTP id 006d021491bc7-69b87f3c306mr9917165eaf.10.1779207787392; Tue, 19 May 2026 09:23:07 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:34 -0600 Subject: [PATCH v9 32/40] target/mips: add Octeon SMS4 COP2 helpers MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-32-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::32e; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x32e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779208061609158500 Add helper support for the Octeon SMS4 operation selectors. SMS4 reuses the AES RESINP, IV, and key banks, so the helpers share the existing AES state while implementing the SMS4 ECB/CBC encrypt and decrypt operations. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Split SMS4 operation selectors into their own COP2 helper patch. - Replace generic selector dispatch with per-operation SMS4 helpers. - Add matching helper.h declarations with the helper implementation. Changes v1 -> v2: - Add selector dispatch updates in octeon_translate.c after moving COP2 decode out of translate.c. (suggested by Philippe Mathieu-Daud=C3=A9) Changes v5 -> v6: - Use RESINP wording for the SMS4 shared selector aliases. --- target/mips/helper.h | 4 ++ target/mips/tcg/octeon_crypto.c | 121 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 125 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index d8ba1f19dd..d6231917ed 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -70,6 +70,10 @@ DEF_HELPER_2(octeon_cp2_mt_aes_enc_cbc1, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_aes_enc1, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_aes_dec_cbc1, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_aes_dec1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sms4_enc_cbc1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sms4_enc1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sms4_dec_cbc1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_sms4_dec1, void, env, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index 55d8818ee2..296a507ba1 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -782,6 +782,56 @@ static int octeon_aes_key_bits(const MIPSOcteonCryptoS= tate *crypto) return 0; } } +static inline uint32_t octeon_sms4_t(uint32_t x) +{ + x =3D sm4_subword(x); + return x ^ rol32(x, 2) ^ rol32(x, 10) ^ + rol32(x, 18) ^ rol32(x, 24); +} + +static inline uint32_t octeon_sms4_t_key(uint32_t x) +{ + x =3D sm4_subword(x); + return x ^ rol32(x, 13) ^ rol32(x, 23); +} + +static void octeon_sms4_expand_key(const uint8_t *key, uint32_t round_keys= [32]) +{ + static const uint32_t fk[4] =3D { + 0xa3b1bac6U, 0x56aa3350U, 0x677d9197U, 0xb27022dcU, + }; + uint32_t k[36]; + + for (int i =3D 0; i < 4; i++) { + k[i] =3D ldl_be_p(key + i * 4) ^ fk[i]; + } + for (int i =3D 0; i < 32; i++) { + k[i + 4] =3D k[i] ^ octeon_sms4_t_key(k[i + 1] ^ k[i + 2] ^ + k[i + 3] ^ sm4_ck[i]); + round_keys[i] =3D k[i + 4]; + } +} + +static void octeon_sms4_crypt_block(const uint8_t *in, uint8_t *out, + const uint32_t round_keys[32], + bool encrypt) +{ + uint32_t x[36]; + + for (int i =3D 0; i < 4; i++) { + x[i] =3D ldl_be_p(in + i * 4); + } + for (int i =3D 0; i < 32; i++) { + uint32_t rk =3D round_keys[encrypt ? i : 31 - i]; + + x[i + 4] =3D x[i] ^ octeon_sms4_t(x[i + 1] ^ x[i + 2] ^ + x[i + 3] ^ rk); + } + stl_be_p(out, x[35]); + stl_be_p(out + 4, x[34]); + stl_be_p(out + 8, x[33]); + stl_be_p(out + 12, x[32]); +} static void octeon_aes_load_key(const MIPSOcteonCryptoState *crypto, uint8_t *key, size_t keylen) { @@ -806,6 +856,46 @@ static void octeon_aes_store_block(uint64_t regs[2], c= onst uint8_t *block) regs[0] =3D ldq_be_p(block); regs[1] =3D ldq_be_p(block + 8); } +static void octeon_sms4_crypt_common(MIPSOcteonCryptoState *crypto, + bool encrypt, bool cbc) +{ + uint8_t key[16]; + uint8_t in[16]; + uint8_t out[16]; + uint8_t iv[16]; + uint8_t next_iv[16]; + uint32_t round_keys[32]; + + /* + * SMS4 aliases the AES state onto the RESINP, IV, and KEY banks, + * with only the operation selectors remaining distinct. + */ + octeon_aes_load_key(crypto, key, sizeof(key)); + octeon_aes_load_block(crypto->aes_input, in); + if (cbc) { + octeon_aes_load_block(crypto->aes_iv, iv); + if (encrypt) { + for (int i =3D 0; i < sizeof(in); i++) { + in[i] ^=3D iv[i]; + } + } else { + memcpy(next_iv, in, sizeof(next_iv)); + } + } + + octeon_sms4_expand_key(key, round_keys); + octeon_sms4_crypt_block(in, out, round_keys, encrypt); + if (cbc && !encrypt) { + for (int i =3D 0; i < sizeof(out); i++) { + out[i] ^=3D iv[i]; + } + } + + octeon_aes_store_block(crypto->aes_result, out); + if (cbc) { + octeon_aes_store_block(crypto->aes_iv, encrypt ? out : next_iv); + } +} static void octeon_aes_encrypt_common(MIPSOcteonCryptoState *crypto, bool = cbc) { AES_KEY key; @@ -1083,6 +1173,37 @@ void helper_octeon_cp2_mt_gfm_xormul1(CPUMIPSState *= env, uint64_t value) } crypto->gfm_xor0 =3D 0; } +void helper_octeon_cp2_mt_sms4_enc_cbc1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->aes_input[1] =3D value; + octeon_sms4_crypt_common(crypto, true, true); +} + +void helper_octeon_cp2_mt_sms4_enc1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->aes_input[1] =3D value; + octeon_sms4_crypt_common(crypto, true, false); +} + +void helper_octeon_cp2_mt_sms4_dec_cbc1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->aes_input[1] =3D value; + octeon_sms4_crypt_common(crypto, false, true); +} + +void helper_octeon_cp2_mt_sms4_dec1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->aes_input[1] =3D value; + octeon_sms4_crypt_common(crypto, false, false); +} void helper_octeon_cp2_mt_snow3g_start(CPUMIPSState *env, uint64_t value) { octeon_snow3g_start(&env->octeon_crypto, value); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207954; cv=none; d=zohomail.com; s=zohoarc; b=FsXMZIsVs0i6Dd0cZQ+aeyiBHmg8JIl1PU7JDx0KrFRaDRmpaCQ9mb6k9jLRIMyF1JWeD8/qr6RTXbmFYrmMfGEHexiTZOSgyUGOC35JtY2lOFf8gEFDVWnW66GISqRWzMOsO3llFvuiS9XO9SvH+I7YubHFAZwMvICxN/GboJA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207954; 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=bd4/C1FBeip0UT0gpLY+cA8yRgGclXlm5jiEni9lj1Y=; b=UJFum7LI5kp/en5/Kid9hFZHwsD1tlhKvO9k57GijXA86VRFcyv+0MNsuUhP+o7UqM4ph8rzWBATKe7ASoSgPo8mOA1pnIdUGPX5aS8rupZ47j3Y1KFkrvtQuyjhMSrMKcu1D7alE1l45qXFBwoPcw90G6rrELkiD7eVip+fJwY= 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 1779207954156669.7263005365814; Tue, 19 May 2026 09:25:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDw-0006wt-8g; Tue, 19 May 2026 12:23:16 -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 1wPNDs-0006r6-KT for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:12 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDp-0000oL-Kv for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:12 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-40423dbe98bso1809781fac.2 for ; Tue, 19 May 2026 09:23:09 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207788; x=1779812588; 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=bd4/C1FBeip0UT0gpLY+cA8yRgGclXlm5jiEni9lj1Y=; b=QBFCkuarB43STitYYLwSe0z6InRyCyuvNMxilRBxMsF5owheuasuprpAc3wwd/uZEF zt5idyq43FyKhxoIg7vV3T4nkisFHZfi6/lJGdIwxz0BV0HQ/B5WmfUQNSmunTQQN7Up hIS59TFgAphAgh7AteKCD+D/ThHw3KRfFPG8II1ElAjU5h5U3M7bt97fsKPY1QTCClCk 0zufFCOxBMgFEDbggnYQWiMyY3FCme7y4lQFw3ddj7qVAUblTWo4nOhzAdgTCdMqk2B9 idZKCpLo7h5KGPjPxfFnBtDFN9XJm/5JuSw2AL3vS4XaWTemqFHLqf7SwyulrARD6WmN 1efw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207788; x=1779812588; 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=bd4/C1FBeip0UT0gpLY+cA8yRgGclXlm5jiEni9lj1Y=; b=NDXC2R3pzO0MJnhrSqOe4y6CBUvft87K3hS1Hue2DtqW+43Z+jICWZosChi15bVzQn CAuv9iPZUKjn9o3FQRWhIkJu4i4Hbd44f8RxtPxskJm1KzsEkC2ZtAsGzLI6hc9SMmW1 HLoSRehw14LSbFG8eFeMzDyWoXl+zQPsprXUIUIJgnHik2NLr2gDKEq0m3xxmAcYi2NA RSFH6LBY9gtqPXfyXpv8PedBA7VC+7lPu+WhA4p4YUUDOu+7k9CNV4amA3fKoMjGAkhq VRkUa12jkJlT54W3qC2KJ1BnzpBNHSx0DzlD9XklRe9h1vIHgs5r2xExCJpcM5DqP0cV jjFQ== X-Gm-Message-State: AOJu0YzdfiMBBVB/fce6Q321xv1gMCJJ7ZPo3Pqhn9CLzIlTUCsmMkE2 y6h2tfutSNJcprwBr5xDDAIjQmc4vRqncmLLfOF1GvE5nbTAG0vfPYJd X-Gm-Gg: Acq92OHyz19GNb2XlZ2HxzyzeSBchbEhke36A+p6cjjJAsgUDtpbm43yKTsMzP3Adgx 8OJVoaPzMl7dfN3U9/qIjQHZB5R0fvy1wA8GOL/G637iBGMy6dG2XEmpF5Sr32+CL4l2UkiydAi uitTNIB76bbeT9xz6J9Gi/FKZlioHC6irSTXQY1ICfzogMMUsAB1OA6X1KG4ip/fIdDJdh08vcF 27WRYhtHnJ4FIxBKDVKBBfMsfOpp2H0FWpBPCe/Kxa5b6ZHxP/qc4EuELHGQ6kBdxwjk8ETBGi3 FVcsaUtxGNZVqGf//0pT3eK834OWOftQks1uZSkOmHcdM9fD3WQZkhieYbWQzAbPCfRsdxym3P9 iPF/IsnMmU9ZX2HV3uhjhdnrzWlmbVVqy4pnOg28eSS3Sm3gPPi2niuaQeui8F+fjoWvR7wSzIo b/Sa2SxCUBS2uztz3Rol+GE0sCaD1YCmKm1pejICTiYrpHG/DVwxYzVnxTf6A1Uw/TvtsYpZAcx dpzFMkG4A+7KZ6BTaVRpC07zNfGtFe0iccae1hnzbXl4XMsclHeRoE4tOxVfuKcSVCa X-Received: by 2002:a05:6870:218f:b0:41b:c797:5953 with SMTP id 586e51a60fabf-43a2dd17b58mr12556725fac.24.1779207788318; Tue, 19 May 2026 09:23:08 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:35 -0600 Subject: [PATCH v9 33/40] target/mips: add Octeon 3DES and KASUMI COP2 helpers MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-33-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::31; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x31.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207954463158500 Add helper support for the Octeon 3DES and KASUMI operation selectors. The 3DES helpers implement ECB and CBC encrypt/decrypt over the shared 3DES key, IV, and result bank. KASUMI reuses the same register bank and adds its own encrypt selectors. This keeps the operation selectors in helper code while leaving simple key, IV, and result register transfers to the later explicit selector decode patch. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Split 3DES/KASUMI operation selectors into their own COP2 helper patch. - Replace generic selector dispatch with per-operation 3DES/KASUMI helpers. - Add matching helper.h declarations with the helper implementation. --- target/mips/helper.h | 6 + target/mips/tcg/octeon_crypto.c | 456 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 462 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index d6231917ed..9a13f00de8 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -74,6 +74,12 @@ DEF_HELPER_2(octeon_cp2_mt_sms4_enc_cbc1, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_sms4_enc1, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_sms4_dec_cbc1, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_sms4_dec1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_des3_enc_cbc, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_kas_enc_cbc, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_des3_enc, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_kas_enc, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_des3_dec_cbc, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_des3_dec, void, env, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index 296a507ba1..851a3cbdea 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -832,6 +832,433 @@ static void octeon_sms4_crypt_block(const uint8_t *in= , uint8_t *out, stl_be_p(out + 8, x[33]); stl_be_p(out + 12, x[32]); } +static const uint8_t octeon_des_ip[64] =3D { + 58, 50, 42, 34, 26, 18, 10, 2, + 60, 52, 44, 36, 28, 20, 12, 4, + 62, 54, 46, 38, 30, 22, 14, 6, + 64, 56, 48, 40, 32, 24, 16, 8, + 57, 49, 41, 33, 25, 17, 9, 1, + 59, 51, 43, 35, 27, 19, 11, 3, + 61, 53, 45, 37, 29, 21, 13, 5, + 63, 55, 47, 39, 31, 23, 15, 7, +}; + +static const uint8_t octeon_des_fp[64] =3D { + 40, 8, 48, 16, 56, 24, 64, 32, + 39, 7, 47, 15, 55, 23, 63, 31, + 38, 6, 46, 14, 54, 22, 62, 30, + 37, 5, 45, 13, 53, 21, 61, 29, + 36, 4, 44, 12, 52, 20, 60, 28, + 35, 3, 43, 11, 51, 19, 59, 27, + 34, 2, 42, 10, 50, 18, 58, 26, + 33, 1, 41, 9, 49, 17, 57, 25, +}; + +static const uint8_t octeon_des_e[48] =3D { + 32, 1, 2, 3, 4, 5, + 4, 5, 6, 7, 8, 9, + 8, 9, 10, 11, 12, 13, + 12, 13, 14, 15, 16, 17, + 16, 17, 18, 19, 20, 21, + 20, 21, 22, 23, 24, 25, + 24, 25, 26, 27, 28, 29, + 28, 29, 30, 31, 32, 1, +}; + +static const uint8_t octeon_des_p[32] =3D { + 16, 7, 20, 21, 29, 12, 28, 17, + 1, 15, 23, 26, 5, 18, 31, 10, + 2, 8, 24, 14, 32, 27, 3, 9, + 19, 13, 30, 6, 22, 11, 4, 25, +}; + +static const uint8_t octeon_des_pc1[56] =3D { + 57, 49, 41, 33, 25, 17, 9, + 1, 58, 50, 42, 34, 26, 18, + 10, 2, 59, 51, 43, 35, 27, + 19, 11, 3, 60, 52, 44, 36, + 63, 55, 47, 39, 31, 23, 15, + 7, 62, 54, 46, 38, 30, 22, + 14, 6, 61, 53, 45, 37, 29, + 21, 13, 5, 28, 20, 12, 4, +}; + +static const uint8_t octeon_des_pc2[48] =3D { + 14, 17, 11, 24, 1, 5, + 3, 28, 15, 6, 21, 10, + 23, 19, 12, 4, 26, 8, + 16, 7, 27, 20, 13, 2, + 41, 52, 31, 37, 47, 55, + 30, 40, 51, 45, 33, 48, + 44, 49, 39, 56, 34, 53, + 46, 42, 50, 36, 29, 32, +}; + +static const uint8_t octeon_des_rotations[16] =3D { + 1, 1, 2, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 1, +}; + +static const uint8_t octeon_des_sboxes[8][64] =3D { + { + 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, + 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, + 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, + 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13, + }, + { + 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, + 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, + 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, + 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9, + }, + { + 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, + 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, + 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, + 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12, + }, + { + 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, + 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, + 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, + 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14, + }, + { + 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, + 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, + 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, + 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3, + }, + { + 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, + 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, + 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, + 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13, + }, + { + 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, + 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, + 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, + 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12, + }, + { + 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, + 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, + 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, + 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11, + }, +}; + +static const uint8_t octeon_kasumi_s7[128] =3D { + 54, 50, 62, 56, 22, 34, 94, 96, 38, 6, 63, 93, 2, 18, + 123, 33, 55, 113, 39, 114, 21, 67, 65, 12, 47, 73, 46, 27, + 25, 111, 124, 81, 53, 9, 121, 79, 52, 60, 58, 48, 101, 127, + 40, 120, 104, 70, 71, 43, 20, 122, 72, 61, 23, 109, 13, 100, + 77, 1, 16, 7, 82, 10, 105, 98, 117, 116, 76, 11, 89, 106, + 0, 125, 118, 99, 86, 69, 30, 57, 126, 87, 112, 51, 17, 5, + 95, 14, 90, 84, 91, 8, 35, 103, 32, 97, 28, 66, 102, 31, + 26, 45, 75, 4, 85, 92, 37, 74, 80, 49, 68, 29, 115, 44, + 64, 107, 108, 24, 110, 83, 36, 78, 42, 19, 15, 41, 88, 119, + 59, 3, +}; + +static const uint16_t octeon_kasumi_s9[512] =3D { + 167, 239, 161, 379, 391, 334, 9, 338, 38, 226, 48, 358, 452, 385, + 90, 397, 183, 253, 147, 331, 415, 340, 51, 362, 306, 500, 262, 82, + 216, 159, 356, 177, 175, 241, 489, 37, 206, 17, 0, 333, 44, 254, + 378, 58, 143, 220, 81, 400, 95, 3, 315, 245, 54, 235, 218, 405, + 472, 264, 172, 494, 371, 290, 399, 76, 165, 197, 395, 121, 257, 480, + 423, 212, 240, 28, 462, 176, 406, 507, 288, 223, 501, 407, 249, 265, + 89, 186, 221, 428, 164, 74, 440, 196, 458, 421, 350, 163, 232, 158, + 134, 354, 13, 250, 491, 142, 191, 69, 193, 425, 152, 227, 366, 135, + 344, 300, 276, 242, 437, 320, 113, 278, 11, 243, 87, 317, 36, 93, + 496, 27, 487, 446, 482, 41, 68, 156, 457, 131, 326, 403, 339, 20, + 39, 115, 442, 124, 475, 384, 508, 53, 112, 170, 479, 151, 126, 169, + 73, 268, 279, 321, 168, 364, 363, 292, 46, 499, 393, 327, 324, 24, + 456, 267, 157, 460, 488, 426, 309, 229, 439, 506, 208, 271, 349, 401, + 434, 236, 16, 209, 359, 52, 56, 120, 199, 277, 465, 416, 252, 287, + 246, 6, 83, 305, 420, 345, 153, 502, 65, 61, 244, 282, 173, 222, + 418, 67, 386, 368, 261, 101, 476, 291, 195, 430, 49, 79, 166, 330, + 280, 383, 373, 128, 382, 408, 155, 495, 367, 388, 274, 107, 459, 417, + 62, 454, 132, 225, 203, 316, 234, 14, 301, 91, 503, 286, 424, 211, + 347, 307, 140, 374, 35, 103, 125, 427, 19, 214, 453, 146, 498, 314, + 444, 230, 256, 329, 198, 285, 50, 116, 78, 410, 10, 205, 510, 171, + 231, 45, 139, 467, 29, 86, 505, 32, 72, 26, 342, 150, 313, 490, + 431, 238, 411, 325, 149, 473, 40, 119, 174, 355, 185, 233, 389, 71, + 448, 273, 372, 55, 110, 178, 322, 12, 469, 392, 369, 190, 1, 109, + 375, 137, 181, 88, 75, 308, 260, 484, 98, 272, 370, 275, 412, 111, + 336, 318, 4, 504, 492, 259, 304, 77, 337, 435, 21, 357, 303, 332, + 483, 18, 47, 85, 25, 497, 474, 289, 100, 269, 296, 478, 270, 106, + 31, 104, 433, 84, 414, 486, 394, 96, 99, 154, 511, 148, 413, 361, + 409, 255, 162, 215, 302, 201, 266, 351, 343, 144, 441, 365, 108, 298, + 251, 34, 182, 509, 138, 210, 335, 133, 311, 352, 328, 141, 396, 346, + 123, 319, 450, 281, 429, 228, 443, 481, 92, 404, 485, 422, 248, 297, + 23, 213, 130, 466, 22, 217, 283, 70, 294, 360, 419, 127, 312, 377, + 7, 468, 194, 2, 117, 295, 463, 258, 224, 447, 247, 187, 80, 398, + 284, 353, 105, 390, 299, 471, 470, 184, 57, 200, 348, 63, 204, 188, + 33, 451, 97, 30, 310, 219, 94, 160, 129, 493, 64, 179, 263, 102, + 189, 207, 114, 402, 438, 477, 387, 122, 192, 42, 381, 5, 145, 118, + 180, 449, 293, 323, 136, 380, 43, 66, 60, 455, 341, 445, 202, 432, + 8, 237, 15, 376, 436, 464, 59, 461, +}; + +static const uint16_t octeon_kasumi_constants[8] =3D { + 0x0123, 0x4567, 0x89ab, 0xcdef, 0xfedc, 0xba98, 0x7654, 0x3210, +}; + +typedef struct OcteonKasumiSubkeys { + uint16_t kli1[8]; + uint16_t kli2[8]; + uint16_t koi1[8]; + uint16_t koi2[8]; + uint16_t koi3[8]; + uint16_t kii1[8]; + uint16_t kii2[8]; + uint16_t kii3[8]; +} OcteonKasumiSubkeys; + +static uint64_t octeon_des_permute(uint64_t input, const uint8_t *table, + size_t output_bits, size_t input_bits) +{ + uint64_t out =3D 0; + + for (size_t i =3D 0; i < output_bits; i++) { + unsigned src =3D table[i] - 1; + + out =3D (out << 1) | ((input >> (input_bits - 1 - src)) & 1); + } + return out; +} + +static uint32_t octeon_des_rotate28(uint32_t v, unsigned shift) +{ + return ((v << shift) | (v >> (28 - shift))) & 0x0fffffffU; +} + +static void octeon_des_expand_subkeys(uint64_t key, uint64_t subkeys[16]) +{ + uint64_t permuted =3D octeon_des_permute(key, octeon_des_pc1, + ARRAY_SIZE(octeon_des_pc1), 64); + uint32_t c =3D (permuted >> 28) & 0x0fffffffU; + uint32_t d =3D permuted & 0x0fffffffU; + + for (int i =3D 0; i < 16; i++) { + c =3D octeon_des_rotate28(c, octeon_des_rotations[i]); + d =3D octeon_des_rotate28(d, octeon_des_rotations[i]); + subkeys[i] =3D octeon_des_permute(((uint64_t)c << 28) | d, + octeon_des_pc2, + ARRAY_SIZE(octeon_des_pc2), 56); + } +} + +static uint32_t octeon_des_f(uint32_t r, uint64_t subkey) +{ + uint64_t expanded =3D octeon_des_permute(r, octeon_des_e, + ARRAY_SIZE(octeon_des_e), 32); + uint32_t out =3D 0; + + expanded ^=3D subkey; + for (int i =3D 0; i < 8; i++) { + uint8_t sextet =3D (expanded >> (42 - i * 6)) & 0x3f; + uint8_t row =3D ((sextet & 0x20) >> 4) | (sextet & 0x01); + uint8_t col =3D (sextet >> 1) & 0x0f; + + out =3D (out << 4) | octeon_des_sboxes[i][row * 16 + col]; + } + + return octeon_des_permute(out, octeon_des_p, ARRAY_SIZE(octeon_des_p),= 32); +} + +static uint64_t octeon_des_block_crypt(uint64_t block, uint64_t key, + bool encrypt) +{ + uint64_t subkeys[16]; + uint64_t permuted =3D octeon_des_permute(block, octeon_des_ip, + ARRAY_SIZE(octeon_des_ip), 64); + uint32_t l =3D permuted >> 32; + uint32_t r =3D permuted; + + octeon_des_expand_subkeys(key, subkeys); + + for (int i =3D 0; i < 16; i++) { + uint32_t next =3D l ^ octeon_des_f(r, subkeys[encrypt ? i : 15 - i= ]); + + l =3D r; + r =3D next; + } + + return octeon_des_permute(((uint64_t)r << 32) | l, + octeon_des_fp, ARRAY_SIZE(octeon_des_fp), 64= ); +} + +static uint64_t octeon_3des_block_crypt(uint64_t block, const uint64_t key= s[3], + bool encrypt) +{ + if (encrypt) { + block =3D octeon_des_block_crypt(block, keys[0], true); + block =3D octeon_des_block_crypt(block, keys[1], false); + block =3D octeon_des_block_crypt(block, keys[2], true); + } else { + block =3D octeon_des_block_crypt(block, keys[2], false); + block =3D octeon_des_block_crypt(block, keys[1], true); + block =3D octeon_des_block_crypt(block, keys[0], false); + } + return block; +} + +static void octeon_3des_crypt_common(MIPSOcteonCryptoState *crypto, + uint64_t input_reg, + bool encrypt, bool cbc) +{ + const uint64_t keys[3] =3D { + crypto->des3_key[0], + crypto->des3_key[1], + crypto->des3_key[2], + }; + uint64_t block =3D input_reg; + + if (cbc) { + if (encrypt) { + block ^=3D crypto->des3_iv; + block =3D octeon_3des_block_crypt(block, keys, true); + crypto->des3_iv =3D block; + } else { + block =3D octeon_3des_block_crypt(block, keys, false); + block ^=3D crypto->des3_iv; + crypto->des3_iv =3D input_reg; + } + } else { + block =3D octeon_3des_block_crypt(block, keys, encrypt); + } + + crypto->des3_result =3D block; +} + +static inline uint16_t octeon_rol16(uint16_t value, unsigned int bits) +{ + return (value << bits) | (value >> (16 - bits)); +} + +static void octeon_kasumi_key_schedule(const uint64_t key_regs[2], + OcteonKasumiSubkeys *subkeys) +{ + uint16_t key[8]; + uint16_t key_prime[8]; + + key[0] =3D key_regs[0] >> 48; + key[1] =3D key_regs[0] >> 32; + key[2] =3D key_regs[0] >> 16; + key[3] =3D key_regs[0]; + key[4] =3D key_regs[1] >> 48; + key[5] =3D key_regs[1] >> 32; + key[6] =3D key_regs[1] >> 16; + key[7] =3D key_regs[1]; + + for (int i =3D 0; i < 8; i++) { + key_prime[i] =3D key[i] ^ octeon_kasumi_constants[i]; + } + + for (int i =3D 0; i < 8; i++) { + subkeys->kli1[i] =3D octeon_rol16(key[i], 1); + subkeys->kli2[i] =3D key_prime[(i + 2) & 7]; + subkeys->koi1[i] =3D octeon_rol16(key[(i + 1) & 7], 5); + subkeys->koi2[i] =3D octeon_rol16(key[(i + 5) & 7], 8); + subkeys->koi3[i] =3D octeon_rol16(key[(i + 6) & 7], 13); + subkeys->kii1[i] =3D key_prime[(i + 4) & 7]; + subkeys->kii2[i] =3D key_prime[(i + 3) & 7]; + subkeys->kii3[i] =3D key_prime[(i + 7) & 7]; + } +} + +static uint16_t octeon_kasumi_fi(uint16_t in, uint16_t subkey) +{ + uint16_t nine =3D in >> 7; + uint16_t seven =3D in & 0x7f; + + nine =3D octeon_kasumi_s9[nine] ^ seven; + seven =3D octeon_kasumi_s7[seven] ^ (nine & 0x7f); + seven ^=3D subkey >> 9; + nine ^=3D subkey & 0x1ff; + nine =3D octeon_kasumi_s9[nine] ^ seven; + seven =3D octeon_kasumi_s7[seven] ^ (nine & 0x7f); + return (seven << 9) | nine; +} + +static uint32_t octeon_kasumi_fo(uint32_t in, int index, + const OcteonKasumiSubkeys *subkeys) +{ + uint16_t left =3D in >> 16; + uint16_t right =3D in; + + left ^=3D subkeys->koi1[index]; + left =3D octeon_kasumi_fi(left, subkeys->kii1[index]); + left ^=3D right; + right ^=3D subkeys->koi2[index]; + right =3D octeon_kasumi_fi(right, subkeys->kii2[index]); + right ^=3D left; + left ^=3D subkeys->koi3[index]; + left =3D octeon_kasumi_fi(left, subkeys->kii3[index]); + left ^=3D right; + + return ((uint32_t)right << 16) | left; +} + +static uint32_t octeon_kasumi_fl(uint32_t in, int index, + const OcteonKasumiSubkeys *subkeys) +{ + uint16_t left =3D in >> 16; + uint16_t right =3D in; + uint16_t a =3D left & subkeys->kli1[index]; + uint16_t b; + + right ^=3D octeon_rol16(a, 1); + b =3D right | subkeys->kli2[index]; + left ^=3D octeon_rol16(b, 1); + return ((uint32_t)left << 16) | right; +} + +static uint64_t octeon_kasumi_block_encrypt(uint64_t block, + const uint64_t key_regs[2]) +{ + OcteonKasumiSubkeys subkeys; + uint32_t left =3D block >> 32; + uint32_t right =3D block; + + octeon_kasumi_key_schedule(key_regs, &subkeys); + + for (int i =3D 0; i < 8; ) { + uint32_t temp =3D octeon_kasumi_fl(left, i, &subkeys); + + temp =3D octeon_kasumi_fo(temp, i++, &subkeys); + right ^=3D temp; + temp =3D octeon_kasumi_fo(right, i, &subkeys); + temp =3D octeon_kasumi_fl(temp, i++, &subkeys); + left ^=3D temp; + } + + return ((uint64_t)left << 32) | right; +} + +static void octeon_kasumi_crypt_common(MIPSOcteonCryptoState *crypto, + uint64_t input_reg, bool cbc) +{ + const uint64_t key_regs[2] =3D { + crypto->des3_key[0], + crypto->des3_key[1], + }; + uint64_t block =3D input_reg; + + if (cbc) { + block ^=3D crypto->des3_iv; + } + + block =3D octeon_kasumi_block_encrypt(block, key_regs); + if (cbc) { + crypto->des3_iv =3D block; + } + crypto->des3_result =3D block; +} static void octeon_aes_load_key(const MIPSOcteonCryptoState *crypto, uint8_t *key, size_t keylen) { @@ -1150,6 +1577,35 @@ void helper_octeon_cp2_mt_aes_dec1(CPUMIPSState *env= , uint64_t value) crypto->aes_input[1] =3D value; octeon_aes_decrypt_common(crypto, false); } +void helper_octeon_cp2_mt_des3_enc_cbc(CPUMIPSState *env, uint64_t value) +{ + octeon_3des_crypt_common(&env->octeon_crypto, value, true, true); +} + +void helper_octeon_cp2_mt_kas_enc_cbc(CPUMIPSState *env, uint64_t value) +{ + octeon_kasumi_crypt_common(&env->octeon_crypto, value, true); +} + +void helper_octeon_cp2_mt_des3_enc(CPUMIPSState *env, uint64_t value) +{ + octeon_3des_crypt_common(&env->octeon_crypto, value, true, false); +} + +void helper_octeon_cp2_mt_kas_enc(CPUMIPSState *env, uint64_t value) +{ + octeon_kasumi_crypt_common(&env->octeon_crypto, value, false); +} + +void helper_octeon_cp2_mt_des3_dec_cbc(CPUMIPSState *env, uint64_t value) +{ + octeon_3des_crypt_common(&env->octeon_crypto, value, false, true); +} + +void helper_octeon_cp2_mt_des3_dec(CPUMIPSState *env, uint64_t value) +{ + octeon_3des_crypt_common(&env->octeon_crypto, value, false, false); +} void helper_octeon_cp2_mt_gfm_xormul1_reflect(CPUMIPSState *env, uint64_t value) { --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207942; cv=none; d=zohomail.com; s=zohoarc; b=Rj6KP6K7Q3hiukFbNyhZYsHkwUC8JwpmimDUyg9/oW9kseDgPHJXSV16U1dz1RPtuuveFiLhLaIwprIDpuVQd9dOBmfRjmUfrONPn9iEXAl/e9sG7c7hBRbGCY0KqV3q0OQH63bw0XXoFokHD+GA9zygJ4a+jJgRlYg66udDjFY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207942; 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=UPICKVB8e8S6y4T95y/ZuKKTfFnkhWoVNrB3TcHrnm4=; b=b7En7DzY311Szc9v3Pwf6Tjp2ZePfOcNhp3FPNqBJMnPqJoA2T6uniDHiUNcjq55wMql/5mDXb7iD9/NhifCytRRFQufbwOLAYo5jn8iJua9n/OyJNJx6yWO5HuNdI3U+r3KF9SmVQzCTIe4YRmUE3y8emoQtfm39e3j410M11s= 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 1779207942671306.66421999710303; Tue, 19 May 2026 09:25:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDw-0006x9-B9; Tue, 19 May 2026 12:23:16 -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 1wPNDs-0006qg-Fq for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:12 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDq-0000ou-H4 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:12 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-439a8366831so1529127fac.3 for ; Tue, 19 May 2026 09:23:10 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207789; x=1779812589; 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=UPICKVB8e8S6y4T95y/ZuKKTfFnkhWoVNrB3TcHrnm4=; b=DBLUi0Tu/DDbQl4T3py9/buZrN0xPFrpAESsDI2QwhQopnqgjCSBYq9YYDOdv/c+k9 wtKKs6zhoe7Abbwxmvf7ADqRgQh29jfoJQ2Fqf5N1y1b7XLKmFNbiu0kgwbUkE8QJFOc EcobEGRLfRA7AVC6G+7fJ6V99DhVmfE0aHtS824z963/Fofa0UtApJg++nrg7vN7rm8k 6CSdKJnR2qCA2voICiDuRIqs33bUs6q0cUnMyv3QjPneYKl0UlrYOqswfPEsFFn6Fjrx qRpJRsleAixvAWHwvLiA88Lutj9U4opTFs8zMFbyf37/2TqqCrCKDKd35Ha0yULCHl5Y VWZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207789; x=1779812589; 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=UPICKVB8e8S6y4T95y/ZuKKTfFnkhWoVNrB3TcHrnm4=; b=bbXFuVVC6Y8spbXf9SvoKxjgQB37bDyw/7htGk6vedEz2tJr5vsKMK/opTKBRMteYT 0vWqBUUxfYfvlg2psZfuLhp65qyduuYdGNX3q2eSx+QTzOqHONkOf/005QDKqUf6CsxV MSy47xKSlVVaWw63/WwXMp0qprSKAOa+/u9s0a4lDfTpfsDfGdurzm+dSKnsi4Nxb2Zb jD7rEV6k4JZJxwbxBDQ4jkcButGTduT1q/CVdFyLELtqYHp96xrMPHl4PMRHPIYbJi4+ W8/BqPktW4A8CD+IG7XhMrnus9pEjPITX6YKslY10CHsiCC3ituX7B83WZaoV9GD6OPp emhA== X-Gm-Message-State: AOJu0Yy3FVvTVlLWWQYoOHQdqJB8/TP1ks9yVcb5GSbOmpAPRYPwQ6WC wxCXkagXiZ9gc4Sqcbb90YhoFtH7AJ7R/K8iGtFdMwQLEX2MWNyYQ/7g X-Gm-Gg: Acq92OFzbqpNWvibkzlkAhlFxxyILETpejDeJD+BdT4El4ioIdflD/WzDYNH6gKOjDF 24h9DjG9Z0qyM07O2qxX0NBSxC6riWrBCGxhfdzNY/E9zlT+ki33cqaETUiLBQbtVdVOzVtOQie /xurgeiT1SCBrMs//g4Z6Hk+c/PS0jSYqcF31x3qQlPcqyWhA/hh809zULG9uiKYhYkIGVONHID lw1NvIPXJ7IHdJSnfxqzbd+Ev7ebFhW5uGviR3pOEM9xjNfGDZnGGh9Wo9Ba+8Bqn+DP2wE+m0Q qFcSZRI+mNMD6Wj+/mfT8qS5+pvWDsUTD5/WqqzVUJEmrS4svV1dtKW0iHfQ+zHuWOueBRZDtKd IUumOHHEHsBr4DLWSu2ArXHGUvoGrBK0qa9V0L8FUwLY7+C3gWRXKL0MsjIFdXfEy03NP+mRJPx SUiK/HLpLxRoiuwz3Soe3kLlW961g5dY6E834jcXP9M1xxH8xP+0YBgQYJrkOtUCI9rc/mI78PC 11e5ZgmpWbvmatY6xMskKa7rK4gW0L6Qz7dZJNXsP98YjUQPY3fyI+j0ql8015PUvwS X-Received: by 2002:a05:6870:a0b6:b0:430:29f5:285f with SMTP id 586e51a60fabf-43a2dedb1cdmr13358525fac.35.1779207789322; Tue, 19 May 2026 09:23:09 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:36 -0600 Subject: [PATCH v9 34/40] target/mips: add Octeon Camellia COP2 helpers MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-34-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::2b; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x2b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207944372158500 Add helper support for the Octeon Camellia ROUND, FL, and FLINV selectors. The engine reuses the AES RESINP bank, and guest-managed key schedules drive the Camellia F-function and FL layers through these COP2 operations. Implement the Camellia F-function and FL layers directly from RFC 3713. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Split Camellia operation selectors into their own COP2 helper patch. - Replace generic selector dispatch with per-operation Camellia helpers. - Add matching helper.h declarations with the helper implementation. Changes v1 -> v2: - Drop the Octeon prefix from generic Camellia helper routines. (suggested by Philippe Mathieu-Daud=C3=A9) - Add selector dispatch updates in octeon_translate.c after moving COP2 decode out of translate.c. (suggested by Philippe Mathieu-Daud=C3=A9) Changes v5 -> v6: - Use RESINP wording for the Camellia shared selector aliases. --- target/mips/helper.h | 3 + target/mips/tcg/octeon_crypto.c | 124 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 127 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index 9a13f00de8..23c712cfb7 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -80,6 +80,9 @@ DEF_HELPER_2(octeon_cp2_mt_des3_enc, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_kas_enc, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_des3_dec_cbc, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_des3_dec, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_camellia_fl, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_camellia_flinv, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_camellia_round, void, env, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index 851a3cbdea..d26dd2924d 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -1283,6 +1283,116 @@ static void octeon_aes_store_block(uint64_t regs[2]= , const uint8_t *block) regs[0] =3D ldq_be_p(block); regs[1] =3D ldq_be_p(block + 8); } +static const uint8_t camellia_sbox1[256] =3D { + 112, 130, 44, 236, 179, 39, 192, 229, 228, 133, 87, 53, 234, 12, + 174, 65, 35, 239, 107, 147, 69, 25, 165, 33, 237, 14, 79, 78, + 29, 101, 146, 189, 134, 184, 175, 143, 124, 235, 31, 206, 62, 48, + 220, 95, 94, 197, 11, 26, 166, 225, 57, 202, 213, 71, 93, 61, + 217, 1, 90, 214, 81, 86, 108, 77, 139, 13, 154, 102, 251, 204, + 176, 45, 116, 18, 43, 32, 240, 177, 132, 153, 223, 76, 203, 194, + 52, 126, 118, 5, 109, 183, 169, 49, 209, 23, 4, 215, 20, 88, + 58, 97, 222, 27, 17, 28, 50, 15, 156, 22, 83, 24, 242, 34, + 254, 68, 207, 178, 195, 181, 122, 145, 36, 8, 232, 168, 96, 252, + 105, 80, 170, 208, 160, 125, 161, 137, 98, 151, 84, 91, 30, 149, + 224, 255, 100, 210, 16, 196, 0, 72, 163, 247, 117, 219, 138, 3, + 230, 218, 9, 63, 221, 148, 135, 92, 131, 2, 205, 74, 144, 51, + 115, 103, 246, 243, 157, 127, 191, 226, 82, 155, 216, 38, 200, 55, + 198, 59, 129, 150, 111, 75, 19, 190, 99, 46, 233, 121, 167, 140, + 159, 110, 188, 142, 41, 245, 249, 182, 47, 253, 180, 89, 120, 152, + 6, 106, 231, 70, 113, 186, 212, 37, 171, 66, 136, 162, 141, 250, + 114, 7, 185, 85, 248, 238, 172, 10, 54, 73, 42, 104, 60, 56, + 241, 164, 64, 40, 211, 123, 187, 201, 67, 193, 21, 227, 173, 244, + 119, 199, 128, 158, +}; + +static inline uint8_t camellia_rotl8(uint8_t v, unsigned int shift) +{ + return (v << shift) | (v >> (8 - shift)); +} + +static inline uint8_t camellia_sbox2(uint8_t x) +{ + return camellia_rotl8(camellia_sbox1[x], 1); +} + +static inline uint8_t camellia_sbox3(uint8_t x) +{ + return camellia_rotl8(camellia_sbox1[x], 7); +} + +static inline uint8_t camellia_sbox4(uint8_t x) +{ + return camellia_sbox1[camellia_rotl8(x, 1)]; +} + +static uint64_t camellia_f(uint64_t input, uint64_t key) +{ + uint64_t x =3D input ^ key; + uint8_t t1 =3D camellia_sbox1[x >> 56]; + uint8_t t2 =3D camellia_sbox2((x >> 48) & 0xff); + uint8_t t3 =3D camellia_sbox3((x >> 40) & 0xff); + uint8_t t4 =3D camellia_sbox4((x >> 32) & 0xff); + uint8_t t5 =3D camellia_sbox2((x >> 24) & 0xff); + uint8_t t6 =3D camellia_sbox3((x >> 16) & 0xff); + uint8_t t7 =3D camellia_sbox4((x >> 8) & 0xff); + uint8_t t8 =3D camellia_sbox1[x & 0xff]; + uint8_t y1 =3D t1 ^ t3 ^ t4 ^ t6 ^ t7 ^ t8; + uint8_t y2 =3D t1 ^ t2 ^ t4 ^ t5 ^ t7 ^ t8; + uint8_t y3 =3D t1 ^ t2 ^ t3 ^ t5 ^ t6 ^ t8; + uint8_t y4 =3D t2 ^ t3 ^ t4 ^ t5 ^ t6 ^ t7; + uint8_t y5 =3D t1 ^ t2 ^ t6 ^ t7 ^ t8; + uint8_t y6 =3D t2 ^ t3 ^ t5 ^ t7 ^ t8; + uint8_t y7 =3D t3 ^ t4 ^ t5 ^ t6 ^ t8; + uint8_t y8 =3D t1 ^ t4 ^ t5 ^ t6 ^ t7; + + return ((uint64_t)y1 << 56) | ((uint64_t)y2 << 48) | + ((uint64_t)y3 << 40) | ((uint64_t)y4 << 32) | + ((uint64_t)y5 << 24) | ((uint64_t)y6 << 16) | + ((uint64_t)y7 << 8) | y8; +} + +static uint64_t camellia_fl(uint64_t input, uint64_t key) +{ + uint32_t x1 =3D input >> 32; + uint32_t x2 =3D input; + uint32_t k1 =3D key >> 32; + uint32_t k2 =3D key; + + x2 ^=3D rol32(x1 & k1, 1); + x1 ^=3D x2 | k2; + return ((uint64_t)x1 << 32) | x2; +} + +static uint64_t camellia_flinv(uint64_t input, uint64_t key) +{ + uint32_t y1 =3D input >> 32; + uint32_t y2 =3D input; + uint32_t k1 =3D key >> 32; + uint32_t k2 =3D key; + + y1 ^=3D y2 | k2; + y2 ^=3D rol32(y1 & k1, 1); + return ((uint64_t)y1 << 32) | y2; +} + +static void octeon_camellia_round(MIPSOcteonCryptoState *crypto, uint64_t = key) +{ + uint64_t left =3D crypto->aes_result[0]; + uint64_t right =3D crypto->aes_result[1]; + + crypto->aes_result[0] =3D right ^ camellia_f(left, key); + crypto->aes_result[1] =3D left; +} + +static void octeon_camellia_fl_layer(MIPSOcteonCryptoState *crypto, + uint64_t key, bool inverse) +{ + uint64_t state =3D crypto->aes_result[inverse ? 1 : 0]; + + crypto->aes_result[inverse ? 1 : 0] =3D inverse ? + camellia_flinv(state, key) : + camellia_fl(state, key); +} static void octeon_sms4_crypt_common(MIPSOcteonCryptoState *crypto, bool encrypt, bool cbc) { @@ -1577,6 +1687,20 @@ void helper_octeon_cp2_mt_aes_dec1(CPUMIPSState *env= , uint64_t value) crypto->aes_input[1] =3D value; octeon_aes_decrypt_common(crypto, false); } +void helper_octeon_cp2_mt_camellia_fl(CPUMIPSState *env, uint64_t value) +{ + octeon_camellia_fl_layer(&env->octeon_crypto, value, false); +} + +void helper_octeon_cp2_mt_camellia_flinv(CPUMIPSState *env, uint64_t value) +{ + octeon_camellia_fl_layer(&env->octeon_crypto, value, true); +} + +void helper_octeon_cp2_mt_camellia_round(CPUMIPSState *env, uint64_t value) +{ + octeon_camellia_round(&env->octeon_crypto, value); +} void helper_octeon_cp2_mt_des3_enc_cbc(CPUMIPSState *env, uint64_t value) { octeon_3des_crypt_common(&env->octeon_crypto, value, true, true); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207942; cv=none; d=zohomail.com; s=zohoarc; b=dxyM+f1B8LS2rk+S3HuOv0lkGmmA5at8zgCQylZRRsGb9a73/v1Ha/1dQqMCjkhl16J9bIxlly9pvRXjdlVYAYPV7Di3bfy75eSuVMuSOoUrcrcXcUt3xTTKh0Ang3Tyjs08DcCRJGvmUPcQjURMZt4oVlFbd561oiZpB0IyquA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207942; 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=P43OeS+Jwti9OHWJ6qw8iECWDcTXObWIJzmUrcqQOrg=; b=fpvAgc0zj2PWLyIlsATkMEM01MyZsV+36mkbXLp8iZqARDQwYITidYP+KnusZh6QYmaoXUgHgXAl3GY4wTP4oV+vYkQGtblVkmFukx96tJ0L1Vz5YXA+iTNnvd5crlqsw4YjkZMj+rkaS36AJMQ+eX+4E19Vmr30gIhcavOg8Ng= 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 177920794254321.022437524255906; Tue, 19 May 2026 09:25:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDy-0006yZ-Bx; Tue, 19 May 2026 12:23:18 -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 1wPNDw-0006wy-1l for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:16 -0400 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDt-0000pO-17 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:15 -0400 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-43ad01fe217so562989fac.0 for ; Tue, 19 May 2026 09:23:12 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207791; x=1779812591; 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=P43OeS+Jwti9OHWJ6qw8iECWDcTXObWIJzmUrcqQOrg=; b=TNWG1V6gs3bmIDk5fHZutz4IsIRQQCbRWMe2/MgsUoJIJr+8b85FR7TsdzcVCQ1EFB qMeavpbhUr9qu7yAGHfSMCFF9N5SzL7WeXDlvTYWqMrNH0milf5tsi019VfghdVj2rYJ qkMlPF6gogsk3oI48yoN2zAqt/CNCFlJnjpS7u9wjsuUiCxvGRYZg2R0Unw1VaDqCrdf uAP+VXrTpsNWQf8tn1rsZDawO9lMCGRxnNJ0TOCm2tSSeRIs8YwI5R53aBd7VKFUYcoP gMrSJUN6sl7TcQBxW+bI+mwmHEInACpzi9UPJ2xbdSbOHKV26ilqEmTZiKz5gMb5x/Ye YraA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207791; x=1779812591; 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=P43OeS+Jwti9OHWJ6qw8iECWDcTXObWIJzmUrcqQOrg=; b=c/owS4lDXHJlLH5aVSDLKu6CxvJTG0HyzpWYNQ7OC4Qc2Pqwc7JzBS9oOPC9EbmJoe 2qnZ01EtypB0gXaqBRAyZKgK+8yo3W7JadTFTbju0a+SytffxWL3m+2dbdS6xvwcyqNM b0f7yu5JEpxrzd1MKQWfmFLEKbs0J1S6CYXPjR8+ehWHSazzjtjay7DE+XoqRK9o6RrS Ktwu90lmPpJXFv7btrQoR8LiYXKGSEob6D0cFCnAvV4cC6MDs1Cu5raPAQLs5CRV9U5H u4vTVFB1IapgT+kSPvaGQ7jPdMBhoEzsHdDV7dJxSiAvnl49YPeRZzGQqGe4A8j7OLzs NHFQ== X-Gm-Message-State: AOJu0YyNAgzjwZJFH611CgN6sPHn6/glzZKlUOzmE4oX4BANZfevkLK2 AbyqVEC1hyQ9VPtQ5Te4IwQdBAFC1WM6e+Es/hMJ/PspzZ3g1euY1kAs X-Gm-Gg: Acq92OEJ5jJJXvd8P4dg3F7DwQj4ExEFxpB83vtBSo9eubQIrJsaHUlVhc5qz5gJjnW VOlyjPbUhuC/aWJ9vP0TBCvVmMlfwaS01fSHr4aWCG7MeldY1g3gfjohZn3NPWm2wdx/tWFMtYZ vU4Kf6VvZMecxhAbQFkDksP91CpC4wTE65bpMYf6C8jUoi/LPrXC2QgHNTvlB6Zh/WEZKPtVsne MTv5m/QdSm0cq5OZmB9SyxYZ0KIkTG2pgIt8CPFGHmfs9bl+FYfAsaOT3sxg5IzuC7sDTbwdfjX 0KcYPQw8kVwautUxkwIZCJWHuCOocH2bO4YgPlzNWQMr9nywR675gxwFrb5TBrZf0e+yF8MFJlf QFtKVGHr+m8gVxbDFeK37hFpgG1N2O9niX5QgyAszCR5/6hQc8k0gYFoYE5XgZmHZGIYASiwAZW Dmz+O7+s8jtbwvo49PO6l6Ly3rYgScH4hfOq92J2lbIC01zAfDqDZefMoA3IeWex7F2N1GnT3qw xOL1omwVMEbFlN0+Ih6cH3AfTsI35O8rRjVB35rE63OxnHDUppMFx9hCqkaKR1ujYVw X-Received: by 2002:a05:6871:6616:b0:423:9228:7d37 with SMTP id 586e51a60fabf-43a2da1bf68mr12215638fac.16.1779207790502; Tue, 19 May 2026 09:23:10 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:37 -0600 Subject: [PATCH v9 35/40] target/mips: add Octeon HSH COP2 helpers MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-35-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::36; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x36.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207944381158500 Add helper support for the Octeon HSH hash selectors. This includes the base HSH data/IV windows, MD5, SHA1, SHA256, and SHA512 transform paths, and the shared HSH/SHA512 register-window readback and write operations. The SHA512 path shares the wide HSH register bank with SHA3, SNOW3G, and ZUC. Keep the mode tracking centralized so later explicit DMFC2/DMTC2 selector decode can route aliased register accesses through these helpers when side effects or active-engine views are required. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Split HSH/SHA helpers into their own COP2 helper patch. - Replace generic selector dispatch with per-operation HSH helpers. - Keep shared-window readback and write helpers grouped with HSH. - Add matching helper.h declarations with the helper implementation. --- target/mips/helper.h | 53 ++++ target/mips/tcg/octeon_crypto.c | 570 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 623 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index 23c712cfb7..6d6ceaea08 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -28,6 +28,30 @@ DEF_HELPER_FLAGS_4(rotx, TCG_CALL_NO_RWG_SE, tl, tl, i32= , i32, i32) /* Octeon COP2 selector operation helpers. */ DEF_HELPER_1(octeon_cp2_mf_crc_iv_reflect, i64, env) DEF_HELPER_1(octeon_cp2_mf_sha3_dat24, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw0, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw1, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw2, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw3, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw4, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw5, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw6, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw7, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw8, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw9, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw10, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw11, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw12, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw13, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw14, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_datw15, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_ivw0, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_ivw1, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_ivw2, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_ivw3, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_ivw4, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_ivw5, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_ivw6, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_ivw7, i64, env) DEF_HELPER_2(octeon_cp2_mt_crc_write_iv_reflect, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_crc_write_byte, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_crc_write_half, void, env, i64) @@ -83,6 +107,35 @@ DEF_HELPER_2(octeon_cp2_mt_des3_dec, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_camellia_fl, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_camellia_flinv, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_camellia_round, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_startsha_compat, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw0, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw2, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw3, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw4, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw5, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw6, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw7, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw8, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw9, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw10, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw11, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw12, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw13, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw14, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_datw15, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_ivw0, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_ivw1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_ivw2, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_ivw3, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_ivw4, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_ivw5, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_ivw6, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_ivw7, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_startmd5, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_startsha256, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_startsha, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_startsha512, void, env, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index d26dd2924d..6282226cfc 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -136,6 +136,367 @@ static void octeon_gfm_mul_reflect(MIPSOcteonCryptoSt= ate *crypto, uint64_t data) crypto->gfm_poly, crypto->gfm_reflect_resinp); crypto->gfm_reflect_xor0 =3D 0; } +static inline void octeon_hsh_load_reg_words_be(uint64_t reg, + uint32_t *hi, uint32_t *l= o) +{ + uint8_t buf[8]; + + stq_be_p(buf, reg); + *hi =3D ldl_be_p(buf); + *lo =3D ldl_be_p(buf + 4); +} + +static inline void octeon_hsh_load_reg_words_le(uint64_t reg, + uint32_t *lo0, uint32_t *= lo1) +{ + uint8_t buf[8]; + + stq_be_p(buf, reg); + *lo0 =3D ldl_le_p(buf); + *lo1 =3D ldl_le_p(buf + 4); +} + +static inline uint64_t octeon_hsh_store_reg_words_be(uint32_t hi, uint32_t= lo) +{ + uint8_t buf[8]; + + stl_be_p(buf, hi); + stl_be_p(buf + 4, lo); + return ldq_be_p(buf); +} + +static inline uint64_t octeon_hsh_store_reg_words_le(uint32_t lo0, + uint32_t lo1) +{ + uint8_t buf[8]; + + stl_le_p(buf, lo0); + stl_le_p(buf + 4, lo1); + return ldq_be_p(buf); +} + +static void octeon_md5_transform(MIPSOcteonCryptoState *crypto) +{ + static const uint32_t k[64] =3D { + 0xd76aa478U, 0xe8c7b756U, 0x242070dbU, 0xc1bdceeeU, + 0xf57c0fafU, 0x4787c62aU, 0xa8304613U, 0xfd469501U, + 0x698098d8U, 0x8b44f7afU, 0xffff5bb1U, 0x895cd7beU, + 0x6b901122U, 0xfd987193U, 0xa679438eU, 0x49b40821U, + 0xf61e2562U, 0xc040b340U, 0x265e5a51U, 0xe9b6c7aaU, + 0xd62f105dU, 0x02441453U, 0xd8a1e681U, 0xe7d3fbc8U, + 0x21e1cde6U, 0xc33707d6U, 0xf4d50d87U, 0x455a14edU, + 0xa9e3e905U, 0xfcefa3f8U, 0x676f02d9U, 0x8d2a4c8aU, + 0xfffa3942U, 0x8771f681U, 0x6d9d6122U, 0xfde5380cU, + 0xa4beea44U, 0x4bdecfa9U, 0xf6bb4b60U, 0xbebfbc70U, + 0x289b7ec6U, 0xeaa127faU, 0xd4ef3085U, 0x04881d05U, + 0xd9d4d039U, 0xe6db99e5U, 0x1fa27cf8U, 0xc4ac5665U, + 0xf4292244U, 0x432aff97U, 0xab9423a7U, 0xfc93a039U, + 0x655b59c3U, 0x8f0ccc92U, 0xffeff47dU, 0x85845dd1U, + 0x6fa87e4fU, 0xfe2ce6e0U, 0xa3014314U, 0x4e0811a1U, + 0xf7537e82U, 0xbd3af235U, 0x2ad7d2bbU, 0xeb86d391U, + }; + static const uint8_t s[64] =3D { + 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, + 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, + 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, + 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, + }; + uint8_t block_bytes[64]; + uint32_t m[16]; + uint32_t a, b, c, d; + uint32_t aa, bb, cc, dd; + int i; + + for (i =3D 0; i < 8; i++) { + stq_be_p(block_bytes + (i * 8), crypto->hsh_dat[i]); + m[i * 2] =3D ldl_le_p(block_bytes + (i * 8)); + m[i * 2 + 1] =3D ldl_le_p(block_bytes + (i * 8) + 4); + } + + octeon_hsh_load_reg_words_le(crypto->hsh_iv[0], &a, &b); + octeon_hsh_load_reg_words_le(crypto->hsh_iv[1], &c, &d); + aa =3D a; + bb =3D b; + cc =3D c; + dd =3D d; + + for (i =3D 0; i < 64; i++) { + uint32_t f, g, tmp; + + if (i < 16) { + f =3D (b & c) | ((~b) & d); + g =3D i; + } else if (i < 32) { + f =3D (d & b) | ((~d) & c); + g =3D (5 * i + 1) & 0xf; + } else if (i < 48) { + f =3D b ^ c ^ d; + g =3D (3 * i + 5) & 0xf; + } else { + f =3D c ^ (b | (~d)); + g =3D (7 * i) & 0xf; + } + + tmp =3D d; + d =3D c; + c =3D b; + b =3D b + rol32(a + f + k[i] + m[g], s[i]); + a =3D tmp; + } + + a +=3D aa; + b +=3D bb; + c +=3D cc; + d +=3D dd; + crypto->hsh_iv[0] =3D octeon_hsh_store_reg_words_le(a, b); + crypto->hsh_iv[1] =3D octeon_hsh_store_reg_words_le(c, d); +} + +static void octeon_sha1_transform(MIPSOcteonCryptoState *crypto) +{ + uint32_t w[80]; + uint32_t a, b, c, d, e; + int i; + + for (i =3D 0; i < 8; i++) { + octeon_hsh_load_reg_words_be(crypto->hsh_dat[i], + &w[i * 2], &w[i * 2 + 1]); + } + for (i =3D 16; i < 80; i++) { + w[i] =3D rol32(w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16], 1); + } + + octeon_hsh_load_reg_words_be(crypto->hsh_iv[0], &a, &b); + octeon_hsh_load_reg_words_be(crypto->hsh_iv[1], &c, &d); + e =3D crypto->hsh_iv[2] >> 32; + + for (i =3D 0; i < 80; i++) { + uint32_t f, k, temp; + + if (i < 20) { + f =3D (b & c) | ((~b) & d); + k =3D 0x5a827999; + } else if (i < 40) { + f =3D b ^ c ^ d; + k =3D 0x6ed9eba1; + } else if (i < 60) { + f =3D (b & c) | (b & d) | (c & d); + k =3D 0x8f1bbcdc; + } else { + f =3D b ^ c ^ d; + k =3D 0xca62c1d6; + } + + temp =3D rol32(a, 5) + f + e + k + w[i]; + e =3D d; + d =3D c; + c =3D rol32(b, 30); + b =3D a; + a =3D temp; + } + + octeon_hsh_load_reg_words_be(crypto->hsh_iv[0], &w[0], &w[1]); + octeon_hsh_load_reg_words_be(crypto->hsh_iv[1], &w[2], &w[3]); + w[4] =3D crypto->hsh_iv[2] >> 32; + w[0] +=3D a; + w[1] +=3D b; + w[2] +=3D c; + w[3] +=3D d; + w[4] +=3D e; + crypto->hsh_iv[0] =3D octeon_hsh_store_reg_words_be(w[0], w[1]); + crypto->hsh_iv[1] =3D octeon_hsh_store_reg_words_be(w[2], w[3]); + crypto->hsh_iv[2] =3D (uint64_t)w[4] << 32; +} + +static void octeon_sha256_transform(MIPSOcteonCryptoState *crypto) +{ + static const uint32_t k[64] =3D { + 0x428a2f98U, 0x71374491U, 0xb5c0fbcfU, 0xe9b5dba5U, + 0x3956c25bU, 0x59f111f1U, 0x923f82a4U, 0xab1c5ed5U, + 0xd807aa98U, 0x12835b01U, 0x243185beU, 0x550c7dc3U, + 0x72be5d74U, 0x80deb1feU, 0x9bdc06a7U, 0xc19bf174U, + 0xe49b69c1U, 0xefbe4786U, 0x0fc19dc6U, 0x240ca1ccU, + 0x2de92c6fU, 0x4a7484aaU, 0x5cb0a9dcU, 0x76f988daU, + 0x983e5152U, 0xa831c66dU, 0xb00327c8U, 0xbf597fc7U, + 0xc6e00bf3U, 0xd5a79147U, 0x06ca6351U, 0x14292967U, + 0x27b70a85U, 0x2e1b2138U, 0x4d2c6dfcU, 0x53380d13U, + 0x650a7354U, 0x766a0abbU, 0x81c2c92eU, 0x92722c85U, + 0xa2bfe8a1U, 0xa81a664bU, 0xc24b8b70U, 0xc76c51a3U, + 0xd192e819U, 0xd6990624U, 0xf40e3585U, 0x106aa070U, + 0x19a4c116U, 0x1e376c08U, 0x2748774cU, 0x34b0bcb5U, + 0x391c0cb3U, 0x4ed8aa4aU, 0x5b9cca4fU, 0x682e6ff3U, + 0x748f82eeU, 0x78a5636fU, 0x84c87814U, 0x8cc70208U, + 0x90befffaU, 0xa4506cebU, 0xbef9a3f7U, 0xc67178f2U, + }; + uint32_t w[64]; + uint32_t a, b, c, d, e, f, g, h; + uint32_t orig[8]; + int i; + + for (i =3D 0; i < 8; i++) { + octeon_hsh_load_reg_words_be(crypto->hsh_dat[i], + &w[i * 2], &w[i * 2 + 1]); + } + for (i =3D 16; i < 64; i++) { + uint32_t s0 =3D ror32(w[i - 15], 7) ^ + ror32(w[i - 15], 18) ^ + (w[i - 15] >> 3); + uint32_t s1 =3D ror32(w[i - 2], 17) ^ + ror32(w[i - 2], 19) ^ + (w[i - 2] >> 10); + w[i] =3D w[i - 16] + s0 + w[i - 7] + s1; + } + + for (i =3D 0; i < 4; i++) { + octeon_hsh_load_reg_words_be(crypto->hsh_iv[i], + &orig[i * 2], &orig[i * 2 + 1]); + } + a =3D orig[0]; + b =3D orig[1]; + c =3D orig[2]; + d =3D orig[3]; + e =3D orig[4]; + f =3D orig[5]; + g =3D orig[6]; + h =3D orig[7]; + + for (i =3D 0; i < 64; i++) { + uint32_t s1 =3D ror32(e, 6) ^ + ror32(e, 11) ^ + ror32(e, 25); + uint32_t ch =3D (e & f) ^ ((~e) & g); + uint32_t temp1 =3D h + s1 + ch + k[i] + w[i]; + uint32_t s0 =3D ror32(a, 2) ^ + ror32(a, 13) ^ + ror32(a, 22); + uint32_t maj =3D (a & b) ^ (a & c) ^ (b & c); + uint32_t temp2 =3D s0 + maj; + + h =3D g; + g =3D f; + f =3D e; + e =3D d + temp1; + d =3D c; + c =3D b; + b =3D a; + a =3D temp1 + temp2; + } + + orig[0] +=3D a; + orig[1] +=3D b; + orig[2] +=3D c; + orig[3] +=3D d; + orig[4] +=3D e; + orig[5] +=3D f; + orig[6] +=3D g; + orig[7] +=3D h; + for (i =3D 0; i < 4; i++) { + crypto->hsh_iv[i] =3D + octeon_hsh_store_reg_words_be(orig[i * 2], orig[i * 2 + 1]); + } +} + +static void octeon_sha512_transform(MIPSOcteonCryptoState *crypto) +{ + static const uint64_t k[80] =3D { + 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, + 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, + 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, + 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, + 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, + 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, + 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, + 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, + 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, + 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, + 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, + 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, + 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, + 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, + 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, + 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, + 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, + 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, + 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, + 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, + 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, + 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, + 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, + 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, + 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, + 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, + 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, + 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, + 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, + 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, + 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, + 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, + 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, + 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, + 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, + 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, + 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, + 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, + 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, + 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL, + }; + uint64_t w[80]; + uint64_t a, b, c, d, e, f, g, h; + int i; + + for (i =3D 0; i < 16; i++) { + w[i] =3D crypto->hsh_datw[i]; + } + for (i =3D 16; i < 80; i++) { + uint64_t s0 =3D ror64(w[i - 15], 1) ^ + ror64(w[i - 15], 8) ^ + (w[i - 15] >> 7); + uint64_t s1 =3D ror64(w[i - 2], 19) ^ + ror64(w[i - 2], 61) ^ + (w[i - 2] >> 6); + w[i] =3D w[i - 16] + s0 + w[i - 7] + s1; + } + + a =3D crypto->hsh_ivw[0]; + b =3D crypto->hsh_ivw[1]; + c =3D crypto->hsh_ivw[2]; + d =3D crypto->hsh_ivw[3]; + e =3D crypto->hsh_ivw[4]; + f =3D crypto->hsh_ivw[5]; + g =3D crypto->hsh_ivw[6]; + h =3D crypto->hsh_ivw[7]; + + for (i =3D 0; i < 80; i++) { + uint64_t s0 =3D ror64(a, 28) ^ + ror64(a, 34) ^ + ror64(a, 39); + uint64_t s1 =3D ror64(e, 14) ^ + ror64(e, 18) ^ + ror64(e, 41); + uint64_t ch =3D (e & f) ^ ((~e) & g); + uint64_t maj =3D (a & b) ^ (a & c) ^ (b & c); + uint64_t temp1 =3D h + s1 + ch + k[i] + w[i]; + uint64_t temp2 =3D s0 + maj; + + h =3D g; + g =3D f; + f =3D e; + e =3D d + temp1; + d =3D c; + c =3D b; + b =3D a; + a =3D temp1 + temp2; + } + + crypto->hsh_ivw[0] +=3D a; + crypto->hsh_ivw[1] +=3D b; + crypto->hsh_ivw[2] +=3D c; + crypto->hsh_ivw[3] +=3D d; + crypto->hsh_ivw[4] +=3D e; + crypto->hsh_ivw[5] +=3D f; + crypto->hsh_ivw[6] +=3D g; + crypto->hsh_ivw[7] +=3D h; +} static const uint64_t octeon_sha3_round_constants[24] =3D { 0x0000000000000001ULL, 0x0000000000008082ULL, 0x800000000000808aULL, 0x8000000080008000ULL, @@ -1533,6 +1894,116 @@ static void octeon_gfm_mul(const uint64_t x[2], con= st uint64_t y[2], out[0] =3D zh; out[1] =3D zl; } +static uint64_t octeon_hsh_mf_window(MIPSOcteonCryptoState *crypto, + uint32_t sel) +{ + if (crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_ZUC && + octeon_zuc_is_shared_dmfc2_sel(sel)) { + if (sel >=3D OCTEON_HSH_DATW(0) && + sel <=3D OCTEON_HSH_DATW(7)) { + unsigned int idx =3D sel - OCTEON_HSH_DATW(0); + + return octeon_zuc_pack_pair(crypto->zuc_lfsr[idx * 2], + crypto->zuc_lfsr[idx * 2 + 1]); + } + switch (sel) { + case OCTEON_HSH_DATW(8): + return octeon_zuc_pack_pair(crypto->zuc_fsm[0], + crypto->zuc_fsm[1]); + case OCTEON_HSH_DATW(9): + case OCTEON_HSH_IVW(0): + return octeon_zuc_pack_pair(crypto->zuc_window[0], + crypto->zuc_window[1]); + case OCTEON_HSH_DATW(10): + return crypto->zuc_window[2]; + case OCTEON_HSH_DATW(11): + case OCTEON_HSH_IVW(3): + return crypto->zuc_tresult; + case OCTEON_HSH_DATW(15): + case OCTEON_SHA3_DAT24_SEL: + return 0; + case OCTEON_HSH_IVW(1): + return crypto->zuc_fsm[0]; + case OCTEON_HSH_IVW(2): + return crypto->zuc_fsm[1]; + default: + g_assert_not_reached(); + } + } + + if (crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_SNOW3G) { + if (sel >=3D OCTEON_SNOW3G_LFSR(0) && + sel <=3D OCTEON_SNOW3G_LFSR(7)) { + unsigned int idx =3D sel - OCTEON_SNOW3G_LFSR(0); + + return ((uint64_t)crypto->snow3g_lfsr[idx * 2] << 32) | + crypto->snow3g_lfsr[idx * 2 + 1]; + } + switch (sel) { + case OCTEON_SNOW3G_RESULT_SEL: + return crypto->snow3g_result; + case OCTEON_SNOW3G_FSM(0): + case OCTEON_SNOW3G_FSM(1): + case OCTEON_SNOW3G_FSM(2): + return crypto->snow3g_fsm[sel - OCTEON_SNOW3G_FSM(0)]; + default: + break; + } + } + + if (crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_SHA3 && + octeon_sha3_is_dat_sel(sel)) { + int sha3_pos =3D octeon_sha3_dat_pos_from_sel(sel); + + return octeon_sha3_lane_to_reg(crypto->sha3_state[sha3_pos]); + } + + if (sel >=3D OCTEON_HSH_DATW(0) && + sel <=3D OCTEON_HSH_DATW(15)) { + return crypto->hsh_datw[sel - OCTEON_HSH_DATW(0)]; + } + return crypto->hsh_ivw[sel - OCTEON_HSH_IVW(0)]; +} + +#define OCTEON_HSH_MF_DATW(N) \ +uint64_t helper_octeon_cp2_mf_hsh_datw ## N(CPUMIPSState *env) \ +{ \ + return octeon_hsh_mf_window(&env->octeon_crypto, \ + OCTEON_HSH_DATW(N)); \ +} +OCTEON_HSH_MF_DATW(0) +OCTEON_HSH_MF_DATW(1) +OCTEON_HSH_MF_DATW(2) +OCTEON_HSH_MF_DATW(3) +OCTEON_HSH_MF_DATW(4) +OCTEON_HSH_MF_DATW(5) +OCTEON_HSH_MF_DATW(6) +OCTEON_HSH_MF_DATW(7) +OCTEON_HSH_MF_DATW(8) +OCTEON_HSH_MF_DATW(9) +OCTEON_HSH_MF_DATW(10) +OCTEON_HSH_MF_DATW(11) +OCTEON_HSH_MF_DATW(12) +OCTEON_HSH_MF_DATW(13) +OCTEON_HSH_MF_DATW(14) +OCTEON_HSH_MF_DATW(15) +#undef OCTEON_HSH_MF_DATW + +#define OCTEON_HSH_MF_IVW(N) \ +uint64_t helper_octeon_cp2_mf_hsh_ivw ## N(CPUMIPSState *env) \ +{ \ + return octeon_hsh_mf_window(&env->octeon_crypto, \ + OCTEON_HSH_IVW(N)); \ +} +OCTEON_HSH_MF_IVW(0) +OCTEON_HSH_MF_IVW(1) +OCTEON_HSH_MF_IVW(2) +OCTEON_HSH_MF_IVW(3) +OCTEON_HSH_MF_IVW(4) +OCTEON_HSH_MF_IVW(5) +OCTEON_HSH_MF_IVW(6) +OCTEON_HSH_MF_IVW(7) +#undef OCTEON_HSH_MF_IVW uint64_t helper_octeon_cp2_mf_sha3_dat24(CPUMIPSState *env) { MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; @@ -1591,6 +2062,105 @@ static bool octeon_zuc_store_shared(MIPSOcteonCrypt= oState *crypto, g_assert_not_reached(); } } +static void octeon_hsh_mt_datw(MIPSOcteonCryptoState *crypto, + unsigned int index, uint64_t value) +{ + uint32_t sel =3D OCTEON_HSH_DATW(index); + + if (octeon_zuc_store_shared(crypto, sel, value)) { + return; + } + if (index =3D=3D 15) { + crypto->hsh_datw[15] =3D value; + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA512); + octeon_sha512_transform(crypto); + } else { + octeon_store_shared_hsh_window(crypto, sel, value); + } +} + +static void octeon_hsh_mt_ivw(MIPSOcteonCryptoState *crypto, + unsigned int index, uint64_t value) +{ + uint32_t sel =3D OCTEON_HSH_IVW(index); + + if (!octeon_zuc_store_shared(crypto, sel, value)) { + octeon_store_shared_hsh_window(crypto, sel, value); + } +} + +#define OCTEON_HSH_MT_DATW(N) \ +void helper_octeon_cp2_mt_hsh_datw ## N(CPUMIPSState *env, uint64_t value)= \ +{ \ + octeon_hsh_mt_datw(&env->octeon_crypto, N, value); \ +} +OCTEON_HSH_MT_DATW(0) +OCTEON_HSH_MT_DATW(1) +OCTEON_HSH_MT_DATW(2) +OCTEON_HSH_MT_DATW(3) +OCTEON_HSH_MT_DATW(4) +OCTEON_HSH_MT_DATW(5) +OCTEON_HSH_MT_DATW(6) +OCTEON_HSH_MT_DATW(7) +OCTEON_HSH_MT_DATW(8) +OCTEON_HSH_MT_DATW(9) +OCTEON_HSH_MT_DATW(10) +OCTEON_HSH_MT_DATW(11) +OCTEON_HSH_MT_DATW(12) +OCTEON_HSH_MT_DATW(13) +OCTEON_HSH_MT_DATW(14) +OCTEON_HSH_MT_DATW(15) +#undef OCTEON_HSH_MT_DATW + +#define OCTEON_HSH_MT_IVW(N) \ +void helper_octeon_cp2_mt_hsh_ivw ## N(CPUMIPSState *env, uint64_t value) \ +{ \ + octeon_hsh_mt_ivw(&env->octeon_crypto, N, value); \ +} +OCTEON_HSH_MT_IVW(0) +OCTEON_HSH_MT_IVW(1) +OCTEON_HSH_MT_IVW(2) +OCTEON_HSH_MT_IVW(3) +OCTEON_HSH_MT_IVW(4) +OCTEON_HSH_MT_IVW(5) +OCTEON_HSH_MT_IVW(6) +OCTEON_HSH_MT_IVW(7) +#undef OCTEON_HSH_MT_IVW + +void helper_octeon_cp2_mt_hsh_startsha_compat(CPUMIPSState *env, + uint64_t value) +{ + env->octeon_crypto.hsh_dat[7] =3D value; + octeon_sha1_transform(&env->octeon_crypto); +} + +void helper_octeon_cp2_mt_hsh_startmd5(CPUMIPSState *env, uint64_t value) +{ + env->octeon_crypto.hsh_dat[7] =3D value; + octeon_md5_transform(&env->octeon_crypto); +} + +void helper_octeon_cp2_mt_hsh_startsha256(CPUMIPSState *env, uint64_t valu= e) +{ + env->octeon_crypto.hsh_dat[7] =3D value; + octeon_sha256_transform(&env->octeon_crypto); +} + +void helper_octeon_cp2_mt_hsh_startsha(CPUMIPSState *env, uint64_t value) +{ + env->octeon_crypto.hsh_dat[7] =3D value; + octeon_sha1_transform(&env->octeon_crypto); +} + +void helper_octeon_cp2_mt_hsh_startsha512(CPUMIPSState *env, uint64_t valu= e) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->hsh_datw[15] =3D value; + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA512); + octeon_sha512_transform(crypto); +} + static void octeon_sha3_mt_dat(MIPSOcteonCryptoState *crypto, uint32_t sel, uint64_t value) { --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207842; cv=none; d=zohomail.com; s=zohoarc; b=apYHzcbjJ2CsCLg/dyGoPeExJyfvXlKBEpf90IMLe+Gu2RuQJQUYkEQ7y7cGmL55SYwh2mRmkeaChmEw8CgiroZpoUR/fboCg3QFilnoMI4UYQ5LNcn3FvX0y21fYApoGJPKaqLLivoh+gMZh+3NLzU2ibMf93ZTD1Idrp+Ahu4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207842; 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=O0jVrLkSHknvVMOmXWoSrZsG6N2tjdXBVtgmIsqR7xU=; b=d5h5uPgvp95BGz3AiafvUiIzQhheE2At1aVbNAoXacerdfSuD9tbU2L4gE+bg+OWi7vQV364p1g3WXJ0roT1p0YawgCCQ7FT3sODITBLkyzXVlvGAY2zsr6EOzW367YjAw2I3KNbTrFwMG4xbtHL8ueTVucDzyHfE3ZL34WdnwY= 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 1779207842632320.4242965224438; Tue, 19 May 2026 09:24:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDx-0006yK-P5; Tue, 19 May 2026 12:23:17 -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 1wPNDw-0006wq-1d for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:16 -0400 Received: from mail-oo1-xc2e.google.com ([2607:f8b0:4864:20::c2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDt-0000pV-1o for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:15 -0400 Received: by mail-oo1-xc2e.google.com with SMTP id 006d021491bc7-6966f99716fso1921289eaf.0 for ; Tue, 19 May 2026 09:23:12 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207792; x=1779812592; 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=O0jVrLkSHknvVMOmXWoSrZsG6N2tjdXBVtgmIsqR7xU=; b=XMmjWcvFg2tB+3A4b1w/VNS0kgzOAqicYKmV6TWX6PUsrtG/dOXSHG0p9/zmMl2yYd PCLwvcGsOl55UGpqVx+2T8IUyiG/NO0BSAyr329oxqZlEevjzfq+hQG9vwdTiEarXRsU WSLeEeRxaDc7tQkyRfON/TZnG0Xe/VX0FAIsBg7/lN66IBLgRF/wrVG8fJFZTHPDHuzW QjVzTBZnWo5sZyvjSlZagzRYWXXIFa5e1SEdKMhNDbqykDTJCfzrcfYxpF96KSwz1hYf PBF8go3h1FK2MzyZH5VwimqGK+j/pecJQSF6kZXzX4VHBHtF2aLh2mj8HIl+gilDenO5 hlNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207792; x=1779812592; 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=O0jVrLkSHknvVMOmXWoSrZsG6N2tjdXBVtgmIsqR7xU=; b=kTi6PdooQMt6PVRu4EMfANHquoVDmsjf1locjukAMHZIoWHa4vrZk7hxuh8NIw5U+K 8OMm9jQyPpGmH9iJpaYHcRCAxTZUCJ5PX06QLWyYhlXeV3rqMZHeqTokc94g4lH8ZIcv V2f2gnAuOQBldZW3nhFRtX66BxDGaArsdAAQO27O5WwnvKbSOqb9hvjQ/CILhRLzdpRI CuoMi4i2Sfz/X1alkmjdaINdVhlPq4q7AR8JfJaOoRcc7mUdMw4Gj2kg4IMaAo0dvh4P zLyDqEaGdCO+aURGzjp1dZBjM1X3SLukhoGctwV/WhyLBwFqIZywvc1+qMan4yb81/Bq 7stw== X-Gm-Message-State: AOJu0YwTdhowmhL5uZR6F1uzrcr5zZ2u9cdoVSHvY47xq63KX5fqtnOJ hID3xJv7IzfIs0c26BPtwgZwjgfBpjRskZHWCpbhel0lOUIJMLTrWLk/rijasA== X-Gm-Gg: Acq92OHqqsjhYauih18vhhu7Gv6zd5Ozy1vNL0+cxVal345RMsc2s6WAfDvgQ2VAE4N OxziaUm7iflY5FzPumQJ8ZgPnrgvdT4YukHlMQaM/8arRIlmUQbc4Vc1vRr1cCsDeK9fQy9OYLb KKxYv2akGfRNt8nm7YrtdtSUWBuSigJ9DwCpoJQ69yPe5s5zrE9UftrwJLgfLQH1GIiGy2QnmMp +nyL8K6pavWTJwW+wG3q/3Yu2VI61p0jCl3SYIhVf+xoAnl7PYIfuQxn4fUoOtskpdXlGBAWu+2 zxIpKPC9t17aT1vIE2qnLhgDU4Yhej8ae3agi/VMz+0A+fTvaJW+cjzUQIftotkr0JcY/8dg6kR a1sXdbsol7gRx9VdSFgMoC3hxdQ9zDw096tuxxitQXVOAU5qdGgwl8sJozDEQ493JYDpd6LGGGL GBSHiIhhQtWXUhqfehUGW8gU7P6L6ZhMQg3X1AYSX+Qtglp308QZeNqRYL42JEW6v3rXTOlKknm ViAO5UNeN2OBMLFeF9NZKgWYagcZHZ1AcACcv/QDZiDhIzKWVg314uzEq11myvZ2zAjQ9Wm2Ig5 mZs= X-Received: by 2002:a05:6820:627:b0:69b:95dd:46f0 with SMTP id 006d021491bc7-69c9437cddemr13083934eaf.33.1779207791596; Tue, 19 May 2026 09:23:11 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:38 -0600 Subject: [PATCH v9 36/40] target/mips: add Octeon CHORD and LLM COP2 helpers MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-36-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::c2e; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc2e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207843335158500 Add the Octeon CHORD hardware register access path and the LLM 36-bit and 64-bit read and write windows. Model both CHORD access forms, including the RDHWR $30 path and the legacy DMFC2 alias. Implement sparse backing storage for the two LLM sets so user-mode code can save, restore, and probe the architectural state without allocating a full hardware-sized backing array. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Split CHORD and LLM helpers into their own COP2 helper patch. - Replace generic selector dispatch with per-operation LLM helpers. - Add matching helper.h declarations with the helper implementation. Changes v1 -> v2: - Use neutral selector-slot wording for the LLM/CHORD alias comment. - Add selector dispatch updates in octeon_translate.c after moving COP2 decode out of translate.c. (suggested by Philippe Mathieu-Daud=C3=A9) Changes v5 -> v6: - Rename sparse LLM backing fields from llm_narrow/llm_wide to llm36/llm64 to match the 36-bit and 64-bit selector windows. --- target/mips/cpu.c | 67 ++++++++++++++++++++++++++ target/mips/cpu.h | 5 ++ target/mips/helper.h | 9 ++++ target/mips/internal.h | 3 ++ target/mips/system/machine.c | 67 ++++++++++++++++++++++++++ target/mips/tcg/octeon_crypto.c | 103 ++++++++++++++++++++++++++++++++++++= ++++ target/mips/tcg/op_helper.c | 6 +++ target/mips/tcg/translate.c | 8 ++++ 8 files changed, 268 insertions(+) diff --git a/target/mips/cpu.c b/target/mips/cpu.c index 57935adea4..a2b9f6634f 100644 --- a/target/mips/cpu.c +++ b/target/mips/cpu.c @@ -27,6 +27,7 @@ #include "internal.h" #include "kvm_mips.h" #include "qemu/module.h" +#include "qemu/qtree.h" #include "system/kvm.h" #include "system/qtest.h" #include "hw/core/qdev-properties.h" @@ -183,6 +184,57 @@ static bool mips_cpu_has_work(CPUState *cs) =20 #include "cpu-defs.c.inc" =20 +static gint mips_octeon_u64_tree_compare(gconstpointer a, gconstpointer b, + gpointer user_data) +{ + uint64_t av =3D *(const uint64_t *)a; + uint64_t bv =3D *(const uint64_t *)b; + + return (av > bv) - (av < bv); +} + +QTree *mips_octeon_llm_tree_new(void) +{ + return q_tree_new_full(mips_octeon_u64_tree_compare, + NULL, g_free, g_free); +} + +uint64_t mips_octeon_llm_load(QTree *tree, uint64_t addr) +{ + uint64_t key =3D addr; + uint64_t *value =3D tree ? q_tree_lookup(tree, &key) : NULL; + + return value ? *value : 0; +} + +void mips_octeon_llm_store(QTree **treep, uint64_t addr, uint64_t value) +{ + uint64_t *key; + uint64_t *stored; + + if (!*treep) { + *treep =3D mips_octeon_llm_tree_new(); + } + + key =3D g_new(uint64_t, 1); + stored =3D g_new(uint64_t, 1); + *key =3D addr; + *stored =3D value; + q_tree_replace(*treep, key, stored); +} + +static void mips_octeon_destroy_llm_state(MIPSOcteonCryptoState *crypto) +{ + if (crypto->llm36) { + q_tree_destroy(crypto->llm36); + crypto->llm36 =3D NULL; + } + if (crypto->llm64) { + q_tree_destroy(crypto->llm64); + crypto->llm64 =3D NULL; + } +} + static void mips_cpu_reset_hold(Object *obj, ResetType type) { CPUState *cs =3D CPU(obj); @@ -194,6 +246,7 @@ static void mips_cpu_reset_hold(Object *obj, ResetType = type) mcc->parent_phases.hold(obj, type); } =20 + mips_octeon_destroy_llm_state(&env->octeon_crypto); memset(env, 0, offsetof(CPUMIPSState, end_reset_fields)); =20 /* Reset registers to their default values */ @@ -248,6 +301,9 @@ static void mips_cpu_reset_hold(Object *obj, ResetType = type) env->active_fpu.fcr31 =3D env->cpu_model->CP1_fcr31; env->msair =3D env->cpu_model->MSAIR; env->insn_flags =3D env->cpu_model->insn_flags; + if (env->insn_flags & INSN_OCTEON) { + env->octeon_crypto.chord =3D 1; + } =20 #if defined(CONFIG_USER_ONLY) env->CP0_Status =3D (MIPS_HFLAG_UM << CP0St_KSU); @@ -264,6 +320,9 @@ static void mips_cpu_reset_hold(Object *obj, ResetType = type) * hardware registers. */ env->CP0_HWREna |=3D 0x0000000F; + if (env->insn_flags & INSN_OCTEON) { + env->CP0_HWREna |=3D 0x40000000u; + } if (env->CP0_Config1 & (1 << CP0C1_FP)) { env->CP0_Status |=3D (1 << CP0St_CU1); } @@ -422,6 +481,13 @@ static void mips_cpu_reset_hold(Object *obj, ResetType= type) #endif } =20 +static void mips_cpu_finalize(Object *obj) +{ + MIPSCPU *cpu =3D MIPS_CPU(obj); + + mips_octeon_destroy_llm_state(&cpu->env.octeon_crypto); +} + static void mips_cpu_disas_set_info(const CPUState *cs, disassemble_info *= info) { const MIPSCPU *cpu =3D MIPS_CPU(cs); @@ -650,6 +716,7 @@ static const TypeInfo mips_cpu_type_info =3D { .instance_size =3D sizeof(MIPSCPU), .instance_align =3D __alignof(MIPSCPU), .instance_init =3D mips_cpu_initfn, + .instance_finalize =3D mips_cpu_finalize, .abstract =3D true, .class_size =3D sizeof(MIPSCPUClass), .class_init =3D mips_cpu_class_init, diff --git a/target/mips/cpu.h b/target/mips/cpu.h index 801893b67f..d55d8c5218 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -11,6 +11,7 @@ #include "fpu/softfloat-types.h" #include "hw/core/clock.h" #include "mips-defs.h" +#include "qemu/qtree.h" =20 typedef struct CPUMIPSTLBContext CPUMIPSTLBContext; =20 @@ -582,6 +583,10 @@ typedef struct MIPSOcteonCryptoState { uint32_t zuc_lfsr[16]; uint32_t zuc_window[3]; uint32_t zuc_tresult; + uint64_t llm_data[2]; + uint64_t chord; + QTree *llm36; + QTree *llm64; } MIPSOcteonCryptoState; =20 typedef struct CPUArchState { diff --git a/target/mips/helper.h b/target/mips/helper.h index 6d6ceaea08..fafcca4151 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -136,6 +136,14 @@ DEF_HELPER_2(octeon_cp2_mt_hsh_startmd5, void, env, i6= 4) DEF_HELPER_2(octeon_cp2_mt_hsh_startsha256, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_hsh_startsha, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_hsh_startsha512, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_llm_read_addr0, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_llm_write_addr0, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_llm_read64_addr0, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_llm_write64_addr0, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_llm_read_addr1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_llm_write_addr1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_llm_read64_addr1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_llm_write64_addr1, void, env, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) @@ -307,6 +315,7 @@ DEF_HELPER_1(rdhwr_cc, tl, env) DEF_HELPER_1(rdhwr_ccres, tl, env) DEF_HELPER_1(rdhwr_performance, tl, env) DEF_HELPER_1(rdhwr_xnp, tl, env) +DEF_HELPER_1(rdhwr_chord, tl, env) DEF_HELPER_2(pmon, void, env, int) DEF_HELPER_1(wait, void, env) =20 diff --git a/target/mips/internal.h b/target/mips/internal.h index aab77b1b25..c5c286872e 100644 --- a/target/mips/internal.h +++ b/target/mips/internal.h @@ -93,6 +93,9 @@ extern const int mips_defs_number; =20 int mips_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg); int mips_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg); +QTree *mips_octeon_llm_tree_new(void); +uint64_t mips_octeon_llm_load(QTree *tree, uint64_t addr); +void mips_octeon_llm_store(QTree **treep, uint64_t addr, uint64_t value); =20 #define USEG_LIMIT ((target_ulong)(int32_t)0x7FFFFFFFUL) #define KSEG0_BASE ((target_ulong)(int32_t)0x80000000UL) diff --git a/target/mips/system/machine.c b/target/mips/system/machine.c index 9bcb066245..1ec05f0600 100644 --- a/target/mips/system/machine.c +++ b/target/mips/system/machine.c @@ -131,6 +131,69 @@ static const VMStateDescription vmstate_octeon_multipl= ier_tc =3D { } }; =20 +typedef struct OcteonLLMTreePutData { + QEMUFile *f; +} OcteonLLMTreePutData; + +static gboolean put_octeon_llm_tree_entry(gpointer key, gpointer value, + gpointer user_data) +{ + OcteonLLMTreePutData *data =3D user_data; + + qemu_put_be64(data->f, *(uint64_t *)key); + qemu_put_be64(data->f, *(uint64_t *)value); + return false; +} + +static int put_octeon_llm_tree(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmde= sc) +{ + QTree *tree =3D *(QTree **)pv; + OcteonLLMTreePutData data =3D { .f =3D f }; + uint32_t nnodes =3D tree ? q_tree_nnodes(tree) : 0; + + qemu_put_be32(f, nnodes); + if (tree) { + q_tree_foreach(tree, put_octeon_llm_tree_entry, &data); + } + + return 0; +} + +static int get_octeon_llm_tree(QEMUFile *f, void *pv, size_t size, + const VMStateField *field) +{ + QTree **treep =3D pv; + uint32_t nnodes =3D qemu_get_be32(f); + + if (*treep) { + q_tree_destroy(*treep); + } + *treep =3D mips_octeon_llm_tree_new(); + + for (uint32_t i =3D 0; i < nnodes; i++) { + uint64_t addr =3D qemu_get_be64(f); + uint64_t value =3D qemu_get_be64(f); + + mips_octeon_llm_store(treep, addr, value); + } + + return 0; +} + +static const VMStateInfo vmstate_info_octeon_llm_tree =3D { + .name =3D "octeon_llm_tree", + .get =3D get_octeon_llm_tree, + .put =3D put_octeon_llm_tree, +}; + +#define VMSTATE_OCTEON_LLM_TREE(_f, _s) { \ + .name =3D stringify(_f), \ + .version_id =3D 1, \ + .info =3D &vmstate_info_octeon_llm_tree, \ + .offset =3D vmstate_offset_pointer(_s, _f, QTree), \ +} + /* MVP state */ =20 static const VMStateDescription vmstate_mvp =3D { @@ -316,6 +379,10 @@ static const VMStateDescription mips_vmstate_octeon_cr= ypto =3D { VMSTATE_UINT32_ARRAY(env.octeon_crypto.zuc_lfsr, MIPSCPU, 16), VMSTATE_UINT32_ARRAY(env.octeon_crypto.zuc_window, MIPSCPU, 3), VMSTATE_UINT32(env.octeon_crypto.zuc_tresult, MIPSCPU), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.llm_data, MIPSCPU, 2), + VMSTATE_UINT64(env.octeon_crypto.chord, MIPSCPU), + VMSTATE_OCTEON_LLM_TREE(env.octeon_crypto.llm36, MIPSCPU), + VMSTATE_OCTEON_LLM_TREE(env.octeon_crypto.llm64, MIPSCPU), VMSTATE_END_OF_LIST() } }; diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index 6282226cfc..5a8b5b6c2b 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -30,11 +30,48 @@ #define OCTEON_SNOW3G_RESULT_SEL OCTEON_HSH_IVW(0) #define OCTEON_SNOW3G_FSM(N) OCTEON_HSH_IVW(1 + (N)) =20 +#define OCTEON_LLM_NARROW_MASK ((1ULL << 36) - 1) + +static uint64_t octeon_llm_pack_narrow(uint64_t value) +{ + value &=3D OCTEON_LLM_NARROW_MASK; + return value | ((uint64_t)(ctpop64(value) & 1) << 36); +} + +static void octeon_llm_read(MIPSOcteonCryptoState *crypto, unsigned int se= t, + uint64_t addr, bool wide) +{ + uint64_t value; + + if (wide) { + value =3D mips_octeon_llm_load(crypto->llm64, addr); + } else { + value =3D octeon_llm_pack_narrow( + mips_octeon_llm_load(crypto->llm36, addr)); + } + + crypto->llm_data[set] =3D value; +} + +static void octeon_llm_write(MIPSOcteonCryptoState *crypto, unsigned int s= et, + uint64_t addr, bool wide) +{ + uint64_t value =3D crypto->llm_data[set]; + + if (wide) { + mips_octeon_llm_store(&crypto->llm64, addr, value); + } else { + mips_octeon_llm_store(&crypto->llm36, addr, + value & OCTEON_LLM_NARROW_MASK); + } +} + static inline void octeon_set_shared_mode(MIPSOcteonCryptoState *crypto, MIPSOcteonSharedMode mode) { crypto->shared_mode =3D mode; } + static inline uint32_t octeon_crc_reflect32_by_byte(uint32_t v) { return bswap32(revbit32(v)); @@ -94,6 +131,7 @@ static void octeon_crc_update_reflect(MIPSOcteonCryptoSt= ate *crypto, =20 octeon_crc_set_state_reflect(crypto, crc); } + static uint64_t octeon_gfm_reduce64(Int128 product, uint8_t poly) { uint64_t lo =3D int128_getlo(product); @@ -136,6 +174,7 @@ static void octeon_gfm_mul_reflect(MIPSOcteonCryptoStat= e *crypto, uint64_t data) crypto->gfm_poly, crypto->gfm_reflect_resinp); crypto->gfm_reflect_xor0 =3D 0; } + static inline void octeon_hsh_load_reg_words_be(uint64_t reg, uint32_t *hi, uint32_t *l= o) { @@ -497,6 +536,7 @@ static void octeon_sha512_transform(MIPSOcteonCryptoSta= te *crypto) crypto->hsh_ivw[6] +=3D g; crypto->hsh_ivw[7] +=3D h; } + static const uint64_t octeon_sha3_round_constants[24] =3D { 0x0000000000000001ULL, 0x0000000000008082ULL, 0x800000000000808aULL, 0x8000000080008000ULL, @@ -631,6 +671,7 @@ static void octeon_store_shared_hsh_window(MIPSOcteonCr= yptoState *crypto, g_assert_not_reached(); } } + static const uint8_t octeon_zuc_s0[256] =3D { 0x3e, 0x72, 0x5b, 0x47, 0xca, 0xe0, 0x00, 0x33, 0x04, 0xd1, 0x54, 0x98, 0x09, 0xb9, 0x6d, 0xcb, @@ -901,6 +942,7 @@ static bool octeon_zuc_is_shared_dmtc2_sel(uint32_t sel) return false; } } + static const uint8_t octeon_snow3g_sr[256] =3D { 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, @@ -1124,6 +1166,7 @@ static void octeon_snow3g_more(MIPSOcteonCryptoState = *crypto) octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SNOW3G); octeon_snow3g_queue_result(crypto); } + static int octeon_aes_key_bits(const MIPSOcteonCryptoState *crypto) { enum { @@ -1143,6 +1186,7 @@ static int octeon_aes_key_bits(const MIPSOcteonCrypto= State *crypto) return 0; } } + static inline uint32_t octeon_sms4_t(uint32_t x) { x =3D sm4_subword(x); @@ -1193,6 +1237,7 @@ static void octeon_sms4_crypt_block(const uint8_t *in= , uint8_t *out, stl_be_p(out + 8, x[33]); stl_be_p(out + 12, x[32]); } + static const uint8_t octeon_des_ip[64] =3D { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, @@ -1620,6 +1665,7 @@ static void octeon_kasumi_crypt_common(MIPSOcteonCryp= toState *crypto, } crypto->des3_result =3D block; } + static void octeon_aes_load_key(const MIPSOcteonCryptoState *crypto, uint8_t *key, size_t keylen) { @@ -1644,6 +1690,7 @@ static void octeon_aes_store_block(uint64_t regs[2], = const uint8_t *block) regs[0] =3D ldq_be_p(block); regs[1] =3D ldq_be_p(block + 8); } + static const uint8_t camellia_sbox1[256] =3D { 112, 130, 44, 236, 179, 39, 192, 229, 228, 133, 87, 53, 234, 12, 174, 65, 35, 239, 107, 147, 69, 25, 165, 33, 237, 14, 79, 78, @@ -1754,6 +1801,7 @@ static void octeon_camellia_fl_layer(MIPSOcteonCrypto= State *crypto, camellia_flinv(state, key) : camellia_fl(state, key); } + static void octeon_sms4_crypt_common(MIPSOcteonCryptoState *crypto, bool encrypt, bool cbc) { @@ -1794,6 +1842,7 @@ static void octeon_sms4_crypt_common(MIPSOcteonCrypto= State *crypto, octeon_aes_store_block(crypto->aes_iv, encrypt ? out : next_iv); } } + static void octeon_aes_encrypt_common(MIPSOcteonCryptoState *crypto, bool = cbc) { AES_KEY key; @@ -1861,6 +1910,7 @@ static void octeon_aes_decrypt_common(MIPSOcteonCrypt= oState *crypto, bool cbc) octeon_aes_store_block(crypto->aes_iv, next_iv); } } + static void octeon_gfm_mul(const uint64_t x[2], const uint64_t y[2], uint16_t poly, uint64_t out[2]) { @@ -1894,6 +1944,7 @@ static void octeon_gfm_mul(const uint64_t x[2], const= uint64_t y[2], out[0] =3D zh; out[1] =3D zl; } + static uint64_t octeon_hsh_mf_window(MIPSOcteonCryptoState *crypto, uint32_t sel) { @@ -2004,6 +2055,7 @@ OCTEON_HSH_MF_IVW(5) OCTEON_HSH_MF_IVW(6) OCTEON_HSH_MF_IVW(7) #undef OCTEON_HSH_MF_IVW + uint64_t helper_octeon_cp2_mf_sha3_dat24(CPUMIPSState *env) { MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; @@ -2013,10 +2065,12 @@ uint64_t helper_octeon_cp2_mf_sha3_dat24(CPUMIPSSta= te *env) } return 0; } + uint64_t helper_octeon_cp2_mf_crc_iv_reflect(CPUMIPSState *env) { return octeon_crc_reflect32_by_byte(env->octeon_crypto.crc_iv); } + static bool octeon_zuc_store_shared(MIPSOcteonCryptoState *crypto, uint32_t sel, uint64_t value) { @@ -2062,6 +2116,7 @@ static bool octeon_zuc_store_shared(MIPSOcteonCryptoS= tate *crypto, g_assert_not_reached(); } } + static void octeon_hsh_mt_datw(MIPSOcteonCryptoState *crypto, unsigned int index, uint64_t value) { @@ -2226,6 +2281,7 @@ void helper_octeon_cp2_mt_sha3_startop(CPUMIPSState *= env, uint64_t value) octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA3); octeon_sha3_permute(crypto); } + void helper_octeon_cp2_mt_aes_enc_cbc1(CPUMIPSState *env, uint64_t value) { MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; @@ -2257,6 +2313,7 @@ void helper_octeon_cp2_mt_aes_dec1(CPUMIPSState *env,= uint64_t value) crypto->aes_input[1] =3D value; octeon_aes_decrypt_common(crypto, false); } + void helper_octeon_cp2_mt_camellia_fl(CPUMIPSState *env, uint64_t value) { octeon_camellia_fl_layer(&env->octeon_crypto, value, false); @@ -2271,6 +2328,7 @@ void helper_octeon_cp2_mt_camellia_round(CPUMIPSState= *env, uint64_t value) { octeon_camellia_round(&env->octeon_crypto, value); } + void helper_octeon_cp2_mt_des3_enc_cbc(CPUMIPSState *env, uint64_t value) { octeon_3des_crypt_common(&env->octeon_crypto, value, true, true); @@ -2300,6 +2358,7 @@ void helper_octeon_cp2_mt_des3_dec(CPUMIPSState *env,= uint64_t value) { octeon_3des_crypt_common(&env->octeon_crypto, value, false, false); } + void helper_octeon_cp2_mt_gfm_xormul1_reflect(CPUMIPSState *env, uint64_t value) { @@ -2323,6 +2382,47 @@ void helper_octeon_cp2_mt_gfm_xormul1(CPUMIPSState *= env, uint64_t value) } crypto->gfm_xor0 =3D 0; } + +void helper_octeon_cp2_mt_llm_read_addr0(CPUMIPSState *env, uint64_t value) +{ + octeon_llm_read(&env->octeon_crypto, 0, value, false); +} + +void helper_octeon_cp2_mt_llm_write_addr0(CPUMIPSState *env, uint64_t valu= e) +{ + octeon_llm_write(&env->octeon_crypto, 0, value, false); +} + +void helper_octeon_cp2_mt_llm_read64_addr0(CPUMIPSState *env, uint64_t val= ue) +{ + octeon_llm_read(&env->octeon_crypto, 0, value, true); +} + +void helper_octeon_cp2_mt_llm_write64_addr0(CPUMIPSState *env, uint64_t va= lue) +{ + octeon_llm_write(&env->octeon_crypto, 0, value, true); +} + +void helper_octeon_cp2_mt_llm_read_addr1(CPUMIPSState *env, uint64_t value) +{ + octeon_llm_read(&env->octeon_crypto, 1, value, false); +} + +void helper_octeon_cp2_mt_llm_write_addr1(CPUMIPSState *env, uint64_t valu= e) +{ + octeon_llm_write(&env->octeon_crypto, 1, value, false); +} + +void helper_octeon_cp2_mt_llm_read64_addr1(CPUMIPSState *env, uint64_t val= ue) +{ + octeon_llm_read(&env->octeon_crypto, 1, value, true); +} + +void helper_octeon_cp2_mt_llm_write64_addr1(CPUMIPSState *env, uint64_t va= lue) +{ + octeon_llm_write(&env->octeon_crypto, 1, value, true); +} + void helper_octeon_cp2_mt_sms4_enc_cbc1(CPUMIPSState *env, uint64_t value) { MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; @@ -2354,6 +2454,7 @@ void helper_octeon_cp2_mt_sms4_dec1(CPUMIPSState *env= , uint64_t value) crypto->aes_input[1] =3D value; octeon_sms4_crypt_common(crypto, false, false); } + void helper_octeon_cp2_mt_snow3g_start(CPUMIPSState *env, uint64_t value) { octeon_snow3g_start(&env->octeon_crypto, value); @@ -2364,6 +2465,7 @@ void helper_octeon_cp2_mt_snow3g_more(CPUMIPSState *e= nv, uint64_t value) (void)value; octeon_snow3g_more(&env->octeon_crypto); } + void helper_octeon_cp2_mt_zuc_start(CPUMIPSState *env, uint64_t value) { octeon_zuc_start(&env->octeon_crypto, value); @@ -2373,6 +2475,7 @@ void helper_octeon_cp2_mt_zuc_more(CPUMIPSState *env,= uint64_t value) { octeon_zuc_more(&env->octeon_crypto, value); } + void helper_octeon_cp2_mt_crc_write_iv_reflect(CPUMIPSState *env, uint64_t value) { diff --git a/target/mips/tcg/op_helper.c b/target/mips/tcg/op_helper.c index 4502ae2b5b..3e586e3049 100644 --- a/target/mips/tcg/op_helper.c +++ b/target/mips/tcg/op_helper.c @@ -255,6 +255,12 @@ target_ulong helper_rdhwr_xnp(CPUMIPSState *env) return (env->CP0_Config5 >> CP0C5_XNP) & 1; } =20 +target_ulong helper_rdhwr_chord(CPUMIPSState *env) +{ + check_hwrena(env, 30, GETPC()); + return env->octeon_crypto.chord; +} + void helper_pmon(CPUMIPSState *env, int function) { function /=3D 2; diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c index 123d2c89c3..1f44932882 100644 --- a/target/mips/tcg/translate.c +++ b/target/mips/tcg/translate.c @@ -10925,6 +10925,14 @@ void gen_rdhwr(DisasContext *ctx, int rt, int rd, = int sel) } break; #endif + case 30: + if (!(ctx->insn_flags & INSN_OCTEON)) { + gen_reserved_instruction(ctx); + break; + } + gen_helper_rdhwr_chord(t0, tcg_env); + gen_store_gpr(t0, rt); + break; default: /* Invalid */ MIPS_INVAL("rdhwr"); gen_reserved_instruction(ctx); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207928; cv=none; d=zohomail.com; s=zohoarc; b=d6Xndg3oBFiNFdtWMksvTb5nNNGeMaCIv3MHWeYBRGAeV4k6acKDD2jVUekN7EacIGIk2pXCJm4ZcvkN3FcNcT2Iu/QHqThluMPZct7AkDwCuMykHdEEFhStswyIdN+EnVqkG3JOGVd5MhNaHmWnpyObx7LHzL/1D65tjjOFmQw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207928; 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=e70vAixV9F+yNzAASYBW3Tp0azLrWZjeK42ZgYoX254=; b=m9y6heHY5feUWVZLZ0CxqFVK/pwqjNUTsaa21STJn4PWbDd0tKny7pYBWz7MYS+dVWza4FiKCuaSRfrpAd3ZS3KoML8awCX4IcJmVMpdG6ZO7Sjj837EPe63zRPvwcMubQyXXpAwegOfunw74795LC7td/fbKJmQe0Ts17o1sdI= 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 1779207928457104.1355287281084; Tue, 19 May 2026 09:25:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNE1-00070w-EJ; Tue, 19 May 2026 12:23:21 -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 1wPNDz-0006zs-Dc for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:19 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDt-0000qD-U5 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:18 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-404254ffe8aso3212894fac.0 for ; Tue, 19 May 2026 09:23:13 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207793; x=1779812593; 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=e70vAixV9F+yNzAASYBW3Tp0azLrWZjeK42ZgYoX254=; b=Hwboy2OBpX83IXgd4SrZ9edrBtJZK1+a8nuNi6/G8u8LE2ASLOFC7lqVxhOtPrFIlh lJBqOdaTi2g2X5hWeO1j8n7YNy0OgA34byulv1rW0nQ8+EPbmWUlkwRCXFRR4XIf8ntZ XW2A3L12fZouHeAVWAO9Z1LZO568MUPOEoVklZIRDznoJLUfhUeK2Q0dASVQb+q4odLB KCapuMSM0RmqTFx7EL6r8nVGJxs+QkP+aFdunMzt0ikiMUWOnEBsn6jAbelD2w20ynZe mTMmO8M+MAnZgu/RNHpRpp1aGnRxw1B3Y7M1w9kUYtEURlxr776frHMSCxI67sTTNRC0 ZD1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207793; x=1779812593; 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=e70vAixV9F+yNzAASYBW3Tp0azLrWZjeK42ZgYoX254=; b=nd0mavG2fy3gY+jSragVk4pKKeDqfabCrzn9aPSNweoXlW7ZxTuDVcp4VRRD76wuFK cy+Y8iQ5w2HryEoftLdF2MCSICQU3WVHbOyodz+zRiL331HjHi8U6R2/0GLjtsNgLHeF 6SLo35vHsgP/DRPJgcv/IBNBRaFEw5xrmxUMea2bj5gHrzo0MbsT1c1/u82UXYJxNBg9 YvwQRPlAtz2G1um5FUuaJRlC+TkbQhvTHL7Cy3ZccF6aPwi8s66R/dSRMU0WfLr3JrnJ JpldHbvLv/Fx9XplI0ktlLZnCJ5t8qwogOahWeqes7CqFboNYaJ0tWCOb3brks03K+YK y0fA== X-Gm-Message-State: AOJu0Yy+3KS+7gSI1fCDgUzZU4q0UX+66qezEfcKBCA+4DRR7W9UEpjD 1gX5IIOyCsPhfXh7F31EpZppo0/uSrSc9YNpQ4VC9y59+LBBDM3OndGZ X-Gm-Gg: Acq92OEoiw1nz9Oqp8I6FBE2JwyKo1U8FxMNiXqwd9nM+WTaxT+gUHl2JrJcINTfCJ4 jQBBKoeKstmYCfpylTIaD7CRN7RRMNVbDPUwPyAZIbidK3AucQHDUEdgRETTBweJimRtKDLpGbY hkgJm8lAHWN8VtjuXTbJmFAw0cOvq24STKBCPyDcjBPh+S/ZizcOzFFBjSnp+T4NsQ0Wl7X4dmg c8OGpCPgxhY4tvRQ5pedSP0y2/XX/Ijyh1uoYicYZ0UR5cceTuAYFBMeM88gX5aQsU6TGdK10sM JMksnuR8emyrgi0j6XH6mEbgtwJCmVvmePeDUTMLLkLrPZtrSgW0+xpk26IUfXJqxUiAhRdv2ha NYSLFMUlQalVZyQvZOc5bBcdB30K22Gy7dcz4TEe17pnfoBNfL1I3PTfWr4dKxeFhe6luwUa8Fw NjyL00VAOH8vzqYxvnFTLwzNz33KBZK2J3HUnkq/uPmmYtD7SBGsbcDisbr5imP0CmULa56qFYg WlQmgwa5UnJrDwI61sUqzfUO9wb2IBOfOY9+Us33YenkWPJRkPy8v7+KLL5Pp8/ACYH X-Received: by 2002:a05:6871:ea12:b0:417:3930:1b93 with SMTP id 586e51a60fabf-43a2d9b24ffmr10442850fac.6.1779207792622; Tue, 19 May 2026 09:23:12 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:39 -0600 Subject: [PATCH v9 37/40] target/mips: decode Octeon COP2 selectors explicitly MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-37-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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=2001:4860:4864:20::31; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x31.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207930344158500 Decode Octeon CP2 selector operations in octeon.decode instead of first accepting generic CP2 opcodes and re-decoding the selector inside a runtime helper. Emit direct TCG loads and stores for simple COP2 register moves. Use signed 32-bit loads for 32-bit DMFC2 readback, matching MIPS register move semantics, and keep helper calls only for operation selectors and shared-window state that require side effects. Unknown Octeon CP2 selectors hit an explicit CP2_Undef decoder entry. Signed-off-by: James Hilliard --- Changes v8 -> v9: - Use signed direct loads for 32-bit DMFC2 register readback. - Replace the generic selector helper calls with per-operation helper calls. - Document the AESRESINP input latch and readback/result register split. Changes v7 -> v8: - Decode Octeon COP2 selectors explicitly in decodetree. - Use direct TCG loads/stores for simple COP2 register transfers and preserve helper calls for operation selectors with side effects. --- target/mips/helper.h | 1 + target/mips/tcg/octeon.decode | 205 ++++++++++++++++++++++ target/mips/tcg/octeon_translate.c | 342 +++++++++++++++++++++++++++++++++= ++++ 3 files changed, 548 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index fafcca4151..fd57ebbf00 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -145,6 +145,7 @@ DEF_HELPER_2(octeon_cp2_mt_llm_write_addr1, void, env, = i64) DEF_HELPER_2(octeon_cp2_mt_llm_read64_addr1, void, env, i64) DEF_HELPER_2(octeon_cp2_mt_llm_write64_addr1, void, env, i64) =20 + /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) DEF_HELPER_4(swm, void, env, tl, tl, i32) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 1e44c588dd..0ff8c0d7cd 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -97,3 +97,208 @@ LBUX 011111 ..... ..... ..... 00110 001010 @lx LWUX 011111 ..... ..... ..... 10000 001010 @lx LBX 011111 ..... ..... ..... 10110 001010 @lx LDX 011111 ..... ..... ..... 01000 001010 @lx + +# Selector-driven DMFC2/DMTC2 interfaces for Octeon COP2 engines. +&cp2 rt +{ + [ + CVM_MF_HSH_IV0 010010 00001 rt:5 0000 0000 0100 = 1000 &cp2 + CVM_MF_HSH_IV1 010010 00001 rt:5 0000 0000 0100 = 1001 &cp2 + CVM_MF_HSH_IV2 010010 00001 rt:5 0000 0000 0100 = 1010 &cp2 + CVM_MF_HSH_IV3 010010 00001 rt:5 0000 0000 0100 = 1011 &cp2 + CVM_MF_SHA3_DAT24 010010 00001 rt:5 0000 0000 0101 = 0000 &cp2 + CVM_MF_GFM_MUL_REFLECT0 010010 00001 rt:5 0000 0000 0101 = 1000 &cp2 + CVM_MF_GFM_MUL_REFLECT1 010010 00001 rt:5 0000 0000 0101 = 1001 &cp2 + CVM_MF_GFM_RESINP_REFLECT0 010010 00001 rt:5 0000 0000 0101 = 1010 &cp2 + CVM_MF_GFM_RESINP_REFLECT1 010010 00001 rt:5 0000 0000 0101 = 1011 &cp2 + CVM_MF_3DES_KEY0 010010 00001 rt:5 0000 0000 1000 = 0000 &cp2 + CVM_MF_3DES_KEY1 010010 00001 rt:5 0000 0000 1000 = 0001 &cp2 + CVM_MF_3DES_KEY2 010010 00001 rt:5 0000 0000 1000 = 0010 &cp2 + CVM_MF_3DES_IV 010010 00001 rt:5 0000 0000 1000 = 0100 &cp2 + CVM_MF_3DES_RESULT 010010 00001 rt:5 0000 0000 1000 = 1000 &cp2 + CVM_MF_3DES_RESULT_MT 010010 00001 rt:5 0000 0000 1001 = 1000 &cp2 + CVM_MF_AES_RESINP0 010010 00001 rt:5 0000 0001 0000 = 0000 &cp2 + CVM_MF_AES_RESINP1 010010 00001 rt:5 0000 0001 0000 = 0001 &cp2 + CVM_MF_AES_IV0 010010 00001 rt:5 0000 0001 0000 = 0010 &cp2 + CVM_MF_AES_IV1 010010 00001 rt:5 0000 0001 0000 = 0011 &cp2 + CVM_MF_AES_KEY0 010010 00001 rt:5 0000 0001 0000 = 0100 &cp2 + CVM_MF_AES_KEY1 010010 00001 rt:5 0000 0001 0000 = 0101 &cp2 + CVM_MF_AES_KEY2 010010 00001 rt:5 0000 0001 0000 = 0110 &cp2 + CVM_MF_AES_KEY3 010010 00001 rt:5 0000 0001 0000 = 0111 &cp2 + CVM_MF_AES_KEYLENGTH 010010 00001 rt:5 0000 0001 0001 = 0000 &cp2 + CVM_MF_AES_INP0 010010 00001 rt:5 0000 0001 0001 = 0001 &cp2 + CVM_MF_CRC_POLYNOMIAL 010010 00001 rt:5 0000 0010 0000 = 0000 &cp2 + CVM_MF_CRC_IV 010010 00001 rt:5 0000 0010 0000 = 0001 &cp2 + CVM_MF_CRC_LEN 010010 00001 rt:5 0000 0010 0000 = 0010 &cp2 + CVM_MF_CRC_IV_REFLECT 010010 00001 rt:5 0000 0010 0000 = 0011 &cp2 + CVM_MF_HSH_DATW0 010010 00001 rt:5 0000 0010 0100 = 0000 &cp2 + CVM_MF_HSH_DATW1 010010 00001 rt:5 0000 0010 0100 = 0001 &cp2 + CVM_MF_HSH_DATW2 010010 00001 rt:5 0000 0010 0100 = 0010 &cp2 + CVM_MF_HSH_DATW3 010010 00001 rt:5 0000 0010 0100 = 0011 &cp2 + CVM_MF_HSH_DATW4 010010 00001 rt:5 0000 0010 0100 = 0100 &cp2 + CVM_MF_HSH_DATW5 010010 00001 rt:5 0000 0010 0100 = 0101 &cp2 + CVM_MF_HSH_DATW6 010010 00001 rt:5 0000 0010 0100 = 0110 &cp2 + CVM_MF_HSH_DATW7 010010 00001 rt:5 0000 0010 0100 = 0111 &cp2 + CVM_MF_HSH_DATW8 010010 00001 rt:5 0000 0010 0100 = 1000 &cp2 + CVM_MF_HSH_DATW9 010010 00001 rt:5 0000 0010 0100 = 1001 &cp2 + CVM_MF_HSH_DATW10 010010 00001 rt:5 0000 0010 0100 = 1010 &cp2 + CVM_MF_HSH_DATW11 010010 00001 rt:5 0000 0010 0100 = 1011 &cp2 + CVM_MF_HSH_DATW12 010010 00001 rt:5 0000 0010 0100 = 1100 &cp2 + CVM_MF_HSH_DATW13 010010 00001 rt:5 0000 0010 0100 = 1101 &cp2 + CVM_MF_HSH_DATW14 010010 00001 rt:5 0000 0010 0100 = 1110 &cp2 + CVM_MF_HSH_DATW15 010010 00001 rt:5 0000 0010 0100 = 1111 &cp2 + CVM_MF_HSH_IVW0 010010 00001 rt:5 0000 0010 0101 = 0000 &cp2 + CVM_MF_HSH_IVW1 010010 00001 rt:5 0000 0010 0101 = 0001 &cp2 + CVM_MF_HSH_IVW2 010010 00001 rt:5 0000 0010 0101 = 0010 &cp2 + CVM_MF_HSH_IVW3 010010 00001 rt:5 0000 0010 0101 = 0011 &cp2 + CVM_MF_HSH_IVW4 010010 00001 rt:5 0000 0010 0101 = 0100 &cp2 + CVM_MF_HSH_IVW5 010010 00001 rt:5 0000 0010 0101 = 0101 &cp2 + CVM_MF_HSH_IVW6 010010 00001 rt:5 0000 0010 0101 = 0110 &cp2 + CVM_MF_HSH_IVW7 010010 00001 rt:5 0000 0010 0101 = 0111 &cp2 + CVM_MF_GFM_MUL0 010010 00001 rt:5 0000 0010 0101 = 1000 &cp2 + CVM_MF_GFM_MUL1 010010 00001 rt:5 0000 0010 0101 = 1001 &cp2 + CVM_MF_GFM_RESINP0 010010 00001 rt:5 0000 0010 0101 = 1010 &cp2 + CVM_MF_GFM_RESINP1 010010 00001 rt:5 0000 0010 0101 = 1011 &cp2 + CVM_MF_GFM_POLY 010010 00001 rt:5 0000 0010 0101 = 1110 &cp2 + CVM_MF_CHORD 010010 00001 rt:5 0000 0100 0000 = 0000 &cp2 + CVM_MF_LLM_DATA0 010010 00001 rt:5 0000 0100 0000 = 0010 &cp2 + CVM_MF_LLM_DATA1 010010 00001 rt:5 0000 0100 0000 = 1010 &cp2 + CVM_MT_HSH_DAT0 010010 00101 rt:5 0000 0000 0100 = 0000 &cp2 + CVM_MT_HSH_DAT1 010010 00101 rt:5 0000 0000 0100 = 0001 &cp2 + CVM_MT_HSH_DAT2 010010 00101 rt:5 0000 0000 0100 = 0010 &cp2 + CVM_MT_HSH_DAT3 010010 00101 rt:5 0000 0000 0100 = 0011 &cp2 + CVM_MT_HSH_DAT4 010010 00101 rt:5 0000 0000 0100 = 0100 &cp2 + CVM_MT_HSH_DAT5 010010 00101 rt:5 0000 0000 0100 = 0101 &cp2 + CVM_MT_HSH_DAT6 010010 00101 rt:5 0000 0000 0100 = 0110 &cp2 + CVM_MT_HSH_IV0 010010 00101 rt:5 0000 0000 0100 = 1000 &cp2 + CVM_MT_HSH_IV1 010010 00101 rt:5 0000 0000 0100 = 1001 &cp2 + CVM_MT_HSH_IV2 010010 00101 rt:5 0000 0000 0100 = 1010 &cp2 + CVM_MT_HSH_IV3 010010 00101 rt:5 0000 0000 0100 = 1011 &cp2 + CVM_MT_SHA3_DAT24 010010 00101 rt:5 0000 0000 0101 = 0000 &cp2 + CVM_MT_SHA3_DAT15 010010 00101 rt:5 0000 0000 0101 = 0001 &cp2 + CVM_MT_HSH_STARTSHA_COMPAT 010010 00101 rt:5 0000 0000 0101 = 0111 &cp2 + CVM_MT_GFM_MUL_REFLECT0 010010 00101 rt:5 0000 0000 0101 = 1000 &cp2 + CVM_MT_GFM_MUL_REFLECT1 010010 00101 rt:5 0000 0000 0101 = 1001 &cp2 + CVM_MT_GFM_XOR0_REFLECT 010010 00101 rt:5 0000 0000 0101 = 1100 &cp2 + CVM_MT_3DES_KEY0 010010 00101 rt:5 0000 0000 1000 = 0000 &cp2 + CVM_MT_3DES_KEY1 010010 00101 rt:5 0000 0000 1000 = 0001 &cp2 + CVM_MT_3DES_KEY2 010010 00101 rt:5 0000 0000 1000 = 0010 &cp2 + CVM_MT_3DES_IV 010010 00101 rt:5 0000 0000 1000 = 0100 &cp2 + CVM_MT_3DES_RESULT 010010 00101 rt:5 0000 0000 1001 = 1000 &cp2 + CVM_MT_AES_RESINP0 010010 00101 rt:5 0000 0001 0000 = 0000 &cp2 + CVM_MT_AES_RESINP1 010010 00101 rt:5 0000 0001 0000 = 0001 &cp2 + CVM_MT_AES_IV0 010010 00101 rt:5 0000 0001 0000 = 0010 &cp2 + CVM_MT_AES_IV1 010010 00101 rt:5 0000 0001 0000 = 0011 &cp2 + CVM_MT_AES_KEY0 010010 00101 rt:5 0000 0001 0000 = 0100 &cp2 + CVM_MT_AES_KEY1 010010 00101 rt:5 0000 0001 0000 = 0101 &cp2 + CVM_MT_AES_KEY2 010010 00101 rt:5 0000 0001 0000 = 0110 &cp2 + CVM_MT_AES_KEY3 010010 00101 rt:5 0000 0001 0000 = 0111 &cp2 + CVM_MT_AES_ENC_CBC0 010010 00101 rt:5 0000 0001 0000 = 1000 &cp2 + CVM_MT_AES_ENC0 010010 00101 rt:5 0000 0001 0000 = 1010 &cp2 + CVM_MT_AES_DEC_CBC0 010010 00101 rt:5 0000 0001 0000 = 1100 &cp2 + CVM_MT_AES_DEC0 010010 00101 rt:5 0000 0001 0000 = 1110 &cp2 + CVM_MT_AES_KEYLENGTH 010010 00101 rt:5 0000 0001 0001 = 0000 &cp2 + CVM_MT_CAMELLIA_FL 010010 00101 rt:5 0000 0001 0001 = 0101 &cp2 + CVM_MT_CAMELLIA_FLINV 010010 00101 rt:5 0000 0001 0001 = 0110 &cp2 + CVM_MT_CRC_IV 010010 00101 rt:5 0000 0010 0000 = 0001 &cp2 + CVM_MT_CRC_WRITE_IV_REFLECT 010010 00101 rt:5 0000 0010 0001 = 0001 &cp2 + CVM_MT_CRC_WRITE_BYTE 010010 00101 rt:5 0000 0010 0000 = 0100 &cp2 + CVM_MT_CRC_WRITE_HALF 010010 00101 rt:5 0000 0010 0000 = 0101 &cp2 + CVM_MT_CRC_WRITE_WORD 010010 00101 rt:5 0000 0010 0000 = 0110 &cp2 + CVM_MT_CRC_WRITE_BYTE_REFLECT 010010 00101 rt:5 0000 0010 0001 = 0100 &cp2 + CVM_MT_CRC_WRITE_HALF_REFLECT 010010 00101 rt:5 0000 0010 0001 = 0101 &cp2 + CVM_MT_CRC_WRITE_WORD_REFLECT 010010 00101 rt:5 0000 0010 0001 = 0110 &cp2 + CVM_MT_HSH_DATW0 010010 00101 rt:5 0000 0010 0100 = 0000 &cp2 + CVM_MT_HSH_DATW1 010010 00101 rt:5 0000 0010 0100 = 0001 &cp2 + CVM_MT_HSH_DATW2 010010 00101 rt:5 0000 0010 0100 = 0010 &cp2 + CVM_MT_HSH_DATW3 010010 00101 rt:5 0000 0010 0100 = 0011 &cp2 + CVM_MT_HSH_DATW4 010010 00101 rt:5 0000 0010 0100 = 0100 &cp2 + CVM_MT_HSH_DATW5 010010 00101 rt:5 0000 0010 0100 = 0101 &cp2 + CVM_MT_HSH_DATW6 010010 00101 rt:5 0000 0010 0100 = 0110 &cp2 + CVM_MT_HSH_DATW7 010010 00101 rt:5 0000 0010 0100 = 0111 &cp2 + CVM_MT_HSH_DATW8 010010 00101 rt:5 0000 0010 0100 = 1000 &cp2 + CVM_MT_HSH_DATW9 010010 00101 rt:5 0000 0010 0100 = 1001 &cp2 + CVM_MT_HSH_DATW10 010010 00101 rt:5 0000 0010 0100 = 1010 &cp2 + CVM_MT_HSH_DATW11 010010 00101 rt:5 0000 0010 0100 = 1011 &cp2 + CVM_MT_HSH_DATW12 010010 00101 rt:5 0000 0010 0100 = 1100 &cp2 + CVM_MT_HSH_DATW13 010010 00101 rt:5 0000 0010 0100 = 1101 &cp2 + CVM_MT_HSH_DATW14 010010 00101 rt:5 0000 0010 0100 = 1110 &cp2 + CVM_MT_HSH_DATW15 010010 00101 rt:5 0000 0010 0100 = 1111 &cp2 + CVM_MT_HSH_IVW0 010010 00101 rt:5 0000 0010 0101 = 0000 &cp2 + CVM_MT_HSH_IVW1 010010 00101 rt:5 0000 0010 0101 = 0001 &cp2 + CVM_MT_HSH_IVW2 010010 00101 rt:5 0000 0010 0101 = 0010 &cp2 + CVM_MT_HSH_IVW3 010010 00101 rt:5 0000 0010 0101 = 0011 &cp2 + CVM_MT_HSH_IVW4 010010 00101 rt:5 0000 0010 0101 = 0100 &cp2 + CVM_MT_HSH_IVW5 010010 00101 rt:5 0000 0010 0101 = 0101 &cp2 + CVM_MT_HSH_IVW6 010010 00101 rt:5 0000 0010 0101 = 0110 &cp2 + CVM_MT_HSH_IVW7 010010 00101 rt:5 0000 0010 0101 = 0111 &cp2 + CVM_MT_GFM_MUL0 010010 00101 rt:5 0000 0010 0101 = 1000 &cp2 + CVM_MT_GFM_MUL1 010010 00101 rt:5 0000 0010 0101 = 1001 &cp2 + CVM_MT_GFM_RESINP0 010010 00101 rt:5 0000 0010 0101 = 1010 &cp2 + CVM_MT_GFM_RESINP1 010010 00101 rt:5 0000 0010 0101 = 1011 &cp2 + CVM_MT_GFM_XOR0 010010 00101 rt:5 0000 0010 0101 = 1100 &cp2 + CVM_MT_GFM_POLY 010010 00101 rt:5 0000 0010 0101 = 1110 &cp2 + CVM_MT_SHA3_XORDAT0 010010 00101 rt:5 0000 0010 1100 = 0000 &cp2 + CVM_MT_SHA3_XORDAT1 010010 00101 rt:5 0000 0010 1100 = 0001 &cp2 + CVM_MT_SHA3_XORDAT2 010010 00101 rt:5 0000 0010 1100 = 0010 &cp2 + CVM_MT_SHA3_XORDAT3 010010 00101 rt:5 0000 0010 1100 = 0011 &cp2 + CVM_MT_SHA3_XORDAT4 010010 00101 rt:5 0000 0010 1100 = 0100 &cp2 + CVM_MT_SHA3_XORDAT5 010010 00101 rt:5 0000 0010 1100 = 0101 &cp2 + CVM_MT_SHA3_XORDAT6 010010 00101 rt:5 0000 0010 1100 = 0110 &cp2 + CVM_MT_SHA3_XORDAT7 010010 00101 rt:5 0000 0010 1100 = 0111 &cp2 + CVM_MT_SHA3_XORDAT8 010010 00101 rt:5 0000 0010 1100 = 1000 &cp2 + CVM_MT_SHA3_XORDAT9 010010 00101 rt:5 0000 0010 1100 = 1001 &cp2 + CVM_MT_SHA3_XORDAT10 010010 00101 rt:5 0000 0010 1100 = 1010 &cp2 + CVM_MT_SHA3_XORDAT11 010010 00101 rt:5 0000 0010 1100 = 1011 &cp2 + CVM_MT_SHA3_XORDAT12 010010 00101 rt:5 0000 0010 1100 = 1100 &cp2 + CVM_MT_SHA3_XORDAT13 010010 00101 rt:5 0000 0010 1100 = 1101 &cp2 + CVM_MT_SHA3_XORDAT14 010010 00101 rt:5 0000 0010 1100 = 1110 &cp2 + CVM_MT_SHA3_XORDAT15 010010 00101 rt:5 0000 0010 1100 = 1111 &cp2 + CVM_MT_SHA3_XORDAT16 010010 00101 rt:5 0000 0010 1101 = 0000 &cp2 + CVM_MT_SHA3_XORDAT17 010010 00101 rt:5 0000 0010 1101 = 0001 &cp2 + CVM_MT_LLM_READ_ADDR0 010010 00101 rt:5 0000 0100 0000 = 0000 &cp2 + CVM_MT_LLM_WRITE_ADDR0 010010 00101 rt:5 0000 0100 0000 = 0001 &cp2 + CVM_MT_LLM_DATA0 010010 00101 rt:5 0000 0100 0000 = 0010 &cp2 + CVM_MT_LLM_READ64_ADDR0 010010 00101 rt:5 0000 0100 0000 = 0100 &cp2 + CVM_MT_LLM_WRITE64_ADDR0 010010 00101 rt:5 0000 0100 0000 = 0101 &cp2 + CVM_MT_LLM_READ_ADDR1 010010 00101 rt:5 0000 0100 0000 = 1000 &cp2 + CVM_MT_LLM_WRITE_ADDR1 010010 00101 rt:5 0000 0100 0000 = 1001 &cp2 + CVM_MT_LLM_DATA1 010010 00101 rt:5 0000 0100 0000 = 1010 &cp2 + CVM_MT_LLM_READ64_ADDR1 010010 00101 rt:5 0000 0100 0000 = 1100 &cp2 + CVM_MT_LLM_WRITE64_ADDR1 010010 00101 rt:5 0000 0100 0000 = 1101 &cp2 + CVM_MT_CRC_WRITE_LEN 010010 00101 rt:5 0001 0010 0000 = 0010 &cp2 + CVM_MT_CRC_WRITE_DWORD 010010 00101 rt:5 0001 0010 0000 = 0111 &cp2 + CVM_MT_CRC_WRITE_VAR 010010 00101 rt:5 0001 0010 0000 = 1000 &cp2 + CVM_MT_CRC_WRITE_DWORD_REFLECT 010010 00101 rt:5 0001 0010 0001 = 0111 &cp2 + CVM_MT_CRC_WRITE_VAR_REFLECT 010010 00101 rt:5 0001 0010 0001 = 1000 &cp2 + CVM_MT_AES_ENC_CBC1 010010 00101 rt:5 0011 0001 0000 = 1001 &cp2 + CVM_MT_AES_ENC1 010010 00101 rt:5 0011 0001 0000 = 1011 &cp2 + CVM_MT_AES_DEC_CBC1 010010 00101 rt:5 0011 0001 0000 = 1101 &cp2 + CVM_MT_AES_DEC1 010010 00101 rt:5 0011 0001 0000 = 1111 &cp2 + CVM_MT_CAMELLIA_ROUND 010010 00101 rt:5 0011 0001 0001 = 0100 &cp2 + CVM_MT_SMS4_ENC_CBC1 010010 00101 rt:5 0011 0001 0001 = 1001 &cp2 + CVM_MT_SMS4_ENC1 010010 00101 rt:5 0011 0001 0001 = 1011 &cp2 + CVM_MT_SMS4_DEC_CBC1 010010 00101 rt:5 0011 0001 0001 = 1101 &cp2 + CVM_MT_SMS4_DEC1 010010 00101 rt:5 0011 0001 0001 = 1111 &cp2 + CVM_MT_HSH_STARTMD5 010010 00101 rt:5 0100 0000 0100 = 0111 &cp2 + CVM_MT_SNOW3G_START 010010 00101 rt:5 0100 0000 0100 = 1101 &cp2 + CVM_MT_SNOW3G_MORE 010010 00101 rt:5 0100 0000 0100 = 1110 &cp2 + CVM_MT_HSH_STARTSHA256 010010 00101 rt:5 0100 0000 0100 = 1111 &cp2 + CVM_MT_SHA3_STARTOP 010010 00101 rt:5 0100 0000 0101 = 0010 &cp2 + CVM_MT_ZUC_START 010010 00101 rt:5 0100 0000 0101 = 0101 &cp2 + CVM_MT_ZUC_MORE 010010 00101 rt:5 0100 0000 0101 = 0110 &cp2 + CVM_MT_HSH_STARTSHA 010010 00101 rt:5 0100 0000 0101 = 0111 &cp2 + CVM_MT_GFM_XORMUL1_REFLECT 010010 00101 rt:5 0100 0000 0101 = 1101 &cp2 + CVM_MT_3DES_ENC_CBC 010010 00101 rt:5 0100 0000 1000 = 1000 &cp2 + CVM_MT_KAS_ENC_CBC 010010 00101 rt:5 0100 0000 1000 = 1001 &cp2 + CVM_MT_3DES_ENC 010010 00101 rt:5 0100 0000 1000 = 1010 &cp2 + CVM_MT_KAS_ENC 010010 00101 rt:5 0100 0000 1000 = 1011 &cp2 + CVM_MT_3DES_DEC_CBC 010010 00101 rt:5 0100 0000 1000 = 1100 &cp2 + CVM_MT_3DES_DEC 010010 00101 rt:5 0100 0000 1000 = 1110 &cp2 + CVM_MT_CRC_WRITE_POLYNOMIAL 010010 00101 rt:5 0100 0010 0000 = 0000 &cp2 + CVM_MT_CRC_WRITE_POLYNOMIAL_REFLECT 010010 00101 rt:5 0100 0010 0001 = 0000 &cp2 + CVM_MT_HSH_STARTSHA512 010010 00101 rt:5 0100 0010 0100 = 1111 &cp2 + CVM_MT_GFM_XORMUL1 010010 00101 rt:5 0100 0010 0101 = 1101 &cp2 + ] + CP2_Undef 010010 ----- ----- ---- ---- ----= ---- +} diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 5ab7b4d659..0373fb5328 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -13,6 +13,348 @@ /* Include the auto-generated decoder. */ #include "decode-octeon.c.inc" =20 +#define OCTEON_CRYPTO_OFFSET(FIELD) \ + offsetof(CPUMIPSState, octeon_crypto.FIELD) + +#define CP2_MF_I64(NAME, FIELD) \ + TRANS(NAME, trans_octeon_cp2_mf_i64, OCTEON_CRYPTO_OFFSET(FIELD)) +#define CP2_MF_S32(NAME, FIELD) \ + TRANS(NAME, trans_octeon_cp2_mf_s32, OCTEON_CRYPTO_OFFSET(FIELD)) +#define CP2_MF_U16(NAME, FIELD) \ + TRANS(NAME, trans_octeon_cp2_mf_u16, OCTEON_CRYPTO_OFFSET(FIELD)) +#define CP2_MF_U8(NAME, FIELD) \ + TRANS(NAME, trans_octeon_cp2_mf_u8, OCTEON_CRYPTO_OFFSET(FIELD)) +#define CP2_MF_HELPER(NAME, SUFFIX) \ + TRANS(NAME, trans_octeon_cp2_mf_helper, \ + gen_helper_octeon_cp2_mf_ ## SUFFIX) +#define CP2_MT_I64(NAME, FIELD) \ + TRANS(NAME, trans_octeon_cp2_mt_i64, OCTEON_CRYPTO_OFFSET(FIELD)) +#define CP2_MT_U32(NAME, FIELD) \ + TRANS(NAME, trans_octeon_cp2_mt_u32, OCTEON_CRYPTO_OFFSET(FIELD)) +#define CP2_MT_U16(NAME, FIELD) \ + TRANS(NAME, trans_octeon_cp2_mt_u16, OCTEON_CRYPTO_OFFSET(FIELD)) +#define CP2_MT_U8(NAME, FIELD) \ + TRANS(NAME, trans_octeon_cp2_mt_u8, OCTEON_CRYPTO_OFFSET(FIELD)) +#define CP2_MT_HELPER(NAME, SUFFIX) \ + TRANS(NAME, trans_octeon_cp2_mt_helper, \ + gen_helper_octeon_cp2_mt_ ## SUFFIX) + +static bool trans_CP2_Undef(DisasContext *ctx, arg_CP2_Undef *a) +{ + generate_exception_err(ctx, EXCP_CpU, 2); + return true; +} + +static bool trans_octeon_cp2_mf_i64(DisasContext *ctx, arg_cp2 *a, int off= set) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + tcg_gen_ld_i64(value, tcg_env, offset); + gen_store_gpr(value, a->rt); + return true; +} + +static bool trans_octeon_cp2_mf_s32(DisasContext *ctx, arg_cp2 *a, int off= set) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + tcg_gen_ld32s_i64(value, tcg_env, offset); + gen_store_gpr(value, a->rt); + return true; +} + +static bool trans_octeon_cp2_mf_u16(DisasContext *ctx, arg_cp2 *a, int off= set) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + tcg_gen_ld16u_i64(value, tcg_env, offset); + gen_store_gpr(value, a->rt); + return true; +} + +static bool trans_octeon_cp2_mf_u8(DisasContext *ctx, arg_cp2 *a, int offs= et) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + tcg_gen_ld8u_i64(value, tcg_env, offset); + gen_store_gpr(value, a->rt); + return true; +} + +static bool trans_octeon_cp2_mf_helper(DisasContext *ctx, arg_cp2 *a, + void (*gen_helper)(TCGv_i64, TCGv_e= nv)) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + gen_helper(value, tcg_env); + gen_store_gpr(value, a->rt); + return true; +} + +static bool trans_octeon_cp2_mt_i64(DisasContext *ctx, arg_cp2 *a, int off= set) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + gen_load_gpr(value, a->rt); + tcg_gen_st_i64(value, tcg_env, offset); + return true; +} + +static bool trans_octeon_cp2_mt_u32(DisasContext *ctx, arg_cp2 *a, int off= set) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + gen_load_gpr(value, a->rt); + tcg_gen_st32_i64(value, tcg_env, offset); + return true; +} + +static bool trans_octeon_cp2_mt_u16(DisasContext *ctx, arg_cp2 *a, int off= set) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + gen_load_gpr(value, a->rt); + tcg_gen_st16_i64(value, tcg_env, offset); + return true; +} + +static bool trans_octeon_cp2_mt_u8(DisasContext *ctx, arg_cp2 *a, int offs= et) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + gen_load_gpr(value, a->rt); + tcg_gen_st8_i64(value, tcg_env, offset); + return true; +} + +static bool trans_octeon_cp2_mt_resinp(DisasContext *ctx, arg_cp2 *a, + unsigned int index) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + /* + * Writes to AESRESINP update both QEMU views: the operation input lat= ch + * and the DMFC2 readback/result register bank. + */ + gen_load_gpr(value, a->rt); + tcg_gen_st_i64(value, tcg_env, + OCTEON_CRYPTO_OFFSET(aes_input[index])); + tcg_gen_st_i64(value, tcg_env, + OCTEON_CRYPTO_OFFSET(aes_result[index])); + return true; +} + +static bool trans_octeon_cp2_mt_helper(DisasContext *ctx, arg_cp2 *a, + void (*gen_helper)(TCGv_env, TCGv_i= 64)) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + gen_load_gpr(value, a->rt); + gen_helper(tcg_env, value); + return true; +} + +CP2_MF_I64(CVM_MF_HSH_IV0, hsh_iv[0]); +CP2_MF_I64(CVM_MF_HSH_IV1, hsh_iv[1]); +CP2_MF_I64(CVM_MF_HSH_IV2, hsh_iv[2]); +CP2_MF_I64(CVM_MF_HSH_IV3, hsh_iv[3]); +CP2_MF_I64(CVM_MF_GFM_MUL_REFLECT0, gfm_reflect_mul[0]); +CP2_MF_I64(CVM_MF_GFM_MUL_REFLECT1, gfm_reflect_mul[1]); +CP2_MF_I64(CVM_MF_GFM_RESINP_REFLECT0, gfm_reflect_resinp[0]); +CP2_MF_I64(CVM_MF_GFM_RESINP_REFLECT1, gfm_reflect_resinp[1]); +CP2_MF_I64(CVM_MF_3DES_KEY0, des3_key[0]); +CP2_MF_I64(CVM_MF_3DES_KEY1, des3_key[1]); +CP2_MF_I64(CVM_MF_3DES_KEY2, des3_key[2]); +CP2_MF_I64(CVM_MF_3DES_IV, des3_iv); +CP2_MF_I64(CVM_MF_3DES_RESULT, des3_result); +CP2_MF_I64(CVM_MF_3DES_RESULT_MT, des3_result); +CP2_MF_I64(CVM_MF_AES_RESINP0, aes_result[0]); +CP2_MF_I64(CVM_MF_AES_RESINP1, aes_result[1]); +CP2_MF_I64(CVM_MF_AES_IV0, aes_iv[0]); +CP2_MF_I64(CVM_MF_AES_IV1, aes_iv[1]); +CP2_MF_I64(CVM_MF_AES_KEY0, aes_key[0]); +CP2_MF_I64(CVM_MF_AES_KEY1, aes_key[1]); +CP2_MF_I64(CVM_MF_AES_KEY2, aes_key[2]); +CP2_MF_I64(CVM_MF_AES_KEY3, aes_key[3]); +CP2_MF_U8(CVM_MF_AES_KEYLENGTH, aes_keylen); +CP2_MF_I64(CVM_MF_AES_INP0, aes_input[0]); +CP2_MF_S32(CVM_MF_CRC_POLYNOMIAL, crc_poly); +CP2_MF_S32(CVM_MF_CRC_IV, crc_iv); +CP2_MF_S32(CVM_MF_CRC_LEN, crc_len); +CP2_MF_I64(CVM_MF_GFM_MUL0, gfm_mul[0]); +CP2_MF_I64(CVM_MF_GFM_MUL1, gfm_mul[1]); +CP2_MF_I64(CVM_MF_GFM_RESINP0, gfm_resinp[0]); +CP2_MF_I64(CVM_MF_GFM_RESINP1, gfm_resinp[1]); +CP2_MF_U16(CVM_MF_GFM_POLY, gfm_poly); +CP2_MF_I64(CVM_MF_CHORD, chord); +CP2_MF_I64(CVM_MF_LLM_DATA0, llm_data[0]); +CP2_MF_I64(CVM_MF_LLM_DATA1, llm_data[1]); + +CP2_MF_HELPER(CVM_MF_CRC_IV_REFLECT, crc_iv_reflect); +CP2_MF_HELPER(CVM_MF_SHA3_DAT24, sha3_dat24); +CP2_MF_HELPER(CVM_MF_HSH_DATW0, hsh_datw0); +CP2_MF_HELPER(CVM_MF_HSH_DATW1, hsh_datw1); +CP2_MF_HELPER(CVM_MF_HSH_DATW2, hsh_datw2); +CP2_MF_HELPER(CVM_MF_HSH_DATW3, hsh_datw3); +CP2_MF_HELPER(CVM_MF_HSH_DATW4, hsh_datw4); +CP2_MF_HELPER(CVM_MF_HSH_DATW5, hsh_datw5); +CP2_MF_HELPER(CVM_MF_HSH_DATW6, hsh_datw6); +CP2_MF_HELPER(CVM_MF_HSH_DATW7, hsh_datw7); +CP2_MF_HELPER(CVM_MF_HSH_DATW8, hsh_datw8); +CP2_MF_HELPER(CVM_MF_HSH_DATW9, hsh_datw9); +CP2_MF_HELPER(CVM_MF_HSH_DATW10, hsh_datw10); +CP2_MF_HELPER(CVM_MF_HSH_DATW11, hsh_datw11); +CP2_MF_HELPER(CVM_MF_HSH_DATW12, hsh_datw12); +CP2_MF_HELPER(CVM_MF_HSH_DATW13, hsh_datw13); +CP2_MF_HELPER(CVM_MF_HSH_DATW14, hsh_datw14); +CP2_MF_HELPER(CVM_MF_HSH_DATW15, hsh_datw15); +CP2_MF_HELPER(CVM_MF_HSH_IVW0, hsh_ivw0); +CP2_MF_HELPER(CVM_MF_HSH_IVW1, hsh_ivw1); +CP2_MF_HELPER(CVM_MF_HSH_IVW2, hsh_ivw2); +CP2_MF_HELPER(CVM_MF_HSH_IVW3, hsh_ivw3); +CP2_MF_HELPER(CVM_MF_HSH_IVW4, hsh_ivw4); +CP2_MF_HELPER(CVM_MF_HSH_IVW5, hsh_ivw5); +CP2_MF_HELPER(CVM_MF_HSH_IVW6, hsh_ivw6); +CP2_MF_HELPER(CVM_MF_HSH_IVW7, hsh_ivw7); + +CP2_MT_I64(CVM_MT_HSH_DAT0, hsh_dat[0]); +CP2_MT_I64(CVM_MT_HSH_DAT1, hsh_dat[1]); +CP2_MT_I64(CVM_MT_HSH_DAT2, hsh_dat[2]); +CP2_MT_I64(CVM_MT_HSH_DAT3, hsh_dat[3]); +CP2_MT_I64(CVM_MT_HSH_DAT4, hsh_dat[4]); +CP2_MT_I64(CVM_MT_HSH_DAT5, hsh_dat[5]); +CP2_MT_I64(CVM_MT_HSH_DAT6, hsh_dat[6]); +CP2_MT_I64(CVM_MT_HSH_IV0, hsh_iv[0]); +CP2_MT_I64(CVM_MT_HSH_IV1, hsh_iv[1]); +CP2_MT_I64(CVM_MT_HSH_IV2, hsh_iv[2]); +CP2_MT_I64(CVM_MT_HSH_IV3, hsh_iv[3]); +CP2_MT_I64(CVM_MT_GFM_MUL_REFLECT0, gfm_reflect_mul[0]); +CP2_MT_I64(CVM_MT_GFM_MUL_REFLECT1, gfm_reflect_mul[1]); +CP2_MT_I64(CVM_MT_GFM_XOR0_REFLECT, gfm_reflect_xor0); +CP2_MT_I64(CVM_MT_3DES_KEY0, des3_key[0]); +CP2_MT_I64(CVM_MT_3DES_KEY1, des3_key[1]); +CP2_MT_I64(CVM_MT_3DES_KEY2, des3_key[2]); +CP2_MT_I64(CVM_MT_3DES_IV, des3_iv); +CP2_MT_I64(CVM_MT_3DES_RESULT, des3_result); +TRANS(CVM_MT_AES_RESINP0, trans_octeon_cp2_mt_resinp, 0); +TRANS(CVM_MT_AES_RESINP1, trans_octeon_cp2_mt_resinp, 1); +CP2_MT_I64(CVM_MT_AES_IV0, aes_iv[0]); +CP2_MT_I64(CVM_MT_AES_IV1, aes_iv[1]); +CP2_MT_I64(CVM_MT_AES_KEY0, aes_key[0]); +CP2_MT_I64(CVM_MT_AES_KEY1, aes_key[1]); +CP2_MT_I64(CVM_MT_AES_KEY2, aes_key[2]); +CP2_MT_I64(CVM_MT_AES_KEY3, aes_key[3]); +CP2_MT_I64(CVM_MT_AES_ENC_CBC0, aes_input[0]); +CP2_MT_I64(CVM_MT_AES_ENC0, aes_input[0]); +CP2_MT_I64(CVM_MT_AES_DEC_CBC0, aes_input[0]); +CP2_MT_I64(CVM_MT_AES_DEC0, aes_input[0]); +CP2_MT_U8(CVM_MT_AES_KEYLENGTH, aes_keylen); +CP2_MT_U32(CVM_MT_CRC_IV, crc_iv); +CP2_MT_I64(CVM_MT_GFM_MUL0, gfm_mul[0]); +CP2_MT_I64(CVM_MT_GFM_MUL1, gfm_mul[1]); +CP2_MT_I64(CVM_MT_GFM_RESINP0, gfm_resinp[0]); +CP2_MT_I64(CVM_MT_GFM_RESINP1, gfm_resinp[1]); +CP2_MT_I64(CVM_MT_GFM_XOR0, gfm_xor0); +CP2_MT_U16(CVM_MT_GFM_POLY, gfm_poly); +CP2_MT_I64(CVM_MT_LLM_DATA0, llm_data[0]); +CP2_MT_I64(CVM_MT_LLM_DATA1, llm_data[1]); +CP2_MT_U32(CVM_MT_CRC_WRITE_LEN, crc_len); +CP2_MT_U32(CVM_MT_CRC_WRITE_POLYNOMIAL, crc_poly); +CP2_MT_U32(CVM_MT_CRC_WRITE_POLYNOMIAL_REFLECT, crc_poly); + +CP2_MT_HELPER(CVM_MT_CRC_WRITE_IV_REFLECT, crc_write_iv_reflect); +CP2_MT_HELPER(CVM_MT_CRC_WRITE_BYTE, crc_write_byte); +CP2_MT_HELPER(CVM_MT_CRC_WRITE_HALF, crc_write_half); +CP2_MT_HELPER(CVM_MT_CRC_WRITE_WORD, crc_write_word); +CP2_MT_HELPER(CVM_MT_CRC_WRITE_BYTE_REFLECT, crc_write_byte_reflect); +CP2_MT_HELPER(CVM_MT_CRC_WRITE_HALF_REFLECT, crc_write_half_reflect); +CP2_MT_HELPER(CVM_MT_CRC_WRITE_WORD_REFLECT, crc_write_word_reflect); +CP2_MT_HELPER(CVM_MT_CRC_WRITE_DWORD, crc_write_dword); +CP2_MT_HELPER(CVM_MT_CRC_WRITE_VAR, crc_write_var); +CP2_MT_HELPER(CVM_MT_CRC_WRITE_DWORD_REFLECT, crc_write_dword_reflect); +CP2_MT_HELPER(CVM_MT_CRC_WRITE_VAR_REFLECT, crc_write_var_reflect); +CP2_MT_HELPER(CVM_MT_GFM_XORMUL1_REFLECT, gfm_xormul1_reflect); +CP2_MT_HELPER(CVM_MT_GFM_XORMUL1, gfm_xormul1); +CP2_MT_HELPER(CVM_MT_SHA3_DAT24, sha3_dat24); +CP2_MT_HELPER(CVM_MT_SHA3_DAT15, sha3_dat15); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT0, sha3_xordat0); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT1, sha3_xordat1); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT2, sha3_xordat2); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT3, sha3_xordat3); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT4, sha3_xordat4); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT5, sha3_xordat5); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT6, sha3_xordat6); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT7, sha3_xordat7); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT8, sha3_xordat8); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT9, sha3_xordat9); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT10, sha3_xordat10); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT11, sha3_xordat11); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT12, sha3_xordat12); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT13, sha3_xordat13); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT14, sha3_xordat14); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT15, sha3_xordat15); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT16, sha3_xordat16); +CP2_MT_HELPER(CVM_MT_SHA3_XORDAT17, sha3_xordat17); +CP2_MT_HELPER(CVM_MT_SHA3_STARTOP, sha3_startop); +CP2_MT_HELPER(CVM_MT_ZUC_START, zuc_start); +CP2_MT_HELPER(CVM_MT_ZUC_MORE, zuc_more); +CP2_MT_HELPER(CVM_MT_SNOW3G_START, snow3g_start); +CP2_MT_HELPER(CVM_MT_SNOW3G_MORE, snow3g_more); +CP2_MT_HELPER(CVM_MT_AES_ENC_CBC1, aes_enc_cbc1); +CP2_MT_HELPER(CVM_MT_AES_ENC1, aes_enc1); +CP2_MT_HELPER(CVM_MT_AES_DEC_CBC1, aes_dec_cbc1); +CP2_MT_HELPER(CVM_MT_AES_DEC1, aes_dec1); +CP2_MT_HELPER(CVM_MT_SMS4_ENC_CBC1, sms4_enc_cbc1); +CP2_MT_HELPER(CVM_MT_SMS4_ENC1, sms4_enc1); +CP2_MT_HELPER(CVM_MT_SMS4_DEC_CBC1, sms4_dec_cbc1); +CP2_MT_HELPER(CVM_MT_SMS4_DEC1, sms4_dec1); +CP2_MT_HELPER(CVM_MT_3DES_ENC_CBC, des3_enc_cbc); +CP2_MT_HELPER(CVM_MT_KAS_ENC_CBC, kas_enc_cbc); +CP2_MT_HELPER(CVM_MT_3DES_ENC, des3_enc); +CP2_MT_HELPER(CVM_MT_KAS_ENC, kas_enc); +CP2_MT_HELPER(CVM_MT_3DES_DEC_CBC, des3_dec_cbc); +CP2_MT_HELPER(CVM_MT_3DES_DEC, des3_dec); +CP2_MT_HELPER(CVM_MT_CAMELLIA_FL, camellia_fl); +CP2_MT_HELPER(CVM_MT_CAMELLIA_FLINV, camellia_flinv); +CP2_MT_HELPER(CVM_MT_CAMELLIA_ROUND, camellia_round); +CP2_MT_HELPER(CVM_MT_HSH_STARTSHA_COMPAT, hsh_startsha_compat); +CP2_MT_HELPER(CVM_MT_HSH_DATW0, hsh_datw0); +CP2_MT_HELPER(CVM_MT_HSH_DATW1, hsh_datw1); +CP2_MT_HELPER(CVM_MT_HSH_DATW2, hsh_datw2); +CP2_MT_HELPER(CVM_MT_HSH_DATW3, hsh_datw3); +CP2_MT_HELPER(CVM_MT_HSH_DATW4, hsh_datw4); +CP2_MT_HELPER(CVM_MT_HSH_DATW5, hsh_datw5); +CP2_MT_HELPER(CVM_MT_HSH_DATW6, hsh_datw6); +CP2_MT_HELPER(CVM_MT_HSH_DATW7, hsh_datw7); +CP2_MT_HELPER(CVM_MT_HSH_DATW8, hsh_datw8); +CP2_MT_HELPER(CVM_MT_HSH_DATW9, hsh_datw9); +CP2_MT_HELPER(CVM_MT_HSH_DATW10, hsh_datw10); +CP2_MT_HELPER(CVM_MT_HSH_DATW11, hsh_datw11); +CP2_MT_HELPER(CVM_MT_HSH_DATW12, hsh_datw12); +CP2_MT_HELPER(CVM_MT_HSH_DATW13, hsh_datw13); +CP2_MT_HELPER(CVM_MT_HSH_DATW14, hsh_datw14); +CP2_MT_HELPER(CVM_MT_HSH_DATW15, hsh_datw15); +CP2_MT_HELPER(CVM_MT_HSH_IVW0, hsh_ivw0); +CP2_MT_HELPER(CVM_MT_HSH_IVW1, hsh_ivw1); +CP2_MT_HELPER(CVM_MT_HSH_IVW2, hsh_ivw2); +CP2_MT_HELPER(CVM_MT_HSH_IVW3, hsh_ivw3); +CP2_MT_HELPER(CVM_MT_HSH_IVW4, hsh_ivw4); +CP2_MT_HELPER(CVM_MT_HSH_IVW5, hsh_ivw5); +CP2_MT_HELPER(CVM_MT_HSH_IVW6, hsh_ivw6); +CP2_MT_HELPER(CVM_MT_HSH_IVW7, hsh_ivw7); +CP2_MT_HELPER(CVM_MT_HSH_STARTMD5, hsh_startmd5); +CP2_MT_HELPER(CVM_MT_HSH_STARTSHA256, hsh_startsha256); +CP2_MT_HELPER(CVM_MT_HSH_STARTSHA, hsh_startsha); +CP2_MT_HELPER(CVM_MT_HSH_STARTSHA512, hsh_startsha512); +CP2_MT_HELPER(CVM_MT_LLM_READ_ADDR0, llm_read_addr0); +CP2_MT_HELPER(CVM_MT_LLM_WRITE_ADDR0, llm_write_addr0); +CP2_MT_HELPER(CVM_MT_LLM_READ64_ADDR0, llm_read64_addr0); +CP2_MT_HELPER(CVM_MT_LLM_WRITE64_ADDR0, llm_write64_addr0); +CP2_MT_HELPER(CVM_MT_LLM_READ_ADDR1, llm_read_addr1); +CP2_MT_HELPER(CVM_MT_LLM_WRITE_ADDR1, llm_write_addr1); +CP2_MT_HELPER(CVM_MT_LLM_READ64_ADDR1, llm_read64_addr1); +CP2_MT_HELPER(CVM_MT_LLM_WRITE64_ADDR1, llm_write64_addr1); + static bool trans_BBIT(DisasContext *ctx, arg_BBIT *a) { TCGv_i64 p; --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207842; cv=none; d=zohomail.com; s=zohoarc; b=U5mHh4UFt74M6+RQOZ+vY6WbVyn9YS+EOM0MoNo2YvDGSDYwIjlIwX+mIyiHHK5EyOfvZPA8kMJZoMF4pnBZ4SVo2RReBWCmDjuZpA4lzjoa550F3ryhCG1Zf6mLuqD+KOcFKQEFAlJ5p48aG4/OWPmQxX3w9FIoVQvAsQUlukM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207842; 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=ZZOjTyR1gKYk3Ul3oxhSb/iRoco7UWLLdf42XLNv3PU=; b=fIG+6lxtuWIRHf4EpRsUhwmAE5E8/bcOhidr1jfeXPs1vfUAtqV2b356VYn91NyeeQW+rGCz0Qg/FzRM3rltGIIkNUCGlEvt0SdpzKsA/3Jy+HWmV9K2HaULZe5P6XlYDKwNVWZzcaHUSTtjuyA2Qp/LJ4LgahaNDOXUo3kilR8= 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 1779207842596494.6850411907636; Tue, 19 May 2026 09:24:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNDy-0006yw-Ud; Tue, 19 May 2026 12:23:18 -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 1wPNDx-0006y7-G9 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:17 -0400 Received: from mail-ot1-x32c.google.com ([2607:f8b0:4864:20::32c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDv-0000qT-2v for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:17 -0400 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-7e36bb16a92so2267408a34.2 for ; Tue, 19 May 2026 09:23:14 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207794; x=1779812594; 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=ZZOjTyR1gKYk3Ul3oxhSb/iRoco7UWLLdf42XLNv3PU=; b=Q4Fn86J8vw0fWR8ttQJIVUwfVfzvIqCw+ueG2uxsaZORv9JuNSQjbz1lx3okmX8oLs oiiy36H8xWQisNu7T2v+yESlHpzFQZTCdcbkUZfVdaqPiToo7Jh81jt9LzTKPRxYTg36 4ZnrMUzfMubmLZaL/i1qEnYts/wdBom7o3MECbRsxsypUx+7AfWgAeZXk2blLaZ5Drld Vqk4tiViifTv6AEIS9o952K/IOoYG7XrwLEXzpRd0o35pUUWvKH8cVLk43dD2TdLBhOg dM/BB2Lo8ZI/MVBJVB+eEXOr317+JKHRFTYDKIOHXZPphSuYMLijlSIMH1AaR079qqt0 Tkrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207794; x=1779812594; 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=ZZOjTyR1gKYk3Ul3oxhSb/iRoco7UWLLdf42XLNv3PU=; b=geTL668dkYgmkbyOoF5KRGdSp3QukqpsgvpIuA8QMbFkjPkLIzRzi4szHtWTgwp4KI D1WjTnirgMZecimV+gAzvEOVU4FeT9YiH/phv/QfZ3sEhXH9EugR+9551BMS4FkhYHER WDMkvutNuBLy8nUbsRRGiWqy0REPeB7RPHa1VNPFHGISrLukZF1J5sFULuYiFCgXBEX2 ic03+TxkLJVbyO6Hvt7ETzuld+7ZXiMUnX1FKEJnKB5QXXQDpdh/3MOBieAM9PSICtas ix5OY48tSyIEvpreE9B6x+wGxq32Eqx2JkiC6UDdeEmaHKRJBzcJbkwH0kHkANxu+5uT 9iPg== X-Gm-Message-State: AOJu0YyO3Zv/8AJV7ji5QWnk+nEVuXlIMULO6RrEFloCEwPhUU0oIXW/ fx7fWPK7Ts0XJqAhAbZb7+d7llKT8jbJnT4IP1CJaBUbBJ4RCeaiL/g+ X-Gm-Gg: Acq92OFqB38wap2h0mzCW4JMrlVtxXreKvTOOW7gKvGFQbCAS7yWdUoWLNCpmFe2QPh t7TJCpgwCCD8JQPey7k56HXuHl4aJpU6CJAuFejSPNbZS6aka/FgE4nKnx8edI6RAZP3kUllDAj NX+7TVvdMPQhV18CdKFJB4FaZPocLHbK/6MmHKEDBWPGrkumG54sBkyRpJYBD7BQftJ9q4tURP5 9BUunecnZ+ZmZDxp47QK4+KtbmiNUCV8rJtCPpwnAr7ij0/pkK7mNK906c7OGsbkWALfdmt4dAR tyxGg09L3qxXCk+uO0Gog50B7gnwfnN47pCBY95xHElet72b5WTARztCX3lwociM0Im7TDrjsjh BWLMcz9g+XxxWN2p9zwg4USiK6SMD1qm685UwEa/H5A0X3P3vYwMknMRhZ8wmcGQJ5UJHZIFTKr NvU/DYcSPL45q4qi3zjBQtyGH70OX1YiMDoj669Mj4ozE4R90PqzvUr37gqHUthznbm0CWFK2jY 4DKj7IgClSLg+Q0wubNNgqIzPzP/vjMG9GGfK3tTLJh6EtG4vTXtVvWn/6g5JYBcnFK X-Received: by 2002:a05:6820:8c8:b0:695:a610:eccb with SMTP id 006d021491bc7-69c942d9966mr11629291eaf.20.1779207793710; Tue, 19 May 2026 09:23:13 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:40 -0600 Subject: [PATCH v9 38/40] target/mips: add Octeon CvmCount RDHWR support MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-38-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::32c; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x32c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207843201158500 Octeon exposes CvmCount through RDHWR register 31. Add the Octeon-only decode path, enable the corresponding HWREna bit for linux-user, and use an unsigned mask when checking HWREna so bit 31 is handled safely. For user-mode emulation, return host ticks as a monotonic counter source suitable for existing Octeon userspace code. In system mode, fall back to the existing CP0 Count value. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard --- Changes v5 -> v6: - New patch. --- target/mips/cpu.c | 1 + target/mips/helper.h | 1 + target/mips/tcg/op_helper.c | 13 ++++++++++++- target/mips/tcg/translate.c | 11 +++++++++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/target/mips/cpu.c b/target/mips/cpu.c index a2b9f6634f..fe757ef03c 100644 --- a/target/mips/cpu.c +++ b/target/mips/cpu.c @@ -322,6 +322,7 @@ static void mips_cpu_reset_hold(Object *obj, ResetType = type) env->CP0_HWREna |=3D 0x0000000F; if (env->insn_flags & INSN_OCTEON) { env->CP0_HWREna |=3D 0x40000000u; + env->CP0_HWREna |=3D 0x80000000u; } if (env->CP0_Config1 & (1 << CP0C1_FP)) { env->CP0_Status |=3D (1 << CP0St_CU1); diff --git a/target/mips/helper.h b/target/mips/helper.h index fd57ebbf00..63c5245950 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -317,6 +317,7 @@ DEF_HELPER_1(rdhwr_ccres, tl, env) DEF_HELPER_1(rdhwr_performance, tl, env) DEF_HELPER_1(rdhwr_xnp, tl, env) DEF_HELPER_1(rdhwr_chord, tl, env) +DEF_HELPER_1(rdhwr_cvmcount, tl, env) DEF_HELPER_2(pmon, void, env, int) DEF_HELPER_1(wait, void, env) =20 diff --git a/target/mips/tcg/op_helper.c b/target/mips/tcg/op_helper.c index 3e586e3049..df1b5c3734 100644 --- a/target/mips/tcg/op_helper.c +++ b/target/mips/tcg/op_helper.c @@ -25,6 +25,7 @@ #include "exec/memop.h" #include "fpu_helper.h" #include "qemu/crc32c.h" +#include "qemu/timer.h" #include =20 static inline target_ulong bitswap(target_ulong v) @@ -209,7 +210,7 @@ target_ulong helper_yield(CPUMIPSState *env, target_ulo= ng arg) =20 static inline void check_hwrena(CPUMIPSState *env, int reg, uintptr_t pc) { - if ((env->hflags & MIPS_HFLAG_CP0) || (env->CP0_HWREna & (1 << reg))) { + if ((env->hflags & MIPS_HFLAG_CP0) || (env->CP0_HWREna & (1u << reg)))= { return; } do_raise_exception(env, EXCP_RI, pc); @@ -261,6 +262,16 @@ target_ulong helper_rdhwr_chord(CPUMIPSState *env) return env->octeon_crypto.chord; } =20 +target_ulong helper_rdhwr_cvmcount(CPUMIPSState *env) +{ + check_hwrena(env, 31, GETPC()); +#ifdef CONFIG_USER_ONLY + return cpu_get_host_ticks(); +#else + return (uint32_t)cpu_mips_get_count(env); +#endif +} + void helper_pmon(CPUMIPSState *env, int function) { function /=3D 2; diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c index 1f44932882..e3467d1525 100644 --- a/target/mips/tcg/translate.c +++ b/target/mips/tcg/translate.c @@ -10933,6 +10933,17 @@ void gen_rdhwr(DisasContext *ctx, int rt, int rd, = int sel) gen_helper_rdhwr_chord(t0, tcg_env); gen_store_gpr(t0, rt); break; + case 31: + if (!(ctx->insn_flags & INSN_OCTEON)) { + gen_reserved_instruction(ctx); + break; + } + translator_io_start(&ctx->base); + gen_helper_rdhwr_cvmcount(t0, tcg_env); + gen_store_gpr(t0, rt); + gen_save_pc(ctx->base.pc_next + 4); + ctx->base.is_jmp =3D DISAS_EXIT; + break; default: /* Invalid */ MIPS_INVAL("rdhwr"); gen_reserved_instruction(ctx); --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207924; cv=none; d=zohomail.com; s=zohoarc; b=aEP/jIpnlIg8M+hFZC6VHhe8UWyRjIPS2eOepTt6IhEEns1bxNhWkQe3FxD6Ht5cyHkVDurKEZkcwJe+Y1ZoadZXdsPSG8Z8+PJG0LR9tjI8pR4Go/MIhaLdtYFOVJtJ7TKwVvEy/Gd+P/cBNvI4CM9X7yNO0pWxWv2EFWg13z0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207924; 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=fFjHOeiMjObCF6UYUem3JfrqODv07eCgyys7BgfWqXc=; b=Hj+qlAI2YZ0z+s195Dc99Yy//9fg2BHgbMd1Q0gAJ42uWtCr/hZ+yjGPL2yYjR4FTwPaNW7tncs1jxNMj0rCXFp3rs11nhHZ1PUCJoVAOSEgcp8CuNaGjadWGHWhXtHWk8OBGUoPBFxjljyoQvVk5SxiEDbmoGU9URvM/n0g3Ss= 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 1779207924142506.5774124486293; Tue, 19 May 2026 09:25:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNE0-00070K-Fv; Tue, 19 May 2026 12:23:20 -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 1wPNDz-0006z4-1B for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:19 -0400 Received: from mail-oo1-xc2e.google.com ([2607:f8b0:4864:20::c2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDw-0000qZ-7i for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:18 -0400 Received: by mail-oo1-xc2e.google.com with SMTP id 006d021491bc7-69d42abd04cso1019611eaf.2 for ; Tue, 19 May 2026 09:23:15 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207795; x=1779812595; 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=fFjHOeiMjObCF6UYUem3JfrqODv07eCgyys7BgfWqXc=; b=gidjRYyNCOKG+KQoSBoG8i7Ve3DTIfy7bWmrkHSYZSD2RqJ3maSUz/oalIbpH/uEEa uvxW7+fk3O6MJoDtmvMWPQuyoBY1GSEy4s8aQaEFLkpOgA+6liE4Pl44Hc4aYUS94n0T dBYRduwVd8phMCnmZUbNHBEYejJNXZjwBN5cbks6ghLJ+TT+1Ess/OGnMjAOBJ+U8mcR vnzNTy1N7siyp3iEH7r+YubJif4YJ8xnrOY8raFe+cfc9lfzBD5binkIyiyOwOoLCIzJ J8bVGZnti3EgcBxLbFx0I4JgjidNxswmv1I8Iis+K1KLT7y7Cq+Mq31kiCxk0WtrowcU 5N0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207795; x=1779812595; 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=fFjHOeiMjObCF6UYUem3JfrqODv07eCgyys7BgfWqXc=; b=f/P4AKJYd2lsnqRxJlCA4/PyWg48nV07G75VnjZ+Ws9AtkdDTMHK70Ro95+4HW1YyW FX8AG6vApj1ROsKjRVdyqz4th2lIzVEESnHPJquTrV7uffXneAMhMK/6SpZf5YYg9QKN 4bw8BQNuvQ4UdL/com+EhqWcbGpgqMnHE1ic+xIwwP1WTLVX1GbCMvVOcZVL6KdwZfH8 6qa5p8xgSgm54Coun0d59eSjTOs4SlRNCJL+u8iF/nt7+YpERzmrMBUlCEtg+tgT9kZ5 67pb5hTHRDW6Q6C8yKYMYGDpmDfgoKfD2X6M6yRnSv9ND9lYhVhmdzHNxS8k6CfZOF/C R7ew== X-Gm-Message-State: AOJu0Yzjylwdw3qxOtxkvCPrrYGu9peYC5O04LJjacTyTH14ORjhngwm Rpn5o5EyLWtwBPcHAG1eM+Aisw/bBWDBmhV31RO/i0uC/D7kJ3oTaVDm X-Gm-Gg: Acq92OHyjwBGu8CCpCSSd/oY3FnDJgHQseZwEmhpItMEC6uBhIUZ8zPyKMxb4gDm7ep 0k6W0h3AWX8cCsAaUToVyCzsJrc5sz1KtEcmg3KZnT6xfz1KaEc02rT0xSSB3oTIcDhsIuYxXC1 IKhJ5qxpuJzfkscdzW44sC/K6k6yzTysn3SyWPpUQjYmy9XJqiTBWg/YSqv5TtUjprOjI/2Yj68 3ZplY9gkkDEX2CO6Ax87USad3IgZRJ6LpWeK3vLhaWZycSKcvgdDYX3rAgLevxnis/L148D6Rkz 4Y9CE0/CcOsZ1ew2/pJRDvN8KcTtQ+ZvXklCGWgENn8Igji2RgFlnLUOY7BNy8ajlZhTPk2xqa4 BZa30TkDNJ0EricziPJOjXfDtQV2FcZqqj8cOjjiXRBkrKBjyAoghrNXyXI093lza5fxQzexNbb 5kHrPNcz3E3DXqC7pA25KUIEdYWWiCWQLHlInRDQHUeAeyAOPgT35ueGhRinzR4qKIY7LMsaFjs jmMpCOp+pM7JIlP9xpViqrPHUQ2hlevDR/rvWFjyRj4pqfECCLSzI9rtEuNPirfvJQ8 X-Received: by 2002:a05:6820:627:b0:694:8d83:a344 with SMTP id 006d021491bc7-69c942d9c84mr12701845eaf.16.1779207794943; Tue, 19 May 2026 09:23:14 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:41 -0600 Subject: [PATCH v9 39/40] tests/tcg/mips: cover Octeon COP2, QMAC and CvmCount MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-39-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::c2e; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc2e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207926424158500 Extend the Octeon linux-user smoke test with AES key and key-length DMTC2/DMFC2 readback checks, QMAC/QMACS fixed-point accumulator checks, and an RDHWR $31 monotonicity check. The COP2 readback cases exercise the explicit COP2 decodetree entries and direct TCG register-transfer paths introduced by the decode split. The QMAC and CvmCount cases keep the fixed-point accumulator and RDHWR paths covered by the same Octeon smoke binary. Reviewed-by: Richard Henderson Signed-off-by: James Hilliard --- Changes v8 -> v9: - Combine the v8 COP2 selector readback and QMAC/CvmCount test patches. - Fix the commit message to refer to RDHWR $31. Changes v7 -> v8: - Split AES COP2 selector readback coverage out of the COP2 crypto core patch. Changes v5 -> v6: - Add QMAC/QMACS and CvmCount smoke coverage. --- tests/tcg/mips/user/isa/octeon/octeon-insns.c | 128 ++++++++++++++++++++++= ++++ 1 file changed, 128 insertions(+) diff --git a/tests/tcg/mips/user/isa/octeon/octeon-insns.c b/tests/tcg/mips= /user/isa/octeon/octeon-insns.c index 9153e37e9e..1dbdd9f52a 100644 --- a/tests/tcg/mips/user/isa/octeon/octeon-insns.c +++ b/tests/tcg/mips/user/isa/octeon/octeon-insns.c @@ -129,6 +129,59 @@ static uint64_t octeon_vmm0(uint64_t mpl0, uint64_t p0, return rd; } =20 +static uint64_t octeon_qmac_lo(uint64_t rs, uint64_t rt, uint64_t lo) +{ + uint64_t rd; + + asm volatile( + "move $8, %[rs]\n\t" + "move $9, %[rt]\n\t" + "mtlo %[lo]\n\t" + "mthi $0\n\t" + ".word 0x710904d2\n\t" /* qmac.03 $8, $9 */ + "mflo %[rd]\n\t" + : [rd] "=3Dr" (rd) + : [rs] "r" (rs), [rt] "r" (rt), [lo] "r" (lo) + : "$8", "$9"); + + return rd; +} + +static uint64_t octeon_qmacs_state(uint64_t rs, uint64_t rt, uint64_t lo) +{ + uint64_t hi, rd; + + asm volatile( + "move $8, %[rs]\n\t" + "move $9, %[rt]\n\t" + "mtlo %[lo]\n\t" + "mthi $0\n\t" + ".word 0x71090012\n\t" /* qmacs.00 $8, $9 */ + "mfhi %[hi]\n\t" + "mflo %[rd]\n\t" + : [hi] "=3Dr" (hi), [rd] "=3Dr" (rd) + : [rs] "r" (rs), [rt] "r" (rt), [lo] "r" (lo) + : "$8", "$9"); + + return ((hi & 1) << 32) | (rd & 0xffffffff); +} + +static uint64_t octeon_rdhwr31_non_decreasing(void) +{ + uint64_t first, second; + + asm volatile( + ".word 0x7c08f83b\n\t" /* rdhwr $8, $31 */ + ".word 0x7c09f83b\n\t" /* rdhwr $9, $31 */ + "move %[first], $8\n\t" + "move %[second], $9\n\t" + : [first] "=3Dr" (first), [second] "=3Dr" (second) + : + : "$8", "$9"); + + return second >=3D first; +} + static uint64_t octeon_vmm0_zeroes_mpl1(void) { uint64_t rd; @@ -186,6 +239,70 @@ static uint64_t octeon_mtp0_zeroes_p1(void) return rd; } =20 +static uint64_t octeon_cop2_key0_readback(uint64_t value) +{ + uint64_t rd; + + asm volatile( + "move $8, %[value]\n\t" + ".word 0x48a80104\n\t" /* dmtc2 $8, AES_KEY0 selector */ + ".word 0x482a0104\n\t" /* dmfc2 $10, AES_KEY0 selector */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [value] "r" (value) + : "$8", "$10"); + + return rd; +} + +static uint64_t octeon_cop2_key2_readback(uint64_t value) +{ + uint64_t rd; + + asm volatile( + "move $8, %[value]\n\t" + ".word 0x48a80106\n\t" /* dmtc2 $8, AES_KEY2 selector */ + ".word 0x482a0106\n\t" /* dmfc2 $10, AES_KEY2 selector */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [value] "r" (value) + : "$8", "$10"); + + return rd; +} + +static uint64_t octeon_cop2_key3_readback(uint64_t value) +{ + uint64_t rd; + + asm volatile( + "move $8, %[value]\n\t" + ".word 0x48a80107\n\t" /* dmtc2 $8, AES_KEY3 selector */ + ".word 0x482a0107\n\t" /* dmfc2 $10, AES_KEY3 selector */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [value] "r" (value) + : "$8", "$10"); + + return rd; +} + +static uint64_t octeon_cop2_keylength_readback(uint64_t value) +{ + uint64_t rd; + + asm volatile( + "move $8, %[value]\n\t" + ".word 0x48a80110\n\t" /* dmtc2 $8, AES_KEYLENGTH selector */ + ".word 0x482a0110\n\t" /* dmfc2 $10, AES_KEYLENGTH selector */ + "move %[rd], $10\n\t" + : [rd] "=3Dr" (rd) + : [value] "r" (value) + : "$8", "$10"); + + return rd; +} + int main(void) { assert(octeon_baddu(0x123, 0x0f0) =3D=3D 0x13); @@ -195,10 +312,21 @@ int main(void) assert(octeon_seq(0xabc, 0xdef) =3D=3D 0); assert(octeon_sne(0xabc, 0xabc) =3D=3D 0); assert(octeon_sne(0xabc, 0xdef) =3D=3D 1); + assert(octeon_qmac_lo(0x0003000000000000ULL, 2, 1) =3D=3D 13); + assert(octeon_qmacs_state(1, 1, 0x7ffffffe) =3D=3D 0x17fffffffULL); + assert(octeon_qmacs_state(0x8000, 0x8000, 0) =3D=3D 0x17fffffffULL); + assert(octeon_rdhwr31_non_decreasing()); assert(octeon_vmulu(5, 7, 11) =3D=3D 46); assert(octeon_vmm0(5, 13, 7, 11) =3D=3D 59); assert(octeon_vmm0_zeroes_mpl1() =3D=3D 0); assert(octeon_mtp0_zeroes_p1() =3D=3D 0); + assert(octeon_cop2_key0_readback(0x1122334455667788ULL) =3D=3D + 0x1122334455667788ULL); + assert(octeon_cop2_key2_readback(0x8877665544332211ULL) =3D=3D + 0x8877665544332211ULL); + assert(octeon_cop2_key3_readback(0x0102030405060708ULL) =3D=3D + 0x0102030405060708ULL); + assert(octeon_cop2_keylength_readback(0xa5) =3D=3D 0xa5); =20 return 0; } --=20 2.54.0 From nobody Sat May 30 18:34:48 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=1779207935; cv=none; d=zohomail.com; s=zohoarc; b=YKlu7xteHDVbGaIAvmyU7jNu6dX35C5eHbLVsFuCH4SUVW+r9v4LpgjY5LWkkJgYOkpL92dN1i3a0zPKxw5eohGvWmqANs+heTd1vlmqL/2LjmyQlIyWSzwStHuSPEHgyA2d4YMMV92NIPX+XjfxFBymlQ8OgjooMlRQQe50LcU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779207935; 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=1VoRlbXkR15d2ZRoRf7gg0M4ZU/RzYT8g2aQHKJbRO8=; b=FqhjiwpBtGDYvU+JAznL7ULGFfB4Z5lIqtYxN+VNNOTyOLgg9LA4QC4+NShS0QRWniAE40gDJ/BqdeJh3djjNLUXqww+ZeBNM+ocXuWj/ZhVkaH1+PgMf/sBESzsf3GJJmsYOHCAvpjSkBBz3EQWtx35Hv0Wh4/YM83i+q9JIXg= 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 1779207935561227.2527405653326; Tue, 19 May 2026 09:25:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPNE0-00070g-TE; Tue, 19 May 2026 12:23:20 -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 1wPNDy-0006yr-R0 for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:18 -0400 Received: from mail-ot1-x331.google.com ([2607:f8b0:4864:20::331]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPNDx-0000qq-8c for qemu-devel@nongnu.org; Tue, 19 May 2026 12:23:18 -0400 Received: by mail-ot1-x331.google.com with SMTP id 46e09a7af769-7de7dc85b74so3776372a34.2 for ; Tue, 19 May 2026 09:23:16 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43a95762ceasm7056296fac.13.2026.05.19.09.23.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 09:23:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779207796; x=1779812596; 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=1VoRlbXkR15d2ZRoRf7gg0M4ZU/RzYT8g2aQHKJbRO8=; b=Ok2OqhR86UiMTVBnA2w+kwHus6XeUDtC6zurIHUeBWYsOs3u5A/fKxkrUrK9HOpYf/ CxYxa4rBj/7Q56KCH8JZIQqPZDkkmYGTMmtx/U4g1O833YLKWtRMcUnV+QZ2Uqp+h0mu VxTskxGqeroYPw/kCMuwXa74KQLTtkTQ2o8U1ScVOmwuLrAgEtj8smRq6kFGyYQnZyJ5 kndudJ9Af9zIu6amqmW816TVgkBycYZzwt5oFh6ZDOYwUBb3cI/WKvG4aZcM01X4Cp6l gIyqxCEAQOKhnsMoqXjm8S5Wgd92HmdzMZOsWN8xv0bEmcdoMFAu2NhXsPADwpP14TfK WYEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779207796; x=1779812596; 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=1VoRlbXkR15d2ZRoRf7gg0M4ZU/RzYT8g2aQHKJbRO8=; b=g1R/nOpP7pF0sfGfeMdn1ZtLHmwRw0cCDW8h4GglImaAxsYZJ+bIHPgEyTeRWbLaQ5 x907BdVAZGjeCsavgB5h5U/jYC5z0Z3qFin3vOADtKqTvQ0UZ2reUahv4aGJxeVniFEZ ny8rrBmGV9OpnQ6HZBy7FPmrREXidatb3z9N1HQtxGZ6RaJ9WqHIiBiPVEJWvufmHvEh Yk6vq4oln7pS07mz3rFkJcv9EjMq2zf4s2B6m8INnOxJolrBoRydrpC+Zg3yFxzAS78a XUqTxIijtfEIAWTmWBhZwZP7NLTnL79uyZM3TrPy9UNGqJ4pm0PD7L8ZaqrUo7Korsbh HyfA== X-Gm-Message-State: AOJu0Yza3OPtFQGGdqLMty5HfRC79c3YSC3mk+CETBIl9fx9TTp5+SE9 nxjfTqx96TI5fW3XksUS8GsKoPMq6yML45qhd1zshnUJPcZhP5EgrYCw X-Gm-Gg: Acq92OGXVFsdcx548iSHVs2vAtBHT/D19o/xOA8txV7CRUyQ9WBToewpRUps/88eX6R RiNrejDJyw42V0kziTudGBdYbhOisEIUhCcwTV/XnMeORLqIws0F/FATWDnA7E7E+0XIWIkOkdm y74si8UAktXVYLQwvBjVMbuzSsC95l1k8g0+QWOTFAGkzuyf4QViTPajJlHxM1ze79nUD6syxGL lCKJRd7O6sKk2p6BPZ1OPIEJT//zD1W+0ZjCQvQGUAH/JOXJ7xB/9FWRWwdoyXxSxczCuw1TQIB AX4XKHPzSZaauYvxCsu6QWZHs8IFrV5UAMbYHYojoMkgrav970X9WgkSrfhs/ozLw3p9SbvGMDJ 8u2N3W3CbG4uWSYOni2cGFWSTOfpBXvnassbpReZFBa4FNK6zQ4gVdcT0rx/dEEk1A/ONvSEhG7 AE7hFMywGYMVrcBgiC6bhPrMoP34sYtZoa2F4aTRuUIYgEwX7XYJVg4PjHw5iVvDvToGjRROjBS t4DUoJlMVCJER/40gZkm3d8mnG9CNgvtac2vyNsRAA3q3lB74nENwd6yWFR15JkAbvq X-Received: by 2002:a05:6820:2004:b0:67e:1be4:d8c6 with SMTP id 006d021491bc7-69c9bfe5dc9mr13034106eaf.58.1779207796017; Tue, 19 May 2026 09:23:16 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 10:22:42 -0600 Subject: [PATCH v9 40/40] target/mips: expose Octeon68XX floating-point support MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v9-40-d7dd735ecddd@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v9-0-d7dd735ecddd@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , Helge Deller , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Richard Henderson , Paolo Bonzini X-Mailer: b4 0.15.2 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::331; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x331.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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: 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: 1779207936283158500 Octeon68XX cores implement CP1. Advertise that in the CPU definition by setting Config1.FP, enabling the writable Status bits, and providing the FCR0/FCR31 defaults used by this CPU model. This lets guests observe the expected floating-point feature bits and use CP1 with -cpu Octeon68XX. Signed-off-by: James Hilliard Tested-by: Philippe Mathieu-Daud=C3=A9 --- Changes v1 -> v2: - Move this CPU-model correction into a separate final patch. (suggested by Philippe Mathieu-Daud=C3=A9) --- target/mips/cpu-defs.c.inc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/target/mips/cpu-defs.c.inc b/target/mips/cpu-defs.c.inc index faefab0473..cc1916232f 100644 --- a/target/mips/cpu-defs.c.inc +++ b/target/mips/cpu-defs.c.inc @@ -997,7 +997,8 @@ const mips_def_t mips_defs[] =3D .CP0_PRid =3D 0x000D9100, .CP0_Config0 =3D MIPS_CONFIG0 | (0x1 << CP0C0_AR) | (0x2 << CP0C0_= AT) | (MMU_TYPE_R4000 << CP0C0_MT), - .CP0_Config1 =3D MIPS_CONFIG1 | (0x3F << CP0C1_MMU) | + .CP0_Config1 =3D MIPS_CONFIG1 | (1 << CP0C1_FP) | + (0x3F << CP0C1_MMU) | (1 << CP0C1_IS) | (4 << CP0C1_IL) | (1 << CP0C1_IA)= | (1 << CP0C1_DS) | (4 << CP0C1_DL) | (1 << CP0C1_DA)= | (1 << CP0C1_PC) | (1 << CP0C1_WR) | (1 << CP0C1_EP), @@ -1011,7 +1012,12 @@ const mips_def_t mips_defs[] =3D .CP0_PageGrain =3D (1 << CP0PG_ELPA), .SYNCI_Step =3D 32, .CCRes =3D 2, - .CP0_Status_rw_bitmask =3D 0x12F8FFFF, + .CP0_Status_rw_bitmask =3D 0x36F8FFFF, + .CP1_fcr0 =3D (1 << FCR0_F64) | (1 << FCR0_3D) | (1 << FCR0_PS) | + (1 << FCR0_L) | (1 << FCR0_W) | (1 << FCR0_D) | + (1 << FCR0_S) | (0x00 << FCR0_PRID) | (0x0 << FCR0_REV= ), + .CP1_fcr31 =3D 0, + .CP1_fcr31_rw_bitmask =3D 0xFF83FFFF, .SEGBITS =3D 42, .PABITS =3D 49, .insn_flags =3D CPU_MIPS64R2 | INSN_OCTEON, --=20 2.54.0