From nobody Sat May 30 18:35:06 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=1779251892; cv=none; d=zohomail.com; s=zohoarc; b=ifCmljfxsCe2ADXjKkCh/biay2pJ7ZUhnV2LPETCeVJlsnhgW7h7Ya8nWg7BbqorJnp5oz9XWfaMZgxr2uGokgRqUgN6+UxXSs5y5WM+IitQ7zdHkigjMD1VOn0hANq4/iSMiMiTQP6OWBoERTjPcwMD/51IL8n9PJGP/8ifRLg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251892; 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=mUsXVo//vcp1WfevchtmT9eosSUpPdHa9P7um+p0jSoVfm9GdZ1fmfzYetKt8HGtuPed0/i74eWf48PYn1mpxbETZJYRmOZb0b7aaSQ30gfARtkuBT1QXpEQO8uh5hrvknBYBcIDYvt0rxwCwKaUyUWPRaeTiZemOBr80uxbhHc= 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 1779251892611966.0954287299501; Tue, 19 May 2026 21:38:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgQ-00012x-Mg; Wed, 20 May 2026 00:37:26 -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 1wPYgK-00012R-Gy for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:22 -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 1wPYgI-0003lC-5X for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:19 -0400 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-7dcdd1b492eso4499907a34.1 for ; Tue, 19 May 2026 21:37:17 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251835; x=1779856635; 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=SXtQUzxG6wJtX/CG0AtvEro6EUoqjKDQcid+g1rMkCyK0P7qRqcoFUWhdC0j5dr+Ab RZakdeg62c7flP3UDw3/8Q6NCDKhJ8NcdQNsZzBMicT2DrGYbUpE9A5Rqi3aQ5f0fYLO oSUtV+kPV7C6T4qRbXndnhrQCp8vM5aJ3lfwCCdrYoIx3Hy/6C4v6qOR+KG8KLiyuKtv uA3nIQaj78H0WHWu6igufcAUk72PNgGCOon+PeuPagcgCojuKRdmy3KXBvZiy96swWYI FEV06O9wF3KuyiqFqwNOfIPsRVuwks0K2WafjT9lztLo2czEPFPcIKsWNQgQ4pFKRxKp X8PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251835; x=1779856635; 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=q6kZyBm/bWcpiqjMhwv/RCISHPWocoSB9brQfa9y6KM69P0ATY8LckPOzOttQ175q1 4NGGiJGUf2vxN3kuZf0NjpVgk1qs9C3TWRpGh7uW5yXkPMe/BpUIwOgBOWyJaGr4xvTa iY8FPXsP6WMQ/8ShLUUePD2/n/RLbwDs0ida+GCu0lCAN11kcW6prmx5pNF2EsNnFzf5 Feqt90CG4RoXp/wHBX1B6jEjMwKMMzGWn7XZc/9duqF2wLE/EtLUI82uoL1ZW5TShN0G dGx4DvG0+he4x+5lcqjCCwRq2u5/oM3liOUN+jyApqSwCrHF6LlWcGRMBpiveSiAPqnQ VSNg== X-Gm-Message-State: AOJu0Yy/me8Qz+cK1bRJNGBqznXC44RopAQbJ9n13nryY9DUfjxSJ8/Q hkSNBI2TxWA1ucBtTHd00TMCr6LLssxq8TAQHB0qciUUyHQpsu7l20lv X-Gm-Gg: Acq92OESVLTTHElkb9w4pvg429cdOZogV1bOfMylbGBDqtEFVI0wSEH6iMjfVjm8aTW 93ru+oUXzM/KOgKovubDlQXnqxY4wxrq9s6Fy0aLTYrlF+RWBK/LCf2NYjUyrmjkJRnnTbhJGn/ H7pl1HSS4f9hhmaNNaimMZyDunePDw+b8G29TAD6gVAOhzdfDqmfvEbRLKCYRqhtKj0EDhqPfo7 6YRIyN89NX46EIsQ2bLc6Y7p6MsaIAd2jdvw4D0bIu4Ei4KjN4d+/5Z/hLaj2gEBm7PoP2yNYkz p2OJuHWAj0DZvtKLLuG5Q+4rYTcipaqcRDeB8RBq65/+jrdTCIWS5iDCbLS8MvFPPyTm2+/7iAM lNvvdQas8knRvV+PTO6ln07oMFu5fWmpCpMRMTKYzE65AfOCU73RnEn0lgoY/2ocO7nheq76TOs Rc+yq294b1LD81n0OXcu77E4AeJP2SNPr1oq4jL0Kuto6bFLOAc9LpDf4y5l9Hor67Dx05ysdRc K3LqnWjaX5YHNDnRCQgMOg0aJ4RctrT9wv/VUpOoSygITnAEsyqoL+cFYzyG5EOJfxPULLx1LsF hcs= X-Received: by 2002:a05:6830:658b:b0:7db:a297:9e62 with SMTP id 46e09a7af769-7e3f1030402mr16126360a34.8.1779251835551; Tue, 19 May 2026 21:37:15 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:36:55 -0600 Subject: [PATCH v10 01/45] 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-v10-1-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779251895081158500 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:35:06 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=1779252183; cv=none; d=zohomail.com; s=zohoarc; b=U5g6zavP7mwr2mgW5NDZlt4SnYHCtCh+ZO2JhzqmGBCSW2vmqCXeasjeOlaCG5a8wMTwnruSpPfFQXnptHqBLR4CSoT8wDVGHCf+ksUb4N+DZNkp4VakFiQX2CtP5jru+zvfyZaxIHqcWInNdxXNaqVFPnL0/DyNND1pvzC0fZc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252183; 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=MqxzQOfdWbiLjHccXvl6AgL+Cr+BOaZlVddMcvc6slxBZ0x55XXl99R0dDtTEaVOwVXF8lTLK19QpOcDfUgvuE7GM+cPP7Jm62yAjUPmX6k3C0Z9kYD53xwNpZZ55WZ3q4qnWc4X/CV/PsrwQpV29iPjTZhxEDUJnIF23r4LNMM= 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 1779252183947954.3247196513138; Tue, 19 May 2026 21:43:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgV-00014R-Ng; Wed, 20 May 2026 00:37:31 -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 1wPYgM-00012a-Fa for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:22 -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 1wPYgI-0003lI-PR for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:21 -0400 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-7de7dc85b74so4360434a34.2 for ; Tue, 19 May 2026 21:37:17 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251837; x=1779856637; 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=eCmG4gN6yLkAqzKCxiEFIuPc1e1emMbaM7rPmzchi0/9FnGyUw47cyKoKtuqxEU9Fk s9sSpipjol1NkR0ZoJBPyhNPtce4CH/grLEhqIwWQemiEhp61/InYIO2Lg+Q/kCA1Koe vTWSYrqerbC3po/oF5km6u3nKW15UwwTQvC6Oq+ObVnQv+xKmtyckQtIGTGuHk0ZPYrg Dnr77Jd2h4rysgqis1cDY1o6D3nsmin7ToZ5CZbjd6hbNjSSlgLnA3BrnfMjSHu3tIdz DArUwhZyA49RuqC+2QeT9LCJKn6Y0umqOPxVKsi26IP87lbFZRQfTM4e0QxUK1WNf5Fx D3TA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251837; x=1779856637; 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=i99szlh9g43CdVuVWiooEsd0Yj2GuBoZ4W2v72wc2TpGDWkixHr+0hbW4tdBx3T4Ow xlruozoO9nXm/7mlsOjdcyYWjU1lgCpRnjncHdjpA5R4wQySkMbNXIQoyRiADKL+oeLd m3D21/qeg9himlWNSRNEMQ4782cyUg8hvU+wZodl7fMRzAgSqx7akD16f0phXBeVaho1 TLqzEE5wQKrRRKjXdFckfWCKUjlwyvWiwaxDsIRvcCbV4nW4cWXZk57LYUdvSu1xrrsB eZ6ICBAH0lhl9Y2/twfnMyJRoecBgQ2L+hMqatpLN1p+GOodKdF4+siVTOSsHzMXDBR8 cmrQ== X-Gm-Message-State: AOJu0YwI5Fd2qKv2XBEfhYh5+xelHRMa3UCuJBLwnLQOZUiF4DNwywqg 8+0NzS6yWAgz/9Qkx9SLSMzQd2F9an6GLGCRSnFuCc9cLiacx/GVh8TX X-Gm-Gg: Acq92OFCVQvQtzZ/ds393Zz3CX3YthMkNFn6+WciKDdSKP5yWqpkj9x2Ycrev+8X0OJ 3WgrhrigUeF7moAMkG5rPj3WkJlNkumqhh7rqyb8360Hydn/vYtIWLNd5dgvF5km20tkDP3Rp53 gUueg98+ORljTb58hX4whNJqAKKGSXV+sK6Ydv5WQGqqR+1pk3hnbNjvcVR2ifmaaw0eUsxLopG ZAmOG8+iBH7vO7tEM37nxU+dAACcE6fpcq9Zr3Bfen3kNqJlK3yktCr9/lqPlD9Y+IA13+b358t 3Yiv1LosTlK054gRYi59hEMweKVx0nHALeX4td5Wypr86Vww45OU4OhC6s/IqCjvtC5p2N8kmaF 97qWWGEiYXEhRVYkcdZvHc/LGjUpvi25gvkpzmIH4kPsQfqoPJOgeyqsI9BijySnEnFYAtgyA40 6HQARa3+zjn69JTx6XFvI6d+A3XuyeL/zqVxiMkgNXDoU206zmz04OYlAsGUr4os+5iP6oTwVoz iUvjCUiADoDX2ZjbYMc+ZPjO1gGxdfwL6uIpx5m0cjqKEXEMY+LDZbdmjZHBurPZ4pQ X-Received: by 2002:a05:6830:6201:b0:7dc:2f4f:17b4 with SMTP id 46e09a7af769-7e4f2bb1872mr15469590a34.21.1779251836812; Tue, 19 May 2026 21:37:16 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:36:56 -0600 Subject: [PATCH v10 02/45] 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-v10-2-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779252184964158500 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:35:06 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=1779252182; cv=none; d=zohomail.com; s=zohoarc; b=WOnCMmbSzPAgjC+SyorYdZQtZtx+Z+sLDJssFH5R+Q59Alj7KdYWC4OlcFdfQ4kxg8QT2j/HqrGcBusm+apVv6Ug9l8KOQiLVV0vNc5NlKK72ISFBqJgkMUh4uZhHsHeuiWYLpVKmwt+HwKTCjBFY8DE8zr2zVpLJbY1o6NUNmY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252182; 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=Ho2vNIsK6EmkDrJA+grpHwujZ9z0ZVvsH6tcuBJJekJzNbCj+s+VoZJI2L/ss4d10WzRFtZdhus56CrEg5hcdvZbGRMkVb8T9bfT3/W0JJFgrqqhU+Joz9oH42rXbzZ2MmFyJVTCFXHo1VU9W4cjvnSvYkw6eOFYSw/1Wvo11ug= 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 1779252182687419.0693620375048; Tue, 19 May 2026 21:43:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgV-00014S-Nt; Wed, 20 May 2026 00:37:31 -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 1wPYgO-00012w-R4 for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:26 -0400 Received: from mail-ot1-x32b.google.com ([2607:f8b0:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgK-0003lN-7j for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:22 -0400 Received: by mail-ot1-x32b.google.com with SMTP id 46e09a7af769-7dca00c1591so1190220a34.3 for ; Tue, 19 May 2026 21:37:18 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251838; x=1779856638; 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=YXkbawWGLWSwG41/pOeJywj3mlWYSV/nD/KzMomFmBI16BLq24xbAuTd+AJYM9yA11 TZbcycUwq4a/Lk2v2DTDHgYrkEt0ixaBTtzs1T3O84nRiVUm1JaUxMVmQi83EqMwTDtY /VlTfRTSFH9cv64r7mTkD9c1cPLmzYmdviMp8oL+mlP0vgR6LsuXy61AGXLx/ZJx4TKu lxfd8GTtDCuww7+y6V8NpE9xcMEGp/wa0KwJriXPSHYbHtnzCCz+GFcg5gfeKbxKCIvg YOhjMLvE9W9oRi3jxNRr68vbkM7WQn6rstxxZ3VRloVwE3J4HXoUoKp6y3EwfljZ/aQy /KBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251838; x=1779856638; 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=VJQSTHcp4q1FksIqKEuE6Hfj2dj5PCWbJUOph4wSqY+dYMR8aE7VdDOH3vwAJVmn/5 Xh7b54Ha8XGFp9LxWbxf/rZeDjrC5B4TTa25mIlJ59oNkYZeIKE6fq2ojCk6WFCnsTq3 z5kj0wAXalVvkzCd6So4Py9PtSgr2rPro4T+podIqQ8wmuM00HyvFYlX2tY0ruKKGg1p Nasru5K8OG5vhx1MVe5yTZvFY90S8asUBPbXuwFMC3i3VTD+dT2y1Ipgh9b9uk7R156U aJ4FfqAX7hOP71LB6iFKIFotMyrNQJiMmZfkRrQRk1w73ZSGiVVOGzN46LcRu6TjPmW7 wVrg== X-Gm-Message-State: AOJu0YxMlSMvhK5ebPm6P2w8PLWvvQiLTk6/8+J4JdhPTRI/H5ULHcY3 Bu113zCvFHjKt0MnxvSdeRYXD5Z8OQrJ4gSHkXsviBvwxsrSftmeV3Fz X-Gm-Gg: Acq92OFZOHzmuSXB5UdeZzUW7Gj79/DPRilfUigk/8+i7GRFrTr+WAjABiIPirCJXpW 8Tvl5eeD9buuy9yb0m6GxYstbgchsXzbZPS7X1Mk6m042O1p7p3H+OoBlraZCWK7zW7tPn4pQtB vH0heYnGMVgSVRC1xM5VdcbAEJ4a/k32x0e6/X8eB6y2hBrHSdwVeNIaH4BLoK5b1vYty7CyM7x RP1eH845rs59EVQBKFiJjaE/gatpsWBuEvB8TtUfoELF18Oresuq4GqlYtmgob3ft10AcHyf5Sv 5VZml3+9BOLbmfUp2OT9V1bP/rRPK/2U+bYTc9fK+q8AlAIM4oz4/6y9Drascm2MIEiIxadW4QF sbR01JQdJVHPlDw8VaCjZv2jQG7cFIexBpQr+iui//P5edGWTE5i85fDzLkTNVtWxh2ii/iFKES zRgodimJy0739e1NQctd7HCKNDQ6gijcTBpnJ6UQi4/Y/GC9/c1ia3k1eknl1v53rUWdM/e13tx RKGc3MF/liCFVObQ4Am3uKiYSUzyrhz0IHx+fadaW7xNpjsjcfzpEZM/E3JyBu09MAUfsxXC+Gl eCY= X-Received: by 2002:a05:6830:610d:b0:7e3:d7d6:a4b7 with SMTP id 46e09a7af769-7e4ea0319a0mr15687012a34.3.1779251837851; Tue, 19 May 2026 21:37:17 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:36:57 -0600 Subject: [PATCH v10 03/45] 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-v10-3-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::32b; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x32b.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: 1779252183123158500 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:35:06 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=1779251893; cv=none; d=zohomail.com; s=zohoarc; b=DKnf4I63qEZzW5hL5NiDno2iS3KpE2lT3N7aEOngCBAFj+Qs2fqnrri2oEn2FEgqwSVjtBxDKq9wQ3ucXWKoHcDfuMHAsTnNnk/dMMbl7T04s8PeVX4Dr5rxxsZUT7GnxxnRVrwm62ESjMvHFEpMyO4Fa44q9m6nB2QB1nMiPQw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251893; 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=S7T+ZR02GnRFJw6Zn5BAsLjaU4/1kIqcNnskK7PJP5KEG+zzbBxhNFjnH6S/tj6q4PWw6mq5OdLMpZTy315M7eBkbrJD9geeMB9PjyDINplR/GDVDgzh1isdaC9pAY4b7nokERMArRxaUm7sei/IXyydwgailHuXH9MEmtB8J/M= 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 1779251893053466.5231674195236; Tue, 19 May 2026 21:38:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgR-00013U-D6; Wed, 20 May 2026 00:37:28 -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 1wPYgO-00012v-Qi for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:26 -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 1wPYgK-0003lm-Qp for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:23 -0400 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-7e5c85b47c6so1125087a34.0 for ; Tue, 19 May 2026 21:37:19 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251839; x=1779856639; 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=LAay1NyiyeY74QapJfdvDiN/Tpxv8ViP8WcExZWrK1pd+jrJH7j+zylJocMJwUCdMO AKOCuIcvWDSXK6uA4zH2iaCUPCqN/jt82jGcK6RjMKns+pYWadfv5Dp6iABZdq3noNtn zRuImegXK5kiSpG1T89xjF00723VsmHE5B3tlmbxGNDaGdpNoG1yMhegwAYn/HivaITL bCc3iyTK4a9UFYi/8kiBiiWtPo0+/mDUqCVDicgYtnroPikdma9GQ6qslnwDIXiZhRd8 lBX17e5unbO5d5c1CJN4OLZkewdIiD7sACSH7Npnan+ZcP2ay87kTI/nou1DxTtJu+IX TkMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251839; x=1779856639; 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=mA2uJVsDrhlYbP28KHU7Bryn9lzNGrs3EP3pe6gN2HYHaKZ4CZlvbR4yTp+BRWi2ZY WGz9ulFkh+XrvtJveV968O+RBHmRR5DhP9vnrdNdHfa6MZygBSO3fCmv+DcLHKKGaGU/ BEPW4iVJ88J7f/PJzLTynQr4jirdslAdTeuPj2ge0SM0SArRobxNWktq3FzEkHewTzSk e/x2lF3hp55S5Negr2qwwjPLWYRcXBSL4WNBPUYyttZ1e4SUJsk97RLpcZzPMMcWzz/a ppIMlT/u0RjjzcaC4MQXffB4BShuFBKJfBIsZX41h2585b7FmcV770A9ubvvJFxeAPbF aMmw== X-Gm-Message-State: AOJu0YwGCjwlgJ1z0IFfwxCLwqwJbxDVZETJjQPBcJHp/iVKYiLt+eKZ k7wg4qd+Hij/4Rbhgxj0AaVCy/4kLQy22pxuttaE72SdxB08ItQfscyY X-Gm-Gg: Acq92OHUwpZNpoQsXe2VGHrw9MRcymzvAndqL/wRDKMiDdNhI+yio/1DoQNMqITUq4s pf8lq7u4m3cKJHgYSzDKOQCbCjuJQMcI1cjEyd7FiJXNhBAFCeApEIVwZ1urQzkvkcWJDjrYf1V kV+O0lzMN5kPVFPNO6lOR/56wFcxYxkE/Xcn5LaxYQrtIXk/tAhNgDwDSIOY9i2n7QNJqvMwCMm 0nE/lusvNMYbrAzWjLrsBrkM1hs7WTQcikbxOUZISSuw96vPZhVQgMJx0EXGhLahDceZtxrXSfC 5C5Z+xzyNS1miJTDBfkjBLXzwBdAfBz0dT82wvj2ElGAuLwARIeu/kkafGyaIScZZ7nimOuaRsr wnaOUMP/6PxXHrTlmu0ofJUbm0PhxU+AAusUbH1GWjtAxtygIbCIqnvqA0Lmc4ixtG2EGydohqC CuAx8mNYAyWuc22upobN2IqVCoEMJhNo80hyCAwtkK7uBzK4KEeADfSz/5xYUrdeezmWVdKNoAj UXTwuJ1iJvxhgcDLL2Ev//5WhWlYKeDhfSjdbyjq9asnBzhRjy7mhB8ppQkbIPaDpwLrBji94W2 HktFGeOT6vxD6g== X-Received: by 2002:a05:6830:7307:b0:7e3:fa18:746e with SMTP id 46e09a7af769-7e4f2b1cbd3mr16928116a34.16.1779251839084; Tue, 19 May 2026 21:37:19 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:36:58 -0600 Subject: [PATCH v10 04/45] 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-v10-4-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779251895293158500 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:35:06 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=1779251930; cv=none; d=zohomail.com; s=zohoarc; b=SGDNO+x5xIO3LgMkYqxCnlPxBgMz29S1r5nxcB8zs2fI4gv0I/67QLlRgCcKN5Wu2nhdwWvC71n+p2vwS/E87K3MDq6TOjY0JML1NMtc2DiVE1tKWXM8OkarbqS0Hwonq+TCjEK0Hilpqtuo1JEuc6bVM9NdxEI7jYLu/foZOT0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251930; 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=SQVCk89PGy6Okd1Sxz7DhsW77U0SKPR2iSviP4KG6UGAv3qFhZ2ZsinJT9iJElUiKhBDaJkTHB4Bln4nf55zw/S/ssmkayOADbqTMfjOLektj8HeeHIuLAZWn1Q+0FfAsVYDwi5TXdn1vN8ZVmjwaXGd4R5vfajaXObzLx0yswY= 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 1779251930044346.19998435022046; Tue, 19 May 2026 21:38:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgW-00014g-6C; Wed, 20 May 2026 00:37:32 -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 1wPYgR-00013R-16 for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:27 -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 1wPYgM-0003lz-FB for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:26 -0400 Received: by mail-ot1-x32e.google.com with SMTP id 46e09a7af769-7e568ab0bc5so4966897a34.0 for ; Tue, 19 May 2026 21:37:21 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251840; x=1779856640; 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=oZyK3SndKZJXyLLj7YYNxQBfycS97kFBbFW2eoSsTYOQpKq0SyuYUyuhMZNnCwYS0Z jTR1oE6X20gGUV43FNLI+CYUnqs35Jz0jnvaEI3bNzg94c8FxqvwK3jdFI3c87yzCvRe GFjFnKO/wnjTi3xKWPZwiXHufTUinEHPpc83OycOQalqNSNXM4bPuRU2iK5CZHPDytEQ q3My8PFwtf4HpLfft4Nvoo7t/nKfcklK+NVjuXSQA49EbFbzKbqA3wcwuwoHc2rE0Fc3 b4PvtXVqXn98AWUOi1la45a0Ff189szOqeD+pzg4tRMYFWUVl+Z2SrmbcuLVNPNNraJ3 RnSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251840; x=1779856640; 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=owPfHWeImNMuK0mnnUSbeWVHmSDq+76K5cjoogHIgBwffViTxHiNVyvC2k6KeoFIeI NXjQVxtNPZ/KOLsF8wsrzFGqzf5A+hpV+TDxiq1mtaBNj7C3JNJNqzSUDDxU+UqRyOxl Bz94VrH/qKvdUF6x1rn/0Nf4C9VuRYZRTsluwQC827MuG3fhvap9V2PAsr0uQpHTo07x yxRrbxfZxTcuURqFServwTAVHvCObe9PZMCySm8tjbRIyNv6755iNLsaNzNxTU6vITk0 nIoyCdCn0EK4GNRgwZ/sDzaAcq3gT4XQSAChm7wopg497nYDvXH2ONHMLiZbX7PTtq1v ZRiA== X-Gm-Message-State: AOJu0Yz8tLvDcAmFbZ+33JMZdo6BbEBBceuB7jKRwKJzhZ7MS4ErOAXT IrzwDtsZ5WDJ0B5HNvfT8sUHbdzawNmul9e+9llBpCmk33EjoXWpcVnx X-Gm-Gg: Acq92OHs89dzHC5QVbzDQD916hBWLdCqEGjKva/hqejkgi6FV8yupTExZ9Egp7jtSkm A+aNQ+VHnYFPldRitxu8lmOEkr9XBCwL9KG1XmKIBQFOlGq+J4ZdMcflFMaILDszG1vmjhRFOta T6r+aBW55LI77P9I7jQcqzQkdFYuixu/4JjuRiO0s8r0sBH+cukRw6nK0zsgl7Q9t8HFit5Mm1u 0Zbzct13nR1ZhRIFN7dnCLxDuE/cLvXHE34aQ0wlhVVKfM+HKkT4JBoHHB6nOVGZjmngyzQeTkb a1dNkdaED/P5Z3s7BgjV/j8SyDlyAg6XRPiiChHplueI/cKQmjMaZYDx3as/mZJBbAbJIwLcneh TzkXVFkUXd6282kxrHjXVwgmMFe4bKQVhmSkvOFNuZyyv4IuAAo38wJquBA/dUyCK2e+W6M783i NJ09SS5jqgVvlw8Ojxe/VaKAjNTROID02rEIafCQDRQQ4vAUVWbVy8Oq+bw30mLYN5+xNeFgpCh 74vFQV9kWQI8cROlTlYG8ziLRU0FppY78Ll43F6qQ6qJkfgvpL6zgLxV1zbA8XN9b/O X-Received: by 2002:a05:6830:8290:b0:7d7:fd71:f2d4 with SMTP id 46e09a7af769-7e49a889f33mr13595703a34.3.1779251840607; Tue, 19 May 2026 21:37:20 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:36:59 -0600 Subject: [PATCH v10 05/45] 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-v10-5-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779251932344158500 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:35:06 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=1779251961; cv=none; d=zohomail.com; s=zohoarc; b=IbagrD9cPqvjb1I2lN6dPMvdxQyx6wQ1ojoaKTZyDbsRW1fyKJm21BNotN7228cwPE++P+FEGEWFOqL77FwS02L+dz47jTRoU5QLt2ERrk/3NdnHN1GiXRyUCRfMs6R151o/ulDOPKJxpcK57vkVyRqN00/KmWGOlChHpnIL43s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251961; 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=Wp0xfiTxDB0yr/rOmwbodoT41vqPXEKBkhXppBFUNY6GREwUJ/v2FjM5OqmH3JMBao5EaAa+m0LinYJqmS05aEoKdI6qn8A2o0YuZPuBog6JudYxuHuaC7nSd6ZseaPEDg0N72UCJYCY16/jmxGN1cWnsK8Z7UsdmOc3c4DxToI= 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 1779251961000797.4533312166809; Tue, 19 May 2026 21:39:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgZ-00017H-Kr; Wed, 20 May 2026 00:37:35 -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 1wPYgT-00013p-7c for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:30 -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 1wPYgO-0003m5-Qa for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:28 -0400 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-7dd73b7c757so2132729a34.0 for ; Tue, 19 May 2026 21:37:22 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251841; x=1779856641; 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=LkCyVf+COB5QTtc1waT4R/aZ+rx6nN1p66moMX4skVcv4z+i1r8gHQgtPBvrBImkov h46v+4qX/gbXh8sQ2+XcNoL9ZSd9qF7uOAAhWQqjVjwNfyj52KI7L/wnAfmvCGKWLowC Kv0oTcvRAHDeYFEMBsmobDxr09M7cCZOr+3cSzTsEklDWl9kZzNtUe4AkA9whyeq7I+V PsdOO2H/HaIyOjZSepl04BbgXftLE63l6tv75zKGN3MBADvo6jBXcIXuWK36BWC4xyJm qcb1LyeakAlDV5idAIuLvGdgUvttbT3hNuTM9Thko2lBGw0mSMBSUOvJ2GyAqOgeaEE/ 8BNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251841; x=1779856641; 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=O04nRr1pobyTMi65t5+WLecOzFEGfaIhb0y2V2ZTuZW/ADpD4JpvdFa84rHp9eFIa8 r+fQBmBNgQkGvIiibVePY8XsiCDPX+vIdHHdKVM4kJk6jIXQbkpmZUNGts09yNEPk/TQ uhBbl+Qh7PUAUy+vRsYN4/Yu1iYtePPXL7GwGRm7UxFyDPE7Z0WrZDgqsPooZ9pjCOin 6TOFGADHUIBw8tKsMG/mzsPZrlilLRQkxHfS8w9W5NXAEWEN9dR41tduCH4FwgISEIg0 zW85XgUM+THBvR1sUjfqYOA2bQJQvB9YnLqDTFScVoJajH12OvGdZ9xjWbYZoXfCgNtj LQgg== X-Gm-Message-State: AOJu0YyBaEwb5aHJC8F9oMAuG2sd1Jo9Bwe0GqFbG/Hyo6td+Jt0LPXB 6NCEfVhEif5GDmp5RndP7K5dqj65v3CjwPcdi3vBOIj2mhE0Ztx6DRfS X-Gm-Gg: Acq92OHGhbVwePqhtAAaX7tY1+wyHF1N0Csywd01oXHvy1cgm/a21slZos1KV52bYUb atWsZsiC0yzZj3Ygj68FOADnvGXoviI2ttfKSowXz2CPM17pg2fTTs8czIMKsUTPG4s3X1Wtcqk w2LzNpdW190jFeZGNMpjNVy0U+YkMGt7SEMG1b0aMd3BL8KYbBJTxZ6rp1ytjxEdPfuegVy/lND fjK5eEK4pFZml0vvOicIVIZvAWykYYlz8TiTH6xy4SWFMQ7AOMjRhdJfhnDoaVlz2OVVwDx2Sx1 jAoOSm2WDeY7WTofOWF+q/eUSNoVE/9fSucCeJCFXQVMYT4VUWdgPym+JRwlifeqeaZURVILcNU o86j82jfbxABD995k4zz3m6Fp2tDqgjYvvIfmamAPQ256G6D0WVuSn/qK27xSGECAXJQFsaIshi M11W1hD9WJqWaPWmjVSjWIHH+kUnx7l2vItZbAaLTBqf2P5Tf4/nTCHPOu3U+Y2Q1n/7gemdgnf HhAM/lM1i7dwScBMJz4J9GKhsramAdQl0ZZdcNE769MLWetiGT8Wm6LTSNKnbK6d5Kt X-Received: by 2002:a05:6830:a8d:b0:7e5:68c3:6246 with SMTP id 46e09a7af769-7e568c3630fmr8921172a34.10.1779251841647; Tue, 19 May 2026 21:37:21 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:00 -0600 Subject: [PATCH v10 06/45] 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-v10-6-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779251962440158500 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:35:06 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=1779251929; cv=none; d=zohomail.com; s=zohoarc; b=DsjwxU1m5a604nsX4m1lypq8WQa1UjRA2OFyfocwMxflGd3pRfhZX91j2AFxinKIYr19Na2iQT9zKbOnBXhfhHTuRVrTK5VfISp/JAJsY9z00cMQkjAGGWNGHF7dPLk68o+zCoruXcACk32kmvyQiWol//zEgnzmVDNcnjWErU4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251929; 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=CRuG7qrVPkthvDmm4kU24lhnzVayFaN6w1lDxWQWxQImQ0pnLiD7GtXbpgfNi3o+XViwp0JKuHdKsxzNsp8a4mR302vgRKY7tKO0/Po4vstF8RXVOKghF2xlZr8CCgTfvnO1Kw09qlSwuWSnR/Qe2swoCC4J2/IMG1kanHZtNQI= 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 177925192936018.401454080527742; Tue, 19 May 2026 21:38:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgW-00014j-Op; Wed, 20 May 2026 00:37:32 -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 1wPYgR-00013Y-DJ for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:28 -0400 Received: from mail-ot1-x329.google.com ([2607:f8b0:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgO-0003mK-Qb for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:27 -0400 Received: by mail-ot1-x329.google.com with SMTP id 46e09a7af769-7de4a9cb8eeso4337206a34.0 for ; Tue, 19 May 2026 21:37:23 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251843; x=1779856643; 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=Gn+9VNg9b2VvvlIB/IJt8nsmABIxFtliVZ6hm/XMrkxw3ruNnWGx932sd354GJQcOA yey6XHz6Hz8IQV4+Pzdl3CKW4Tdh5VFEeh7SAX9DapPmA9/nO/nGNSbAVhBQ+zaBe/oU xk7SupncVbGatHrMzX8WyqxaLONnrb8M5IaSSe3yc1JpeAEwq0Dee8AlUBILLJoH2Jkv dYh0NI1fuO5Mpvxv7i5lVBKI/jQ0aFTpnG4pj0CWyH4i06qD1mrQvJHJU/+gdz3IEsUB awOc0V7ttJFslNDyYSikPl/Zzd9O2eWwZr8Mi7n94iT1ikabwCNW4xxJn8kZIV2TFyXB aqsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251843; x=1779856643; 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=rtlPpdGHEr1b51SLfP4He2ILWt4BHhYxo2CL3jtw+KSUOno4eEqn09nidVjQZGH78B 32Us2o2Fpblnl/G47wslGrKMXMKVKoKJL6/9D7WXOgAXZ1NhyMMCxG0XPHF/UVhonhDW 59jyzLQw9I3cGACiXmlIvSzVfJYh90HbaK8l9nGoNa49D8MvI/xZw/UySF25QGhDEbMV Gf9VjZEfRXQKQQ4SEFW5UA76VIk/u5L1Ymqqk0BVEqSua0O3YHE3oHT3VbID6HUBTMuy QpZkuLu3S9nY0MIqrHPraDddDV1fFn5ktC2nNntLXYOU3/UKGBtF2lxjV49ZkH2/fFWa df8Q== X-Gm-Message-State: AOJu0YypAu+F4W8qy2w8761pXL3ELNHAwjQx2oVV2Ttr4cGmb4NdH3c7 5SCXAx1J/z+ohPHibN/kP0BMhPpuvgBU+oAjhe2U6CDo9mD6uCOWBvGz X-Gm-Gg: Acq92OFVYX8IrjzGbyLJ06NsWCiYhdVFdVEWSMl79EXwIKc1uk4mbZj8HwMxGc2TXEb mBEM1dQwm5hKZps8irGJOux8+TWqUbppj7/6lSKoCaO8n06mb7HhkqAwl5ZimKnJAT8W9pJwQvm BXr7vbjk+9GrV7USwWARsH166eKuQ3sDtffEa+o2Y9qiK0DknnI+qCc/vIYxbd/7xrpJOm6P/lD fU2jnKR3e2ZZ+U6SfN9wEoSVaXhOZ+i9rwo8Wv17p5kADlXeiH87M+bDPGxII2aYYdd/KRFmk2X e0zFWoEstCFfjl6aYxTKWNF6E+/xLlj+2RdzSnc9aT7BZbQYOeZHBv65jfkqjtqknmCNp3I/7B4 Z+n6EPPnSXjzLOpgwPXKUgOrDUtuVSMXb4d9WGDMfECQZtE2JfXFQOkdGAru8s77DXzGfe8sUrl +ZdElW8gOQYpbRCy8tdE2cqszPxGqMJeP6tjrZKZVYhw2KOjJmAdKYOv7bvclMkwizb+ZUucCo4 TDf3NVHxVih7NluCRZd+2t2oMCI123SN/0JyCc4bmoOaX+ByTRLPVpMEhYu0LQxFfsl X-Received: by 2002:a05:6830:67d9:b0:7dc:c7aa:22d4 with SMTP id 46e09a7af769-7e4ea01b6cdmr14699448a34.1.1779251842897; Tue, 19 May 2026 21:37:22 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:01 -0600 Subject: [PATCH v10 07/45] 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-v10-7-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::329; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x329.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: 1779251930714154100 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:35:06 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=1779252130; cv=none; d=zohomail.com; s=zohoarc; b=Rqyl58A6I+7GteS5t37d+TtUQJjzn/SuN++/tKYcDYgwlMWTJxML5hnHf62LA1drB6mJm1S3AqepcRhiJbBBs0mgb92nJHh/gtHgmaF4oNW4lCvv+74npCcsmd6pMITx5au0LXVAeumAms0u8RNvVR7iWjOPTGCbSIgdMcW5Plo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252130; 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=AQZt6Fe+Z+Eh6ETGfiwRZgLi7E5pXv0aXkupTDM3QebWngUaugbk7LGJeqn52k3/ncb96woFh4aHBABu278BSh4TIBmB2rZdAlcJM73RW3/Zo5rd1Xb/EhxC+yJuUSUPZS2codhDvDU/dsyFT2H9tj3FavyQohlqvcp8s62q4Y4= 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 1779252130547386.51538255341313; Tue, 19 May 2026 21:42:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgX-000156-2S; Wed, 20 May 2026 00:37:33 -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 1wPYgT-00013q-C1 for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:30 -0400 Received: from mail-ot1-x32d.google.com ([2607:f8b0:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgQ-0003mS-DX for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:28 -0400 Received: by mail-ot1-x32d.google.com with SMTP id 46e09a7af769-7dca4debedaso4640246a34.2 for ; Tue, 19 May 2026 21:37:25 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251844; x=1779856644; 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=pD+eNCmXC61HtH6PEx0CRy3Ts2rGe4UmnKYrgdj0GIbXSWrj854NbA6pK3hsLxvau7 tmE86bsZ5xjdOt6ZsjbNt9Q7x7W/w8rdEGhIWBAxR0chfpkgWiOnjzAawZ6Q40fcRgkw Axf85lwt809t2zOKRmD8iH5JDHQTw9Ci3RmGB8K4MKxR95j2LnIaTcDgMrZ+jl6TjoDB WVlOtku2kDT1+I8ULjjMSoT6997W+cY1fJwOIO1E84oR15lPyKhcicLFHhQvlTX9bU7e kEzxxJHb3r7LQ67TQ/vD7hmHPW/MykqHHn4VwzV/f8QS/PIrc15dhNtiD8Fhj5Jkk5BU 9MCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251844; x=1779856644; 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=TkdxnURdFXyFOwFOpqbmLWbaGMqxqoVLQLaqwVKBMmrSauRGVjF6ZrV+Wp8IuTb0PV dpoGN2/Gi2AW3AFmxEZeXOPfOnBUWqZD4hlLoBbBa9PHbvSWRwJqPEknQXIuqVGSatvw xCGQWFQsn0yUHpgseQb+LcZgh+3wV4++jcPnmwW+/fwhMXnvVybiUtNfJzyjuzmNXUkw BZFD7Lh0tBa4bt+RwTusgLq86PMTrEbedYAklBeCSDwuwfaAA/5uP6PM/mXMaY8Ue3QB McYakePcEe1U1blZrgnJCNNr6fjaMUpYpl6iiP6jp5pmvOo7d/mHd/YB1hTmkoboyUyR iU4g== X-Gm-Message-State: AOJu0Yxn4oEtgKZJ1OQZjqDNzkxUgiU2bLXenR1UsqzYUQ1rMlzyCiOR Z1bkMpDuOGsov9/8bwZdl2/LTzKdVFqpmCODx017JqlJZKkRl78iCEp+ X-Gm-Gg: Acq92OEbDVMzE9Zc1WvpgNq/uche+sbcQ4pjGR8DvYBnp+sYl9LrDO+JfEyRD7vTboT I5o3If7FQcxWDtOxIMrVoYwz9eQ1ywoBISmKACxL9EV2j9cj00r2AccAJ6hzttrSutL4253s8gK PV+xePQt3a5FPeNodO6rs8Vca2rGjpOupXA6TuOitu4BbTyKRaGfVeA2qrqP0vdYzRtsrTTnVdW BTcWZ7xNtpjnAyPEcuKW18vHYa+xJb6PE6cgcfbaxbQveYKySwUyhZfK58m1npkzfWf6kl2WTCh SuUVFcB5v8suGPO8MjjILXxJX01ZfrJXrZiadTsxeFbdoxRHytE//uNsATiwQ4epcEa2EkZPkvM bpPxcSPUlTC6hmDCbyfWSBVtNW96jGvgIbUCg34yd5r4sN2L7vaiyZcd8TYLyy8YNHnARfOaa71 CTYufCrkpcu9N+H7hoDCTb73Gd+wA6QdElnmzN4JJMLRtWQ1njNPDx+769O7+I4Zog3WK7tRcvR j5sqsKmieuTToIhMk/DpTPn/4cTW3n6YHInLVLOrHY1EJUZFF9NyRvpdmEU7jgH/e8K X-Received: by 2002:a05:6830:4704:b0:7dc:e090:68a with SMTP id 46e09a7af769-7e4de651649mr15526334a34.0.1779251844066; Tue, 19 May 2026 21:37:24 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:02 -0600 Subject: [PATCH v10 08/45] 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-v10-8-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::32d; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x32d.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: 1779252132572158500 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:35:06 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=1779252026; cv=none; d=zohomail.com; s=zohoarc; b=g+GaYWKdDNlLb7xD5EL812vOt8nq8CXDs9+W3wxbR2zNysjB4uIXbEaRTTEdYhwFy5IZCex1h2skJcSfnaMQJtWIjgv5NVarqzoKgJqIeFrsgU2FZ/je3PjMYRXSDW0ezuBc3PgluOeQPQbaXdRKE/jZq7XG6IkP3ZRjnv2Z8XE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252026; 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=DD8lR/8LTABZxruwg2owEgG9IpBroZZI46f55h3RBdcKzvXSDHyqNK6KBsPNBhNjl7+9nbZ/4GIfXUhLR89ByFTIRuQguXPYrcNzv+x7Y3t5IA+V2TuwUbHD9EQPKXjCU1+Nw5j8vPvtg8kUA5VQ7VSXMnlg/ixoRBllHxrtWo0= 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 1779252026845197.31592383135205; Tue, 19 May 2026 21:40:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgX-00015f-Gc; Wed, 20 May 2026 00:37:33 -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 1wPYgU-000146-EC for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:30 -0400 Received: from mail-ot1-x335.google.com ([2607:f8b0:4864:20::335]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgR-0003me-NC for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:29 -0400 Received: by mail-ot1-x335.google.com with SMTP id 46e09a7af769-7dccb8644c4so2435081a34.0 for ; Tue, 19 May 2026 21:37:26 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251845; x=1779856645; 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=X/9yOF2CRJt3hsslOYq+kpkrpTA1Cx3DWBwpiwFO7T0MQujKaw10mKXPgHz7ESsYkA 0s1/HjUTPf2KdYkFkAxmzhkhjoqkcoa+GtmVEcp/p3VyZxYnprSb4gTVHYhC3I6hJZN3 gfJbVfLcKIU8YkDYY/jsQTqP41t8YfkaFFqhZDAnYk0FLsgmrrW+JBMilDQ0n15KAtNS emzy7y6IRa0y+7K+rgeU1DZSr7p9lAp9KoinyeqhmS+4H6eNvco7YtqsNn5JWhqfzj/0 VGnWTgaWx++T7GTGJwBH+s+nutW5Sc+iwHnQwwSr+EPbd+jYmE+7un6JSdq9szNYvYZn nNNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251845; x=1779856645; 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=DhX25MLuemFZLi0riDcjbAXY2vdmEVElG3e21NMXuhuyMbHEPcBn1wxKrOhy/sJK4+ qnkLDF5vjpoTK/ilT0hvoB7YUJy4jEHnDi2dpk1C47ENZLPS/06UY/qB6zgTkgo56GiW U7wjLmgIxcZeOZs42ZqPR1PTrjjN+IcpKykhEUImCAI8VISrRYN5qrGCAHmF0KXRW9wS btyIUfYeEXoRbBH/3d/Msd0Y4A6w5bTx4/tAT8LL3JqV7TeQGRD4N/Pje9C59968KTpo lacODDkjZl9yYFmV0qwTRSQ8Om5vJoiCL2COfHsOEfWQQrjfLrv9Pbqtbgd+DF2DDyy5 qu9Q== X-Gm-Message-State: AOJu0Yz1o12jKj+BBhzKdtvbQItzpznDB2hn68bZGdo22HTft4NadU9H 7FkcRsHLf+KhGV2QFurMHkSIjLcycjBHC0ORUROfmoyy/NdLh89RtyVM X-Gm-Gg: Acq92OEJTOjGRXzKZhoZULrD27KlrM0oWsDSTBI0B6AgD9ZQw4P/J6dN145bPnI4BJ3 xLpM0okAwkd9bqu3wMQG2JPelnJX+7HHpXS6ocJo8TuP+gSekLcSW4wMTi1nKl4sNJJmDH/mI+H MzeA9NAujTbUwCs0zBnTleELEXaNfVagIupHtBMq457h19OT0JOEQMnUb1clnH4rOLHhsp7T+vn O7BdC+XnI7HUsTMpqFt+4u40VLGgO74CNDOM8Ui697v7K1W6OpUvEDBgADRrf84vyzsaXnPAQwx rz+JR67u/dr/1M99RMgJHBspCLcxE3fAyPBw0zAFEKMuRpfGCsXWcwNW1Oe6WOYJ32HyCXel4gC W5B4HQnF1prnBEDe7h+NmuF5sghQNTBJWpD7YtrTMLULcWSf7sup7EIOpsFfXQD9ohv2zwisqtx eFrDt5+DwbqIpwzzn7OyxauN5baHkRgoGn9p6mr8/U/PAHUd3JxdulcBRNp/RX3aCH+1+oGoJBp Pvf9lfH0uJ1XP4kMSHs4tw/eR5LXqdMIHAfQLxAhHHNl1uBVvbKaOikGK62ELzH/NaH X-Received: by 2002:a05:6830:3149:b0:7e4:163:49cc with SMTP id 46e09a7af769-7e4f2a1e5b6mr15295412a34.7.1779251845279; Tue, 19 May 2026 21:37:25 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:03 -0600 Subject: [PATCH v10 09/45] 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-v10-9-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::335; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x335.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: 1779252028590154100 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:35:06 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=1779252007; cv=none; d=zohomail.com; s=zohoarc; b=E4xeh7+DgVy5IazcHIBSUaYS+M5oOo/nYexehkABI+PuxXcypPmCcatFkLFZn6rBGUzEchhTv0LdOs7rT1EczlpFz2U235LIksixRKOdcfDQD9afku/QGzDBshuYRgq0TBeNXBMFqQFETd89ve4wQEI5Duu9ZznsAo8msJPqviQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252007; 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=TJmeok5dyb+jTPPE7JNs+D2nk1oef8ArbqQIY8hanAcg369p3DBSci6u7Uj7d68e+n9bUrMi4DMQoysCE7uPR+EXkf9f83v0QliLsjR7PNZ+vTZJ6xTV1m8IiAeULvbPktG0rpvize8xJvSZF4Z6SjjxmX7ogecpiz8+XYmPytg= 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 1779252007347307.72661153186164; Tue, 19 May 2026 21:40:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgX-000160-RQ; Wed, 20 May 2026 00:37:33 -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 1wPYgV-00014X-Iz for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:31 -0400 Received: from mail-ot1-x32d.google.com ([2607:f8b0:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgS-0003ms-VA for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:31 -0400 Received: by mail-ot1-x32d.google.com with SMTP id 46e09a7af769-7df05fc49e5so4626486a34.3 for ; Tue, 19 May 2026 21:37:27 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251846; x=1779856646; 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=JrQVfw9HDf0VchnU6MOipQNHJpkvqZQDsGE9jpirga4tnDnvwYV9inq97aDAwGeEGb JUhc8OwBBMAkGyX8/jeMoToOaG6s75zj6mc8f4JOOMTkfJTNsH9F2isVnCxXICSN2ErV zy7Doi1PlQ5vx09VSlU7N/b3gLJiLYZIAaecaj0NznFbKfo1LUfNrHKRc/3zkJDgiilx wXNm7E+DzQcIB/73FamTxebg0xDHxEjd5ZLX8EwFHbd3UDdusfNpGMHgIh9INC8i4F3x 0EBGL/1l1wxp4PJg/BQeG6nEdsOv2XPff4LQn2tFKvN9ad0pl68m46uh6NKVG1d6Zb+X ttqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251846; x=1779856646; 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=mmKpTuNj4K+mrTNzBu180GyC01Mx1G2FoAdHzhLLZvKOIFsa8hQ1e3G4Kt8i7dm7XL cdQrFaZN/P0YLo/H9xTAGXnKNM5HlBGyxpvu8z3r3z3nXOsNtIA54d5LfnuVUJ5LpO4j J8AkC8A4y7MO9yVD49Bjl7LqssGZVVNscrjTtzDkoseXsgf6wIK4FTVBg4n3Y6N6h85l sZZrUwY21jEldCu0SDmdrEAv+KUTTEycbhNZkIJ5Ld+GWpCCj0byadJAw9bQLWAdCfPp JHXHsQHDGlAqPht3NoFTIeHLZs4ikrrGGEYZPkSIwzi9xtilaQdnWdclF0d2VQqfmH3z PJ6A== X-Gm-Message-State: AOJu0Yzdnq1OYetdxRscC+S8x3TVUxm5oqpqnyve66+m/XviT3IkBDJw TLHQvM+6cFgwo9bSwME5lQtsntNlE47ZVJpLnfJb1Jt/sPrM4nfQ1rAc X-Gm-Gg: Acq92OFYl20NAiXlpE0k7WoqmQLSKu+mrqrOFG37EMHDCYuy3HttH0eo8/n1YXfaxRG +86rgRexfjaOtljUWfP35WCvHuObVVTHRpfFWr78mKT4OXZnJ2rcQ7Wsl4XRB3V2nD412ckiyV4 Ga4lDdS3gJrRiOfhopY6ARcBfOeigCsdqgZ5quf8xIWMMkXPcKYbt54fFBadarr2tE+wjXgb5Q2 WGPJ0HErKTu78Q3kJCRQkQhBsobL3qe4Fn9ug4MK/4Sd5wOuYbqznILfKSNNJu4W/ibd+yMt5Zp Ft6Ti8L3yFginkt+YBGlBu3mnVp5T94DF2r7Wm5fcyQ4+OTVgwG07k6wksPzfScyOSvXgTZMrhJ zooHcgpeuvZvjhCZmZYrP0o4RSmihHp5WPnmdF86oaOp/3Kd/Hu5hIQFdsTdeXzQ8RfovW8pVqy pwYPh5d8a/GEhZ+2ezKYuL4FVK1c4nKa7SiemKx/N/pX98iAoPygj5IZASwuvJLdDRLn3W35fYc 2LS/6rogSOosg+pG7JySjOtP3tcQSSddnq4MkBzI/fDfBbaDKQnkXKATrXsmYTXdfXI X-Received: by 2002:a05:6830:6205:b0:7e1:f7e9:327e with SMTP id 46e09a7af769-7e4fa05ec7bmr16481899a34.22.1779251846518; Tue, 19 May 2026 21:37:26 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:04 -0600 Subject: [PATCH v10 10/45] 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-v10-10-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::32d; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x32d.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: 1779252007782158500 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:35:06 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=1779251931; cv=none; d=zohomail.com; s=zohoarc; b=MLjhEzHi5CXdozsmkJ7H7UUaKXtYJrytdcl3SUs9GlU/YMyh3h7yLgnJzG3njexf59rbyWyiCwstOzScUYjO9EMPor+q5UjmqK4mhgwL2Kqv8/LHtFKJ+KcMMFwSBb80D/ZAz8zTfxZfFAYI/2JnmKH5bLe6paYWb79n4D49nmA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251931; 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=l3rshAt/Pxs+JGBWELyY81kfmh8qFvPTms5ahxEIe5QV3g3G/viMTuvNuGcJMnxKMijdulBKICCTrA0pwmU0m/+lXgwAdM1u1KL/FRTsTGPWRyUXgbnAB0/UP+NJ51w6xwZ/equ9XU4NxDG6KnvSpt0iF2y6KkixxXqMqblM1lc= 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 1779251931970363.8468315923832; Tue, 19 May 2026 21:38:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgZ-000179-BR; Wed, 20 May 2026 00:37:35 -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 1wPYgW-00014i-FJ for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:32 -0400 Received: from mail-ot1-x32d.google.com ([2607:f8b0:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgT-0003mz-LM for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:32 -0400 Received: by mail-ot1-x32d.google.com with SMTP id 46e09a7af769-7de7dc85b74so4360554a34.2 for ; Tue, 19 May 2026 21:37:28 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251848; x=1779856648; 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=kjA/6cf/213MrvOeaZNoOH6gv9s0VaX8TinX15Y9sdH6mxGxz15thJQWiK0XZFk1ko icGqg8Jl5NnxhtDCA5HlEJowKMyzuj4sxBiPpCgynFpk9Y7oLDsbHJxL4cCD7LKipKB2 Th141S7hP70tyOPHl6hqGw034NKyWcNKn0FJ0zjiiAtsCYidITkNOPQxSqHb1bP+YPEh cQW+QnlgehfDmcWAMSxJV0+6zylTmgDa0t7lMEjYJmFLk/cw9W4HdJwIRbLDHNiU4dr/ Iu3rfhOp7VHTPAd+QACjF1CiVEr7mcdWjQaiyG5FjgAUxjQt1W1k9yMFlDrznL4rPlHX 6cHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251848; x=1779856648; 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=fJsnY6sA5O8y1KKtbjWdEf9PPWhP26ZORjcqA3kPowQjhxF4ZoHJmq9FpVL517dLFC 0pDMJYZL9Kz+Wr10C/4jSXx9JwtrqJoQintrL9JW1K+rR3/3wHVhswLoHFt8Ilkjouwr pMAtUmsT9/YTiwa+ppLYylYZ2DusRLg50zGkkwzbw7e4QFW9M9CZoH17kqDh4P+ZeIPL Xe2+S456Hl0KBbHaDXV542yXg4y5CqeBa+6lVe+RoUh6BluZu1UCbRlzTKdhqesPE14y DWQee/OfFppPM84Xfu6PPOfyzrXYp8cGKBsldockVx1pPukLPjVJ04eNDaOPDFp6kFjA QLcg== X-Gm-Message-State: AOJu0Yz3sKNf6wmglA/dj/HiWnOkdVk4ZN8cu7OGXWlJ0i2FIOVqa7WI VrDzLyAE6zN/Hz2EtSSZmYH5wfXEFe1VlF2fFKQ01pBvyfh0M70lH6kW X-Gm-Gg: Acq92OFi3eAtI5Ie8Ej9yVmEz1K0fOTWS0aK3alrTcUS3LWzr5vIlwuRZYbXQ1VpRuX HIDTgvMpwhngrQkeeclBLiCvD2N1MMgoadUYueqZ5QiFHyjFPMNfx2V5qM0CO89KzLmu1gOieCJ m8W55BC2WmYa3wb1Ic9zoTJYFfmP9haCI1LP9HJ5O9NI6W6YqzIA121LSjQjkKuHuROJjKl2R3m 9A1JpYz5zFDMd6BgQjipF5ByEYc9fPLVaGifuDVtjjBpJF7JX9ChPkEpHDmmV2fPP+9WjO01YYx FZa5x17o7N/8mV+riEF9rrdBJ6tC+RT7qcPi55z/+bIz/fNMbl2MKtiBwNyJj5CvBEV/fuxKwe4 NKQR5xw6ugPCCOYNyVv0PmEt1en/j1OpGNtnsJ291MWHUz+n638YfxmOkfl4ENpdsb85bec4IXo 9UcvIVTKtnTYtgmG5JsPBfGpPb20+/RCwwZgQGwPN0l1A451A8CJgzbPnyBtTYL3gGE/xcXRD2T IktFJ5TlPPIXzi8dWqYw7RInfJcwhwXlOrx1eSzFMVx6jv8l57Hl5IYlkuNrHexCkOD X-Received: by 2002:a05:6830:6b0f:b0:7dc:3db6:f02 with SMTP id 46e09a7af769-7e4ea08882amr14682851a34.9.1779251847644; Tue, 19 May 2026 21:37:27 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:05 -0600 Subject: [PATCH v10 11/45] 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-v10-11-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::32d; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x32d.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: 1779251934116154100 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:35:06 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=1779251893; cv=none; d=zohomail.com; s=zohoarc; b=bDMIFSJiTfbMSkVKStcLWRO2wkTrV1C2SNm1ztvx0hFrL3imliR6KPxeIIHHMSClkV6y9joQlRv6iVxT0iH1vvxw0cOL7xPnBlWDl8UzHQGD0bO/92f/cfNTWb16Z6fkko8EAjLNNGxtH3iTCYYGGX0O5JcRWIZ1EJaITjCon9w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251893; 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=7r2JZOP407stREDmdSr8VFs+49L5cEL0rjNOeyyPOaQ=; b=Ovoql7oChaGsZ845/kOpB6+z9tOKYDKKDvddfNM02JezfZn5TvNwWEHmhWHeqfNd7cgV6xyI1rYF9faPpTKyw1QcKNcbpogQk39iYchtu362Y7meAaQ6LdK1Zacdcd4NlyU2yhi1djk0M9yPPARg4qtOQBE6ziWM4rymhUej0mE= 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 1779251893162286.73155419548436; Tue, 19 May 2026 21:38:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYga-00017k-Mo; Wed, 20 May 2026 00:37:36 -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 1wPYgY-00016k-DZ for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:34 -0400 Received: from mail-ot1-x333.google.com ([2607:f8b0:4864:20::333]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgV-0003nG-Ib for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:33 -0400 Received: by mail-ot1-x333.google.com with SMTP id 46e09a7af769-7dcd689829eso3753259a34.3 for ; Tue, 19 May 2026 21:37:30 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251849; x=1779856649; 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=7r2JZOP407stREDmdSr8VFs+49L5cEL0rjNOeyyPOaQ=; b=U7eFU6uzq6m9j4vXKY7p2IZJsu5Wj0v4ImqQAhzftIqXdq+LYGYhbl6pfQLftbP5jN 8HO0VJM+JJJ7YumQ5Ynm7kcWcSCzd+73NiCzVWn4TvN9HCnFSB4Aeu90eyk4K4UaIuIl qOP3bP7Y9W3N0/p5IVpapD++kgS4AsyW6fL4Gln2dUNuRebh8I6FYMWoo/Rt/b2ebp8s caWnrQZYZYJ+cKo+gEUbRVNHUe+YHEy/0NquBmJzwoIfJwvDsF7e4WnptXEoGdqjH9d6 +k0A5h+nt3hC7GDCJQt+mvlfrElrJn4/eKEtyDfi6SnJqA26efNP2HnMwUBUJfLpzRc5 NfmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251849; x=1779856649; 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=7r2JZOP407stREDmdSr8VFs+49L5cEL0rjNOeyyPOaQ=; b=N488U6CDPzuwHO0TcvrPM0tZHJdFu16O2UvBk9dXMhjTSCGc4fcekAl/W4Ltj1Vcga dLsCSRFj3cD0HwwXJIWoS0mXeBn8vTJvf2G5y4KoyWx4/WkrH1CtF+XlIIpWt8qwbNyF z4itSk7EB6D1OQ/GKY2h5YwIVoVtORybpCB5TRtay/F8MOA8GEHaylziqOuhxY7jYteh kE7j7hGNbqekuc6d9aUhzIHJ5hKARG8b6FVv919PALT5c7R8m6FPpbClWkcyBOvrPQBe DGGUcYg0qp32K0fkpVvUb85ZSMB0GxUBYj+QE/7AIHA4bI2kkjYqJJqpA+QZT2fyOJeS LrKw== X-Gm-Message-State: AOJu0Yz3i4gqH9eOuVP58OygnchPUIX/QIRtYM5Fw2CwvxOv1IkHEgGl ceJ+yGDn4nQbK380Ej91Z9HFiMrLTC+pUiRZorm3LzyCdh2KZJz/EV/u X-Gm-Gg: Acq92OFMHIKFt89nC23paCxV/0/Mp/cEtxSgCecgfIQWmLWGe2PoBOHKy7E3Ern7w1x iUSdQjzPncBmPGtaLNGU/g9tkRQSCZxrb3k/MNBj2KxObhjznXaQb2WVU2TpFCXeti7hlkn1cSK l3YHFeJY3yK+yuoThv+HqWg6lR+idNaY5+isoBnr5ghXc8fqNzF4C4zozyKXYuML3jPYE4Xq45K BZwHkQnd2LKrAmTcQ3vMh7/Iorzp9M8ube0MZ4i8Aiq9zhokWt/xTo+xs+hnTxwG3ryteXzTLV/ vm0TC+d+yaGL43lDaRxx4oEIB4nbkYloYwOP1xqVqM8SCJFVFubEpt4IbjV1FxlbaI8XKyo587g YxXXX+r/6kz+JK2KFaRNhvaz1m3997IbwZIuhb0aJsgveYEfVxwhOVWYC1zdVmSMQNXRUI+E3go YOUVBCCATLJCQPKv+w8w/Onafi9JIKikKKQDS6ghHwR1eDZpuTNLChbZIlJW+0069G2dHN+zlZN uNI18Dx3Zm+7NFHEKjFqR5jtu3tiI1fAh5e7ZQ9GPKomCN0UhvdnZPn1ojrn/GA/TcA X-Received: by 2002:a05:6830:4394:b0:7dc:de56:d75a with SMTP id 46e09a7af769-7e4ea04ccbemr16680607a34.4.1779251848911; Tue, 19 May 2026 21:37:28 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:06 -0600 Subject: [PATCH v10 12/45] 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-v10-12-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::333; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x333.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: 1779251895087158500 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 v9 -> v10: - Hoist the zero-store MemOp into a local constant. - Add Philippe's Reviewed-by tag. 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..b5ebad9804 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(); + const MemOp mop =3D mo_endian(ctx) | MO_128 | MO_ATOM_NONE; + + 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, mop); + } + + 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:35:06 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=1779251930; cv=none; d=zohomail.com; s=zohoarc; b=Az7lVjZPVDU42+oeOxeuSsxhliS39xRT8Ss9tTtqvgErKIU5I6rD8f0RKBkx9P9FOnGszP8ktHzrzq1vEHTm7CQldhI8c0V51uPCsyKjOFfG1DbtQieVh3hHt9uVQzjVFBVHT8Q9OfnZANWq1aGn0JiPco66AY6YIyNJLnI3CgM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251930; 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=AbM3jN1r2CWv/97iHzil6kI7VemGV3BWBLVGcWNXf+iaM+HqcMvqLencw5bdvv0Kghm7EbTWDZVgU+ut6+RGexwiif3w0KCt7C07AMRnqY1fl3W9+hKzBizrws7aJllujWXnb9y3RYftA+aSe90rOzhhwukKYKKjZQsMohOG8ek= 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 1779251930270693.0437728085343; Tue, 19 May 2026 21:38:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgb-00018R-GF; Wed, 20 May 2026 00:37:37 -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 1wPYgZ-000175-0i for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:35 -0400 Received: from mail-ot1-x32b.google.com ([2607:f8b0:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgW-0003nP-8o for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:34 -0400 Received: by mail-ot1-x32b.google.com with SMTP id 46e09a7af769-7dca4debedaso4640307a34.2 for ; Tue, 19 May 2026 21:37:31 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251850; x=1779856650; 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=bag9gsjonYQKvhNsQuTrLE4Z8XldlO8nXkjirBX8Lwd4PktNE/JznaooHuNYn6S+WO KVb3c6gHHBtgwaTLQabaMNYnmdBiIpE9tjrhNrjIu6Dc6nH9RQyPfJgwNfQccujlVio5 Hz3ozrv6zGHXQujVLUdE9XnHatpZ72PJwGLWKQ4yFbofqAgsea+URVJchyhQQQBcxXOM PGboIBdR+JCZLi0rETdjY1394Vjw09bN2YS9YJ1SwDtY+yFjWP16QfiiZQK8BZDv+6iy 98g7OMXV78ZwU251RTyVTccg2AuzytbYzY12e89/InlClLCYth83AFK2dGYrSN6SwM5w 3uWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251850; x=1779856650; 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=mPG9iqfDZx6Q8BMT54aRQTlF3KzVR3y9loqZmJNBb0ZtwrAc2cXwWvTPTLPamBcjLa 858vPwABwv2On/KFTKWv8M1UNNnYmqdwh6b4FxOX1/LumEkMFV0vdFcOD2w5YYnGmaV0 Q80Pva6D9NlLJCUNcuxVX3x85xrrVexevtAj5UBdVBeVaOdgwwmdhnN6cUhuR+KOFUSM vJ5r/EsuN/qbS1pCiHKP1RE0AnItCdlSwN9LOBTOS5YiaJbP/HJOnqi6IR4t+sbu1RTw B7Te2I32/8UxhCo4VIL/SLMTsQVcv0i1sJQVfeEiH4gwjbq4CnjntXy9xKUfvVLmXQyh zOHQ== X-Gm-Message-State: AOJu0YxlSNXWijICG/QROLTjnwu/WfQ9+LdisR+QuGXH+jrreyQRXqAb m51zQPPY44eyx8pnZ9+zRZxyDNqgdm4aiZagWVuoiwFyRDtQNQTni8aw X-Gm-Gg: Acq92OFbHZUAiC4GeiO305P6h8pIY+EOSlnF5wc8CPn4DbSOjq8JiEzZbtexKkzQRsR HQAoDWThj5FqNHtncJZv3Gzhsx+x+MNJsm/UYlAU+1qo2a+XoHW1MkSPZlAXGyTcBTSDOp76c9X WWNIOoSCDgIolUc6uavd+ZeblPp+rLDnWeE0ev754slPlGWmjK1zqFt8aKME9IxHZ5+HmwqSumM 0iATXeOMmQPtrro3OIX3aoHkvNoUYKADP5AESiEGkFBQjBhMWTNIPWHEbg3W2LW6un042RRE/AS K4/NpAfc+1BD8VYxygVGDaWkE0JnW1nDTizvkMcMHV8MZNPMmdnwYKM3hs7l/LC8NXykGtoAUHM 9yqMZd5gZSL+ldRVgA6eZKpqLUfLqyHu0aNOB1j4kpxFaZTJ/bec7rzJMeM0iuiXtz2X7w9kPBa sI7xkf4wzxoAh30kcC4g4VMnuXVGt00Z9BiuOVZmNtPT5elGfooFIzRTRpfoXxCsI0jFsO8H1kJ Og6h4gzHVmFfSFRHSABxnhRYNGYJD8wpKMp2jbG9u1LcELj+rnWumlVoW+54azwFc9l X-Received: by 2002:a05:6830:498d:b0:7dd:e032:3cdb with SMTP id 46e09a7af769-7e4f2bcf0e1mr15503726a34.18.1779251850137; Tue, 19 May 2026 21:37:30 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:07 -0600 Subject: [PATCH v10 13/45] 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-v10-13-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::32b; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x32b.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: 1779251932338158500 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:35:06 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=1779252042; cv=none; d=zohomail.com; s=zohoarc; b=P9Sw1wQVzRI8GZ09EkhQ18+S6Lz1GT1q8kZB6IMZ/ZKBH7U4kSnt7SLZDBRdYCecwThCDjN8JyRd9Xd/w8jnmEPnaWZ/IWkaiRgAsjeLlu7BwXIPiJ3QuUBAgvpWWvufquTIInp/WOduoY+mpJWSmTOEv16/7n+eBSw7er7yi9M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252042; 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=JKF4Q/fd29mnWV/NByXIaIABCsq7UsmokkILVWMv7cY=; b=C4h21qk8kRE0ETov6cEBglwC0L5TTmMghyE6uueR2BJvqFwlC8Ni8+rBKssQKQ2HxW7p5UUqdSMWe6JS+zYl1aIBw1TTj7ZPzIyQrL+auAIr/UfCIAVwfZ4Vt+sh8zKTBN4SaLK+e61M2T8AJQ4UrxMc5J7wYFWD+8pVn/JDzJQ= 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 1779252042451124.56194711597584; Tue, 19 May 2026 21:40:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgc-00018p-8t; Wed, 20 May 2026 00:37:38 -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 1wPYga-000184-V9 for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:37 -0400 Received: from mail-oi1-x235.google.com ([2607:f8b0:4864:20::235]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgX-0003ne-EL for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:36 -0400 Received: by mail-oi1-x235.google.com with SMTP id 5614622812f47-4824176bbbeso1442382b6e.0 for ; Tue, 19 May 2026 21:37:32 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251851; x=1779856651; 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=JKF4Q/fd29mnWV/NByXIaIABCsq7UsmokkILVWMv7cY=; b=XQxm7A3KU+dsN3f2tXFf51mNiIXDabnuTcezzZb0COK8IX3dlXSL1xVidNB77gMGoa 6rM/C/uO9zNGZbWDtome1IX4fVH7x8K9maHizLJRRgOE7nsUG5rdxKJJJFF0k05sBvZE YHvAYzr8b6eeDvSGq5C4pmfR2bq1uUw7l+F45E02zuBAUcOU+pTFRD0DxdE3NMYEaQF9 /ZRAA5WvzdVRUutR22GL6+3/6/ao4d5bEaYVd3CAvwtG/9Iiru2OcOlvSQrcAgKa6qIt ze7MDsF5/17CPiaCFtqr9NHAbeAJv//aNacbbxLAxgRLsHS1Xqx0Eqj8j/fE1V/4J9if 6KHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251851; x=1779856651; 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=JKF4Q/fd29mnWV/NByXIaIABCsq7UsmokkILVWMv7cY=; b=Kyqxcgp2g+tY2lbxeNjigrJuYIs+JSCuUcX/BTtJtSqW4XJoZZ2klTD3p/PEgyFg2s AT0DKZtkq099u7KcSrxhJDmnnyyx/v4JrpEpo9+jCDiwHDoUpmyNLyj4K90vB10LAwM2 wVJzJx5VjWnJ6VG37FRYhv/LIPVA/Vg0kRIR2xlfiUVrs1QSCz/fzFXfSt1BDac7EWb6 Ca+yD95LFY/jeVTgpqFSsUlsXzdwmfgZJcyjzodV1/RU5a3QXe5rrOBvYwiH18jcP7Qe 0/daU3Un+xlAtnY3s4cay/Rzt3/1ynJdRth6KQvB2y9WLiYWv5nrIiM3EJi6+atRmKrg yC1g== X-Gm-Message-State: AOJu0YyzJvXzIedCzqZZqGsegC6xkfjzKqK0oHqs7MHnDkiI4kR0RX2l Hn2WO11YEuEhHMJt0Br6jRJSZ10Q30MRzZit1dhgdI0U42npnFIovP8U X-Gm-Gg: Acq92OFMdaVAc4ZtEKttn/5rjA5oh38E84mT7Hl5r6jVARGNW5Y3o7sSZJX8C1vMw++ nJoVWpkd+qsVX7HDxExXox5MCUgBZXE/v1eXxMZiqKUL5fjq/DQQ8f+2ozVmK/nNdom+xFhIOa9 wFBJKacfF5OFvYF5y6kmtPIPI1DOqUWb72Obhp/mehIV5R3z8zAmiTQBGmYMLN/iPDBq65DXeyX ccFu18WFViNlMEJhSERdAR+g9hxy/17zN3As7Gotr/hiJkrttjS3vzPLCt4b6LO4rbRQHiuSKtB 8WU8+BijhB5T43TjB0wjr93vEekHJsqDIGuyQY6scOFAmSASxSNGRdoXaJBaLBionykPJ7WdiVZ AW8a2W/WpO08GY7FDmnBAoK+ZdyBmg3DUw+bY313QCg6Y/wmISFcuul6EfWoLTX8YClUvQFzksy bE/Kv6BnXlDdCreXM5cDM7rm3LLRqBOXVpiShhl9Xfgpg14y6t7yjTOZqwM/otRaDuZgqK4E+pz cQrZ2iMJWeMAYY0kHclYNiAqlNcy0wc058hkC7YRcok2FLNzdoxZmW0IwC4hETBkkLa4zG8Wbmr xdmrVZ6n8Fkl0g== X-Received: by 2002:a05:6808:1381:b0:485:50b:f585 with SMTP id 5614622812f47-485050bf945mr3042091b6e.42.1779251851141; Tue, 19 May 2026 21:37:31 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:08 -0600 Subject: [PATCH v10 14/45] 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-v10-14-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::235; envelope-from=james.hilliard1@gmail.com; helo=mail-oi1-x235.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: 1779252044895154100 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 v9 -> v10: - Restore the original constant-fold output ordering. 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..fcdef25bee 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, op, rl, l); + tcg_opt_gen_movi(ctx, op2, 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:35:06 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=1779252159; cv=none; d=zohomail.com; s=zohoarc; b=AcyicQS7Oj6pO7Ipe4DbDsb0tUAZcsqciy2o/n3GNLEJM9Io9QHPtMkUnQa7gL8iTeZt6Qw0VmjEzICUQREIa/OxE5rVlAD/24C9EsSDgKlLT0Ofr5wDK7t/2Vz+85V2peLZGWMTLisoFmQY891mLyt18n1N5Xk4qVngOnuBSRw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252159; 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=WILlpiGnxS3xYsVkvktGyh0y565IEs/5eO0RZ7K4Jgx/iRIt7VNNVVimD68sq44HERei93F6AbLDecR1695VFzBOZWSD/VxtcSq4vVe7ctGLTj/qnNtqQNBeTOsOdzzyd6YmOdyY/01awoyyyAOf6L+9Qt/H1ZXTW2PphuIEZBA= 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 1779252159841821.9553705131322; Tue, 19 May 2026 21:42:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgd-00019F-VA; Wed, 20 May 2026 00:37:40 -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 1wPYgc-00018r-7k for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:38 -0400 Received: from mail-ot1-x332.google.com ([2607:f8b0:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgY-0003nz-W6 for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:37 -0400 Received: by mail-ot1-x332.google.com with SMTP id 46e09a7af769-7dbcb467f2bso4230651a34.3 for ; Tue, 19 May 2026 21:37:33 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251852; x=1779856652; 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=LVyCdziWMjFETL7MoMBBfV+PMswAPzseN3XwTrtw/m3ckmHKLCoCTt/QHRSv2+GCmL CvjrW7mvSYg2rW2jq+Z/SrW/sbgEXp+1hEpgVFXMK0qEUj7U75PguJUsifjpKIwjjv2U X2yFfHGExm0xA1aPjXvpWOVGFc3ibjqC4O65YTDh4cDLxxg98jF6hskBhTLk4Hh8Z/mJ gbnH23F5uSnq0Ds47AGNJAGOtQS6s8zygNK390bwBK06Ze6LK0myTle8xM7QMrHkqp4Q afyeSrAUb3AHSC8KpB53K7XUi1LZiEMpDM78uS90IY+pZCNk9S8bdXYhOPYPDQ6usgFE fgDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251852; x=1779856652; 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=L8I8Bdfdr60gUZzNj7CPhy+DoMivhRXtLjgg6P52NLSxIatw2IyVFmRySx4zAuGaT2 fFpHHvOQAgUDDHVJvD+eMIc4C58X6DPpK/NQ49bF6crzDI5b8H/yBFOCSsfvkjTF09yK uaAc1uNauSf68uQD9Y/9vnIeF5OHwNWWCIxBUsaFmJ/E97CU0ZsuPuUqwSYSBwRC5aWr oN66KJ5GrE0+19xFA+8U2P9Ec4bJ0G01Wi1c5tnh164LuPf4kuAkpPpFrZbmsXVUnvzY mTKDwJw7FHakP2ahUc5AdekVotmqkWlHZpdVsd7y0FxOp7kR1nYnUGIFj53TAVjPoBW+ 7vRw== X-Gm-Message-State: AOJu0Yy+PoNkd1D4S+H/JQTI6k+jmQv2W1m3iEAA2w2EKnl1bDZb4N+d XgFQYddq/YzhTmYSPysZ8YlBfLjW1WMBRn5ro62n0YQKNUiSku3VwmKd X-Gm-Gg: Acq92OH2mO3QerbYGIV4dkeSolxFvcofCpD4XOWG+Y9DFzOuZhYklra75gxtQcKZOFH nhO7afN63ehaIW8+ahL0/ccY+7g4OIQdNT/YtFComWS/HvttnC/TGuQcxGmf6uvEWAHygs79XNH betVPh5Txyh68P6gRlk2yGrHn3zAWAI267xCCLVFUNbBW0pTkXJ/IGD/S69wxDOcuzepaU45yA8 r0vr4++66KNiSmhISJjiNw4Kr25RChzd9x1QmTDGE4J4VIsVluXiJ7LtzW3vkRJcNj/+Vs0sZTP C/VFwHGqzpGDhRklb4nEO1QpGGOdV9c4i0vn++PaFn2ZidUfynEiulYAZ4mVUj/Vnf3XWyrgAw2 +702/0LElh1NvY6BF0RNDixszN/SYLd+NrLmw9M/SjWjCbA3H9YgHJxOF6QksXjUJn1POjAXvY0 FwyyV/+4N1dnHvlxnpVhAp5J3lJP3CFoOG554UrQ9k7b7GHGtmcRJv/xr8YekpKtti0sAEyA2YR yZC+L4GrxIISrRcrWNHIjchUFplR3afti6zT0h1wIdEcwVyVoMcnj5sCnW0zepr90T6 X-Received: by 2002:a05:6830:6417:b0:7dc:c4ae:a679 with SMTP id 46e09a7af769-7e4ea07276amr15803710a34.9.1779251852368; Tue, 19 May 2026 21:37:32 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:09 -0600 Subject: [PATCH v10 15/45] 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-v10-15-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::332; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x332.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: 1779252160889154100 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:35:06 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=1779252163; cv=none; d=zohomail.com; s=zohoarc; b=RLYmrYAOg6n4Z0oDsIuMmXppAT7a9M76R9KRphH1iSP4ydDPtEbbWMZb01Zw51+XokP0j97LCkyPIRXUIjcF1esDDtBR16dnpk5OEdJ5TxcC3uDGzEHsYZf5qV+if89K0YZgTmY0xD8+eaRmaMCMbsoecR7GiqaY3/BPRfo8MIc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252163; 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=4/74NRrBxg1oIEQf38kJVSZR++dNhK44DvSC+CVqWhk=; b=ci2ooA/mWgWJ1bTfE+V4o4y44gm87PhWrvQKrvFv4CMSA8ITaDjAkinHS6DWW42B2iEcK+8eS5rD0Xbj6rR6EpRXg5c3T2F8OZMFnIAqzTgEBbYIDIwv2vCt/Oa324NkZGGc2f0YUh1fLGEhgy09QQIV3PTuK9WP3Db1dgsWRoo= 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 1779252163033228.94812192878112; Tue, 19 May 2026 21:42:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgg-0001Ap-5J; Wed, 20 May 2026 00:37:42 -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 1wPYgd-000193-MU for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:39 -0400 Received: from mail-ot1-x32a.google.com ([2607:f8b0:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYga-0003oK-H8 for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:39 -0400 Received: by mail-ot1-x32a.google.com with SMTP id 46e09a7af769-7e4de538f83so2561210a34.1 for ; Tue, 19 May 2026 21:37:35 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251854; x=1779856654; 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=4/74NRrBxg1oIEQf38kJVSZR++dNhK44DvSC+CVqWhk=; b=GocxordfWYXqxTI3kXG9iytDHVQTXMqgHvnoymzMgiZFOE7432stt9SkT7klB98xDV sjMWpHEq/Cbe8NJnb8DtLNp65HQCVjhiry6aBHAkgIKnl9sdGzTnNjnzrBBYQ46lUmaT 1CLa0ml4soHHNb66oWZOZ2oOZLHokrx5VENgO5xeF0e+3dfvI6fel+F73unhylC+CF/N EDkVFWLm5S4xnH7nUAmnVbSN3xsePQQ+uyGyVrUr6MBlLoyAPhZFF1pajPK2D3W2LVYk d8vf/ov4l97LLINi20y9qpmu2naVMLNHztWMvZnx86efIEdohjlVlMSoaguExzksgPHx sUrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251854; x=1779856654; 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=4/74NRrBxg1oIEQf38kJVSZR++dNhK44DvSC+CVqWhk=; b=ax0ErZi2/l7Lfg4zx5nYt1x1EodXXhJDBk1OPMxzj7POSi/0Iip+fIZxBgtPpYM3eT f1yywerjDj0TiByP42mFxSh028XANleAr3yt2840gzWf6iC8YepoVIo9vaizA2aJLPO/ sTeWcCDg/Yl00eK7nm+63Vsu8aTGOglcAwnivC7qnsZycQGzmaVhTVrustwfdI5HkqV9 IToRt3KQ2M3gruyvZNZClCZ9zTCKs0gu8WOb2/Ka/TGghzlVO3QPYOhW8xH55gKg0TDE XevMkoM4uqY3pp2NxzP8xSKneYPcdVsOuVx/Pyf0IXeKFtz3d5HeT2AOujXBY2xNs89c tMLg== X-Gm-Message-State: AOJu0Yw5DJWFTGtBrdLekPlvID8BjHAtTI05LO2V0YFX1VjzfEZK7YK0 Z0JGJ+1GvqIj5QNc5VvLeDCvDOgf1I1IU91sgGmZTNR9Et3W6DXp9bjnAp7rynan X-Gm-Gg: Acq92OH3xIsnYoO2slxp6dVrwa7McZERNHcJsQwtEt4B5+OZOedGibqEg7n2+CpgJ9E j2+HdzrM7/cJTMlWGi50fQRz0SEbAvZh0/N1PxvCi7EG/Qoy2QKO2ZKEtRIA7b6FlcNaH1cbaDq 3Y7MQpd6Xq5cIZfcmqWdBEbk6M3VCa6omIXv0OZH2ulMVmSHlfc8rSJ9+S8aPi4pc+xqdyD5NOI ScXVKBp/K8W8CFW7Amw8lvo2dJoJJq2Z6BOht4W90p0KDTseJa2WdAZJRlzeIa1fQLRaEf/BUcM eF0NKl3uBGvwbSzIW9Vhlvnulvdtf0ZsJ9gmERXjUtNtHWsQzqjKiHt9pX2Mq5hqdKPl97rD2TX 7d+hmQ8FRlx0gsEcnGVTtGtwzh9RvTHUCbtqhlrKcwX6WC8EpF0kvWihYvAU+qisrUo4tDGS/y5 bjtz86cbMY0ngCgxQ1gO0rzzD1Z79S9RrtkSvACnJfdc9fsn1DLiQmS/nRAkw6hN4gf0fs/eAVU oNH/vxLsAcgYJJO9OwJjlMxs/oPfZpWocSnKmbwbSFkfXvb+nHRdJ98P9w8OHAu8EUu X-Received: by 2002:a05:6830:8c6:b0:7e5:68ca:8856 with SMTP id 46e09a7af769-7e568ca8bb2mr8262896a34.26.1779251853673; Tue, 19 May 2026 21:37:33 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:10 -0600 Subject: [PATCH v10 16/45] 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-v10-16-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::32a; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x32a.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: 1779252164818154100 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 b5ebad9804..aae6e9811c 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:35:06 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=1779252170; cv=none; d=zohomail.com; s=zohoarc; b=n9NZldpqBxKu9mzbdZBbcXeV3OYLktmN+UjFKuMYkc/ZOWySZuVU6tKOx5cI1vV3OhI7tLdt9VjvgldqpI3wk22fxfPFTmum/MExmZVCuUr59WV+8boqapj30EOQuz+LhkarUzgHA47yXhn0Tyk9d45wTys73RyHHufIBjy3LCs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252170; 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=pdT1KFqbmJPaSXtIjTt6ff2nwOW3lgDDNcKqorOiIKY=; b=iRYdBdxJCK/y5mFQa9IQweTperrYHzzPXluCuTBd0L9g+IUm9IW+Kmi8e6wJIfk4YkIazkLRKqc01D2Uc+sPmolyrvl76J94Ir5FsKkyNJNX8yyTdkqfQbSXH7CuIdzlSLK7BbUl08T1/bf7t/GzA6RL3+xlk6sH5EFQtr6AQ6c= 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 1779252170055907.0529317324197; Tue, 19 May 2026 21:42:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgf-0001AS-Tc; Wed, 20 May 2026 00:37:42 -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 1wPYgd-00019G-S2 for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:39 -0400 Received: from mail-ot1-x329.google.com ([2607:f8b0:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgb-0003oX-4h for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:39 -0400 Received: by mail-ot1-x329.google.com with SMTP id 46e09a7af769-7dbca22dbfeso2244610a34.1 for ; Tue, 19 May 2026 21:37:35 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251855; x=1779856655; 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=pdT1KFqbmJPaSXtIjTt6ff2nwOW3lgDDNcKqorOiIKY=; b=n3oKgP9wepw2j55S3tt/25iPYGwCPf1+571ksDP73mvjPt/wsz+LG7qnWcTHHhb7QF P9fZM+thdXm71vWaiYAmkWhtLRcjlGbercSx+K3PB/zubsYLwLMs87EhaGKpW/eB2yUt XWiU9VWNaKH1XFQUWr3jzJJ/IAaAe9IWGIN08nAlgD+EjIzlv9wFdbz/wj308FlbOmOc WoaqMnTR2rBAlg2IKdvW2GI09A/jYY3aNJ0Q5YuaZJBvmk082y6Ne0Lx3TB0XoDOIMor PDe69ziCRMoX1IvBgV0vJUWW5xl4AjVXcyNGl6rxuWMZ6KovBbQJPiJ3+f3uoL8m/6tu H+YQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251855; x=1779856655; 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=pdT1KFqbmJPaSXtIjTt6ff2nwOW3lgDDNcKqorOiIKY=; b=WKZQmLjAOsU9tNbCJZnXjZHDcWRVl9pY3vM/2zenvCIVXX//X5ykQPN9IbxsPzOeYx kREbCUEXMe5vI1HHVoXdukb1J3G7KhWQjMjqWaiOCi9aW8O2t8/N1zsEC2Hoa51I34Rp PW2zYat65u1u/Wt74ONnP9C3yQzlEfuwidaAAbz6mZq/cBBXDvJx4b0Cd3/az7zhy+o6 WiGe/ifFQE56X7AMLxT701nLVmdj8Tw8q0Mw1i+I3d0VtJoU6pFQ1r+QN+yj+GM5pqIt IJDTnM5ztXBT7KSDTC2/mCiXooFDT386ZMMNqVBG9XmbQDkk3zqnn75HHgfOUoD+3kL1 lJNQ== X-Gm-Message-State: AOJu0YzEAgo3Xap4HaLjofqF5YyJyGY9u/Xolfpi+ndcCL8bK97GqTc3 NMX4/MO8Qjc0tCRwX9aSaiehNsByjzoLErox3bg02c3VUC0hHEtJkJuQ X-Gm-Gg: Acq92OGGaA/o+/I0FbRDGvjmxMW/FiiAByEr6A4WhqtZoOTH6ChoMof7uBbcYHLb499 8TDhe5OjGbyfm5MMIuw823+ylVvOpZEADrs1U1S2k8XfYyUd198yRS4fWxVD0934d9txEdyHvao C1ymjCcw6fCdEuaJ8UQ5df3PRDs36xco4c5TFP8XHIGO1KOI45BU3PbKwt906ue3Dz48QD+AWpr a1UKWzLbLr70g+ezTziH99MHEDXWuAkc5wHc6Lqp7yhTk6mTYCX0WCADVd/z0RXLYKrYL1wUTjt YEPlcb682lOw6un6lzgEX3q3YbmW5qguqA5gsNH7TCf3D8YGs7H0MPSKyHIkeHCSwqzWyGpy6Uo bwmNHd6ixaAbBCBQSXh2Hbcnm38aDS9sc0hPE7q023lv7UBHB5hl5n2zo/Ut1jc6YgilYTbQH0u mesoPOiScfcN3i8hQ0//8XlnSLAJMl40sJ3hzBQUKcLMRcOVut8FIHbYMfuXm/swoQRjiffw8/F YJJI4q5At7uf73XGkJMN/oh47SI23+oh/A59MWqwu8lVQw3URyhNTtPF7qBuWw4xdJo X-Received: by 2002:a05:6830:6408:b0:7dc:c7aa:22c7 with SMTP id 46e09a7af769-7e4de65c157mr14478787a34.0.1779251854784; Tue, 19 May 2026 21:37:34 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:11 -0600 Subject: [PATCH v10 17/45] 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-v10-17-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::329; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x329.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: 1779252170990154100 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 aae6e9811c..36d268e09c 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:35:06 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=1779252101; cv=none; d=zohomail.com; s=zohoarc; b=eJqDGCZE/auhUXJvHSHXTzbpeFZya/RmBsmEbgSqygdCQh1TmE1GtDlIlWKRBNUR1LHX1jU0gX1T25+s4ioSgXeufa+4mtFPYmgTpV5Lrqfeluliuz8Y+V8odWOc6RerVfZbG85iI9h2R315MJw1tKkQgsQnXCMtVJAObcxA4kU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252101; 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=p0265Tq9UHk3D+Eru2IO/UfOFSjq7IRQ/uSYKl4klXY=; b=TRQSB+xz8Fk73RM87krLPY0VYWbJXQG4Z6qhtJkNFo6MbmHyCSwVDt2NAisOZOS3vT84WwxZ54DQ3hLjvm/1ZQ5HzaQ0R8uYc0EiABR2eFSCeT0G59UcA4H+9kPc5fM2F7arzzvCcisjG6jBgSyV7dTMSDXZuqnnSiJwzj9jxU8= 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 1779252101453395.13857476118005; Tue, 19 May 2026 21:41:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgh-0001BS-FI; Wed, 20 May 2026 00:37:43 -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 1wPYgf-00019q-6d for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:41 -0400 Received: from mail-ot1-x332.google.com ([2607:f8b0:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgc-0003oh-Eu for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:40 -0400 Received: by mail-ot1-x332.google.com with SMTP id 46e09a7af769-7dea20cf21aso4328964a34.1 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251856; x=1779856656; 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=p0265Tq9UHk3D+Eru2IO/UfOFSjq7IRQ/uSYKl4klXY=; b=Ae+I7LHbyD0uv6sGBou1T+pSDz8s4qflN+Zw4uQJajOYDpkm3KRTA2zWSZGxqGBE04 Ow0uSV0TnvvvhHX1Wi8U3Iz6Z4Tg/2xZU5q+g8zTOXftFl8W7NxMFSVyMgApqGjrwcLd ZOIqcjC+Ob/kDoyKVjn1kgeCrw59q4nxsLd82i9qba0LLQElT9cauwUnGwGJatfzrKDu jk+tbHcTcHtw2POegAjCk790kcF1TvMi5wluNB32Hn1p5XJ9OOdSxWCB+znRFK7It6/3 SZ/9WbZA3MKYChgeByzhvrVMg26e97cjJcl2yAbGT0ptTH+Sq8B5+kl9miytzyXJjm5q fbqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251856; x=1779856656; 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=p0265Tq9UHk3D+Eru2IO/UfOFSjq7IRQ/uSYKl4klXY=; b=fZqTziUQ7cB5r5sMJmUKOFM2HmHXfMBvqLoFq7n8g5ysz9OSk1quF5EOg6IgESmN1n DCDTEjRcjZVHRXzTFG0+97fCDhAeaYnZRlTlh61iNd96BP0IX4f4s2vCpALVv0N/N5kO MtJ81nKcq/LqEC2C5oULC9SWaq+Z01EPvQpj+1jM6yxcAUaGwutDtQxSpKTiYxkOeHpo 0wtoUS5q3gakJXEqCDv+ZbiPDWnVkVGMRFaSFo+f+b1w4GkBkHTRmxTCHsdTmZi9tJIh 4nao4+/vKrIgl5cBDrTnqz4WyjhTs4NPtmY5qMRKfld773ErqvKJ1fU8EYNOxOZ1HMYc Y7sw== X-Gm-Message-State: AOJu0YwkzMl4fcsTcd0WqXGQRK38ZssbPPTuRYMJUVOKhCZhg12SP2Po g7SFlQqA4IzPkvSB+SF3jq5pcf7YAESauvm418+W3zxA3/lw3eB3H+G1 X-Gm-Gg: Acq92OHEvAd6nuuKNdzRxvtLJ5rucgxM6tE63DkvEca/9igoE/zBbmpQ/+9uIzuWy9z ORm3oySf0jB4fteXDdAJRIZrYc/+aIs4wNoW5U0joZsqXXe5fyccspM8o6ityJcBrVjE//bGLa4 qFult1Kz7IQhyBEjrHFfxlRI8AqEg/gWFPrIa1NRm0zccEA6uuE9u9syG8Azc5QYUsbhoqDEd3d HKXGtwWww2tWpw64ls0/4NmwgRXFgfKASrlzCUiLkn5xjDmsgSyXiNR0nPRPh3JcKQ5wI47T30C sKQV2FeP+3o3rDVSq/1s37M2mIhd2Drrzy/D8ARXcb8RLsdYvEX5KQXVyPSj/7B/ukSLYFRbLfl pzvSgFk2YsaCNehDvTCceLFqoT9BGngvmv+OV+M46mXSE57B5hD6TB31tQuMU9SOlf3LWZ2bHFr 65a7vSufJFVfGtSSOAosJAjy1bVHXiUhEInlwAP1SR2/mA45Z7ax9BWkxRAvPJ6zgG7iwViRVUj gvRwybkLf8u5GHhkszxcjzyhmfsltryd8yOd0jBIiMf2ErXtA/MYRdDCWUesxv65FBW X-Received: by 2002:a05:6830:923:b0:7d7:fd71:f2e4 with SMTP id 46e09a7af769-7e4f2aee0a1mr16191621a34.14.1779251855845; Tue, 19 May 2026 21:37:35 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:12 -0600 Subject: [PATCH v10 18/45] 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-v10-18-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::332; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x332.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: 1779252102343158500 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 36d268e09c..7b00bc994b 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:35:06 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=1779251923; cv=none; d=zohomail.com; s=zohoarc; b=H7gynG2krFaR1qzQWkB/NBhyXT2x7zKi7Rxtnr3Az/NOUQd9ip06d3QsSqwTRjYfdQ9ZTetQL7hvsWkiTpOQ29GPlizHpP62mLhEPlJZOuwnzRZBcvq3tuZrXbzcQzpMhXCIp/Eu9R3Dki1mu9U9IbJXJ7TLzJI00pO7TJgum1I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251923; 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=Tj1tAFePwb3x6WJPDnrPkCU9+i9Y0BikrUfMDmD3ysk=; b=MYWLepqCqk4nBwVf1E7LniCM7z80iSkchg3R+veK+krQsOJRVsPeN04wt+uAOGogiWwf/Hfl8Ld9WbPnPGSSU+uzrhRpIbkPCYQfXBYFHjwygCUbz8mA5S2IowHqJMj/qQ0q1hvXah6jQ6SSIxb4LpfoGscbMcU5SjtzTIdXt2c= 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 1779251923335506.93499000771146; Tue, 19 May 2026 21:38:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgj-0001C3-JC; Wed, 20 May 2026 00:37:45 -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 1wPYgf-0001AW-SK for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:41 -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 1wPYgc-0003ot-JV for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:41 -0400 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-7dbca22dbfeso2244623a34.1 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251857; x=1779856657; 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=Tj1tAFePwb3x6WJPDnrPkCU9+i9Y0BikrUfMDmD3ysk=; b=iaz7NzC9ZE8JNHEi5xA0GraBeDR1LnboPl+cRDYcwpVWCmWZFEGp4kFVw69dm/6VXf CtxiJP4ikGXL8bvmgQIU7Mg24sk62/9ZLVGp4d/y4x/dLZ853RyEBkjmRp4SsEnqAPFi 7LCZUgtqYMXwEm1a6XXtAAzAZ4NlfOkIS9ZgsVAkpkq+GQw/BBLvMKpyV41Sc2ao9D67 qAzcf5Rs5UA41tWzSwSpobaDLlibphlqOnbKiQL0zWalN6tFvfZWiC8OcbeL/yVNOm/8 UGwZzuwmJCpUFH6BeBWrF0WvXQedSdgQ7VFEHiwExy4RbNBgIHzFGSaM6Z0WFlslZOlC csKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251857; x=1779856657; 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=Tj1tAFePwb3x6WJPDnrPkCU9+i9Y0BikrUfMDmD3ysk=; b=L2CSHBNt6sES2IzLry0vi9Zd3pxqgp3lpCjhXAskvF55sEK+MSvKPW04P72Jlk9Zk9 WLVxgtjWuZHx34GUrroCdWkuvpsrR/jo50vYNRNnsQhJwBuoeqv4mmXrS3tmJrAKWC04 Aq/FXFzk0/PzGv7qLGGpQ/RpOAp8ganXce8ZrEwKQczYYqmr+il5ucZXL8Osm98Yt0kO gtRo+YHo6Dj3SO4pDP1Uv+hGUVIzpPMW0jX8k62fiTFmLS3yZO0KeFi9DqK5PbttBG/k pJXeA7SBXXdiIsQd7Fn77UEp1nbkBeZ2PlYcmQemoFj+jKCyXfPehbJf5+OF6hkUsQxg OJzw== X-Gm-Message-State: AOJu0Yw0BpNRIFpn7UH7RNQR4aQVlaMC4IHZCHOLj+8fleqwEj7t2kDv CL1CTo/bzaq6ns81ot4Qy18rTwHIzQ9JGxY5/gXsgWWfORm5nEd/wbkQ X-Gm-Gg: Acq92OHDGbRsAyL3Bc46PrCwiiBbFNhrvzMljdnQXE8f5hkLz+5c7/3GhDantm5snst SaSt1IjgOi4FdCMNWqcJENuH3EjwQEzbAfpnv4jZ+R6OWWohvBk6p5JpDvEmFnvTeA8AjE2VNHI 960JRdJplx5cw66/d1EF2KfHaHl4TiRSZV0sPcTpf39mSBrmN+a2BuygaugOgWTvxUZcjS5vmOD tZ+rfPxYnPmDzkjU5iR8nkgfGM8txrosqwiR20Oujen+pbL/oeOuZYK2SIvri1Qm2bYtrgzqK3q T13U1Dx2Y242pP0Z+Vvh3aZQ+JsU+B0+TtJ6flpWr2xgrPPbo+2Jveme/nR0aa6J17y7IJYAr4E +g5bhB1YDwYaLGA6OBtQZmKtFFsUD1M4uVi8IVJ4tORVfBY9SqC7DaauPw2DG4uIJoGuLhfl/Hv Ml4wvGFiK7qPU9wszGIr6vc/sflkfCJqQowF3h0555QERm9am05937X8Ybw1OOUvK/RDM7lSWSa F/f0V9xndMGHQlGBB4VXP3jHpUnbDG0MmiZgbZrCCTY6AYIdWFytz9OwKFbzTWkFox2 X-Received: by 2002:a05:6830:6d0e:b0:7d7:d100:2613 with SMTP id 46e09a7af769-7e4ea03bfb3mr14110304a34.1.1779251856898; Tue, 19 May 2026 21:37:36 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:13 -0600 Subject: [PATCH v10 19/45] 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-v10-19-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779251942333154100 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 7b00bc994b..e51d3e6cf7 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:35:06 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=1779251892; cv=none; d=zohomail.com; s=zohoarc; b=irbWjkpOMJenLi7gqZKzg5wtikhVsJRIskl2sLWU8EVabxI2V7d8UO8U4xQFp8hqJamayDs3kw6NwWus7CcQo/V5gTZpAhSQmNJXbI40Vt6TMznRyjywZShSEHY04V3EBDGkXJmJHm+rxDqKKfE67B06B3PNKylAZ9jZzYUKA5Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251892; 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=ktb//rSE3qSFthp8j7pO++7/bpM7M1LzWp5p9Hu2g0E=; b=hHQDgrnqJ7GG5ocGkrn+wocQ+TpFMrQJwIKz5sHbduOLfe9UXLDvoepHuY5L/emaua4PZHIvEuMS3LLnCAXOBeMCpe56+jzL1zO+tPctf4Ws1DLH0ySIYhOS1tFzEmG7fBFf/nkN+kETyo6Xi9kD4UsxRIoMXF1LHnLPDpxqDXg= 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 1779251892689141.88079649065696; Tue, 19 May 2026 21:38:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgi-0001Bt-P7; Wed, 20 May 2026 00:37:44 -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 1wPYgh-0001BT-CH for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:43 -0400 Received: from mail-ot1-x335.google.com ([2607:f8b0:4864:20::335]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYge-0003pF-Ct for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:42 -0400 Received: by mail-ot1-x335.google.com with SMTP id 46e09a7af769-7de46b8e432so4485270a34.1 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251858; x=1779856658; 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=ktb//rSE3qSFthp8j7pO++7/bpM7M1LzWp5p9Hu2g0E=; b=qdOzy1giV44uzRnHwrtNCYdYXHPeVXXV3SKci0kbfi/YktlJ5jHdygkEDRN/495FWx kcWJ4ifNuptBQx5MwDpqJ0PHlyC2iINFTCjQsMPcWaZxi9Lr1JwPmYUSpxWmCMqzlhz5 EQ8hoKss9zlPItDgL+7OOYDfVoGj6piLMl05KvuVdv5/ehxZgCJO6Rkd5F3ZZROiNoSj MM0qSECQ+nsvO5uYkH2N7KWQREJI2prWcjDOgYEryMuWZqlhKMMj1u6kdJcidBu/H+fo Z0xBLQ+oGG4mCka7qM1drahC5nRTLAixA3oGkBJtdDjzwnCa9TcWt85mpOnTs1GPVfyj Lp2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251858; x=1779856658; 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=ktb//rSE3qSFthp8j7pO++7/bpM7M1LzWp5p9Hu2g0E=; b=OAjlxHfNyAvOHQ0pH1chYbnLQhhBlANXZvHVJcZ7CcW9zIS9wLM36of56eEQIswm+H dvYvx0YVlU56ENwzXrGCiDOj+hVny/iHgUrP08BshMidV1z1ytv5irjeHLFa76bIcgND wuYvViIkfS0YoGRDL+vCzIcctupqOutexReshEWVOCidMzWNf6C+DouexFyk61eyr/ke IoDfpTYCHYLA1n6/f/ruyzWtuReFXnQyC6wa8lPYBkYA74w7gRLGTGobvbEU3810Vq/F xn2Wxa/ze0+YZsN1yBnsqRehQMjY/fzBOgzgsf7Vw87aVT0okyUPE/1v15A20z0aB5p3 nGkw== X-Gm-Message-State: AOJu0YxGWGISYAGLcTiXBERd8tG9IwmJsG+YB0dT5tkaXOEkqphDlJ/m cQYTCrKZ6WeSgTDemaSNuaGWuC4urO5bn/no6x8gtQHvhvOo7nEr06Ez X-Gm-Gg: Acq92OFvveHWnXcy4fkn0TQA5l0z15/s6PQHlHdOEYvL9RS7wItp4UK65Sx4EftuLXH 9ou8e1RcIHgD15qs2yviRzj0uSuxy92Eiulc66fOjIO0AF8Uv5NttJ3l/Vy4WSTYO/URMZeq9/U oSPwdhfGNqAqoJe4gi9RWUHOdxn/8cRou2ebJ3s/VSVqO8SSj4Ymhio/6kxcrNA+Qc0yiwDmRJr lARSq5moZTch73ASsyBwYFOAApGhUh7BKYrQOljg/xRTXPBOorHX0oxjuKiS4UQ3OZ533CnacsG 356H0sMCxXu5eUTVw7/u5RyUBYr2uaImTwA7DNwW4KIz+R3y+FSVlrmrY1PAbjk+zg8ik2Ngy19 BtJt04D0q/+r26KvErazUyP0aHyWw9nHTCC0X8zQXFzSWVZrBcTpORH5ClPONN+5Uk548LOOuCL dMMC6QGfZfSKFzYIYtrMViMeckkCARffsFNk/7vRhrFgCNusPI9zERXzQStBBiTxhdoOFk7kUR8 jGRvZuyiR8PzXyAjkwJEwezYZrQB1G1tYE4pdzlfWEe/klB5QrZNzsvH1gmbIYvqLsk X-Received: by 2002:a05:6830:67cf:b0:7dc:c338:d23d with SMTP id 46e09a7af769-7e4f2b2453dmr16870552a34.14.1779251858185; Tue, 19 May 2026 21:37:38 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:14 -0600 Subject: [PATCH v10 20/45] 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-v10-20-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::335; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x335.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: 1779251895962154100 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 e51d3e6cf7..04e51538f9 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:35:06 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=1779252002; cv=none; d=zohomail.com; s=zohoarc; b=CFRN2VjZ4BIjeQcETa5BAol98TWzy7BTHou4h5GtZRBB2KozQuP0JCBSpn7xnb+mx2AEBcI3pb39suaKXb31pvmsQqbhHRDEuySipZH0pnMYAA0Hkwl8gsMQeTu2lSnBFM1sLwyOuX4+7t4Scliuro2Fm/cr7mVkdIscdq3r1qQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252002; 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=PvDFLIp/PQLu75d/Ks+DYHupg+MRvJEmazWLJtuvb4M=; b=aOWuOfVNN8f2M4Xrf2E9tOMqgM+paqr/IcXXPHcHwtjTlQVkMpX4Upn53kzJXhL8rqpjTtsvOZ/stl2vQuLyCMfBGzjYr9/D7H6UuxOT4tPYMSpHCGDhzeV60IizYDk7RucBJMh/qvBJvhJqOBgBedDCICrhqdH4I0KgZPx6a8s= 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 1779252002321156.80782754705; Tue, 19 May 2026 21:40:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgk-0001CK-6K; Wed, 20 May 2026 00:37:46 -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 1wPYgi-0001Bv-VV for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:45 -0400 Received: from mail-ot1-x332.google.com ([2607:f8b0:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgg-0003pj-08 for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:44 -0400 Received: by mail-ot1-x332.google.com with SMTP id 46e09a7af769-7de7c57b52cso4050302a34.3 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251859; x=1779856659; 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=PvDFLIp/PQLu75d/Ks+DYHupg+MRvJEmazWLJtuvb4M=; b=bPmi892ZutPTRd/cWzE9y1LygTUl9oc1lyiwAI7IFQHFGYD5XCNkOOzN+o7bFFDW1J njxeEDCs9mw99XHo8WYSoJi9sEPtvuEFBT53WS+s8IUkW2t14nlOA5SFM9ejeQOMAMpE JKXp+fdBOBs7PPs0iZ8J+bBRrhDZ2t3iNSMvn7G+tixliHBKQyitxBS3dMk+Iv28sGAo vUjsfYylalqoszxhAgUs1kdBKtgdrKzKfgy8/l2y2RsqkRtiRNTsZfRc5+yIIk7+69bZ eTlIW7S/4BhfgwZDHgbvz7DW1T6lQJEakVsah0BuTLopjHM2u2OHvexdKN0gyFP+At1E 9F0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251859; x=1779856659; 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=PvDFLIp/PQLu75d/Ks+DYHupg+MRvJEmazWLJtuvb4M=; b=OUwCQ9INzNvk60oOKYeXVz4AITOpUT/097Z6qiG8AnuDTC8X07f3O4mxxdJZ1dL1J9 S2afgWC1y/BAkRpDoXfmmwZJ6iCwwuEy0TjNOm/C+6OzmSUWuk+zxGDS8OqX+G+q5r8u fYWRR+QdCQNaiFmHv747bqWKDaQ4TXwV6Im2ng0Cojn7hSJcn4hy4qoHDTV2vFyEFjFG kYvTT01ygxJ5/YzQjXUNNsY5NFBESlPNJlU7Yclb9clo/rbRpL2gEVE8q5SzkF/w+3Ns BZ6LDd03UJfQCdhrAiYbLjidIq5YQPUX+k7gKi5hd5lgqk5RsF41o45ICn5Z6DBh63rr 1VKg== X-Gm-Message-State: AOJu0YxQmYSYZTxCswaomqFxIW0BdbbCKjfSyZXS2tg1DxdMjmC+IE3M htSQM4eA7otUFIGpD1QtvENDELmZo3Q/DRaBhCeG8+oEuAmn3hsTrIO4 X-Gm-Gg: Acq92OE+9KeO/gCn56djaCJD/94/Q3+bz0kzr7yupHh3HYeWJCPT1i4bwdJMqD5doob k9wy4lNpckqNprhgpcXHrQgHJPJsaalqNJW3nO3wwYzY4tU2zyXSwg25ads9XdKWtG/U5czOrte eqmTQChxHifVJQawpNuydbnsrkrU1+YFe0ADXJhSMurKE/muEudrZobFyEKcu99JRhsnD+kB7VK KEFXcS9BO2YC2JNm659l0NklnGn1PKPtSPoF/5DRZUu3S5K2pBkvqF9UmjSTxrLDBtTLvnvzklw 8MidB2xmPvj1ToIPk4Ixifx8CrkzxHJmgTdCzbX9OOyAiJK7IIhjf7WyEgw0K+J4I+UlX02Fl65 KtiYzKy9gJ/ZXmTqw6QlvXkUSUM9oQhxIrB8/yOktrwbIB01VtyxPmSfT9GqJyG8glidIY4a3SS lXLaZ53Cf7uFb+TW6C4AxbobjzySefksW31AWQIkqgIV/iEv2PRfCx8bcf36MngDqCGl6u43c8f mFtxNtXQfOCs4cIhCs2NIqiyCQIetzXxwdh5oragyiO0hP8DRnZHsuKIrPA/E+t0NhDq53GaZbX aO0= X-Received: by 2002:a05:6830:4991:b0:7dd:9b19:a87b with SMTP id 46e09a7af769-7e4ea072138mr15025826a34.4.1779251859480; Tue, 19 May 2026 21:37:39 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:15 -0600 Subject: [PATCH v10 21/45] 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-v10-21-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::332; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x332.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: 1779252003776158500 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 04e51538f9..e068fd8698 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:35:06 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=1779251926; cv=none; d=zohomail.com; s=zohoarc; b=DFdTTIlrgWs0bsng5LFYOb7wNRe+VmmJBLeaqS9haWtzohtMGyXQmCUGVhU5dk9iv/0MC3rHl2PQO/c4t5yVvhjam7fmnQSS6VxHVqEm+QAjskIYFs8deSRfsbutVrqnmfD/k0HOyADKJ9h7zX3IF48YuKp2C9GkwAu13QQA/tw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251926; 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=NTvhzxAw58s58HpOXs2lKSLjurt2GSK0pRdaQ/F7z/g=; b=NVvGzszoGGlvcuFhMM48kY+AISwQhRyjDyzZnbj4XSauqwwpjED9TeAC9h9mdWO5MHN0flh8u3DCeyaVwlNfW8JCOym5iYGGAsQXpSCMHXGMBXmG7Mozp49Ioj+xKkr7GzNCm3Twn6IQREdszf5vlnaztBLLcQu8ZoftIxApUOk= 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 1779251926406416.65031847923353; Tue, 19 May 2026 21:38:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgm-0001Cq-05; Wed, 20 May 2026 00:37:48 -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 1wPYgk-0001CJ-3r for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:46 -0400 Received: from mail-ot1-x333.google.com ([2607:f8b0:4864:20::333]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgh-0003pu-3b for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:45 -0400 Received: by mail-ot1-x333.google.com with SMTP id 46e09a7af769-7dcd689829eso3753414a34.3 for ; Tue, 19 May 2026 21:37:42 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251861; x=1779856661; 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=NTvhzxAw58s58HpOXs2lKSLjurt2GSK0pRdaQ/F7z/g=; b=Se1Ehd2HQvu2FeUoMkDwRSgfkQkcTFZ8GfrrO4OhHcTGirO7IY8xgnTEdk0hvGm3S1 B0cMKExeM9p9fvYeVqXOEm1F7RjL3jtGg5OqZ1teg2KxQlC2TgMsRTzw130PsIrwkOXV IW9F/XNi0kXkoKIcVPGUwKcG8g5HiNti5KKpBh0lVauWNujo5QUV7fKcxEZBHqlWfNmt y2ALvjhvmf1oOCLO8vNP3Cog6OgN8I1TsPMES/eE1bWLp/CVfOVJCbcJB8tBVnR+Gm0G BYONqOvhoKaaVhYlFXUmb1x75YOxAHDos3QGT8KeCwYzw560pb9UQVi8X5AQUZCZO5z3 zNoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251861; x=1779856661; 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=NTvhzxAw58s58HpOXs2lKSLjurt2GSK0pRdaQ/F7z/g=; b=mcJ+DacigP1qxtQQAy1XQ4cARmUOQyZxA/fNW2zQbmnA9u7ugTJ2fAwBmPrgY7OqQI 9IVy9ysDZkew9UiPI5Pf/JV3aBrpy5/zBMHSq7Q8BN46d2pjkXHH+J8kJCL2Zo/o8/Ti wiABwY2zWNy0a0Zf7p//VtW5v1PmY9UFQTKi2MD8U2c14Jxw8ULV9NJiGOtoMPayTGdr caM+0dneQrbFyfF6NHGfw7Nq5XTUkcwA5pBNKEGmRWqSTQhZ3oIlacCocWapAVKQWyBg UdvckfkAs4rHC3/FcRJHox9quJGzO30GQCgzzxZ6M0Xsudqvli71QEA4B29ScjAOXZWr awfQ== X-Gm-Message-State: AOJu0YzFeNNEQNwOxVIEPww35avIBop6uw62X+jxPfUPtArMtrH3IdMW bRVbCcFsNqOdbLSs7PXfIxKRnJ2DZdyAPSpnVjHnSgkYcqs5AM74F+vj X-Gm-Gg: Acq92OGl2ever1p+4oKPpkWLtcqs+m6CnxRfo32k9Us3xo3MBRUfvnCkknN3LQjL1/r CVfIdqi6nxhLkfiacBmH0tcAl1nMQPPpTU99WWMMF5qeP2SCCOqSuosicV/6sQ1rO46z1B5JdCd gbRRnoHbTL7+srNfNEFGuvpVkYBZ4nbgqjSK6eZXXf6PrxhP3HFxR2LPAwDXXZsv1LtVpOP7UPY veyTqPVTqlw3dIFzI+HjxaNme55rBPRPzqHMz2H17r2amReyRpd3t2kqr835iEti/Ggimo9np/Y fzlHpk4d8qUb5uOd63cTmURw5VALfFRjVyu29a4bLTJUmVowLGuNZb6H4roOBygpCjV6qRaDn8o pXx4RAmtcepEmRbr2KIfOB0CZwkJoZx/QPOy8JJQXS+9GQ8GgGqNPZ1IDyVLk6YT9C+RipxrbcR 49GP2yyBHcDFXedVxNx7qO6QGLFEcfBwZoDtt4rwga03yVJSOXcGDcHKQ5GHBQ+vmuYAkjWGE6a S8E9KyPDd3yc/zYoL2hOA+chPmbLDrdxaChq82ipkCwOHcH+fwXoO7YUm2aGy7JkFsS15b2atMj vTM= X-Received: by 2002:a05:6830:6101:b0:7d7:d504:cc6d with SMTP id 46e09a7af769-7e4f2bb6546mr17810698a34.21.1779251860777; Tue, 19 May 2026 21:37:40 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:16 -0600 Subject: [PATCH v10 22/45] 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-v10-22-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::333; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x333.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: 1779251928246154100 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. --- tests/tcg/mips/user/isa/octeon/octeon-insns.c | 204 ++++++++++++++++++++++= ++++ tests/tcg/mips64/Makefile.target | 20 +++ tests/tcg/mips64el/Makefile.target | 8 + 3 files changed, 232 insertions(+) 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:35:06 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=1779251948; cv=none; d=zohomail.com; s=zohoarc; b=DY2IvmI58k/eJuUHU8pD8xajCoFCn0GfyrH6uSs+crQXFd5KquvA8hx6zTM4gQLwMFaRzkoKxvLoa7VLZpEa7iDD0I0aW+YKJG1NEiJi4kOcxJ8MGeLrp4C7Q0CafGvCjevGyCFLtxcUjwiMaidTLvpEdUH0yS08eSfLnBpCPMA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251948; 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=wGjbiQzXhTzZCgVVJ0XKJGCOtGh1D26h4qODBf+H8sg=; b=cYZ1DXXxVzrpGFecffTGwWBW8IqBuhccCgtiI8dOAC007rO11KO+KhiKI49/QfhlACe89p+2MSw8hBYFMlxk+gYL5Xf3fiWyaikOVnuMyBTUiXqorrBuV9coF6+XPS/Z0639LBEl/T5qu902lZJPVzVL8Z0XLxKnMVObREmrrLU= 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 1779251948747260.23568328838417; Tue, 19 May 2026 21:39:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgn-0001DU-FK; Wed, 20 May 2026 00:37:49 -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 1wPYgl-0001Co-SW for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:47 -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 1wPYgi-0003q6-Mn for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:47 -0400 Received: by mail-ot1-x334.google.com with SMTP id 46e09a7af769-7dbe437b072so2203792a34.2 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251862; x=1779856662; 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=wGjbiQzXhTzZCgVVJ0XKJGCOtGh1D26h4qODBf+H8sg=; b=YR1i/0AtDkWF+szJdddMegNESfpNCoM/lc1htw01qjQ+Pzy3ofQGss3fTgs4A08d5K OFoyZehoEpU4F9Y0Liuoo4rjNYpECc2Gd4uNqzj/FeqFYzGTj3B2tkCVySPPQlosg/ob bI0VOGNruN6fVCHiucBYaiAG0uZWdK8f69lJUnhShm1z6WixLNdSVseJcpRGtYDU9c0W hi0VKqxSb24EkSYMnOR4XlWlffxv8pil/YiQ2GqBXiOg4dfyLSvdzAGM4q1d5CFwVOis v5PWyqv2poBgetODPsPLMxdNMK0A6oysS46EG/20pFeYTmhTQYk5PhCioVXKqI9Jpyji XkBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251862; x=1779856662; 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=wGjbiQzXhTzZCgVVJ0XKJGCOtGh1D26h4qODBf+H8sg=; b=cyK90UiOYE+zpI9/L3Qw0+8hd8HMh/9FbdYBxaqR+2YkdoDYYg9gSnW2o29yEYwdQe L7ZaVbBWFXzdpjzExCmrJfONgS84g81hzNUwBzDSUg4CarvNRnUccEIsyw5UTQLWiuPB RA3i6HQocuFPcTDUavTv4otI+QVvTDTJIg8WSWOgOGDBiDdGIi/zGaV7TTC2HOwqZ9GL FO5RZk8c83FvDc4CFhmfoohYF/vaiO65wfGgM0L+UwX830pWVs/rqEqHd4HTj7s62auf ULyKlho8Oondl00mSppTlKHxxIDNEGs3rvHXrwQuHH9I/o9afHyEmUrmapqOI5QJbX9s NBzg== X-Gm-Message-State: AOJu0Yw0djoSc0f3lej4R/A7pDKOCJRL/4Jvejf0rB2/c3yIhExrCRdZ ATdAKW5oLrSyXtegmSjtLpwAWp+ihD/FjsZ8N/77uXxlQgVFD67NPNWO X-Gm-Gg: Acq92OExAyEy/FTEeoU6pt2DHMvJvrmKz0bLoh4y9dJkhClgALhtfbDoQE2XEe8Nntq ytIc42SUn/6nmcFER1+yTf4RfRgbAp3RcNGMunpzvVflRqcIcAuDxCt2zgBsvWhYn9clsKVBVQI ifNFRFWlTU2iZ9pek3H1T7il55EodM9eehCL1Pik2xgXzsZxIZoLsXKWx9G+EYEjNeNaYHlw0a/ D7biZtJgo+1sMzYMRHV2DydRkxpngbjdGrjhQihcEim95EB2t0GuJBeoQISdK05wEw9eM+RUii3 pyVNvNfDnxZyvLzGXjzY/MsRhOtnTHcmdtk+iuuR9CTqq3DlPGmdnbZJyzk6hY9f8iLkwYDXS/E CPvpOJpewlRxAw9+x4EGXaOsJQ+X5ccUxb4qDlRITS8EXp1Ulp7LXZt+RWO729ETIUpBOqK5CPc XaOHTseiT2bSYYNKyo4H0a2JOthLY9jbKfoR77ek5vK6EIMR9HoBcEI6wEqx295EMMzgiHZ3Vna 2+6yPcOUiartWzKslgq83iYI0Z4tY7ejHpKOz8K/ArqtNYaH+vhLGTu07HhqC3RboCu X-Received: by 2002:a05:6830:6187:b0:7d7:e6cb:836f with SMTP id 46e09a7af769-7e4f2bad231mr14348711a34.19.1779251861921; Tue, 19 May 2026 21:37:41 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:17 -0600 Subject: [PATCH v10 23/45] 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-v10-23-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779251950304158500 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 e068fd8698..55cefe0903 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:35:06 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=1779251917; cv=none; d=zohomail.com; s=zohoarc; b=jYki3siFht9zCWKM1O8lERrfip83YEjmPxQCrK1UPGWF3rqlEC5kFCMRi15Y712HZ9KMvaUVfHuH2GEb0uXAFSxSsqdJbmW7Vw1Cq8hMzuwWg8RGrXClo+wPKtx4i4vecKJdk17Cvpp8HN3UrCQVSFgm5q8Pn2BndgWlY37dECY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251917; 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=Nr3FxQZz7OKL7DfXK1cm8SMgEzktB58VYgFBPF1B1YA=; b=Edz0sCl3jptluk6cHD9Tzj0Yo9svPh9VjvpW4A8Hf1ceJArQOMh8PtSyyI9hwEmLYfvAcCQ45MyLNNw0Q7CPDTb/nadWytUx1aULnJNKa5dzJfFJL5sn6N2s6B2nF+fC8QwpiQzNzvWnTVKpQE1TPxeXNwfCI+x7pnQCHaAtWs4= 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 177925191793111.384013905096253; Tue, 19 May 2026 21:38:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgo-0001Dc-Qz; Wed, 20 May 2026 00:37:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wPYgm-0001DE-Iq for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:48 -0400 Received: from mail-ot1-x329.google.com ([2607:f8b0:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgj-0003qK-JI for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:48 -0400 Received: by mail-ot1-x329.google.com with SMTP id 46e09a7af769-7de7c57b52cso4050342a34.3 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251863; x=1779856663; 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=Nr3FxQZz7OKL7DfXK1cm8SMgEzktB58VYgFBPF1B1YA=; b=dVlc9eDKHs4qSGZ9RcztO0DLBE6wM6kme1Pm9XBoRekV/3PiqvSv2z5rcC2PXQTJa9 s3LImC2z+9/+5w3WEktu2JHJ/K3a6mVeczKo1/KqNO9O3W8NrXdvae8VGV0HoOO/z1ID 7P8ChnFcmwhjeMX8AY1EywrukQ3dawoGTQf/iDzNjphv3Q1tcG74aw1MCaozH5kzb/oY awCtfIsREghZfeWC1E6ds0+Q1g5LkRdeozleUyRizuPu/Aeb6pTA0wJV6oiWcRY7dTvb 5eeyI2CR7og8xSIBCYWIua9QX7zwGFFuzDXmWIuL+RXAtbtjyXTDdjL7ZPqDkSl3a8fp H66A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251863; x=1779856663; 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=Nr3FxQZz7OKL7DfXK1cm8SMgEzktB58VYgFBPF1B1YA=; b=Lo4azLiI/aQtm0neC7yN7AKP5Jjl6hJBL6O77Q4hN87GI//V5YdYYw0y6aFnh8+kj/ aaasT8NlgWBNBn1F4N81PCZZqEqDmEf30dYQkaOx8Y1C7+LmSLQi7EAdUEcnoAeo33yv p0Kd3Wy8q8Kgi//3fxkYpy+JiKvbm2w9KjQjpBn/JUxlKf/iCFCtVjHQFsbvZs4WKx7n BVGHkVLKDjMw+ID8Ozq/shlctqEhUd0soGrhMdyhzW6zuVyjkn8rqdUG+SLyi7aH/wL3 o1kYdSSRGjdlIKwk+KwUXIrBaBRBeVioOzifs2L5tsys2xfqO9O11jY/FlbltvjMhoB/ nWcA== X-Gm-Message-State: AOJu0YxquVCAlnvyWt1GgotTo7LaNhuyhCkHwn2xTCn6tesGYtt2ovxr BiizyS0yeFQ2ypDcAWXhbskEiCS0za0KS5iZIsUo9TvznWfjqj0zmrFx X-Gm-Gg: Acq92OHlnoZ27hSG8gvCp56XVDEMItU3R7lB0d7XkUto1jwNDaJPvYy/7VU7mM+7Gdx CJnD3uhoc7GQn48VGo33DhQPNE/mtrQCKddWIdDBii5OfPVPevh8ME66I1VNJZKDOQC7trE11qm QQES2UFO1ghvTRu7velvGN6XNs0eOsKaLlCBSyWxTbxnyr8TlbbWF7hW4awy9w3DoQZZ9JiEzi+ KGmg3uUP5vbg1g1eos5w0/620G47bTRWHnAtnj5kImwzrVud/XN15Xnh6o6yvE4ar9OcfsFj7Cv xCioTW6QHG26Yz3aQRQII/m3f2nh4bEHH033ieFnT5F6X2VqkFv9ycyD/cBWj+vUyCROPjKpZl9 yDMc8TfOnxSMF41Dfbr+fBecEFrD4saQV4JSofBvq/nghABXjAp6se2G2NjQEE/yk4pgAGwFvax qW5FrAkT7YmmSRyeAmwc7rB8/0NeV+P4haMQL9lcDaMpJ9uUp0r6rEvV1u+Dq4dHFoBVRm0uP4j ieccJ4FkGki4SXCVA8EZ86BW5pFg9LwHUbIwtJOl8HP3Cvkw+CcftZG67dNli0ggzfzo3N+Pth6 TDo= X-Received: by 2002:a05:6830:3812:b0:7e4:230:96ca with SMTP id 46e09a7af769-7e4fa05a5bfmr17807566a34.21.1779251862977; Tue, 19 May 2026 21:37:42 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:18 -0600 Subject: [PATCH v10 24/45] 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-v10-24-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::329; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x329.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: 1779251920159154100 Add the common architectural state needed by Octeon's selector-driven COP2 crypto interfaces. This includes storage for the base hash, AES, CRC, GFM, 3DES, KASUMI, and overlapping HSH/SHA512/SHA3/SNOW3G/ZUC selector windows. Keep selector values and helper-local aliasing logic out of the CPU state header so the state definition remains limited to architectural storage. Helper code uses the same register banks instead of adding non-architectural shadow state. Migrate the state in an Octeon-only subsection so non-Octeon CPU models do not grow migration data. Signed-off-by: James Hilliard --- Changes v9 -> v10: - Drop non-architectural shared-mode, AES input/result split, GFM XOR, and ZUC/SNOW3G shadow state. - Model HSH/SHA512/SHA3/SNOW3G/ZUC overlap with the architectural HSH DAT/IV register banks. - Store CRCLEN as the architectural 4-bit state. 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 | 23 +++++++++++++++++++++++ target/mips/system/machine.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index 346713705a..890734556f 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -537,6 +537,27 @@ struct TCState { }; =20 struct MIPSITUState; +typedef struct MIPSOcteonCryptoState { + uint64_t hsh_dat[16]; + uint64_t hsh_iv[8]; + uint64_t sha3_dat24; + uint64_t gfm_reflect_mul[2]; + uint64_t gfm_reflect_resinp[2]; + uint64_t des3_key[3]; + uint64_t des3_iv; + uint64_t des3_result; + uint64_t aes_resinp[2]; + uint64_t aes_iv[2]; + uint64_t aes_key[4]; + uint32_t crc_poly; + uint32_t crc_iv; + uint64_t gfm_mul[2]; + uint64_t gfm_resinp[2]; + uint16_t gfm_poly; + uint8_t aes_keylen; + uint8_t crc_len; +} MIPSOcteonCryptoState; + typedef struct CPUArchState { TCState active_tc; CPUMIPSFPUContext active_fpu; @@ -558,6 +579,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..2447915750 100644 --- a/target/mips/system/machine.c +++ b/target/mips/system/machine.c @@ -279,6 +279,34 @@ 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.hsh_dat, MIPSCPU, 16), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.hsh_iv, MIPSCPU, 8), + VMSTATE_UINT64(env.octeon_crypto.sha3_dat24, 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_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.aes_resinp, MIPSCPU, 2), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_iv, MIPSCPU, 2), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_key, MIPSCPU, 4), + VMSTATE_UINT32(env.octeon_crypto.crc_poly, MIPSCPU), + VMSTATE_UINT32(env.octeon_crypto.crc_iv, MIPSCPU), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.gfm_mul, MIPSCPU, 2), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.gfm_resinp, MIPSCPU, 2), + VMSTATE_UINT16(env.octeon_crypto.gfm_poly, MIPSCPU), + VMSTATE_UINT8(env.octeon_crypto.aes_keylen, MIPSCPU), + VMSTATE_UINT8(env.octeon_crypto.crc_len, MIPSCPU), + VMSTATE_END_OF_LIST() + } +}; + const VMStateDescription vmstate_mips_cpu =3D { .name =3D "cpu", .version_id =3D 21, @@ -396,6 +424,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:35:06 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=1779252125; cv=none; d=zohomail.com; s=zohoarc; b=E8+kBoTBTHhSoQnKFcXx4zgsXxtLg/Uhk/WzQEsKVBIOJF9Pyi7dTIreAFATqmrzBM8LrTLjrl7oAx5Dogz2/y4PeYuni9djeJrBoU50y33JuG1DBq9rmVdIN/F79q5h9Dg1pN+b8UPMwgzJ3coJp+M8ISUNDJ6zKJXYwPMh+24= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252125; 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=z9OZKj50dZv5s1heY9l5Z9IxHiDUoqE1DOEEF5VctYg=; b=GAtHpFLkJ3wMa2cbT/cc6y2RhhgKNg0cTORHGl8G3JIPt36UnreBRWjmI+Zn7OsHnwye572eU6lYKJJiBAVkbSexD95XpqHXK6Bpqiyb8mSOMv2kORCdo/qhBiYXz6iiUrUGsnb3HBmotsWPrVNvzeNw2WdkaWPFx9wp0yIYmm4= 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 1779252125513510.3160522102021; Tue, 19 May 2026 21:42:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgp-0001EH-C5; Wed, 20 May 2026 00:37:51 -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 1wPYgm-0001DI-Ot for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:48 -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 1wPYgk-0003qk-1b for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:48 -0400 Received: by mail-ot1-x32e.google.com with SMTP id 46e09a7af769-7e568ab0bc5so4967209a34.0 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251864; x=1779856664; 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=z9OZKj50dZv5s1heY9l5Z9IxHiDUoqE1DOEEF5VctYg=; b=Uhf0tGtaWcZwFpyQ6W0ib8j58SH9E6ilJ9A8aOaJ875u/mMBtbI+bDJtuJrRxyraft tOFohWVCBpRLsM6/P/65EtY20tZvx/wdHnx4HphxPIZboOlFYWN7WgE7HjN8mwW+6oyO Mq3iF5ut695PzOEkbdrXNZEnIekgHnlh9e7hJXYP2lDvD+QVn8OtQTbeJL3ogeTbNeD3 2w5BawtmYa3SuCE10Q+btQJJHi5+EzjfH7NzlLRodo1lYZfh5xDwdvsfZf9C5f/WWah1 T0g0pj8YKktbY53SR9nnqnJWYtAGXP6yMT3WFhDfWYGIi00Yc+aHEWSLnSPdnmoEt7ao FfqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251864; x=1779856664; 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=z9OZKj50dZv5s1heY9l5Z9IxHiDUoqE1DOEEF5VctYg=; b=hhXYWnn3845O6smc7RGpbhPY/7LC/sQXg2m90mRbaqpp9UZ/zh7hU/fSoYaIdstkm1 2Eq6vw9x8iM6720ZoJDprS2wFfCi/ea2aKpfmZojb83Lnu/crYRdfpsik77Lf5Ah41aJ fJWVz4AVV9bdTzUH29IukTJotUW10Fx5GHtohFOm3CRvjgK0k6M76wtcQEjKkpnvKuXF ys1JfCTUVEskpWg0B8uhWruRXwJG2O+TOXvuUywDDIBwbql6q+qYzDO+7Q4LSKsq1P8x SwYBh4Y5OgHFmgA1FDmVe7ewma65J/2R6jm7Uuk9uuY1mh0EhzMYnPzb4UkzvGoBRobs jz1A== X-Gm-Message-State: AOJu0Yx/w4bAtIeSRAkPvYjc3k5gv2t/y7TrTFuAt5wkXZ1fwCUNLVWf 3AdF9za7ujX6hqaWwboX9mVMW1U0jbTwf1iZyotOrCPniz+77TXMCR45 X-Gm-Gg: Acq92OEhDUWPYe6V7RMCSqqG/jLDi4upcEzsd2xuyaNEzXEo9q9GQ0nE1DjPS9Z6PGC gxes2/w64FxDmGy4jRAduVxxIbyaojiAxWJbM7FnvHkH/Qe3WTjy/PpM0J9rugt+WviztEAKzgR rvYesfRjkA3Xu8fvzqcB08/pGo7z2armQC/BL2LU7mi4q1vp6zSKVUKwY0ZLRMDcZNq9p9+ogpa +qgiLR3pGdR1QeTnKIKKf9EGp3WE3UH855Cx1qDrBmskiQdgsY37L2CaLTOfteHDffA8+fSVuGm WlQ7o6D4SENBpqsWKl7PCCFp3W1TtETyA3q+grEXwTXv4IunA2CoH2IjtMVbNnn9GFcPyWA2V+a 1KS8FQtvof5ZcKkifEnz55IS31pbRJvwV+9JP1KXrHGEvGrBDrLSRHVjenIhy/++LpM6dh2m8e9 TS0zsyp0ogxfWHpe+UZyOmfXA+N6jkrRHnBumni3a34rJamEzYICLaNEapnNona4pmIyot5PRAQ cs0VWyKAcFlZ231qAhj0QxTv7zw0LpVpvruw9EAcOCRX3JrJZoMfc6EB7xXhzFe06Yw X-Received: by 2002:a05:6830:2a08:b0:7d7:f70b:5b0e with SMTP id 46e09a7af769-7e4a400124dmr13308778a34.12.1779251864008; Tue, 19 May 2026 21:37:44 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:19 -0600 Subject: [PATCH v10 25/45] 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-v10-25-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779252126537158500 Add the Octeon COP2 crypto helper source file and build it with the MIPS TCG target. This provides the common compilation unit for the COP2 engine helpers. The instruction dispatch itself remains fully decoded by decodetree, and operation selectors call per-operation helpers rather than a common selector-dispatch helper. Signed-off-by: James Hilliard --- Changes v9 -> v10: - Remove shared-window selector constants and the shared-mode setter. 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 | 16 ++++++++++++++++ 2 files changed, 17 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..df5b0449ae --- /dev/null +++ b/target/mips/tcg/octeon_crypto.c @@ -0,0 +1,16 @@ +/* + * 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/sm4.h" +#include "qemu/bitops.h" +#include "qemu/host-utils.h" --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779251942; cv=none; d=zohomail.com; s=zohoarc; b=TCKeapzC9gdJojUH3zSvNe8tkHsYJ9QyhPrkF5gwmhujJSoRlq3C+0DnwlBsb+pit8+doB+QS/R/Cri03/s8tcZ1r/RjzuI3L6c5AEhfO/ow+G36KanpZQNuNDMIYYzt1GqXRZpNepp4gWZSDiBOzI2AcINrp9OOiSVAkbsPaxw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251942; 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=99YbXwU+QZjVpPSGzU0gdv9rBjyJynqi/nBLawDCdQk=; b=DXyfNN4kYDVvFSjBSWo7wXJb7vC9lat1ZyIO4nWaiQNFIBW3dUJK9KbTZEpEgc9B7oLSUh5BC33FqnsNL8brrH1e+lFNFrxOBpAWQJJVY3YooImQhDbdEMJe9Ri9gWIiqqYjVCm4Bv6otQw7IufNRfizQGXTyHAb45UcFW9F/14= 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 177925194235989.3467298352142; Tue, 19 May 2026 21:39:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgr-0001FC-8d; Wed, 20 May 2026 00:37:53 -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 1wPYgo-0001DV-DH for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:50 -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 1wPYgl-0003rE-Ke for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:50 -0400 Received: by mail-ot1-x334.google.com with SMTP id 46e09a7af769-7dca4debedaso4640492a34.2 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251865; x=1779856665; 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=99YbXwU+QZjVpPSGzU0gdv9rBjyJynqi/nBLawDCdQk=; b=m5L1LXQR5K5gaYQeXc2l7+h2wgOSPbmtuC2+OdN2MNskK5ZNz6kMlSMvq0ICy8FCTI SbdA3ayumFw1YZIBBU1UINKQTOYojctGGd4OEJaN7A8Uq6Ed5otyYOlxa0kSNh3/K2dF uHWW/DkA2k5GN9mO/FhmfhvGlX6jYQg9wXam9wnv+DVGU+oSuYjv/ckH5NK13Rkym+WS vyWr8bbDlSrF8jFlowUDEdSQaRPgxMUO29kPJnFLY97fbdS5lW3Ils0nqhNFhtkF1Bfy J5vG9dcshKzJdqwBVarjubSqyqF1lYbaQ5439QYMfL6Igg/IAOMJgmLyaZ2r7UUxCmq3 4BhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251865; x=1779856665; 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=99YbXwU+QZjVpPSGzU0gdv9rBjyJynqi/nBLawDCdQk=; b=GbhcCveKIa/ynDoBPJYVfDf9ncIiUtlg9OEYW6P74DTyqGN7hkwpOGO9goh7WDRyrX w9SIZABVV89DoAc6ZGhgcr3s7waYrDsYM7CcHIXLonfKPAjP7iq50rhamfCirESdT9gC Ez3E6XL9/aDcJMUJynYIhO/o12wDjRTPiHIYLqF5Kzxj8AZ50KItdnZP0F+J9IIo1akI Ts/5ZvHHHYpu2NK+ToXG3bgHsY0gTvKlfPp51r3zAwDfsNZUqQDZgvD1x3QGkTapCbtH RpPoXcYqo07ZeivXki80tv0EHk/i/7IISLbgUnJFW8/qtHZubfL/k0AIKzof+9LeE1Tu ddWQ== X-Gm-Message-State: AOJu0YwyCxa+DpRIkHxThrEtsJw4lCcvJNUKj5BP6fPcATwi07wQ1XiB MclUGkJSLU7+35cpd+woIsTSNkVelovTpH5dvEnNO7W++XGvQP7fktjs X-Gm-Gg: Acq92OErkrsbwYVGHwpkWRwtYNfS4vlHUWWkLtNGETgqCTb/B61CYVWJNNbbIjET2vv xNjRJVhYipW/vvh7AsJcB/zXbcFcFf1W/lMrxsGj+WxKbljZ9p+zu7dt6MYfkc2aOJD99RvpLae UY+o9mhF1c7uhehm2cgjM5Y39Y4eXOB2xz+gkEQFOTFkRrzHyeZdXM9NuDP0V464PYZNB8h40mn 18tms1Hg77a/lUFb7rIRYWmFaRU49T5RH6jiiweh6yTEZyXt0b5jXL1r1kuAZgK2r+RcTleOz0N UM3LXpK3qhmeQdNmuDnQdNJn32lR5eW2JEP0zrl8ZtgChSKA6egVE/RyqnseITBJ/mI+HUwTXyN uDrXvGovx2taQ/UO71VYQga2tOQC0A9/UjBIQclXpJxUOqaaXe4bm6xKg+72dyagtbU87l+9JOt CCiNDoerh56ucZNgeJeySF4WUbEAZheuQ9eTRiorxha8GPT5LZhVqywD+mKOEPDsPPpzpnhhvmm qcgmzYS6cmMn2gkz+vYvfz5z8n9AqTp8Dd4RBQ0prbMvGpGW4JbBLJbD0x4fdPEF0GCv1VPZZ/3 f4c= X-Received: by 2002:a05:6830:82cb:b0:7d7:f5d4:ef5b with SMTP id 46e09a7af769-7e4f2a33046mr17142718a34.7.1779251865267; Tue, 19 May 2026 21:37:45 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:20 -0600 Subject: [PATCH v10 26/45] 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-v10-26-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779251944627158500 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. Register moves that can be represented as direct TCG loads/stores do not need helpers. Add only the side-effecting CRC helper implementation here. Signed-off-by: James Hilliard Reviewed-by: Richard Henderson --- Changes v9 -> v10: - Mask variable-length CRC writes to CRCLEN<3:0>. - Add Richard's Reviewed-by tag. 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 | 131 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 145 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 df5b0449ae..811f36f46a 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -14,3 +14,134 @@ #include "crypto/sm4.h" #include "qemu/bitops.h" #include "qemu/host-utils.h" + +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 & 0xf)= ); +} + +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 & 0xf= )); +} --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779251932; cv=none; d=zohomail.com; s=zohoarc; b=Ot4YjUHxK3vZnxECb7J8Nxkbe69nl5Ls1VY8+c+w5MUrlLBiARmY9sx7mJLRlaqfaRGSf3WMkKHus/1+hKqA8JJmhmuUtXBcRu/SCKFvSxG8R6zF179Aok3cnkUnczlxsogQWTU/a/QqTqzK1wsZxGb2GjNJBbLJe3yWhXpJTp8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251932; 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=616bqmJMtxgdrwj6c9UkRD4vaulGvEtHPMYwNIUf+dE=; b=Fpe2GGazX5EYIEWhNAC6ch1iYto5IFQj6pFNJayRAIIZHAOMx386jpMgNvv3gaeKrD8hX0HpBAU3bUtnEXuBtSL8AFL3UNgaB1WUSRj50HUv5EPPnl6Obs5yXocihQ+kD+Il+fjMXoI4ANEbX6eUlvGmf0uZflAUANM2330+zPg= 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 1779251932551815.9428801893512; Tue, 19 May 2026 21:38:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgs-0001Fg-Fx; Wed, 20 May 2026 00:37:54 -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 1wPYgp-0001Dv-2g for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:51 -0400 Received: from mail-oi1-x232.google.com ([2607:f8b0:4864:20::232]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgm-0003rX-KU for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:50 -0400 Received: by mail-oi1-x232.google.com with SMTP id 5614622812f47-479dc6d26e3so2675255b6e.0 for ; Tue, 19 May 2026 21:37:48 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251866; x=1779856666; 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=616bqmJMtxgdrwj6c9UkRD4vaulGvEtHPMYwNIUf+dE=; b=gOEvmjZ842CSk/skIySLFY1hQq9wNg22IhxD8845FcYlD/Gjph5XXOt9qonqjh4Vtb PmYSfXLkPB5foll3+XJRY+2tzjubRRGx+y7TFNEm4zoKoDEnau3gGCrthL6DeHuWcCkS Q8wk7HnY+Kk352lc6dycEt3kQN1MAoMVSVTGww0Kpu5j1h9MbQxnX2xJqbRNBrMpMHNV ZWCuwbpBxzdThjFUopvB2ZU64BHsl8IPlK7R6eSZo+oR2sOTb3gKwSJcL+GawoinbNIr 8VARIKkM7sQVfaLry5Qh/z9wK+jtSllrklTmggy0k7QIymXepJa3N+L6eZ8X+5/KoS9N ZkNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251866; x=1779856666; 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=616bqmJMtxgdrwj6c9UkRD4vaulGvEtHPMYwNIUf+dE=; b=AdrAMQoeyWMvNf75kJGXGRnKVIEzE8WH6SNP04CV3cYriHdmh1coV6IpaXM3iVcWKD DxtddVf6LemltKjQ9P8542jLl4Oz+bC6hOVA14Yvi8MtOWhqvJyBwCdsJPHybpx+gKON ejwKtwepvzSwMqfLumaL99AOWWbS014kixysgB6GUf0SYWejnNUWCMEc7/bLgQyvGwdj yUbnfscxH6uroakySglr+d0E8YQnW5wXVrifWAd3sD/QaYq1jypuZ6REHkuzbtLH63w1 M67sFvVzwlefim8gsOvEyarp10QBNgWA558IslaTnA0nF4loWnj0vAmoiUsygo4FcnPQ y9mA== X-Gm-Message-State: AOJu0YxlfuwHx6qVzN1doT40kO0JvBaHnrpe6qeoqYWaXtv2NHgnJKR4 xMFirR8x5SytS+oOHDROr/hI95Jwb2A+t0QlCN/GXmYjpjQArzTAXpUN X-Gm-Gg: Acq92OFkvdMN6sERqCOt7YlfFV7pp7sZ1VzOGa/40yAuh+EDHIXkiS/uzZ5igVm7Gtx Wld0z1jpi71n60S6FHe3N69/pXqxn2tN+J5XAAyIHbsaoliuaXqQSzWV0wVqyo1BlqFP17WVwXJ c/tNjjw3IOO0tB10eFC+RIrOBjvme43hZ1cp23vsDQrMphHSHOVYiqQqpnJfmidKOEb/npnKMW1 okNsjGCyiw6PJ+j5v9hrfSJvGko5+s7i8rye7BeVjczYZu0HLoO5GIZEibyRorRJo95a0QSWXNJ 7IWzk24UN18cUdvxT0lhyy9rns9yFjlXoq7V75N86BgeuwvcstFZ9EIDggubis+UCjHFavVMUSq v85Q0cZqGSEtv+iq/jou3pr3QCRTaKIoI2lyHBPFpEsxK/UF5AHMrrk9NTqS7uXJGDPV0Zu+eJW VpJuWKQA2dttPCkJOdrhz3SECXsuILIVWp19gxsgCV1Zo1tzpATVvEBybAdD4LWk6D7JSKxbg+0 x9hOE278RcCJtVK/6yoakfDr6MZsgRxY0GjJ6L7oB5swDX/IME36S0KWOpxOeGyMpxsP9AJnNiE mdA= X-Received: by 2002:a05:6808:e698:b0:45c:8fa8:7497 with SMTP id 5614622812f47-482e5771dd9mr10734432b6e.34.1779251866386; Tue, 19 May 2026 21:37:46 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:21 -0600 Subject: [PATCH v10 27/45] 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-v10-27-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::232; envelope-from=james.hilliard1@gmail.com; helo=mail-oi1-x232.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: 1779251934185154100 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. Implement the reflected path with the same architectural 128-bit state model as the normal GFM helpers, avoiding target-local shadow state or a 64-bit reflected shortcut. Signed-off-by: James Hilliard --- Changes v9 -> v10: - Preserve the 64-bit UIA2 GFM reduction path used by SNOW3G F9. - Rework reflected GFM helpers around the full 128-bit architectural stat= e. - Use direct RESINP XOR operations instead of target-local XOR shadow sta= te. 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 | 4 ++ target/mips/tcg/octeon_crypto.c | 125 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 129 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index e802f50fd6..7767556f79 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -38,6 +38,10 @@ DEF_HELPER_2(octeon_cp2_mt_crc_write_dword, void, env, i= 64) 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_xor0_reflect, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_gfm_xor0, 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 811f36f46a..d59bd8fdac 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -11,6 +11,7 @@ #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" @@ -75,11 +76,135 @@ static void octeon_crc_update_reflect(MIPSOcteonCrypto= State *crypto, octeon_crc_set_state_reflect(crypto, crc); } =20 +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; + + /* + * Keep the reflected-shift formulation used by Octeon software: the + * selector polynomial is pre-positioned at the top of the high word b= efore + * each carry reduction. + */ + 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; +} + +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); + + hi ^=3D 1ULL << bit; + lo ^=3D (uint64_t)poly << bit; + 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]) +{ + /* + * UIA2 uses the GFM datapath as a reflected 64-bit multiply in the low + * half of the 128-bit register pair. + */ + 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 in[2] =3D { + revbit64(crypto->gfm_reflect_resinp[0]), + revbit64(crypto->gfm_reflect_resinp[1]), + }; + uint64_t mul[2] =3D { + revbit64(crypto->gfm_reflect_mul[0]), + revbit64(crypto->gfm_reflect_mul[1]), + }; + uint64_t out[2]; + + octeon_gfm_mul(in, mul, crypto->gfm_poly, out); + crypto->gfm_reflect_resinp[0] =3D revbit64(out[0]); + crypto->gfm_reflect_resinp[1] =3D revbit64(out[1]); +} + uint64_t helper_octeon_cp2_mf_crc_iv_reflect(CPUMIPSState *env) { return octeon_crc_reflect32_by_byte(env->octeon_crypto.crc_iv); } =20 +void helper_octeon_cp2_mt_gfm_xor0_reflect(CPUMIPSState *env, uint64_t val= ue) +{ + env->octeon_crypto.gfm_reflect_resinp[0] ^=3D value; +} + +void helper_octeon_cp2_mt_gfm_xor0(CPUMIPSState *env, uint64_t value) +{ + env->octeon_crypto.gfm_resinp[0] ^=3D value; +} + +void helper_octeon_cp2_mt_gfm_xormul1_reflect(CPUMIPSState *env, + uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->gfm_reflect_resinp[1] ^=3D value; + octeon_gfm_mul_reflect(crypto); +} + +void helper_octeon_cp2_mt_gfm_xormul1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->gfm_resinp[1] ^=3D value; + if (crypto->gfm_poly <=3D 0xff && crypto->gfm_mul[1] =3D=3D 0 && + crypto->gfm_resinp[0] =3D=3D 0) { + octeon_gfm_mul64_uia2(crypto->gfm_resinp, crypto->gfm_mul, + crypto->gfm_poly, crypto->gfm_resinp); + } else { + octeon_gfm_mul(crypto->gfm_resinp, crypto->gfm_mul, crypto->gfm_po= ly, + crypto->gfm_resinp); + } +} + void helper_octeon_cp2_mt_crc_write_iv_reflect(CPUMIPSState *env, uint64_t value) { --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779251961; cv=none; d=zohomail.com; s=zohoarc; b=NvM07QVbcNYBoq5RGX1EF5eGXZQ+X4qTVDTs0i6MoQBu3ttLQBsprfEMBwL+zrhL3ojc32yMaMcXF5eY7nbYlaZZTtGtlUFXugGhaZOiCRGcDEkHyXohuFGjB6OeoBHzN87EkMVbxozVyzGlkr4WH5Dyd8wY+IDQPZ4gkcVmOd0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251961; 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=VvOEYbYQx4yLqf1C5vZlAY/usIq9VrwMWKsAkZ+uj44=; b=VQtWawoYPCEiIUcPoA2q7V6cg+A1vMHwxkITf+2xjUlX3R0r/T8gEbI1vChBwHZx82Nw62NU4NKgMC5J8YPNrSwgoEsX4zGtfe9zQmn+SqbI6A0/At6aLXtIbgCvSgb+hl75nwcmSepORxuTLB3jxuvLr9+Z5Jvp7d4H8FFeUKc= 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 1779251961157939.4011771885891; Tue, 19 May 2026 21:39:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgs-0001Fh-V4; Wed, 20 May 2026 00:37:54 -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 1wPYgq-0001EY-EQ for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:52 -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 1wPYgn-0003rj-NF for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:52 -0400 Received: by mail-ot1-x331.google.com with SMTP id 46e09a7af769-7e363c6141dso3668625a34.2 for ; Tue, 19 May 2026 21:37:48 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251867; x=1779856667; 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=VvOEYbYQx4yLqf1C5vZlAY/usIq9VrwMWKsAkZ+uj44=; b=fdQNTy2YMh+84Rhog/WFrLc1WPqRTHROjGn43+UfV6dTsx7tCFv9dNPanp+n+zI/Hc vCN6XwgvqnQT9/x1Uq27xE+kiT+Bg3cpfollY0RE/WZSEpg1mElciWC3Ad2OpOIPnhq0 gA/KYcymzEyDsW11pH0GtminCJX+rCGIlE8WM+J1RuajJPB1gE6TI1WGs/S4Wey+uyP0 vJdSnyq4R5MGNMztixNVd3MmCaxJqsKAzfLQapbn0fGD9llTIDSmRECN8++nVT5Oxsip 6lx4C+tfWiODKuzRN5qdMt2WK293HjdlZ53k/XnARKJkr5rg4Ybpn66gOKfo96PzJeVT oBiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251867; x=1779856667; 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=VvOEYbYQx4yLqf1C5vZlAY/usIq9VrwMWKsAkZ+uj44=; b=KE3xS0cyBBreJQcm41OZeIj++2Q+63uJ75l18o9kSMC26oEynwlaCr16pLLKRjZQv2 O+u8tcrn2Cd0jqOktTSTw8R1FdSJIZ4PZANCHpaG5PsOtLMKhYlO5QfgWgeZtDo9lrcG xQP7KkuqZwMP3fM2zSgzMXdbBN3msvwhId6FVW1lmG3ItbQTy8OpYu3pOTX0QwVtHLNb sgqlwNjZqZzedp11Y4QSbaAOE5IAH786gziaiEr7/4PAUzONQG9+J6rZEanIMoTnclB+ NGjRxYVp1nn7FTC6eVqFk7k7Fe+i7l0ZmW7yI2vgaVqzgdlw3MlUoxhXpCrrENKA9/N5 /7gg== X-Gm-Message-State: AOJu0YyjpKhRph4qP+1t6q9RPglGpjU+M7YGnCn+qktg+U/ezbfComOo yObkaZW6ORLl3ENEqlYQlOcIq6uH+6BDYrff48kmd74oO+3bRflofry5 X-Gm-Gg: Acq92OFHx/GmP4q++sBBczuoWkktTA/OuF/+zv9+LAtnc+3aGaMtCkXOq8QPNbA5Lgk fYZ5AE89q6HwHXBJVpCVLJFFVpgM/DhlxY50IFLrVDJ+KTxxzneoIwF0lNxHzWNNs6OpF3RsboV ci1RLZ1Ejkn/fUdVaeJc8+626qzYUWgkplO18jZo0aGZOCBwAGF/r1MnvaR9qnGgZPub5lD3mxG WeU3YiJcurFbC6vHsBsSuPFSMArJDxtJoKMtaBTHEyt1XNb7r5W4MbTZ1AxZFddKmUrQgDR5lhl ay0Oq/Zk1DwToPfgqRTKzyuR7Sk//3AUkoqwpacgDLU57dpvyZtaqUamHj7Rac5SvUp980ViqWM V1UlFzIrJzhxbw/s+/Zc/2WkSvhwhWRT1+TUy4g+D6WinlJ4fWCuvtHDlEcaN7aL5kqiXfo3kS9 nZc3ZmgmDGI1J+Wk7SM3uKNGFg3n5vLFfxUnXaZN7I+IAtOuy84SXuBdHatvI5sWmGSqUtN+/Uv J7cI3zMz2oZAM2XEBmSM8euyPZM84x1BkovpE8IfSBkVOp1KsKQZqvk+Sx7lnIGZiOVuR4GYNl3 DTs= X-Received: by 2002:a05:6830:d11:b0:7d7:4002:1f21 with SMTP id 46e09a7af769-7e4f2b6c3a7mr15243594a34.20.1779251867494; Tue, 19 May 2026 21:37:47 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:22 -0600 Subject: [PATCH v10 28/45] 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-v10-28-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779251962456158500 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. Individual DMFC2/DMTC2 instruction decode stays outside the helper implementation. 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/helper.h | 22 +++++ target/mips/tcg/octeon_crypto.c | 172 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 194 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index 7767556f79..31363fb8dd 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) @@ -42,6 +43,27 @@ DEF_HELPER_2(octeon_cp2_mt_gfm_xor0_reflect, void, env, = i64) DEF_HELPER_2(octeon_cp2_mt_gfm_xor0, 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/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index d59bd8fdac..010baf3664 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -16,6 +16,8 @@ #include "qemu/bitops.h" #include "qemu/host-utils.h" =20 +#define OCTEON_SHA3_DAT15 15 + static inline uint32_t octeon_crc_reflect32_by_byte(uint32_t v) { return bswap32(revbit32(v)); @@ -166,11 +168,129 @@ static void octeon_gfm_mul_reflect(MIPSOcteonCryptoS= tate *crypto) crypto->gfm_reflect_resinp[1] =3D revbit64(out[1]); } =20 +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 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 uint64_t octeon_sha3_get_lane(MIPSOcteonCryptoState *crypto, + unsigned int index) +{ + if (index < 16) { + return octeon_sha3_reg_to_lane(crypto->hsh_dat[index]); + } + if (index < 24) { + return octeon_sha3_reg_to_lane(crypto->hsh_iv[index - 16]); + } + return octeon_sha3_reg_to_lane(crypto->sha3_dat24); +} + +static void octeon_sha3_set_lane(MIPSOcteonCryptoState *crypto, + unsigned int index, uint64_t value) +{ + value =3D octeon_sha3_lane_to_reg(value); + if (index < 16) { + crypto->hsh_dat[index] =3D value; + } else if (index < 24) { + crypto->hsh_iv[index - 16] =3D value; + } else { + crypto->sha3_dat24 =3D value; + } +} + +static void octeon_sha3_permute(MIPSOcteonCryptoState *crypto) +{ + uint64_t state[25]; + + for (int i =3D 0; i < 25; i++) { + state[i] =3D octeon_sha3_get_lane(crypto, i); + } + + 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]; + } + + for (int i =3D 0; i < 25; i++) { + octeon_sha3_set_lane(crypto, i, state[i]); + } +} + uint64_t helper_octeon_cp2_mf_crc_iv_reflect(CPUMIPSState *env) { return octeon_crc_reflect32_by_byte(env->octeon_crypto.crc_iv); } =20 +uint64_t helper_octeon_cp2_mf_sha3_dat24(CPUMIPSState *env) +{ + return env->octeon_crypto.sha3_dat24; +} + void helper_octeon_cp2_mt_gfm_xor0_reflect(CPUMIPSState *env, uint64_t val= ue) { env->octeon_crypto.gfm_reflect_resinp[0] ^=3D value; @@ -205,6 +325,58 @@ void helper_octeon_cp2_mt_gfm_xormul1(CPUMIPSState *en= v, uint64_t value) } } =20 +void helper_octeon_cp2_mt_sha3_dat24(CPUMIPSState *env, uint64_t value) +{ + env->octeon_crypto.sha3_dat24 =3D value; +} + +void helper_octeon_cp2_mt_sha3_dat15(CPUMIPSState *env, uint64_t value) +{ + env->octeon_crypto.hsh_dat[OCTEON_SHA3_DAT15] =3D value; +} + +static void octeon_sha3_xordat(MIPSOcteonCryptoState *crypto, + unsigned int index, uint64_t value) +{ + uint64_t lane =3D octeon_sha3_get_lane(crypto, index); + + octeon_sha3_set_lane(crypto, index, + lane ^ 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_sha3_permute(crypto); +} + void helper_octeon_cp2_mt_crc_write_iv_reflect(CPUMIPSState *env, uint64_t value) { --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779251963; cv=none; d=zohomail.com; s=zohoarc; b=VnhgWbetgrgQWtfK0mpzU8syKZ9873TPvb+0UNSEeHiLFnM3FV9cJcP/fPZ0exk/kJlEWy06h8Ae0rsF8suBRRV2q5yz8yn353Yz8/qTHpMkm6j4gwxr1GAzI1Nxkcx0Bhi7/xwI0YtAcMnAl0DxUpfLMSEEPooog3bANI+JJXg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251963; 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=5LyMeN8t6d1qglgQyfiRgbfF3HvtH64MTW/g8EafkPU=; b=Rx53c8S7BXWVUmDryS8Iw6dlFdHTnsfFWbmUjKjbU4WBzhruVp30BQ/iXluk8GkJdmHAk7Z95f4xxqtHl6KhJAlftaSnkRKGetCykiuG2fYm1ow8CFtX/JFq7mNkbrmuF345ixBP5UaKTeB4y9O5F7kxMLQtUySGbCNhi5Q6FnU= 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 1779251963866213.76920219396015; Tue, 19 May 2026 21:39:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgu-0001Fz-0n; Wed, 20 May 2026 00:37: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 1wPYgr-0001FG-9g for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:53 -0400 Received: from mail-oi1-x230.google.com ([2607:f8b0:4864:20::230]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgo-0003rz-Fp for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:53 -0400 Received: by mail-oi1-x230.google.com with SMTP id 5614622812f47-47cacb4ed99so2796620b6e.1 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251869; x=1779856669; 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=5LyMeN8t6d1qglgQyfiRgbfF3HvtH64MTW/g8EafkPU=; b=rO+RlPdAVjChZqFR68aUeOHmdN5tMjIPR3PPy5TO4WonHspJ7qxQm59kMnga0TWy88 RoZuIuJH7hiKwtRTo9EbneR5xEpY4eueGXBzVkPAJ6i6RU9QhjP7vrtN4CH5GBEKPoSI fg0jcnxzCIKRWJQLcmcjE+mSysB3wIFwu+WSl3LtGCftkE8yM33vezgxF8PTL+rJn0O0 rMPLwzm7sA6kCbp2VbzylDzm5WcJ7sRJosYhjxNAEcGVC7n0olrkf8VGl0Kdb2R9mPhB 0pOxM7JJiSgLZbWu1jfCguN60hhGoPgPP7JWU2xcxc2GTHSOGNlHQwKqUDj9BbJSOdcD 2qkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251869; x=1779856669; 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=5LyMeN8t6d1qglgQyfiRgbfF3HvtH64MTW/g8EafkPU=; b=Ufov9LJGGvTE8ByeWNCVNz+n4smTqd/k0ZFxZZLRyVQMfBD6aFOoqq99Ki5VFQlvap w/ZHpicdVXx12LZ/aNyhQMPYVZYE0EwCJwpK5NjbpHsNsDst+151WFmDuZus7YbPNXmO xE5VZcT4gW5T35EBT/GZFFdV2kVxnGwBmyiM6yH79lIdRabG6BVC+6/7904VYgECyF2c tnMCDrZjWbi/QjK0OvmBdNNY0s2JsuJjvZVIdRV5SRB4gtzl+yD60e4asz5SZb01t9LV niYsNPYDYXJX3fi5A1Z0TYScZLI27jCSTVIinJVYqes9CW3prR89KMeVQfQ6+Nr3cpjI ZU5w== X-Gm-Message-State: AOJu0YyGHlqYHEfXaWJO7o1NArAutazmfWcqhhGbFFf+eV+QQKvWqHpH N68FHDtagGpep15FB5FiGWJjAJ3DKp3VeH+8ex91i+72fuAPQ4pQN6L8 X-Gm-Gg: Acq92OEzIk+9V9+u3kCS2+Q3CETNTLiUhs1Y1Wj3AXHX86SJTNHOnezkwh55fo2Rv89 YuzNZ2TMtJSNTiS/vqc45VrQNU11t6PYYo7c+RInWLVnGTGuHuFUE87y66oHHS6/OpySp8LpL6g mTq3hAO5OHa3xK0OQU1COvHw60cZ8r+p735r4ZWmgvtcmpOsi/LdIj2Ce7PuSFURc5GhkF35u24 ITgPyTXR64tEBSdafi7j8zbdo1yznzdugvSDL8wIGX/m1vR/cPz5+Yx5Zx3aZzepqXhgQes0d/E txAaKyk9S9nSMx5/GW2dhdsQsodT6NY3tIAcdlUDgUWUFFLZTQU5gxF+IRJC8BNSZMIs7GwhnmD tfKByDJxMa7YNkgdDVcexbw/yZ/57/w/ipDsl6wWRj8w5S6m8lT+gL34oVPN0d1IMhl4Fex+TlS BbfU28fD0Hkp5xkfned/+6sJYQpMx2D1x9iH7UWu+favSva5Z9KlhegqJ+fJxdGalRcH2DuDAna JP9VZc8CV1QTa3hGJJ4xFcOHgACsBYogGJvNibluEEz57n3zzKfuGXyNn7bIXYyBJoNAJAzrGmt snYnNfPgcuUHwQ== X-Received: by 2002:a05:6808:d51:b0:47c:b363:63a1 with SMTP id 5614622812f47-482e5943798mr14814190b6e.31.1779251868641; Tue, 19 May 2026 21:37:48 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:23 -0600 Subject: [PATCH v10 29/45] 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-v10-29-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::230; envelope-from=james.hilliard1@gmail.com; helo=mail-oi1-x230.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: 1779251965557154100 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/helper.h | 2 + target/mips/tcg/octeon_crypto.c | 369 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 371 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index 31363fb8dd..fb6dbf9fca 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -64,6 +64,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/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index 010baf3664..4438621da6 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -281,6 +281,375 @@ static void octeon_sha3_permute(MIPSOcteonCryptoState= *crypto) } } =20 +static inline uint32_t octeon_crypto_hi32(uint64_t value) +{ + return value >> 32; +} + +static inline uint32_t octeon_crypto_lo32(uint64_t value) +{ + return value; +} + +static inline uint64_t octeon_crypto_pack32(uint32_t hi, uint32_t lo) +{ + return ((uint64_t)hi << 32) | lo; +} + +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 uint32_t octeon_zuc_lfsr(const MIPSOcteonCryptoState *crypto, + unsigned int index) +{ + uint64_t pair =3D crypto->hsh_dat[index / 2]; + + return index & 1 ? octeon_crypto_lo32(pair) : octeon_crypto_hi32(pair); +} + +static void octeon_zuc_set_lfsr(MIPSOcteonCryptoState *crypto, + unsigned int index, uint32_t value) +{ + uint32_t hi =3D octeon_crypto_hi32(crypto->hsh_dat[index / 2]); + uint32_t lo =3D octeon_crypto_lo32(crypto->hsh_dat[index / 2]); + + value &=3D 0x7fffffffU; + if (index & 1) { + lo =3D value; + } else { + hi =3D value; + } + crypto->hsh_dat[index / 2] =3D octeon_zuc_pack_pair(hi, lo); +} + +static uint32_t octeon_zuc_fsm(const MIPSOcteonCryptoState *crypto, + unsigned int index) +{ + uint64_t pair =3D crypto->hsh_dat[8]; + + return index ? octeon_crypto_lo32(pair) : octeon_crypto_hi32(pair); +} + +static void octeon_zuc_set_fsm(MIPSOcteonCryptoState *crypto, + unsigned int index, uint32_t value) +{ + uint32_t hi =3D octeon_crypto_hi32(crypto->hsh_dat[8]); + uint32_t lo =3D octeon_crypto_lo32(crypto->hsh_dat[8]); + + if (index) { + lo =3D value; + crypto->hsh_iv[2] =3D value; + } else { + hi =3D value; + crypto->hsh_iv[1] =3D value; + } + crypto->hsh_dat[8] =3D octeon_zuc_pack_pair(hi, lo); +} + +static uint32_t octeon_zuc_window(const MIPSOcteonCryptoState *crypto, + unsigned int index) +{ + switch (index) { + case 0: + return octeon_crypto_hi32(crypto->hsh_dat[9]); + case 1: + return octeon_crypto_lo32(crypto->hsh_dat[9]); + case 2: + return crypto->hsh_dat[10]; + default: + g_assert_not_reached(); + } +} + +static void octeon_zuc_set_window(MIPSOcteonCryptoState *crypto, + unsigned int index, uint32_t value) +{ + switch (index) { + case 0: + crypto->hsh_dat[9] =3D + octeon_zuc_pack_pair(value, octeon_crypto_lo32(crypto->hsh_dat= [9])); + crypto->hsh_iv[0] =3D crypto->hsh_dat[9]; + return; + case 1: + crypto->hsh_dat[9] =3D + octeon_zuc_pack_pair(octeon_crypto_hi32(crypto->hsh_dat[9]), v= alue); + crypto->hsh_iv[0] =3D crypto->hsh_dat[9]; + return; + case 2: + crypto->hsh_dat[10] =3D value; + return; + default: + g_assert_not_reached(); + } +} + +static uint32_t octeon_zuc_tresult(const MIPSOcteonCryptoState *crypto) +{ + return crypto->hsh_dat[11]; +} + +static void octeon_zuc_set_tresult(MIPSOcteonCryptoState *crypto, + uint32_t value) +{ + crypto->hsh_dat[11] =3D value; + crypto->hsh_iv[3] =3D value; +} + +static void octeon_zuc_bit_reorganization(const MIPSOcteonCryptoState *cry= pto, + uint32_t x[4]) +{ + x[0] =3D ((octeon_zuc_lfsr(crypto, 15) & 0x7fff8000U) << 1) | + (octeon_zuc_lfsr(crypto, 14) & 0xffffU); + x[1] =3D ((octeon_zuc_lfsr(crypto, 11) & 0xffffU) << 16) | + (octeon_zuc_lfsr(crypto, 9) >> 15); + x[2] =3D ((octeon_zuc_lfsr(crypto, 7) & 0xffffU) << 16) | + (octeon_zuc_lfsr(crypto, 5) >> 15); + x[3] =3D ((octeon_zuc_lfsr(crypto, 2) & 0xffffU) << 16) | + (octeon_zuc_lfsr(crypto, 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 fsm0 =3D octeon_zuc_fsm(crypto, 0); + uint32_t fsm1 =3D octeon_zuc_fsm(crypto, 1); + uint32_t w =3D (x[0] ^ fsm0) + fsm1; + uint32_t w1 =3D fsm0 + x[1]; + uint32_t w2 =3D fsm1 ^ x[2]; + uint32_t u =3D octeon_zuc_l1((w1 << 16) | (w2 >> 16)); + uint32_t v =3D octeon_zuc_l2((w2 << 16) | (w1 >> 16)); + + octeon_zuc_set_fsm(crypto, 0, + 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])); + octeon_zuc_set_fsm(crypto, 1, + 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 lfsr[16]; + uint32_t f; + + for (int i =3D 0; i < 16; i++) { + lfsr[i] =3D octeon_zuc_lfsr(crypto, i); + } + + f =3D lfsr[0]; + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(lfsr[0], 8)); + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(lfsr[4], 20)); + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(lfsr[10], 21)); + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(lfsr[13], 17)); + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(lfsr[15], 15)); + if (init_mode) { + f =3D octeon_zuc_addm(f, u); + } + + for (int i =3D 0; i < 15; i++) { + octeon_zuc_set_lfsr(crypto, i, lfsr[i + 1]); + } + octeon_zuc_set_lfsr(crypto, 15, 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) +{ + octeon_zuc_set_window(crypto, 0, octeon_zuc_generate_word(crypto)); + octeon_zuc_set_window(crypto, 1, octeon_zuc_generate_word(crypto)); + octeon_zuc_set_window(crypto, 2, 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 octeon_zuc_window(crypto, 0); + } + if (bit < 32) { + return (octeon_zuc_window(crypto, 0) << bit) | + (octeon_zuc_window(crypto, 1) >> (32 - bit)); + } + if (bit =3D=3D 32) { + return octeon_zuc_window(crypto, 1); + } + return (octeon_zuc_window(crypto, 1) << (bit - 32)) | + (octeon_zuc_window(crypto, 2) >> (64 - bit)); +} + +static void octeon_zuc_advance_window(MIPSOcteonCryptoState *crypto) +{ + octeon_zuc_set_window(crypto, 0, octeon_zuc_window(crypto, 2)); + octeon_zuc_set_window(crypto, 1, octeon_zuc_generate_word(crypto)); + octeon_zuc_set_window(crypto, 2, octeon_zuc_generate_word(crypto)); +} + +static void octeon_zuc_start(MIPSOcteonCryptoState *crypto, uint64_t data) +{ + uint32_t x[4]; + + for (int i =3D 0; i < 14; i++) { + octeon_zuc_set_lfsr(crypto, i, octeon_zuc_lfsr(crypto, i)); + } + octeon_zuc_set_lfsr(crypto, 14, data >> 32); + octeon_zuc_set_lfsr(crypto, 15, data); + octeon_zuc_set_fsm(crypto, 0, 0); + octeon_zuc_set_fsm(crypto, 1, 0); + octeon_zuc_set_tresult(crypto, 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 octeon_zuc_tresult(crypto); + + for (unsigned int bit =3D 0; bit < 64; bit++) { + if ((data >> (63 - bit)) & 1) { + t ^=3D octeon_zuc_window_word(crypto, bit); + } + } + octeon_zuc_set_tresult(crypto, t); + octeon_zuc_advance_window(crypto); +} + +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); +} + uint64_t helper_octeon_cp2_mf_crc_iv_reflect(CPUMIPSState *env) { return octeon_crc_reflect32_by_byte(env->octeon_crypto.crc_iv); --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779252134; cv=none; d=zohomail.com; s=zohoarc; b=k5EmfroxO61VP4M5sA8T9UHOzs+ZPVScX5Ce92H/MGDwhcMkO6/hJQwUpRYPL9+JY0+ehvxA+QRhu1xF19uFJyMwwIAdPUL4V1mHLwwU23RyJK68vuXxXc8u4mWUV5PMHeXeLUK+1yiERPaFRc7BwGoZhfckFKA0xkzL4y6WSeY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252134; 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=pf3wFXYG9CV+SZ690fGHXtOpLrmy5SeQSzIK89PpXsM=; b=lH3RfK7+KbnasMOc2kR1T9HhIzT8VEdV2/rfcGoXYhkMnaqxRti2qIlN8j4mG/rpHINVhSlopgCbrnno754sE9uCznaDJUOSVcRRU/xzHOPo6GuV9vxfpakKdh0H/fh2qvWltQJ2fv7c2sOgnKbgRI33Yjn5c8VyAHSNkYdEYv0= 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 17792521340286.677823221200583; Tue, 19 May 2026 21:42:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgu-0001G0-4W; Wed, 20 May 2026 00:37: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 1wPYgs-0001Fb-Bo for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:54 -0400 Received: from mail-ot1-x32a.google.com ([2607:f8b0:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgp-0003sC-LC for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:53 -0400 Received: by mail-ot1-x32a.google.com with SMTP id 46e09a7af769-7dca5f64e86so3705709a34.0 for ; Tue, 19 May 2026 21:37:51 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251870; x=1779856670; 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=pf3wFXYG9CV+SZ690fGHXtOpLrmy5SeQSzIK89PpXsM=; b=S0EyIqxLF2JO7J5vRSenEDgDLcma7K8ooUoEzzuaXChv10d5eSHKpe+TPe9A2etnwt olb+FzbmSE5Y7n0TxtHOBnALLvT0pMjLizlB9/7+2mbVrZQGfyvGpS2JZDm8wV29BnUz 2zx42Ij0DMCDvLinFxu+79I4QADFiLnEBjewSghwhx+lR4i5ugQuLXM8lZ686J14waYm Kp5NfX3SN8EUhu8dJ5wqvDKIqmVsA0suQ2vFycuYn9LABg2H8Bb/cUDcCbu7CoIuFugD tNss66bViC6WiRfOC8CbAu68zDPz+lI3kI0BMVG8R+3f6AybjQJu0FMEnyGuHbLn21Th Yn4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251870; x=1779856670; 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=pf3wFXYG9CV+SZ690fGHXtOpLrmy5SeQSzIK89PpXsM=; b=czfivf/wssOr+BXnQ/q4gmXaeoCGyyI3COCdFVY8e3+Mma+Q6O7RNK38emwDobin// 2EAwZxKBxRgDbVnhCLJdiGa1UWbgUIxCj1XB/Ooot3HNy/aUesliZSHBPO8w1hGOany8 arQ87YqjratNoZoWa0flhmUd2nmHTMvMfQrK2tfC9XgWGuQ6jmtCdQ9NbFEWBcpupqPP 9kV1wtKoj2Z19PVZQerRjZA7RTs0PR3l/cbe0D6MK5w+Z0qXd3BaigCeqnnxuNIdr+k9 20eOKYNlSqz5WR5gGLAvP7sgGbO3SA4nRP1PAc8jY/3j9YuwWB1Ueoo8BHYrqeS10nVM 9BQA== X-Gm-Message-State: AOJu0Yxqr3tndx4bD8VJ5eljRkQTp7vTHgbCWUmyF5RcoAtyIhVf6JJB 39GC18i8bHWiXscmxsjbjCAifz6NAJHYRmW1CcCgv+74xb+xC3TRr4Wn X-Gm-Gg: Acq92OGfAaCqogb9rNKfJjbZjX1TsncbtT7c47FZqV/xhmWbXZyo0FGpyLmjU35A7Nu nCq5UJWHkdbg4MKxHSM9XYVUVEemjp/FjyYf0/nEQgXS+exOisqi34FTX9EXRUj34TmK0+8PIkA 0hvfPO/3yGW+OAGA1MuEQ36P9rX7jRP8iez9bcWga4qJb2U2OXiGQ1k1z+GTtpH6t/L0Q/Tx623 qW3VHh4rw6/51FVPViR5KNzwkLJDvkrhcbioz6K/zxEvS/8eQfD3ot8X+IMhu8oPOYOWN8lfhjJ qMrzp2znjNOvTEV6YJXPJF/C08IuuhAEkleWDxGIdkwENCw2+P+3woMEq2rtsP2e2S1smNn/AM0 NZD1569J7u2Wa3kyqHqWN98Ab1pNcKNynxNt0xsYl9C4WTcsgpa40kc+6SVz1VvyIcGfffSkeWs rj1OdNWgYUpSSqrn2PsPRcoQKm4h+FixnfaodVC3Vu8ZnuTziI/VVkC9gmjDWHi2icfj6RWDTRh vmtnA1hi62MRbKl3rHrgc1OdMEI6CVwz4ksFwP3X1/oRi0ZNXH2aaWHU9qfcOEyKV7O X-Received: by 2002:a05:6830:3591:b0:7d7:e59c:80e6 with SMTP id 46e09a7af769-7e4f2b24530mr15253436a34.12.1779251870258; Tue, 19 May 2026 21:37:50 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:24 -0600 Subject: [PATCH v10 30/45] 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-v10-30-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::32a; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x32a.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: 1779252134583158500 Add helper support for the Octeon SNOW3G START and MORE selectors. The engine state and result are represented through the architectural HSH IV and DAT register banks that SNOW3G aliases for save and restore. Signed-off-by: James Hilliard --- Changes v9 -> v10: - Drop non-architectural SNOW3G shadow state and shared-mode tracking. - Use the architectural HSH IV/DAT register banks for aliased state. 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 | 275 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 277 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index fb6dbf9fca..7fa4014fce 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -66,6 +66,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 4438621da6..199893c11a 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -640,6 +640,281 @@ static void octeon_zuc_more(MIPSOcteonCryptoState *cr= ypto, uint64_t data) octeon_zuc_advance_window(crypto); } =20 +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_lfsr(const MIPSOcteonCryptoState *crypto, + unsigned int index) +{ + uint64_t pair =3D crypto->hsh_dat[index / 2]; + + return index & 1 ? octeon_crypto_lo32(pair) : octeon_crypto_hi32(pair); +} + +static void octeon_snow3g_set_lfsr(MIPSOcteonCryptoState *crypto, + unsigned int index, uint32_t value) +{ + uint32_t hi =3D octeon_crypto_hi32(crypto->hsh_dat[index / 2]); + uint32_t lo =3D octeon_crypto_lo32(crypto->hsh_dat[index / 2]); + + if (index & 1) { + lo =3D value; + } else { + hi =3D value; + } + crypto->hsh_dat[index / 2] =3D octeon_crypto_pack32(hi, lo); +} + +static uint32_t octeon_snow3g_fsm(const MIPSOcteonCryptoState *crypto, + unsigned int index) +{ + return crypto->hsh_iv[1 + index]; +} + +static void octeon_snow3g_set_fsm(MIPSOcteonCryptoState *crypto, + unsigned int index, uint32_t value) +{ + crypto->hsh_iv[1 + index] =3D value; +} + +static uint32_t octeon_snow3g_clock_fsm(MIPSOcteonCryptoState *crypto) +{ + uint32_t fsm0 =3D octeon_snow3g_fsm(crypto, 0); + uint32_t fsm1 =3D octeon_snow3g_fsm(crypto, 1); + uint32_t fsm2 =3D octeon_snow3g_fsm(crypto, 2); + uint32_t f =3D (uint32_t)(octeon_snow3g_lfsr(crypto, 15) + fsm0) ^ fsm= 1; + uint32_t r =3D (uint32_t)(fsm1 + (fsm2 ^ octeon_snow3g_lfsr(crypto, 5)= )); + + octeon_snow3g_set_fsm(crypto, 2, octeon_snow3g_s2(fsm1)); + octeon_snow3g_set_fsm(crypto, 1, octeon_snow3g_s1(fsm0)); + octeon_snow3g_set_fsm(crypto, 0, r); + return f; +} + +static void octeon_snow3g_clock_lfsr(MIPSOcteonCryptoState *crypto, + bool init_mode, uint32_t f) +{ + uint32_t lfsr[16]; + uint32_t s0; + uint32_t s11; + uint32_t v; + int i; + + for (i =3D 0; i < 16; i++) { + lfsr[i] =3D octeon_snow3g_lfsr(crypto, i); + } + + s0 =3D lfsr[0]; + s11 =3D lfsr[11]; + v =3D (s0 << 8) ^ octeon_snow3g_mulalpha(s0 >> 24) ^ + lfsr[2] ^ (s11 >> 8) ^ octeon_snow3g_divalpha((uint8_t)s11); + + if (init_mode) { + v ^=3D f; + } + + for (i =3D 0; i < 15; i++) { + octeon_snow3g_set_lfsr(crypto, i, lfsr[i + 1]); + } + octeon_snow3g_set_lfsr(crypto, 15, v); +} + +static uint32_t octeon_snow3g_generate_word(MIPSOcteonCryptoState *crypto) +{ + uint32_t f =3D octeon_snow3g_clock_fsm(crypto); + uint32_t z =3D f ^ octeon_snow3g_lfsr(crypto, 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->hsh_iv[0] =3D octeon_crypto_pack32(z0, z1); +} + +static void octeon_snow3g_start(MIPSOcteonCryptoState *crypto, uint64_t da= ta) +{ + int i; + + for (i =3D 0; i < 14; i++) { + octeon_snow3g_set_lfsr(crypto, i, octeon_snow3g_lfsr(crypto, i)); + } + octeon_snow3g_set_lfsr(crypto, 14, data >> 32); + octeon_snow3g_set_lfsr(crypto, 15, data); + for (i =3D 0; i < 3; i++) { + octeon_snow3g_set_fsm(crypto, i, 0); + } + + 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_snow3g_queue_result(crypto); +} + +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:35:06 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=1779251924; cv=none; d=zohomail.com; s=zohoarc; b=N6+JGFB6iabhtd1XfW5Lbg5ZrthXEtO231p3Z6sswaF14nU8naBST9QShNptV+PxGd57IKsp+G0A1gj63yzDraElzljZ93q13lXlrSS27QftMP8kRhoFX7v8kr/voUXoNi0f9WAGggIAdvJIE7U8MkLW2ilghtHmD6LihMlMyew= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251924; 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=z5c2GfZvhYAkQR0XFUCFYjnXKW2wx/zZbOkbepyTfX0=; b=jWAjOjhKALJH5cehaHi/zgaZ8gPx6ihm34HSxIvQK8F1VS/8/fc009+jzQIcmndLDMQWnE99ArmbDr4mM8jRTDzoiTKqYaLrXB0H7f3xEFWBcDIWpTM7OCU4gXJEKg9ThqBNoT9y+ZL/gkg0jp4kq58GZEThrr5Id3HW8WTtIOo= 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 1779251924216242.12511406079955; Tue, 19 May 2026 21:38:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgu-0001GC-Mx; Wed, 20 May 2026 00:37: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 1wPYgt-0001Fq-0Q for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:55 -0400 Received: from mail-ot1-x332.google.com ([2607:f8b0:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgq-0003sN-QM for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:54 -0400 Received: by mail-ot1-x332.google.com with SMTP id 46e09a7af769-7de7dc85b74so4360814a34.2 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251871; x=1779856671; 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=z5c2GfZvhYAkQR0XFUCFYjnXKW2wx/zZbOkbepyTfX0=; b=A37g8/TJ6brY14RmmOLIGWD3SAT2PmcNZQIx1YZnvtFNiiN8khhycrhx/vyRb87KQP hpJACcHNbGxVONAAN1PzCIPhJgiMaTgdrRcRHyafpqBnozZ+stxP9XFGCI0ktVb6eeja BuXhiQoDeC+SB3dghN8HYvlpe4TQbp90hE9yS890yQteeDHyvAV2VWJR3gqGJNlpNMc/ bhGgaBn8Nmw7+PKKRfZAcwZTOmGj4wOFo59XJsDZuxz28qVnKEQnCnP0rvzPtw9DL7cX bMQZCUp81Bl2um8pQKwh/mda6M1Nj64uAiVumgE3jgpLX1nfCkQNbuAuYWg76bEJ3B7B eKWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251871; x=1779856671; 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=z5c2GfZvhYAkQR0XFUCFYjnXKW2wx/zZbOkbepyTfX0=; b=iMrsycgF3VSYDvwo/d+mm4NFkEkTOLDplhgZjQw92YrAln02osudm+vtI61O01lQeX wEmObbsbFFiVmXzepbwux1zTPYEmMARXmFafN6s53Hfz7M7L1P7TSYVfHlZc8PWVOqZw FWi15nDTIQS7DYWnFWUsAZHedgKtrYo8ymLmpbENVH9eQ4bERI/MEsI8dDoby6/VhNPq IVZ6jr/qf22QVuUH8D7WTItFHWo7f27cSVG9CyVDCf9ZBbFK+etMVynSBNIDtKodkT/c pGY5w8WywEVCaJOE/DPJGPMYKdheCTRtUC5kRyTyMuCBYaPv72glZo1uLBBOB817CSHj xJtA== X-Gm-Message-State: AOJu0YwJtHtAxDCD6gvi1dHoV76YAhLWuqvw+AyagTatC1UcK4Q1lv+U +YETWE/bdHffny5fCwSv38L3Bsyh/mVt6ipT5X0Tbc/1ED/Qxp6pkU4p X-Gm-Gg: Acq92OFMjsl6jpHxsN+s+99sQmRgtN4WCqtPRr8PMpkZw7GeNZmRCRau8zcveEgl3// KZAi6x9hGcb5pqcyCkEgv5wnWYSkKJ3/oGNvjKt5wPWw20rN/7wX7PPeEZsZBcUEd26En9tXLlv 1tFLnUjXOXPP9scgM3Lye2ZQb5zATtKKrl3+5+zSLvy28eqpIWCBtRWy6Ra9htbRRfwkV4NMjuO lju2uApyMU4cimNTjaEdwGM7XsZs6GCjAnPWhxeut4hxMmdNSkIC+MQ/WdQmrDz2ITKOHG44kRW nbnGT9mEB9Wukxq790975+n6k8dEuerWZjf8vxHs3gbXrRn5Ts+okUYIwj1iswtTty0VO2/oReh 1N2BxotY7vsqT4zIC8MtmJixQNbi0xXt1TtT+zaI/WKD4Zt19MTYrUFb9uHok3VZVlgWwb95Jyd a7oGPaCUEPxBE1sJDcFMKNUhq15whXtVFQpLBF/9jpOX0r9Nsmc80Ch3FGmgHgzV8PKaggdgG+D eL6Ko1160xNG8C3cozQhET5rT6kmYS+7x6GQHgf8UG0PhSvtkg/5YOwQpOXAfXK2gfR X-Received: by 2002:a05:6830:6a15:b0:7d9:b338:a695 with SMTP id 46e09a7af769-7e4ea028c6dmr14478480a34.5.1779251871620; Tue, 19 May 2026 21:37:51 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:25 -0600 Subject: [PATCH v10 31/45] 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-v10-31-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::332; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x332.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: 1779251926245154100 Add helper support for the Octeon AES operation selectors. Direct register-transfer selectors do not need helpers; the ECB/CBC encrypt and decrypt operations consume the AES input, key, IV, and key-length state. AESRESINP is modeled as one architectural register bank; operation helpers consume the current AESRESINP block and write the result back to the same bank. Signed-off-by: James Hilliard --- Changes v9 -> v10: - Drop the non-architectural AES input/result split. - Model AESRESINP as a single architectural input/result bank. 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/helper.h | 4 ++ target/mips/tcg/octeon_crypto.c | 145 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 149 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index 7fa4014fce..82b4a6b099 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -68,6 +68,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 199893c11a..a8f46cc398 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -904,6 +904,151 @@ static void octeon_snow3g_more(MIPSOcteonCryptoState = *crypto) octeon_snow3g_queue_result(crypto); } =20 +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_resinp, 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_resinp, 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_resinp, 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_resinp, out); + if (cbc) { + octeon_aes_store_block(crypto->aes_iv, next_iv); + } +} + +void helper_octeon_cp2_mt_aes_enc_cbc1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->aes_resinp[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_resinp[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_resinp[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_resinp[1] =3D value; + octeon_aes_decrypt_common(crypto, 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:35:06 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=1779251997; cv=none; d=zohomail.com; s=zohoarc; b=lxN0xSUFmI7u/CYwG4jge2OlDOx0/7sDnfHbK3K9XAfT0P45iTLXI+7h5DqBgl1Hy9/eIc6pkOkfyaNwmn+mO5Q299ttXGrqGe65LT9ivvrE8mvKYRi3SxiaSMSm1LasxwUwvnSyAt4UrrQuMprXYPN07ZX0Nde0ZC3tHHkXdu4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251997; 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=adxDqCX8lcphXMeBPC+oFyB+bKb8PFTNCjcyGapttAc=; b=SIhJqa7cAiJNuEYzxWO9GQtlXUzk1fdyVKdR5XYFhIf2eRu6XEA6cJTl0sF576kbD/CWsJybERlnrDRKDJ/qrei44YOcwOfVcNUfWuFHTN39dDR3o0EbuVeh+l7sB5UvsNm8orS5du801gluuaK4UmWffsHqCQ7kqTKhqxqYMD8= 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 1779251997593291.86872383305433; Tue, 19 May 2026 21:39:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgv-0001GQ-FG; Wed, 20 May 2026 00:37: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 1wPYgu-0001G1-5D for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:56 -0400 Received: from mail-ot1-x336.google.com ([2607:f8b0:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgs-0003sc-3J for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:55 -0400 Received: by mail-ot1-x336.google.com with SMTP id 46e09a7af769-7dbcb467f2bso4230801a34.3 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251873; x=1779856673; 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=adxDqCX8lcphXMeBPC+oFyB+bKb8PFTNCjcyGapttAc=; b=P1Ji88JaX3FaAsP22SeD9xaA/NCpFnjXYRc37CFQvEj9rhMGlkwS7JDiWemwR2dOYL xDgGYqmZvXAoatRf7XIWCJhfUSvn2PqKXnnIAgNNZfUpXL2juHONrlc1YM05OnlaE2nJ 9PcDwO9iW7P+9ekrjYA79k1PDCzXygolnW/c7UEwVU317FzA6e1lEqwzVC83WR6jynwD TpnWYq3JxKDLH+SUPU9mMaOd5TtSKx+HZQVrkUOzAuQzWzvPXVMmKoxroQX2ERscZ0UU 036+2O5Ag4cVPkVhOF78ny5sUNi3/r3Sosm7a9XVmTvp2++/d8CCe8/GlvBiMCSDt94J mYPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251873; x=1779856673; 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=adxDqCX8lcphXMeBPC+oFyB+bKb8PFTNCjcyGapttAc=; b=AfdTJBhBTHt/TAOFJt3+xc4kaSSfoFF9LVggY3M8XytRKfPyyOAMNsBzAoH2T1ht6o GtPYRKM1QkO30aS1u+QnEpETYZk/+8UG36oo5a6XAbyVZbUZ1wrEYoB45EUrEupTzHGp OTF07ATH984uglWRtpHrz5C7SpOLS8Kc3oYtOXhy5o6MuAWCztm8L5VsMGf9Q57964EW mt7h3qM5e/0fp1anpP175mlC7alxiCEVwS3cr4+8Vczu9oB/x4OBsAK3SDHgmkrLp92o zerX/tvTnbN2HylPumZoeq2T+6vJUkGy0viPnhhSnKonGDR70gE/i7CAW3MQ+JO8uDEv pTbQ== X-Gm-Message-State: AOJu0Yz4D0Mec4CxpW1H/bfmDLikTP19BgclpolbONkUA489dBTnQ3h3 6yg3S2GjidPNKgdIznaJTQWfNMY6xM+cw6qcJuQV4i38b2oa59jsBqmy X-Gm-Gg: Acq92OHghrLaE5Zw6+gxi2y8QCXR4ig4lmD3eKsnwg48Yi0SGjEnQO6OyMrxdSTVkNn JPEPsiub8ytpcMkWep607LkCNhxHi5kcCOQi5kDnug3NWfkjNYAWlNFoESJ6ef8lecR+uAZy6fF mbLr1Y3En+xwSEX1Xlm/RLVcajjujpUrQLUWKrpztXDB28F0PJOZBVBMLSIh/lAoUPbfpL5n2nH z6P0ysaqRv6TgLHYk4Kr2wsWuGE3SUhdzfaDUpy1YBKVHnetMpdJ99O+fxUAaupWUTyDYJOsP2V iE6M//XlOZWlUHTvsCOv4WJ9RB6wFmhPLoL5KrVFrQTwF1FIT9EcK5fmNzZu698Sn1AMnc5W3t7 IMrTFNfOIk42LSV7z0hlCEwlSmQXDEzbU0kHbKPW8mbQhTL1LaOuKxjOJnUyMyXO/eyV0CvxTub /BhxIVwA6DrEWQXyc/P5GAP3RVOtJdMq3VhEvZVgvhNiJAWw6RWm+5xWJwbwk5n0cIIlODkY7WW M6Bwnlo9nzfWmYunKsDXQYVxh5D/LmKsFjFlAdlyseh3p3DirlDHDxPidXaYC0PvvpD X-Received: by 2002:a05:6830:3910:b0:7d7:4fc9:5204 with SMTP id 46e09a7af769-7e4ea01a8bfmr15202728a34.2.1779251872682; Tue, 19 May 2026 21:37:52 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:26 -0600 Subject: [PATCH v10 32/45] 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-v10-32-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::336; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x336.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: 1779251999801158500 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 | 124 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 128 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index 82b4a6b099..9ac102895f 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -72,6 +72,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 a8f46cc398..250a494b51 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -1049,6 +1049,130 @@ void helper_octeon_cp2_mt_aes_dec1(CPUMIPSState *en= v, uint64_t value) octeon_aes_decrypt_common(crypto, false); } =20 +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_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_resinp, 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_resinp, out); + if (cbc) { + octeon_aes_store_block(crypto->aes_iv, encrypt ? out : next_iv); + } +} + +void helper_octeon_cp2_mt_sms4_enc_cbc1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->aes_resinp[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_resinp[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_resinp[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_resinp[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:35:06 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=1779251930; cv=none; d=zohomail.com; s=zohoarc; b=DAFJYFs003vAY75buHuoatdQ7uS3XlnFPMK/0rgBmUXPBotKvaxy2rqC/Z5U9lQifj4gSqcLpEEwhH8B6xpk0vcbiDy/nAJqYE9f5wPo1EYPbUuRI9oyhHt+oFTGlywurTVi573Dn1E3MWcgS9gzKTdrCkQ3CZr9oD08DgTVDyA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251930; 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=YGkMREpovA5ejOqORtg6PAp0FuWy5qxqo9ZMgTEzxZ4=; b=fv9f95qFOlCyoYoBu8ueOhcn67D2/gWuUM63O6Rdep4CxbhpreKHeRxEyvU8dmBno/9eVfbbKNPAi0iAhrQgcxXEYvN9lDwnYTFJSXzkjGSmgKvcyAm0FMA8YTBzroUuwbrw2JhpgBtMaynxWOk5IbGY675MTV8ZJclGddnn9Bo= 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 1779251930457793.6151556730887; Tue, 19 May 2026 21:38:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgz-0001Hk-1A; Wed, 20 May 2026 00:38: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 1wPYgw-0001H2-RX for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:58 -0400 Received: from mail-ot1-x330.google.com ([2607:f8b0:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgt-0003ss-84 for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:58 -0400 Received: by mail-ot1-x330.google.com with SMTP id 46e09a7af769-7de4a9cb8eeso4337473a34.0 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251874; x=1779856674; 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=YGkMREpovA5ejOqORtg6PAp0FuWy5qxqo9ZMgTEzxZ4=; b=EV2VrMFBVnLcsTf59PtzLav/6glQV3L4IeCR/u1w5fU7GZEa/By+yy92xpvEidi/H0 zXFYXcq+afDGEOt2TbkcH0tCMLeOugmTsnwpIwWY7V+AbeM1OywZlrhlZ5ZNpkQ+HCJZ 6lliN3p1Ze8xHvlhLdhaNQDFdvmKqhsyeMjOmX9oTSrwWulXhBl3WNFELSwfJBhEPAZm ELHzMss0ObCyY7AIFMDRwEbmWr9YLxCixwxZI8yEnzzTFxy6YcckLMg09kaub3E51CCc 60quWSqbd+L+UffpBhk4ijtBXepDeZlhRXqoWCYMf8VVmYenrmzeADgz+XDMrIo6UFQ0 WNKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251874; x=1779856674; 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=YGkMREpovA5ejOqORtg6PAp0FuWy5qxqo9ZMgTEzxZ4=; b=lR54Nwv0Ss7R5/R0sYkOOP8jze63eSl8asWXbZ8p5NOES8zjDEoiA78qI+Hr54xOJn axD9LVsaSFLUQysvRXHSWUaPi83aiJv9IUDgyL3sX+fzxWlPE3rehFfYajlIyEjBxhHf 4gCbHueyboS+dLrDkO4n17gHa71QuqARRNw2JsJ6dvqBVlrIceHRSuMr2GoO+O8TBMSH CQqJ7mYxktvm4CYEjyjCs+hjTm37ZWsoOOpphIjWIj/0rm/z1m4SBs3HORpTeCcB2D9N D4YCObJ5tFmlW+GC/6slSHfVc9HZGcWr4lBy6+W854qDLWz9KW13xu85VqK9XpZrcc18 uMtQ== X-Gm-Message-State: AOJu0Ywx/Mnoot2WJeA5PIPoRi/AyLcs7nAns72Jzz9AXAwBUKiqdfyo xV1zeV+/Sxu2V7fEBkC4wf22KnYiQ2hdEoYWbgMKi+vsSS2XIB/LsxWg X-Gm-Gg: Acq92OEjtcyNXEhc3AunWBKJNSfc9zk6fbKt0GYs1u/DGO1RgnfLvoxFeL3qnxek0T3 AjKuhKQtTD9ruDUkEytHSMgeGg7oLxBCqm1a2lgMUJXah46ooEonSWfvla96yS0x2iLezynivQ0 DcbJnRF8MnCBKMPoAivc+56CtIv35EyBL9TPHKkJZFvb3Z2TaTMUxvbJYmB+qdSS5gJmCvgIhkp O9BdsQaFIohWu9mEvVr6fmXFpC2dt4jmNzWWYhGirAXCWjP5OswEzlCBjGLzLdGUGqYbmDqs/Qy MoWD3/vvmEIb2sKGZ59dDImWPYmGLTC/OMMy3D4l2vqP3Av83BWUtX9dywNgdd2CfA8RmjQaFaL w/7xgPOaMckcUKHGwbF2kxT5IOV3StoZ1m8NqZV8NDLwppZbdjopOXUis/1vWjevCKbBB8cGazy +5u0+B/rb0X7pRQTx7QC4/9tITTCuQulQ4weqib3siwgdKOqmS4SArSA0mgNTJWjXow8Bcxx8KR 7LpbWrZRKrIlTDuTCQXiy4/dP2CGs+k4ZvtWOJb5zE86GEZXA9btuS03hJ9ZnatJqa+ X-Received: by 2002:a05:6830:6f8b:b0:7de:4f6b:9e10 with SMTP id 46e09a7af769-7e4de65bc6dmr15620774a34.0.1779251873598; Tue, 19 May 2026 21:37:53 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:27 -0600 Subject: [PATCH v10 33/45] 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-v10-33-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::330; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x330.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: 1779251934043154100 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. Only the operation selectors require helper code. Simple key, IV, and result register transfers are handled by direct selector decode. 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 | 458 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 464 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index 9ac102895f..035ba4087b 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -76,6 +76,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 250a494b51..41241a3bd7 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -1173,6 +1173,464 @@ void helper_octeon_cp2_mt_sms4_dec1(CPUMIPSState *e= nv, uint64_t value) octeon_sms4_crypt_common(crypto, false, false); } =20 +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; +} + +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_snow3g_start(CPUMIPSState *env, uint64_t value) { octeon_snow3g_start(&env->octeon_crypto, value); --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779252074; cv=none; d=zohomail.com; s=zohoarc; b=Brh6dccu4w8HetpQisahPfKy5Hc7zcFFCGWj+ZVq3IXB73PbO3gyaJfo3wGS04AkfPU/NzZNR6KtWpGqTDF8J3fmcW0nKhHBtfB3tqMb5TmfME1Yqx0la1o0tfkO12ov4WxM6VpuNPFJ+fFIQeuUWo7bhe8yNKtKojao8SO5NNk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252074; 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=z9S+OJEXc2KQy6QCa0/h9+7s7wjclowehzhr22+DbJ8=; b=TA//r18Rs09V5bZF+nAGW/U/YjL753Z5rAOST7QamgVU5BhpiBM6LjvosRfUkJppJgK80FO+p3LSsUNcm7bxbtdd3gSUFdRJSyMmqD1z+GgA964UWOgb2yjYhYPDxYrtEuscfcmA4pffAQnzRij1n35K4yT0pK2FqQWYog7z+cU= 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 1779252074268469.1016614264414; Tue, 19 May 2026 21:41:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYgy-0001HW-2A; Wed, 20 May 2026 00:38: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 1wPYgw-0001H3-Ip for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:58 -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 1wPYgu-0003ti-8y for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:58 -0400 Received: by mail-ot1-x331.google.com with SMTP id 46e09a7af769-7dea20cf21aso4329139a34.1 for ; Tue, 19 May 2026 21:37:55 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251875; x=1779856675; 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=z9S+OJEXc2KQy6QCa0/h9+7s7wjclowehzhr22+DbJ8=; b=YPv85Bv/LWfwQhNO62QiHX80oN/HbGu2E6SSrmqc5eGIf+q9uyV5Qy9Nr3L5LDvXeU pFpdPY11FS8NXgdyarxzfumpCCmtOlrq+jIm7R8UopeTKnyuYDKm2l/aANmOZDolgrWz CtAiAsfeZUhZsu2dAXUGX6vcU/SWATWvafTKPGzwn00tPaXPS3bv2xj23JtL66O6iosw RdU9W6Xhl/fV7LdpZ2vbe4wzTYgDA1s/vEmUBmKtWsG0MUiBAOOizO0344tYTRPWR95Z V5a9MhNLdMmVfu34fUhWCtTdz/6qwYI1KWb6sHtMZAf8uxxwWkhIB48DFudTiwpkXwNE v3cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251875; x=1779856675; 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=z9S+OJEXc2KQy6QCa0/h9+7s7wjclowehzhr22+DbJ8=; b=UeS0rFwWBn5G4mLpCWyk0hji/39b78GAPsBxLBDPEZ1kDVCMvSJ1Ij+CkP3mx739f/ P2MGDlIBkgrgMSNP/VtdP0FIvw5mIumqXuMJpPXjmtiXzaRWNH3uc0R0jxhy18RChjvt PqQkutaexoQKkZg55omBYUyVpHW4a/a2wV8ZZBYfazvHQxiv9tW18l2u3hX1gFkD+f4f 3F+lubfBh4d4BwSgeMiR0Yv7PRbK53UheGZt9I8xyh9SzbdzhsA8P6wEmy+ABQCyn8oU PhOB1vhCcTFBDi3sb+Pz25WGqVnsJlQ11V26XHkhK3v3ogK0BEVQgVcT7oVkh2fTNV0W m/PQ== X-Gm-Message-State: AOJu0Yz0N6xBzGl8l//t8XhDbn56iYQfoceYj0Oa+IRY5IC1lF1xh+aF yGsPv8JInqkYz34P0+y9Sqp2bY23GivDXrMPBUeTqV5BbUqDYE9s4OIT X-Gm-Gg: Acq92OGQ+x+z70qnh2PFDbCAf4aZfE9NKFYQABtU7TEWdW2P6yUzaANwdnX3uwQowAa YC+M7Ya6Oq791ojvyqihuUOoNJc8XzBJdd6WlaLcfJ+rTGsLThGT6069yCqEghaagcgTZzHA6KM YF2ccY2RIt/VYghW5usxUNltp9qaeaOT8A5tl8YCTRtfV7mxvh8i75qkx/vCWfEbXtC8yz52Qr1 5eVsUl1s1RqGxhxDdYA6vO3Tix8XNMQj02hISvfgYdqPwgG2s60PfjbD/26tn+pBLvU3tEMOPja E3z6seKSynGFrcrBBamUom/GP5M7/ScelCidCGWtLc0hta7lXTuPf2QCX0gz9JfwIY7w0VOrA9z yczJJcs4qtUhZh0JG0/4bLa9jKToNRGnAm3Xu5YNYOUpXIRwwi+TXD6RWP1cLkyGsxTa2skRGRC FB7n9NMp22Fdc20ekc30DIMg9EyLRd+L2Jsjg8ldyx9R7o2IU9mkGF0EZR/M/DJisGNi8uCTeb4 Bqn8/pzdpIs/eL9Nj6a5aNXsP37r26beeF+gFWpCzfRVC5pOpDFd8dmGOkh38Yesp0q X-Received: by 2002:a05:6830:3812:b0:7d7:eab6:fb23 with SMTP id 46e09a7af769-7e4f2bada38mr16962586a34.22.1779251874823; Tue, 19 May 2026 21:37:54 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:28 -0600 Subject: [PATCH v10 34/45] 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-v10-34-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779252075444154100 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 | 126 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 129 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index 035ba4087b..10f47d4fe0 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -82,6 +82,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 41241a3bd7..8613bdd6c8 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -1631,6 +1631,132 @@ void helper_octeon_cp2_mt_des3_dec(CPUMIPSState *en= v, uint64_t value) octeon_3des_crypt_common(&env->octeon_crypto, value, false, false); } =20 +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_resinp[0]; + uint64_t right =3D crypto->aes_resinp[1]; + + crypto->aes_resinp[0] =3D right ^ camellia_f(left, key); + crypto->aes_resinp[1] =3D left; +} + +static void octeon_camellia_fl_layer(MIPSOcteonCryptoState *crypto, + uint64_t key, bool inverse) +{ + uint64_t state =3D crypto->aes_resinp[inverse ? 1 : 0]; + + crypto->aes_resinp[inverse ? 1 : 0] =3D inverse ? + camellia_flinv(state, key) : + camellia_fl(state, key); +} + +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_snow3g_start(CPUMIPSState *env, uint64_t value) { octeon_snow3g_start(&env->octeon_crypto, value); --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779252095; cv=none; d=zohomail.com; s=zohoarc; b=DxkWurMN8S7HhN9RDVXqPHK4rHrxHEfo34DLzK/J/8SVM9qJ809CnNF5Q6BzJcnE1ikcJzkXP1lLNCNq+J5CRO84bLr6WwqB8LOQps3yBCSyuLZs8u8OB1URCqe8m2o1ARL4EWb15s4+r2zRUpVRkZtW5Hd+DMxfpm1ZMUOLeN0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252095; 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=LzsLE7V3yJR1YDCQoTm+nmXNU5W5m+tBzWuEu872kcw=; b=IX2GPatqZvXgp+zNKmPAXyP+jN/x4y/PaU1+7IqQ1ypfv3qv7RvZ95stdJcCFJJgpZmwRAsQW8OvCyCkBSEjdS0bFfrI7XUKgH2tb3Addz6bxQbp0AQMcRUOHLi/u2LGqFRuASEEZjzgNg2i+d8iSk/ZdX/9qGp2+IwYtNST6pM= 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 1779252095417731.1632836106395; Tue, 19 May 2026 21:41:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYh3-0001IO-UB; Wed, 20 May 2026 00:38: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 1wPYgy-0001HX-AZ for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:00 -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 1wPYgv-0003tr-4Z for qemu-devel@nongnu.org; Wed, 20 May 2026 00:37:59 -0400 Received: by mail-ot1-x331.google.com with SMTP id 46e09a7af769-7dcdaf06498so2937095a34.2 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251876; x=1779856676; 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=LzsLE7V3yJR1YDCQoTm+nmXNU5W5m+tBzWuEu872kcw=; b=kUPUWoejPAyuk1kaZ0J6i4t0lqI6KjJLkTVE90JC7O2H4BBSFRJsbsRfENom2GDfvm y5djYpEG+bWu2Y4ZaGiYSWB2XQHAAWJhrnd5fbWQmNQnxmM/ANLemx688zHlUFbY9Ubn 2L615YgmZKi+TWMuXF8xXgwO7OdCnoOMQiBcO2VhGUNX+Z6qRyzJLeBGwZNUOBzNCPrw hws0OwRDdCreSia6xxmTU8+7db0vBZryyBJ5twHuEqdxNKhN58LkiEN61Rw0PRE7ohmd Dhtr4qk2Jh3BkyNjvm9lvWRvrivdirTmaqJAJ4jF6qLKec9ehwKPmCqMNe/QMeb4uASk 68CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251876; x=1779856676; 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=LzsLE7V3yJR1YDCQoTm+nmXNU5W5m+tBzWuEu872kcw=; b=HN9NiU4AdCTneKmu4plZVbd1KwyOotrJquObWo2QMEld/KOCQgrcvZ5OWA897/WHV+ hCG/0BPdlQuM94s8hHJgd0dRxMkSCs/ME/nT+NIuE3NPxjE/7yM5FrEz06exxB9MGpsC 8vCKat2yOzX/osBFqLV/Oz3rWzrDMTFSf7XYL3Ephcip3f8i2p3WU2jiEj3f0zoJbkNA a10/Msdr2ys5VH53PTvQdUWB1dqew4jioI5LHGfQLag/z3CLQuI5Qln+qsHGN/FWfHJ7 RB7hA6C4VuIOFMrREH8L6NSGVmM1AY6edOGAAmLfRLbNDAyYxT53lDxdFS3lCx5l+IPm Oriw== X-Gm-Message-State: AOJu0YySP0G0SRBBfW2PVlhwtHZAeLxfeLw4AeIbkF4TD1LIxaW7y4zz ujfKoKTpT09oZdtwIewUKTNCe4I+Ds8X24T3mQGLkta5rIn+ErkvYUfxLFDnti1j X-Gm-Gg: Acq92OFTbHjTPpON+i+fUSJCnvtD1q2Maofrf2DZcAJ9KCC1rpRWCA1y2Y9jR2KbS6n s3mX3VL6dJVAUTbPsvRjSE86BOhRfoz85Am7+04rFQJHM7eWmlwv8Hmx7mOJaSt7Mawybarcxld 1mD2nCLuJ6iuD45kUS6eJrceL7ZowazDI1uBh1A7YmvZ+lB8qqtO7R2tcOhPI8YfjrjK+SYG+BI iQd4GdLh8YxuH/ZR2o6hg6Mdzj+5uoy3hbZqEcfYysy4p+17Iy6VILiCv4/NqtjQz2JLAeHwaNO Ow08QdYl8+7zYLIK1Gcevjjyzlzy1M1IgC343L7KbZjQGTL7nUuKKUGQ6ZC3boLxSmBrSV5gODt sLTt5nLG/MZniv89jGQbtgrZ5LpQfgsM3HKM2hgUXaaeAOLxMn5+mZC1z/0R/NQ3XpD3iv7JOgI PgtUZcxyEKZqVkYQ2xh5Ao0NEsEtDhvEEYb9i613gDPizGvP4tT6tRr6BWib0CYSAVT8yCMzbvY C85MKKAGfed72qLRytSemcTOmBmXIVq2RiRPh/uI4Nv5lffUaCd4IXsb+OZ8t0tgOSM X-Received: by 2002:a05:6830:8289:b0:7dc:3db6:eef with SMTP id 46e09a7af769-7e4ea031b66mr14491409a34.2.1779251875872; Tue, 19 May 2026 21:37:55 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:29 -0600 Subject: [PATCH v10 35/45] 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-v10-35-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779252096269158500 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 aliased readback and write paths centralized so selector decode can route register accesses through these helpers when side effects are required. Signed-off-by: James Hilliard --- Changes v9 -> v10: - Remove references to shared-mode tracking; aliased state is kept in the architectural HSH register banks. 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 | 486 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 539 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index 10f47d4fe0..436a61b2d1 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_dat0, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat1, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat2, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat3, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat4, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat5, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat6, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat7, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat8, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat9, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat10, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat11, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat12, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat13, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat14, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_dat15, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_iv0, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_iv1, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_iv2, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_iv3, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_iv4, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_iv5, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_iv6, i64, env) +DEF_HELPER_1(octeon_cp2_mf_hsh_iv7, 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) @@ -85,6 +109,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_dat0, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat2, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat3, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat4, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat5, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat6, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat7, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat8, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat9, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat10, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat11, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat12, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat13, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat14, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_dat15, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_iv0, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_iv1, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_iv2, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_iv3, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_iv4, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_iv5, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_iv6, void, env, i64) +DEF_HELPER_2(octeon_cp2_mt_hsh_iv7, 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 8613bdd6c8..aea9a24f0c 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -168,6 +168,368 @@ static void octeon_gfm_mul_reflect(MIPSOcteonCryptoSt= ate *crypto) crypto->gfm_reflect_resinp[1] =3D revbit64(out[1]); } =20 +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_dat[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_iv[0]; + b =3D crypto->hsh_iv[1]; + c =3D crypto->hsh_iv[2]; + d =3D crypto->hsh_iv[3]; + e =3D crypto->hsh_iv[4]; + f =3D crypto->hsh_iv[5]; + g =3D crypto->hsh_iv[6]; + h =3D crypto->hsh_iv[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_iv[0] +=3D a; + crypto->hsh_iv[1] +=3D b; + crypto->hsh_iv[2] +=3D c; + crypto->hsh_iv[3] +=3D d; + crypto->hsh_iv[4] +=3D e; + crypto->hsh_iv[5] +=3D f; + crypto->hsh_iv[6] +=3D g; + crypto->hsh_iv[7] +=3D h; +} + static const uint64_t octeon_sha3_round_constants[24] =3D { 0x0000000000000001ULL, 0x0000000000008082ULL, 0x800000000000808aULL, 0x8000000080008000ULL, @@ -1778,6 +2140,130 @@ void helper_octeon_cp2_mt_zuc_more(CPUMIPSState *en= v, uint64_t value) octeon_zuc_more(&env->octeon_crypto, value); } =20 +#define OCTEON_HSH_MF_DAT(N) \ +uint64_t helper_octeon_cp2_mf_hsh_dat ## N(CPUMIPSState *env) \ +{ \ + return env->octeon_crypto.hsh_dat[N]; \ +} +OCTEON_HSH_MF_DAT(0) +OCTEON_HSH_MF_DAT(1) +OCTEON_HSH_MF_DAT(2) +OCTEON_HSH_MF_DAT(3) +OCTEON_HSH_MF_DAT(4) +OCTEON_HSH_MF_DAT(5) +OCTEON_HSH_MF_DAT(6) +OCTEON_HSH_MF_DAT(7) +OCTEON_HSH_MF_DAT(8) +OCTEON_HSH_MF_DAT(9) +OCTEON_HSH_MF_DAT(10) +OCTEON_HSH_MF_DAT(11) +OCTEON_HSH_MF_DAT(12) +OCTEON_HSH_MF_DAT(13) +OCTEON_HSH_MF_DAT(14) +OCTEON_HSH_MF_DAT(15) +#undef OCTEON_HSH_MF_DAT + +#define OCTEON_HSH_MF_IV(N) \ +uint64_t helper_octeon_cp2_mf_hsh_iv ## N(CPUMIPSState *env) \ +{ \ + return env->octeon_crypto.hsh_iv[N]; \ +} +OCTEON_HSH_MF_IV(0) +OCTEON_HSH_MF_IV(1) +OCTEON_HSH_MF_IV(2) +OCTEON_HSH_MF_IV(3) +OCTEON_HSH_MF_IV(4) +OCTEON_HSH_MF_IV(5) +OCTEON_HSH_MF_IV(6) +OCTEON_HSH_MF_IV(7) +#undef OCTEON_HSH_MF_IV + +static void octeon_hsh_mt_dat(MIPSOcteonCryptoState *crypto, + unsigned int index, uint64_t value) +{ + crypto->hsh_dat[index] =3D value; + if (index =3D=3D 15) { + octeon_sha512_transform(crypto); + } +} + +static void octeon_hsh_mt_iv(MIPSOcteonCryptoState *crypto, + unsigned int index, uint64_t value) +{ + crypto->hsh_iv[index] =3D value; +} + +#define OCTEON_HSH_MT_DAT(N) \ +void helper_octeon_cp2_mt_hsh_dat ## N(CPUMIPSState *env, uint64_t value) \ +{ \ + octeon_hsh_mt_dat(&env->octeon_crypto, N, value); \ +} +OCTEON_HSH_MT_DAT(0) +OCTEON_HSH_MT_DAT(1) +OCTEON_HSH_MT_DAT(2) +OCTEON_HSH_MT_DAT(3) +OCTEON_HSH_MT_DAT(4) +OCTEON_HSH_MT_DAT(5) +OCTEON_HSH_MT_DAT(6) +OCTEON_HSH_MT_DAT(7) +OCTEON_HSH_MT_DAT(8) +OCTEON_HSH_MT_DAT(9) +OCTEON_HSH_MT_DAT(10) +OCTEON_HSH_MT_DAT(11) +OCTEON_HSH_MT_DAT(12) +OCTEON_HSH_MT_DAT(13) +OCTEON_HSH_MT_DAT(14) +OCTEON_HSH_MT_DAT(15) +#undef OCTEON_HSH_MT_DAT + +#define OCTEON_HSH_MT_IV(N) \ +void helper_octeon_cp2_mt_hsh_iv ## N(CPUMIPSState *env, uint64_t value) \ +{ \ + octeon_hsh_mt_iv(&env->octeon_crypto, N, value); \ +} +OCTEON_HSH_MT_IV(0) +OCTEON_HSH_MT_IV(1) +OCTEON_HSH_MT_IV(2) +OCTEON_HSH_MT_IV(3) +OCTEON_HSH_MT_IV(4) +OCTEON_HSH_MT_IV(5) +OCTEON_HSH_MT_IV(6) +OCTEON_HSH_MT_IV(7) +#undef OCTEON_HSH_MT_IV + +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_dat[15] =3D value; + octeon_sha512_transform(crypto); +} + uint64_t helper_octeon_cp2_mf_crc_iv_reflect(CPUMIPSState *env) { return octeon_crc_reflect32_by_byte(env->octeon_crypto.crc_iv); --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779252096; cv=none; d=zohomail.com; s=zohoarc; b=hsbLGNibhCm4tkvDaUuhDl+Iyg9LvkObUbWtjrF6y+4m/xx1tBQ6kSIPI1f4UDkqNio5agdEXFPMb/g4OHzRKnKiKjPP4nLdV0ea3yKpz50adMAiKb3Ux8ifuV6vjVsslGBv9k1mYIdzsYicSW+YD7kjyjO4DSbOHHW1vldeNGA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252096; 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=TfJAMXA0mMIJvIAJY5Wemrlulr5Q7+++P95p/sSCnss=; b=IQPWnt4RmqVaIuKEk1bHGwB5GagzxeaDktMXtMaPar0mxVE7WkmyGjpAZr+jcv3uwGuwonQSwwbsgNfYIMYPaW5Nmq3OopdF/aMhopRDoWtc2xXdFOopWJhZiNz+Rql55CLQn/s9CXSxE6jF9IVY0MPM9+GAvrk+HwHfoHzH22Y= 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 1779252096940517.0738320177098; Tue, 19 May 2026 21:41:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYh7-0001JQ-Cl; Wed, 20 May 2026 00:38:09 -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 1wPYh4-0001Ie-El for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:06 -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 1wPYgw-0003u0-8z for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:03 -0400 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-7e36bb16a92so2625996a34.2 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251877; x=1779856677; 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=TfJAMXA0mMIJvIAJY5Wemrlulr5Q7+++P95p/sSCnss=; b=MB9VY+jScUdwqpkz+dkD/6DTmo9ZKj3uSfa0XG9MZ5ZzhUCTwv5qlyrkF4qT7KHYRZ cjx550QIz8WLMTaqEvm7x2EPhie/VMgq5RX5YmQe4wlSkGGCpICoHCVg9PtW1EyT3rhA aZF1cLQjVDfiON9xkkjmnhyOo0d1mWKnKwNt0u3ApHNP2VgKsJP64Ov5tE3L/xaepvIz JYqlCnBt4Wfz+Xt8lx+LV1O3QP5z2b5axMgymq9kC1YldXyHmb3//2b6QzeO6j8bnUfx u8fcYuJRZMhMB9z4Jm9pwWXSXiyy2GeFmsoaRaxArsh+CMKD256nvn9YMNDB0LJpGCfM 4UHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251877; x=1779856677; 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=TfJAMXA0mMIJvIAJY5Wemrlulr5Q7+++P95p/sSCnss=; b=tU0Ow855ncq8JyjQuA/aPrvYkB6QTvVp0V1fzdI3t8TA2b77IbVgVFf6XC6RlFU+vf hI0EuFXubC7lAlciKJlnVHJVsVlz649lFlCKFiEf2KAmlmC2HlFitFua08Jxn3+etz+z 0fh7AfVYhNfEu9bxXRX9akAqDBKJigdUL5jHrJohtCSeVJkg3lesUOTTw2ekrIOa1Ete N67b1cmkkAUrqYVn7bVzZK1GB8XL/eWwUfnxs5iy/MqvoUqKGTZL4Dcy64BCqsTiQV/b jgxVgxZMdG+G3Y3lEA/6lTXCRhvlfM4pIfpmvRKZbOweo8q+rrlOKtL+oYljohZzDiFX klVQ== X-Gm-Message-State: AOJu0YztE8RNQuhgWaPB0TBALPfLtsIcOpEYbIoqWMWS85xQ96tLs7oc bXR+m1Dd3s1se2hVqWGANBew5WuAi0WL8jWCNgaPaz9ULeOZoUPSEbAz X-Gm-Gg: Acq92OEpu6MfBZC8NOVGk/i9mhX1LW7z+YjIWly+Fj7nDyybwtikoRTE6SFRoPfr/pp WSbKTucumrJJbnf3rLvPPIVTSwA4iSfc+9LqWqNPGPS6wsJlZEj7Csnm8hyxGLYDsB3/bAKRs3B LW1a3iYZns3ARU1jcs3CCIVVbBE0mw+NMWmjYpIsoQprNvRZ3o9uiFjLeRO0poIjX+QXq5dCYre qGimavalIGSoe/whvQdaV4DrR3KjSKCk1j8W81+ewQofXmbEMen3yP5WqUyfdwmlU4zWxyEGtkR AXM3TwThEohxa0pXAZqLBq+f0zW5g4GZ10a5iKJIT5RB8WDl0mBEsn5zqmsoAolVAGfQyNEK/aV cg5ZW1Zxrk/tLIc3f8IkflFwTnqSf7KK4OlbxgGFpHULU16jrckRxiuYT1bnEMrKSyoY1PxaHFI yhepLJzCvoYdCj/EKyHO0qsCKZzjIL43S9ie9BiYLa4cM74xPMNBcZMqOIkmuExAKeuzWR6Il4K 1LTu+S2m/xyFG+RZ8+M9DV74WYK5kDo27Ub4ElyES/HbCAOgOhf8gbVBaVl8qHIwADw X-Received: by 2002:a05:6830:82e1:b0:7de:d056:19d with SMTP id 46e09a7af769-7e4de6588e0mr16282912a34.0.1779251876912; Tue, 19 May 2026 21:37:56 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:30 -0600 Subject: [PATCH v10 36/45] 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-v10-36-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779252098292158500 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 v9 -> v10: - Keep shared crypto helper routines in their final order after the COP2 helper split. 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 | 9 +- target/mips/helper.h | 9 + target/mips/internal.h | 3 + target/mips/system/machine.c | 71 ++- target/mips/tcg/octeon_crypto.c | 932 ++++++++++++++++++++++--------------= ---- target/mips/tcg/op_helper.c | 6 + target/mips/tcg/translate.c | 8 + 8 files changed, 673 insertions(+), 432 deletions(-) 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 890734556f..60adae1ec9 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 @@ -549,13 +550,17 @@ typedef struct MIPSOcteonCryptoState { uint64_t aes_resinp[2]; uint64_t aes_iv[2]; uint64_t aes_key[4]; + uint8_t aes_keylen; uint32_t crc_poly; uint32_t crc_iv; + uint8_t crc_len; uint64_t gfm_mul[2]; uint64_t gfm_resinp[2]; uint16_t gfm_poly; - uint8_t aes_keylen; - uint8_t crc_len; + uint64_t chord; + uint64_t llm_data[2]; + QTree *llm36; + QTree *llm64; } MIPSOcteonCryptoState; =20 typedef struct CPUArchState { diff --git a/target/mips/helper.h b/target/mips/helper.h index 436a61b2d1..68a99cfc11 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -138,6 +138,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) @@ -309,6 +317,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 2447915750..a90b391ba3 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 { @@ -296,13 +359,17 @@ static const VMStateDescription mips_vmstate_octeon_c= rypto =3D { VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_resinp, MIPSCPU, 2), VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_iv, MIPSCPU, 2), VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_key, MIPSCPU, 4), + VMSTATE_UINT8(env.octeon_crypto.aes_keylen, MIPSCPU), VMSTATE_UINT32(env.octeon_crypto.crc_poly, MIPSCPU), VMSTATE_UINT32(env.octeon_crypto.crc_iv, MIPSCPU), + VMSTATE_UINT8(env.octeon_crypto.crc_len, MIPSCPU), VMSTATE_UINT64_ARRAY(env.octeon_crypto.gfm_mul, MIPSCPU, 2), VMSTATE_UINT64_ARRAY(env.octeon_crypto.gfm_resinp, MIPSCPU, 2), VMSTATE_UINT16(env.octeon_crypto.gfm_poly, MIPSCPU), - VMSTATE_UINT8(env.octeon_crypto.aes_keylen, MIPSCPU), - VMSTATE_UINT8(env.octeon_crypto.crc_len, MIPSCPU), + VMSTATE_UINT64(env.octeon_crypto.chord, MIPSCPU), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.llm_data, MIPSCPU, 2), + 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 aea9a24f0c..79a4439f33 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -16,7 +16,58 @@ #include "qemu/bitops.h" #include "qemu/host-utils.h" =20 -#define OCTEON_SHA3_DAT15 15 +#define OCTEON_SHA3_DAT15 15 + +#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 uint32_t octeon_crypto_hi32(uint64_t value) +{ + return value >> 32; +} + +static inline uint32_t octeon_crypto_lo32(uint64_t value) +{ + return value; +} + +static inline uint64_t octeon_crypto_pack32(uint32_t hi, uint32_t lo) +{ + return ((uint64_t)hi << 32) | lo; +} =20 static inline uint32_t octeon_crc_reflect32_by_byte(uint32_t v) { @@ -78,96 +129,6 @@ static void octeon_crc_update_reflect(MIPSOcteonCryptoS= tate *crypto, octeon_crc_set_state_reflect(crypto, crc); } =20 -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; - - /* - * Keep the reflected-shift formulation used by Octeon software: the - * selector polynomial is pre-positioned at the top of the high word b= efore - * each carry reduction. - */ - 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; -} - -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); - - hi ^=3D 1ULL << bit; - lo ^=3D (uint64_t)poly << bit; - 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]) -{ - /* - * UIA2 uses the GFM datapath as a reflected 64-bit multiply in the low - * half of the 128-bit register pair. - */ - 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 in[2] =3D { - revbit64(crypto->gfm_reflect_resinp[0]), - revbit64(crypto->gfm_reflect_resinp[1]), - }; - uint64_t mul[2] =3D { - revbit64(crypto->gfm_reflect_mul[0]), - revbit64(crypto->gfm_reflect_mul[1]), - }; - uint64_t out[2]; - - octeon_gfm_mul(in, mul, crypto->gfm_poly, out); - crypto->gfm_reflect_resinp[0] =3D revbit64(out[0]); - crypto->gfm_reflect_resinp[1] =3D revbit64(out[1]); -} - static inline void octeon_hsh_load_reg_words_be(uint64_t reg, uint32_t *hi, uint32_t *l= o) { @@ -643,21 +604,6 @@ static void octeon_sha3_permute(MIPSOcteonCryptoState = *crypto) } } =20 -static inline uint32_t octeon_crypto_hi32(uint64_t value) -{ - return value >> 32; -} - -static inline uint32_t octeon_crypto_lo32(uint64_t value) -{ - return value; -} - -static inline uint64_t octeon_crypto_pack32(uint32_t hi, uint32_t lo) -{ - return ((uint64_t)hi << 32) | lo; -} - 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, @@ -1286,265 +1232,67 @@ static int octeon_aes_key_bits(const MIPSOcteonCry= ptoState *crypto) } } =20 -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) +static inline uint32_t octeon_sms4_t(uint32_t x) { - stq_be_p(block, regs[0]); - stq_be_p(block + 8, regs[1]); + x =3D sm4_subword(x); + return x ^ rol32(x, 2) ^ rol32(x, 10) ^ + rol32(x, 18) ^ rol32(x, 24); } =20 -static void octeon_aes_store_block(uint64_t regs[2], const uint8_t *block) +static inline uint32_t octeon_sms4_t_key(uint32_t x) { - regs[0] =3D ldq_be_p(block); - regs[1] =3D ldq_be_p(block + 8); + x =3D sm4_subword(x); + return x ^ rol32(x, 13) ^ rol32(x, 23); } =20 -static void octeon_aes_encrypt_common(MIPSOcteonCryptoState *crypto, bool = cbc) +static void octeon_sms4_expand_key(const uint8_t *key, uint32_t round_keys= [32]) { - 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_resinp, in); - if (cbc) { - int i; + static const uint32_t fk[4] =3D { + 0xa3b1bac6U, 0x56aa3350U, 0x677d9197U, 0xb27022dcU, + }; + uint32_t k[36]; =20 - octeon_aes_load_block(crypto->aes_iv, iv); - for (i =3D 0; i < sizeof(in); i++) { - in[i] ^=3D iv[i]; - } + for (int i =3D 0; i < 4; i++) { + k[i] =3D ldl_be_p(key + i * 4) ^ fk[i]; } - - AES_set_encrypt_key(raw_key, bits, &key); - AES_encrypt(in, out, &key); - octeon_aes_store_block(crypto->aes_resinp, out); - if (cbc) { - octeon_aes_store_block(crypto->aes_iv, out); + 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]; } } =20 -static void octeon_aes_decrypt_common(MIPSOcteonCryptoState *crypto, bool = cbc) +static void octeon_sms4_crypt_block(const uint8_t *in, uint8_t *out, + const uint32_t round_keys[32], + bool encrypt) { - 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_resinp, in); - if (cbc) { - memcpy(next_iv, in, sizeof(next_iv)); - octeon_aes_load_block(crypto->aes_iv, iv); - } + uint32_t x[36]; =20 - 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]; - } + 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]; =20 - octeon_aes_store_block(crypto->aes_resinp, out); - if (cbc) { - octeon_aes_store_block(crypto->aes_iv, next_iv); + 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]); } =20 -void helper_octeon_cp2_mt_aes_enc_cbc1(CPUMIPSState *env, uint64_t value) -{ - MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; - - crypto->aes_resinp[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_resinp[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_resinp[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_resinp[1] =3D value; - octeon_aes_decrypt_common(crypto, false); -} - -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_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_resinp, 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_resinp, out); - if (cbc) { - octeon_aes_store_block(crypto->aes_iv, encrypt ? out : next_iv); - } -} - -void helper_octeon_cp2_mt_sms4_enc_cbc1(CPUMIPSState *env, uint64_t value) -{ - MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; - - crypto->aes_resinp[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_resinp[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_resinp[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_resinp[1] =3D value; - octeon_sms4_crypt_common(crypto, false, false); -} - -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_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, +}; =20 static const uint8_t octeon_des_fp[64] =3D { 40, 8, 48, 16, 56, 24, 64, 32, @@ -1963,34 +1711,29 @@ static void octeon_kasumi_crypt_common(MIPSOcteonCr= yptoState *crypto, crypto->des3_result =3D block; } =20 -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) +static void octeon_aes_load_key(const MIPSOcteonCryptoState *crypto, + uint8_t *key, size_t keylen) { - octeon_kasumi_crypt_common(&env->octeon_crypto, value, false); + 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]); + } } =20 -void helper_octeon_cp2_mt_des3_dec_cbc(CPUMIPSState *env, uint64_t value) +static void octeon_aes_load_block(const uint64_t regs[2], uint8_t *block) { - octeon_3des_crypt_common(&env->octeon_crypto, value, false, true); + stq_be_p(block, regs[0]); + stq_be_p(block + 8, regs[1]); } =20 -void helper_octeon_cp2_mt_des3_dec(CPUMIPSState *env, uint64_t value) +static void octeon_aes_store_block(uint64_t regs[2], const uint8_t *block) { - octeon_3des_crypt_common(&env->octeon_crypto, value, false, false); + regs[0] =3D ldq_be_p(block); + regs[1] =3D ldq_be_p(block + 8); } =20 static const uint8_t camellia_sbox1[256] =3D { @@ -2104,40 +1847,203 @@ static void octeon_camellia_fl_layer(MIPSOcteonCry= ptoState *crypto, camellia_fl(state, key); } =20 -void helper_octeon_cp2_mt_camellia_fl(CPUMIPSState *env, uint64_t value) +static void octeon_sms4_crypt_common(MIPSOcteonCryptoState *crypto, + bool encrypt, bool cbc) { - octeon_camellia_fl_layer(&env->octeon_crypto, value, false); -} + 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]; =20 -void helper_octeon_cp2_mt_camellia_flinv(CPUMIPSState *env, uint64_t value) -{ - octeon_camellia_fl_layer(&env->octeon_crypto, value, true); -} + /* + * 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_resinp, 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)); + } + } =20 -void helper_octeon_cp2_mt_camellia_round(CPUMIPSState *env, uint64_t value) -{ - octeon_camellia_round(&env->octeon_crypto, value); -} + 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]; + } + } =20 -void helper_octeon_cp2_mt_snow3g_start(CPUMIPSState *env, uint64_t value) -{ - octeon_snow3g_start(&env->octeon_crypto, value); + octeon_aes_store_block(crypto->aes_resinp, out); + if (cbc) { + octeon_aes_store_block(crypto->aes_iv, encrypt ? out : next_iv); + } } =20 -void helper_octeon_cp2_mt_snow3g_more(CPUMIPSState *env, uint64_t value) +static void octeon_aes_encrypt_common(MIPSOcteonCryptoState *crypto, bool = cbc) { - (void)value; - octeon_snow3g_more(&env->octeon_crypto); -} - -void helper_octeon_cp2_mt_zuc_start(CPUMIPSState *env, uint64_t value) + 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_resinp, 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_resinp, out); + if (cbc) { + octeon_aes_store_block(crypto->aes_iv, out); + } +} + +static void octeon_aes_decrypt_common(MIPSOcteonCryptoState *crypto, bool = cbc) { - octeon_zuc_start(&env->octeon_crypto, value); + 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_resinp, 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_resinp, out); + if (cbc) { + octeon_aes_store_block(crypto->aes_iv, next_iv); + } } =20 -void helper_octeon_cp2_mt_zuc_more(CPUMIPSState *env, uint64_t value) +static void octeon_gfm_mul(const uint64_t x[2], const uint64_t y[2], + uint16_t poly, uint64_t out[2]) { - octeon_zuc_more(&env->octeon_crypto, value); + 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; + + /* + * Keep the reflected-shift formulation used by Octeon software: the + * selector polynomial is pre-positioned at the top of the high word b= efore + * each carry reduction. + */ + 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; +} + +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); + + hi ^=3D 1ULL << bit; + lo ^=3D (uint64_t)poly << bit; + 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]) +{ + /* + * UIA2 uses the GFM datapath as a reflected 64-bit multiply in the low + * half of the 128-bit register pair. + */ + 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 in[2] =3D { + revbit64(crypto->gfm_reflect_resinp[0]), + revbit64(crypto->gfm_reflect_resinp[1]), + }; + uint64_t mul[2] =3D { + revbit64(crypto->gfm_reflect_mul[0]), + revbit64(crypto->gfm_reflect_mul[1]), + }; + uint64_t out[2]; + + octeon_gfm_mul(in, mul, crypto->gfm_poly, out); + crypto->gfm_reflect_resinp[0] =3D revbit64(out[0]); + crypto->gfm_reflect_resinp[1] =3D revbit64(out[1]); } =20 #define OCTEON_HSH_MF_DAT(N) \ @@ -2178,6 +2084,16 @@ OCTEON_HSH_MF_IV(6) OCTEON_HSH_MF_IV(7) #undef OCTEON_HSH_MF_IV =20 +uint64_t helper_octeon_cp2_mf_sha3_dat24(CPUMIPSState *env) +{ + return env->octeon_crypto.sha3_dat24; +} + +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_hsh_mt_dat(MIPSOcteonCryptoState *crypto, unsigned int index, uint64_t value) { @@ -2264,14 +2180,133 @@ void helper_octeon_cp2_mt_hsh_startsha512(CPUMIPSS= tate *env, uint64_t value) octeon_sha512_transform(crypto); } =20 -uint64_t helper_octeon_cp2_mf_crc_iv_reflect(CPUMIPSState *env) +void helper_octeon_cp2_mt_sha3_dat24(CPUMIPSState *env, uint64_t value) { - return octeon_crc_reflect32_by_byte(env->octeon_crypto.crc_iv); + env->octeon_crypto.sha3_dat24 =3D value; } =20 -uint64_t helper_octeon_cp2_mf_sha3_dat24(CPUMIPSState *env) +void helper_octeon_cp2_mt_sha3_dat15(CPUMIPSState *env, uint64_t value) { - return env->octeon_crypto.sha3_dat24; + env->octeon_crypto.hsh_dat[OCTEON_SHA3_DAT15] =3D value; +} + +static void octeon_sha3_xordat(MIPSOcteonCryptoState *crypto, + unsigned int index, uint64_t value) +{ + uint64_t lane =3D octeon_sha3_get_lane(crypto, index); + + octeon_sha3_set_lane(crypto, index, + lane ^ 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_sha3_permute(crypto); +} + +void helper_octeon_cp2_mt_aes_enc_cbc1(CPUMIPSState *env, uint64_t value) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + crypto->aes_resinp[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_resinp[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_resinp[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_resinp[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); +} + +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); } =20 void helper_octeon_cp2_mt_gfm_xor0_reflect(CPUMIPSState *env, uint64_t val= ue) @@ -2308,56 +2343,97 @@ void helper_octeon_cp2_mt_gfm_xormul1(CPUMIPSState = *env, uint64_t value) } } =20 -void helper_octeon_cp2_mt_sha3_dat24(CPUMIPSState *env, uint64_t value) +void helper_octeon_cp2_mt_llm_read_addr0(CPUMIPSState *env, uint64_t value) { - env->octeon_crypto.sha3_dat24 =3D value; + octeon_llm_read(&env->octeon_crypto, 0, value, false); } =20 -void helper_octeon_cp2_mt_sha3_dat15(CPUMIPSState *env, uint64_t value) +void helper_octeon_cp2_mt_llm_write_addr0(CPUMIPSState *env, uint64_t valu= e) { - env->octeon_crypto.hsh_dat[OCTEON_SHA3_DAT15] =3D value; + octeon_llm_write(&env->octeon_crypto, 0, value, false); } =20 -static void octeon_sha3_xordat(MIPSOcteonCryptoState *crypto, - unsigned int index, uint64_t value) +void helper_octeon_cp2_mt_llm_read64_addr0(CPUMIPSState *env, uint64_t val= ue) { - uint64_t lane =3D octeon_sha3_get_lane(crypto, index); + octeon_llm_read(&env->octeon_crypto, 0, value, true); +} =20 - octeon_sha3_set_lane(crypto, index, - lane ^ octeon_sha3_reg_to_lane(value)); +void helper_octeon_cp2_mt_llm_write64_addr0(CPUMIPSState *env, uint64_t va= lue) +{ + octeon_llm_write(&env->octeon_crypto, 0, value, true); } =20 -#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); \ +void helper_octeon_cp2_mt_llm_read_addr1(CPUMIPSState *env, uint64_t value) +{ + octeon_llm_read(&env->octeon_crypto, 1, value, false); } -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 =20 -void helper_octeon_cp2_mt_sha3_startop(CPUMIPSState *env, uint64_t value) +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; =20 + crypto->aes_resinp[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_resinp[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_resinp[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_resinp[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); +} + +void helper_octeon_cp2_mt_snow3g_more(CPUMIPSState *env, uint64_t value) +{ (void)value; - octeon_sha3_permute(crypto); + 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); +} + +void helper_octeon_cp2_mt_zuc_more(CPUMIPSState *env, uint64_t value) +{ + octeon_zuc_more(&env->octeon_crypto, value); } =20 void helper_octeon_cp2_mt_crc_write_iv_reflect(CPUMIPSState *env, 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:35:06 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=1779252024; cv=none; d=zohomail.com; s=zohoarc; b=EhYB7sWrLJouRRAMJoVzo6s/kbP9ZHP0MCtyVX2YPvTQd8L7aQdke2FjhXoFTzce7r6zvEZFyLDEtr+demHDg03MCAOMFWNRtPBSfXfa2A8EuA0g/YWFmPpJRjVdGTrcMj4jrj1C3/HXyuKxtJhdExQibq2zfGvoKCCb7eBpveQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252024; 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=qk8pp+uRBAuiQ/J83H1x4TDrgwcffMANhW4wfj95S4M=; b=NnBpkaro0uF437N7YyIOrwtSP/miY08jdFLE6sSdwN8eCJc0Uq4LktAmO92YlyjLCFhp1Tbi34pb4Dj9FcHFSG6+dgrwOqOxySTTsL3lQdozFHBXDHxQ6TGIHQ5H/HQKuCP/azsbHvDjyfev86EBrC8cmZxw7bwSuTGpEoXpZjQ= 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 1779252024985187.74554717851981; Tue, 19 May 2026 21:40:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYh8-0001KQ-Pr; Wed, 20 May 2026 00:38: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 1wPYh4-0001Ic-Av for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:06 -0400 Received: from mail-ot1-x330.google.com ([2607:f8b0:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgx-0003uM-JK for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:02 -0400 Received: by mail-ot1-x330.google.com with SMTP id 46e09a7af769-7dcdd1b492eso4500479a34.1 for ; Tue, 19 May 2026 21:37: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251878; x=1779856678; 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=qk8pp+uRBAuiQ/J83H1x4TDrgwcffMANhW4wfj95S4M=; b=izPZn8CWWVlVU8EtRL4o1yCmlGbAKfTjiHhwxFUD/e1IW6jCg9nAZddHZi1dlN2bDi OcNHQPEk3CSOYyez8dlfCyG2JU8eEYsmYzl6lTJTINmofZJQ1B2rawi7PozJyLNB8HVL q0SK/Q8SdIyzqu4bh4F9H37F11I7lcb0YuPC3z28y4OK/bWMmakm54tgnMeMl903f8gl 9aUMIj5rewwnitNTase/kfawE4JQl8VZJM1gQOu04Rx2EUhe/DcBAc5cltbQFDIa2MLu 9ChVlFvQeDHPL4OxBJYGL8sXJkpHmP0hVUQMKmX94Lzvbmxz13n58PEubGFM7of85lVU mYRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251878; x=1779856678; 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=qk8pp+uRBAuiQ/J83H1x4TDrgwcffMANhW4wfj95S4M=; b=gPSJJcstb/SAkKnuMlVtqbiEi5j5o0Ozptfg/Spp1erZyOIdJ5dfPxNHPrS5bVI2uX 4zLsEyXSsDRPgYAJt4QL5eX0gyC9eMExX+yGHXZQKF0j4qMalKTOJr2G5F6iLoAq7x0O jQWGi6YXELTlSYzuAKCj1xcbMSmZtJgfz5nyXfixS1rZwtM/tUnVaxYIxcSb5pAElcU8 cAngPs8wLZtUh1oWCidM/5jmAWmqedXad6V1IxdSkSX8FyPEO3aGeE6dDpEl8/Lmrw57 rD3wMlG6EUbyTZNBU7TpHNE20bgikyEXwlcFoSWTXzHt43AAdzamAVfkZ46CrKq31og2 t2ew== X-Gm-Message-State: AOJu0Yyh/fmY4rfkduK5jIr5MjTKwVWplYW4sJqgyL7XeY1b75F+YNLq WKXymUgQVaGzwc+PrfJlCH/1bI2bG1p9UphpL29jsJYBvbdyRXOJBLdE X-Gm-Gg: Acq92OEwXyVwA5lJgWHQ3I3k6Di4vZiTIJHb2wpoGCSKIS7CpnYE8HQvBJEfS0Je5zv jw2RoJTjn+qN/Xj9OKGEEmiwVAhxyzNwRqSrI3QH8Zm4OeZfsNV/qmmq3dYiPFrRXhXPlquQ235 /LeMyMime/gJ/g0425WQzIyRiCX/XzFS4yJak3GRMeSUNIws4VVuAIMNYDfLzBtbrdMlUUp1pEj hai3CSTu0euIzz8tpTws40QgqeHhFe68rHqeSoaPSG79fGcLLBUoK6fEjfIBvYj81m7q9z1rG2m tWUppDLFmXf1hyYIJfIyPhdSPjlQ8otM5Zf9/mioaE1xFZHRLdUzM6cLClPJ4PlEH1Ib1NKYZyZ vIFvei6FPE/s94+PM/N9XM+AusnewEW1OsZSHzW26NXpp0sZ5Srhc22x5T0CUjvehE2sETblrXQ gEEkikCyio5tkvtnodjUJNfZOHngaohJtFDD7K2+76s1dszWUGmAO8nts9N8HmUVXoXwNEXHFCD wi2jP5HiVyHZTs9InpQDKz/5IjhnZZYcBNdTuabOA3k+gQs4sgvjaARsCTLQ+uYpBATb1ojW/fq U6s= X-Received: by 2002:a05:6830:6488:b0:7dc:ce29:32e2 with SMTP id 46e09a7af769-7e3f0b98b65mr15113648a34.2.1779251878256; Tue, 19 May 2026 21:37:58 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:31 -0600 Subject: [PATCH v10 37/45] target/mips: decode Octeon COP2 register selectors MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v10-37-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::330; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x330.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: 1779252025904158500 Decode the Octeon COP2 DMFC2/DMTC2 selectors that map directly to architectural COP2 state. These selectors only move values between guest GPRs and Octeon COP2 registers, so emit direct TCG loads and stores instead of routing through a generic selector helper. Add the common CP2 translator plumbing with the direct register-transfer selectors. Use signed 32-bit DMFC2 readback for the CRC registers to match MIPS register-move semantics, and keep AESRESINP as a single architectural register bank for direct transfers. Signed-off-by: James Hilliard --- target/mips/helper.h | 1 + target/mips/tcg/octeon.decode | 79 ++++++++++++++ target/mips/tcg/octeon_translate.c | 210 +++++++++++++++++++++++++++++++++= ++++ 3 files changed, 290 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index 68a99cfc11..42766ed0d2 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -147,6 +147,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..01fdbfec7a 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -97,3 +97,82 @@ 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_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_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_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_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_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_CRC_IV 010010 00101 rt:5 0000 0010 0000 = 0001 &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_POLY 010010 00101 rt:5 0000 0010 0101 = 1110 &cp2 + CVM_MT_CRC_WRITE_LEN 010010 00101 rt:5 0001 0010 0000 = 0010 &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 + ] +} diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 55cefe0903..7a670053c6 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -13,6 +13,216 @@ /* 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(); + + gen_load_gpr(value, a->rt); + tcg_gen_st_i64(value, tcg_env, + OCTEON_CRYPTO_OFFSET(aes_resinp[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_resinp[0]); +CP2_MF_I64(CVM_MF_AES_RESINP1, aes_resinp[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_resinp[0]); +CP2_MF_S32(CVM_MF_CRC_POLYNOMIAL, crc_poly); +CP2_MF_S32(CVM_MF_CRC_IV, crc_iv); +CP2_MF_U8(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_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_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_resinp[0]); +CP2_MT_I64(CVM_MT_AES_ENC0, aes_resinp[0]); +CP2_MT_I64(CVM_MT_AES_DEC_CBC0, aes_resinp[0]); +CP2_MT_I64(CVM_MT_AES_DEC0, aes_resinp[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_U16(CVM_MT_GFM_POLY, gfm_poly); +CP2_MT_U8(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); + static bool trans_BBIT(DisasContext *ctx, arg_BBIT *a) { TCGv_i64 p; --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779252108; cv=none; d=zohomail.com; s=zohoarc; b=gFMUwn+jFp8OWH5+bc3xoDUUsszEo57cQklmlI2NUgcXzFdOQWmm5O/TTL97MNMC53k9kDBvuFWids1Z+3CCsT/tN5xtFv+xA7oqyNkGG02tW1LjEhPsI1FYvrEAirOiu8GeekI5K0afBVNbOhCfoGREAWAkmyiCkNsmGW9DZHw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252108; 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=S8M4T3KbUASgSh1fBSVXJFYEPC5HjOIzY026NSgJcvE=; b=fr0HNAtPudK9Se8204m1+YZi5dS4yC9fFG84Cgogl3UeABxSvmlAKDPM+TWEPglZHZ6eSJhW/rQ9B2B9jKbVRuKpw+V08p4RJ3QySpdUhUO/oTEyF54Ay8h8Znymsau/E93vgntZz4cg7FlTAeMMnUvs3kdluNez5rH1L9nazag= 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 1779252108484998.1963466576384; Tue, 19 May 2026 21:41:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYh7-0001JL-Ad; Wed, 20 May 2026 00:38:09 -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 1wPYh4-0001Ib-8K for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:06 -0400 Received: from mail-ot1-x332.google.com ([2607:f8b0:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgy-0003uc-Hw for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:02 -0400 Received: by mail-ot1-x332.google.com with SMTP id 46e09a7af769-7dbe437b072so2203844a34.2 for ; Tue, 19 May 2026 21:38: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:37:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251879; x=1779856679; 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=S8M4T3KbUASgSh1fBSVXJFYEPC5HjOIzY026NSgJcvE=; b=W6DFIVWx23ppNXunzxDPtRFoOk2WvKRhZMS0W2gXUeoZ6lrN8CeeE7BHojB0SAwIo8 +cgSrvj/bNyCD9PaGjpfWgPVXZ+J3Owz02RwWYpBDUiinDl0an5cW5Ry+icfsAoUm+tP kdoSetQm7Jr1AIyblTpeHzUg86cA+CO6wu25C4Rld5aBOw0EuSurGxEqf+YrIBctvdNe A1wLaybaot612m4zT/ujM1eJZwtHgGCZaxWV2A/QsNJk0h5juzAqTDR2wv59U4w7RsA9 Xg0n7NpaDt01iFxN9khKxwL8hRH4kqL5fo8jssg/zb8+VixD394hyXTtALySzM1dYbAO usAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251879; x=1779856679; 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=S8M4T3KbUASgSh1fBSVXJFYEPC5HjOIzY026NSgJcvE=; b=qhwKfJSrYgeCtW0B2f0LMFph8NGijWqO8EcK4ktfjuQMeayEnlu0eI7QwtqtRRUA30 SmpL7aK7IvKGy72ytuQAV23bqQSBI38Vth33dOfcjrMRqCvVM63Za56kjIBQrDgmeYem e6hdOTJM9if0fcLZ2tQM2tHOr9gwWatLLBPdhLcGfQL8/cO02DJdjI+0mB4YOseteiHa 7oXbmCkZK3FNrBPCnxVcajVsNgvYFc4RxEAnnoztumDedyC/7kcvjBCehbMkLb5Ah3uz /Tl00HDQv0+F7qwAIhU+ykgofTlbOztFMIsecigUYNvkaTuk0oc/JkY6IDFU8+OvKkrS vFPw== X-Gm-Message-State: AOJu0YzTGWO+1hNELqL5Y/2MVPdQyjv0INVxCLSILsLrXItpF9CAeN9O KLwrs/qIYRsQaG+qar50Qukk3ohGXLSItPWv49X6YODIoc8k7hK+MIPk X-Gm-Gg: Acq92OE4DBJFv0rVW+vSAUAmL0fkl736hrKl5KIchzwnyXlnCxIbZhVQNqh2DWJbrsd jY5YObzUeglQzPONf9Cn024jMs32tXIH9gu0NJ2yDcZJF9LIneNg5ifTLXevw53cPf9NpVNHxxa 1g8XdQyDraRnSeyfmdDaRl+5Hc7G9wM8hkGG8yeTp8a9SjH3x7wXpqvvUach7lBaLYPMyEDg2kj 4Kb7UlTdylhu0Ks3Pc0FJQmPLXcPL5k4Rs1cEqwWiXtpM/vxBXZI3m8SLPFnZQVBKPbUPdsTI3P KqM5oyTq14OBzJbukf5NF0G+f24NHOXY/MfcvuzvAfkG8S7OwrMv8gBfcgEyb1EJeFuLKpMvQh9 mUPGxAzL+vdF0AMn0UuF1X6FGcjkrLLQoWNvTb1nzCIZTD3tM2rVJNXTL7zTg0o46KHyEAoulBv LbbJVeQ7BEcj7Icu+A1ibY3DR5FmXVohVbB/m/sArvVvOd0/bwWsvhA+oulhdNlI4CkL8T5XCI5 +icvzE/ZiNRkbQ4y/yx+ATAMkuNOJ9sBo7COSHcP7JRBy2uHd0tO9LbBLpS8vQBVKez X-Received: by 2002:a05:6830:4387:b0:7dc:c43b:9599 with SMTP id 46e09a7af769-7e4ea07a52emr15048800a34.7.1779251879424; Tue, 19 May 2026 21:37:59 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:32 -0600 Subject: [PATCH v10 38/45] target/mips: decode Octeon CRC and GFM COP2 selectors MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v10-38-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::332; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x332.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: 1779252110493158500 Add explicit decodetree entries and translator bindings for the Octeon CRC and GFM COP2 operation selectors. Unlike the simple register moves, these selectors update CRC or Galois-field state and therefore remain per-operation helper calls. Keep CRC/GFM decode next to the helpers that implement these side effects while avoiding a monolithic selector-dispatch helper. Signed-off-by: James Hilliard --- target/mips/tcg/octeon.decode | 16 ++++++++++++++++ target/mips/tcg/octeon_translate.c | 17 +++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 01fdbfec7a..fe9c97e380 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -129,6 +129,7 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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_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 @@ -147,6 +148,7 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx CVM_MT_HSH_IV3 010010 00101 rt:5 0000 0000 0100 = 1011 &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 @@ -166,13 +168,27 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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_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_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_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_GFM_XORMUL1_REFLECT 010010 00101 rt:5 0100 0000 0101 = 1101 &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_GFM_XORMUL1 010010 00101 rt:5 0100 0010 0101 = 1101 &cp2 ] } diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 7a670053c6..ee69c7c652 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -181,6 +181,7 @@ 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); =20 +CP2_MF_HELPER(CVM_MF_CRC_IV_REFLECT, crc_iv_reflect); =20 CP2_MT_I64(CVM_MT_HSH_DAT0, hsh_dat[0]); CP2_MT_I64(CVM_MT_HSH_DAT1, hsh_dat[1]); @@ -195,6 +196,7 @@ 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_HELPER(CVM_MT_GFM_XOR0_REFLECT, gfm_xor0_reflect); 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]); @@ -218,11 +220,26 @@ 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_HELPER(CVM_MT_GFM_XOR0, gfm_xor0); CP2_MT_U16(CVM_MT_GFM_POLY, gfm_poly); CP2_MT_U8(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); =20 +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); + static bool trans_BBIT(DisasContext *ctx, arg_BBIT *a) { TCGv_i64 p; --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779252077; cv=none; d=zohomail.com; s=zohoarc; b=UQjV/Sfs9qe+TP01AA6t4R+70doZ3BihzRjFV4Q9xwcK0nq3oAlYpWAOvv9vx0Zkt9EQB92g8qpPpDrwP0AwTrQU9R1rLJenusKBm5lzc473/YnKQRm2Ln2dZ9iLMBgz60BnhvCixDWD6S6lYDMqrju1/s1bZ8Mr5LmeMxS1WPI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252077; 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=yHZWpGY0QJSV2gclY4Jc/+86UjY1XPfedLkGpRhAq28=; b=iF+wjNEdJbmU1MZYVJb7ayrLhBYpKE7qgUbsjt35pYPET/WVN9C0OgoZSP9KwH1FS66uKt0QEp17USuSQkgjePQWQ2+KrVY+lv0j0eq35B2aHHoPSToN6b/gbKyP6aSZWVgSmVEEPiaVW70zxS/Xaw+6ZWGg3niCXgyXXkxWBb0= 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 1779252077763932.1066302790823; Tue, 19 May 2026 21:41:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYh7-0001JM-BK; Wed, 20 May 2026 00:38:09 -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 1wPYh4-0001Id-CN for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:06 -0400 Received: from mail-ot1-x330.google.com ([2607:f8b0:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYgz-0003v9-Rc for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:04 -0400 Received: by mail-ot1-x330.google.com with SMTP id 46e09a7af769-7dea1272943so2087475a34.0 for ; Tue, 19 May 2026 21:38:01 -0700 (PDT) Received: from mac.localdomain (184-96-146-19.hlrn.qwest.net. [184.96.146.19]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.37.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:38:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251881; x=1779856681; 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=yHZWpGY0QJSV2gclY4Jc/+86UjY1XPfedLkGpRhAq28=; b=NQ/ZGEy6Z/HwdrtrXilFBd1m9qyvbBmoB3cTUFcFxk9HeI7YbRN/sbP6KZHARLOUSj X/TN0ByoAsDuFz3w742NC8DQWZtZN81nsHWMRTzk1V6l2RJ74htqnnIkL1ynBdy+nbNd hYnC3TqOjZHvhrPhE1VNltyO3Kg0NKZBAmmNYIbBVulgRrlsHxAZ2u93FzOVpFLN5gJS 3jNPVVHKEdHB9okIR+6dVmCMqJnfZTuYb55S6/DEI5grn/6d4rZJUPIp1ctnIfzKdd9m oa3zHaulIymn3ZTws0FxEHA8s9y+LBLoq7RQYmP+EXp464USjD2exEMAR+CgUjDgEZ8s tqsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251881; x=1779856681; 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=yHZWpGY0QJSV2gclY4Jc/+86UjY1XPfedLkGpRhAq28=; b=hBnUAtcrrsZFtJys78iIyhr9Q6tpxd2wYOx9fs4mEk/wRVN5nhSMQE3+O7JtzO/h1f Uqkl6PN+DwoqEZZ09uTFB6m8OF7ctup2PHFORd/i6E3evk1Cqb8/2d0OUswXvhUYzXru SpP71kRcZ8oKBW+fSBpgqfWSHpcjtQkFbeYUpazxSeaTb3dlKbV9RsZ80gEkwi32BQFo 38B+/LuqKGzSrCMKJoevmtcfG9Tmd4exPiBnH9meWare4V2kN+AXs/n5YdgKC5gLzwgD CM8BGdllfDTGN1cz4XOtu8rD+19QLgK1sI6wHd17To48juMuOyN6UCvHgC0rOVdkz8yv uznQ== X-Gm-Message-State: AOJu0Yxy87/jDM8hRhm4LvlMHbhDIXAux4ZnEuX4S6tN+XQXTS9GD7ZZ 6SI9/iGngpT0BOaNUSau0wI0s31/jIpmYzeGV9XQpqwuh+Iagk7Y7HcV X-Gm-Gg: Acq92OF7hjCZOnNE+DoaOLGoA0DYBT/KEAXZRnCCYJaRN+R0tmImZmPIRuOAItC/SGn +FwqocH/t4w29Zl/BkWXOy3nryJ0NMDkTdfMYh0RzHfayBN8ERcqSEx+M+GL8+Xz1Tj+ocDeU0A tVl2gubInnyjTDtNGxrlr8rZzwESV+A+QaJSyqvU7UXvonVzWOdUc5+KKG58gj82UnyVWa4FVV7 FGKTYc0KGoYsmc/borGlGkc2yN3qMPW5Fi8xtHGufjUGUfWy+VT0DfRrihgrpYc5j8/6TUiFGLS dLYfOlZMQNcB0olgTH0L+jrBjLCXzArKW0cT+iGG/Zy7qy6bxFebweLYKOvEmb6y+zMj059Wuzb ZX99qRRDFIURG8Yiwy0+8Cz/UCZeTv8tNwCnr6xjEZUzs4q2s1mUUWzvCCwesGIpkuVO5E9LjAr aYAv7ZK6KbpDK63c2rCds0+Rkwjh/hvwtKGc+QIliXiSk3LfcbD1WWDpV+ECIOwzewlqQ8EdCX6 Z08WyHQFH7Gx0kx4Kfd8V9E7iYV/ezDqz3lUONLerYazujZAHQ6LZ47VJfI44/ODJgT X-Received: by 2002:a05:6830:2b27:b0:7de:a330:ecb8 with SMTP id 46e09a7af769-7e4f2b4488dmr15939603a34.16.1779251880684; Tue, 19 May 2026 21:38:00 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:33 -0600 Subject: [PATCH v10 39/45] target/mips: decode Octeon HSH and SHA3 COP2 selectors MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v10-39-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::330; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x330.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: 1779252078256158500 Add explicit decodetree entries and translator bindings for the Octeon HSH shared-window selectors and SHA3 operation selectors. These paths need helper calls because HSH/SHA3 selectors alias the architectural hash register window and operation selectors have visible side effects. Keep HSH/SHA3 decode separate from direct register transfers because the shared hash-window aliases require helper-mediated state updates. Signed-off-by: James Hilliard --- target/mips/tcg/octeon.decode | 75 ++++++++++++++++++++++++++++++++++= ++++ target/mips/tcg/octeon_translate.c | 75 ++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 150 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index fe9c97e380..f224cdc7a3 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -106,6 +106,7 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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 @@ -130,6 +131,30 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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 @@ -146,6 +171,9 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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 @@ -175,20 +203,67 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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_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_HSH_STARTMD5 010010 00101 rt:5 0100 0000 0100 = 0111 &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_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_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 ] } diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index ee69c7c652..c494eb9383 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -182,6 +182,31 @@ CP2_MF_I64(CVM_MF_GFM_RESINP1, gfm_resinp[1]); CP2_MF_U16(CVM_MF_GFM_POLY, gfm_poly); =20 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_dat0); +CP2_MF_HELPER(CVM_MF_HSH_DATW1, hsh_dat1); +CP2_MF_HELPER(CVM_MF_HSH_DATW2, hsh_dat2); +CP2_MF_HELPER(CVM_MF_HSH_DATW3, hsh_dat3); +CP2_MF_HELPER(CVM_MF_HSH_DATW4, hsh_dat4); +CP2_MF_HELPER(CVM_MF_HSH_DATW5, hsh_dat5); +CP2_MF_HELPER(CVM_MF_HSH_DATW6, hsh_dat6); +CP2_MF_HELPER(CVM_MF_HSH_DATW7, hsh_dat7); +CP2_MF_HELPER(CVM_MF_HSH_DATW8, hsh_dat8); +CP2_MF_HELPER(CVM_MF_HSH_DATW9, hsh_dat9); +CP2_MF_HELPER(CVM_MF_HSH_DATW10, hsh_dat10); +CP2_MF_HELPER(CVM_MF_HSH_DATW11, hsh_dat11); +CP2_MF_HELPER(CVM_MF_HSH_DATW12, hsh_dat12); +CP2_MF_HELPER(CVM_MF_HSH_DATW13, hsh_dat13); +CP2_MF_HELPER(CVM_MF_HSH_DATW14, hsh_dat14); +CP2_MF_HELPER(CVM_MF_HSH_DATW15, hsh_dat15); +CP2_MF_HELPER(CVM_MF_HSH_IVW0, hsh_iv0); +CP2_MF_HELPER(CVM_MF_HSH_IVW1, hsh_iv1); +CP2_MF_HELPER(CVM_MF_HSH_IVW2, hsh_iv2); +CP2_MF_HELPER(CVM_MF_HSH_IVW3, hsh_iv3); +CP2_MF_HELPER(CVM_MF_HSH_IVW4, hsh_iv4); +CP2_MF_HELPER(CVM_MF_HSH_IVW5, hsh_iv5); +CP2_MF_HELPER(CVM_MF_HSH_IVW6, hsh_iv6); +CP2_MF_HELPER(CVM_MF_HSH_IVW7, hsh_iv7); =20 CP2_MT_I64(CVM_MT_HSH_DAT0, hsh_dat[0]); CP2_MT_I64(CVM_MT_HSH_DAT1, hsh_dat[1]); @@ -239,6 +264,56 @@ CP2_MT_HELPER(CVM_MT_CRC_WRITE_DWORD_REFLECT, crc_writ= e_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_HSH_STARTSHA_COMPAT, hsh_startsha_compat); +CP2_MT_HELPER(CVM_MT_HSH_DATW0, hsh_dat0); +CP2_MT_HELPER(CVM_MT_HSH_DATW1, hsh_dat1); +CP2_MT_HELPER(CVM_MT_HSH_DATW2, hsh_dat2); +CP2_MT_HELPER(CVM_MT_HSH_DATW3, hsh_dat3); +CP2_MT_HELPER(CVM_MT_HSH_DATW4, hsh_dat4); +CP2_MT_HELPER(CVM_MT_HSH_DATW5, hsh_dat5); +CP2_MT_HELPER(CVM_MT_HSH_DATW6, hsh_dat6); +CP2_MT_HELPER(CVM_MT_HSH_DATW7, hsh_dat7); +CP2_MT_HELPER(CVM_MT_HSH_DATW8, hsh_dat8); +CP2_MT_HELPER(CVM_MT_HSH_DATW9, hsh_dat9); +CP2_MT_HELPER(CVM_MT_HSH_DATW10, hsh_dat10); +CP2_MT_HELPER(CVM_MT_HSH_DATW11, hsh_dat11); +CP2_MT_HELPER(CVM_MT_HSH_DATW12, hsh_dat12); +CP2_MT_HELPER(CVM_MT_HSH_DATW13, hsh_dat13); +CP2_MT_HELPER(CVM_MT_HSH_DATW14, hsh_dat14); +CP2_MT_HELPER(CVM_MT_HSH_DATW15, hsh_dat15); +CP2_MT_HELPER(CVM_MT_HSH_IVW0, hsh_iv0); +CP2_MT_HELPER(CVM_MT_HSH_IVW1, hsh_iv1); +CP2_MT_HELPER(CVM_MT_HSH_IVW2, hsh_iv2); +CP2_MT_HELPER(CVM_MT_HSH_IVW3, hsh_iv3); +CP2_MT_HELPER(CVM_MT_HSH_IVW4, hsh_iv4); +CP2_MT_HELPER(CVM_MT_HSH_IVW5, hsh_iv5); +CP2_MT_HELPER(CVM_MT_HSH_IVW6, hsh_iv6); +CP2_MT_HELPER(CVM_MT_HSH_IVW7, hsh_iv7); +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); =20 static bool trans_BBIT(DisasContext *ctx, arg_BBIT *a) { --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779251984; cv=none; d=zohomail.com; s=zohoarc; b=gFcrVsDulArRMUnRqItJY2uuh9tGsb+SJK7MIva8OOGjNVZ1odL32cYenKQjo4YmP0wE96JcbkgE5UELnRqgELKvsF5VEYDrrItqmeAOYjTnN1yHHP0WSPsnid/8sHjmDK6vamWsvtMX+czpJELZ013fl3oI+hZ8VL1U1LlUO5o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779251984; 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=zee+lfC/9IdY1ifvacpwHvWZSgyZgmsCPfmoYiMY/lI=; b=isK0is6MuQP9gXiEQ2QXqmBL+kUyBlqJKZnj0tl/eFKj8oVXLpOYT5442I4oXQ5Evah875Kje33mf67kQOVeyas6izVzdUaHctZ3PB1Pc0rotcnczK2O+kMvMfTomhCSjuqr/XSyee0TV1zlcuoDhK5kZSGhhpcBq/Fpo30CC1c= 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 177925198473656.41723568023872; Tue, 19 May 2026 21:39:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYhb-0001hJ-FN; Wed, 20 May 2026 00:38:40 -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 1wPYh5-0001J8-KQ for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:07 -0400 Received: from mail-ot1-x330.google.com ([2607:f8b0:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYh3-0003vM-Vx for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:07 -0400 Received: by mail-ot1-x330.google.com with SMTP id 46e09a7af769-7dca00c1591so1190294a34.3 for ; Tue, 19 May 2026 21:38: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.38.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:38:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251882; x=1779856682; 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=zee+lfC/9IdY1ifvacpwHvWZSgyZgmsCPfmoYiMY/lI=; b=iF5qmsA3tfX0ckDOYJ/Lc+1Z/70u9nUHNb2JbCvW6V5zIMdnz0+Wd954c+S5eM3RUb lMxaXmL7wUkvfMtl7dbRyDN4YErH2AXGTXB5LEf9M7DgJM+diEBG8JVDa2LpB5+82dfE iJO4RGBQLpjerHT7z8VOXstTEPTsRNbdbGDVOiXeakgc6SnPZYRV4oiBzVG32pd+U0vB SM6tsYS5Xs4y0+3ifV1X/fHGwoirg4KFMcRRJNYnlZF9csJtmspG4s+2U04sc9Tdp8v0 U1xdkfeefQSxK4ORYyJPPACKHmF+GfJ5cV+IUFFtq18keI9QdOs/lR2VwqtvCWgUexie iJPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251882; x=1779856682; 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=zee+lfC/9IdY1ifvacpwHvWZSgyZgmsCPfmoYiMY/lI=; b=gaEY/XL3mTxX78qusz5mjyBLesemPnhigS1JTz14PKqw2VszDPXzzLLyk9lNR4gJBM Yct2yRiuhf3QsLctYVSbtBPeF7RNfMS7Hxm7jRlef+5hRMsh72dmpNp3wwpaNu66MMU5 f40gME/yVydVI1pQ1d6TnlvDi83bO//Rm7kc705CNtLBtaXinXGbaRomFiRktceVIi/Q jCuH9M+IDo1Ejd8BmBAgweVmGTxYLiXT04bY9RNnmnmEpzt7OBMAIAWwv3PqReD6OvEw 2ll7larR2l05tlXAL/sg17pWC98UJklwfIFxv1HwItXHgFg/zIpZW+mtSPpAl+PrCVtL ARtA== X-Gm-Message-State: AOJu0Yx7DiuUTvOjg3aVxkfxUOCRbzv7hvbaLF9duPI51i8/xL/ufiB2 56NDm9n3DMKBXvRw0kOAw4JKOLAxrb9Vk7aCLJnSM4YVtX786zrN2lq/ X-Gm-Gg: Acq92OE2Z/S3OwgTo+tbH8ndGtG98i4iXxebNdECLR9pcIFS47YJAC2YPUkBp2d8v2P iGOpCGpGj0Ft42bjVYbnKZ8vAQwWKvf9barrcId512dJgCGE3NAcjdDRhRvwQ7SCnvtnz7zO7Tw 1kD17WNpdS7KueAz6F3BrZ14gE7fexqg+0DDkf/gL/ZxrE00KC4Cbq7OmiWTz6ad1R+af4I8fOB 9PHBr9VQGXxIuPfJd5bqewLgggO2giMTK7WFRPy+d8xwARK+KUDcWI67hrxft+MgqsXXTVQ47/d MxFgSBfkQ5F3lnY4dEK/7Bn6oK7vGj4WnEXmuaEmHxCw4dIj7BNF+QelUF/7th34czbt5PwRMnb NjGsYQpEI6aBCI0k8A+H8hIwxsjy4jhTSPDtLxd0GRLZWNHsr7yJ0WQinQZCx2Ck4q+t3bsPOJl d5Pbj0ayUIWpGc6S91MuccT17m/vvG71j/2+5t9eE1DljeGcLV5tsaMp9OXljlqElUp+OAFHbHp 4YIXswDquVhBqqmH+E9TGB1Uk9B8Ykz5UZe0QwlkBQqq9/JxluirovHVj5xx4XaDbsJ X-Received: by 2002:a05:6830:6d2e:b0:7d7:ea9f:c0f9 with SMTP id 46e09a7af769-7e4de650958mr15258688a34.0.1779251881900; Tue, 19 May 2026 21:38:01 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:34 -0600 Subject: [PATCH v10 40/45] target/mips: decode Octeon ZUC and SNOW3G COP2 selectors MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v10-40-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::330; envelope-from=james.hilliard1@gmail.com; helo=mail-ot1-x330.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: 1779251987926154100 Add explicit decodetree entries and translator bindings for the Octeon ZUC and SNOW3G COP2 operation selectors. These stream-cipher selectors operate on the shared HSH register window state, so dispatch them through the per-operation helpers added with the corresponding engine support. Keep stream-cipher decode separate because these selectors share the HSH register window with unrelated engines. Signed-off-by: James Hilliard --- target/mips/tcg/octeon.decode | 4 ++++ target/mips/tcg/octeon_translate.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index f224cdc7a3..662fa25321 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -257,8 +257,12 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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_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_CRC_WRITE_POLYNOMIAL 010010 00101 rt:5 0100 0010 0000 = 0000 &cp2 diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index c494eb9383..64f549f5ec 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -285,6 +285,10 @@ 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_HSH_STARTSHA_COMPAT, hsh_startsha_compat); CP2_MT_HELPER(CVM_MT_HSH_DATW0, hsh_dat0); CP2_MT_HELPER(CVM_MT_HSH_DATW1, hsh_dat1); --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779252042; cv=none; d=zohomail.com; s=zohoarc; b=GhQ+aCmq3YTMYyjO7HpbFTerfKUmotzkSlor8n6sDsWhkdd96T0Sv4dMQaBYBwfr5gcIgZaECELuIMmTDPkKJeHeSE9HfIZ9hP3SgkVEHhq9gbW6Ne+U3sELkCH03G7JFjPQFNhesd+13xHGT4F6yVMdNd1tHqZirCTMDavZSTo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252042; 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=mUwEfnAzApc6ZS4ZDncONZsXZqLoV9qEqnV3kPf1MLs=; b=TNVRCbEtSPxnmPFyDLb22MzvjSqmJkaAHwvpV1XbXNrFwxgB3LW84gv7Ola/3Zicx059sZtzIBrxJGAe9OiLBZttJaxz+DiAyYcTrRBG5y51SkaM+dRwFB1mvLtY7hIPMFAj5y81axt+6ckjFyOuNSXbKQLuaDWZWUDPY9Plx+M= 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 1779252042189698.8971506040695; Tue, 19 May 2026 21:40:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYh8-0001KX-Rs; Wed, 20 May 2026 00:38: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 1wPYh7-0001JS-7M for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:09 -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 1wPYh4-0003va-4B for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:08 -0400 Received: by mail-ot1-x334.google.com with SMTP id 46e09a7af769-7dbe437b072so2203854a34.2 for ; Tue, 19 May 2026 21:38: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.38.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:38:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251883; x=1779856683; 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=mUwEfnAzApc6ZS4ZDncONZsXZqLoV9qEqnV3kPf1MLs=; b=qcy0UPmnpb3FWAAwWhHgrDbAElzXTMc+E5JjCEM0IGlI0gia9KWC6U8QagNUuUp2bV neTbhrCm4vBWniccprShnPl6TW1wGtsDhlr7MSmTUd85bG3bvKNWfKTzVrhibfoQcK9Q Nr1VL9pfXf8aWQUB1h8sFCHkoS94RAlNGYLMRAW6PsLRKEj7MMsXxcu/31OkCPtUP4nT x5vtlFJdcOWUYbAiSD7GN7EK+oygtv/Ib65EiFBJ+50KWQXJnP6bgbogiXp9BKoEG4Zi cvAdv8HJraQ84GgN6xcH5yFq0GPzMk2+l2XR/yxURsbwP1Iih6pppgAzxB65kFZn7jku de8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251883; x=1779856683; 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=mUwEfnAzApc6ZS4ZDncONZsXZqLoV9qEqnV3kPf1MLs=; b=UHrodHwe8UL3hONZ0xT2xSGom/FXx4oJFWJUTTj0RrNMq4RpI3QIwn1/4Hu8aCxGrD TdtPy0ZT5xK63AbvokTA8WH4wKCih5C35TdACFJyrm41FdQu1z9BqSRPfb+55WeMa0mC a/MWwabT/rh3NWyrKaFFNlwRN8bAAbMquoF4PZs6iSWUNs+ChqhWZPZ7/aYcoTs2gAI+ EEcNY0+SVZrGTH9w3E0QwkPEMX0/5Auz23h/cshnmk9G7fvw08aMndKAjlKQui5eCaPn 5+hx29UkYjWDji0RUF84OERMBCWr/JP54zbVbu8rG+FqD5xYGdrXTeOi8Qc/9gNqmrfT m3hQ== X-Gm-Message-State: AOJu0YyODwUEHoT+T+2mnPEyX1BUKQNWVU7uF/yOh0c1D5Pn+VC1W95H 5RnQwUXp6AefOgCsS2Ns8bnQKCRuXFKEiXfgF2Cx915H6ZtEw1KYjXp9 X-Gm-Gg: Acq92OH0Yz+DHGQrhBReQ4GKXnXjfHmCe28T+ZoUtaikJg0NUftj37TTIiE+9BsEHPV dleKwYZXKuGeXUsL5IoGwh9smjr6geR897rtbs8xzJSHg3BUgzZJpt6gwSN4c/FM9TCYkx8pby5 a3rDSbyGchiR8A/x3dOfuHQ7fnuBW/PMSbaCuNYSkmWtdR7VGANseQg39b9nhLxq3uK/opc9CMq afsq9Zzalqsljm1QkPwG4bZOphrnWifwwIwI3j5iC82pWB4DlROxDFbQq+/YLnOGdSQWXlGJB7P eggDXircwLTmiWn0EhxgXTKND+SZMio6rVPcmactZjOhTxp77rPy+MKtK/mDEd0IiftKgBgR2TK agw9SV5X544Id0+SQELmLu46xuHXAjpEYe9Js/mv6yzHKlqDCC971JkB95B7HK6h8BQjhYAPetv mJwzGm1L9J21DaH29CrzfEqUaaw5jgsGkHJRle7fQ8StSlN6myuwPYDBviqleBhc5gliKFyaFbK xf988IzZWKARBi4jFlcmjRfp13soxV5jgbXLpEzA1eH8yl/g/eLjMqtRUihZcrLmMuT X-Received: by 2002:a9d:4c8f:0:b0:7e5:623a:63cd with SMTP id 46e09a7af769-7e5623a9d70mr10059334a34.4.1779251883109; Tue, 19 May 2026 21:38:03 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:35 -0600 Subject: [PATCH v10 41/45] target/mips: decode Octeon block-cipher COP2 selectors MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v10-41-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.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, FORGED_GMAIL_RCVD=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=no 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: 1779252042873154100 Add explicit decodetree entries and translator bindings for the Octeon AES, SMS4, 3DES, KASUMI, and Camellia COP2 operation selectors. These selectors consume or update engine state, so keep them as per-operation helper calls while the simple block-cipher register moves remain direct TCG loads and stores from the earlier register-selector patch. This completes the block-cipher selector coverage without reintroducing a generic runtime selector dispatch path. Signed-off-by: James Hilliard --- target/mips/tcg/octeon.decode | 17 +++++++++++++++++ target/mips/tcg/octeon_translate.c | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 662fa25321..cd4fc34d26 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -195,6 +195,8 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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 @@ -256,6 +258,15 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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 @@ -265,6 +276,12 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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 diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 64f549f5ec..0037bd02a8 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -289,6 +289,23 @@ 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_dat0); CP2_MT_HELPER(CVM_MT_HSH_DATW1, hsh_dat1); --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779252160; cv=none; d=zohomail.com; s=zohoarc; b=S/n6z4f5nPXvgS4hfbkCgDtUzu0oMHQ8uYjjdeJWMgcIqUHwxS5ZB0Z78sIGWs6FXD3Ebpzj+0b9vgDtsqPR93TpvHtA/lWBFaQmDH1hBOiXweBbIHW9sAUU7Up3qblkAsHlqvrMyKtOmjlDAwp8fsGf9bXlRp+3ZqO1kKE1dyM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252160; 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=CLZ5sDXdDaSKliQIE/7BOIAK/1AMOLwWSmzx5DcRjQI=; b=m5rjye8qubWt4KPISfKr3/rbCi+pG5R/OpJLuSbMoQGbP5uXiSdRtuNFeHySM7Ukv6P+CkaBfJoPItt4HRXhVtMQNCz22HkJ0x3blLmCk0OBl76rRT/Dc0RnHByTa6ULoy3rmaRsNw5TKhRcqiIEKiTjSV1VY07p/3/IQ2BXKlk= 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 1779252160006441.73251065125964; Tue, 19 May 2026 21:42:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYhe-0001o9-DN; Wed, 20 May 2026 00:38:43 -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 1wPYh6-0001JK-0l for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:08 -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 1wPYh4-0003vf-4E for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:07 -0400 Received: by mail-ot1-x334.google.com with SMTP id 46e09a7af769-7e568ab0bc5so4967590a34.0 for ; Tue, 19 May 2026 21:38: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.38.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:38:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251884; x=1779856684; 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=CLZ5sDXdDaSKliQIE/7BOIAK/1AMOLwWSmzx5DcRjQI=; b=GukV0yBIWtc5HpcpGZWQZyQ5CtWPny8CWfj9wcWOxdFOloSxkNA+ySjtoduUr5BAMq DRi5f/I+7Uoi1Bz2NISWhOBJL1rrw0LV24odNxIyNX943DtZ5NLvqQhTOKrsRbCg3ACg lCbmalTdNtHIiNu/OX7pgifBkfff1u1KBcZ2tQWQiRJRJd8xucCnzsO2bvhGhb1HoUxw irbk4hrYKKldkgVsxfZnusjuFthos7aAPaQqYwaQobZk7aVJksMR+7lcrrKtuTcjeCXk PXqPVMaeIttwPXSzWFyqGdonzh915ShvCPDtOg5ARVgIF4B04J0m3eNdJET08lg3Mc4c GB0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251884; x=1779856684; 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=CLZ5sDXdDaSKliQIE/7BOIAK/1AMOLwWSmzx5DcRjQI=; b=rzgcTZR584lptYSEnlw/D814GNo9esFmUiqqegBEKWV2Rhu2WBmEmMrWY49Ckf/Krb ojZ0CY7Gh+VefkvUBqhyHvD+iA3RV30CGFnKErbA1cpFOVd0BIf/D+kctk+gDJVTl4AI JkD+6e1FRf29IbqyZk3+0C9ZyLenQXf1CkUL6E+t1eTJk58+AyX2GQGLKTV3pJ06fiSf izgr/cHjU9FCAyNFl2AoRxEX2JmSVVjMJ7TMakZvNP9RdniSCXX9k3QYm2qJI4FXADGc BvqZiYpLwgvP2LfpfRyV6+NBGT7UC5tFeRr4umhuGyIqz5R6WUityUxuQWxxP8ibzJM8 u7Lw== X-Gm-Message-State: AOJu0YwUbFAg/ZOp2jYuwzq/Ir+Tp3jB/QGdQLPijEOb2hXv4q6pAE+s CjT+ZYLPKeLWo3kgMHrpB7Bkfkr7tuvqVqmelQh72huzEnQO0uDaV2Kp X-Gm-Gg: Acq92OGuNVPRxfuihW6a/ZMYVQHvDsH0JpFnwPhQd63BM71KA7XjoJwOYiSESyISb/c MRXGIYRA5Tn1xRSTWkbTuUJ6hY5X8YzgMJLSRw2iIlVNp1UpId3v5WKcUkRn364JWfh6rT2HL+C 9wnsdQtEqFe7bwu0QdDzJEKSaKAI2AGpNFrypEzZnJahTlA9VC6b34jSo+82rBFlVdB2i8gC7Ee r2DeK8AKYzAMoiEO1U1oSKotjQXIMnjXACUwP7o1F2+Ltoai/CqSU9sPCHn+8ZOLIQW4Cj0peZ6 K8fsOE+S8otHONtAChWnEPo7kTAyqu0GTAks0z9SmVKqsXGoYf3Iw1cHwJz+eAbwtNR5iN/mzzx j9hNRZRJOUKu231nOUHFkuovXPjMfELRjBCH8yvKcrdiSQVTrLmNZxfafzqiqmY95ctUGfJkkaw W3KMYIo2LZUhgozhQbKL0BX76E511Rwq44QMtuEEl0NhERfR6JH1lAdWP3GpFQxoTacBMRbdVjU t1cJ421upsT3+AnFzD9ucDEivI47atJ+3yB/Fq1hXOMn6xRAnBeW5uSU4QjvwNFE6uXM8QDPxIE K54= X-Received: by 2002:a05:6830:e03:b0:7dc:e059:c25d with SMTP id 46e09a7af769-7e3f0730079mr10727523a34.0.1779251884379; Tue, 19 May 2026 21:38:04 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:36 -0600 Subject: [PATCH v10 42/45] target/mips: decode Octeon CHORD and LLM COP2 selectors MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-mips-octeon-missing-insns-v2-v10-42-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779252160845158500 Add explicit decodetree entries and translator bindings for the Octeon CHORD and sparse LLM COP2 selectors. CHORD and LLM use their own COP2 selector window rather than the crypto engine windows covered by the preceding decode patches. Finish the explicit COP2 selector decode by adding the CP2_Undef fallback so unknown Octeon COP2 selectors raise the expected coprocessor-unusable exception instead of silently taking a generic path. Signed-off-by: James Hilliard --- target/mips/tcg/octeon.decode | 14 ++++++++++++++ target/mips/tcg/octeon_translate.c | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index cd4fc34d26..0ff8c0d7cd 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -160,6 +160,9 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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 @@ -253,6 +256,16 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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 @@ -287,4 +300,5 @@ LDX 011111 ..... ..... ..... 01000 001010 @lx 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 0037bd02a8..daaf220a40 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -180,6 +180,9 @@ 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]); =20 CP2_MF_HELPER(CVM_MF_CRC_IV_REFLECT, crc_iv_reflect); CP2_MF_HELPER(CVM_MF_SHA3_DAT24, sha3_dat24); @@ -247,6 +250,8 @@ CP2_MT_I64(CVM_MT_GFM_RESINP0, gfm_resinp[0]); CP2_MT_I64(CVM_MT_GFM_RESINP1, gfm_resinp[1]); CP2_MT_HELPER(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_U8(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); @@ -335,6 +340,14 @@ 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); =20 static bool trans_BBIT(DisasContext *ctx, arg_BBIT *a) { --=20 2.54.0 From nobody Sat May 30 18:35:06 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=1779252062; cv=none; d=zohomail.com; s=zohoarc; b=EJAmQxsRZiPPIq+YSXn/3pdi9dceBXXDlOkDytMx+++fRqcIy2WDw+FhCFfuxhopXzrJuZkoc3LwGRWK6Nbs+kZDz38/Elx5DzZOy5Neumz3JbPU3UlnQhQUP/Sz9Z5F+89bPNypeuku9ezPEzHBbWOX6QZCqoTLS0Bcf7Vk1Sk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252062; 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=2uBLn0JCmn2AkoHIwn3pnP2U3MrZBB6n6jOVTTEKZR8=; b=iHIJgwE7xQ1v+q2uiRCeEMtm6NDJhz+oVLSaExTydAcD7h6BtzImp5Dch8vusN3g7iH/MEypvaaictGU5hDNdHnD2hvOhffcO200CTIg16BJrbhy2timKZHJ2jfB9Y0JfhGv6cHwjy6RG+oBk0SrxXrDy4FbwJ+VolTjBBlvPuc= 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 1779252062795575.5694051700931; Tue, 19 May 2026 21:41:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYhI-0001ME-C6; Wed, 20 May 2026 00:38:22 -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 1wPYh7-0001JT-9l for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:09 -0400 Received: from mail-oi1-x22e.google.com ([2607:f8b0:4864:20::22e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wPYh5-0003vl-7D for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:09 -0400 Received: by mail-oi1-x22e.google.com with SMTP id 5614622812f47-48270f099d5so3684503b6e.0 for ; Tue, 19 May 2026 21:38: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.38.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:38:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251885; x=1779856685; 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=2uBLn0JCmn2AkoHIwn3pnP2U3MrZBB6n6jOVTTEKZR8=; b=fHweyYYcDZ7bIW8Qiu9ucliXOe2OgQ/uB6t/fnZLIQ1Ailv2QRerm0970lHjrZ6wLN TFlBlw+y2an8f+E7A2FFkjoEbLwe8PS0hAkAfQG99b91zQxrSGG0AXiVmwZ8b1N3kG32 ttRMUI1OsKBxj/l6/HriHZU3UYPz4/GgMS4Z4jencdcbKk8LUJ6jiJnTgLagsbdbYdR7 zE5iP40tW9W/IgY0nfauu/nhFGhhX2F72kyp1v0ML5fDr2fDr85JreX08Ofy4yba+w7d 84UxCTzjh/HPzGim+mdBo0FH3BSaCSGTGS93TmoWcuAnjeNt2IULIoXt5A5wuINYRLXi DQ/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251885; x=1779856685; 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=2uBLn0JCmn2AkoHIwn3pnP2U3MrZBB6n6jOVTTEKZR8=; b=ho1LmZLI/Lt3voCqbkkChI3P2Z5v+Y9f0kSvYXra1SvIp7znzMQj5L5B9beeFouNhA qGMVHF3Tc6J7zA7KJ2dBbTfivVkUBk6YOrVku5GqAWOZNmKCGxFAQbjyQOMRzFJUkkYd QFI8lLI7TPrJsiWP8IZNLnbrijhgxBMqNBFkxWHerupXb1s2zHb2GtzOoaJEBxju070t /rk7GwMSa8oSZPrE+uy1n1zx9K3jntXj6HGylnepjBsodj9D6Vy9V9ZXyd2K7hXMFzFW t5D/nqjHSU4hk+awHKQglKCxk5Di3Jk14wSShDjqJmpwFqeHSWMiCjtipkaWvLAQqoMc E4Tw== X-Gm-Message-State: AOJu0YykRp0JI/e2AYrehxm3n6rOFbvBtr9OJtg8Je8Q9FEPTP+vwrqH 4msBJGv511wUBqxlHQuTIk1R02YgEXRvIpIvbA2fEk39TUIZ0J/pv7+zswDWBgs/ X-Gm-Gg: Acq92OG9YDyu4VckTud7CJ0TRefS/85Kfu2353rNHcywThEtB1bpOFtCkbLMt4AnaVf P2cZlRQUxJ9TLhrfRh4HLvtRilcU9LlWO6+p4W9jDPKjjxby/fR8U6sJUuKh98w9xGcnwknyWMH gUMK2H4BcLFyMybatM2NG+cYPOZDa+cHSdeDQeApFBK+g8QJNoWGO8i83XsniU80EF/HJE2EFMP LazTHhkLpVyYy3ALfHBCbx1S0M5PmTBH/V+TTvMV5JOjkOPe+6wXOqsm2z46RurBFy7zIKniUTo Vhyy4d2jYM7pQOizBzlbwEmau/x+BD/LSzNR+3ev3wHjpJiV3iGPcrjSf0SILJedOdXNLGwdNNr m+s+2XZhaHKCbpur9D+O4T8e5/RQ4LdV2LPnG1elsr1/sdsfKt9JftlS5qk76XZpqrINkRjPX/d 0g+ydmyv//56z4yTFmx+hqalukKf3H8OCBNojhRjKzqqxSg83/IqIgiQFpVYGUDXuCev7MLbVIZ LMdl8OIgT+J5qajIL7QPnfQ9945o9fFh9g44olX5lmmedpBAesKwEeEj/Y0KSAm+NWE X-Received: by 2002:a05:6808:518f:b0:463:c56f:a45b with SMTP id 5614622812f47-482e5725b71mr13886206b6e.28.1779251885139; Tue, 19 May 2026 21:38:05 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:37 -0600 Subject: [PATCH v10 43/45] 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-v10-43-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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::22e; envelope-from=james.hilliard1@gmail.com; helo=mail-oi1-x22e.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: 1779252064206158500 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 42766ed0d2..392722ca86 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -319,6 +319,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:35:06 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=1779252180; cv=none; d=zohomail.com; s=zohoarc; b=TBzlEPJjEDyUXumcdGji+G79PbaZZHzLuoIP2D9zUdKp/Kji2UvvV7kHmXfGirMjrCTfG18uUmh/zh7FV4a6PK9V+vihqKBLFrnP4ToK0C/0vrMxnDpRdsSGdgNb7wFhxuJ4qSwsehYdYmxOtFyxe/go1ncwFD2uFXMGLXNl1Bg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252180; 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=GRdGcVcmD73AG+5UsKzlv7TQ8d5Mbm0MWUprBW0Q8bw=; b=K/XTaX8skUrF/KX2TEFVwsWNXWdLgTrdQ+kBYzBscT89Vd5bmFZb4YKWaf3g/uHJZGxskq/ZTgnFYkMIKCWiHgfMYbyjeOymzQ3RSJPDFE8TFe36VegQo4VJO1PokygfGF6jA0o42IF/xYdLFUBlRQBzCaFVq+5Jj0Dr969KkYc= 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 1779252180076627.8517053219676; Tue, 19 May 2026 21:43:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYhV-0001bA-JA; Wed, 20 May 2026 00:38:35 -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 1wPYh7-0001Jx-JR for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:09 -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 1wPYh5-0003wE-LL for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:09 -0400 Received: by mail-ot1-x331.google.com with SMTP id 46e09a7af769-7dbe07d3ec3so2217207a34.0 for ; Tue, 19 May 2026 21:38: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.38.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:38:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251886; x=1779856686; 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=GRdGcVcmD73AG+5UsKzlv7TQ8d5Mbm0MWUprBW0Q8bw=; b=Fz8s1gU4/OMSU861mNHYJnq9oU07Q8mca5m7mgqv/FStL8fb1KF5pSED+N78uzaQv3 HShYmCQs++hnLrjtY2oUECslx7su+ZrK/NR0w9S/UtdPph8mO5xSNfkKd3STEaatD9A4 D3pSsdf2/VI9vbIAOTHSd9feMaL2cSCQVvbEWkldo2o+KJNNyl0CTksF9UkfP6zowzt5 iGa/EV1emr6ODIuIH55VP5u1zuhonMtx/rlsIdAJyL3QOgXLe3QreTdhudukoc8j7D7m 9hDBMwit6E4SKED2S/1coGlDRodf5k4Cmts8i9i7dhYN9LMjN5KYwAh7ZvTpc/IKRA43 TP0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251886; x=1779856686; 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=GRdGcVcmD73AG+5UsKzlv7TQ8d5Mbm0MWUprBW0Q8bw=; b=k2Mh282+tPjETzrtj/xQaDAMv4J6FB7tCl/k8uQsXiLMDLUflr7cK3AxMv8MB0c/aF UXJ0CFY5fqTyq12xXAJ9VbETWkat66CTwUOiSt1UkTWJxRIrDyxcVwEKvG647+LnrGIv JUa1GpPN/V3QcpylHHRetevlnJiS9+PxFAV1yQs5fkvI/g5wmlmQbSd73AaHuDzGLE0C HPMr/EDvpMxkdH654Bpgeczzz04k3KCslQ5aW+A5+1yTxKMm5JxLyLFqC8UPxBGj6ov9 bRmSYea6RGWvu4L5tzdqZ3gwrfVUllnnDfqZAF/d8CpJ3sbUBkcjJ5I9I3Oj8ngzGbKV 6x2A== X-Gm-Message-State: AOJu0YwGbSjyDG2XJfsIiNgEcbY8QauilEbs9pAED5aMzIqd59zu+CeG XG5NjygvTHIT8A4wPqnB9a0iftm1SrSV6WWdlXspV/J7pxW8hLUU6wmdzYZyFWV9 X-Gm-Gg: Acq92OHax0UIG7hInScxwpaXD4sAfkMR30o5hDh5W4Dvyu7aNYci56VcUprExnxRKtw 4UjbXsW+Xyk+xvWMHNXf7OW/iYzW7jX0rqlmLm5mg680d1SGxUSip6UDRSi0mLYMACHepuAG/8v CT6DtQfaVjBxwQaZUOVjqhwQHRzDNxv1WMDabCqEo55gOt3VzmdlpOn9xeXxiq0yasNdBnp17do m+2a8WM72f6dZosEWgvY6ZWdBPkVxjQgokmpYd+O9TK955jHnUtgSkQeqJ0mER7GprxrG3c+z7U +LF3Bmt2uuOIrtRLIj768XUYIuEMZruDDTK11GxQOUVGjJhLdwLGWgHZTq7Vi7iNCLoS3ajs/I+ 72cdXqzwyGO1xj9ynx8qvjD1hOsaGdsjnLkVbJrvbWvOK9ZZL+awfXJFXMkx+8C2D9oEj/K9Id/ Rf1EbhTsyq23L9zLZ88kSvaXc194lyWc3ubbeCEXmkSODuBC30Usoey8Rc81vTLXmpBL33s2XY5 VtX1rZN+TFzHspktyY/VOPuitSjybqz/Uluz25O+k/0hVJBkoDHxzSy1uqfyLtpB3vk X-Received: by 2002:a05:6830:448d:b0:7d7:fb03:f6ba with SMTP id 46e09a7af769-7e4f2bc83e7mr17117888a34.21.1779251886429; Tue, 19 May 2026 21:38:06 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:38 -0600 Subject: [PATCH v10 44/45] 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-v10-44-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779252180970158500 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. 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:35:06 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=1779252145; cv=none; d=zohomail.com; s=zohoarc; b=GYT9R6qTVSb3bH7bABOAGAGdhhiS1rkKpemwHKXglamKXf0YWyOOo9q9ZYEVKXVUSwuKiPaEVC5Ozn37N78wVu+bP8l0FoJHbxfDilKq8VDf3/NMkSU7vg4lXl1EmOhIeuyObK+Q2FcDisr8R5yQjoVWXapATUXlbf4siz/6NvQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779252145; 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=dVH+cwAztnQhZ2QPkS1VR9KOSmfSsS3tCbNpT0hcXEY=; b=dK80luyY+rqXgetinGWrghqGdLV3ZYdAxbIGep0MrT3kinroVimt66u8IeMONqOnpmDp4Z3FHuhojxb1rYTvhKZb7lM/2/qYyrRW7eX/pYtX6Px0tCeoGtlcOuHt6us8e+uDO2ejXJMtYExbFx1VWRv/3+kYlwetGBjO7hsoceQ= 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 1779252145965229.39268875164942; Tue, 19 May 2026 21:42:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wPYhg-0001yt-OX; Wed, 20 May 2026 00:38:44 -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 1wPYh8-0001K8-5v for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38: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 1wPYh6-0003wW-Ix for qemu-devel@nongnu.org; Wed, 20 May 2026 00:38:09 -0400 Received: by mail-ot1-x32e.google.com with SMTP id 46e09a7af769-7e55b95ba13so2466929a34.3 for ; Tue, 19 May 2026 21:38: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 46e09a7af769-7e55bc4f04fsm11574634a34.27.2026.05.19.21.38.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 21:38:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779251887; x=1779856687; 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=dVH+cwAztnQhZ2QPkS1VR9KOSmfSsS3tCbNpT0hcXEY=; b=p3zAxxKTJJAEe2oNmu+pTMF0HNoQjg3Wu30YAMZ0KZzZyXCzI7iDoS9BrY8jBfbaQ4 u/YMykDUDs1LAUZyHc+td7wdFWgj3zMDCcd31qY41cRg9EhSIUXmDqomJDMzjTYEjlcy H6vgMoq+qx3LyIldpgxZeaEB21eyoO6FDaLiu1UDImtAntLWiMZfec3zoFio8Hptvbkt uw0aERqms3R4Cizmr//bn/5AZmdU3J1VwNQO3qwv3vLEFwDy1rur9hEn7F6FgjsL6+AF 4smBJTkevkENt0/ELGETOQhpfZLZWnOnuGgi5Ctxy3VvIT/VfcHlsVUkRtgP56m67X/T Ag/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779251887; x=1779856687; 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=dVH+cwAztnQhZ2QPkS1VR9KOSmfSsS3tCbNpT0hcXEY=; b=l7JF0J1LOD+q4mKx9zXTlLCuJ+BUjHtyVb2do+2v/6VWUF3HaSw4HK5xWYVZ11afhY vLaWeV6iprP3vKUtTxD/kRJgq03jLp2XF8VAjXS3D3I+Yn40zMVitleuX3AGxemS9Ou/ 3xF/6VkdJy5K4ef4W6CYXGY8j77a7RWl8+M6cbYinQCePQNv3lS3p9Nmp4jcPToglJEK yN6thuIHJYGmLHc6TTn0HmVFHBHAxRDijlimej8thxo4m7/2559i+qrbLPOBPRW7cXzT bfvfzMjTJSs5q8l1PmXCd4l7GAi9wr1scjbCKlpmSLC5DLVRTH05lvFSHhi+MX35LX5l Ldow== X-Gm-Message-State: AOJu0YxCDMLzR5fo0DFiixAePbREpyFpj5wV86/yUVLcVhcKJJifwUlw U0eSqtpHDa7DVxPHBMlDtMylBblDqBp7UKGYZfl97b9byra6goqzb2EL X-Gm-Gg: Acq92OFvT8Ikcd9HG0mwANxPndi6SDoJBwm2i+GojZieldUPNZdGGtB9unLSbbHPydx vDdEMZqdk5IFQm09K19NYpk/7OvibuDodvACo+LCWRI21qcyF3sPbxsXkmtugf20E8XXjGQwbx0 6ggwIeCPj7ClB23f3KPu3m/X3t/5E5Jpfebxvf0CyjFQ5QePBQ1G77TASxz2ZKPn3MlyA8d+RN0 I4BZ5I0CT9J8eboKpRM0UcusX9zpCL3fYqQum7SgieConOu3gOkcMkUkZfAN0AZ9cV+lnpqKX5F CxfLjpYX07dxsQztf+I2QWLIQhAAbgwqJeyKLkfh97Op5hhDz6daOg9C0lDBWpiv/FIJTPb9ETN ue/3UgMKYI8GWctFsUhnER4aI+7Isai7pBpvJwPUUj1c1SMq4LE4hmQ5WWYD9V2Beo9QTaJRh9j oeTvML/oc/Dbkr/UORlQ6Tygo5QC9wN6FGNfCjU9K88eYl+wGbMoGouywwIOjU22FxXsmimJZi2 ltkT3Nc59OzcYniQNucTYUTpcV8KfV2+IvcVbqwp4koCveZc5EFzpOrBN7qF/aa7W9H X-Received: by 2002:a05:6830:6995:b0:7d7:419a:7ac8 with SMTP id 46e09a7af769-7e4f2b8bdd6mr15174356a34.15.1779251887481; Tue, 19 May 2026 21:38:07 -0700 (PDT) From: James Hilliard Date: Tue, 19 May 2026 22:37:39 -0600 Subject: [PATCH v10 45/45] 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-v10-45-306f9edfe15b@gmail.com> References: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@gmail.com> In-Reply-To: <20260519-mips-octeon-missing-insns-v2-v10-0-306f9edfe15b@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: 1779252147410154100 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