From nobody Mon May 25 20:32:01 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=1778253328; cv=none; d=zohomail.com; s=zohoarc; b=dQ5Fj0mTSSPBNn6Q2TP/9e/gNblAzztIwPXpjCgl6OwB7KHTdgILtgU4YjRn1rcRFwh7+6WqGB8PNJfAGnRQpmgMRF7av2wcPSffJ3D/eWbG+eGHhF+5cQLrd9gAB+i6GhBZkJwrFoTZWXtRISyHtMPNNWalOC06j6RDuZX+8zs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253328; 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=eeSYubRzrbVOd4JOKsu3EVgrvrE6N+cN6nPl+evK3YQ=; b=CwqB4nxuFtEwYEVBqkgUtGTvJNUe5H7b2WOu+zDPCsSUq2AHJHgOpTXwVWK/nYWgfxJIcVFxtfsZYFHoHRURpb7LIV5ycTGTbqsYi/YaBazvEXJ5qcmdU1fS3YNP4IGINKSRwP5NOYwB0NwADKBRv/cZuSYKzjp1HZaSWKmoDBI= 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 177825332872046.34454822702071; Fri, 8 May 2026 08:15:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMt3-0002bg-1u; Fri, 08 May 2026 11:13: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 1wLMsv-0002b9-Dx for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:01 -0400 Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMst-0001af-Qm for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:01 -0400 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-43496e6a964so1603902fac.2 for ; Fri, 08 May 2026 08:12:58 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.12.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:12:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253177; x=1778857977; 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=eeSYubRzrbVOd4JOKsu3EVgrvrE6N+cN6nPl+evK3YQ=; b=sFo7pxNZlSToWZjZOFXj4w2W3TyGoqSnkTgtQx4JAPFoOVL1iz/da2Hsckva3z48Xg smhH3UZA+UiGXSuRJJG+cHrsEgMFc3krTedWcA20EJ8K38P6FWweZjPGDnBR6lGw1O6B l28YnkzbYf8N9QB76/pjahwHSN2N3qM9YTgkfF2ukx4AcMpBE0945dJVuCQ1hlMV7mJd 4l2p27E7dHXdwfTvu8+MhOUE4D+XiF1Bb6qHPirFxe+p3oAf2HDstfaykOra2fd+RqPj MDazulhTDjvJ7o8sR45J//gin2n/r8PQvYA4l/AYGAgkYxfdLkEgb7KEdKPUel+EVBrY Bsow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253177; x=1778857977; 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=eeSYubRzrbVOd4JOKsu3EVgrvrE6N+cN6nPl+evK3YQ=; b=mVl51roQtePrH8aSuyz193StiM1hjIMB8a9HmAPWNGDdoI7LZdqiLMxj00sUO764bm O5Hg0Ju4VXtzEpjK4WxhdSqyDKSkTLxNFM0xYRaTzNv4JIvWMjteQs5uhydYQ/btU0/r vObIHZAZa5W7ma+y/rMwHk81+p5lXMbDJGN4cw85A4lTZTSiHmlSKJjWoBSlzCtr6D6k alp8RT6Os3vbN6hlJv2iILSZ/c+rdTZ1e7BBNgMewO8z5VDGgKH6ayH8BxyUnEcBRM/9 kRHHBnsp+Di/blr97Z71/LJbrHW6iqU5NY2u4apUT7Wdxhr/hjzR0OxCsduLv9+yg217 HkJg== X-Gm-Message-State: AOJu0YzYm1LwUP1M7xfdN0FnXzyFrjX0RHb8n/Hz54HJDWA72j9cOlUn 9rceTR4bvwptw1xnRijioJ6yBLzxU3RPwspZ9y9MyMf/ZOoBgU3wgQBSAwJE5A== X-Gm-Gg: AeBDiesrGL0r7GWeIeNbyE/k4iPOlf71rZZs2kt+xXKiNCmtVj5lhQ8VJ49Y8x/Uq9i hXk2Y2k3hgqkWuFvRghgQusMD8m8SiaPMIa+qVfZlINk3qF9us8cuZMz7cqF66+rBFAN59fiDpr Ozcg2bXSKyJbFIdgDKVYnFlMeLqT2rqqw0Upc6c78idzak6AGjt0Ijw/yXP7HHTVGFjYXlWKvJA leAvNYcYjQjTzanFL1AyrexXuMfTn7e2zn3PtM/yPRN1GQPxutkiCQtLE2ewbWrAe4VvzoLcu5I jokUOAPyKkxRDIXbHweSNCEH3PhgpKuOU9dv7PCw4SMWh6DEObuueDI2cEO9/qLCDvoTOnebD2M olxtix5XsADQGy/wwLMQhm/zv21Y/oLjDuQ61rUMmoQ9KX1tvZToUlN95VwkyO6mwWT6sNkLfNe 91Ksh2Ss2oxCYQeun2sYfN5nVqRhDR73k6kga5U8mkk1z1BDmidsIVSKJ3O67QTFcTlQS0wIKm/ 1iaS9Zt4uBerlwqu9x4cP2d8k49QZBCzIvl+CKQgfDqpLx73pvFWpaUlH0gAC/V1LlztXb7453E 8ycIEroKk52jL8NlWeJGv2yPLvkgZ1kBv04G/Weoq/FPio33IKgDHejQ2QXW4CDs39Jg1GA= X-Received: by 2002:a05:6870:6c09:b0:424:6b88:da8 with SMTP id 586e51a60fabf-434f63b1c96mr8641023fac.17.1778253176974; Fri, 08 May 2026 08:12:56 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:01 -0600 Subject: [PATCH v3 01/32] 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: <20260508-mips-octeon-missing-insns-v2-v3-1-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2e; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x2e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253329750154100 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. Signed-off-by: James Hilliard Reviewed-by: Richard Henderson --- 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 Mon May 25 20:32:01 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=1778253343; cv=none; d=zohomail.com; s=zohoarc; b=TQroTtq2AOz/4QVvP5D07rjIKlvn6Xnnq81pdeyG3y4PwQ/51h0r/fhFE91n09cYQ+VxnDL+3JKoHzxPw3r4zmhVg8Vd/J1yrLC4pn8DcBN4ul6eFJyFkWRYthtUcF2O4XIlmV4Y96DNsZaDa8G1MzIIznqaFB9UVw9hZU+BrfU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253343; 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=iAJ8Qk+vpPe+4QpFghj8xaJORB1ELQJhno5MzPCICrs=; b=d+LhmypYinWptcqd8PpIvK4Lbg9tMbiTfpsBiQZZRHsXyhpOC16Le9c/pQ1pJlzKhW0XZ9bfPfRLlBJvArZxGo7cb067sGlDmIyChZ6+TUsQUVtvQUY1vKmtEGmT/MehxEnyJeM7QjsbO9yxZnstOm9eQA8VEaqJXCuiisUfptw= 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 1778253343603370.6709813988906; Fri, 8 May 2026 08:15:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMt3-0002bs-2k; Fri, 08 May 2026 11:13: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 1wLMsx-0002bT-6X for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:03 -0400 Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMsv-0001bb-Mj for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:02 -0400 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-40f1a1f77a6so1651350fac.2 for ; Fri, 08 May 2026 08:13:01 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.12.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:12:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253180; x=1778857980; 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=iAJ8Qk+vpPe+4QpFghj8xaJORB1ELQJhno5MzPCICrs=; b=UIJBUCNIqIaPkGeEC+qMjrgbi7yJPRvoMR9QptFlezS1L0QDb+TtbD7AinhZ2DUPG0 Sx9WD+OPT+a6hCUBFC3I63pBDP3TRq5hcgf1BO+QS2xL9SFaS7I5vFjl33ma/1RmxI7z xBNp00hl/6hSArMXCWQiWOu5Vv+caqYZ/+c1xa6UENXaV9nvWq6EJHtKYCiTpD9WuSZs jqCe5vhFSYYKl4+m1gFO0X/pXbCoQEsg4OXHhrP9baWDqrbs4di/dF/yC7THkXrlkSU8 MvAJ8n57SLo46D8yf8W6aZT5yCHCo2Hi1PvKJXon2kdFlvxnM25auglTKf6mID1U1pa7 HuuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253180; x=1778857980; 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=iAJ8Qk+vpPe+4QpFghj8xaJORB1ELQJhno5MzPCICrs=; b=k7HagIjidqdJEhWL6h2BZvecYq2pd/y48qwkgSHrkzIA0KGsxU1+Lm8DN5VakJatMU Q5TgWJ/dK50tAix775NV/2w80phlWKLqUEGHRbWLCyLYrOzVh4W42yydA5PFnCiu84T7 9z6UADojFTWpx/hZvjPH2brJE8BcQ1OLSBR0EuuaCvwTHYN6kkBhofK7pG6UcHWPUKS/ /UATedp3wywr0+X87LhnypTC7U++jCndaVThqs11WDBPwFRk9LmiaPjRMN14WRD/ErA9 Lo09KAfKdQIr4KXWASrZxaqhtXdJTVUHFxgCMtR07TvwDX9cwAEUGOQ1TH3XNVhFQAh6 EcHQ== X-Gm-Message-State: AOJu0Ywbjfa5yWl73bPLIQszkpbhaw40XaVWyNQEjDXG/hKaqho6zUhi 2YLdOsNqQ+P6xVQdMRj7bP+53AcF2d8K2zqLx6npKZS3/Xl7k2GiKYk81GeQog== X-Gm-Gg: Acq92OGH26ZTKi776lEowdcWihGs0+M7rBDbP0fcWxlpxgIsU4DKaPrFkzrkZy4wdn2 DegIosT1Pl+8r6/lV4WNeOPBkq43wGtmamkPyFAIfhgnPAQ9nZWHGR+Qv39vOPdNiRCm6ijz20N Yv9h7UDLFUgim61PKvUzj+ZOZ3AdHKzU6xOQFJXsz2w0B0iMhYVPWw36BUKYZlF8diieavROi+i 2K2jvyMWWNvcJSun+aoYCm+twmsdyifZ1scyciWGc/Bqy/hCbIGPGAv5OCpl1c1KGHVCuJRbrjv jH6dLxv4+Z/Z4iYBElkY8KSqNKdYK4aD76apvCg8/yeMLlGt55l32+ZV/wn8//65aq3WWUVYTV2 XJsxg3bTqTQc8XIg8d5Cf0EEGAn/J8hbwrHLeu7pQS5RP39J6V0hX/la5lKVoaW/ATaQDC3QErS XKI4RlHx5MycByzWc4EMlL4kSlPq+oVYAoPsvzoa2R7qGPxnPbQZaUYea1jGpMnEP7NWvqJMe+G ucTpf1+bkb7UIveCfeR530PnXnrXybkDPERzUA0a7AaF7H4Je0R5krOalZy3QhoEAKO5JoNLKOp pfarkPTs7vsK6/VvzX3lhKB9to0vMX8YFqmJNqNRWBFgpFeodUbJNVCn2id+RIa7W/8i5LJHlI6 7CcLsUw== X-Received: by 2002:a05:6870:c08b:b0:433:d0ff:a25b with SMTP id 586e51a60fabf-43556fcbbe9mr1735875fac.39.1778253180087; Fri, 08 May 2026 08:13:00 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:02 -0600 Subject: [PATCH v3 02/32] 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: <20260508-mips-octeon-missing-insns-v2-v3-2-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2e; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x2e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253346086154100 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. Signed-off-by: James Hilliard Reviewed-by: Richard Henderson --- 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 Mon May 25 20:32:01 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=1778253467; cv=none; d=zohomail.com; s=zohoarc; b=WXqo3yIs+rixQou9EC149lixxQ7Hg2aTVs8PguKjcVEqIJg9XEUO42TwuUb3zc/GEpOI2UBplj9UnckS59vVycy70WOFC7CFrMH78n5lt+DcWnT5VhKjZqjWBzSzmm8gV+6zdiUGVlqFQAPOfjzRZd0ujDz/AJqj0T2Ol/p3CoQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253467; 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=LG3xb3bJPuwpo/t13YICuUERFJUEl2UkU1tw9cyZ50c=; b=EglL2qJxke1NQNXnLpRQkcwoywBX8eeGxJ21v+8XXBxuPEme/hhYKcWoqjGj9yjRFi0aFtSraeYN91Te7QCfDQOH012aSJQtfuQM+V5mqlX2Md8uOTtoZXOAaW/L3Gcl+JtDZefcmsxSF88ZpDxJ6Sy03K3k06c8zn+hjQWeqjo= 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 1778253467900367.2449677904634; Fri, 8 May 2026 08:17:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtA-0002fX-TH; Fri, 08 May 2026 11:13:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wLMsz-0002bt-IP for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:08 -0400 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMsw-0001by-Jl for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:04 -0400 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-4042905015cso1611163fac.0 for ; Fri, 08 May 2026 08:13:02 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253181; x=1778857981; 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=LG3xb3bJPuwpo/t13YICuUERFJUEl2UkU1tw9cyZ50c=; b=FscgSS2/o9T4y8y6Z8fkocqCPKAMqZveE00QJhwBO0L/dS4bxwP4EfDAVfmbSa6mzc w9XafP+UfcU2WzoIjHmUcul67fzDSWVuRujAHtDjW/qdoLuniS7SZ5yLOkPHOqIjUpLL Dar4xyH/guryVf5X9hUK0oT7lhyxjJ/Rm6qAL5aI0+LVzeRDlsyAHTmErgxhAGMttM13 Po/D6VqsUv4Th2YByvkut2OZLZ/DzBArehscUp7vON4SCNRoJso2VgNeHjNbPo12A3cu VzwFmP2cDNE1GwNbwwmWQw296LGm3yIPH1jzsH/RzNxw/MYACHVd8Ie/KUeZkyjv0dtK YgLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253181; x=1778857981; 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=LG3xb3bJPuwpo/t13YICuUERFJUEl2UkU1tw9cyZ50c=; b=oW7jbDNZu5YFUTy1ZrguLo1kKPzkB0iQVoeolFrhsWahtd6ulBJS+0JEl23keRHAqa s9O7m65dVS/f31QOdLzhE6j7Y0b9ryAcPsMH+vsqvHZ7Hp4OJAjZViUu6MXd1UhcFfkj w3/0zuZpgSlP1IBsMLUlbSv9CIOGTrYWUtuVE0mSchNXC/D2KVk5jzRbz/cinE5Yx+7T jhIFno2pzRzsEAxBFuwwsHhIdaZCZ565GbPdNIjFrFJ8MdkELe5E4jEPiIeImonw/Bo1 bLdEz8H0laGwnUdWYxn5adpgZyg4UyuENE6mNBj59hq4NbF8ELBsR/5FZOyv1R3+BKFC Ighg== X-Gm-Message-State: AOJu0Yx9q49NpkwIUn2kR6FZLvnkrJ+3awuakzN7ONLL6C3TerVYcgQX bwto12G3DoqYhZP6MwPFf6BdWXmHk7Ay0ElSvAX6Of13lHVmwqOBgFoHJ7TRXQ== X-Gm-Gg: Acq92OGe781TiQNLEd0c8uOJE76bQX4pS7f7OUffISRW1MyG8DhiKdFsvjUjW4vjdKK PTcYPP+cegPdJReGF/xhEWWSKRK3lPR3S6ZVaykvbxCPQg0S91WbUWexcIgXwFJIVwxmkoQi3E4 1fANZscYGFaer1H13UyEYMNE1eW0MsWw0HpvrYAcWbW8ctum8e/VbAU/RV7hFDu89OoNi63r0gN TkJFJetbfuZ7nYqIu7NCyUF+Igtsg7XvEYRDPtHBF1oRiepGv61W70KGUBv5OIxDqEFI9KLnmae fcwjdFBg2W5lNO4F96dhJtaYm5Fd6W3Kiu3IyIHp2Ns/z/XZeVNDPTcze4ecdOutO+6wab0j4iV hWqaxiRGcY4ruC/zV8QhOT7uxtdNJ0z0bqFfWUJmGatG82L3NyvGZHVTLn7XRV939SzZIAPr8a2 IKu4fxIXSVObnGrXquAGgn1Xjiif3E5oxUlRPycnErd8p3BxWxgEczKdDfNlSC39Oc38m5ltpsK pUsM1ULnblLIlmo1qxvY+K1en1Io7juYJTqor5PoRNxsTMgzFIBcPjTa/L9GR8WtiRzAOpeWz65 bhLwFTGXGeEjaKugbZJhMD84cfObb89a6uH/ObGfyJxHOnqodCTDA8aH0KVPeL4vt2xSSoLSMcK Egl0dJA== X-Received: by 2002:a05:6870:c2a2:b0:42c:61b:28e5 with SMTP id 586e51a60fabf-434f64e942fmr8551273fac.19.1778253181074; Fri, 08 May 2026 08:13:01 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:03 -0600 Subject: [PATCH v3 03/32] 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: <20260508-mips-octeon-missing-insns-v2-v3-3-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::36; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x36.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253468883154100 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. Signed-off-by: James Hilliard Reviewed-by: Richard Henderson --- 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 | 8 ++++++-- target/mips/cpu.h | 4 ++++ target/mips/tcg/translate.c | 6 +++++- 7 files changed, 30 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 f803d47763..19001d829c 100644 --- a/target/mips/cpu.c +++ b/target/mips/cpu.c @@ -565,11 +565,15 @@ 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 + flags |=3D TB_FLAG_UNALIGN * !cs->prctl_unalign_sigbus; +#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..84d12b77f9 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_UNALIGN 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..cd6dc34176 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_UNALIGN) { + 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 Mon May 25 20:32:01 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=1778253233; cv=none; d=zohomail.com; s=zohoarc; b=RAGueOhcdsCIgJXvggDR04iEkI43HJXE7ERtFUfuo9w6jDgMLQcwzuwOOjNQbco60IEn8LLW4ARX5jnVJVKSa1KhGTbevz4bdLNv+VOEyM6oC+DlNz3kwcKxK8JyqbwSZC8c8MFNi2CK8ufXhycjbQJF0C07pkrpTEjRsaPFo3k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253233; 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=t5VUvwmV5QSm/EY15P6N0RYrvzdvXre9m8Jp8WgG/ug=; b=FFvg8i4lsBDxRYUxYcvEK3N2ltiYqHYb9oO2napwaTuGRNHouBZamDIsaoV123ouhNg/QL/oG9zL42giAG0NosClF9KncLPLVAcsCM+31QuxCxAiaX7C5iRiPYYc2xh/T+Wd8cwIM8CRBNPxeS8Hldg7WrlXE94dZ9GthUbolMQ= 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 1778253233181721.2327378016705; Fri, 8 May 2026 08:13:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtQ-0002jc-Bu; Fri, 08 May 2026 11:13:34 -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 1wLMt0-0002c1-MW for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:08 -0400 Received: from mail-oo1-xc2d.google.com ([2607:f8b0:4864:20::c2d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMsx-0001cH-IO for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:06 -0400 Received: by mail-oo1-xc2d.google.com with SMTP id 006d021491bc7-685017d0fbcso1205425eaf.3 for ; Fri, 08 May 2026 08:13:03 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253182; x=1778857982; 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=t5VUvwmV5QSm/EY15P6N0RYrvzdvXre9m8Jp8WgG/ug=; b=Zd8l2qDycW6bC/TmNxwPBq1OvhSvsPDIrX7jAM7O+YwPajZjJktjda/4SORMr70Iwz OJgC7PjIkGhCLx7Ha6JI5JxcB6BaJHoYrp82AWHQhQlIVRxwdHs6o3awboeGmNbTYxLf OZLXnHY+MeZuoo3pZl9ADldz+WHnPEOGwsRykJUY0erCKYFHxgiwgWlwbzvitSQCCcaW KIZUUpOqlCnUrAtH+j9q6wadtaAsTttomxo0Ce5Xdc/gVGyHHUGO6W50cgUUVJ6kesfA xWjvq4aKqiKrtEVNqHW9Hxl3GV+qV8SlNrCo/xOYlWzP9DfeANOM4i+F8fE8kD2SIF/G MC0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253182; x=1778857982; 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=t5VUvwmV5QSm/EY15P6N0RYrvzdvXre9m8Jp8WgG/ug=; b=idyv+ehFmyCSGPpLdElYeU/vgoa4qQwVx0h69fwUWS0WxvG6lOXXHZyEzKNWm7s6Mt 25YDNMQ96G2tt1lAAniFd161hBFC59RP2OybwVrMyOxZab5Nj3U9GUO/rWkMF72Y59m6 1urLNpgr2O+ZlI2Ehd6+xJGgsED5OmTlYqMwXUn9paqFoe1gm37ZVwnJxvTsYPrXgKHw KBINtqM0z5AAUWo+oFQuWyIcmYIZ1cuzvXumSJJlNbKF0o9QyxPdx10BIcWTE6T5jX32 wJcukxt5ur8ySNfEDe7Hhd/0S/aX4tOhQuOWxE433KkGA/gYKeHR+9fUwWnChPZhKDPh GXrw== X-Gm-Message-State: AOJu0YwcS8BVstIm48U8iGTSR7482UKSvy7DJVOFChKat0HJswQ7qehu Vt4TmVAtBkyQuDhJf114aiK4fXdA0O9xgqJFO4B1W3OEaYguw2mruixzh1hEJg== X-Gm-Gg: AeBDieuFsfEzkT/rv1hzGpLzL9EQOEMl1pKewXDrSVRLURSCDvS4Sk7sECMRoON8/PF sMBhWrjrneGu479gX6OKML7PxdovWWTQIeXRFYHGxNLl2RrJlf/LuTrLac74U++SFAAPuiMAMLc 1m1Vynjf8yoLalbAD40eFcUbgqPqar8cER+TEmTuhbpNbcDvZwwqwdwPhkq+BkIBYvXcbKBIFDs mOUwGUWY0i3C2gAkqp0VgomBAQKADPVheMnnSFDZxn4KmEdsq0xi0OnJ94hy+cnWj3gWrglDih4 dOINeep00RiqHGcaeXveIws7MShFS7dZaPDPJASfg0Kl8kgCEcDXKIBzHXWVuKbkmZrIBJLVf/3 kDprU2vTC3NmWBEIREv0kTtGCRMdlTQtDcgLhWjO/CKH5IO5RHU8bmowZdmXPa3MTeLDO9czyNk NWDd+Al7SOPw5+IMaWtT82TDNtLRThXJm8jS9pdC96bGH6WQX+BsHkGjdJaQUstlIbpcFg/peJf v7BRkR8p9dWVn63w4r/V6RVqJcFjvphtW0Uemq/Y4HxsiAf9EFQFAg4NBGaDVnjhoFQz+lJ6MZC QW5KpeTKTRbGItwFe0ldxSnz3r5Jgaqs93T0M3Iw0Noahgu2LkRtp0+dxDcgvnXwGanbqcBmG0P hJHYkaQ== X-Received: by 2002:a4a:ee83:0:b0:696:1791:add8 with SMTP id 006d021491bc7-69b25cb508fmr1726891eaf.40.1778253181938; Fri, 08 May 2026 08:13:01 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:04 -0600 Subject: [PATCH v3 04/32] 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: <20260508-mips-octeon-missing-insns-v2-v3-4-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier 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::c2d; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc2d.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: 1778253235937158500 BADDU and DMUL write their results to rd, not rt. Route writes through gen_store_gpr() so rd =3D=3D $zero is handled consistently. Signed-off-by: James Hilliard Reviewed-by: Richard Henderson --- 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 Mon May 25 20:32:01 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=1778253267; cv=none; d=zohomail.com; s=zohoarc; b=Gum1Xbr8C+tXwKc3eoOHYBA9Zazow47WFIyiJ7+EHt1Dacyuk1N72tPfHs2pImI7fG+lp81a6MLel9ZV3OwfhE3Y/1XrdfIM108Y94goD4gRkUCtVqTsnXS0lWoK02DrKZCdtp1LGSinSjoue7kq0OBLag+1wxxlgGwbXN56vQI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253267; 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=acW6Nu5e0alWeYzWlHZOT86DgcJ3U9no+Ysusur8uwI=; b=K5Rj3kwG9kH1nMdGbfx4utWU8S65tRL2oFeou1TVPgspMzufG6La9mcsfUA5TD3ck3ZRuvzgerTEL8OBye0lD2UU1uiz3L4P3L4nl2s+kbqpoHla9ud6y1w4/PWWK+wV4WIZLzpm8O8DJAfIY3FbTksKNpgiMtPsPcYoEwRhqhM= 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 1778253267593707.9070387873807; Fri, 8 May 2026 08:14:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtG-0002gW-L1; Fri, 08 May 2026 11:13:24 -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 1wLMt1-0002c4-1g for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:08 -0400 Received: from mail-oa1-x2a.google.com ([2001:4860:4864:20::2a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMsz-0001cb-Ae for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:06 -0400 Received: by mail-oa1-x2a.google.com with SMTP id 586e51a60fabf-415b23dd6e5so918896fac.3 for ; Fri, 08 May 2026 08:13:04 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253183; x=1778857983; 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=acW6Nu5e0alWeYzWlHZOT86DgcJ3U9no+Ysusur8uwI=; b=UQ61OB4Xmcc07vWlR79wUnmFqDjhrwMVn8bnVPgZT+1d+A+OJro4qUBlGH8ByJF3Ko 8A6kC5lNkSY9CrQQCZjOZ189iBozPGwDUpB7gLmNLxJpi8lFRemUECYgt7EfZTHH+HQY MreaHv/k5flGdemLMyGvz13zboA23y8s34HIcxOvilEd+XQ7yxuJFfZDj1yjB7I662p9 t/ReFSFiK+e9vDD742c98WXi8AYILhx31psmh8f6H3L/IP7VpwLMrfs4Z+s3iN++KICa Lm4NAQrCpPdhCuKbjUaDOvaWcyAN56aPuuiVRgW8ABT094Y2zgU37o0LFWRIRXG3N3qv m3Sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253183; x=1778857983; 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=acW6Nu5e0alWeYzWlHZOT86DgcJ3U9no+Ysusur8uwI=; b=R7+5///vAscfxb217abYk7daWGRxqBjG9yiXz8KCLLizXKwenP90ViJDBbqFwpP2jr jIWxrwsVWdz5LQuK5fZCr9KFk60wQZYv+LBfPRKIhQf0xANo1Mg/rjf7ZxHmV5NHLUVm A/fMYcyx0sTjTBwP18MvmQgZgzA1QLi9FrdZi7GuuDIH4kl17AnhiI3w7cILu5wOw1hm 4Cd6bk1RbJMundnhcsHFvDw7qscxYoNjaKZV1o13GsU4wkRs6Q6+uBBCTOJHcgRl+GaY QwnnN3q0PJWIg01l/3w+Pys5fsTD12WzdNRvO4qRUAoOmAEkfcy7FIQMj6W/GAVCF+Bw yPfA== X-Gm-Message-State: AOJu0YzBSiOXcCtNmTCPoBYBYjv3H2j+Pm14m1gCn1qmiq12d3CeQiq5 qEQ1/GaQThKkdT7g1bixUAzA1pKpCRP4awDZXdknR9cRxgY8/2BaFqCkbzhtVA== X-Gm-Gg: AeBDieveCRt3mYrYEpNCWIRBmIq4BoYuKHafCvDtyB98j6JzOeTWbQL5gEXdIeEmSiY apxcIBwMnJK6tktH1f1xRIaUbUMzUn89ohospjafzngiw4UNZmyP7y8VCy+tURgojtPQrQ2FFwt Yn3MKPBMimJkb/fo7ZwNBUn4M88A3A4CYCUttjsRv1Vn51Mf/fhkNlbj8EJ3PruC0F+byzw8KAY NGKLGYus24Ioc2/hWsxtuJaBOj1vhJxqN0qdM1DNIoH1x4GRBCwHeXMpFw24/RcKoSGXXqH4mfo CrAtyXgIbh3BVcA7DQT+2Ht63/bcyTFvEujP1uc5SxF2Ac/2rn7yA5E3/jQltakAdJfHbzciPlw gEFr+/HhnkMOqjzbmISQmQUiHYwHPQvgaqBO5m4swSGFffK2Ik0TXcbUEpjzToaFaV5HR7U2top oGOMjW3CW5JPO86AQAPH+2HjrL7JpU0bKJ+8NEjFyR957ZYZ6RjL3SggFgpAOTb7QIHXOISyRiJ nVUt8nPs3shw1kY0u/yiUe6Rh7gsq0PflTmFQ3dbzEqcg31vRO9tqeU/Ckqv8dFRoHTIJ+71Oyq gvu47fp47XBD62gHlKezKLn3x8ZWptXXi1UW3uAuggQqxInNkqLxH8oC8kgdvglrKonWaQRqpqF TGmwE4w== X-Received: by 2002:a05:6871:230d:b0:424:6bf4:314e with SMTP id 586e51a60fabf-434f64f0e4emr7998427fac.18.1778253182982; Fri, 08 May 2026 08:13:02 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:05 -0600 Subject: [PATCH v3 05/32] 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: <20260508-mips-octeon-missing-insns-v2-v3-5-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2a; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x2a.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: 1778253280616154100 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. Signed-off-by: James Hilliard Reviewed-by: Richard Henderson --- 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 4dd7626835..e69dd56c8e 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -121,52 +121,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_seqne(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_seqne(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_seqne(ctx, a, TCG_COND_NE); +} =20 - t0 =3D tcg_temp_new_i64(); +static bool do_seqnei(DisasContext *ctx, const arg_cmpi *a, TCGCond cond) +{ + 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_seqnei(ctx, a, TCG_COND_EQ); +} + +static bool trans_SNEI(DisasContext *ctx, arg_SNEI *a) +{ + return do_seqnei(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 Mon May 25 20:32:01 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=1778253218; cv=none; d=zohomail.com; s=zohoarc; b=cWy0mchum6GlcsiYtCEwzaVdvFkJli2h9dWc7KxfP0vB7oQ/SxVz9SesUBROt/7gxG4wU0QivpnunQhM5qmSxBHQ2zLxrfmUqDCwyrOHKQ4BCW8B+oljJX7nM+QUkijmoa5BqgkpzD8zX7CVSWxqL+ZGyuV+f8FhuWIz8yLqN14= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253218; 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=jn7Dc9BZ0EnH28GcvrrDxiPzdceXEJqh5RPV19BaFak=; b=HcRnTwXobrXzfkYrLxWVjWC3ZyKnKkORv4nqqOyquzMIS5xU+cpZJ7qTeYg2qa2zxM+Dr4ek+jSvlNie33BaLHM/aoei+S8KybHItHFkRroNtmcEi47zjRBJ65VAQ7Lqy/8meQyjIEqjbxcTikFCm5qEC+mmk/kUHGX1YwBwc8E= 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 1778253218268991.9361954356222; Fri, 8 May 2026 08:13:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtC-0002fs-RC; Fri, 08 May 2026 11:13:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wLMt2-0002c8-DC for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:08 -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 1wLMsz-0001cz-Sd for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:07 -0400 Received: by mail-ot1-x32a.google.com with SMTP id 46e09a7af769-7dcd89701acso1908877a34.1 for ; Fri, 08 May 2026 08:13:05 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253184; x=1778857984; 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=jn7Dc9BZ0EnH28GcvrrDxiPzdceXEJqh5RPV19BaFak=; b=PX8gE+2fJO6LlO0VPTYWXDoTAqU/kNQaLV2/LMq278y2vNZXzvpEJJJnQ1UZ1pxYv2 QvTxMYC0rex2QkSqdwLJJ3iWq7ZgEkOMqLlQ8iIMDpzAOfo/ZMCGx5RsRZd/FtaE4ihh er1iLWkFUhgWgOwWzFlrlSZXlbjVTYTVRZdmN7pUr2ms1HHCUi9q9XjzUKcbnz9OpaCy tCZDAdkbVLL+dWheta3bx8zG4GoVfxS+Gw1JlM3CMxHpwYjOjy4kPVLsHFebCCn0dISA meg8pH2IWy+aMoORVLihjTYcIiG+1qdjA/iefnpLjB/1RhrBfV5/6rWNfHWlYWU2KVZq pGNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253184; x=1778857984; 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=jn7Dc9BZ0EnH28GcvrrDxiPzdceXEJqh5RPV19BaFak=; b=W9WM5hF6JSIRIL9m6bySG3Hn8rMczYFKWTJMgbw/42XtaoeoqwltcyFczY+XmChvae omX2zgywxpQERU23150jfbn7S5mKs23fGRS9VQUYUEooLdwqt5yoph2fOg8A1iI0jDLH 3Hk5aQIyLfYqvsEGsiRhxZJ+LupdBgVlkZiqhAxsRJ0rkcuASNgosM3JnAGIWzwqTZme 7CZm0qO4CgYBfdDh8S63Qgw9lEXxtUDfgsKbs2ZgJxME8e6N2kY5xoIzo+1b48G1CHMq QIOvA7jGiw7O2IsJBkZ3RuqX5Tcny2fbkWLQMEVJzNhTqqTyX/VyEQ/T/ZySypjnZpZp v8FQ== X-Gm-Message-State: AOJu0Yw/Gv8w0Svqf6OBC91NKW8b73F9VBUNC1ZPiA13Lawf8UNBC5dv LwKUyN+vaJwgDpdjuzh8+3ls5xPmCPMCDSnaldh3p+HLQ1QFj1SZzBnIVi+GJA== X-Gm-Gg: AeBDiet8ebiC5YZUi77/8kzXP35QcNrTgP1rsU7LXF+7HPK09ASnqn3rb/Hk0cg/GEx gMou8f3l0kPE78QAc8l6BVMuZlFCjELPZviXZR7HvciWPP1P3J2uzNCtXmG2A17njl+Nhe8W24L 3Ru5Cwkt+UsWMYF+2m8ohVHgpBPauxRXX+2U64XstPtDXVjH/HgTNnVLQVjy2hH9hU1o1twijpr rUF5PqMza3vP6ZF3ebN22mkkHgMChkLqYZszSEDPZPP92uPEWQd9sooOANSIm7nAN4vZU4uMBN0 kiCysgh4tLGO/6fAakaj0rbTFZC5vWKOFnSgdgVAZdJbZoFG60VNFaLJ9TiPJN/WPsue+ZRUUAI LVc5/59FIkErDVH0ZHkSLz0COpsmd3dtxai1X93FZypYi40uB39aQtybPVLNZ3nK4gcuoZDHIpm X+joOBF7tWSuNH0za6XhAfy+rxDXPkB1T76CU64gduE38Gkqrm4ZkXVCGiaWOpzZ3o5Z0Hv1anr lyCGYlSqVq6KUuahtAOPM87OVwyBL6mgMiWoP63cGAOx9+bJWkZGB+Ma+8lCrvk2h/60ruY1fZD Pz9PKaCg9cMAS7b8rj0qQsm8cH9BhkNReOv5o5iLip/YwDFUaLrFl5u5ovL1AfY96ORrlUM= X-Received: by 2002:a4a:ee04:0:b0:696:8e8b:20a6 with SMTP id 006d021491bc7-69998cbcbd4mr7548754eaf.19.1778253184265; Fri, 08 May 2026 08:13:04 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:06 -0600 Subject: [PATCH v3 06/32] 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: <20260508-mips-octeon-missing-insns-v2-v3-6-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier 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: -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: 1778253219793154100 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. Signed-off-by: James Hilliard Reviewed-by: Richard Henderson --- 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 e69dd56c8e..1893bf359f 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 Mon May 25 20:32:01 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=1778253301; cv=none; d=zohomail.com; s=zohoarc; b=H18Eu3SGwHXYPDE2UzBpMBFBzGhMXmydNdIYrlcc1pgPdNFv4s1z9MuEMoCnxfNh6r/p5mBnXyMk7n2auP23245FMUqcqXXrCsaXT79jn8bHDXHCi4VAJ8X/iQYeXhezYZBjQQzeKza6sTN/oOZSw5XKlvbliqtkLupHiHB/e/M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253301; 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=sHgtjD14wO1k4IMIvHt33UoGD2X3GvWB8k5KsdzFV88=; b=kqjygssfTpQE4jsKwm655AMEkrGA6OM3Gep2rUE2SKjBYste8p5NNhae1P3g8TUcStVWeN9nhvrcvolV6xCjvedke3qJLT1n6VE2p3IB7GyfyC4wMaoBbwMUJ0JoHHTRa/icz9ZGvtrWF1Ncr5PYSQt+Z/1mS6WEgBD+dPd+Czs= 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 1778253301983836.5189171759213; Fri, 8 May 2026 08:15:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtY-0002oQ-Qt; Fri, 08 May 2026 11:13: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 1wLMt2-0002c6-Bm for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:08 -0400 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMt0-0001dQ-L3 for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:08 -0400 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-66ee7b9af94so929110eaf.0 for ; Fri, 08 May 2026 08:13:06 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253185; x=1778857985; 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=sHgtjD14wO1k4IMIvHt33UoGD2X3GvWB8k5KsdzFV88=; b=l+e2XteYDP6dSpBNd02SLDyC7CCW0BMbJUCeoMrb3TYr4oDK6oHFuZqV5D2L96YMTr /1jP7RrIGHlDt1Iam4OEMIpjZpUfnfCpjYP7TkZxePsnYVDTJC4TtMog8CRr9Vhlv71k U+IPzxrZdBcJGNklvMoyymUyQ4iGz04xE3XMPwiy5U9gEnVPt1SwrNdfgHIE9+4+qAdN jKrXroNDccEGpWWDlIbnmn0xAy+2pymBJADR4rzs42A01L9Rq8O7XJ/byGREcDMESXX8 FEmcAs1VReWyaC39hdI6+mktihhp5S6ORdpqWsdmG+xkNNzdCj0EizDdG5UClmbzSB2e p2Rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253185; x=1778857985; 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=sHgtjD14wO1k4IMIvHt33UoGD2X3GvWB8k5KsdzFV88=; b=oqAFVNaSuESkLVglzkTbLVrjlGDCZ4eqmviiAwgoGWk8pQ0vHlxT3RJQl+YwA0Trgu BzbLf0xAt+nxxQNdmdphRLNqlki1jClpcthHSZAxhXcSm91FnfuwXKPhBkmgRGGYbZ9O Bme6imHrzJqHK5k8djukf+kPs9ulEdg/ZIFTmU4qeW6TtvG54rTK4AfHXbqrsh009mRY +LMGDAZfp2WGcYx+DOPxm3TMhYXtXvdC3T3M6BJERKAc9IPXqDEDDn5En+Xi0wRGpPhH tK3743Cm3cHS/F1vDPm2rr6ugU7UAb10Hn010pfM9YISil2Iw5Pu+JbEqowuTMkN/0jI x23g== X-Gm-Message-State: AOJu0YwojCuW73trs7RzVNDm++TAZC9xcJfz+I+9Tr5VBpmFdHL8XBoS 7ZAHpaon0iijXOSp1sf2YR3Qf+zCxI9RFTHAkSKMjfxKJFsBmn1vqSyrcQ2Kpw== X-Gm-Gg: AeBDiev9x7xhY9u7Vr8/rMMddzXO0XxO2kyPwCvgaaBZyMmTkIhPmwXWxCgLI6fd126 1rBqNwZ3FqUus10s0h218ZlUV8j2NZdXjJsml6XIHfJawlgjNvNMP/4P8a/pGUXY0cO23TOeRd0 C4e8OdomYgbeTiouOALotHF4XM1J+k1p5/ZdhzehqLQhoRHdHLUr9SUWgXgwRVKkDo5adofhKMG XTu9uQH7rkka4Z06phgVm+vsADWH8/c2IkZInlh5Xh2Jf2U6O7X0z+5VPV7zmddmTUYhh4T+0bF mTqc92Qex+GmfAGci+yM18mQGhe/CRmErQttPQtqZ3X3RrOzFryqFLG+JsGn73PKgYDvddAZM5k pV6xIrGbcL3CDSfD2/4+5Ej1wlIJeEjAKYDNimbGBSwBtyUhrsqoIlTioOP6Ga+mupjF0/S+uJf xHNbs1zz7VvminOMvg6OKGQXuqIqnkD8daiJxQC1FVTTp3uF0su3zPLTnu2/aZskaO+GDSa2R7s FA9BGqaNvmT0lask1lAQChpCKzXBEsljp9GKJhOtBXJpBqHGaz/k86P3RQT4EJWuOF5pZFDm77Y P2cBGYSYtGL2t2SyP7a8Wzmc0FbaQE4hEDHa2ZpbnWxPgiD8kXgG2uXlGtqg6X27kJWI32oCbxl 6SWG7lw== X-Received: by 2002:a05:6820:1529:b0:686:48b7:d822 with SMTP id 006d021491bc7-69998d2e673mr7034841eaf.39.1778253185173; Fri, 08 May 2026 08:13:05 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:07 -0600 Subject: [PATCH v3 07/32] target/mips: add Octeon multiplier state MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-7-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier 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::c33; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc33.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: 1778253305937158500 Add per-thread Octeon multiplier state for the MPL and P limb banks used by the VMULU/VMM0/V3MULU instruction family. Keep the storage in uint64_t arrays and migrate it as an Octeon-only subsection, so later instruction patches can update the architectural multiplier state without mixing state layout changes with decode support. Signed-off-by: James Hilliard Reviewed-by: Richard Henderson --- Changes v2 -> v3: - Split the multiplier state out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) --- target/mips/cpu.h | 4 ++++ target/mips/system/machine.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index 84d12b77f9..c6d75c67ab 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -497,6 +497,10 @@ struct TCState { target_ulong CP0_TCScheFBack; int32_t CP0_Debug_tcstatus; target_ulong CP0_UserLocal; + struct { + uint64_t MPL[2 * 3]; + uint64_t P[2 * 3]; + } octeon; =20 int32_t msacsr; =20 diff --git a/target/mips/system/machine.c b/target/mips/system/machine.c index 5880b401b0..d6d6c23ad2 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, 2 * 3), + VMSTATE_UINT64_ARRAY(octeon.P, TCState, 2 * 3), + 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 } }; --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253477; cv=none; d=zohomail.com; s=zohoarc; b=ZKXAAN68NsnjK/JXhOfn4J6M+wKiTxYUOiSBDkdmqY5gkDppjas1rFxp3cLfkK9cJt3dKfKneZAVgsnUOmeuPuBjaWd8MfUSXCuCGwzB8uUCvmUS5padCaZ/b+gK9WYTvh3ovk8TKfdMvUb68pPeEimMqbR2Lix3KeWDtHE9cSw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253477; 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=Kt/X9h3ebfY2yAsj4mYC6DTi18sxMdPXWVIaTnR56mU=; b=I3L8ppRWF+fmfOoNWaxjqSCd7FuRoG0pdPFIc4gOOKdaRSJ6H0Mp+ij5ubNdwVPIyQeZy3yuturfAZo8L1pQFiIl/eFG1VBPrP1O3uO0aW3UVUT+9+G1Wt1tH6IXCJ87sj40sKn3ZscAID/OmpiHcwh/Kx7MWZukGrFH7G+rIdc= 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 1778253477985480.60907867438823; Fri, 8 May 2026 08:17:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtO-0002i9-6T; Fri, 08 May 2026 11:13:30 -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 1wLMt3-0002d1-HR for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:10 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMt1-0001dx-Mq for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:09 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-434e69e943bso1631002fac.3 for ; Fri, 08 May 2026 08:13:07 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253186; x=1778857986; 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=Kt/X9h3ebfY2yAsj4mYC6DTi18sxMdPXWVIaTnR56mU=; b=nLmEv3AXf+JF7ffnSaJ+vKqTipyevYSSp0Vgpe3Q3uL4U9dO7jTy7nvp+vl0KgClRd f5K8WTluQfEYo4+r1CDua2e0dvoBGEAOPzkZjcQH3+APl2G4cWsy03IcsOF/nkhfna+u M4nOsRbewq0EYh1/1I3OYRmd4u3pOKmVeVdzVjFJJ2wM4NvGAcnQALUYMMAZ/25d7qAz lfp+cLuZpU9rnmYXAxkB7FhvKLyapqgQht0K2MTPVsyRoqd5fqgpneEBNug7AK90+8CP /zpB4KeEghrDNAycHN5QRAytnKfSOchovHxypcR7TSU66MUmNwFiQsD7mZFXWQacS5Bo d7+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253186; x=1778857986; 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=Kt/X9h3ebfY2yAsj4mYC6DTi18sxMdPXWVIaTnR56mU=; b=BVyVF0w0OyDVatDgqcnuhL8LLtWxxVcXsYjKRDnKz8zT/k4R5l3R3EbOGj9nMdCW6h DMwvfDJCPi27IEDMH+i1MF+HIwAFa6cqkSnkl5oIHTVsI8y37bhi8a590D3QuSE1F/IL 37o8vHnbkMWKFZEoamtbklNDd38AfDMuJH+kCn7nBBXrut4Wd93mPQ7S/XArIDCm0msR fSflWFrP/zEhidnRtdGpSPtcO4X28Ah6mHR+a2iVluJnR5qklS+qE4QVB/PQFeUvGgdp PT1JfHCb33zLvTy6ehFbhACGxBkZsE4jloHcB1Hq/DIlTSQgFvW+pyHI0td4Ucz0uds7 oT3w== X-Gm-Message-State: AOJu0Yxf9tfIZ5baxFeQqnAa4YEDLoxok2t6VtB4ZUc3XGsMX3tKfAjQ QxVSYUJm2iwsNsvFHJENiNzWZMrWY/lF9rcU+PNzhLtmmyBM0joErMK1AJsCdg== X-Gm-Gg: Acq92OEUfdJeu2hilUgtC/PGUkbHAj0jJIQas3OMw3nBw8LaqKA2n9VMRPr+hBdFUe4 ZLiP/oqFc/f7AfzUL1sVCraS2fsbx9DNMc6ZX9Uic0TFq4J3iC6ijxijRlGN2uisjabJ28Zwvli J9ONtSpWlqAxA6dRqSfB+2Jkr/UOZ4/EBPhnsuftcRnWHZ5iguXe9oYFAs+mjIj6WjNF3L8AfeD dgdUBjcOAfgQHdw6lO7WJmwZPnVI3WJJXyBNAKlkGTxK2xmYX7t3mJndtujRl0S8LAG6pZ1etPi m6AiBQ4BepSU6WZ8/a38Qd3iyxxnDkH46OTFQ2SM6ueyaODbAFS7WO6pqtdwpOgICUPjyY4J4S0 IsGAfV1INU1+jEAaGc9eKmfUSbHCCkKRIja/8l3wNS+kG/lBnBojDn2d9u4U/D5LrOo4im+2qH3 21YPXOAkCm6HxGNGR14bci+pQMXNQ8Wx7lIAH/9l7hyuXXusYb/0QEdxum4Iq7nUjeL3g+XT7BE 89o9XGj0HWWySpjCVlVX9gC54la0Qk01nxgmyFIoLeXOkBAdsE44uagccsOiR5lNitTWQvm5pbH M4yiYSNIS+1KXoPYD/JFXjbAtta26QDxyyEWFTD2OeXTm94ePqL7FsmKcKhjq6Wvm5WoZgI= X-Received: by 2002:a05:6870:276:b0:434:7449:c153 with SMTP id 586e51a60fabf-434f72597c9mr8618292fac.32.1778253186223; Fri, 08 May 2026 08:13:06 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:08 -0600 Subject: [PATCH v3 08/32] target/mips: add Octeon LBX instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-8-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::31; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x31.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253479976158500 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. 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 1893bf359f..ecdce6ab9b 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 Mon May 25 20:32:01 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=1778253376; cv=none; d=zohomail.com; s=zohoarc; b=coMvSBxr4VxK0fyhDHSX8Ja5NHKyr7i4eE/FdGlkcuAoqufUt93FN6Z10lsKiD8rxZlMBIs+udZGS536Q4N1TKJT3Hkz1orIc22QPLazymFhqrWH9Hwlzol+Fjfz4ycieMpOXcGBgWfWrqFCdCsIe/f+zHJjBURa5A+cyjKPJ1o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253376; 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=vKRIKunBp1BcQ/wvFKLfVR8rprQQ5oAvC03+LhObVds=; b=ATj/Fk6eYtkqLozgYG1OnYZenk/qz0ghKjlOuy5CAdjhOnoDeT0rIiZeG4PHJdG+jSTJnydEPP8EGrwTr6iTfEshPctRXCxFWzr/nCrmYnGvVt8dkvdZzqRZDnZzcYg32A1OXFCABhK0La66XHdvA3IVeMPblfyEjkdnMpnBxKY= 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 1778253376052260.1324729304828; Fri, 8 May 2026 08:16:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtw-0003My-H8; Fri, 08 May 2026 11:14:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wLMt4-0002d3-4x for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:10 -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 1wLMt2-0001eE-IO for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:09 -0400 Received: by mail-ot1-x32d.google.com with SMTP id 46e09a7af769-7dcdaf06498so1573037a34.2 for ; Fri, 08 May 2026 08:13:08 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253187; x=1778857987; 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=vKRIKunBp1BcQ/wvFKLfVR8rprQQ5oAvC03+LhObVds=; b=bpZl6x8Ca5nkSIxQefoMvreUAPHtWlyJWaoB60qVQcjego7PGX5GepMhkskTQvSIxZ OPxECUIx7T3dBH6YvnGMTO96kRR5lcTi8WPxbWjP8qROAIDkc3zMLWsBdveovHNSpiqg 7WMFK3xfRaUarRet1SSC2Lb87UosP08mG8vclYRq8cHJXipiWCbbBhK6UDqre8oJqY8r XjrCpYaNy7GxgoqJQp6E36XpMJ8ys6BxiV/5Ry53WXP4l3hHXA3ZPGZQI4W3qeYVzHLV 00JuIbud4P8MD9+OR8utAHF5b5aNuf4D1Vs6kAK5OEMbTgTCVHqKkkvE1mjl/b3BMD8h kJ5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253187; x=1778857987; 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=vKRIKunBp1BcQ/wvFKLfVR8rprQQ5oAvC03+LhObVds=; b=Mt3DlCUGnm1c9l3qVhM/P1NhMeyFgux7+HeTEw1ZMC+b7zreQ1iYCAxihCFdH4US/X xLDpcByxD990ibOnukLywGOajmzYXw+sSzk7bzL2O7rb5rvZ5oOFWgRNSkBSF6wVtRYL XPXMZ8Oq6DSubdywoYMlX53HE5SyXVYHr3P3y6JZA7VR5dUcc+EM992slgOcXwIRmKCR RujGMEm6tl2CszPesCLPG7tSHxyC3rt49lw44Ez22JjIJEMnoaOyxU1KQ3zCZRhKjbyW 1OuNU/AHSY3RXrp+W8mVYUCDzimfMen6bHUBDdn1dB/MaKe1wl66fNd4+GCWKo85chxR j7pg== X-Gm-Message-State: AOJu0YwGfyKSBxjrshWiDuuL9qlGmveQabT0o/jV3MNQFg6NGq30ofke ifJKCOSQCanmBEuAJCYXqoijctYZn00dD3inKmthfR+beSkxweNAWlw75VlFuA== X-Gm-Gg: AeBDievh9m9RanWanwmTmwW0eBHSaHCbzt1HbEZTR/b/pUh165Yyn5LdQD2F6rTwo66 M1vRB6pkMkqPVUFGHbE98vHInRF5/BYqjUr6y0JybJy3TOD4sz88kQcSpyY2gyTBwdvdYRoJPef Xz/Ib7QJeEisiie19ZWz1Q89iFTd4N0Y637M9QKnh4QCMIRdsuBypU7sGnbQw34pz8vXLVC9Phl drr2sEgl+takXwhwemG4qdFhlZU1D9MGhH8fF8L0nxxqGAeUSDe+9oV2tPJaHz1ysNmuQRo1a3F vg+9EpYz9nMaIh9pZ/dnXGL0V/KMh0GxzJzFzb1/cYYCPZRDeBp2SZYAj4FpdtbEXDKBnKGQ6p/ ok0xJBHUxY9kUL7eegr8VQ8eC3GyyDGWv6o1zccrDfDMrSJp7IWH91wit/zrsew7vnL+apivu/V 6vWU/vmQJgQha+wbhqJ4F5g3+L3j2b63KWv8JpZk5ZcKjQYJthJvpV/Wsj6v5YCQoNKfw6Pcyeg rXoQHTEvpi1C+tRNC9oEnEd3nEbLuxV/9Urg1UtOOujLL6ApaEVX8TkpYEWZMM9psAObCs/Fy8i 5pD1CBbeI9Vg2Lf6vAUlvIAp6mfaPeqwwh98rui3LKX+9fraVAzVSfaPAQbYBfYrn3OSLwY= X-Received: by 2002:a05:6820:1792:b0:696:2cb1:a007 with SMTP id 006d021491bc7-69998cde964mr7309534eaf.24.1778253187240; Fri, 08 May 2026 08:13:07 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:09 -0600 Subject: [PATCH v3 09/32] target/mips: add Octeon LHUX instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-9-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier 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: 1778253376996154100 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. 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 ecdce6ab9b..5a189c6484 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 Mon May 25 20:32:01 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=1778253418; cv=none; d=zohomail.com; s=zohoarc; b=RoJ46lTjmZ8CHb9ITVyddhnBr2ePETp3JQFuLpE1zCgzEj9GkjWJ8QOxhMJuP/r08iafOjGIycd+IDBUu/FqjDd5vrZLHkqH9G6dsH904UTLjJXLSFxtMNX6A2eP+8PMs5aSDh1diY983BGsfh2zLE8mh6L8VXsUNSWO99rdatQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253418; 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=uvnFQCXHEy097J+U1NUH1ixb08fX5jBONyYik2NH3Mc=; b=RzhagxvM/QxJbOmR/jicadyOWWJ350QuuNyjrxFt13cb77Tn6BP7F89QQhBN323JhFdAUFoBMg01hikw97x++PaltK02Jc/28s2EL9knU2YZlrXamzoZszE1v+/yHZfwl9FwwyuTZTLaKaKs0sLs5aL4Wnpy3rvMMDXzNZANd7g= 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 1778253418156951.2777126472216; Fri, 8 May 2026 08:16:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtw-0003Lr-At; Fri, 08 May 2026 11:14:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wLMt5-0002dY-2q for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:11 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMt3-0001ek-Ig for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:10 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-40ea611d1a4so897815fac.2 for ; Fri, 08 May 2026 08:13:09 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253188; x=1778857988; 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=uvnFQCXHEy097J+U1NUH1ixb08fX5jBONyYik2NH3Mc=; b=XuyumCsajueBXXWcZ+4hJQyyjJPAZcmMoE9cGwCICF5sgj4Y9OKzpq8QykISDzpUwC c1bHVr6tjcllVSlyXYD3EqP+t1JzewW1JiayElTMHwSRRXv53xTwqNJX9Y5Jv3J+yZuo FurgvYFXmgNeKib9PpdELHRk5TjZl345eQbWMko1ZO6/K3Nu7f/3pDkEoMcRylNpgvt6 ECrkmiAKS9fYp+hDl2bSsKTgKFOutuLGP3LsGetCd7HNQQROcyv0wrFblWDgoOnDKoed AcWHQ+VgaXuAjacjmsnnPWwizZzSjbb+xZ81T8KsaaEACAg8e5HFIuj8FRIGsyfRQN6g E0ZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253188; x=1778857988; 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=uvnFQCXHEy097J+U1NUH1ixb08fX5jBONyYik2NH3Mc=; b=Te9AwTw4K90krcYxYhi+H1mf873GGftMpYfze36nD/Q+3xIkS5Opzsxx7IlSmVshZL X2vPYMf1AyB38yqczgXgc6qaDpnK3AzGww3EggZoh7UizKvtSPNfWp3fFCiFud5l6yqo 46UOdEfuE6odLATRAxnBMeYAvotx19Zf2Zbfg/3mf1q7fRMJ+lbdOA247rAio83jWSea dOk4LwatJCAPgoJOrnx3DQCv7M+s94LPEhyaYidmEqLywQ2OvSm8aMX5Xvt8In6PHsOF rVnDN5AZkYUOpuiP2xXEf6lStZGVnUCzcFVMRbIP6YAIPMcLzQXtWAfquSqR3BM0EMzS ltUA== X-Gm-Message-State: AOJu0YyFMxxyLKOTdN/nsYk4hJw5UK/8XN8kXOSp5jo7Fi3mMomRlIv0 LS5MgbKsaP1uWmhhF015meFkCm7jnSRUdSHrNnBMHH9AW68B53/t0BLgzHLuWw== X-Gm-Gg: AeBDiet1c2qPIHypE3zCdArVH3j7kbTmw+9qOwNAC4hJMT101U202BhJLkoTxPSDeah lna4MJe3JuhdxTBdQ4l7qdPk7/dZEsvsFMnUa7zTSBMNm/vkOvNJ139aekZC3jxWSummG7BFLLd 3KBx6WlctHyZ9EkJKeu0ggyX5p6mzGBOcfuEVYmJ5Vy3WTjc71C5k4ZYRMwXvz6Ao5DGP0dc64w ear92AgEgpi3oK9qneJ/jV3lLofYS+0Jv4mBmcA/+KkSklTYTnh/wQwgtOL9UA+GPsg2PJ6Luhj wecSBkxVkp2krVP8LTS0kIw42jRCagBq/VS9g1ztzjqB3ebX/g0XxNgUcddB0MVEXHhb1HBK+pn Uy2R8NwgqL8l3481Ga2T2kz1ffwsILC873JNLeMuB3oo7PbV8vAn8gRW8ioZJOFlCB9+MhAP7Pd WWUWy1xXUYDNRbyvNu9RlFpx7aibfdPtd48w0wK0I++K8iu2OQDb3uTl5+WRIm3L0OzOARZ9rH6 3ZQcZed5zJLmFO+VRvH5nCO43TCMVVPNcK0giKqLpREjmAqNyeJEG12i7w9sXMEuT6cadqSPM21 pC4uICbd9NCAkTkGz20/yajDzs/64KpOnlJXShxiwTdimu88qqLI6kNmmoNdX34O6LNnxL3aJrT 52KmMLQ== X-Received: by 2002:a05:6870:c69c:b0:423:9228:7d37 with SMTP id 586e51a60fabf-434f588f648mr7435994fac.16.1778253188171; Fri, 08 May 2026 08:13:08 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:10 -0600 Subject: [PATCH v3 10/32] target/mips: add Octeon LWUX instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-10-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::29; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x29.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253419458158500 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. 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 5a189c6484..c93eff59a5 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 Mon May 25 20:32:01 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=1778253466; cv=none; d=zohomail.com; s=zohoarc; b=WYs/MPyk+nl2Fa1DrUTd7Fh9Q5gpfbvRDSudonnsP2D/IaLuNpz7A9PZoVkyNT9QBToIw5ogLV4n/a1mWlbnnlyK83bdYJiQ43/4iK0qVtaix8VIGCQDyR/ph+Nbp1DitYIhGHeXWc03n8vr9Y1UbkQjkqp6SoS9Esm4voAxCjQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253466; 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=7+lYBCp3Rm8qO6ote7GQN5rQY0LcgGtx5r0KxlL36s4=; b=SQeLTpFcyLOrSe6eQJkFPboXMTXjGyMuDpc2m7vN8VsJcA78onY3Z6Q2DPc0W58lMqP+bzB+5HjAuvC6XSyhqPqvhkw2cMvx3JJzzqaKvAI074kQwO1muIUisaHGRp/ROzcFR+RHE49M3B5LxrUaMNA3UrewFHluQmjN5Qe2qjA= 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 177825346637913.276131075369335; Fri, 8 May 2026 08:17:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtO-0002iI-7O; Fri, 08 May 2026 11:13:30 -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 1wLMt7-0002el-91 for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:14 -0400 Received: from mail-oa1-x33.google.com ([2001:4860:4864:20::33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMt4-0001gb-R8 for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:12 -0400 Received: by mail-oa1-x33.google.com with SMTP id 586e51a60fabf-42c0b0ffac1so1216936fac.2 for ; Fri, 08 May 2026 08:13:10 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253189; x=1778857989; 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=7+lYBCp3Rm8qO6ote7GQN5rQY0LcgGtx5r0KxlL36s4=; b=EoSVpMyD6rUW0BTq9RCD6l99RWdtEpps2khBLdSTCvwojnnicupHacbaejUV59Sgiz qD3t2CnUUIZjyaLQgTR0lBbu5ax/YkWm59QIyOYzb1uy7/PL/VHQYpjF8ISFf4K8NSCR Jc9vzRs4DKZlYI4YTogo8fOVAudVU/svg8Qgb+6Taq+mtHEKyCrceuK6whk5W4kTx/Gh qJUW/zGIM4xoj0tcGNWl2Ycj9OTIto+IfpsojlByBl0txdIhgZTnnAivSXKD7hmJnqib YMxokTxyOdkhQ7pf6Nm959kvjHrN3DNLOa8lgbh333OB6Lqnae/vuWFbk18ldt77ddDt zH5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253189; x=1778857989; 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=7+lYBCp3Rm8qO6ote7GQN5rQY0LcgGtx5r0KxlL36s4=; b=AoEyhNjOTQ4hhy/E+Wb4qBD3T7yJ1qhEP/ravji6B0X27NtriHn+WJgiLaa52qHl8F Qganrzji/T+/+6VFqmQRi9eDThsJLtoDbokfKNvzfpJ5WOxQrGl5/6oZYC9bpDeMmn3N lRPaZ/VXbNkmxm/AYn8WDdqK2kK2dlZ80mzFc/M1ekExOqNB8QMW7k5p4+z5xIMrAhqS whMqFSFkmk+dGWnnybKl56tEHqgsBYiuxT5vma8G4dxeVSWyx9gw1NE81eKHDOp7zf1v ZCY2j4uEx0T98TZFZLCKVQY8UBmuHXLHDdIkXDK+Eg5VgKoYksTA15g9WnTm37z61eWK +oRQ== X-Gm-Message-State: AOJu0YznnAvjOI34zxCtiNcgTLqCCTsIN9sAVjny2nAOUtUoiY50XKEa RySRt3z2Nv66BfIS2/SVGyJyHcedXT9gRmV46u61KWDoQZfeVFToCJPES1XclA== X-Gm-Gg: AeBDievFl7UmZ05giic5n2PSyOZZdxyMx1DgtAkCbX58OCmkCeD5FlqPOVW8KLgHMlZ 1RKHEyXKfgQ3n0BNx6UM1L5qC2as9DnPGUmITc7ZlD7gE05LsPlpgGYPboLQmmbl1HWGNh66p+P 7UKUVSJ9l/bGoQ2uIov9Mo4bQmMKF6jxnPYIiOAiqoimbQTZTzgHq0eYQMPeXGrujZRVEVYyFGf 54CxOEdfId3ofX4lIbsmQKOqyQd0ofBoDs9v+ISDozNSvuqKd40NBbazc3OJhsPf1Mz7Z9gc5fz vgEEplwaqWogUjHTmGidT3RZ5WM8rtn/9+cl5qOn6ovcEQ1iFHlfom0lCo2MQuqCBhv/8z5GUfv VtpKiM9JnHSIRCYTBMNY/rF77qy2ZgKQsSJwBRnu/m+lhFA0ewPAdilS6qtv6RMZVShav00Jm03 S0RjvH3+vYc0HlK9hl5NjKjoAiBP8UYqJLC3Ld5W1hIjNBgJwiIPzQ+vrT5JoC5TGJgKyyFC2Ms MiHpiCmzgrxQ5w5rQ1zFHG0Wf64+XFUCIOxfj/r0vi0pGu6v41Fy7DOhmerNGnjuvNQorV1dTiY grN2BvdaBy6lZrzkUjFgBX+thbNLpDzsrr+ZTFHI/jSWJH0OiVomVSSyCuYwpajp/UhFyxM= X-Received: by 2002:a05:6808:181a:b0:479:faf5:ef4c with SMTP id 5614622812f47-480424d65eemr7902619b6e.32.1778253189039; Fri, 08 May 2026 08:13:09 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:11 -0600 Subject: [PATCH v3 11/32] target/mips: add Octeon SAA instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-11-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::33; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x33.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253467867158500 SAA atomically adds rt to the naturally aligned 32-bit word at base and discards the old memory value. Implement it with TCG atomic_fetch_add_i32 using Octeon L2 transaction alignment semantics. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split SAA out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) --- target/mips/tcg/octeon.decode | 4 ++++ target/mips/tcg/octeon_translate.c | 27 +++++++++++++++++++++++++++ 2 files changed, 31 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 c93eff59a5..19535768d2 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -161,6 +161,33 @@ 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(); + MemOp amo =3D mo_endian(ctx) | mop | MO_ALIGN; + + gen_base_offset_addr(ctx, addr, a->base, 0); + + if (mop =3D=3D MO_UQ) { + TCGv_i64 value =3D tcg_temp_new_i64(); + TCGv_i64 old =3D tcg_temp_new_i64(); + + gen_load_gpr(value, a->rt); + tcg_gen_atomic_fetch_add_i64(old, addr, value, ctx->mem_idx, amo); + } else { + TCGv_i64 value =3D tcg_temp_new_i64(); + TCGv_i32 value32 =3D tcg_temp_new_i32(); + TCGv_i32 old =3D tcg_temp_new_i32(); + + gen_load_gpr(value, a->rt); + tcg_gen_extrl_i64_i32(value32, value); + tcg_gen_atomic_fetch_add_i32(old, addr, value32, ctx->mem_idx, amo= ); + } + + return true; +} + +TRANS(SAA, trans_saa, MO_UL); TRANS(LBX, trans_lx, MO_SB); TRANS(LBUX, trans_lx, MO_UB); TRANS(LHX, trans_lx, MO_SW); --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253241; cv=none; d=zohomail.com; s=zohoarc; b=jjKdqBbJKe4q/T1IYYCtBQDHgNGbFtMyACFTO16SOJ1N4fWyH90VRVdY0HXhXJVIm2M5Zk/rYPtePN76fT9byeuhzKiuprNIzyevwBQMweuc+nrx69m2RzdxmG2tofjQghDZvViHlcWpFBCxPrdWy4XCPDcAQS06838teAA4JMo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253241; 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=HOILVDpaMznFWxynFwOxhUhVu0sGJ0ISaYpQernUqr8=; b=jEGgpXsPkXkW0A8EJVXeZNNCXuml5HOBgSlZwXywRZMVk0u966DkLNLcE0AQw+lLjQM7tonBiaPW1T3WHx6VVI7VkJTBv0a6LyCrSQKE2gsus4imLe+QtrxkKlQDxQujABdVchA+Ikho4AsuBTrQ3K1YwJ8FAsiEjH7rapFJwBg= 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 1778253241540645.6311368803865; Fri, 8 May 2026 08:14:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtb-0002ps-77; Fri, 08 May 2026 11:13: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 1wLMt7-0002en-Ko for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:14 -0400 Received: from mail-oi1-x236.google.com ([2607:f8b0:4864:20::236]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMt5-0001gv-NO for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:13 -0400 Received: by mail-oi1-x236.google.com with SMTP id 5614622812f47-479aa2dbea2so903201b6e.0 for ; Fri, 08 May 2026 08:13:11 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253190; x=1778857990; 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=HOILVDpaMznFWxynFwOxhUhVu0sGJ0ISaYpQernUqr8=; b=TkmMDqJYW9PBO5igHSJ5KMicY314QvgItCuE9Qw8c+QdgeFhFpSNPvRTaMQLcCrKDV K0ujn93ZX7TIZMheG22lJUJqQUNfXGCiyL9c9hYuTOuZ19veT23jPqMxmH3ZHZ5rUVsm zLKY7xiNrWQRN7ANZpivHemomuKsCD4ALN8GV/ioUvQp+PILlkPsNPSTcl8d4eQGtRZY u9qCygWzcypwGF0j3bk8PQw01vFiSzMNDFBBNCUYYs/rgYuMKDtN/0fBmwt7NbjRNvBi BuGjaR7yAtEQC2q/hc+nmy2xiQ/KsoWz45y9ShARiGVBFDej0Ufhn/mWYJSHtn/NrH+5 pheQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253190; x=1778857990; 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=HOILVDpaMznFWxynFwOxhUhVu0sGJ0ISaYpQernUqr8=; b=oVeAKXqL6JNBQ1hqfOqu7Fog/ipzaX1Aq32AaRvSOjbapJSVLyHQxD/0xz1E3iZn6v e+jbCNdP68HE/Ke1u1vke/VIXU6Am/B7nHtP+H/lKZGTtmCxYRa2phOmYaEvZ6Ae98G2 rBbs2pitvlszEDnsRa6UjtHr4+BlhZXlcKhOdMJdGDJmOAI05CAUGQ5ZyxroAg/P3Q64 rnjcmwr5fug3LLbooED0q5sQp4J9YpslwSxIrU20pyC+5fUKMxapQ6gBJDDYIRBO4NbG 929yd3vtH6jhskfmhDpBWacjHgi9emVHu7SwsCmP4QxPssLpMJMbx/XgbiLcamDGXt1E VzGQ== X-Gm-Message-State: AOJu0YySo6h6VACmR3x0TeLCRd79jDAkiwH0i272M4AT5SoNKXa5bay8 KXLA/FUrbwOaUhKrixBLiN5kA5sAriqjqQeusYw+gzQVrruAt0P7ONWgc5zANg== X-Gm-Gg: AeBDieueruD4p8gBFzmQOo2YZCx14ouVHN6gnP2cziC+3/jHwX1+SAoiTt8lssOHtWS Ts+WJjUnn8XZbQToHFqo97z01A6I35acGqxgPtx0Hw6nuCnuWNBQQ+GsiRboxg6vEt9aunSc/B/ CaCSdGizz9W7pvyHCOiuhMG3+mesGha0jFJ5jBOXYIWND8mvZ26jfuXpGzzDmJ+/JsjmDrkS6PM M8F0uvQXFYngh5vRKeGyZKC9tN6kasyyPkaOlUIKTjNwRAngBwukF+OCE+RdSr1l7cNy5XjZaDK 79Bhirnkt0FnzjGk8ylIVV6YeyWT2Vb/jV7RCncYxyC2qMhEhALwp9Mjf1CvdUdfgzf5kGI/6yD 7/jZH+HVW3cafJBKMbDKkSYLbaCO1ihnRIZJ/tzDe7j93+RH2/JtW30ceHb3FR/5HhJjcIYIss6 kocJPQ/gWuMVSKDSC9SrdCl5VPUyKndWXXw+3ARQmbGY/ufUFi7UF/LPDmTvc7a6nCJZLs46nH8 SZljpB8TfmJjfh429IekLKyGUancxfHFQ9q0VGb/7kdopn6ywUxV/fb2ba/lEB34MsanUlZporT bwZtUSqHkpsojzGyLOOz2lozneDYgyKnb1/05L8co30IX4s5O21fCAKLCw0uhXno2haMqxu8DAx 31YjTNw== X-Received: by 2002:a05:6820:f026:b0:694:a285:1273 with SMTP id 006d021491bc7-69998cc6306mr7159586eaf.19.1778253190021; Fri, 08 May 2026 08:13:10 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:12 -0600 Subject: [PATCH v3 12/32] target/mips: add Octeon SAAD instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-12-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier 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::236; envelope-from=james.hilliard1@gmail.com; helo=mail-oi1-x236.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: 1778253243581158500 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. Implement it with TCG atomic_fetch_add_i64 and the same aligned transaction semantics as SAA. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split SAAD 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 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 19535768d2..104822a64a 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -188,6 +188,7 @@ static bool trans_saa(DisasContext *ctx, arg_saa *a, Me= mOp mop) } =20 TRANS(SAA, trans_saa, MO_UL); +TRANS(SAAD, trans_saa, MO_UQ); TRANS(LBX, trans_lx, MO_SB); TRANS(LBUX, trans_lx, MO_UB); TRANS(LHX, trans_lx, MO_SW); --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253259; cv=none; d=zohomail.com; s=zohoarc; b=Ca8+ViElZ9a1re2HX06Eco8PkjRhk4ciJtlvdPf0sX3x3TxPXP8I1DCFJWNmCjWO3vrCEKRPDXqoVmQhfnh0+IVlHevzv0N9HtBJeYElugjGiothsCe2PhYaFoHPkjRHn1+0Z6PJ3hthHEwjD9Z01gSSt4wJz7ybwIhUko6hKbY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253259; 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=hRW7lzYmIT4LWA5/NlEpDMeZYVJPDf5iQGLoHhxqnXQ=; b=YLkkx3EhOIg2CJ4Fk93rmeioEGoo8JjxwhaP4eQKbo/OoOs4PPUCijR3Kjc4j7DdNjPASduEShlQyGb7yq9veMfZWgGytCouvVZTeRiwie8LZ8k7aoG5Q3L+G2+puN6v69qpSYZGrzRTP8rV7YQCaGQ92t91yOLeWcHJfjH2S1U= 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 1778253259946983.0329592947942; Fri, 8 May 2026 08:14:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtU-0002ll-AX; Fri, 08 May 2026 11:13: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 1wLMtD-0002gH-Fa for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:20 -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 1wLMtB-0001j2-4b for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:19 -0400 Received: by mail-ot1-x32a.google.com with SMTP id 46e09a7af769-7dd73b7c757so1116891a34.0 for ; Fri, 08 May 2026 08:13:16 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253196; x=1778857996; 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=hRW7lzYmIT4LWA5/NlEpDMeZYVJPDf5iQGLoHhxqnXQ=; b=e684avDNLyvhOXzsS+ZrI7DY0d7aOT0WYNak+RLOFkK0LY77AOH2kSHQT6dE5IoXKb /ABS7KOFvdHZ8zZ7HCppmL5IaWOxf3AvQNe5THEF6AnszpmqTHrupHNsEZyVVi4tAAQq lMYWFxCQ6jCmU+HHbHMP/quu29glun2UYXy+///ZNZB1mc+HZ9urex92LqBwJFkd+8dB jgUk/YEfoUEphRTSSBY3YIG0SHUQ2RQGXITP3Y5V6ZPCoDQG6f7HfkI6V45ITog2iKa/ bAOx90uE4sCIuSYHcD3d4AHSzGod1pqtq1P8APUNF4JPXQ+0h8PZrOV69zD3kUTF+VLJ RoiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253196; x=1778857996; 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=hRW7lzYmIT4LWA5/NlEpDMeZYVJPDf5iQGLoHhxqnXQ=; b=BpiViQ0+3TJJIq6+WJQ3an8xFNIlss42ZJdoeAl5cZXhvNELd2mXi8PevoHroofg4j a9itQRXLxmdB0p628Sx7MiKwYvcE2E5dB1hR9iKF7Mze1OVXvgXJ/nIzIvKt8VHwcnzX MymWL5yNKr2SeTrimJP5QZ4o4vZDQfOVtNT/t5bUajENWR79DSQSg1BqRlj9+tWKBeM8 scGbJjP0qqPo58HMMhFFXg++8UN6t2uSClYDuUg30GxO78/1LnoZz8ek1i1L/9Q+hCYh rc8E2VNPCIxCIlZ+jutRxHEZAbZUAGNntvkp61Mm9zSn+v8l+ingifIdQgdHO9i5igAH Fo1w== X-Gm-Message-State: AOJu0Yy2kZW5OZngx9Rm0OSxaPvPd0brfenV7BdpBeygBRODLZsuNcyU JaxGveU87305tLHeUgqjqaa+D6f2WJmSmxx7BXeJh9crtXfnALgyIl//pVE5XA== X-Gm-Gg: AeBDietXMHNUoglc94r53uwmO8kTtyzEyq5TXUMgIhSsgu7ost3FhOST6BV0o5E5Ldi EjTil+shTVUosGnoQQIOusTuDL7pa3WHmW3BvcBdriGxeIjLR/Knt31ZZnAmwiPMZ34gqQC0J7b 88or3dsS+qgB2aWv5trhUAhsP69ZBKcRdNHWB+ppsxO5OwWbnboPfdUUp0QkMc0rtCu2hfJZwFo wpZJHDZXbLUH7dXPy56UUXjvGc+YaRp7h6GbAvS76eIlNd/fJEnf/w3tldZYERWrYrK2Z3fOXUJ 0X1/jXsbaQVHJOnT/SnHlCyAmpVtI9Rr14rwZ8zUkwfkFhlt1Cw8jQFhVn4NqoSHLpD9ldY6m/O RZwnsN/xBdcACvTpYRjiQ+1iYDyChGJDcMzYEErcyBNjuMATIVAkJlZsn7FHPQhV3f+Yu2qYCxL DoUq8nKGjVqVq4zHXOisTvgoQ/m3av4uFKJqqJMNfh7glBu71Zn25eXTctstF//CLVIUPquaTto YvjNYRmeobNsMZkEipvz8LgOHhqE87ZDCL7LP0bDrO44Y5W6zF2mgdD9+gvO9GBeurUifJnnlN1 vp2FWSWp4s+b4NwiEWQLyJEI6I86wbyg1NffZde9W+th+PM+JDMvahaFbfKrDVq5Kd6nRnY= X-Received: by 2002:a05:6820:61e:b0:67b:bd89:90ed with SMTP id 006d021491bc7-69998d30169mr7612484eaf.41.1778253191086; Fri, 08 May 2026 08:13:11 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:13 -0600 Subject: [PATCH v3 13/32] target/mips: add Octeon ZCB instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-13-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier 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: 1778253261598158500 ZCB zeros the 128-byte cache block containing the base address. Model the user-mode-visible effect by aligning the address down to a 128-byte line and storing sixteen zero doublewords to guest memory. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split ZCB 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 | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index d77717cd50..d8a1bfce77 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 11100 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 104822a64a..c2a3eae134 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -187,6 +187,30 @@ static bool trans_saa(DisasContext *ctx, arg_saa *a, M= emOp mop) return true; } =20 +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 zero =3D tcg_constant_i64(0); + + gen_base_offset_addr(ctx, addr, a->base, 0); + + /* + * 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 < 16; i++) { + TCGv_i64 slot =3D tcg_temp_new_i64(); + + tcg_gen_addi_i64(slot, line, i * 8); + tcg_gen_qemu_st_i64(zero, slot, ctx->mem_idx, mo_endian(ctx) | MO_= UQ); + } + + return true; +} + TRANS(SAA, trans_saa, MO_UL); TRANS(SAAD, trans_saa, MO_UQ); TRANS(LBX, trans_lx, MO_SB); --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253266; cv=none; d=zohomail.com; s=zohoarc; b=EoEQ65ZVQCKjCI8NurUtJ+Nwz/B3P8NicLMd7KhyIw1dYOnq58p06RDCFgDfSOh2zEF4bshdD7BNF6nypDAbNhaMtHju2fBYaBfVyK06msYh2kdd3wCDH13JOcswUmF45Paxd/WTv9q+tFBBz7rYq3eTD+4PAI4Wt2Dm68x4QpI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253266; 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=K3ojpg58r0+Ylc8ZgO1Nz1kHZAQgozXy6HlS1Oz1uXE=; b=CYY51QiT7S51bLDCZPaRUnMKnTrrfS9ZFcu4akN5tY7L8sRCOnlO8VHmtFfTeS3iZPVBsb57hvUtZkZY0/RWM09373bvLKYqeQrHn8Hqru40TuarCY+HGm6yG/1QUjkZrBHeV1Ibaamc4gIpsbM2G/plVgy13MqpjZWCLcNAb5Q= 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 17782532668471023.8128143406343; Fri, 8 May 2026 08:14:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtU-0002lh-8h; Fri, 08 May 2026 11:13: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 1wLMt8-0002ey-QG for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:14 -0400 Received: from mail-oa1-x30.google.com ([2001:4860:4864:20::30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMt7-0001ha-DQ for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:14 -0400 Received: by mail-oa1-x30.google.com with SMTP id 586e51a60fabf-40ef10ec84cso1679021fac.2 for ; Fri, 08 May 2026 08:13:13 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253192; x=1778857992; 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=K3ojpg58r0+Ylc8ZgO1Nz1kHZAQgozXy6HlS1Oz1uXE=; b=CcMhBGtNAkDOHpqQirA3jSMuJty/PFN2DAxY535N0LXYTCnCoPpCxJj0F2y8k4HhRs iO+zRfkd36wvNM0DGVk7LZbTZR6ZruR3y891MlcGEI8re2vwJnkZVx+eVOJiPHiruKcs TQKRIwi5CBEekn13J0hzJ2eXeTVe9GDzb8jAf5hMxdc743Y7YJ3yWV3JnrTZoe2hcOXz y2bBSkWa8Y5bZ9wab59x9lOUjfN3xqgoYsyrb38PIHycx80fH68uwBJAgZny/p5tloWm BPdBZUPwz/6ZK5RypCVhBUn4CLRVVtOqOjKK+qc/n8OvMwrJiAu+CDdxh4RuZsg2VGJ+ iWsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253192; x=1778857992; 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=K3ojpg58r0+Ylc8ZgO1Nz1kHZAQgozXy6HlS1Oz1uXE=; b=eAtqh01F6ZVyAuPhsrr65ISJ2d7tAjzcc+Q8DQ+8Erz197/M+f9vYBRXok/Hp6N5T3 OJEy2F+MxZPfsTvz7/7jKKueCHMsdChJbcqzfWcS3oklWZ/MG4dss+mteEKJW4bj9qCq l6gxoFRhoEdWH14XcYa9+xEylO35UAKXTB7kp/ZQN2Nz70Xcrqs+doXtF331krSlqMJT N9648+a0EwNFPPWiOY9CjTphZOle9WRdAIHZsdTw9KRzhcu5xUyz7zTfuNo0uxrXt2al aWXSIjMATJFs0tOAx1rf9oilQGnQ9C1/zBp3koPE4o78lKc0o45bB9DfIMWR3ld2Zod5 TwrA== X-Gm-Message-State: AOJu0YyI521KW3a2A/DIEcW8UNerYFpixzvWZzgw52MA10jjzHGktYVN kekL4+9G4r/HK6f62A6isLOOUa2JB2Aif1m6jidjVoZ/PdSHS/YA29W/J87tNw== X-Gm-Gg: AeBDieuj08kJgQOOMPssaCPv+9oJ4+F4/21BsQuxAFwT5PXwocnRM7ibHvnz+hYcsd5 lXfN/8FQrF3bA8p61BZFjIRw53FQSMH4aNlK+3lvg99sDqgvluzZ80oYZHlSV4V8N2wp38z+o0C ZdHsvOod5shQ8E4GcGsD+FbxIzOk3UdPi3zyMd3Kt+wAfnC9/Q82nEFbJ1kN3uzJ3ktkcqN2Y4x aZ8/I6MDgEeQWTl3Vpdlozgy1jLnSPM0DWBQY4gSQFrA+/oBw6Ff5Xp5QuAXPeuk4+G+2i4+xRw H29ncJvLOJLjLn6jL9DcbZuDpeoHiEJTzaBMfD7hR+X8lBKe0DS3bfbEYcm9aV6j+7+pHGEpIlH zYEMJ+EmrWbXs7V/Hu696JBNUgStiA7LM+osVHJQdFmbgJ3iPAI9G65KMXdR3SHVaIz51Mr+IUu Oxje/+L7U0er3v7xEcGENk/iusRgiOZd/gaYehviSBJPiC2rrKqGJfpP5/3UrKzdUfq4yTSkLgb E3IWZEMdGdfROUsfdCFQIo6jXacZ6qdb2TRbZmNIvw5n/LNab71/tQicox1VwHOUR9fJrGgp/EN 2jyHCmASSuL+YDudrM5W2VnGuFYvBNgvdgkbl06LWw+9NBX01IuGn11m2jwLp3zA1oAHJp67sOM lbBsOVw== X-Received: by 2002:a05:6870:4208:b0:42f:b718:a9b2 with SMTP id 586e51a60fabf-434f6760c15mr8790282fac.39.1778253192009; Fri, 08 May 2026 08:13:12 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:14 -0600 Subject: [PATCH v3 14/32] target/mips: add Octeon ZCBT instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-14-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::30; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x30.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253268526154100 ZCBT has the same user-mode memory effect as ZCB for QEMU's purposes. Reuse the ZCB translator so both cache-block-zero forms clear the containing 128-byte line. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split ZCBT 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 | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index d8a1bfce77..56c54e0973 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -51,6 +51,7 @@ SAAD 011100 ..... ..... 00000 00000 011001 @saa =20 &zcb base ZCB 011100 base:5 00000 00000 11100 011111 &zcb +ZCBT 011100 base:5 00000 00000 11101 011111 &zcb =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 c2a3eae134..f94f765055 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -211,6 +211,11 @@ static bool trans_ZCB(DisasContext *ctx, arg_zcb *a) return true; } =20 +static bool trans_ZCBT(DisasContext *ctx, arg_zcb *a) +{ + return trans_ZCB(ctx, a); +} + TRANS(SAA, trans_saa, MO_UL); TRANS(SAAD, trans_saa, MO_UQ); TRANS(LBX, trans_lx, MO_SB); --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253267; cv=none; d=zohomail.com; s=zohoarc; b=GGZT0vdAmbzHpJsejpUE7rrNm6tQb9qRVLVbTA8lDJ5dPr8EgJgUFu/piN1l2DbFs+Da7S2mou10CMIa8DdUOjYu2zy6GBPZSfwCjAnKVE7UjtMlyFYMsQtASWFnCGvTBlf3ROw5+ZFKT2zxB24CmaUB8QFeVTM2er7tL+9kERY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253267; 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=9OQ/YP9CUv1tumSDoHamd9129Jq30WVaMsclytj+5hE=; b=AbszKhPLo7xRsSimdlJjZS18gHVsX7Iq14PrIuwiU12UnfOClFeBU0pjfhxQdcgZ2yfLrq0fbF0YjmrQgtJBrt+aCWZ6TLTuAszIl2ISTMMlGdAs4Z1DBdror8xcDeIj4lmPbFmy6LOlZXskUdASGp+LyiCqw8W1gtlB6HQchwA= 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 1778253267593794.6805075258901; Fri, 8 May 2026 08:14:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMty-0003WC-0L; Fri, 08 May 2026 11:14: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 1wLMtB-0002fl-05 for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:18 -0400 Received: from mail-oo1-xc2b.google.com ([2607:f8b0:4864:20::c2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMt8-0001iH-TU for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:16 -0400 Received: by mail-oo1-xc2b.google.com with SMTP id 006d021491bc7-694891f8f62so1110542eaf.2 for ; Fri, 08 May 2026 08:13:14 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253193; x=1778857993; 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=9OQ/YP9CUv1tumSDoHamd9129Jq30WVaMsclytj+5hE=; b=fN3omTMI7eQBOWLpBLrnhs+yH8wmb6xF/M5HH8D0r5zmd4dcWk0Na9Icbct5Ys8tKX EWogEukDGtFexs44Ohng+BChK1Y1wJOoxlAuwYsaWU6gSHXJ73c2cWoB6L0HV95ek89s WdbjgjDq0ri+YyB1L2TW8Oad5qQbDmpRf1zxj3bcvrpEg3BPMst7qR4lx+PJCTSlj2ge f3EHnwP9DDxuRFL68QsUgLrUxNEvH+aFR5y0zE0acaWdSQyqFJ8Lb0gWCRo4imJNfdfA Obln0jX4X/6leNEUKNTMyxuL2hNv8GGBC7JohVEOHSd0HJDEBvfrX2wM5UauLV7zYJey iTAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253193; x=1778857993; 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=9OQ/YP9CUv1tumSDoHamd9129Jq30WVaMsclytj+5hE=; b=M6KMLz53bIEQruk0Odd6ocoNO+t4Vav9RoXxk3hWdcffNDmv7em9kr1X4+bzmTPA41 8rqjcdsVDKfDi8QM0bzt/N2I0/VIP9PY2N/CvVUiXki0Cq7qOvrWtTYFj3tvy9HLvnJU scY+j/ORmxdjt3zJm9wrpWBKTk2r4KMJFOPaaOqpP3LLmlAE5L0ZMJ8XkAT74IriVP+8 OaUJdmJef719vaJIugvwR76mJTQiyFarPF6eaushTfzTmYToEH1hmjgVwYOQNo52ph0r eiNnrYXy5pISLZTzZ6dT5RtAeG0kqNRCU4P1y+2WERmILHyyPuQIDriQpdx46NmPebD0 dYug== X-Gm-Message-State: AOJu0YxxZixw9+AJ8UL49bYPLTg8K/j3uq9+2Kw2lJzwmKZLDD3baj6P M7hOi538jdyOG9Tvl4JG+sBR+og9uZdgHKhs3ePGhdMA1xWB+OaDOAFYG1iR7g== X-Gm-Gg: AeBDietc7Khozzc7XcQISYn0734aRxxWlPhufcN4DyUXY7zyGZ9z7MmZY7yPMmfyNPx yfiyrkRviMjuMkNx032n+7LTcZhCusfQ8psOOKmb++UIZL4Yf/g2QyMJwrNwuIPJkt0XXuK+LyH 9TEPrMmcLAr2sBXX5HyNZmI1oB7Lf5vQZeNGY44qYiRdY9RVK/yyDqdaDbOC4PKMlPgsi9R80Uj 8mH9OZWKz38T97JxFSBu9owdrWbUb+ReHpKRbKpRNqMhG6wg+AtG7Svk1IWHckjmiQeECJR0cQe frDzJ40SrduCxfKVj80sRaBUJcCEDnTp5XJTPPLJNUzfmmXb2xoWM9TkXxdvkrRVAQwUeeOb0tl 2gY0jxRb0JmbTJg0rXGGNMVJU+kqjk59VFKz8eYb77z2uFyNIxRd43y0XQDU/qHjDVNxER5dgqY raCSYHFPexPMfAW348EwQVw+HlYccaQypospg2QOLPJVNYaf965eqHAzoAm0fAP3vKOCFfwz1K4 O8LicjuUxGarYG+4QHkszj3XSqaDtWwZZQF/aWYzv7QimQkfuM2mmbnRrHBFCDBPE8ndde6QC1N 53uTDV5VGkeFNb3BNW8Y2QngjjCny9VicLzarFUIiP16EzsZshwHVlYfjd9awTv5cxbQw34= X-Received: by 2002:a05:6820:308e:b0:67e:1c67:ebb8 with SMTP id 006d021491bc7-69b25cd22e3mr1612867eaf.50.1778253193227; Fri, 08 May 2026 08:13:13 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:15 -0600 Subject: [PATCH v3 15/32] target/mips: add Octeon MTM0 instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-15-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2b; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc2b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253280566154100 MTM0 loads the low multiplier operand pair from rs/rt, starts a new multiplier chain, clears the upper multiplier limbs, and resets partial products. Add the decode and translator path that writes MPL[0] and MPL[3]. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split MTM0 out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) --- target/mips/tcg/octeon.decode | 2 ++ target/mips/tcg/octeon_translate.c | 55 ++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 57 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 56c54e0973..2dadb13845 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -43,6 +43,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 +&r2 rs rt +MTM0 011100 rs:5 rt:5 00000 00000 001000 &r2 =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 f94f765055..186200036e 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -216,6 +216,60 @@ static bool trans_ZCBT(DisasContext *ctx, arg_zcb *a) return trans_ZCB(ctx, a); } =20 +static ptrdiff_t octeon_tc_mpl_offset(unsigned int index) +{ + return offsetof(CPUMIPSState, active_tc.octeon.MPL[index]); +} + +static ptrdiff_t octeon_tc_p_offset(unsigned int index) +{ + return offsetof(CPUMIPSState, active_tc.octeon.P[index]); +} + +static void octeon_store_tc_field(ptrdiff_t offset, TCGv_i64 value) +{ + tcg_gen_st_i64(value, tcg_env, offset); +} + +static void octeon_zero_partial_product_state(void) +{ + TCGv_i64 zero =3D tcg_constant_i64(0); + + for (int i =3D 0; i < 2 * 3; i++) { + octeon_store_tc_field(octeon_tc_p_offset(i), zero); + } +} + +static void octeon_clear_upper_multiplier_state(void) +{ + TCGv_i64 zero =3D tcg_constant_i64(0); + + /* + * MTM0 starts a new multiplier chain. Guest code relies on a single + * MTM0 load making the remaining multiplier limbs zero unless later + * MTM1/MTM2 instructions explicitly populate them. + */ + octeon_store_tc_field(octeon_tc_mpl_offset(1), zero); + octeon_store_tc_field(octeon_tc_mpl_offset(2), zero); + octeon_store_tc_field(octeon_tc_mpl_offset(4), zero); + octeon_store_tc_field(octeon_tc_mpl_offset(5), zero); +} + +static bool trans_mtm(DisasContext *ctx, arg_r2 *a, unsigned int index) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + gen_load_gpr(value, a->rs); + octeon_store_tc_field(octeon_tc_mpl_offset(index), value); + gen_load_gpr(value, a->rt); + octeon_store_tc_field(octeon_tc_mpl_offset(index + 3), value); + if (index =3D=3D 0) { + octeon_clear_upper_multiplier_state(); + } + octeon_zero_partial_product_state(); + return true; +} + TRANS(SAA, trans_saa, MO_UL); TRANS(SAAD, trans_saa, MO_UQ); TRANS(LBX, trans_lx, MO_SB); @@ -225,3 +279,4 @@ TRANS(LHUX, trans_lx, MO_UW); TRANS(LWX, trans_lx, MO_SL); TRANS(LWUX, trans_lx, MO_UL); TRANS(LDX, trans_lx, MO_UQ); +TRANS(MTM0, trans_mtm, 0); --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253442; cv=none; d=zohomail.com; s=zohoarc; b=QIeBLeoASoufzFIKGZEMHPkFuyxVYmdRYENjkmXCPnpoRXJfKWOEMGL3asLpwOYGN4g8ID1lQF2hU2wrZCyEfnnxjJt8N4ac8ic3sSqSAFrxZyNaSdB00yTC2JEK11SQXbg8eVfzXZqQAZHkqanXmSJgx6aOhv5abcJ6A2rGjcg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253442; 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=kczVofHgEYJaoAmIDajEN/Y34NrxWlQw3aj8VsSTaJM=; b=AAXPg0KpmG/ihNdd02U75HcbZmQgWd23XUykdUTFNnNFIb7nfGcADaj1lKrCemcXuafx07uIHIFWYSABX04qagMvf/f//1CWp7kNHzrZ8MQzzgseb0YoS5q8vEetQgcHHinHmbUyjdq4LwBdnTzvxiQHogYxDYrDoVB5YkKE9ac= 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 1778253442906579.1820183254807; Fri, 8 May 2026 08:17:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMta-0002p9-4I; Fri, 08 May 2026 11:13: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 1wLMtC-0002g9-UH for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:20 -0400 Received: from mail-oa1-x2f.google.com ([2001:4860:4864:20::2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtA-0001ic-Ny for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:17 -0400 Received: by mail-oa1-x2f.google.com with SMTP id 586e51a60fabf-42fe552aedeso765181fac.0 for ; Fri, 08 May 2026 08:13:15 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253194; x=1778857994; 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=kczVofHgEYJaoAmIDajEN/Y34NrxWlQw3aj8VsSTaJM=; b=oBlGFRtJApCJ8gSMw1XHAQdmnxFgGueExyWyFwB1TG0TJH+w2TN9sEL9LFCg5sVbhm TsWVKepiNKvp74x3EjsjM4lkNkEmznp5jqLIYKI6FaoeK/ZluWkgM6tjdgtgHxHT0yA+ QP8RB5ezs7T28qp0pQf4nDZ6eIrNxxGl7M/8EtVo9uPyZrVWSCl0pUJGazaxkUi5VvNp CHZnzMBh6zPbCTj3z+gRGnG35Mij1eNLlb0fxLx5BFtnUcssyNf/u3oI27Ew7oODh6/e 1G6rrbC4Qe3NYruCPtVdIyUCCC3ElfWbJq2sAAf6+BrfEY6vqyEwhC3W1QNLP2FzCwVP jiSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253194; x=1778857994; 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=kczVofHgEYJaoAmIDajEN/Y34NrxWlQw3aj8VsSTaJM=; b=ayq8TBSWbE70la0Mi83N5JSNnuiiUlme+p70bYQfYOTO7Tf64hB/xnhpBqpCBTQNeA B2s6sSmzaR2Hw2zxCRq+BvxZQV1lMzJluYrsP5kRZj8BD4g2b1TGD8GNxuMm23SyFfVh RLEJhxaVjhl1uZ9PldTfOU1LFtam4sODrlGQBPDmGVMt5o40SvIK8HgI3QvRe6zCtmZZ m1K5tduprksQKIAbEBjj4ircWfejYu2B/yfXlslo8mCYchciRuNThLz0q+IzH/twVatH KkJzZFRlI8GrPBTOGS5vbftc6iWshvoMGOPRWgGQTAai/o8ZuCvBSKfLWG5ASUQX1gZE Z5fA== X-Gm-Message-State: AOJu0YzkF0qguIWJFmZADmkS1opyzwLD+rsCi/VEeq26YFN49MaM2LnW ZQ2UkM2n9bkznER+mpdGI/nZhwnS9zOj6O5dOArB7G8gro7tPeA8B4vDNNpZqw== X-Gm-Gg: Acq92OGF0xVwlMdxiCOO7cZuwLjBUBq/lu6i7Nk3umM5v6yCyhov7tPwwZffKHGq8M+ wlS2MjxzchaC/JT9shbB0fPHDy/JmR4No2CHmF8GybDaEFYrUlEisD2YF4bK8abUqbBWA1cfmbD mOaWD6PufcfZj2Lu4QW+2MV1dJeUYvVXjyVp7obsM+wbDfNjEONyTJV/aw/VIQD9/AbvF8L7ye6 8+inq+FUD6zaxymAQVVGC+c/vD8DEvuwzmi1DJmovm3Q5DqjyAcZS5sC9WvqwVeGOiybiOTyw4k fq3iGdu9aPrHonZgSofjfFQssX6I0Sm0dtkwqGNB8dalFCYgdIsQtzTUZZxRkwJHsU8da1mRoV/ pPL3rPqA8tiMT0NoKYfvvOlxiGDruJJhp5Mi6vd/StYCjBg0Z+3eVf9I7I2xK53bVMzr8QCuV/p deIi6yOATfgDh00hbv1TotQMt5XcIy8UK10s3Tn9VSvGpNvk+Jx2+h1QYyPz17OZJJqQXb438U6 11mtdZKfPtN5JJsOMXys9WDanox4g8frWL9ikNBtbucpFeUrZmkCesCpYyAqVk/Ji9GtENWb/XS +vyDD/QGfMPc7qt40/Swi2mEoFDb//gJVK3e3+dotJj56eZOpPLROMtkpdIYnmXPyj8x0nnacmW /+O9NuQ== X-Received: by 2002:a05:6870:ebc8:b0:435:7e8b:8f1 with SMTP id 586e51a60fabf-4357e8b5c34mr25470fac.39.1778253194351; Fri, 08 May 2026 08:13:14 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:16 -0600 Subject: [PATCH v3 16/32] target/mips: add Octeon MTP0 instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-16-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2f; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x2f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253443462158500 MTP0 loads the low partial-product pair from rs/rt into P[0] and P[3]. Add the translator storage path so subsequent VMULU/VMM0/V3MULU operations can consume guest-managed partial products. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split MTP0 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 | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 2dadb13845..94dbc356ec 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -45,6 +45,7 @@ SEQI 011100 rs:5 rt:5 imm:s10 101110 &cmpi SNEI 011100 rs:5 rt:5 imm:s10 101111 &cmpi &r2 rs rt MTM0 011100 rs:5 rt:5 00000 00000 001000 &r2 +MTP0 011100 rs:5 rt:5 00000 00000 001001 &r2 =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 186200036e..5a0ff4dad3 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -270,6 +270,17 @@ static bool trans_mtm(DisasContext *ctx, arg_r2 *a, un= signed int index) return true; } =20 +static bool trans_mtp(DisasContext *ctx, arg_r2 *a, unsigned int index) +{ + TCGv_i64 value =3D tcg_temp_new_i64(); + + gen_load_gpr(value, a->rs); + octeon_store_tc_field(octeon_tc_p_offset(index), value); + gen_load_gpr(value, a->rt); + octeon_store_tc_field(octeon_tc_p_offset(index + 3), value); + return true; +} + TRANS(SAA, trans_saa, MO_UL); TRANS(SAAD, trans_saa, MO_UQ); TRANS(LBX, trans_lx, MO_SB); @@ -280,3 +291,4 @@ TRANS(LWX, trans_lx, MO_SL); TRANS(LWUX, trans_lx, MO_UL); TRANS(LDX, trans_lx, MO_UQ); TRANS(MTM0, trans_mtm, 0); +TRANS(MTP0, trans_mtp, 0); --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253432; cv=none; d=zohomail.com; s=zohoarc; b=OpD8oBJLA32GlR7Rty1YgPXQlm+ri/fQ3LDz5KacRzuwK8sdLN+mJAhueNqbnsD8xtRYWVnh4zUxu+8s2NFrN5QZhZ4FwbbE7FczGiQQiGQ0cpiQzFtLNrWrO6P63h2AtjsKKsoRZD5wRTCh4IUjkzLXU8Ch/iLxnKVxHplzArQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253432; 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=GSsp2+10fvcF9k9V+3BplwMm+dewbmOEpbIv8989h5k=; b=jjMAvE00YeWht2z46GWH7EQwCXpuC7AJZ4+o3QqrlVZA80omBhH+zEEh+08iuYAuZP6exCe79/8toO5olwLhIpDajkntbmJiKWAaAZ0AzmK+qE57f25kr1Q0foX0hcb573LShAkvHSjpa/b32r75tY1zk12IJeYW4NEFeo0X70U= 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 17782534323682.6648136200739145; Fri, 8 May 2026 08:17:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMty-0003aI-Gy; Fri, 08 May 2026 11:14:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wLMtC-0002gE-VF for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:20 -0400 Received: from mail-oo1-xc34.google.com ([2607:f8b0:4864:20::c34]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtA-0001iw-OD for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:17 -0400 Received: by mail-oo1-xc34.google.com with SMTP id 006d021491bc7-69498319ee7so1860122eaf.1 for ; Fri, 08 May 2026 08:13:16 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253195; x=1778857995; 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=GSsp2+10fvcF9k9V+3BplwMm+dewbmOEpbIv8989h5k=; b=aCYhfIRoysjcwMefb/aHcNCuNtn4d060hakVV6SyM325bVfKKoViIPADHpfNFPqBwX gFk+9q5F0/l6gej36YnzwWjvBoev0gtgzZD7Br6Ro8dkrHqiTe6ZUYvJVA0etgJyohfm HPh9R4/OI3rdc94OWOlJU7QOqCJgxuauL+q6Wlw7VXj81SHXdK8n93+Q9LEByNFkFtaa ATRuzAQ54vHiyjr0KdKL+jlapjjbYm1QxZtyCrQg4LPpRoADEJDhYWq/OQr6Dk1siTRz RkKf2O5pPkgHI1sGjH8cCQ17h8S5hvI/utkjkoqDlZmq5Iik7vSHogazlgQ5ivo8felC I4eA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253195; x=1778857995; 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=GSsp2+10fvcF9k9V+3BplwMm+dewbmOEpbIv8989h5k=; b=TQAXoL5uuHWnbRq2MYvjycOJ/iD/u2qQ3Zd4tkWAlVYjqGYFGpZ2mpEl9E7qP7uG0T vRR/O6JS8y7ZJBuCdYlQYYwTC4fqdpYy9iVdCY7BNsX2UfOJzVtgjYhX2BtUf+sNcTMP vhZsDuxDLruMw+33sryI1X4fl6pQgSZWthXna3euHL+TIx81WyjYekjvMljzZIojDT/0 Vdh6ypBGjkqtOch7i5X56T+EXeidZm19j5pJiZ3TKWkJqG1eqwQlKggJQwY4i00GQUGa gyr13zcxHD0ZUfnDv9QLilZP6s4mpDaJKH/4RHt/kQizrZ8NESyyZ6ZW1dN9VIpmK/cM bJSQ== X-Gm-Message-State: AOJu0YzThebIhpt69gk+Ry6/C7BiE5WPx+8V5qhzLXzv1ZdX2HKho2dh 38dCzaoyNp3WpGSR9nCFfViTZtC6YAQlNGl7H77MD9RsuTObZ/tZx0C/ylegrQ== X-Gm-Gg: AeBDievOPc3fPIDdg5+QRLHvlWwduNlPsTc2+sUpvnHD308kqATkXaLWcUB4+45HhgA w4YBgUxxwX/Dc/CG7Qoux/tCBlv5YjbxvrE82fQE5lBuKaCbWAMlVaQCm/z+eg894RQMAXx/k3I BcDWNuInFhDwFIMOuFj/Xxz+LpGJf/hvHnJAjXkXi4Gt7DtGih4MUDpYhSyz9PyrvhmcPMsgh5y /Ys7GEJJu1BgDvrM346YrvgCugKKvSF6g+7yp33JEdVXLbjJ8P5mA2aihukrq7QYI/Yfnk3kJXw hYAFFMluz/eFAuHTB3QR2gpNvlVtQ7pgqVTJHIJnNAegAB9L+SrrUcMxT5R6AgLLFWGJ1uPMvW8 HQ9RD1LPJN0ICGep7DQUCJ9xC53JHgh0yy2XILo+XcJLn6tVO9oXU1Te6f29x6RPQhAmvOXDAEH cbRGOoT4iXrmNppYI7A3j4FSQFffus2qQ9YFXa7vG4YEmj7Z/j++8bpuScAsEA4sJsBdagVvxcU H8CfheJXbvGhOzl1eUo+/yMDW3Hjxp1NKVTT/x0UsvjOKp+LKFPvdoAD5JrCp0FefX2u3/JW9yS jfaORqSjZZig2lKzX0oVfB7TjmOStEoQx1B35evV/jXkNd58NKjqqfvoqTYPN1Ayx7LND8k= X-Received: by 2002:a05:6820:4deb:b0:696:7f3d:a75d with SMTP id 006d021491bc7-699ab68f93dmr3496512eaf.27.1778253195301; Fri, 08 May 2026 08:13:15 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:17 -0600 Subject: [PATCH v3 17/32] target/mips: add Octeon MTP1 instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-17-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier 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::c34; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc34.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: 1778253433949154100 MTP1 loads the middle partial-product pair from rs/rt into P[1] and P[4]. This completes the second guest-visible partial-product slot used by the Octeon multiplier helpers. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split MTP1 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 94dbc356ec..d339e6d1b8 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -46,6 +46,7 @@ SNEI 011100 rs:5 rt:5 imm:s10 101111 &cmpi &r2 rs rt MTM0 011100 rs:5 rt:5 00000 00000 001000 &r2 MTP0 011100 rs:5 rt:5 00000 00000 001001 &r2 +MTP1 011100 rs:5 rt:5 00000 00000 001010 &r2 =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 5a0ff4dad3..ff02978898 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -292,3 +292,4 @@ TRANS(LWUX, trans_lx, MO_UL); TRANS(LDX, trans_lx, MO_UQ); TRANS(MTM0, trans_mtm, 0); TRANS(MTP0, trans_mtp, 0); +TRANS(MTP1, trans_mtp, 1); --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253299; cv=none; d=zohomail.com; s=zohoarc; b=JOpEKrDvgLTlxXWblbWgHl/gBDD2cDxf89WjRGenzqUhkS2kUV+8AbQ+FU3jjYu/564z/O0/SJu2KSB6593sHqdrRH2oKV6YgdLSdMxQDrH1yvk9bG5hga2J2kZBSkQdqGDGufIQPfHCfuRPgeyhYjNYtTbl9Vgz60cTQe/OiwM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253299; 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=WZDIIV4iuVXaGnQ53Uie7KdsIthTfGrlVQtg2iJp9oQ=; b=PHO6XkcbpNvedVpxYaEIKaazp0YIiLQjD5SDTUlnjoZ+D+LOsrH8F+d3nG+TV46LJZpWCXug1ninRRMKENIoHN2zC+q7YGybhC+np4xrqO/YkG4GYFm5T3MW+PkWWhMxdpCmxihdE3Y9HUls93kDwKLprlEhyuJQoqtQ+HqbL7w= 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 1778253299693799.0835528740712; Fri, 8 May 2026 08:14:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMuF-0004SM-A0; Fri, 08 May 2026 11:14:23 -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 1wLMtE-0002gb-RB for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:22 -0400 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtC-0001jB-N8 for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:20 -0400 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-42fe552aedeso765197fac.0 for ; Fri, 08 May 2026 08:13:17 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253196; x=1778857996; 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=WZDIIV4iuVXaGnQ53Uie7KdsIthTfGrlVQtg2iJp9oQ=; b=oe6Uha9AgxiP58Vmb28w2AT0ZW9djKsCIV6YcckNw89jSDQPx9dIzktp2ikqVGhDgm UosS3kUK67MtVdiC9H/hAKhoM2pyS5EaccvZmknCrtCY+Fy+QB/Rm4BOEFJ7lvNIQXyQ N4qv9Rftgjb954Uci0NrU7dxafwXUACxWO/JPIe7C5f1erAxPqpBX3MLj8NWdMmVc2KT lz+xtD4rjNcSod/x2Zv7xKQibN4xtloDy4TODEPOQ1y35OlVKPuZTSkLTFGY0gITY6wJ wkdCD0jEnfxOoizn4ylaw1dYuRVU92hs5xLOn15hWX8gbebRXx8C47tPZSZWieiUUbtB dLnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253196; x=1778857996; 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=WZDIIV4iuVXaGnQ53Uie7KdsIthTfGrlVQtg2iJp9oQ=; b=oN9OzWoHc0y/w4Jd2u433gJboBEKgNmNwLAVe3OW8DCtMoCHE2CMW8auyPIMk7J38Z 9MVctXZF934D0KAiqfldEq3I8trk7KPWn3ATYF866WpZ0EbZTVTMYhhRRTAta1HasiZS jowtyLEakmc9+evBPCPFKWH0CUnqFPlFPbwa9MzU6Ruj7NdWysuoWD9GnOpmZjRNpTDq UkpUI/dC9Rzt4JdiP56lpJHXzwYeU68MlWIhcno4oMgsOBpyCrSXDaubmkh0aLOKpvSD xAti0bw3azzSZspLr4xUS7IHUxdFwVE9qIXj8M/ZvRqKrdsji1YoMS1oRcjmycHkS5xd JCmQ== X-Gm-Message-State: AOJu0YwZkdtN4wtwhqwZagpp072Me336TI31s2rWXDurYp7u7+rtDs8r xN1Af635oSzQ/bv1/4BHxmCM9SqkcRACTnAMvjarP6IRWIFeLqH9e4awdUkeOA== X-Gm-Gg: AeBDiesC7ocTy2ROMCLcKPITwIJ2Wp3sh+UNz8ev6im4/6qw2dfSPNWwRgv3q2qbL45 GsbCCmlBzjCeRX6b9UNjHvLV9Xh0y7NnXpZ574T51I5jANUxmbCYJEUrzI3Xyg/TqUiVyhDV8Oc 04/S3e3skCCPGTH4X9O3+Gc2f7INq41PPzUSjIf6Ip6W7BMO0gQxtszxXTEtHDSzef7s9u3TgBx SJAIe8UJe5MDsJutDlmB+Qu0aP53IluE1sYp8FwsEtznt76zc2P8BSCh5p82pG/7dkofLJdvmIo HuPb3oFqhgu9s138H1w1tHIS9c03WKnS0aCjas57aPx+/TNiK19crPoH4GmIfG77RQb3cWugxRL SyaHvCgS3EN1pW91WVyqmGg8ae4fuAPi9Y/7xnPJis23AuWuUnWIZJHC7iFhXgAZtgI7QdhrIZQ hrFymfAlQCT4L8Eba7SrxLQyEuEA1F4pk4gWLxV0VVUV9/ZY2iVWrKcOvyftuKT5F4eFH+DmJi1 VFxg/yLstTCphkJVAvKmBDmfmZqd6ewGdDKNeZovWuiEkDCAaRoO00/1heRmPIPKeyMyN2lkahj DATRzKdBZIiqkBMGxfP3QtfLD638syZCNwsHzDeSEqZrxWu+tyZVZF9lHHf57lKBakjfn8I= X-Received: by 2002:a05:6871:6aa:b0:430:12f7:71cd with SMTP id 586e51a60fabf-434f65ab1e4mr8740323fac.23.1778253196090; Fri, 08 May 2026 08:13:16 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:18 -0600 Subject: [PATCH v3 18/32] target/mips: add Octeon MTP2 instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-18-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::32; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x32.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253301111154100 MTP2 loads the high partial-product pair from rs/rt into P[2] and P[5]. This exposes the final guest-managed partial-product slot for the three-limb Octeon multiplier operations. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split MTP2 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 d339e6d1b8..165cd5088f 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 MTM0 011100 rs:5 rt:5 00000 00000 001000 &r2 MTP0 011100 rs:5 rt:5 00000 00000 001001 &r2 MTP1 011100 rs:5 rt:5 00000 00000 001010 &r2 +MTP2 011100 rs:5 rt:5 00000 00000 001011 &r2 =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 ff02978898..809a4ae70c 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -293,3 +293,4 @@ TRANS(LDX, trans_lx, MO_UQ); TRANS(MTM0, trans_mtm, 0); TRANS(MTP0, trans_mtp, 0); TRANS(MTP1, trans_mtp, 1); +TRANS(MTP2, trans_mtp, 2); --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253275; cv=none; d=zohomail.com; s=zohoarc; b=b5ALGivdduijr1oB5s5/24B/1U7JwrZyAPLNaKlTqeBftQCswTnjS4B7Y1tp4bdVbDD6a+M1RNi+2i9FrKnAKEw5zFk1KE2TKi/ttJeC8FmWR609CfrkSXn5Zk6nfveUj27j2R6/Eh+3aowhpJGKSZz1F3bF99q3UW52uY3/TyM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253275; 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=UY10vnoVBseLXfCKE/RTPCDzD7LtxNgrrQE0jMkHMdI=; b=F3TbnbNmEMq27UEcBbZyKkLVl7esWfSmFt8PFhoKJg2oz4Fu8v2J2j2NopPs75n5h5MHWKWvoydO2VVU3zjvUkIHGXXF/57EmEKnpnQu8caSodq0L+dYy1r0YZs6ApxrZm3cJCbz4aEeDhTWoA2kUDl+ql7JNX85QdKmdHKpEfo= 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 1778253275185567.795524698383; Fri, 8 May 2026 08:14:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMu6-0003hi-G6; Fri, 08 May 2026 11:14:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wLMtE-0002gY-QJ for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:22 -0400 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtC-0001k0-LD for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:19 -0400 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-415b23dd6e5so918990fac.3 for ; Fri, 08 May 2026 08:13:17 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253197; x=1778857997; 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=UY10vnoVBseLXfCKE/RTPCDzD7LtxNgrrQE0jMkHMdI=; b=sCs09toA/eg4XXmc79qDenApKo6icRY6iloegTEM9YI6Hu9ZZyib+vQ4WA0Enk84Pr c4XSyOiyKODC/cxwARvr2Mo4OFfV4DzT6spSuZRaNNa03XB7zFQT/fl0xXiZzQwuLOXU WT+V9FU31kd0w3DpNqekDUe38WIrG4C6L60BkXAqDybrlYFRSXseGem5LNtvitpkZ+tB 8CajvTW3aAmjTOyebKr0McV3B1hyBg8wQAKUQUdWwk0msB1Om/AoYnY1COlUwYXSZ5SO 0ztKDJ95q6TVbr3U4Eq8+otPwlNqdndJAFzmfnvjls4O0n7uDUK+28b6an++AeS3A5PZ TfoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253197; x=1778857997; 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=UY10vnoVBseLXfCKE/RTPCDzD7LtxNgrrQE0jMkHMdI=; b=LNA86CBYI2M3lA3FyNEeWOAfbGmsFnT05ySVYUDOvV67Zgt0CKvyBed9UYhhbsqLcB XENv/h1RIxYEO5ahEF2MBHmVJU7pao4Q0ASIn1CkfjTHMAz3KX3QP2LRKn3cS/VKpeXy WfKINcXHD+jJlc3RWYogK8ZsqZLYGEv88+AbNzUwhXeLyH6q2b9c/Ux6DkRclNf0cyC7 ZlDdtukmGWy/un6vx2yH8IbVZ+UTff72Vg68yAlgJpK+tXI0y9fZxcEVGz2USKqeMK+9 PR5jorj39tZ9Bb1c2vtPhzlWenWnktvG0Wx1XUA7n5jhB/VGGgkn3RCQS+GuqmexT7fe CYUw== X-Gm-Message-State: AOJu0YymUDESAHSer7QWuA0VEpjJP37mzYz+T4AtcGlHf2/8J9aN07aX f18bmQUw9dlsfIOeV1F/jaFx1i7/6DbRwT+KimKs088BxLwzSCLSGhZvOLj/6g== X-Gm-Gg: Acq92OHDJTMtlT28hXxgreZrKddWdLNSeBo6xjjDA/59bv948glvrW76DMAvE6wsuS5 Ln1FBoa2xktFU716tVY4ZwbzFr29oDCacYJXL94j/+k8iDIIDrlNjFyCrl7t7+rSTYf+zF51pEt EzhE/nChHE8SoD31L1oA8OqhNsQWtzcqsS8zgUPsD+JVmJSRjQ4+yYJTFpBNtI/m67acJMkC+hK mjXFMIDstD38QWwk9WKyvB8G+Tri4XMnEsyVpb+I1rh1j26ms+q18gH/2y3uMzuozCriN4hHR9Q w2E5AcZTUh1cyOmjE7CeAJCEN8tA7UPeNV4WE0mG+mKxNSiBzoKfoAaa9eJyXcljeQjBCwr9Sg2 bA90tcDhFKUha7N8Wv3D7QLot0XP95Kd0B0nLcQb0hrY2rOtZ3RHeVJ6PLEr0fOPCYwxjfP8aGj Bm4uu/w/u+I6HvrtH8vc/D7/Xa2lFhi302TuLXK169DASBOfLuBkUGLF2uBXE/aKaJiYnE2Co1k 8uwWCEYcroDqZPwCCD6qnVBsFu366gb+SEOyYh9c2MsxdkMbpZDfR3DbNMz0LZ76gyp6z5DJv0S ijG6KZfuK8L0QLHakuqt4FjUr3Sls/HNjw97zLXNluma0a55+YE0Eskt3lh3KksanW2zSz7KP2B ANiF0RQ== X-Received: by 2002:a05:6870:2c99:b0:41c:fdd7:5b4d with SMTP id 586e51a60fabf-434f64f1577mr8230862fac.19.1778253196973; Fri, 08 May 2026 08:13:16 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:19 -0600 Subject: [PATCH v3 19/32] target/mips: add Octeon MTM1 instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-19-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::32; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x32.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253276703154100 MTM1 loads the middle multiplier operand pair from rs/rt into MPL[1] and MPL[4]. Like the other MTM writes, it resets partial products so the following multiplier operation starts from the newly programmed operand state. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split MTM1 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 165cd5088f..82d0410e6c 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -48,6 +48,7 @@ MTM0 011100 rs:5 rt:5 00000 00000 001000 &r2 MTP0 011100 rs:5 rt:5 00000 00000 001001 &r2 MTP1 011100 rs:5 rt:5 00000 00000 001010 &r2 MTP2 011100 rs:5 rt:5 00000 00000 001011 &r2 +MTM1 011100 rs:5 rt:5 00000 00000 001100 &r2 =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 809a4ae70c..74533014d6 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -291,6 +291,7 @@ TRANS(LWX, trans_lx, MO_SL); TRANS(LWUX, trans_lx, MO_UL); TRANS(LDX, trans_lx, MO_UQ); TRANS(MTM0, trans_mtm, 0); +TRANS(MTM1, trans_mtm, 1); TRANS(MTP0, trans_mtp, 0); TRANS(MTP1, trans_mtp, 1); TRANS(MTP2, trans_mtp, 2); --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253342; cv=none; d=zohomail.com; s=zohoarc; b=Sb0Mytgph6PniwsGL5/r5L3DvXgu+ybMaj3aMQTRdUHbta/GASYk7FdKTwiYpRdehUdCBXJDHclNnrn2g2II+10qUmHwyoLEaS8fBeonqof0LKeIvtIy9kWvvtbnOZqx47VWrczi2+21p1MOtFDw2Umqriv6ERO95qhF1beeHS4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253342; 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=iof6LsSVlMEYc7I1zyXWBTsPIAQRVQg2PoVAkzUPzms=; b=iOHFJzUP6LqAbFna5dc+aaczFzGd/UMh5ja++7jTtfR2UbCtPdwgVoge3GP/HTsZHff3oi0nZzVTVTDbLWzA56Qn9peTU2l7NHg4SKYEr1K/pNPC8RxjWZrZfWaX4YDnlvZHPnjM9kNhhftIMTqeXw3kfQ8YyfOPmLJvx7jrB6c= 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 1778253342072938.040113100018; Fri, 8 May 2026 08:15:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtj-0002xC-8C; Fri, 08 May 2026 11:13: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 1wLMtG-0002gk-6U for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:22 -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 1wLMtE-0001k7-Ie for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:21 -0400 Received: by mail-oi1-x22e.google.com with SMTP id 5614622812f47-4756e74f8edso1489160b6e.1 for ; Fri, 08 May 2026 08:13:19 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253198; x=1778857998; 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=iof6LsSVlMEYc7I1zyXWBTsPIAQRVQg2PoVAkzUPzms=; b=o1+fiALF+E3BCPhjhSFLNl7bNfgGTytIjysWAR2spqSjsYY7ANSigaV7SztNVGdgac +MjDHp2lY9gcV6OJbpUpyPB0I6zgxCUsnZ+Fc1RVZcIxhDaBLAdvBk3D+KZOqHYKtwEe s7iobh6THYutgl1Tdpuitbu9C/mn80YwRHK4fH4B/a0MGaHRdh5uF6myDLzFZ5yDWQzq 5ndLXBcw3Je7ZOv6T+rpeeYvMOjWm0mi6KTw/cukiQPIm+kPTcaCJMLRB6ZReVn5ItRC QNhV67HuRAo6TypQDOPQDnWUFscRvJcGJmuuL95mbHTAktdq4OpF/q9moi/qUT4RyxNh u+Wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253198; x=1778857998; 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=iof6LsSVlMEYc7I1zyXWBTsPIAQRVQg2PoVAkzUPzms=; b=V4Woo/Ii+JQp/X1dB2pZGQ9Gmw3aeRnna7kXngPMRoKzpUIL1m3IFcaH4/ISbBcXi0 TpPDvIPHhhJRow7MBOYG8pSESFikbfi6K6EstZS9TmRXZ6KASTVjOmy7M617fNfD4I8l 9igfYFd7dfaoZB6BQeAnOUqYBMi67+yUNEfEXmaIkiqNUY9nkgrWh4rAFj4rwjaz55Sr 1yFcxIxMQ51pkbiHAPOiyehZqfxsC2E29xDiey2bZjl5IxnRZTShUvgF6c3YwyD6Tkew yYFFAV4df5YijVmdikX1SF7Z84RHMKZalyIr3AKKVjgJnwrFKPdm2sw/sWrfiE2DSPGt LIbg== X-Gm-Message-State: AOJu0Yz9/yvhmi1DVW4zqJEzszfnPimpxm8Y1ss+/YLVei+YRHq95BvJ 44/mEEqfzvgwp+dqYepZmEId3eRcd/j3vmCF/j7euAbQKpU+m40FkvMyKJUMZw== X-Gm-Gg: AeBDietgW9UEgO6/hULi4abKqdiif5tswXuzsQGewvb8n/rYxSkFpxVnJGh5bPX3CsR 76JqkMP/CvFzaD35Zt2DUsP9bCR3Jwg27qRRxJubI56G6eBozaajIXquJKXDpX/YRlObD6fjDyP V3oY0vCZjzuCJIM6C0lLVpT4M9Ou5bFR11M1aqkNzx84Nc3y0HguoVenrTj/fwvn8q8UUHx3Did TMX53xE2ER7JLUwnoTA2s7WzIeFFCTHUQPKzW8NKgGdyDSFrKOALJKY4dY+5u2WXHDQzZbeWZVM RXgFXqLIBvfF9l2ZW2/RSvSt+d8MiwaacXqxxgwmeC1wO4W/n3BZ5YemrAsPjshtTsqEzaXZZMH OjqAbk5B0F2eEW9GlmT3piwxiIl/k5FVxLtqSI42fexU+hk5zDC/JtFjejPFG7+M1GJKORL0nPQ ZFS5j84F05NSsSV9iFNwSVJWwVH+OJfVl3kFkrmxNBux3SYpjFq+JvJVinm6P6+1xGKsOv8GOjv RlnoAqBHJwG7pAh/XolRcRsteebdg8TcMF4DBon9CUXxG8MgSyY+8wRW7ZMq4yFydisLKCA1S9L i2CHQNEmQEDkX79r750FfRY2XowSwyPHhkZdjj12GOOCVaxn0RKQ1XmzA+dQvN801+uvIVo= X-Received: by 2002:a05:6808:191d:b0:467:5f1:fc93 with SMTP id 5614622812f47-480420bb06emr7736924b6e.9.1778253197958; Fri, 08 May 2026 08:13:17 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:20 -0600 Subject: [PATCH v3 20/32] target/mips: add Octeon MTM2 instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-20-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier 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: 1778253344024154100 MTM2 loads the high multiplier operand pair from rs/rt into MPL[2] and MPL[5]. This supplies the final operand pair consumed by the V3MULU three-limb multiplier helper. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split MTM2 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 82d0410e6c..7de2a8f6ec 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -49,6 +49,7 @@ MTP0 011100 rs:5 rt:5 00000 00000 001001 &r2 MTP1 011100 rs:5 rt:5 00000 00000 001010 &r2 MTP2 011100 rs:5 rt:5 00000 00000 001011 &r2 MTM1 011100 rs:5 rt:5 00000 00000 001100 &r2 +MTM2 011100 rs:5 rt:5 00000 00000 001101 &r2 =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 74533014d6..4207f01e85 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -292,6 +292,7 @@ TRANS(LWUX, trans_lx, MO_UL); TRANS(LDX, trans_lx, MO_UQ); TRANS(MTM0, trans_mtm, 0); TRANS(MTM1, trans_mtm, 1); +TRANS(MTM2, trans_mtm, 2); TRANS(MTP0, trans_mtp, 0); TRANS(MTP1, trans_mtp, 1); TRANS(MTP2, trans_mtp, 2); --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253424; cv=none; d=zohomail.com; s=zohoarc; b=HoPbHe2oqbZ1XppN6JBadiqXbzRpLQs7qGfCieDDKrTP6HTx7rjFgAl5tmw3L9SumeEg+fvagewB2zvPf8Kx1zUI2owAvuO5qGxqjpN5PpcfcMzAOQ6fV7FgDnqXeKVfJovo/LIvyv0VNqoZwP2HYMTWldVTjdAaq04XAe5fNus= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253424; 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=uraQUC7CmqH7WHj/Zvs9bcsKQvF6ASjiwV9ETQK23L8=; b=byHT+FxQ2aZwITyzjjmX6f17lJ8XDP74ufIrqWYEC1xWrBWVI1EXsRooYfU2CzceGMQK+J0QAlK54BqBZFT5WS/qNBhNxRfbdSi9jF3iNixVN0rOw2pQjaSlCnsqfGKjTnvIAUmF5eOR5KhLdHJPOMPCOFBATnP8U7ziXqv/a9M= 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 1778253424262387.0215715687947; Fri, 8 May 2026 08:17:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMtm-0002zE-8G; Fri, 08 May 2026 11:14: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 1wLMtG-0002hG-P7 for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:24 -0400 Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtE-0001kZ-Jf for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:22 -0400 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-435153d9b68so1271639fac.3 for ; Fri, 08 May 2026 08:13:19 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253199; x=1778857999; 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=uraQUC7CmqH7WHj/Zvs9bcsKQvF6ASjiwV9ETQK23L8=; b=IQOdtHd7PCW5D7GPkWlkafHeHYY/ywWFThRZqrdEm6opG+qNAxriVf/2mn2BdYudxJ PqrZMS7gMsEhkgrH0VBHsSUz6pfobsDu3E5u3V/6ML0UMUg/bRdDtykdVrYhldqSrpND O+0Ys/eXqTrE1flNd1H0jtUJGsbutzKAssEY6Hg84++zzR1TX1OPuk8B1HHcVu+f7fbN EtDk5vto2oeqIQW9pkJmda1r2/4Yh28rjfUeIRylLkw7GG9COS7He85cTIak/FAsrvo+ jE3wExWGKxqNBzCQOHvMGm5V2tkit/xX6LYug4aHtwXzuTTmGSTSqAbgXCMdNcAxSzSk bCqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253199; x=1778857999; 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=uraQUC7CmqH7WHj/Zvs9bcsKQvF6ASjiwV9ETQK23L8=; b=HVOEzkZuxw0N5RlNnnxVo+LitJH8Sc+Ba2fZl5pgS6hcyWqh4ynA22nJhNmPEOOR82 wMySHybb5Efvd1XlU9qOAUz+M1huPKK8zUGRNWQcPX8i8YMBpGRfd2Qlu0/0MyhXGtxz 7Y5r5OTC1c5SsK4tqPPCwzyem8GD6ifUXWG6Zoec8r4DbMkdf6ik5Z+gJqCBPcuy2tlG xAOvFFLLpW7CMI7AehizRqJnWYltt2Brxgct2AQh/q4A6zHwJeaDlJyQlB3jcfmIj8vL lauq4IXjkc+sPOlhLzR8o9j2TkRphlMnS3I//I2Z5OM+Ug26joWkdWOp1tESuvz17Ofc n5ug== X-Gm-Message-State: AOJu0Ywam3e+KnUCreFaIGNHoRGbaLfEzxz17h6CP0zJcHFNGB6JMHJL ovV/FGVBc9rxRAHfeQqO13NIfCOnh9N1zXn10+HMfGrdI/bgby1U7aKzbqpQ5w== X-Gm-Gg: Acq92OETfD8aFTdtpl16GfHjMXQjiB33G3d2T/4kvW09a0ec39g+i1fXkabAs4xqJN2 tTkADgzK1ZXY4GOXmmmxE9fpkXk5Mo7Syi6IJ07VcxPC8+2uvqojVHUtr1dlbM8Nu9x8G+DO9dW WP62aA2epxXhxxQXVhBmGqRkkzTWUGW9Y5lR0FZNRoicEvElpYhaGkyNi8v2jSI5Uhj1+kDZVtt nTFSHtPeLECf3HmqF8SkzbN2vU7KVzBkpsmPH2fSzZPlQlmVdpP3bW7vaf0az2GrdpNmYvHiZVH iEXBkT9evaiSxanH8/LwWn/F+3jPeEpKVghNdGeaoKKQTx0N8QNggPyeUnMMI+ixx6UAuY9YV6e OII+GpJrBtSOgBvmTcUVXdVJp2Od/lda0wo4aSkW+CTFidHlDqX7WU1C2EGn+pQ4AfJ6JSHvxa1 t+vMIhcYoP4u520q0nM0EIa+rzdvKit9IkbuoSCcwnv6OAawJ29XtjZCsflkT4dEzcWsRjjfZAe W79vIHmYGSFulOdLTBAAMUIJ4quj8TlEuz3mLVINb0Qo57NqO+G/A6xYtMmvGvtQYB909TAeD4w Kr9cobNieFWwNaQhiWU8ST1h/YnvuqgkSTQLUzl1EoxbfVoJTq/zeiEkGhgf8MlSpbnbE2I= X-Received: by 2002:a05:6871:797:b0:409:81eb:cf56 with SMTP id 586e51a60fabf-434f655e902mr8281485fac.27.1778253198874; Fri, 08 May 2026 08:13:18 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:21 -0600 Subject: [PATCH v3 21/32] target/mips: add Octeon VMULU instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-21-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2e; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x2e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253425625158500 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. Add helper and translator support for the two-limb accumulator operation. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split VMULU out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) - Use uadd64_overflow() for multiplier limb carry accumulation. (suggested by Richard Henderson) --- target/mips/helper.h | 1 + target/mips/tcg/octeon.decode | 1 + target/mips/tcg/octeon_translate.c | 17 +++++++++++++++++ target/mips/tcg/op_helper.c | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index e2b83a1d19..f1e78ae329 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -24,6 +24,7 @@ DEF_HELPER_FLAGS_1(dbitswap, TCG_CALL_NO_RWG_SE, tl, tl) 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) +DEF_HELPER_3(octeon_vmulu, i64, env, i64, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 7de2a8f6ec..1c3dbb4a33 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -50,6 +50,7 @@ MTP1 011100 rs:5 rt:5 00000 00000 001010 &r2 MTP2 011100 rs:5 rt:5 00000 00000 001011 &r2 MTM1 011100 rs:5 rt:5 00000 00000 001100 &r2 MTM2 011100 rs:5 rt:5 00000 00000 001101 &r2 +VMULU 011100 ..... ..... ..... 00000 001111 @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 4207f01e85..bcbf73c052 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -13,6 +13,8 @@ /* Include the auto-generated decoder. */ #include "decode-octeon.c.inc" =20 +typedef void gen_helper_lmi(TCGv_i64, TCGv_ptr, TCGv_i64, TCGv_i64); + static bool trans_BBIT(DisasContext *ctx, arg_BBIT *a) { TCGv_i64 p; @@ -281,6 +283,20 @@ static bool trans_mtp(DisasContext *ctx, arg_r2 *a, un= signed int index) return true; } =20 +static bool trans_vmul(DisasContext *ctx, arg_decode_ext_octeon1 *a, + gen_helper_lmi *helper) +{ + TCGv_i64 rs =3D tcg_temp_new_i64(); + TCGv_i64 rt =3D tcg_temp_new_i64(); + TCGv_i64 rd =3D tcg_temp_new_i64(); + + gen_load_gpr(rs, a->rs); + gen_load_gpr(rt, a->rt); + helper(rd, tcg_env, rs, rt); + gen_store_gpr(rd, a->rd); + return true; +} + TRANS(SAA, trans_saa, MO_UL); TRANS(SAAD, trans_saa, MO_UQ); TRANS(LBX, trans_lx, MO_SB); @@ -296,3 +312,4 @@ TRANS(MTM2, trans_mtm, 2); TRANS(MTP0, trans_mtp, 0); TRANS(MTP1, trans_mtp, 1); TRANS(MTP2, trans_mtp, 2); +TRANS(VMULU, trans_vmul, gen_helper_octeon_vmulu); diff --git a/target/mips/tcg/op_helper.c b/target/mips/tcg/op_helper.c index 4502ae2b5b..ab3fb06a16 100644 --- a/target/mips/tcg/op_helper.c +++ b/target/mips/tcg/op_helper.c @@ -144,6 +144,38 @@ target_ulong helper_rotx(target_ulong rs, uint32_t shi= ft, uint32_t shiftx, return (int64_t)(int32_t)(uint32_t)tmp5; } =20 +static void octeon_add_limb(uint64_t *sum, int limb_count, + uint64_t value, int limb) +{ + while (limb < limb_count && + uadd64_overflow(sum[limb], value, &sum[limb])) { + value =3D 1; + limb++; + } +} + +uint64_t helper_octeon_vmulu(CPUMIPSState *env, uint64_t rs, uint64_t rt) +{ + uint64_t lo, hi; + uint64_t sum[3] =3D {}; + + mulu64(&lo, &hi, env->active_tc.octeon.MPL[0], rs); + sum[0] =3D lo; + sum[1] =3D hi; + + mulu64(&lo, &hi, env->active_tc.octeon.MPL[1], rs); + octeon_add_limb(sum, 3, lo, 1); + octeon_add_limb(sum, 3, hi, 2); + + octeon_add_limb(sum, 3, rt, 0); + octeon_add_limb(sum, 3, env->active_tc.octeon.P[0], 0); + octeon_add_limb(sum, 3, env->active_tc.octeon.P[1], 1); + + env->active_tc.octeon.P[0] =3D sum[1]; + env->active_tc.octeon.P[1] =3D sum[2]; + return sum[0]; +} + /* these crc32 functions are based on target/loongarch/tcg/op_helper.c */ target_ulong helper_crc32(target_ulong val, target_ulong m, uint32_t sz) { --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253356; cv=none; d=zohomail.com; s=zohoarc; b=QMlUCAUfJML0Jgm2TjN6fwQV+QDgdGpJIqTAs0+SCKzWt/NDO2k9iR+GwIh2BfhMVKtC/9rtHEEwQxj5nEITczmmZw8gUpTo63dChtWBQgOCs5EpVHjBH+xTAVizUlcewxVcHMOY+tE5yISuTz5kSJV4TOBaPQ27N924PQw2Cyg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253356; 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=rEvObFEBKOnUCp3+aacmCnWcRQSvflnqgpsWE2tFMLw=; b=hOp4ZKVv4veqQ+0PhGQeOnXm1bAH/aPcjYYA52mNg840nk9XihjJQabY30t/nDAkwbtqKuXh3h3EczmpFvBc2bNEGNKZmTLe0mLy7Y/tpSczWE7Txfjm5Vh/PmIeuDWSDipG1UiZNzd1Yip3Ln+9Hdk1lty2xZCNH4noRplNoSc= 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 177825335698126.05523406067266; Fri, 8 May 2026 08:15:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMuM-0005CD-DS; Fri, 08 May 2026 11:14:30 -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 1wLMtH-0002hS-KS for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:26 -0400 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtF-0001km-5I for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:23 -0400 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-42ff0576868so987731fac.1 for ; Fri, 08 May 2026 08:13:20 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253200; x=1778858000; 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=rEvObFEBKOnUCp3+aacmCnWcRQSvflnqgpsWE2tFMLw=; b=Jx1xQu2rYly36BFLFraqAy4ksZnjAOqZmYVCRBxBlewdCZQ+dngbjy9+AMUzbmpkCc 1P9FX1M0/V8MizraCV7CvYA19NQ0gWfJDlmyTPeN5CIVjPap/vmHPxpkS01EoRa7TjG+ WcaOZcnlhzujfWeH37a303iCUnAvxqR+cZDYNzCuILpwo2LFHq8fvJ85c6IZZufqrXdB l8LVZ4kB3tLV66/N01upbHK8CgPGh2TIAkYydofYD96AgEknbWj9aybGQB1nBmBI3Bw8 DLekqidMup/SVtef91iRocC2qCe5uOHyDTd51K2h2b/pe/Fy46NGmuc3Egw/5fEK8qt0 7YgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253200; x=1778858000; 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=rEvObFEBKOnUCp3+aacmCnWcRQSvflnqgpsWE2tFMLw=; b=mQIPKB37tFcG+/MYcqRRyv1xrP7nTVsM5goSKWmPvbUZMlu8evNAci6qvBST8Fws3n Xv4GXCSyBgKFbIcXJXs9WobM2A4HVo9I1yvmwmtMSiXxUngbFauJ8ogWLhvjLZAIgbD5 THUi5ZVkCuLCA92Kzc3Moj2K6SWQNj4NA47Ai6xBhe2GBF5jCk4d+HvUbuPzhC9aPFFj DdCjTc9z7lf5LzBEgbBp+bkkC1k5Q0dbI/rmCiSFrZM5TfM2zmr3RhgdczaXXkBCwpj9 QyJQ1T/oq2sAkdfdHTxG//wCeByjpOp5xP51A5aXwxcbj5LMRhFi/GCl7DWIrDGL3tu+ xJQA== X-Gm-Message-State: AOJu0Ywxbr6ZGD06ROK8J9V9ZDVAY8X8Uvqu5xIPW8HmF7ODpHU1TSZ4 1aqJgg858URZIiRmPKabuLqC75/liHDO7ZYVGDZ/HrKLG5UqTrQSzLgGydpcNg== X-Gm-Gg: Acq92OH4G3cqDF1hbqoAz21CECsJe7h247YY20UrXN0hWvddc5fkWLMC9nj1R2EiNrN 6LPOLW6G9x1gDcwCYNyq8N06FHU/Byk3oaZCiu3ZB7urXcufDp7vmnPtXGI85fuYT8emkKkd8BW 3sQhpz933gH5wH79nPgJMAMNU6PUJ+Y0mKKtF6qWm9RQexig1kOiSVMP/5T/cevImPXvjT71Km7 7GPuu/sTfbgNUBofoqWVlP3PIaBaEsrIrxTscZFKpUfFvxh4Mp0MHzzf2hDe2uHmDfs83KVBSue M0yM6u+GyYPboVGAMF06phF3dE0h+s9/FkYKEcTpdVENpOMBqwQFxHWs2iMoeJyDJxOfTWm5Hmd N8QeRE5GNIphTdFDzWw8DlrTrX8J03wn1eBF9ralukfeyU/ysSOtIPJQS95pC+R59k/LN4HRcdu rPPagvwYOtlou1wg7mBChM5Nsb/0iAa8nxetgAOD2BD0YX5qo4YV1HDHWkjqZ396DTJoAl+8Lkq g7PrYqAjNvWxDHoX4Fy5MMk2o8A27gUncMgtassrCZkxtBXmrvZYltD+8/9g/L8UconBBSWqE/T s71pKv/TEEH1EB3GhFcL4vfV0nIH9y+5yJXlE3ATbs5r7EvFO3C6y0rqWob1PIWNcFP0Th0= X-Received: by 2002:a05:6870:a453:b0:430:2e5:df00 with SMTP id 586e51a60fabf-434f60edb43mr8487439fac.9.1778253199702; Fri, 08 May 2026 08:13:19 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:22 -0600 Subject: [PATCH v3 22/32] target/mips: add Octeon VMM0 instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-22-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::32; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x32.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253358670158500 VMM0 performs the VMULU accumulation, returns the low result, then feeds that result back into the MTM0 multiplier state with a zero high operand and clears partial products. Add helper and translator support for this multiplier chain-update operation. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split VMM0 out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) --- target/mips/helper.h | 1 + target/mips/tcg/octeon.decode | 1 + target/mips/tcg/octeon_translate.c | 1 + target/mips/tcg/op_helper.c | 16 ++++++++++++++++ 4 files changed, 19 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index f1e78ae329..46ccad95c3 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -25,6 +25,7 @@ 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) DEF_HELPER_3(octeon_vmulu, i64, env, i64, i64) +DEF_HELPER_3(octeon_vmm0, i64, env, i64, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 1c3dbb4a33..8a909ffcee 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -51,6 +51,7 @@ MTP2 011100 rs:5 rt:5 00000 00000 001011 &r2 MTM1 011100 rs:5 rt:5 00000 00000 001100 &r2 MTM2 011100 rs:5 rt:5 00000 00000 001101 &r2 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 bcbf73c052..c1dd03debd 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -313,3 +313,4 @@ TRANS(MTP0, trans_mtp, 0); TRANS(MTP1, trans_mtp, 1); TRANS(MTP2, trans_mtp, 2); TRANS(VMULU, trans_vmul, gen_helper_octeon_vmulu); +TRANS(VMM0, trans_vmul, gen_helper_octeon_vmm0); diff --git a/target/mips/tcg/op_helper.c b/target/mips/tcg/op_helper.c index ab3fb06a16..a1465068af 100644 --- a/target/mips/tcg/op_helper.c +++ b/target/mips/tcg/op_helper.c @@ -176,6 +176,22 @@ uint64_t helper_octeon_vmulu(CPUMIPSState *env, uint64= _t rs, uint64_t rt) return sum[0]; } =20 +uint64_t helper_octeon_vmm0(CPUMIPSState *env, uint64_t rs, uint64_t rt) +{ + uint64_t lo =3D helper_octeon_vmulu(env, rs, rt); + + /* + * Complete the VMULU accumulation, then apply the MTM0-style state + * update with the low result and a zero high operand. + */ + env->active_tc.octeon.MPL[0] =3D lo; + env->active_tc.octeon.MPL[3] =3D 0; + for (int i =3D 0; i < 2 * 3; i++) { + env->active_tc.octeon.P[i] =3D 0; + } + return lo; +} + /* these crc32 functions are based on target/loongarch/tcg/op_helper.c */ target_ulong helper_crc32(target_ulong val, target_ulong m, uint32_t sz) { --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253456; cv=none; d=zohomail.com; s=zohoarc; b=E/T4X4++Q/gsDUHQQVljZZ355Lg3dMde9fOmL+zeeZ8VB9Jk+jd1kyPL+EzpiMxE8WFthsh3SzcQhh9hbPAsMeDSfqY5Ls3+8JZ6w3PA/hJmqgHaI1nolJUpO/T/4LZzuJja41t6YmqtRxq1TczMYszsfOlNaFx//27wAUppX2w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253456; 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=8jAWn0Lv+jpcaH7C8oHJxREunpOusfqCStSsitWznJI=; b=WtcTrMPqQr2XMjUJw8Ho1eokl6IO8EdzSKK4Eg9yeTDEErSXklqgWXTpKvV8cw1iZF1FcZDGesWOdUmdCOI72RD8oe3LqeeNP2X9vSAbBWQwhxN6ADO7HEtTPRBsM1gUMgIjM7/MLIEQPrCIBmLY4qB6GcLN8t/2KRRNw0vuWy0= 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 1778253456753465.0326692423441; Fri, 8 May 2026 08:17:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMta-0002p7-3S; Fri, 08 May 2026 11:13: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 1wLMtI-0002hV-Jf for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:26 -0400 Received: from mail-oa1-x33.google.com ([2001:4860:4864:20::33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtG-0001lH-3l for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:23 -0400 Received: by mail-oa1-x33.google.com with SMTP id 586e51a60fabf-404254ffe8aso1780342fac.0 for ; Fri, 08 May 2026 08:13:21 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253201; x=1778858001; 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=8jAWn0Lv+jpcaH7C8oHJxREunpOusfqCStSsitWznJI=; b=oHiyyhN9AaDjQFkx5svMFZgJO6FCivZj8895tlkHFwqxLqPyebSlaC9h+jb3MmLgpP DCu7mHyJh0b/3S0dH1qTZXoiScP4EnVl3zfJCu3xKMYLCbYC8FDmZp5upGzTa7F86Eq3 UTU56HYu9bXdYgJVSblfD9DIx0TCavZwbCDhv9lYjHVCKtfUBmeelCPabfzh+qPKoG1z z8W0GDrTQghGqhkgtLOZejhH+KLc68e8zYpNZqUp26DS201rAnF0RFg6hOX+jT5nQfTO 8i3p6RgjZ2KQtcOLmlonooKQ9PoqZDA+BGb+abxpmOHrSyanFtlqPGY7ZqTbLiBhN1Gg oTUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253201; x=1778858001; 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=8jAWn0Lv+jpcaH7C8oHJxREunpOusfqCStSsitWznJI=; b=K60U8ERoD4PiLZS/Qepp8aYxLzdfr15B85LH+pJRovxE8St1dSTtJo0V5C+jkWkuE5 hzpvaz5+9TEcN4le4cSuZmbx+iXSCblkFpf58Bxg3nsUdORJF0eUeAVJkDFcbjOEL0CT vzwJHG6cqSswAEPcC0NviStGV3phzz1iTxXCjEh9CkN+4otXe5x44nIJdDqTUYfs7nNV ItSOmSbA6htHI5ipljpm1rHmGtRKhhyY70zrxA/d0LRyAm2uzmaU5QZ6OIZcRVKxVN/E HNPMkDbrEGedeY7wcmVJzfI44UHTm2DGteIqCpQ0sFcKEll9Pa0Ydn2SqUDSNd/xsmh/ ERYw== X-Gm-Message-State: AOJu0YxD8Q2e9xbuZWV4bHT97I5NIQ5o3yCK2eDADt9l5LY37FkA2zQS 2LgGIOW7KZTl2IRMczanA+hwjNlwWj4dbpRPKA0Fmz6bYuly+xHltl6Ol8h+zg== X-Gm-Gg: AeBDieuvhUv+xcgqLhNUk4FB9tI4KsHfpFmL+1+uo6rZSkRAIIYFxjaJO4r4wRAgcKr pc0HOWPGLZdkSowT4M720zl9Qlgn6ghu+Jk3F8/ZVGoCj3Utt4q2Q1auh8MSa3cKFoXD5oxV8oC BMqiotsvHIXqVZs/G5AnN90ov1IPtjAygq0yYAUoj7IwoYvzS1DeltJ3H1aSIySfawXvTV30UVO qf2tZ+M6+vhGtM8KuxZS/UVCjdjaTpoLyBhQubPtYclKyvSj187NWEo3IMg1aN5gwgrTMGTYeqQ japXCML+xNHfwpsMJMNiQpl/V+jb0i52fM90oehB8bdNaAmQsDRJOFOTf1rmF5PCaQiaFdx/Udw e8+FIqBSa4e5vb62aVniVLMDT+0FLHYDqJ6CLQj121opedDSdAmcF9/u305I8WTT+B0khk5ZzDn NQvgQ2JABX4aUrZ9cHTrB2322hjV8Hjg+qRVq6O5DDXabZ1bTrDBlfJfrlrOyU4qs2iq/PLT+2C AGXxmJunwispwaA4tYF2sVPVv+/o8KRUP9peDVJM6HHHJMOeP8ZZ8dgMB/9u9dvbf5HWHE7GIBu OcwLvxCW2cq3bm5+z6qanqS4IruQ5MlKzvIyP5ujUNqs4THZUunSouEfBi7bsxMerIeEvOyEFNv /6I8plg== X-Received: by 2002:a05:6871:655:b0:435:318b:1d32 with SMTP id 586e51a60fabf-435318b494fmr2455176fac.0.1778253200604; Fri, 08 May 2026 08:13:20 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:23 -0600 Subject: [PATCH v3 23/32] target/mips: add Octeon V3MULU instruction MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-23-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::33; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x33.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253457748158500 V3MULU extends VMULU across all three multiplier operand pairs, adding rt and the six partial-product limbs. Return the low result while shifting the remaining accumulated limbs back into P[0] through P[5]. Signed-off-by: James Hilliard --- Changes v2 -> v3: - Split V3MULU out of the combined Octeon arithmetic and memory instruction patch. (requested by Richard Henderson) --- target/mips/helper.h | 1 + target/mips/tcg/octeon.decode | 1 + target/mips/tcg/octeon_translate.c | 1 + target/mips/tcg/op_helper.c | 46 ++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 49 insertions(+) diff --git a/target/mips/helper.h b/target/mips/helper.h index 46ccad95c3..08fda55ae1 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -26,6 +26,7 @@ DEF_HELPER_3(crc32c, tl, tl, tl, i32) DEF_HELPER_FLAGS_4(rotx, TCG_CALL_NO_RWG_SE, tl, tl, i32, i32, i32) DEF_HELPER_3(octeon_vmulu, i64, env, i64, i64) DEF_HELPER_3(octeon_vmm0, i64, env, i64, i64) +DEF_HELPER_3(octeon_v3mulu, i64, env, i64, i64) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 8a909ffcee..54ca92a654 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -52,6 +52,7 @@ MTM1 011100 rs:5 rt:5 00000 00000 001100 &r2 MTM2 011100 rs:5 rt:5 00000 00000 001101 &r2 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 c1dd03debd..fe1ddeb973 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -314,3 +314,4 @@ TRANS(MTP1, trans_mtp, 1); TRANS(MTP2, trans_mtp, 2); TRANS(VMULU, trans_vmul, gen_helper_octeon_vmulu); TRANS(VMM0, trans_vmul, gen_helper_octeon_vmm0); +TRANS(V3MULU, trans_vmul, gen_helper_octeon_v3mulu); diff --git a/target/mips/tcg/op_helper.c b/target/mips/tcg/op_helper.c index a1465068af..e4107a304c 100644 --- a/target/mips/tcg/op_helper.c +++ b/target/mips/tcg/op_helper.c @@ -192,6 +192,52 @@ uint64_t helper_octeon_vmm0(CPUMIPSState *env, uint64_= t rs, uint64_t rt) return lo; } =20 +uint64_t helper_octeon_v3mulu(CPUMIPSState *env, uint64_t rs, uint64_t rt) +{ + uint64_t lo, hi; + uint64_t sum[7] =3D {}; + + mulu64(&lo, &hi, env->active_tc.octeon.MPL[0], rs); + sum[0] =3D lo; + sum[1] =3D hi; + + mulu64(&lo, &hi, env->active_tc.octeon.MPL[1], rs); + octeon_add_limb(sum, 7, lo, 1); + octeon_add_limb(sum, 7, hi, 2); + + mulu64(&lo, &hi, env->active_tc.octeon.MPL[2], rs); + octeon_add_limb(sum, 7, lo, 2); + octeon_add_limb(sum, 7, hi, 3); + + mulu64(&lo, &hi, env->active_tc.octeon.MPL[3], rs); + octeon_add_limb(sum, 7, lo, 3); + octeon_add_limb(sum, 7, hi, 4); + + mulu64(&lo, &hi, env->active_tc.octeon.MPL[4], rs); + octeon_add_limb(sum, 7, lo, 4); + octeon_add_limb(sum, 7, hi, 5); + + mulu64(&lo, &hi, env->active_tc.octeon.MPL[5], rs); + octeon_add_limb(sum, 7, lo, 5); + octeon_add_limb(sum, 7, hi, 6); + + octeon_add_limb(sum, 7, rt, 0); + octeon_add_limb(sum, 7, env->active_tc.octeon.P[0], 0); + octeon_add_limb(sum, 7, env->active_tc.octeon.P[1], 1); + octeon_add_limb(sum, 7, env->active_tc.octeon.P[2], 2); + octeon_add_limb(sum, 7, env->active_tc.octeon.P[3], 3); + octeon_add_limb(sum, 7, env->active_tc.octeon.P[4], 4); + octeon_add_limb(sum, 7, env->active_tc.octeon.P[5], 5); + + env->active_tc.octeon.P[0] =3D sum[1]; + env->active_tc.octeon.P[1] =3D sum[2]; + env->active_tc.octeon.P[2] =3D sum[3]; + env->active_tc.octeon.P[3] =3D sum[4]; + env->active_tc.octeon.P[4] =3D sum[5]; + env->active_tc.octeon.P[5] =3D sum[6]; + return sum[0]; +} + /* these crc32 functions are based on target/loongarch/tcg/op_helper.c */ target_ulong helper_crc32(target_ulong val, target_ulong m, uint32_t sz) { --=20 2.54.0 From nobody Mon May 25 20:32:01 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=1778253326; cv=none; d=zohomail.com; s=zohoarc; b=jga1AU5C0qF14WsJ1ra23qYSQhYqHREa+v7fbBwISCgmOjEQRyPytlWxIC7Qy3jAV0yHLhjrML4a+XSJSz6+jPHu+FYp2DeRO94x/b2QQhYRsoIjyrYS2yCoYhhOC/qkslFDBmtCkK0earVg58qWWDwuRUmSe72Wg3vLVTQ8Ics= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253326; 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=hFVHCN58pY4Te0rUYFWkIZamhOgAdl/wBYf7gt8R5Bs=; b=VK5xVQAo5ZSLX2U+eWgfeB13jQN7Rj7jZFpjg4EUjez2P5GrBbhCF60v2+GN88yzo322EaRBf+cBlnN01yN0l6q9pWyrNGYr75enRtDH0Ufdbvctc/Om7ZG5hGg/p2o23+ChHIHnr81YXaoQEt9x+x4UqWhO+xsVrhxZcBOpiZw= 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 1778253326636108.2457482667312; Fri, 8 May 2026 08:15:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMu9-0003kT-Ry; Fri, 08 May 2026 11:14:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wLMtJ-0002hj-FT for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:26 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtH-0001lY-3q for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:25 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-42fbf95cca8so1592342fac.0 for ; Fri, 08 May 2026 08:13:22 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253202; x=1778858002; 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=hFVHCN58pY4Te0rUYFWkIZamhOgAdl/wBYf7gt8R5Bs=; b=e0vuK+iZM0A/FXlYmXLxoKOawWPaEbXzJC8GLPNqiA8BsgSvpIRqd3wRWsQhka4pro 3iBD1lRhxMirSpG04R8a6Vsv7yMhdaG6dJQ2/vbG59QP90PzrF2N4gLiYq37j/Cz9pLs XdOC4jjlWAQb8GtBarUKB1qkQQblOgdK/CZjPY4byrMQHDmF/wtDS1KWw4Yxca6pAlYh Xgb4nOpoMIubY6EP4G1qohZzQDHBnAcR/bBaew+7hwDcDDaVNF7pTLYGzI99nMkRSGAM XiXzWxAzivRV2bY3QreokrbGzChQoqbPgAP8Mzl+olY8NOaVRxOuVUDY3FtCu+vL4xXs tkMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253202; x=1778858002; 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=hFVHCN58pY4Te0rUYFWkIZamhOgAdl/wBYf7gt8R5Bs=; b=A0s7OVdd0r0eSrPOBinp45gsLRKgxiE7SwIMA2tsIeFLkYdmz+cCWLQCJtoHvJLRtV JJB/6RnO6R17l597BhEVkJcvwUmeCDfo+nPVU0SUiamkTXQXCyXHO1o8fy0mRqeDXOyE z14jQVRQxr0V5J2mcV/xIJ8aml1qCZiNm5BHbWuMRkJ6zjOOP7KWB09oy8MJR34wCdX4 3x+F2wUEh6a/X/Z3uyMFQeXI96ndx71MGniVVC6Y4bZalZ/rLhnufZWvz2RA8ZUylxu2 u9Fw0gmBsW13qWMoOsal2mVRoalrkTDOToptYdSy0Oake0kjBM3zQ0fV2xcLUCUGnjgs WOfA== X-Gm-Message-State: AOJu0Yzx1ZL6G25msvgRzFit+2UBJBTbV2U/Q5v0j6+fI+fZZ6d4SCni /G+/NCkVwnEtVWjLelPQCl/iG0nM3CR9OHiyZMpYY0oXkmqlibWwvSMhCltU4w== X-Gm-Gg: Acq92OEYr4Wbf3JoDO/Kt5Wf7T64s8QBivWW4gowzUGhxyxqESeMnbUw1CMFMb9sBlw sih8abTYk3MarwGBThyEW//j2jSI74iciU2RCCEF/fuyEEKqZE4ZkgtcWVMHE7cuSF1/hD1XRNz 184IMk/5T13jn0kZYxLScDW9enNnl7Y/lb3JF1qVwjPurCw+f/20c9n8O3xsER6z1yWhu976G8q m6wMVnpIUM4oMBYVEUcV6uGeYjw3zuCM2mvTUC2PoM4oi9RUH/Jbwxzl8io+sRwDBnsO1tTpJTC HdNa2MjKTfK9E1G1MhDgK8j2aSXfYUgYCjRQG2u5cEshMKMO7Dp5EWK63SR8fImW7BDGiemZlDo twPpDlzBt/W7OB8JTLzK3OhTlOd5w+f7QxUh9QPzLIJoBz6JW+MvsEMKEF7bQboYQ1C3PAe11Fb 9Pgk38R+IT8Psxw6WCOuX8dUjAqj/sHDj3pe4PrDGUqXUBKmnBNRIjDy/z/Z30davlstSnFFb+R 86IriL+ynqkbnxsrW3WDTaK7zowrG5iD7sV3I2I0xpqpChhRTBvPPApiXEc77ciPom8bMvyFV19 hUh0PVx+6AMvxbj+nhXHIvl0002WcIYc68Rjg0UUOU9Y0RCN1l1KQKPytFuqv3whHg2Ol77MG0+ DNFmxFQ== X-Received: by 2002:a05:6870:f617:b0:41c:a61:b612 with SMTP id 586e51a60fabf-43556b27b4fmr1823353fac.1.1778253201609; Fri, 08 May 2026 08:13:21 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:24 -0600 Subject: [PATCH v3 24/32] 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: <20260508-mips-octeon-missing-insns-v2-v3-24-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2b; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x2b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253328287158500 Add a mips64/mips64el linux-user TCG smoke test for representative Octeon integer, comparison, population count, and multiplier instruction paths. 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) --- MAINTAINERS | 2 + tests/tcg/mips/Makefile.target | 11 ++ tests/tcg/mips/user/isa/octeon/octeon-insns.c | 145 ++++++++++++++++++++++= ++++ tests/tcg/mips64/Makefile.target | 20 ++++ tests/tcg/mips64el/Makefile.target | 8 ++ 5 files changed, 186 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 9d3d645953..9501aaf36c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -311,6 +311,8 @@ F: target/mips/ F: disas/*mips.c F: docs/system/cpu-models-mips.rst.inc F: tests/tcg/mips/ +F: tests/tcg/mips64/ +F: tests/tcg/mips64el/ =20 OpenRISC TCG CPUs M: Stafford Horne diff --git a/tests/tcg/mips/Makefile.target b/tests/tcg/mips/Makefile.target index 5d17c1706e..d9dc16f8ec 100644 --- a/tests/tcg/mips/Makefile.target +++ b/tests/tcg/mips/Makefile.target @@ -8,6 +8,17 @@ MIPS_SRC=3D$(SRC_PATH)/tests/tcg/mips # Set search path for all sources VPATH +=3D $(MIPS_SRC) =20 +ifneq ($(findstring 64,$(TARGET_NAME)),) +VPATH +=3D $(MIPS_SRC)/user/isa/octeon + +MIPS64_TESTS=3Docteon-insns + +TESTS +=3D $(MIPS64_TESTS) + +octeon-insns: CFLAGS+=3D-mabi=3D64 +run-octeon-insns: QEMU_OPTS+=3D-cpu Octeon68XX +endif + # hello-mips is 32 bit only ifeq ($(findstring 64,$(TARGET_NAME)),) MIPS_TESTS=3Dhello-mips 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..e9db93d1b6 --- /dev/null +++ b/tests/tcg/mips/user/isa/octeon/octeon-insns.c @@ -0,0 +1,145 @@ +/* + * 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; +} + +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); + + 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 Mon May 25 20:32:02 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=1778253482; cv=none; d=zohomail.com; s=zohoarc; b=kjBf3DLe2ANPZbhp/cwBHvmSTocfesGJzszmRKGe5I/fPjJcpdcz2aZcOjpg7ZA9B4kWSHW2qP6XFxbU6GZHvAt4GAADMsJhRcoBKLVNnAplpFQ8QQAxD7nUA3Xubqbty0pYJMnq2HslusruGS0fggNP9SIq6NwH1gN/+WR8HoE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253482; 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=eDUH6gVsEU3s3PR28lsUEIRSGTJ5z86zTutL+l73o/w=; b=Wyda0dHvdWPFEIwEUdbq/+IBJWGzSqna7GO2Jq5k8J7xv0sXamFKUK9k+1Sf2qqpDrp2E5FlCr05Axm9v/3pxpTtKLHDsMFAvm7Vs0+E1c0ecQwJzmTn4AvxQcK7kaC3f/R3A1WuNWv23szcBF0M2ZOksT1jYwQsM9dfJEoAArQ= 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 1778253482277331.1383266833018; Fri, 8 May 2026 08:18:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMuE-0004Kn-2c; Fri, 08 May 2026 11:14: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 1wLMtJ-0002hm-RQ for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:26 -0400 Received: from mail-oa1-x2a.google.com ([2001:4860:4864:20::2a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtH-0001lr-RB for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:25 -0400 Received: by mail-oa1-x2a.google.com with SMTP id 586e51a60fabf-409de4132b5so1295181fac.1 for ; Fri, 08 May 2026 08:13:23 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253202; x=1778858002; 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=eDUH6gVsEU3s3PR28lsUEIRSGTJ5z86zTutL+l73o/w=; b=Hg6YkWW51poSu72/uNtHk4KQV8qQK9+GUnxxszxOBY0BKCSb+tP+Fz4DYfWuzpL10R HcvogRqPbCROjSeYRBs6K6DKvKfq9H8mmyvbSbh4YZRzY2HM7j6hoptmiVmhv90KLb4Z VOhJeP1JDbItGr1p6onOt8NqyHGlY2flMsWfuFlU/W3lMXaAuLl3o8w9qlKc85CCvKh7 5GyGVvJ/yFe0eGrt24OLBRkDowDVrKLNxBZrn8UyfTzmpotPryd0S67AQmLfRdr5OTI9 AbJhNb2ifDpwNt1YQSmbi4aKbIGo7P+fkBAlBUFtGeUr96XcnmTfmQMxo18RdgiaVbzd gMwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253202; x=1778858002; 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=eDUH6gVsEU3s3PR28lsUEIRSGTJ5z86zTutL+l73o/w=; b=QoRBxSX7QMFqLUm32u+hqj7/2s2vhV+ChiNP9R4u6Ecy8zHWdTvS/Zd+vBK0Mr8Gmv XRoOiVXrnZGH+4B1elLFmzesyq3ybs5kBAJVIVf8WyvDWYjaahivJLXzvvBv8J0oJF4/ ZKSnHPr0Z5fIS0VHJsWZpAu05aBvRUXNXbhNu9Fesjxdsv6R/+LPe0QbP11HScR8Y8ON ed+nP0UgF6BB+Ad2MXKAmK+taSSXgjhlQqG371tFKxL8OTdBz8Qpp7MdHoYOMlvgP6yg o2Wq8sRg3bpKl/nIYM6o5AD/FS9JaFx6Iq5tN+nOvb6CWRWsqs4JAQiwoAJ3uekFmSr2 Sm1Q== X-Gm-Message-State: AOJu0YwzHbVYqOcgitgkxZidQxKZEL/EkAQv+fQ/1+DMFQw2bTbeR3nb CH29Ginu7NiGzY9JRKXbylMbFMmJGhne9RcTNJsA1O5TLZod5hN37nG61U/RJQ== X-Gm-Gg: AeBDietiyFHJB4ZdRf2DJzKom27Tjuts4kOdc7gWOrgS5Oq874pdu12yiyL7sHppCS1 1tCkq1gBHlbdtUjcuosrCajTtu1KYEnly8seiig6kaZnumBItKkdFX/p8gEGSxNcet7GaP6iZu9 +9zwu+0WollA0uG9jQxwYscO1GO7QId/eYPvJJLZk+bmMv/c4tbRo+nJXJcPwt7VMbv1v8MxZJy o1ReGUxPZh4oERZPqr0rRaeu7Au1DqvhFp30N8xUXestdebkZ3M1mObl4msbG8FImca5M71p3hP xaUuEXJ0PHbPnZXIbvP/jZGanESEIdX/NubJDAXNaY2HthxsVa8e84eW+cmoYYE6HXsjNiK8ldD J/1BI/GAxhKuciqmlpWvonFqcKlID/qAVUahzEDpcRBxLrD4j56EbIMdPeL7CHRiKN+RuQwel+R 6ciTe4JMmj8B/GfpC9G53cTNLTY0qq55gnQI3qCZRmMaPaHCazLHp2HfdNqSsQsthw21B61vOWb 3oEIHyP/atgtunXm0kUmTu5X/j+C3T7qiVjxjrVIQPEDLVsWynUnYVfX4Jl7jAgFxhsQ0RUCI02 fS/P+e4jn6Tv9gQ3RLZENihbsfLO8slk6Yho44Xd9aWZ2J0bRauwB56izd0oAi1VETPhLZU= X-Received: by 2002:a05:6870:249b:b0:42c:111b:73fe with SMTP id 586e51a60fabf-434f64e9244mr8165809fac.18.1778253202497; Fri, 08 May 2026 08:13:22 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:25 -0600 Subject: [PATCH v3 25/32] 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: <20260508-mips-octeon-missing-insns-v2-v3-25-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2a; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x2a.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: 1778253483233154100 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. 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) --- target/mips/tcg/octeon.decode | 17 ++++++ target/mips/tcg/octeon_translate.c | 118 +++++++++++++++++++++++++++++++++= ++++ 2 files changed, 135 insertions(+) diff --git a/target/mips/tcg/octeon.decode b/target/mips/tcg/octeon.decode index 54ca92a654..6f4102044f 100644 --- a/target/mips/tcg/octeon.decode +++ b/target/mips/tcg/octeon.decode @@ -59,6 +59,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 11100 011111 &zcb ZCBT 011100 base:5 00000 00000 11101 011111 &zcb diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index fe1ddeb973..cdaa926389 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -189,6 +189,112 @@ static bool trans_saa(DisasContext *ctx, arg_saa *a, = MemOp mop) return true; } =20 +static bool trans_la_common(DisasContext *ctx, int base, int add_reg, int = rd, + int64_t imm, bool dw) +{ + TCGv_i64 addr =3D tcg_temp_new_i64(); + + gen_base_offset_addr(ctx, addr, base, 0); + + if (dw) { + TCGv_i64 value =3D tcg_temp_new_i64(); + TCGv_i64 old =3D tcg_temp_new_i64(); + MemOp amo =3D mo_endian(ctx) | MO_UQ | MO_ALIGN; + + 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); + } else { + TCGv_i64 old =3D tcg_temp_new_i64(); + TCGv_i32 value32 =3D tcg_temp_new_i32(); + TCGv_i32 old32 =3D tcg_temp_new_i32(); + MemOp amo =3D mo_endian(ctx) | MO_UL | MO_ALIGN; + + if (add_reg < 0) { + tcg_gen_movi_i32(value32, imm); + } else { + TCGv_i64 value =3D tcg_temp_new_i64(); + + gen_load_gpr(value, add_reg); + tcg_gen_extrl_i64_i32(value32, value); + } + + tcg_gen_atomic_fetch_add_i32(old32, addr, value32, ctx->mem_idx, a= mo); + tcg_gen_ext_i32_i64(old, old32); + gen_store_gpr(old, rd); + } + + return true; +} + +static bool trans_law_common(DisasContext *ctx, int base, int add_reg, int= rd, + int64_t imm, bool dw) +{ + TCGv_i64 addr =3D tcg_temp_new_i64(); + + gen_base_offset_addr(ctx, addr, base, 0); + + if (dw) { + TCGv_i64 value =3D tcg_temp_new_i64(); + TCGv_i64 old =3D tcg_temp_new_i64(); + MemOp amo =3D mo_endian(ctx) | MO_UQ | MO_ALIGN; + + 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); + } else { + TCGv_i64 old =3D tcg_temp_new_i64(); + TCGv_i32 value32 =3D tcg_temp_new_i32(); + TCGv_i32 old32 =3D tcg_temp_new_i32(); + MemOp amo =3D mo_endian(ctx) | MO_UL | MO_ALIGN; + + if (add_reg >=3D 0) { + TCGv_i64 value =3D tcg_temp_new_i64(); + + gen_load_gpr(value, add_reg); + tcg_gen_extrl_i64_i32(value32, value); + } else { + tcg_gen_movi_i32(value32, imm); + } + + tcg_gen_atomic_xchg_i32(old32, addr, value32, ctx->mem_idx, amo); + tcg_gen_ext_i32_i64(old, old32); + gen_store_gpr(old, rd); + } + + return true; +} + +static bool do_lai(DisasContext *ctx, arg_la *a, int64_t imm, bool dw) +{ + return trans_la_common(ctx, a->base, -1, a->rd, imm, dw); +} + +static bool do_laa(DisasContext *ctx, arg_laa *a, bool dw) +{ + return trans_la_common(ctx, a->base, a->add, a->rd, 0, dw); +} + +static bool do_las(DisasContext *ctx, arg_la *a, int64_t imm, bool dw) +{ + return trans_law_common(ctx, a->base, -1, a->rd, imm, dw); +} + +static bool do_law(DisasContext *ctx, arg_laa *a, bool dw) +{ + return trans_law_common(ctx, a->base, a->add, a->rd, 0, dw); +} + static bool trans_ZCB(DisasContext *ctx, arg_zcb *a) { TCGv_i64 addr =3D tcg_temp_new_i64(); @@ -299,6 +405,18 @@ static bool trans_vmul(DisasContext *ctx, arg_decode_e= xt_octeon1 *a, =20 TRANS(SAA, trans_saa, MO_UL); TRANS(SAAD, trans_saa, MO_UQ); +TRANS(LAI, do_lai, 1, false); +TRANS(LAID, do_lai, 1, true); +TRANS(LAD, do_lai, -1, false); +TRANS(LADD, do_lai, -1, true); +TRANS(LAA, do_laa, false); +TRANS(LAAD, do_laa, true); +TRANS(LAS, do_las, -1, false); +TRANS(LASD, do_las, -1, true); +TRANS(LAC, do_las, 0, false); +TRANS(LACD, do_las, 0, true); +TRANS(LAW, do_law, false); +TRANS(LAWD, do_law, 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 Mon May 25 20:32:02 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=1778253338; cv=none; d=zohomail.com; s=zohoarc; b=TwHJXOMf+dnwU0yzln9+3yE8ksNTdZRbJEYj0U1tDJ7Oee7mm4bPyAu929bWDldWGeRINxI0LKTApI128DsufREWjqu0j42Sc3eDhRUdMQWzGi+RQNMKoG9SkfK4WD4kHoVZLzQOHWtbilNsKxishpvYaNm6fgBUV1YeDKH/800= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253338; 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=bSrLIrnEaC54tgyttsvnm4b/xtbqMWXsGcZtWsVLe6s=; b=KK9XSAb6c+wTXVc8QNbURFqh4MJqPm/3cXI2aCFpvq/YsUGsGFTxvsMwouH8CKgqMCbp2xG6LyvNwBCkxAJcvIb1ZAnP8ImN0gtzP6vWvanwsuB57sz2GnVzB8NkLkSOfwJ3G7BflsTEmPkH0JIpcSh5udNsu6yWR6r8PVfbazU= 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 1778253338823861.8457498525722; Fri, 8 May 2026 08:15:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMuF-0004Ui-IB; Fri, 08 May 2026 11:14:23 -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 1wLMtO-0002je-Qw for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:32 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtJ-0001mR-P9 for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:30 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-409de4132b5so1295232fac.1 for ; Fri, 08 May 2026 08:13:25 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253204; x=1778858004; 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=bSrLIrnEaC54tgyttsvnm4b/xtbqMWXsGcZtWsVLe6s=; b=JGeKP8ivFkZ+mbnZpb8o9hIRmzOMGzdh0DnhxAq0454J3rZUmdSoJgUOEMEcnqlp2o B+PKO9EUgnf1xkb5tqJtddrHniIuDHr1FEPh8nU3DefP4zzUrL5xzVsYHBraMt1n0Qxh 6InG+Wsd975E6Lv8QvX/pcEClgzGYdgMNWmZoD+QYRXPK4Z7kSNHSI8TYYh1oz8lTZFL l0kyXSFlDOpxjyoeHlwEFcIuTdhOFTn2MzUm8UsVivnGzFKqwUPVN7RKMFjwPUOy7urX LrFeAEwAcpWfVz0uDdrkiP7OzJ4jX35jWzGKQN+fI7mSpVI+2VU31Tsq0wJ3rmDiOJpE fJbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253204; x=1778858004; 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=bSrLIrnEaC54tgyttsvnm4b/xtbqMWXsGcZtWsVLe6s=; b=LJi4Z7/NrP8A0YLBJ67rKuhJrdgWvrMVEXK9soExwPNR2nP7hsxMKceNIYRwuO3oCb s8GomWZeervmAUMFH+16PrfSKLv1qJCENa05mo+yvKnSFBysU6ElTAAJhTFKCSjfLmQR woG2jZvSzsd+q6lw1wb1v1Uw2X71XIUJtGns3VkSC4gsKg8oPPb/LPLj8FYtU1v8ivZa 6fNaGdfaKHmWSzjsbP9MOlWAYonmCA5TyfuuTdUX3Y65PiALy4mnxUPpQ/rlaRlLWne4 ADe/nu98v/WqikhKoJf5Ixg/u047kjIv4W7DRecyfp4R6t0PjrsaxsQ3m0ivyMEeshUz 7gBA== X-Gm-Message-State: AOJu0YwiIoS/mJgbhNonr0gL9+Gs6eyRN6zurH53lUB8sLrHCmMTjYXg ml3O+xSCkauv3GmCdzsnUS59/8MtWGRIzh5UQsM/osPhwkapMQ6xuA/zWH1spg== X-Gm-Gg: AeBDietRmG8u0stbQZ8UMXXvHeLar2zZJl2cjtBP4NJcdC8U5JBA92OGWdWjfAcXHdv B3ZltSnZtO9UfewT8+s2mO2dQpM4zUHBYSCwtt6cvHzC0b8oXpkivcs9q93yf7QBzI9W/UgkSYj 1MPaZbCjVNsm0lqu5VvgjcsPvUJoeQdK07QL+HyJYKNaHjEZuo2w5RuuCESHaRHXx15trG/3dhq uv27rHqxz+hu/Gy9M2vL283M//j3+4B+2zIiCBgEfcjDFvUjpZYvBnXyiGyP7y9VSHZU40z80jc WbljqYKDyPCNI1xi7ujGok7PkBT7vOG4UgNaLl/ERGG/qd/3A9vjQQN4NUwEWxzvytFz1ydQ+bb YGX7X5G8+tYYOAT230xmXZP7cotNwrGnibxsLwj3Pmy3hmkt43EoSozScNeiN2QBsl5M5ZQtq2v tQpJFICdCqLhZIZ4EIqfwEzg90CZXbJSiErwcg5XCYnM3KykOTKGVUL7zIzzM4FkemNBXZvO0aN Qv5VllISOjC9xe1UdZjOSl2AXkvuDu9ORcbdNc2/ulaa8agLsWLXbBCHO7jUvBX68HRoX/qqMqK EVUmV2nwVJOmICzXOGk4QMaqkRZYV/ELl8bdISwVbm7lIRw/sDHNZLrkTacwxsNJudJ9h+g= X-Received: by 2002:a05:6871:8215:b0:42c:d98:9540 with SMTP id 586e51a60fabf-434f4e4c3c0mr8471582fac.0.1778253203675; Fri, 08 May 2026 08:13:23 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:26 -0600 Subject: [PATCH v3 26/32] target/mips: add Octeon COP2 crypto core support MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-26-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::31; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x31.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253340591158500 Octeon processors expose their crypto engines through selector-driven DMFC2/DMTC2 accesses rather than architected standalone opcodes. Add the common COP2 state, selector decode, and helper plumbing for the base engine set. This covers the hash, AES, CRC, GFM, 3DES, KASUMI, and SNOW3G engines and moves the implementation into octeon_crypto.c to keep the MIPS helper layer manageable. Model the AES result/input selector bank as writable as well as readable. Octeon COP2 engines use these slots as result-input staging registers, so the shared bank belongs with the base selector support. Extend the TCG smoke test with AES key-register readback checks for the selector window introduced here. Signed-off-by: James Hilliard --- Changes v1 -> v2: - Fold the AES COP2 selector readback smoke coverage into this patch. - Move Octeon COP2 decode plumbing into octeon_translate.c. (suggested by Philippe Mathieu-Daud=C3=A9) - Use uint64_t/i64 helper types for Octeon COP2 state transfers. (suggested by Philippe Mathieu-Daud=C3=A9) Changes v2 -> v3: - Remove redundant MIPS64 checks from Octeon COP2 translation; the opcode path is already restricted to TARGET_MIPS64 Octeon CPUs. (suggested by Richard Henderson) --- target/mips/cpu.h | 165 +++ target/mips/helper.h | 2 + target/mips/system/machine.c | 37 + target/mips/tcg/meson.build | 1 + target/mips/tcg/octeon_crypto.c | 1654 +++++++++++++++++++++= ++++ target/mips/tcg/octeon_translate.c | 204 +++ target/mips/tcg/translate.c | 9 + target/mips/tcg/translate.h | 1 + tests/tcg/mips/user/isa/octeon/octeon-insns.c | 71 ++ 9 files changed, 2144 insertions(+) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index c6d75c67ab..2712b882db 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -529,6 +529,169 @@ struct TCState { }; =20 struct MIPSITUState; +typedef enum MIPSOcteonSharedMode { + OCTEON_SHARED_MODE_NONE =3D 0, + OCTEON_SHARED_MODE_SHA512, + OCTEON_SHARED_MODE_SNOW3G, +} MIPSOcteonSharedMode; + +typedef enum MIPSOcteonCop2Sel { + OCTEON_COP2_SEL_HSH_DAT0 =3D 0x0040, + OCTEON_COP2_SEL_HSH_DAT1, + OCTEON_COP2_SEL_HSH_DAT2, + OCTEON_COP2_SEL_HSH_DAT3, + OCTEON_COP2_SEL_HSH_DAT4, + OCTEON_COP2_SEL_HSH_DAT5, + OCTEON_COP2_SEL_HSH_DAT6, + OCTEON_COP2_SEL_HSH_IV0 =3D 0x0048, + OCTEON_COP2_SEL_HSH_IV1, + OCTEON_COP2_SEL_HSH_IV2, + OCTEON_COP2_SEL_HSH_IV3, + OCTEON_COP2_SEL_SHA3_DAT24 =3D 0x0050, + OCTEON_COP2_SEL_SHA3_DAT15_WRITE =3D 0x0051, + OCTEON_COP2_SEL_HSH_STARTSHA1_COMPAT =3D 0x0057, + OCTEON_COP2_SEL_GFM_MUL_REFLECT0 =3D 0x0058, + OCTEON_COP2_SEL_GFM_MUL_REFLECT1, + OCTEON_COP2_SEL_GFM_RESINP_REFLECT0 =3D 0x005a, + OCTEON_COP2_SEL_GFM_RESINP_REFLECT1, + OCTEON_COP2_SEL_GFM_XOR0_REFLECT =3D 0x005c, + OCTEON_COP2_SEL_3DES_KEY0 =3D 0x0080, + OCTEON_COP2_SEL_3DES_KEY1, + OCTEON_COP2_SEL_3DES_KEY2, + OCTEON_COP2_SEL_3DES_IV =3D 0x0084, + OCTEON_COP2_SEL_3DES_RESULT =3D 0x0088, + OCTEON_COP2_SEL_3DES_RESULT_IN =3D 0x0098, + OCTEON_COP2_SEL_3DES_ENC_CBC =3D 0x4088, + /* + * Octeon reuses the 3DES key/result bank for KASUMI and only adds + * KASUMI-specific operation selectors. + */ + OCTEON_COP2_SEL_KAS_ENC_CBC =3D 0x4089, + OCTEON_COP2_SEL_3DES_ENC =3D 0x408a, + OCTEON_COP2_SEL_KAS_ENC =3D 0x408b, + OCTEON_COP2_SEL_3DES_DEC_CBC =3D 0x408c, + OCTEON_COP2_SEL_3DES_DEC =3D 0x408e, + OCTEON_COP2_SEL_AES_RESULT0 =3D 0x0100, + OCTEON_COP2_SEL_AES_RESULT1, + OCTEON_COP2_SEL_AES_IV0, + OCTEON_COP2_SEL_AES_IV1, + OCTEON_COP2_SEL_AES_KEY0, + OCTEON_COP2_SEL_AES_KEY1, + OCTEON_COP2_SEL_AES_KEY2, + OCTEON_COP2_SEL_AES_KEY3, + OCTEON_COP2_SEL_AES_ENC_CBC0 =3D 0x0108, + OCTEON_COP2_SEL_AES_ENC0 =3D 0x010a, + OCTEON_COP2_SEL_AES_DEC_CBC0 =3D 0x010c, + OCTEON_COP2_SEL_AES_DEC0 =3D 0x010e, + OCTEON_COP2_SEL_AES_KEYLENGTH =3D 0x0110, + OCTEON_COP2_SEL_AES_DAT0 =3D 0x0111, + OCTEON_COP2_SEL_CRC_POLYNOMIAL =3D 0x0200, + OCTEON_COP2_SEL_CRC_IV =3D 0x0201, + OCTEON_COP2_SEL_CRC_LEN =3D 0x0202, + OCTEON_COP2_SEL_CRC_IV_REFLECT =3D 0x0203, + OCTEON_COP2_SEL_CRC_WRITE_BYTE =3D 0x0204, + OCTEON_COP2_SEL_CRC_WRITE_HALF =3D 0x0205, + OCTEON_COP2_SEL_CRC_WRITE_WORD =3D 0x0206, + OCTEON_COP2_SEL_CRC_WRITE_POLYNOMIAL =3D 0x4200, + OCTEON_COP2_SEL_CRC_WRITE_LEN =3D 0x1202, + OCTEON_COP2_SEL_CRC_WRITE_IV_REFLECT =3D 0x0211, + OCTEON_COP2_SEL_CRC_WRITE_BYTE_REFLECT =3D 0x0214, + OCTEON_COP2_SEL_CRC_WRITE_HALF_REFLECT =3D 0x0215, + OCTEON_COP2_SEL_CRC_WRITE_WORD_REFLECT =3D 0x0216, + OCTEON_COP2_SEL_CRC_WRITE_DWORD =3D 0x1207, + OCTEON_COP2_SEL_CRC_WRITE_VAR =3D 0x1208, + OCTEON_COP2_SEL_CRC_WRITE_POLYNOMIAL_REFLECT =3D 0x4210, + OCTEON_COP2_SEL_CRC_WRITE_DWORD_REFLECT =3D 0x1217, + OCTEON_COP2_SEL_CRC_WRITE_VAR_REFLECT =3D 0x1218, + /* + * Octeon shares 0x0240..0x0257 between SHA512 state/data and the SNOW= 3G + * RESULT/FSM/LFSR window. + */ + OCTEON_COP2_SEL_HSH_DATW0 =3D 0x0240, + OCTEON_COP2_SEL_HSH_DATW1, + OCTEON_COP2_SEL_HSH_DATW2, + OCTEON_COP2_SEL_HSH_DATW3, + OCTEON_COP2_SEL_HSH_DATW4, + OCTEON_COP2_SEL_HSH_DATW5, + OCTEON_COP2_SEL_HSH_DATW6, + OCTEON_COP2_SEL_HSH_DATW7, + OCTEON_COP2_SEL_HSH_DATW8, + OCTEON_COP2_SEL_HSH_DATW9, + OCTEON_COP2_SEL_HSH_DATW10, + OCTEON_COP2_SEL_HSH_DATW11, + OCTEON_COP2_SEL_HSH_DATW12, + OCTEON_COP2_SEL_HSH_DATW13, + OCTEON_COP2_SEL_HSH_DATW14, + OCTEON_COP2_SEL_HSH_DATW15, + OCTEON_COP2_SEL_HSH_IVW0 =3D 0x0250, + OCTEON_COP2_SEL_HSH_IVW1, + OCTEON_COP2_SEL_HSH_IVW2, + OCTEON_COP2_SEL_HSH_IVW3, + OCTEON_COP2_SEL_HSH_IVW4, + OCTEON_COP2_SEL_HSH_IVW5, + OCTEON_COP2_SEL_HSH_IVW6, + OCTEON_COP2_SEL_HSH_IVW7, + OCTEON_COP2_SEL_SNOW3G_LFSR0 =3D 0x0240, + OCTEON_COP2_SEL_SNOW3G_LFSR1, + OCTEON_COP2_SEL_SNOW3G_LFSR2, + OCTEON_COP2_SEL_SNOW3G_LFSR3, + OCTEON_COP2_SEL_SNOW3G_LFSR4, + OCTEON_COP2_SEL_SNOW3G_LFSR5, + OCTEON_COP2_SEL_SNOW3G_LFSR6, + OCTEON_COP2_SEL_SNOW3G_LFSR7, + OCTEON_COP2_SEL_SNOW3G_RESULT =3D 0x0250, + OCTEON_COP2_SEL_SNOW3G_FSM0, + OCTEON_COP2_SEL_SNOW3G_FSM1, + OCTEON_COP2_SEL_SNOW3G_FSM2, + OCTEON_COP2_SEL_GFM_MUL0 =3D 0x0258, + OCTEON_COP2_SEL_GFM_MUL1, + OCTEON_COP2_SEL_GFM_RESINP0, + OCTEON_COP2_SEL_GFM_RESINP1, + OCTEON_COP2_SEL_GFM_XOR0, + OCTEON_COP2_SEL_GFM_POLY =3D 0x025e, + OCTEON_COP2_SEL_AES_ENC_CBC1 =3D 0x3109, + OCTEON_COP2_SEL_AES_ENC1 =3D 0x310b, + OCTEON_COP2_SEL_AES_DEC_CBC1 =3D 0x310d, + OCTEON_COP2_SEL_AES_DEC1 =3D 0x310f, + OCTEON_COP2_SEL_HSH_STARTMD5 =3D 0x4047, + OCTEON_COP2_SEL_SNOW3G_START =3D 0x404d, + OCTEON_COP2_SEL_SNOW3G_MORE =3D 0x404e, + OCTEON_COP2_SEL_HSH_STARTSHA256 =3D 0x404f, + OCTEON_COP2_SEL_GFM_XORMUL1_REFLECT =3D 0x405d, + OCTEON_COP2_SEL_HSH_STARTSHA1 =3D 0x4057, + OCTEON_COP2_SEL_HSH_STARTSHA512 =3D 0x424f, + OCTEON_COP2_SEL_GFM_XORMUL1 =3D 0x425d, +} MIPSOcteonCop2Sel; + +typedef struct MIPSOcteonCryptoState { + uint64_t des3_key[3]; + uint64_t des3_iv; + uint64_t des3_result; + uint64_t hash_state[4]; + uint64_t hash_block[8]; + uint64_t sha512_state[8]; + uint64_t sha512_block[16]; + uint64_t aes_iv[2]; + uint64_t aes_key[4]; + uint64_t aes_result[2]; + uint64_t aes_input[2]; + uint64_t gfm_mul[2]; + uint64_t gfm_result[2]; + uint64_t gfm_xor0; + uint64_t gfm_reflect_mul[2]; + uint64_t gfm_reflect_result[2]; + uint64_t gfm_reflect_xor0; + uint16_t gfm_poly; + uint8_t aes_keylen; + uint32_t shared_mode; + uint32_t crc_poly; + uint32_t crc_iv; + uint32_t crc_len; + uint32_t snow3g_fsm[3]; + uint32_t snow3g_lfsr[16]; + uint64_t snow3g_result; +} MIPSOcteonCryptoState; + typedef struct CPUArchState { TCState active_tc; CPUMIPSFPUContext active_fpu; @@ -550,6 +713,8 @@ typedef struct CPUArchState { #define MSAIR_ProcID 8 #define MSAIR_Rev 0 =20 + MIPSOcteonCryptoState octeon_crypto; + /* * CP0 Register 0 */ diff --git a/target/mips/helper.h b/target/mips/helper.h index 08fda55ae1..93a5a497d0 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -27,6 +27,8 @@ DEF_HELPER_FLAGS_4(rotx, TCG_CALL_NO_RWG_SE, tl, tl, i32,= i32, i32) DEF_HELPER_3(octeon_vmulu, i64, env, i64, i64) DEF_HELPER_3(octeon_vmm0, i64, env, i64, i64) DEF_HELPER_3(octeon_v3mulu, i64, env, i64, i64) +DEF_HELPER_2(octeon_cop2_dmfc2, i64, env, i32) +DEF_HELPER_3(octeon_cop2_dmtc2, void, env, i64, i32) =20 /* microMIPS functions */ DEF_HELPER_4(lwm, void, env, tl, tl, i32) diff --git a/target/mips/system/machine.c b/target/mips/system/machine.c index d6d6c23ad2..8595b1bdfa 100644 --- a/target/mips/system/machine.c +++ b/target/mips/system/machine.c @@ -279,6 +279,42 @@ static const VMStateDescription mips_vmstate_octeon_mu= ltiplier =3D { } }; =20 +static const VMStateDescription mips_vmstate_octeon_crypto =3D { + .name =3D "cpu/octeon_crypto", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D mips_octeon_needed, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT64_ARRAY(env.octeon_crypto.des3_key, MIPSCPU, 3), + VMSTATE_UINT64(env.octeon_crypto.des3_iv, MIPSCPU), + VMSTATE_UINT64(env.octeon_crypto.des3_result, MIPSCPU), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.hash_state, MIPSCPU, 4), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.hash_block, MIPSCPU, 8), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.sha512_state, MIPSCPU, 8), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.sha512_block, MIPSCPU, 16), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_iv, MIPSCPU, 2), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_key, MIPSCPU, 4), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_result, MIPSCPU, 2), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_input, MIPSCPU, 2), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.gfm_mul, MIPSCPU, 2), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.gfm_result, MIPSCPU, 2), + VMSTATE_UINT64(env.octeon_crypto.gfm_xor0, MIPSCPU), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.gfm_reflect_mul, MIPSCPU, 2= ), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.gfm_reflect_result, MIPSCPU= , 2), + VMSTATE_UINT64(env.octeon_crypto.gfm_reflect_xor0, MIPSCPU), + VMSTATE_UINT16(env.octeon_crypto.gfm_poly, MIPSCPU), + VMSTATE_UINT8(env.octeon_crypto.aes_keylen, MIPSCPU), + VMSTATE_UINT32(env.octeon_crypto.shared_mode, MIPSCPU), + VMSTATE_UINT32(env.octeon_crypto.crc_poly, MIPSCPU), + VMSTATE_UINT32(env.octeon_crypto.crc_iv, MIPSCPU), + VMSTATE_UINT32(env.octeon_crypto.crc_len, MIPSCPU), + VMSTATE_UINT32_ARRAY(env.octeon_crypto.snow3g_fsm, MIPSCPU, 3), + VMSTATE_UINT32_ARRAY(env.octeon_crypto.snow3g_lfsr, MIPSCPU, 16), + VMSTATE_UINT64(env.octeon_crypto.snow3g_result, MIPSCPU), + VMSTATE_END_OF_LIST() + } +}; + const VMStateDescription vmstate_mips_cpu =3D { .name =3D "cpu", .version_id =3D 21, @@ -396,6 +432,7 @@ const VMStateDescription vmstate_mips_cpu =3D { .subsections =3D (const VMStateDescription * const []) { &mips_vmstate_timer, &mips_vmstate_octeon_multiplier, + &mips_vmstate_octeon_crypto, NULL } }; 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..43012ff027 --- /dev/null +++ b/target/mips/tcg/octeon_crypto.c @@ -0,0 +1,1654 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * MIPS Octeon crypto emulation helpers. + * + * Copyright (c) 2026 James Hilliard + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "internal.h" +#include "exec/helper-proto.h" +#include "crypto/aes.h" +#include "crypto/clmul.h" +#include "qemu/bitops.h" +#include "qemu/host-utils.h" + +static inline void octeon_set_shared_mode(MIPSOcteonCryptoState *crypto, + MIPSOcteonSharedMode mode) +{ + crypto->shared_mode =3D mode; +} + +static inline uint32_t octeon_crc_reflect32_by_byte(uint32_t v) +{ + return bswap32(revbit32(v)); +} + +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); +} + +static uint64_t octeon_gfm_reduce64(Int128 product, uint8_t poly) +{ + uint64_t lo =3D int128_getlo(product); + uint64_t hi =3D int128_gethi(product); + + while (hi) { + int bit =3D 63 - clz64(hi); + uint64_t shifted_poly =3D (uint64_t)poly << bit; + + hi ^=3D 1ULL << bit; + lo ^=3D shifted_poly; + if (bit > 56) { + hi ^=3D (uint64_t)poly >> (64 - bit); + } + } + + return lo; +} + +static void octeon_gfm_mul64_uia2(const uint64_t x[2], const uint64_t y[2], + uint8_t poly, uint64_t out[2]) +{ + uint64_t vx =3D revbit64(x[1]); + uint64_t vy =3D revbit64(y[0]); + Int128 product =3D clmul_64(vx, vy); + uint64_t res =3D octeon_gfm_reduce64(product, revbit32(poly) >> 24); + + out[0] =3D 0; + out[1] =3D revbit64(res); +} + +static void octeon_gfm_mul_reflect(MIPSOcteonCryptoState *crypto, uint64_t= q) +{ + uint64_t in[2] =3D { + crypto->gfm_reflect_result[0] ^ crypto->gfm_reflect_xor0, + crypto->gfm_reflect_result[1] ^ q, + }; + + octeon_gfm_mul64_uia2(in, crypto->gfm_reflect_mul, + crypto->gfm_poly, crypto->gfm_reflect_result); + crypto->gfm_reflect_xor0 =3D 0; +} + +static inline void octeon_hash_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_hash_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_hash_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_hash_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->hash_block[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_hash_load_reg_words_le(crypto->hash_state[0], &a, &b); + octeon_hash_load_reg_words_le(crypto->hash_state[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->hash_state[0] =3D octeon_hash_store_reg_words_le(a, b); + crypto->hash_state[1] =3D octeon_hash_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_hash_load_reg_words_be(crypto->hash_block[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_hash_load_reg_words_be(crypto->hash_state[0], &a, &b); + octeon_hash_load_reg_words_be(crypto->hash_state[1], &c, &d); + e =3D crypto->hash_state[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_hash_load_reg_words_be(crypto->hash_state[0], &w[0], &w[1]); + octeon_hash_load_reg_words_be(crypto->hash_state[1], &w[2], &w[3]); + w[4] =3D crypto->hash_state[2] >> 32; + w[0] +=3D a; + w[1] +=3D b; + w[2] +=3D c; + w[3] +=3D d; + w[4] +=3D e; + crypto->hash_state[0] =3D octeon_hash_store_reg_words_be(w[0], w[1]); + crypto->hash_state[1] =3D octeon_hash_store_reg_words_be(w[2], w[3]); + crypto->hash_state[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_hash_load_reg_words_be(crypto->hash_block[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_hash_load_reg_words_be(crypto->hash_state[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->hash_state[i] =3D + octeon_hash_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->sha512_block[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->sha512_state[0]; + b =3D crypto->sha512_state[1]; + c =3D crypto->sha512_state[2]; + d =3D crypto->sha512_state[3]; + e =3D crypto->sha512_state[4]; + f =3D crypto->sha512_state[5]; + g =3D crypto->sha512_state[6]; + h =3D crypto->sha512_state[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->sha512_state[0] +=3D a; + crypto->sha512_state[1] +=3D b; + crypto->sha512_state[2] +=3D c; + crypto->sha512_state[3] +=3D d; + crypto->sha512_state[4] +=3D e; + crypto->sha512_state[5] +=3D f; + crypto->sha512_state[6] +=3D g; + crypto->sha512_state[7] +=3D h; +} + +static void octeon_store_shared_hash_dat(MIPSOcteonCryptoState *crypto, + uint32_t sel, uint64_t value) +{ + switch (sel) { + case OCTEON_COP2_SEL_HSH_DATW0 ... OCTEON_COP2_SEL_HSH_DATW14: + crypto->sha512_block[sel - OCTEON_COP2_SEL_HSH_DATW0] =3D value; + break; + case OCTEON_COP2_SEL_HSH_IVW0 ... OCTEON_COP2_SEL_HSH_IVW7: + crypto->sha512_state[sel - OCTEON_COP2_SEL_HSH_IVW0] =3D value; + break; + default: + g_assert_not_reached(); + } +} + +static const uint8_t octeon_snow3g_sr[256] =3D { + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, + 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, + 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, + 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, + 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, + 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, + 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, + 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, + 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, + 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, + 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, + 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, + 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, + 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, + 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, + 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, + 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16, +}; + +static const uint8_t octeon_snow3g_sq[256] =3D { + 0x25, 0x24, 0x73, 0x67, 0xd7, 0xae, 0x5c, 0x30, + 0xa4, 0xee, 0x6e, 0xcb, 0x7d, 0xb5, 0x82, 0xdb, + 0xe4, 0x8e, 0x48, 0x49, 0x4f, 0x5d, 0x6a, 0x78, + 0x70, 0x88, 0xe8, 0x5f, 0x5e, 0x84, 0x65, 0xe2, + 0xd8, 0xe9, 0xcc, 0xed, 0x40, 0x2f, 0x11, 0x28, + 0x57, 0xd2, 0xac, 0xe3, 0x4a, 0x15, 0x1b, 0xb9, + 0xb2, 0x80, 0x85, 0xa6, 0x2e, 0x02, 0x47, 0x29, + 0x07, 0x4b, 0x0e, 0xc1, 0x51, 0xaa, 0x89, 0xd4, + 0xca, 0x01, 0x46, 0xb3, 0xef, 0xdd, 0x44, 0x7b, + 0xc2, 0x7f, 0xbe, 0xc3, 0x9f, 0x20, 0x4c, 0x64, + 0x83, 0xa2, 0x68, 0x42, 0x13, 0xb4, 0x41, 0xcd, + 0xba, 0xc6, 0xbb, 0x6d, 0x4d, 0x71, 0x21, 0xf4, + 0x8d, 0xb0, 0xe5, 0x93, 0xfe, 0x8f, 0xe6, 0xcf, + 0x43, 0x45, 0x31, 0x22, 0x37, 0x36, 0x96, 0xfa, + 0xbc, 0x0f, 0x08, 0x52, 0x1d, 0x55, 0x1a, 0xc5, + 0x4e, 0x23, 0x69, 0x7a, 0x92, 0xff, 0x5b, 0x5a, + 0xeb, 0x9a, 0x1c, 0xa9, 0xd1, 0x7e, 0x0d, 0xfc, + 0x50, 0x8a, 0xb6, 0x62, 0xf5, 0x0a, 0xf8, 0xdc, + 0x03, 0x3c, 0x0c, 0x39, 0xf1, 0xb8, 0xf3, 0x3d, + 0xf2, 0xd5, 0x97, 0x66, 0x81, 0x32, 0xa0, 0x00, + 0x06, 0xce, 0xf6, 0xea, 0xb7, 0x17, 0xf7, 0x8c, + 0x79, 0xd6, 0xa7, 0xbf, 0x8b, 0x3f, 0x1f, 0x53, + 0x63, 0x75, 0x35, 0x2c, 0x60, 0xfd, 0x27, 0xd3, + 0x94, 0xa5, 0x7c, 0xa1, 0x05, 0x58, 0x2d, 0xbd, + 0xd9, 0xc7, 0xaf, 0x6b, 0x54, 0x0b, 0xe0, 0x38, + 0x04, 0xc8, 0x9d, 0xe7, 0x14, 0xb1, 0x87, 0x9c, + 0xdf, 0x6f, 0xf9, 0xda, 0x2a, 0xc4, 0x59, 0x16, + 0x74, 0x91, 0xab, 0x26, 0x61, 0x76, 0x34, 0x2b, + 0xad, 0x99, 0xfb, 0x72, 0xec, 0x33, 0x12, 0xde, + 0x98, 0x3b, 0xc0, 0x9b, 0x3e, 0x18, 0x10, 0x3a, + 0x56, 0xe1, 0x77, 0xc9, 0x1e, 0x9e, 0x95, 0xa3, + 0x90, 0x19, 0xa8, 0x6c, 0x09, 0xd0, 0xf0, 0x86, +}; + +static inline uint8_t octeon_snow3g_mulx(uint8_t v, uint8_t c) +{ + return (v & 0x80) ? ((v << 1) ^ c) : (v << 1); +} + +static uint8_t octeon_snow3g_mulxpow(uint8_t v, unsigned int n, uint8_t c) +{ + while (n-- > 0) { + v =3D octeon_snow3g_mulx(v, c); + } + return v; +} + +static inline uint32_t octeon_snow3g_pack32(uint8_t b0, uint8_t b1, + uint8_t b2, uint8_t b3) +{ + return ((uint32_t)b0 << 24) | ((uint32_t)b1 << 16) | + ((uint32_t)b2 << 8) | b3; +} + +static uint32_t octeon_snow3g_mulalpha(uint8_t c) +{ + return octeon_snow3g_pack32(octeon_snow3g_mulxpow(c, 23, 0xa9), + octeon_snow3g_mulxpow(c, 245, 0xa9), + octeon_snow3g_mulxpow(c, 48, 0xa9), + octeon_snow3g_mulxpow(c, 239, 0xa9)); +} + +static uint32_t octeon_snow3g_divalpha(uint8_t c) +{ + return octeon_snow3g_pack32(octeon_snow3g_mulxpow(c, 16, 0xa9), + octeon_snow3g_mulxpow(c, 39, 0xa9), + octeon_snow3g_mulxpow(c, 6, 0xa9), + octeon_snow3g_mulxpow(c, 64, 0xa9)); +} + +static uint32_t octeon_snow3g_s1(uint32_t w) +{ + uint8_t x0 =3D octeon_snow3g_sr[w >> 24]; + uint8_t x1 =3D octeon_snow3g_sr[(uint8_t)(w >> 16)]; + uint8_t x2 =3D octeon_snow3g_sr[(uint8_t)(w >> 8)]; + uint8_t x3 =3D octeon_snow3g_sr[(uint8_t)w]; + uint8_t r0 =3D octeon_snow3g_mulx(x0, 0x1b) ^ x1 ^ x2 ^ + octeon_snow3g_mulx(x3, 0x1b) ^ x3; + uint8_t r1 =3D octeon_snow3g_mulx(x0, 0x1b) ^ x0 ^ + octeon_snow3g_mulx(x1, 0x1b) ^ x2 ^ x3; + uint8_t r2 =3D x0 ^ octeon_snow3g_mulx(x1, 0x1b) ^ x1 ^ + octeon_snow3g_mulx(x2, 0x1b) ^ x3; + uint8_t r3 =3D x0 ^ x1 ^ octeon_snow3g_mulx(x2, 0x1b) ^ x2 ^ + octeon_snow3g_mulx(x3, 0x1b); + + return octeon_snow3g_pack32(r0, r1, r2, r3); +} + +static uint32_t octeon_snow3g_s2(uint32_t w) +{ + uint8_t x0 =3D octeon_snow3g_sq[w >> 24]; + uint8_t x1 =3D octeon_snow3g_sq[(uint8_t)(w >> 16)]; + uint8_t x2 =3D octeon_snow3g_sq[(uint8_t)(w >> 8)]; + uint8_t x3 =3D octeon_snow3g_sq[(uint8_t)w]; + uint8_t r0 =3D octeon_snow3g_mulx(x0, 0x69) ^ x1 ^ x2 ^ + octeon_snow3g_mulx(x3, 0x69) ^ x3; + uint8_t r1 =3D octeon_snow3g_mulx(x0, 0x69) ^ x0 ^ + octeon_snow3g_mulx(x1, 0x69) ^ x2 ^ x3; + uint8_t r2 =3D x0 ^ octeon_snow3g_mulx(x1, 0x69) ^ x1 ^ + octeon_snow3g_mulx(x2, 0x69) ^ x3; + uint8_t r3 =3D x0 ^ x1 ^ octeon_snow3g_mulx(x2, 0x69) ^ x2 ^ + octeon_snow3g_mulx(x3, 0x69); + + return octeon_snow3g_pack32(r0, r1, r2, r3); +} + +static uint32_t octeon_snow3g_clock_fsm(MIPSOcteonCryptoState *crypto) +{ + uint32_t f =3D (uint32_t)(crypto->snow3g_lfsr[15] + crypto->snow3g_fsm= [0]) ^ + crypto->snow3g_fsm[1]; + uint32_t r =3D (uint32_t)(crypto->snow3g_fsm[1] + + (crypto->snow3g_fsm[2] ^ crypto->snow3g_lfsr[5= ])); + + crypto->snow3g_fsm[2] =3D octeon_snow3g_s2(crypto->snow3g_fsm[1]); + crypto->snow3g_fsm[1] =3D octeon_snow3g_s1(crypto->snow3g_fsm[0]); + crypto->snow3g_fsm[0] =3D r; + return f; +} + +static void octeon_snow3g_clock_lfsr(MIPSOcteonCryptoState *crypto, + bool init_mode, uint32_t f) +{ + uint32_t s0 =3D crypto->snow3g_lfsr[0]; + uint32_t s11 =3D crypto->snow3g_lfsr[11]; + uint32_t v =3D (s0 << 8) ^ octeon_snow3g_mulalpha(s0 >> 24) ^ + crypto->snow3g_lfsr[2] ^ (s11 >> 8) ^ + octeon_snow3g_divalpha((uint8_t)s11); + int i; + + if (init_mode) { + v ^=3D f; + } + + for (i =3D 0; i < 15; i++) { + crypto->snow3g_lfsr[i] =3D crypto->snow3g_lfsr[i + 1]; + } + crypto->snow3g_lfsr[15] =3D v; +} + +static uint32_t octeon_snow3g_generate_word(MIPSOcteonCryptoState *crypto) +{ + uint32_t f =3D octeon_snow3g_clock_fsm(crypto); + uint32_t z =3D f ^ crypto->snow3g_lfsr[0]; + + octeon_snow3g_clock_lfsr(crypto, false, 0); + return z; +} + +static void octeon_snow3g_queue_result(MIPSOcteonCryptoState *crypto) +{ + uint32_t z0 =3D octeon_snow3g_generate_word(crypto); + uint32_t z1 =3D octeon_snow3g_generate_word(crypto); + + crypto->snow3g_result =3D ((uint64_t)z0 << 32) | z1; +} + +static void octeon_snow3g_start(MIPSOcteonCryptoState *crypto, uint64_t q) +{ + int i; + + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SNOW3G); + for (i =3D 0; i < 7; i++) { + uint64_t pair =3D crypto->sha512_block[i]; + + crypto->snow3g_lfsr[i * 2] =3D pair >> 32; + crypto->snow3g_lfsr[i * 2 + 1] =3D pair; + } + crypto->snow3g_lfsr[14] =3D q >> 32; + crypto->snow3g_lfsr[15] =3D q; + memset(crypto->snow3g_fsm, 0, sizeof(crypto->snow3g_fsm)); + + for (i =3D 0; i < 32; i++) { + uint32_t f =3D octeon_snow3g_clock_fsm(crypto); + + octeon_snow3g_clock_lfsr(crypto, true, f); + } + + (void)octeon_snow3g_clock_fsm(crypto); + octeon_snow3g_clock_lfsr(crypto, false, 0); + octeon_snow3g_queue_result(crypto); +} + +static void octeon_snow3g_more(MIPSOcteonCryptoState *crypto) +{ + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SNOW3G); + octeon_snow3g_queue_result(crypto); +} + +static 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 const uint8_t octeon_des_ip[64] =3D { + 58, 50, 42, 34, 26, 18, 10, 2, + 60, 52, 44, 36, 28, 20, 12, 4, + 62, 54, 46, 38, 30, 22, 14, 6, + 64, 56, 48, 40, 32, 24, 16, 8, + 57, 49, 41, 33, 25, 17, 9, 1, + 59, 51, 43, 35, 27, 19, 11, 3, + 61, 53, 45, 37, 29, 21, 13, 5, + 63, 55, 47, 39, 31, 23, 15, 7, +}; + +static const uint8_t octeon_des_fp[64] =3D { + 40, 8, 48, 16, 56, 24, 64, 32, + 39, 7, 47, 15, 55, 23, 63, 31, + 38, 6, 46, 14, 54, 22, 62, 30, + 37, 5, 45, 13, 53, 21, 61, 29, + 36, 4, 44, 12, 52, 20, 60, 28, + 35, 3, 43, 11, 51, 19, 59, 27, + 34, 2, 42, 10, 50, 18, 58, 26, + 33, 1, 41, 9, 49, 17, 57, 25, +}; + +static const uint8_t octeon_des_e[48] =3D { + 32, 1, 2, 3, 4, 5, + 4, 5, 6, 7, 8, 9, + 8, 9, 10, 11, 12, 13, + 12, 13, 14, 15, 16, 17, + 16, 17, 18, 19, 20, 21, + 20, 21, 22, 23, 24, 25, + 24, 25, 26, 27, 28, 29, + 28, 29, 30, 31, 32, 1, +}; + +static const uint8_t octeon_des_p[32] =3D { + 16, 7, 20, 21, 29, 12, 28, 17, + 1, 15, 23, 26, 5, 18, 31, 10, + 2, 8, 24, 14, 32, 27, 3, 9, + 19, 13, 30, 6, 22, 11, 4, 25, +}; + +static const uint8_t octeon_des_pc1[56] =3D { + 57, 49, 41, 33, 25, 17, 9, + 1, 58, 50, 42, 34, 26, 18, + 10, 2, 59, 51, 43, 35, 27, + 19, 11, 3, 60, 52, 44, 36, + 63, 55, 47, 39, 31, 23, 15, + 7, 62, 54, 46, 38, 30, 22, + 14, 6, 61, 53, 45, 37, 29, + 21, 13, 5, 28, 20, 12, 4, +}; + +static const uint8_t octeon_des_pc2[48] =3D { + 14, 17, 11, 24, 1, 5, + 3, 28, 15, 6, 21, 10, + 23, 19, 12, 4, 26, 8, + 16, 7, 27, 20, 13, 2, + 41, 52, 31, 37, 47, 55, + 30, 40, 51, 45, 33, 48, + 44, 49, 39, 56, 34, 53, + 46, 42, 50, 36, 29, 32, +}; + +static const uint8_t octeon_des_rotations[16] =3D { + 1, 1, 2, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 1, +}; + +static const uint8_t octeon_des_sboxes[8][64] =3D { + { + 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, + 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, + 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, + 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13, + }, + { + 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, + 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, + 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, + 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9, + }, + { + 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, + 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, + 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, + 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12, + }, + { + 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, + 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, + 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, + 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14, + }, + { + 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, + 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, + 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, + 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3, + }, + { + 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, + 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, + 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, + 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13, + }, + { + 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, + 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, + 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, + 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12, + }, + { + 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, + 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, + 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, + 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11, + }, +}; + +static const uint8_t octeon_kasumi_s7[128] =3D { + 54, 50, 62, 56, 22, 34, 94, 96, 38, 6, 63, 93, 2, 18, + 123, 33, 55, 113, 39, 114, 21, 67, 65, 12, 47, 73, 46, 27, + 25, 111, 124, 81, 53, 9, 121, 79, 52, 60, 58, 48, 101, 127, + 40, 120, 104, 70, 71, 43, 20, 122, 72, 61, 23, 109, 13, 100, + 77, 1, 16, 7, 82, 10, 105, 98, 117, 116, 76, 11, 89, 106, + 0, 125, 118, 99, 86, 69, 30, 57, 126, 87, 112, 51, 17, 5, + 95, 14, 90, 84, 91, 8, 35, 103, 32, 97, 28, 66, 102, 31, + 26, 45, 75, 4, 85, 92, 37, 74, 80, 49, 68, 29, 115, 44, + 64, 107, 108, 24, 110, 83, 36, 78, 42, 19, 15, 41, 88, 119, + 59, 3, +}; + +static const uint16_t octeon_kasumi_s9[512] =3D { + 167, 239, 161, 379, 391, 334, 9, 338, 38, 226, 48, 358, 452, 385, + 90, 397, 183, 253, 147, 331, 415, 340, 51, 362, 306, 500, 262, 82, + 216, 159, 356, 177, 175, 241, 489, 37, 206, 17, 0, 333, 44, 254, + 378, 58, 143, 220, 81, 400, 95, 3, 315, 245, 54, 235, 218, 405, + 472, 264, 172, 494, 371, 290, 399, 76, 165, 197, 395, 121, 257, 480, + 423, 212, 240, 28, 462, 176, 406, 507, 288, 223, 501, 407, 249, 265, + 89, 186, 221, 428, 164, 74, 440, 196, 458, 421, 350, 163, 232, 158, + 134, 354, 13, 250, 491, 142, 191, 69, 193, 425, 152, 227, 366, 135, + 344, 300, 276, 242, 437, 320, 113, 278, 11, 243, 87, 317, 36, 93, + 496, 27, 487, 446, 482, 41, 68, 156, 457, 131, 326, 403, 339, 20, + 39, 115, 442, 124, 475, 384, 508, 53, 112, 170, 479, 151, 126, 169, + 73, 268, 279, 321, 168, 364, 363, 292, 46, 499, 393, 327, 324, 24, + 456, 267, 157, 460, 488, 426, 309, 229, 439, 506, 208, 271, 349, 401, + 434, 236, 16, 209, 359, 52, 56, 120, 199, 277, 465, 416, 252, 287, + 246, 6, 83, 305, 420, 345, 153, 502, 65, 61, 244, 282, 173, 222, + 418, 67, 386, 368, 261, 101, 476, 291, 195, 430, 49, 79, 166, 330, + 280, 383, 373, 128, 382, 408, 155, 495, 367, 388, 274, 107, 459, 417, + 62, 454, 132, 225, 203, 316, 234, 14, 301, 91, 503, 286, 424, 211, + 347, 307, 140, 374, 35, 103, 125, 427, 19, 214, 453, 146, 498, 314, + 444, 230, 256, 329, 198, 285, 50, 116, 78, 410, 10, 205, 510, 171, + 231, 45, 139, 467, 29, 86, 505, 32, 72, 26, 342, 150, 313, 490, + 431, 238, 411, 325, 149, 473, 40, 119, 174, 355, 185, 233, 389, 71, + 448, 273, 372, 55, 110, 178, 322, 12, 469, 392, 369, 190, 1, 109, + 375, 137, 181, 88, 75, 308, 260, 484, 98, 272, 370, 275, 412, 111, + 336, 318, 4, 504, 492, 259, 304, 77, 337, 435, 21, 357, 303, 332, + 483, 18, 47, 85, 25, 497, 474, 289, 100, 269, 296, 478, 270, 106, + 31, 104, 433, 84, 414, 486, 394, 96, 99, 154, 511, 148, 413, 361, + 409, 255, 162, 215, 302, 201, 266, 351, 343, 144, 441, 365, 108, 298, + 251, 34, 182, 509, 138, 210, 335, 133, 311, 352, 328, 141, 396, 346, + 123, 319, 450, 281, 429, 228, 443, 481, 92, 404, 485, 422, 248, 297, + 23, 213, 130, 466, 22, 217, 283, 70, 294, 360, 419, 127, 312, 377, + 7, 468, 194, 2, 117, 295, 463, 258, 224, 447, 247, 187, 80, 398, + 284, 353, 105, 390, 299, 471, 470, 184, 57, 200, 348, 63, 204, 188, + 33, 451, 97, 30, 310, 219, 94, 160, 129, 493, 64, 179, 263, 102, + 189, 207, 114, 402, 438, 477, 387, 122, 192, 42, 381, 5, 145, 118, + 180, 449, 293, 323, 136, 380, 43, 66, 60, 455, 341, 445, 202, 432, + 8, 237, 15, 376, 436, 464, 59, 461, +}; + +static const uint16_t octeon_kasumi_constants[8] =3D { + 0x0123, 0x4567, 0x89ab, 0xcdef, 0xfedc, 0xba98, 0x7654, 0x3210, +}; + +typedef struct OcteonKasumiSubkeys { + uint16_t kli1[8]; + uint16_t kli2[8]; + uint16_t koi1[8]; + uint16_t koi2[8]; + uint16_t koi3[8]; + uint16_t kii1[8]; + uint16_t kii2[8]; + uint16_t kii3[8]; +} OcteonKasumiSubkeys; + +static uint64_t octeon_des_permute(uint64_t input, const uint8_t *table, + size_t output_bits, size_t input_bits) +{ + uint64_t out =3D 0; + + for (size_t i =3D 0; i < output_bits; i++) { + unsigned src =3D table[i] - 1; + + out =3D (out << 1) | ((input >> (input_bits - 1 - src)) & 1); + } + return out; +} + +static uint32_t octeon_des_rotate28(uint32_t v, unsigned shift) +{ + return ((v << shift) | (v >> (28 - shift))) & 0x0fffffffU; +} + +static void octeon_des_expand_subkeys(uint64_t key, uint64_t subkeys[16]) +{ + uint64_t permuted =3D octeon_des_permute(key, octeon_des_pc1, + ARRAY_SIZE(octeon_des_pc1), 64); + uint32_t c =3D (permuted >> 28) & 0x0fffffffU; + uint32_t d =3D permuted & 0x0fffffffU; + + for (int i =3D 0; i < 16; i++) { + c =3D octeon_des_rotate28(c, octeon_des_rotations[i]); + d =3D octeon_des_rotate28(d, octeon_des_rotations[i]); + subkeys[i] =3D octeon_des_permute(((uint64_t)c << 28) | d, + octeon_des_pc2, + ARRAY_SIZE(octeon_des_pc2), 56); + } +} + +static uint32_t octeon_des_f(uint32_t r, uint64_t subkey) +{ + uint64_t expanded =3D octeon_des_permute(r, octeon_des_e, + ARRAY_SIZE(octeon_des_e), 32); + uint32_t out =3D 0; + + expanded ^=3D subkey; + for (int i =3D 0; i < 8; i++) { + uint8_t sextet =3D (expanded >> (42 - i * 6)) & 0x3f; + uint8_t row =3D ((sextet & 0x20) >> 4) | (sextet & 0x01); + uint8_t col =3D (sextet >> 1) & 0x0f; + + out =3D (out << 4) | octeon_des_sboxes[i][row * 16 + col]; + } + + return octeon_des_permute(out, octeon_des_p, ARRAY_SIZE(octeon_des_p),= 32); +} + +static uint64_t octeon_des_block_crypt(uint64_t block, uint64_t key, + bool encrypt) +{ + uint64_t subkeys[16]; + uint64_t permuted =3D octeon_des_permute(block, octeon_des_ip, + ARRAY_SIZE(octeon_des_ip), 64); + uint32_t l =3D permuted >> 32; + uint32_t r =3D permuted; + + octeon_des_expand_subkeys(key, subkeys); + + for (int i =3D 0; i < 16; i++) { + uint32_t next =3D l ^ octeon_des_f(r, subkeys[encrypt ? i : 15 - i= ]); + + l =3D r; + r =3D next; + } + + return octeon_des_permute(((uint64_t)r << 32) | l, + octeon_des_fp, ARRAY_SIZE(octeon_des_fp), 64= ); +} + +static uint64_t octeon_3des_block_crypt(uint64_t block, const uint64_t key= s[3], + bool encrypt) +{ + if (encrypt) { + block =3D octeon_des_block_crypt(block, keys[0], true); + block =3D octeon_des_block_crypt(block, keys[1], false); + block =3D octeon_des_block_crypt(block, keys[2], true); + } else { + block =3D octeon_des_block_crypt(block, keys[2], false); + block =3D octeon_des_block_crypt(block, keys[1], true); + block =3D octeon_des_block_crypt(block, keys[0], false); + } + return block; +} + +static void octeon_3des_crypt_common(MIPSOcteonCryptoState *crypto, + uint64_t input_reg, + bool encrypt, bool cbc) +{ + const uint64_t keys[3] =3D { + crypto->des3_key[0], + crypto->des3_key[1], + crypto->des3_key[2], + }; + uint64_t block =3D input_reg; + + if (cbc) { + if (encrypt) { + block ^=3D crypto->des3_iv; + block =3D octeon_3des_block_crypt(block, keys, true); + crypto->des3_iv =3D block; + } else { + block =3D octeon_3des_block_crypt(block, keys, false); + block ^=3D crypto->des3_iv; + crypto->des3_iv =3D input_reg; + } + } else { + block =3D octeon_3des_block_crypt(block, keys, encrypt); + } + + crypto->des3_result =3D block; +} + +static inline uint16_t octeon_rol16(uint16_t value, unsigned int bits) +{ + return (value << bits) | (value >> (16 - bits)); +} + +static void octeon_kasumi_key_schedule(const uint64_t key_regs[2], + OcteonKasumiSubkeys *subkeys) +{ + uint16_t key[8]; + uint16_t key_prime[8]; + + key[0] =3D key_regs[0] >> 48; + key[1] =3D key_regs[0] >> 32; + key[2] =3D key_regs[0] >> 16; + key[3] =3D key_regs[0]; + key[4] =3D key_regs[1] >> 48; + key[5] =3D key_regs[1] >> 32; + key[6] =3D key_regs[1] >> 16; + key[7] =3D key_regs[1]; + + for (int i =3D 0; i < 8; i++) { + key_prime[i] =3D key[i] ^ octeon_kasumi_constants[i]; + } + + for (int i =3D 0; i < 8; i++) { + subkeys->kli1[i] =3D octeon_rol16(key[i], 1); + subkeys->kli2[i] =3D key_prime[(i + 2) & 7]; + subkeys->koi1[i] =3D octeon_rol16(key[(i + 1) & 7], 5); + subkeys->koi2[i] =3D octeon_rol16(key[(i + 5) & 7], 8); + subkeys->koi3[i] =3D octeon_rol16(key[(i + 6) & 7], 13); + subkeys->kii1[i] =3D key_prime[(i + 4) & 7]; + subkeys->kii2[i] =3D key_prime[(i + 3) & 7]; + subkeys->kii3[i] =3D key_prime[(i + 7) & 7]; + } +} + +static uint16_t octeon_kasumi_fi(uint16_t in, uint16_t subkey) +{ + uint16_t nine =3D in >> 7; + uint16_t seven =3D in & 0x7f; + + nine =3D octeon_kasumi_s9[nine] ^ seven; + seven =3D octeon_kasumi_s7[seven] ^ (nine & 0x7f); + seven ^=3D subkey >> 9; + nine ^=3D subkey & 0x1ff; + nine =3D octeon_kasumi_s9[nine] ^ seven; + seven =3D octeon_kasumi_s7[seven] ^ (nine & 0x7f); + return (seven << 9) | nine; +} + +static uint32_t octeon_kasumi_fo(uint32_t in, int index, + const OcteonKasumiSubkeys *subkeys) +{ + uint16_t left =3D in >> 16; + uint16_t right =3D in; + + left ^=3D subkeys->koi1[index]; + left =3D octeon_kasumi_fi(left, subkeys->kii1[index]); + left ^=3D right; + right ^=3D subkeys->koi2[index]; + right =3D octeon_kasumi_fi(right, subkeys->kii2[index]); + right ^=3D left; + left ^=3D subkeys->koi3[index]; + left =3D octeon_kasumi_fi(left, subkeys->kii3[index]); + left ^=3D right; + + return ((uint32_t)right << 16) | left; +} + +static uint32_t octeon_kasumi_fl(uint32_t in, int index, + const OcteonKasumiSubkeys *subkeys) +{ + uint16_t left =3D in >> 16; + uint16_t right =3D in; + uint16_t a =3D left & subkeys->kli1[index]; + uint16_t b; + + right ^=3D octeon_rol16(a, 1); + b =3D right | subkeys->kli2[index]; + left ^=3D octeon_rol16(b, 1); + return ((uint32_t)left << 16) | right; +} + +static uint64_t octeon_kasumi_block_encrypt(uint64_t block, + const uint64_t key_regs[2]) +{ + OcteonKasumiSubkeys subkeys; + uint32_t left =3D block >> 32; + uint32_t right =3D block; + + octeon_kasumi_key_schedule(key_regs, &subkeys); + + for (int i =3D 0; i < 8; ) { + uint32_t temp =3D octeon_kasumi_fl(left, i, &subkeys); + + temp =3D octeon_kasumi_fo(temp, i++, &subkeys); + right ^=3D temp; + temp =3D octeon_kasumi_fo(right, i, &subkeys); + temp =3D octeon_kasumi_fl(temp, i++, &subkeys); + left ^=3D temp; + } + + return ((uint64_t)left << 32) | right; +} + +static void octeon_kasumi_crypt_common(MIPSOcteonCryptoState *crypto, + uint64_t input_reg, bool cbc) +{ + const uint64_t key_regs[2] =3D { + crypto->des3_key[0], + crypto->des3_key[1], + }; + uint64_t block =3D input_reg; + + if (cbc) { + block ^=3D crypto->des3_iv; + } + + block =3D octeon_kasumi_block_encrypt(block, key_regs); + if (cbc) { + crypto->des3_iv =3D block; + } + crypto->des3_result =3D block; +} + +static void octeon_aes_load_key(const MIPSOcteonCryptoState *crypto, + uint8_t *key, size_t keylen) +{ + stq_be_p(key, crypto->aes_key[0]); + stq_be_p(key + 8, crypto->aes_key[1]); + if (keylen > 16) { + stq_be_p(key + 16, crypto->aes_key[2]); + } + if (keylen > 24) { + stq_be_p(key + 24, crypto->aes_key[3]); + } +} + +static void octeon_aes_load_block(const uint64_t regs[2], uint8_t *block) +{ + stq_be_p(block, regs[0]); + stq_be_p(block + 8, regs[1]); +} + +static void octeon_aes_store_block(uint64_t regs[2], const uint8_t *block) +{ + regs[0] =3D ldq_be_p(block); + regs[1] =3D ldq_be_p(block + 8); +} + +static void octeon_aes_encrypt_common(MIPSOcteonCryptoState *crypto, bool = cbc) +{ + AES_KEY key; + uint8_t in[16]; + uint8_t out[16]; + uint8_t iv[16]; + uint8_t raw_key[32] =3D {}; + int bits =3D octeon_aes_key_bits(crypto); + + if (!bits) { + return; + } + + octeon_aes_load_key(crypto, raw_key, bits / 8); + octeon_aes_load_block(crypto->aes_input, in); + if (cbc) { + int i; + + octeon_aes_load_block(crypto->aes_iv, iv); + for (i =3D 0; i < sizeof(in); i++) { + in[i] ^=3D iv[i]; + } + } + + AES_set_encrypt_key(raw_key, bits, &key); + AES_encrypt(in, out, &key); + octeon_aes_store_block(crypto->aes_result, out); + if (cbc) { + octeon_aes_store_block(crypto->aes_iv, out); + } +} + +static void octeon_aes_decrypt_common(MIPSOcteonCryptoState *crypto, bool = cbc) +{ + AES_KEY key; + uint8_t in[16]; + uint8_t out[16]; + uint8_t iv[16]; + uint8_t next_iv[16]; + uint8_t raw_key[32] =3D {}; + int bits =3D octeon_aes_key_bits(crypto); + int i; + + if (!bits) { + return; + } + + octeon_aes_load_key(crypto, raw_key, bits / 8); + octeon_aes_load_block(crypto->aes_input, in); + if (cbc) { + memcpy(next_iv, in, sizeof(next_iv)); + octeon_aes_load_block(crypto->aes_iv, iv); + } + + AES_set_decrypt_key(raw_key, bits, &key); + AES_decrypt(in, out, &key); + if (cbc) { + for (i =3D 0; i < sizeof(out); i++) { + out[i] ^=3D iv[i]; + } + } + + octeon_aes_store_block(crypto->aes_result, out); + if (cbc) { + octeon_aes_store_block(crypto->aes_iv, next_iv); + } +} + +static void octeon_gfm_mul(const uint64_t x[2], const uint64_t y[2], + uint16_t poly, uint64_t out[2]) +{ + uint64_t zh =3D 0, zl =3D 0; + uint64_t vh =3D y[0], vl =3D y[1]; + uint64_t rh =3D (uint64_t)poly << 48; + int i; + + for (i =3D 0; i < 128; i++) { + bool bit; + bool lsb; + + if (i < 64) { + bit =3D (x[0] >> (63 - i)) & 1; + } else { + bit =3D (x[1] >> (127 - i)) & 1; + } + if (bit) { + zh ^=3D vh; + zl ^=3D vl; + } + + lsb =3D vl & 1; + vl =3D (vh << 63) | (vl >> 1); + vh >>=3D 1; + if (lsb) { + vh ^=3D rh; + } + } + + out[0] =3D zh; + out[1] =3D zl; +} + +uint64_t helper_octeon_cop2_dmfc2(CPUMIPSState *env, uint32_t sel) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + + if (crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_SNOW3G) { + if (sel >=3D OCTEON_COP2_SEL_SNOW3G_LFSR0 && + sel <=3D OCTEON_COP2_SEL_SNOW3G_LFSR7) { + unsigned int idx =3D sel - OCTEON_COP2_SEL_SNOW3G_LFSR0; + + return ((uint64_t)crypto->snow3g_lfsr[idx * 2] << 32) | + crypto->snow3g_lfsr[idx * 2 + 1]; + } + switch (sel) { + case OCTEON_COP2_SEL_SNOW3G_RESULT: + return crypto->snow3g_result; + case OCTEON_COP2_SEL_SNOW3G_FSM0: + case OCTEON_COP2_SEL_SNOW3G_FSM1: + case OCTEON_COP2_SEL_SNOW3G_FSM2: + return crypto->snow3g_fsm[sel - OCTEON_COP2_SEL_SNOW3G_FSM0]; + default: + break; + } + } + + switch (sel) { + case OCTEON_COP2_SEL_3DES_KEY0: + case OCTEON_COP2_SEL_3DES_KEY1: + case OCTEON_COP2_SEL_3DES_KEY2: + return crypto->des3_key[sel - OCTEON_COP2_SEL_3DES_KEY0]; + case OCTEON_COP2_SEL_3DES_IV: + return crypto->des3_iv; + case OCTEON_COP2_SEL_3DES_RESULT: + case OCTEON_COP2_SEL_3DES_RESULT_IN: + return crypto->des3_result; + case OCTEON_COP2_SEL_AES_RESULT0: + case OCTEON_COP2_SEL_AES_RESULT1: + return crypto->aes_result[sel - OCTEON_COP2_SEL_AES_RESULT0]; + case OCTEON_COP2_SEL_AES_KEY0: + case OCTEON_COP2_SEL_AES_KEY1: + case OCTEON_COP2_SEL_AES_KEY2: + case OCTEON_COP2_SEL_AES_KEY3: + return crypto->aes_key[sel - OCTEON_COP2_SEL_AES_KEY0]; + case OCTEON_COP2_SEL_AES_KEYLENGTH: + return crypto->aes_keylen; + case OCTEON_COP2_SEL_AES_DAT0: + return crypto->aes_input[0]; + case OCTEON_COP2_SEL_AES_IV0: + case OCTEON_COP2_SEL_AES_IV1: + return crypto->aes_iv[sel - OCTEON_COP2_SEL_AES_IV0]; + case OCTEON_COP2_SEL_CRC_POLYNOMIAL: + return crypto->crc_poly; + case OCTEON_COP2_SEL_CRC_IV: + return crypto->crc_iv; + case OCTEON_COP2_SEL_CRC_LEN: + return crypto->crc_len; + case OCTEON_COP2_SEL_CRC_IV_REFLECT: + return octeon_crc_reflect32_by_byte(crypto->crc_iv); + case OCTEON_COP2_SEL_HSH_DATW0: + case OCTEON_COP2_SEL_HSH_DATW1: + case OCTEON_COP2_SEL_HSH_DATW2: + case OCTEON_COP2_SEL_HSH_DATW3: + case OCTEON_COP2_SEL_HSH_DATW4: + case OCTEON_COP2_SEL_HSH_DATW5: + case OCTEON_COP2_SEL_HSH_DATW6: + case OCTEON_COP2_SEL_HSH_DATW7: + case OCTEON_COP2_SEL_HSH_DATW8: + case OCTEON_COP2_SEL_HSH_DATW9: + case OCTEON_COP2_SEL_HSH_DATW10: + case OCTEON_COP2_SEL_HSH_DATW11: + case OCTEON_COP2_SEL_HSH_DATW12: + case OCTEON_COP2_SEL_HSH_DATW13: + case OCTEON_COP2_SEL_HSH_DATW14: + return crypto->sha512_block[sel - OCTEON_COP2_SEL_HSH_DATW0]; + case OCTEON_COP2_SEL_HSH_DATW15: + return crypto->sha512_block[15]; + case OCTEON_COP2_SEL_HSH_IVW0: + case OCTEON_COP2_SEL_HSH_IVW1: + case OCTEON_COP2_SEL_HSH_IVW2: + case OCTEON_COP2_SEL_HSH_IVW3: + case OCTEON_COP2_SEL_HSH_IVW4: + case OCTEON_COP2_SEL_HSH_IVW5: + case OCTEON_COP2_SEL_HSH_IVW6: + case OCTEON_COP2_SEL_HSH_IVW7: + return crypto->sha512_state[sel - OCTEON_COP2_SEL_HSH_IVW0]; + case OCTEON_COP2_SEL_HSH_IV0: + case OCTEON_COP2_SEL_HSH_IV1: + case OCTEON_COP2_SEL_HSH_IV2: + case OCTEON_COP2_SEL_HSH_IV3: + return crypto->hash_state[sel - OCTEON_COP2_SEL_HSH_IV0]; + case OCTEON_COP2_SEL_GFM_MUL_REFLECT0: + case OCTEON_COP2_SEL_GFM_MUL_REFLECT1: + return crypto->gfm_reflect_mul[sel - OCTEON_COP2_SEL_GFM_MUL_REFLE= CT0]; + case OCTEON_COP2_SEL_GFM_RESINP_REFLECT0: + case OCTEON_COP2_SEL_GFM_RESINP_REFLECT1: + return crypto->gfm_reflect_result[ + sel - OCTEON_COP2_SEL_GFM_RESINP_REFLECT0]; + case OCTEON_COP2_SEL_GFM_MUL0: + case OCTEON_COP2_SEL_GFM_MUL1: + return crypto->gfm_mul[sel - OCTEON_COP2_SEL_GFM_MUL0]; + case OCTEON_COP2_SEL_GFM_RESINP0: + case OCTEON_COP2_SEL_GFM_RESINP1: + return crypto->gfm_result[sel - OCTEON_COP2_SEL_GFM_RESINP0]; + case OCTEON_COP2_SEL_GFM_POLY: + return crypto->gfm_poly; + default: + return 0; + } +} + +void helper_octeon_cop2_dmtc2(CPUMIPSState *env, uint64_t value, + uint32_t sel) +{ + MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + uint64_t q =3D (uint64_t)value; + + switch (sel) { + case OCTEON_COP2_SEL_3DES_KEY0: + case OCTEON_COP2_SEL_3DES_KEY1: + case OCTEON_COP2_SEL_3DES_KEY2: + crypto->des3_key[sel - OCTEON_COP2_SEL_3DES_KEY0] =3D q; + break; + case OCTEON_COP2_SEL_3DES_IV: + crypto->des3_iv =3D q; + break; + case OCTEON_COP2_SEL_3DES_RESULT_IN: + crypto->des3_result =3D q; + break; + case OCTEON_COP2_SEL_3DES_ENC_CBC: + octeon_3des_crypt_common(crypto, q, true, true); + break; + case OCTEON_COP2_SEL_KAS_ENC_CBC: + octeon_kasumi_crypt_common(crypto, q, true); + break; + case OCTEON_COP2_SEL_3DES_ENC: + octeon_3des_crypt_common(crypto, q, true, false); + break; + case OCTEON_COP2_SEL_KAS_ENC: + octeon_kasumi_crypt_common(crypto, q, false); + break; + case OCTEON_COP2_SEL_3DES_DEC_CBC: + octeon_3des_crypt_common(crypto, q, false, true); + break; + case OCTEON_COP2_SEL_3DES_DEC: + octeon_3des_crypt_common(crypto, q, false, false); + break; + case OCTEON_COP2_SEL_AES_RESULT0: + case OCTEON_COP2_SEL_AES_RESULT1: + crypto->aes_input[sel - OCTEON_COP2_SEL_AES_RESULT0] =3D q; + crypto->aes_result[sel - OCTEON_COP2_SEL_AES_RESULT0] =3D q; + break; + case OCTEON_COP2_SEL_AES_IV0: + case OCTEON_COP2_SEL_AES_IV1: + crypto->aes_iv[sel - OCTEON_COP2_SEL_AES_IV0] =3D q; + break; + case OCTEON_COP2_SEL_AES_KEY0: + case OCTEON_COP2_SEL_AES_KEY1: + case OCTEON_COP2_SEL_AES_KEY2: + case OCTEON_COP2_SEL_AES_KEY3: + crypto->aes_key[sel - OCTEON_COP2_SEL_AES_KEY0] =3D q; + break; + case OCTEON_COP2_SEL_AES_ENC_CBC0: + case OCTEON_COP2_SEL_AES_ENC0: + case OCTEON_COP2_SEL_AES_DEC_CBC0: + case OCTEON_COP2_SEL_AES_DEC0: + crypto->aes_input[0] =3D q; + break; + case OCTEON_COP2_SEL_AES_KEYLENGTH: + crypto->aes_keylen =3D q; + break; + case OCTEON_COP2_SEL_CRC_WRITE_POLYNOMIAL: + case OCTEON_COP2_SEL_CRC_WRITE_POLYNOMIAL_REFLECT: + crypto->crc_poly =3D q; + break; + case OCTEON_COP2_SEL_CRC_IV: + crypto->crc_iv =3D q; + break; + case OCTEON_COP2_SEL_CRC_WRITE_LEN: + crypto->crc_len =3D q; + break; + case OCTEON_COP2_SEL_CRC_WRITE_IV_REFLECT: + crypto->crc_iv =3D octeon_crc_reflect32_by_byte((uint32_t)q); + break; + case OCTEON_COP2_SEL_CRC_WRITE_BYTE: + octeon_crc_update_normal(crypto, q, 1); + break; + case OCTEON_COP2_SEL_CRC_WRITE_HALF: + octeon_crc_update_normal(crypto, q, 2); + break; + case OCTEON_COP2_SEL_CRC_WRITE_WORD: + octeon_crc_update_normal(crypto, q, 4); + break; + case OCTEON_COP2_SEL_CRC_WRITE_DWORD: + octeon_crc_update_normal(crypto, q, 8); + break; + case OCTEON_COP2_SEL_CRC_WRITE_VAR: + octeon_crc_update_normal(crypto, q, MIN(8U, crypto->crc_len)); + break; + case OCTEON_COP2_SEL_CRC_WRITE_BYTE_REFLECT: + octeon_crc_update_reflect(crypto, q, 1); + break; + case OCTEON_COP2_SEL_CRC_WRITE_HALF_REFLECT: + octeon_crc_update_reflect(crypto, q, 2); + break; + case OCTEON_COP2_SEL_CRC_WRITE_WORD_REFLECT: + octeon_crc_update_reflect(crypto, q, 4); + break; + case OCTEON_COP2_SEL_CRC_WRITE_DWORD_REFLECT: + octeon_crc_update_reflect(crypto, q, 8); + break; + case OCTEON_COP2_SEL_CRC_WRITE_VAR_REFLECT: + octeon_crc_update_reflect(crypto, q, MIN(8U, crypto->crc_len)); + break; + case OCTEON_COP2_SEL_HSH_DATW0: + case OCTEON_COP2_SEL_HSH_DATW1: + case OCTEON_COP2_SEL_HSH_DATW2: + case OCTEON_COP2_SEL_HSH_DATW3: + case OCTEON_COP2_SEL_HSH_DATW4: + case OCTEON_COP2_SEL_HSH_DATW5: + case OCTEON_COP2_SEL_HSH_DATW6: + case OCTEON_COP2_SEL_HSH_DATW7: + case OCTEON_COP2_SEL_HSH_DATW8: + case OCTEON_COP2_SEL_HSH_DATW9: + case OCTEON_COP2_SEL_HSH_DATW10: + case OCTEON_COP2_SEL_HSH_DATW11: + case OCTEON_COP2_SEL_HSH_DATW12: + case OCTEON_COP2_SEL_HSH_DATW13: + case OCTEON_COP2_SEL_HSH_DATW14: + octeon_store_shared_hash_dat(crypto, sel, q); + break; + case OCTEON_COP2_SEL_HSH_DATW15: + case OCTEON_COP2_SEL_HSH_STARTSHA512: + crypto->sha512_block[15] =3D q; + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA512); + octeon_sha512_transform(crypto); + break; + case OCTEON_COP2_SEL_HSH_IVW0: + case OCTEON_COP2_SEL_HSH_IVW1: + case OCTEON_COP2_SEL_HSH_IVW2: + case OCTEON_COP2_SEL_HSH_IVW3: + case OCTEON_COP2_SEL_HSH_IVW4: + case OCTEON_COP2_SEL_HSH_IVW5: + case OCTEON_COP2_SEL_HSH_IVW6: + case OCTEON_COP2_SEL_HSH_IVW7: + octeon_store_shared_hash_dat(crypto, sel, q); + break; + case OCTEON_COP2_SEL_GFM_MUL_REFLECT0: + case OCTEON_COP2_SEL_GFM_MUL_REFLECT1: + crypto->gfm_reflect_mul[ + sel - OCTEON_COP2_SEL_GFM_MUL_REFLECT0] =3D q; + break; + case OCTEON_COP2_SEL_GFM_XOR0_REFLECT: + crypto->gfm_reflect_xor0 =3D q; + break; + case OCTEON_COP2_SEL_GFM_MUL0: + case OCTEON_COP2_SEL_GFM_MUL1: + crypto->gfm_mul[sel - OCTEON_COP2_SEL_GFM_MUL0] =3D q; + break; + case OCTEON_COP2_SEL_GFM_RESINP0: + case OCTEON_COP2_SEL_GFM_RESINP1: + crypto->gfm_result[sel - OCTEON_COP2_SEL_GFM_RESINP0] =3D q; + break; + case OCTEON_COP2_SEL_GFM_XOR0: + crypto->gfm_xor0 =3D q; + break; + case OCTEON_COP2_SEL_GFM_POLY: + crypto->gfm_poly =3D q; + break; + case OCTEON_COP2_SEL_HSH_DAT0: + case OCTEON_COP2_SEL_HSH_DAT1: + case OCTEON_COP2_SEL_HSH_DAT2: + case OCTEON_COP2_SEL_HSH_DAT3: + case OCTEON_COP2_SEL_HSH_DAT4: + case OCTEON_COP2_SEL_HSH_DAT5: + case OCTEON_COP2_SEL_HSH_DAT6: + crypto->hash_block[sel - OCTEON_COP2_SEL_HSH_DAT0] =3D q; + break; + case OCTEON_COP2_SEL_HSH_IV0: + case OCTEON_COP2_SEL_HSH_IV1: + case OCTEON_COP2_SEL_HSH_IV2: + case OCTEON_COP2_SEL_HSH_IV3: + crypto->hash_state[sel - OCTEON_COP2_SEL_HSH_IV0] =3D q; + break; + case OCTEON_COP2_SEL_HSH_STARTMD5: + crypto->hash_block[7] =3D q; + octeon_md5_transform(crypto); + break; + case OCTEON_COP2_SEL_HSH_STARTSHA256: + crypto->hash_block[7] =3D q; + octeon_sha256_transform(crypto); + break; + case OCTEON_COP2_SEL_HSH_STARTSHA1_COMPAT: + case OCTEON_COP2_SEL_HSH_STARTSHA1: + crypto->hash_block[7] =3D q; + octeon_sha1_transform(crypto); + break; + case OCTEON_COP2_SEL_GFM_XORMUL1_REFLECT: + octeon_gfm_mul_reflect(crypto, q); + break; + case OCTEON_COP2_SEL_AES_ENC_CBC1: + crypto->aes_input[1] =3D q; + octeon_aes_encrypt_common(crypto, true); + break; + case OCTEON_COP2_SEL_AES_ENC1: + crypto->aes_input[1] =3D q; + octeon_aes_encrypt_common(crypto, false); + break; + case OCTEON_COP2_SEL_AES_DEC_CBC1: + crypto->aes_input[1] =3D q; + octeon_aes_decrypt_common(crypto, true); + break; + case OCTEON_COP2_SEL_AES_DEC1: + crypto->aes_input[1] =3D q; + octeon_aes_decrypt_common(crypto, false); + break; + case OCTEON_COP2_SEL_GFM_XORMUL1: { + uint64_t in[2] =3D { + crypto->gfm_result[0] ^ crypto->gfm_xor0, + crypto->gfm_result[1] ^ q, + }; + + /* + * A 64-bit reflected GFM operation uses this XORMUL1 path when the + * block is programmed with only MUL0, an 8-bit polynomial, and a = zero + * high input half. Detect that shape and use the reflected helper + * instead of the normal GHASH-style multiplier. + */ + if (crypto->gfm_poly <=3D 0xff && + crypto->gfm_mul[1] =3D=3D 0 && + in[0] =3D=3D 0) { + octeon_gfm_mul64_uia2(in, crypto->gfm_mul, + crypto->gfm_poly, crypto->gfm_result); + } else { + octeon_gfm_mul(in, crypto->gfm_mul, crypto->gfm_poly, + crypto->gfm_result); + } + /* + * GFM_XOR0 is a write-only staging half consumed by the next XORM= UL1 + * operation, so clear it once the combined multiply has been issu= ed. + */ + crypto->gfm_xor0 =3D 0; + break; + } + case OCTEON_COP2_SEL_SNOW3G_START: + octeon_snow3g_start(crypto, q); + break; + case OCTEON_COP2_SEL_SNOW3G_MORE: + octeon_snow3g_more(crypto); + break; + default: + break; + } +} diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index cdaa926389..c75f04da63 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -15,6 +15,210 @@ =20 typedef void gen_helper_lmi(TCGv_i64, TCGv_ptr, TCGv_i64, TCGv_i64); =20 +static bool octeon_cop2_is_supported_dmfc2(uint16_t sel) +{ + switch (sel) { + case OCTEON_COP2_SEL_3DES_KEY0: + case OCTEON_COP2_SEL_3DES_KEY1: + case OCTEON_COP2_SEL_3DES_KEY2: + case OCTEON_COP2_SEL_3DES_IV: + case OCTEON_COP2_SEL_3DES_RESULT: + case OCTEON_COP2_SEL_3DES_RESULT_IN: + case OCTEON_COP2_SEL_AES_RESULT0: + case OCTEON_COP2_SEL_AES_RESULT1: + case OCTEON_COP2_SEL_AES_KEY0: + case OCTEON_COP2_SEL_AES_KEY1: + case OCTEON_COP2_SEL_AES_KEY2: + case OCTEON_COP2_SEL_AES_KEY3: + case OCTEON_COP2_SEL_AES_KEYLENGTH: + case OCTEON_COP2_SEL_CRC_POLYNOMIAL: + case OCTEON_COP2_SEL_AES_IV0: + case OCTEON_COP2_SEL_AES_IV1: + case OCTEON_COP2_SEL_CRC_IV: + case OCTEON_COP2_SEL_CRC_LEN: + case OCTEON_COP2_SEL_CRC_IV_REFLECT: + case OCTEON_COP2_SEL_HSH_DATW0: + case OCTEON_COP2_SEL_HSH_DATW1: + case OCTEON_COP2_SEL_HSH_DATW2: + case OCTEON_COP2_SEL_HSH_DATW3: + case OCTEON_COP2_SEL_HSH_DATW4: + case OCTEON_COP2_SEL_HSH_DATW5: + case OCTEON_COP2_SEL_HSH_DATW6: + case OCTEON_COP2_SEL_HSH_DATW7: + case OCTEON_COP2_SEL_HSH_DATW8: + case OCTEON_COP2_SEL_HSH_DATW9: + case OCTEON_COP2_SEL_HSH_DATW10: + case OCTEON_COP2_SEL_HSH_DATW11: + case OCTEON_COP2_SEL_HSH_DATW12: + case OCTEON_COP2_SEL_HSH_DATW13: + case OCTEON_COP2_SEL_HSH_DATW14: + case OCTEON_COP2_SEL_HSH_DATW15: + case OCTEON_COP2_SEL_HSH_IV0: + case OCTEON_COP2_SEL_HSH_IV1: + case OCTEON_COP2_SEL_HSH_IV2: + case OCTEON_COP2_SEL_HSH_IV3: + case OCTEON_COP2_SEL_HSH_IVW0: + case OCTEON_COP2_SEL_HSH_IVW1: + case OCTEON_COP2_SEL_HSH_IVW2: + case OCTEON_COP2_SEL_HSH_IVW3: + case OCTEON_COP2_SEL_HSH_IVW4: + case OCTEON_COP2_SEL_HSH_IVW5: + case OCTEON_COP2_SEL_HSH_IVW6: + case OCTEON_COP2_SEL_HSH_IVW7: + case OCTEON_COP2_SEL_AES_DAT0: + case OCTEON_COP2_SEL_GFM_MUL_REFLECT0: + case OCTEON_COP2_SEL_GFM_MUL_REFLECT1: + case OCTEON_COP2_SEL_GFM_RESINP_REFLECT0: + case OCTEON_COP2_SEL_GFM_RESINP_REFLECT1: + case OCTEON_COP2_SEL_GFM_MUL0: + case OCTEON_COP2_SEL_GFM_MUL1: + case OCTEON_COP2_SEL_GFM_RESINP0: + case OCTEON_COP2_SEL_GFM_RESINP1: + case OCTEON_COP2_SEL_GFM_POLY: + return true; + default: + return false; + } +} + +static bool octeon_cop2_is_supported_dmtc2(uint16_t sel) +{ + switch (sel) { + case OCTEON_COP2_SEL_3DES_KEY0: + case OCTEON_COP2_SEL_3DES_KEY1: + case OCTEON_COP2_SEL_3DES_KEY2: + case OCTEON_COP2_SEL_3DES_IV: + case OCTEON_COP2_SEL_3DES_RESULT_IN: + case OCTEON_COP2_SEL_3DES_ENC_CBC: + case OCTEON_COP2_SEL_KAS_ENC_CBC: + case OCTEON_COP2_SEL_3DES_ENC: + case OCTEON_COP2_SEL_KAS_ENC: + case OCTEON_COP2_SEL_3DES_DEC_CBC: + case OCTEON_COP2_SEL_3DES_DEC: + case OCTEON_COP2_SEL_AES_RESULT0: + case OCTEON_COP2_SEL_AES_RESULT1: + case OCTEON_COP2_SEL_AES_IV0: + case OCTEON_COP2_SEL_AES_IV1: + case OCTEON_COP2_SEL_AES_KEY0: + case OCTEON_COP2_SEL_AES_KEY1: + case OCTEON_COP2_SEL_AES_KEY2: + case OCTEON_COP2_SEL_AES_KEY3: + case OCTEON_COP2_SEL_AES_ENC_CBC0: + case OCTEON_COP2_SEL_AES_ENC0: + case OCTEON_COP2_SEL_AES_DEC_CBC0: + case OCTEON_COP2_SEL_AES_DEC0: + case OCTEON_COP2_SEL_AES_KEYLENGTH: + case OCTEON_COP2_SEL_CRC_WRITE_POLYNOMIAL: + case OCTEON_COP2_SEL_CRC_IV: + case OCTEON_COP2_SEL_CRC_WRITE_LEN: + case OCTEON_COP2_SEL_CRC_WRITE_IV_REFLECT: + case OCTEON_COP2_SEL_CRC_WRITE_BYTE: + case OCTEON_COP2_SEL_CRC_WRITE_HALF: + case OCTEON_COP2_SEL_CRC_WRITE_WORD: + case OCTEON_COP2_SEL_CRC_WRITE_DWORD: + case OCTEON_COP2_SEL_CRC_WRITE_VAR: + case OCTEON_COP2_SEL_CRC_WRITE_POLYNOMIAL_REFLECT: + case OCTEON_COP2_SEL_CRC_WRITE_BYTE_REFLECT: + case OCTEON_COP2_SEL_CRC_WRITE_HALF_REFLECT: + case OCTEON_COP2_SEL_CRC_WRITE_WORD_REFLECT: + case OCTEON_COP2_SEL_CRC_WRITE_DWORD_REFLECT: + case OCTEON_COP2_SEL_CRC_WRITE_VAR_REFLECT: + case OCTEON_COP2_SEL_HSH_DAT0: + case OCTEON_COP2_SEL_HSH_DAT1: + case OCTEON_COP2_SEL_HSH_DAT2: + case OCTEON_COP2_SEL_HSH_DAT3: + case OCTEON_COP2_SEL_HSH_DAT4: + case OCTEON_COP2_SEL_HSH_DAT5: + case OCTEON_COP2_SEL_HSH_DAT6: + case OCTEON_COP2_SEL_HSH_IV0: + case OCTEON_COP2_SEL_HSH_IV1: + case OCTEON_COP2_SEL_HSH_IV2: + case OCTEON_COP2_SEL_HSH_IV3: + case OCTEON_COP2_SEL_HSH_DATW0: + case OCTEON_COP2_SEL_HSH_DATW1: + case OCTEON_COP2_SEL_HSH_DATW2: + case OCTEON_COP2_SEL_HSH_DATW3: + case OCTEON_COP2_SEL_HSH_DATW4: + case OCTEON_COP2_SEL_HSH_DATW5: + case OCTEON_COP2_SEL_HSH_DATW6: + case OCTEON_COP2_SEL_HSH_DATW7: + case OCTEON_COP2_SEL_HSH_DATW8: + case OCTEON_COP2_SEL_HSH_DATW9: + case OCTEON_COP2_SEL_HSH_DATW10: + case OCTEON_COP2_SEL_HSH_DATW11: + case OCTEON_COP2_SEL_HSH_DATW12: + case OCTEON_COP2_SEL_HSH_DATW13: + case OCTEON_COP2_SEL_HSH_DATW14: + case OCTEON_COP2_SEL_HSH_DATW15: + case OCTEON_COP2_SEL_HSH_IVW0: + case OCTEON_COP2_SEL_HSH_IVW1: + case OCTEON_COP2_SEL_HSH_IVW2: + case OCTEON_COP2_SEL_HSH_IVW3: + case OCTEON_COP2_SEL_HSH_IVW4: + case OCTEON_COP2_SEL_HSH_IVW5: + case OCTEON_COP2_SEL_HSH_IVW6: + case OCTEON_COP2_SEL_HSH_IVW7: + case OCTEON_COP2_SEL_GFM_MUL_REFLECT0: + case OCTEON_COP2_SEL_GFM_MUL_REFLECT1: + case OCTEON_COP2_SEL_GFM_XOR0_REFLECT: + case OCTEON_COP2_SEL_GFM_MUL0: + case OCTEON_COP2_SEL_GFM_MUL1: + case OCTEON_COP2_SEL_GFM_RESINP0: + case OCTEON_COP2_SEL_GFM_RESINP1: + case OCTEON_COP2_SEL_GFM_XOR0: + case OCTEON_COP2_SEL_GFM_POLY: + case OCTEON_COP2_SEL_HSH_STARTSHA1_COMPAT: + case OCTEON_COP2_SEL_HSH_STARTMD5: + case OCTEON_COP2_SEL_SNOW3G_START: + case OCTEON_COP2_SEL_SNOW3G_MORE: + case OCTEON_COP2_SEL_HSH_STARTSHA256: + case OCTEON_COP2_SEL_HSH_STARTSHA1: + case OCTEON_COP2_SEL_GFM_XORMUL1_REFLECT: + case OCTEON_COP2_SEL_HSH_STARTSHA512: + case OCTEON_COP2_SEL_GFM_XORMUL1: + case OCTEON_COP2_SEL_AES_ENC_CBC1: + case OCTEON_COP2_SEL_AES_ENC1: + case OCTEON_COP2_SEL_AES_DEC_CBC1: + case OCTEON_COP2_SEL_AES_DEC1: + return true; + default: + return false; + } +} + +bool gen_octeon_cop2(DisasContext *ctx) +{ + enum { + OCTEON_CP2_RS_DMFC2 =3D 0x01, + OCTEON_CP2_RS_DMTC2 =3D 0x05, + }; + int rs =3D extract32(ctx->opcode, 21, 5); + int rt =3D extract32(ctx->opcode, 16, 5); + uint16_t sel =3D ctx->opcode; + TCGv_i64 t0; + + switch (rs) { + case OCTEON_CP2_RS_DMFC2: + if (!octeon_cop2_is_supported_dmfc2(sel)) { + return false; + } + t0 =3D tcg_temp_new_i64(); + gen_helper_octeon_cop2_dmfc2(t0, tcg_env, tcg_constant_i32(sel)); + gen_store_gpr(t0, rt); + return true; + case OCTEON_CP2_RS_DMTC2: + if (!octeon_cop2_is_supported_dmtc2(sel)) { + return false; + } + t0 =3D tcg_temp_new_i64(); + gen_load_gpr(t0, rt); + gen_helper_octeon_cop2_dmtc2(tcg_env, t0, tcg_constant_i32(sel)); + return true; + default: + return false; + } +} + static bool trans_BBIT(DisasContext *ctx, arg_BBIT *a) { TCGv_i64 p; diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c index cd6dc34176..5c19adbbcf 100644 --- a/target/mips/tcg/translate.c +++ b/target/mips/tcg/translate.c @@ -14863,6 +14863,15 @@ static bool decode_opc_legacy(CPUMIPSState *env, D= isasContext *ctx) } break; case OPC_CP2: +#if defined(TARGET_MIPS64) + if (ctx->insn_flags & INSN_OCTEON) { + if (gen_octeon_cop2(ctx)) { + break; + } + generate_exception_err(ctx, EXCP_CpU, 2); + break; + } +#endif check_insn(ctx, ASE_LMMI); /* Note that these instructions use different fields. */ gen_loongson_multimedia(ctx, sa, rd, rt); diff --git a/target/mips/tcg/translate.h b/target/mips/tcg/translate.h index 89dde1e712..feb3c47c44 100644 --- a/target/mips/tcg/translate.h +++ b/target/mips/tcg/translate.h @@ -232,6 +232,7 @@ bool decode_ext_loongson(DisasContext *ctx, uint32_t in= sn); bool decode_ase_lcsr(DisasContext *ctx, uint32_t insn); bool decode_ext_tx79(DisasContext *ctx, uint32_t insn); bool decode_ext_octeon(DisasContext *ctx, uint32_t insn); +bool gen_octeon_cop2(DisasContext *ctx); #endif bool decode_ext_vr54xx(DisasContext *ctx, uint32_t insn); =20 diff --git a/tests/tcg/mips/user/isa/octeon/octeon-insns.c b/tests/tcg/mips= /user/isa/octeon/octeon-insns.c index e9db93d1b6..059527fe5d 100644 --- a/tests/tcg/mips/user/isa/octeon/octeon-insns.c +++ b/tests/tcg/mips/user/isa/octeon/octeon-insns.c @@ -129,6 +129,70 @@ static uint64_t octeon_vmm0(uint64_t mpl0, uint64_t p0, 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); @@ -140,6 +204,13 @@ int main(void) 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_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 Mon May 25 20:32:02 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=1778253292; cv=none; d=zohomail.com; s=zohoarc; b=coXCNBjg6fScWptGG19X0MNpmZttPJR60NImL3Zd9HAetKYQr8TevLjVTOgD6Z9X3fTmCgZYXAxUu/NVFJpAUlpvD5NTgG5eBygoIEJZ9+QRSP39tqrurfM2YA1WgVfDC7U+nkxZfy3n3i6uPHt8DQKG1bUAdAy8lFMvDZ8AXcc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253292; 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=04pdLQq/ujWtrr1zaPDXwmQetc18sbRtOdjoyK6Z4Fo=; b=AWDyMfGe2facQK90JTkkIMZzRdjxYa7y8xfI9PdEs4dBIL4u9boEaqZTF65/m+ZwrPeOXmKlTxmam6p+lTyOmlQRP2ivjFiBdAX510SMacSlgpA/vQuWeQkig4/riD5V1DRF4btZ9GIkbN8IdDqE8ZZHBdHS1SfCt+qKlJFCSGs= 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 1778253292859923.9981070551939; Fri, 8 May 2026 08:14:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMuF-0004Ww-Sr; Fri, 08 May 2026 11:14:23 -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 1wLMtL-0002iJ-W3 for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:28 -0400 Received: from mail-oa1-x34.google.com ([2001:4860:4864:20::34]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtK-0001mY-0q for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:27 -0400 Received: by mail-oa1-x34.google.com with SMTP id 586e51a60fabf-435153d9b68so1271747fac.3 for ; Fri, 08 May 2026 08:13:25 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253204; x=1778858004; 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=04pdLQq/ujWtrr1zaPDXwmQetc18sbRtOdjoyK6Z4Fo=; b=UAb3HPPGER+ug/CrHU8YqYf8Ahxd3iyohMa0QmHPg55FSvqKst3veSO3vQhp6NOqok 6XDW11b1hlMEfhm3WOquxuEY0VfbLUg1oxj1PobgZQbTaPlKuifThEx06Nsb/LIhg/qK /dOelqZpPwQIU7mX1iteuj728mgvoXr3jmoDmkmo4Ircbg0MkvUunjUtJm00Lvluqhbm JuLZ3GTskkxVf7SBrZ30CGegk9mDLNcWf+4hagJ0hiQSevHfEXJq5UnuF4DeoTDkLVha VmfS47ATyOHhPvopNxXcc/z7H8mve53WriKrZXfWcpFzq1megHBQE8ZQsWMMbo9lBmK3 iJ2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253204; x=1778858004; 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=04pdLQq/ujWtrr1zaPDXwmQetc18sbRtOdjoyK6Z4Fo=; b=E9trs6lE1+NUzDJa6XxI8DYimbbJbpMkyNHQ79BS49qlpviqouRZC9kFhX5p3nyVkf +9hI01rUMaEga1dFZaF2y5d2p2cf2QiWCYVAXZBTtMznWa6/KpHTYr4HsM1+FDnsP1gC bnR/DRYf+HyYw91e+vuXVK1aUJc6m5tcbe9G81xZPHr6MRZZg4lvpVvJPLgElROwiEtp di8ffhJepgFWV10hPqK8PX0h0sksokKjulNVNpBzgbSpTd3jelLfBZXZFQVruIOkNkRT vtwOuVpe/tXALvGg/iBlLvupXZqEMoQW4FTTIfnw+gf1poXk6OTywPVwAKaQI1SpvcdA 2tyQ== X-Gm-Message-State: AOJu0YwqqwFZsEpXFSrtFrXJJcP4JcMCjR6eRYNu6T/C6dnoBN5D12F3 JeKS1bP2HBxnu+9dGauRdAfXq1R34qeZYFmNBqc+f6CYhXPKR4wcIj9iJ9QBQQ== X-Gm-Gg: Acq92OEkRLIvhZUYf2hVIY0aeW/OmGzwesEEhQtKEzWpm1biSArhM7Mpqqbwc5fMUIj IhM5btBMziBfSRtUlpNiZy5+gfNqCTEsMLf7NBLf3smmpGFjcbP7qEZ4rmI2c4scl6MfEN0y/r/ nrr3v43QXZMzN7uzpMq/spbda6VgacpUDXCQmo+MEEbe5F3anVU+kf9ZRwnH+KfodS0jkiZyIF0 sSvT7oFhYg0xJ07vZJUh2+ODW/EOrjC8MUJqOHvwF3xpUEjb8h9ehxJqNv7nZa7fvmiwl3B/qD/ eoVG4rMOmgtYeMDz610TaEnkPIdI5A1R0TJtQrv38MIwX3ya3yaEutNKR1pD7vMVut31Dlq9VCP sW1rsKCvInK66kPKDZ9nFZh8PQWNy+rppIxwR3WUzy0h/Nx0hJ1VpRO9EU/4qgHjr2M6P8gOwEX +nGWnsbjUUVmouEB+JyVDxtD2OGEt7RzFtRxsxaro1e/dPFMhfUpYgosWlK2aaPBmn0nu96HZDR itNhvDXi1jXjCYpUhF3qXzbVzWOQF2pu3+AexoCXKzlGoNqOGgy2iRUpWQ/iXtNIEr/oVEn3h/J 1Xd7xv3AZX6+3efRjCrkCTHRexINHGeOoEdbsBh6sGgINpSAy54uAq57k88GdXT7LTpKmddH7xR 0CEA16Q== X-Received: by 2002:a05:6870:2006:b0:417:70c2:8537 with SMTP id 586e51a60fabf-434f64e9121mr7602716fac.25.1778253204460; Fri, 08 May 2026 08:13:24 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:27 -0600 Subject: [PATCH v3 27/32] target/mips: add Octeon SMS4 crypto support MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-27-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::34; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x34.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253295068154100 On Octeon, the SMS4 engine is exposed through selectors that alias the AES register bank. Add the missing selectors and model the shared RESULT, IV, and key state so the hardware interface matches the processor behaviour. Use the in-tree SM4 tables to implement the block operation without adding a host crypto dependency. Signed-off-by: James Hilliard --- 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) --- target/mips/cpu.h | 18 ++++++ target/mips/tcg/octeon_crypto.c | 109 +++++++++++++++++++++++++++++++++= ++++ target/mips/tcg/octeon_translate.c | 4 ++ 3 files changed, 131 insertions(+) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index 2712b882db..2457b253ae 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -585,6 +585,20 @@ typedef enum MIPSOcteonCop2Sel { OCTEON_COP2_SEL_AES_DEC0 =3D 0x010e, OCTEON_COP2_SEL_AES_KEYLENGTH =3D 0x0110, OCTEON_COP2_SEL_AES_DAT0 =3D 0x0111, + /* + * SMS4 reuses the AES result/input, IV, and key banks and only adds + * operation selectors for ECB/CBC encrypt/decrypt. + */ + OCTEON_COP2_SEL_SMS4_RESINP0 =3D OCTEON_COP2_SEL_AES_RESULT0, + OCTEON_COP2_SEL_SMS4_RESINP1 =3D OCTEON_COP2_SEL_AES_RESULT1, + OCTEON_COP2_SEL_SMS4_IV0 =3D OCTEON_COP2_SEL_AES_IV0, + OCTEON_COP2_SEL_SMS4_IV1 =3D OCTEON_COP2_SEL_AES_IV1, + OCTEON_COP2_SEL_SMS4_KEY0 =3D OCTEON_COP2_SEL_AES_KEY0, + OCTEON_COP2_SEL_SMS4_KEY1 =3D OCTEON_COP2_SEL_AES_KEY1, + OCTEON_COP2_SEL_SMS4_ENC_CBC0 =3D OCTEON_COP2_SEL_AES_ENC_CBC0, + OCTEON_COP2_SEL_SMS4_ENC0 =3D OCTEON_COP2_SEL_AES_ENC0, + OCTEON_COP2_SEL_SMS4_DEC_CBC0 =3D OCTEON_COP2_SEL_AES_DEC_CBC0, + OCTEON_COP2_SEL_SMS4_DEC0 =3D OCTEON_COP2_SEL_AES_DEC0, OCTEON_COP2_SEL_CRC_POLYNOMIAL =3D 0x0200, OCTEON_COP2_SEL_CRC_IV =3D 0x0201, OCTEON_COP2_SEL_CRC_LEN =3D 0x0202, @@ -653,6 +667,10 @@ typedef enum MIPSOcteonCop2Sel { OCTEON_COP2_SEL_AES_ENC1 =3D 0x310b, OCTEON_COP2_SEL_AES_DEC_CBC1 =3D 0x310d, OCTEON_COP2_SEL_AES_DEC1 =3D 0x310f, + OCTEON_COP2_SEL_SMS4_ENC_CBC1 =3D 0x3119, + OCTEON_COP2_SEL_SMS4_ENC1 =3D 0x311b, + OCTEON_COP2_SEL_SMS4_DEC_CBC1 =3D 0x311d, + OCTEON_COP2_SEL_SMS4_DEC1 =3D 0x311f, OCTEON_COP2_SEL_HSH_STARTMD5 =3D 0x4047, OCTEON_COP2_SEL_SNOW3G_START =3D 0x404d, OCTEON_COP2_SEL_SNOW3G_MORE =3D 0x404e, diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index 43012ff027..177d112483 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -12,6 +12,7 @@ #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" =20 @@ -745,6 +746,57 @@ static int octeon_aes_key_bits(const MIPSOcteonCryptoS= tate *crypto) } } =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 const uint8_t octeon_des_ip[64] =3D { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, @@ -1198,6 +1250,47 @@ static void octeon_aes_store_block(uint64_t regs[2],= const uint8_t *block) regs[1] =3D ldq_be_p(block + 8); } =20 +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 RESULT/RESINP, IV, and KEY bank= s, + * with only the operation selectors remaining distinct. + */ + octeon_aes_load_key(crypto, key, sizeof(key)); + octeon_aes_load_block(crypto->aes_input, in); + if (cbc) { + octeon_aes_load_block(crypto->aes_iv, iv); + if (encrypt) { + for (int i =3D 0; i < sizeof(in); i++) { + in[i] ^=3D iv[i]; + } + } else { + memcpy(next_iv, in, sizeof(next_iv)); + } + } + + octeon_sms4_expand_key(key, round_keys); + octeon_sms4_crypt_block(in, out, round_keys, encrypt); + if (cbc && !encrypt) { + for (int i =3D 0; i < sizeof(out); i++) { + out[i] ^=3D iv[i]; + } + } + + octeon_aes_store_block(crypto->aes_result, out); + if (cbc) { + octeon_aes_store_block(crypto->aes_iv, encrypt ? out : next_iv); + } +} + static void octeon_aes_encrypt_common(MIPSOcteonCryptoState *crypto, bool = cbc) { AES_KEY key; @@ -1614,6 +1707,22 @@ void helper_octeon_cop2_dmtc2(CPUMIPSState *env, uin= t64_t value, crypto->aes_input[1] =3D q; octeon_aes_decrypt_common(crypto, false); break; + case OCTEON_COP2_SEL_SMS4_ENC_CBC1: + crypto->aes_input[1] =3D q; + octeon_sms4_crypt_common(crypto, true, true); + break; + case OCTEON_COP2_SEL_SMS4_ENC1: + crypto->aes_input[1] =3D q; + octeon_sms4_crypt_common(crypto, true, false); + break; + case OCTEON_COP2_SEL_SMS4_DEC_CBC1: + crypto->aes_input[1] =3D q; + octeon_sms4_crypt_common(crypto, false, true); + break; + case OCTEON_COP2_SEL_SMS4_DEC1: + crypto->aes_input[1] =3D q; + octeon_sms4_crypt_common(crypto, false, false); + break; case OCTEON_COP2_SEL_GFM_XORMUL1: { uint64_t in[2] =3D { crypto->gfm_result[0] ^ crypto->gfm_xor0, diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index c75f04da63..6d123a4623 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -180,6 +180,10 @@ static bool octeon_cop2_is_supported_dmtc2(uint16_t se= l) case OCTEON_COP2_SEL_AES_ENC1: case OCTEON_COP2_SEL_AES_DEC_CBC1: case OCTEON_COP2_SEL_AES_DEC1: + case OCTEON_COP2_SEL_SMS4_ENC_CBC1: + case OCTEON_COP2_SEL_SMS4_ENC1: + case OCTEON_COP2_SEL_SMS4_DEC_CBC1: + case OCTEON_COP2_SEL_SMS4_DEC1: return true; default: return false; --=20 2.54.0 From nobody Mon May 25 20:32:02 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=1778253295; cv=none; d=zohomail.com; s=zohoarc; b=ewLDG1TAvS0uQj34LHyin9u2VsIjntlyaBy/sVgGiGNToiCuIx2BUgwyyiaeIJQf97YcJorrScD5lqa58MNuKZ99zdotU6EGn7Ntmg/Jz55h99ZbYhaFAmYHuPYhUZR3P4YbHL2FMJsflSIIA0qTOvcoCgEYX4zJy+cToIg8LRY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253295; 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=6OIjhNAc1qSWjldhaWCDmAlnLGPwF92RMvqkn/pHPU8=; b=XwEc5Qp0n50vbBheKofqhi0GF00xKkYa4AL2LxQbytkLRKX27TnuIpSbGXAmNY/FJT9Q0NSj5S2VcAtgtqd1cuTNFOifnEz9CD/COpBiZfs0+BIRd1Xu4kEKreUmtr7H/7GQm+IqhplYLWYQGaCiPKGSTga7hmsbb3CIxFGLRns= 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 1778253295762218.26783170749354; Fri, 8 May 2026 08:14:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMuB-000423-LA; Fri, 08 May 2026 11:14:19 -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 1wLMtO-0002ja-Ck for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:30 -0400 Received: from mail-oi1-x22a.google.com ([2607:f8b0:4864:20::22a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtL-0001mo-2Q for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:29 -0400 Received: by mail-oi1-x22a.google.com with SMTP id 5614622812f47-479eb8bcacbso1319727b6e.1 for ; Fri, 08 May 2026 08:13:26 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253206; x=1778858006; 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=6OIjhNAc1qSWjldhaWCDmAlnLGPwF92RMvqkn/pHPU8=; b=QZDsMO3XyVyHhPQC+bMyJ9BvLv0vBl5AVos80qkqsymnjux1PXP4EOYSXXCujZFIua 4xIMBJldSeew8ZX8w0wKqVgfkVyrhgYZJYSRZ+1QnLKTZr2GoF2fj21RSWqlZGba4J2w ktKpG9kG4gC4zYGtFnXm/VuyexPmiNJzFWR5kardygVXVLDG2fkSdmxLyewA3ByxLPsH MsmstYqDQ38FhgRQc7TUNDyviVSC7pLIvOTgxeSMOja5YDUJt75pRa0VQB9sCjPwlYN4 9uencSW53tsVzVIDgnw4bt5QtBubINvrcwNS1Wk8pw31o+vnNqYRcW5/dn2BFAfGbeAS dlqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253206; x=1778858006; 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=6OIjhNAc1qSWjldhaWCDmAlnLGPwF92RMvqkn/pHPU8=; b=YiR/rardBxagVHGa4+kBCO9qSW3MQf+G7uBn2PB+p8AKnnhOuONer3ZImT0Z9ANYS0 l7zyPbQnVcrZmYRvmDj9G5xNsB+IVPehqqLdQkVlVMXnEXNP3Mrf4r6SryUpsziCz54X 4dPXSkmHsYGLOXMGKgW8B59FMqRvKMZW4Zm6wAx0mLSNA/FAkaFaL8VyTaYI+ivyuata QOAUp1Y/IJ39sEsJT0Q9LwqhtDzhKnVS8tfz3WZDArYzvycLezp7msPyhjfgGrWndG6g dMZ4AoIYTDjmbTCnilhJ1HOzZGOGbfQ7vdLCgWXlM6T8v/EGrSKlrHH6Mvvan/+38XQp 9awQ== X-Gm-Message-State: AOJu0Yy5RNItxM+xJdFxzWA1QudQeqqMvQ7T8MZqQaIhqM0WghZVxkTY jtITpmHsEFCQEzNnIsWZ2WV3E9lhjRnB1kIjbXaqgJWL90aukspx8QIJPLG0xw== X-Gm-Gg: AeBDietIQfK5KW2vhV5XHhrAjlimIq+GOUp0qiz3zPoOh183ficsHaFMYINIPSW6S07 nNMv+137YS4VZ3/tzmgwVJuyYytkiHdZQ01dwgTpoNMgY06xRr2igvSWMtVTXXGZd40CnnKkv3l wWFSlaih0ybx3swVOZmnEHDzvLklVKhCxYKepp3bN+5GLIrHpwNWM73i5QQMUAp4dUXknYCjBcz 3tMScNomrN1OjyK8LnP2H4BpVV8ueN11+7M1tTnprtgERLegHGTKKgoJrfE31jpvN6e0XKeQ0Ii Jzotvpm0hYFxG6ubm/P2BeGEAS5m1As4duCoNaY6CkSTmu7Z28RYCNVxf6fpugcSIwd/dSv8J03 T6u9JWX+R+bMhFoRth2ljCpz2rYlhStKBAHJuCUpoUkQUNQThNp0y0N4qr8O+jGbcnBclXKFuIo YzgW4aUd9ZtDjPHeMljFEWghZtJQxKQdjCZTft7U+FQkxrwW5QeDQKXk0TpCqyCfI8GKyaHvNL3 8L9CJU63fuLLJnh2aFqnJwM1k/z33GfErfFMKyuf8WYCz6V7y4sMhQl0XQ0WtRWvRuyboajb6am Uv1H+J9WXY7LeRv1riK3Iu0uBo/1gVoXOvKc26C/fZ0yF6m4Liyd6b705RXDdRWsUTcHQD5oK6X j6RQwfA== X-Received: by 2002:a05:6808:e64a:b0:475:be6f:aa with SMTP id 5614622812f47-480420c5dffmr5889149b6e.19.1778253205571; Fri, 08 May 2026 08:13:25 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:28 -0600 Subject: [PATCH v3 28/32] target/mips: add Octeon SHA3 crypto support MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-28-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier 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::22a; envelope-from=james.hilliard1@gmail.com; helo=mail-oi1-x22a.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: 1778253297839158500 Add the Octeon SHA3 register window and STARTOP selector. Keep the shared HSH/SHA3/SHA512 write path coherent, then model the dedicated 25-lane Keccak state and the Keccak-f[1600] permutation so the COP2 SHA3 interface follows the hardware behaviour. Signed-off-by: James Hilliard --- 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) --- target/mips/cpu.h | 22 +++++ target/mips/system/machine.c | 1 + target/mips/tcg/octeon_crypto.c | 171 +++++++++++++++++++++++++++++++++= ++++ target/mips/tcg/octeon_translate.c | 22 +++++ 4 files changed, 216 insertions(+) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index 2457b253ae..4f136e87f4 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -533,6 +533,7 @@ typedef enum MIPSOcteonSharedMode { OCTEON_SHARED_MODE_NONE =3D 0, OCTEON_SHARED_MODE_SHA512, OCTEON_SHARED_MODE_SNOW3G, + OCTEON_SHARED_MODE_SHA3, } MIPSOcteonSharedMode; =20 typedef enum MIPSOcteonCop2Sel { @@ -637,6 +638,7 @@ typedef enum MIPSOcteonCop2Sel { OCTEON_COP2_SEL_HSH_DATW13, OCTEON_COP2_SEL_HSH_DATW14, OCTEON_COP2_SEL_HSH_DATW15, + OCTEON_COP2_SEL_SHA3_DAT15_READ =3D 0x024f, OCTEON_COP2_SEL_HSH_IVW0 =3D 0x0250, OCTEON_COP2_SEL_HSH_IVW1, OCTEON_COP2_SEL_HSH_IVW2, @@ -663,6 +665,24 @@ typedef enum MIPSOcteonCop2Sel { OCTEON_COP2_SEL_GFM_RESINP1, OCTEON_COP2_SEL_GFM_XOR0, OCTEON_COP2_SEL_GFM_POLY =3D 0x025e, + OCTEON_COP2_SEL_SHA3_XORDAT0 =3D 0x02c0, + OCTEON_COP2_SEL_SHA3_XORDAT1, + OCTEON_COP2_SEL_SHA3_XORDAT2, + OCTEON_COP2_SEL_SHA3_XORDAT3, + OCTEON_COP2_SEL_SHA3_XORDAT4, + OCTEON_COP2_SEL_SHA3_XORDAT5, + OCTEON_COP2_SEL_SHA3_XORDAT6, + OCTEON_COP2_SEL_SHA3_XORDAT7, + OCTEON_COP2_SEL_SHA3_XORDAT8, + OCTEON_COP2_SEL_SHA3_XORDAT9, + OCTEON_COP2_SEL_SHA3_XORDAT10, + OCTEON_COP2_SEL_SHA3_XORDAT11, + OCTEON_COP2_SEL_SHA3_XORDAT12, + OCTEON_COP2_SEL_SHA3_XORDAT13, + OCTEON_COP2_SEL_SHA3_XORDAT14, + OCTEON_COP2_SEL_SHA3_XORDAT15, + OCTEON_COP2_SEL_SHA3_XORDAT16, + OCTEON_COP2_SEL_SHA3_XORDAT17, OCTEON_COP2_SEL_AES_ENC_CBC1 =3D 0x3109, OCTEON_COP2_SEL_AES_ENC1 =3D 0x310b, OCTEON_COP2_SEL_AES_DEC_CBC1 =3D 0x310d, @@ -675,6 +695,7 @@ typedef enum MIPSOcteonCop2Sel { OCTEON_COP2_SEL_SNOW3G_START =3D 0x404d, OCTEON_COP2_SEL_SNOW3G_MORE =3D 0x404e, OCTEON_COP2_SEL_HSH_STARTSHA256 =3D 0x404f, + OCTEON_COP2_SEL_SHA3_STARTOP =3D 0x4052, OCTEON_COP2_SEL_GFM_XORMUL1_REFLECT =3D 0x405d, OCTEON_COP2_SEL_HSH_STARTSHA1 =3D 0x4057, OCTEON_COP2_SEL_HSH_STARTSHA512 =3D 0x424f, @@ -689,6 +710,7 @@ typedef struct MIPSOcteonCryptoState { uint64_t hash_block[8]; uint64_t sha512_state[8]; uint64_t sha512_block[16]; + uint64_t sha3_state[25]; uint64_t aes_iv[2]; uint64_t aes_key[4]; uint64_t aes_result[2]; diff --git a/target/mips/system/machine.c b/target/mips/system/machine.c index 8595b1bdfa..bf48544a08 100644 --- a/target/mips/system/machine.c +++ b/target/mips/system/machine.c @@ -292,6 +292,7 @@ static const VMStateDescription mips_vmstate_octeon_cry= pto =3D { VMSTATE_UINT64_ARRAY(env.octeon_crypto.hash_block, MIPSCPU, 8), VMSTATE_UINT64_ARRAY(env.octeon_crypto.sha512_state, MIPSCPU, 8), VMSTATE_UINT64_ARRAY(env.octeon_crypto.sha512_block, MIPSCPU, 16), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.sha3_state, MIPSCPU, 25), VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_iv, MIPSCPU, 2), VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_key, MIPSCPU, 4), VMSTATE_UINT64_ARRAY(env.octeon_crypto.aes_result, MIPSCPU, 2), diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index 177d112483..d9e66f3dc8 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -487,21 +487,150 @@ static void octeon_sha512_transform(MIPSOcteonCrypto= State *crypto) crypto->sha512_state[7] +=3D h; } =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 void octeon_sha3_permute(MIPSOcteonCryptoState *crypto) +{ + uint64_t *state =3D crypto->sha3_state; + + for (int round =3D 0; round < 24; round++) { + uint64_t bc[5]; + uint64_t temp; + + for (int x =3D 0; x < 5; x++) { + bc[x] =3D state[x] ^ state[5 + x] ^ state[10 + x] ^ + state[15 + x] ^ state[20 + x]; + } + for (int x =3D 0; x < 5; x++) { + temp =3D bc[(x + 4) % 5] ^ rol64(bc[(x + 1) % 5], 1); + for (int y =3D 0; y < 25; y +=3D 5) { + state[y + x] ^=3D temp; + } + } + + temp =3D state[1]; + for (int i =3D 0; i < 24; i++) { + uint64_t next =3D state[octeon_sha3_pi_lanes[i]]; + + state[octeon_sha3_pi_lanes[i]] =3D + rol64(temp, octeon_sha3_rotation_constants[i]); + temp =3D next; + } + + for (int y =3D 0; y < 25; y +=3D 5) { + for (int x =3D 0; x < 5; x++) { + bc[x] =3D state[y + x]; + } + for (int x =3D 0; x < 5; x++) { + state[y + x] =3D bc[x] ^ ((~bc[(x + 1) % 5]) & bc[(x + 2) = % 5]); + } + } + + state[0] ^=3D octeon_sha3_round_constants[round]; + } +} + +static bool octeon_sha3_is_dat_sel(uint32_t sel) +{ + switch (sel) { + case OCTEON_COP2_SEL_HSH_DATW0 ... OCTEON_COP2_SEL_HSH_DATW15: + case OCTEON_COP2_SEL_HSH_IVW0 ... OCTEON_COP2_SEL_HSH_IVW7: + case OCTEON_COP2_SEL_SHA3_DAT15_WRITE: + case OCTEON_COP2_SEL_SHA3_DAT24: + return true; + default: + return false; + } +} + +static int octeon_sha3_dat_pos_from_sel(uint32_t sel) +{ + switch (sel) { + case OCTEON_COP2_SEL_HSH_DATW0 ... OCTEON_COP2_SEL_HSH_DATW14: + return sel - OCTEON_COP2_SEL_HSH_DATW0; + case OCTEON_COP2_SEL_HSH_IVW0 ... OCTEON_COP2_SEL_HSH_IVW7: + return 16 + (sel - OCTEON_COP2_SEL_HSH_IVW0); + case OCTEON_COP2_SEL_HSH_DATW15: + case OCTEON_COP2_SEL_SHA3_DAT15_WRITE: + return 15; + case OCTEON_COP2_SEL_SHA3_DAT24: + return 24; + default: + g_assert_not_reached(); + } +} + +static uint64_t octeon_sha3_reg_to_lane(uint64_t value) +{ + /* + * The COP2 register interface is consumed by big-endian MIPS code as + * 64-bit register values, while Keccak lanes are byte-little-endian. + */ + return bswap64(value); +} + +static uint64_t octeon_sha3_lane_to_reg(uint64_t value) +{ + return bswap64(value); +} + static void octeon_store_shared_hash_dat(MIPSOcteonCryptoState *crypto, uint32_t sel, uint64_t value) { switch (sel) { case OCTEON_COP2_SEL_HSH_DATW0 ... OCTEON_COP2_SEL_HSH_DATW14: crypto->sha512_block[sel - OCTEON_COP2_SEL_HSH_DATW0] =3D value; + crypto->sha3_state[sel - OCTEON_COP2_SEL_HSH_DATW0] =3D + octeon_sha3_reg_to_lane(value); break; case OCTEON_COP2_SEL_HSH_IVW0 ... OCTEON_COP2_SEL_HSH_IVW7: crypto->sha512_state[sel - OCTEON_COP2_SEL_HSH_IVW0] =3D value; + crypto->sha3_state[16 + (sel - OCTEON_COP2_SEL_HSH_IVW0)] =3D + octeon_sha3_reg_to_lane(value); + break; + case OCTEON_COP2_SEL_SHA3_DAT15_WRITE: + crypto->sha3_state[15] =3D octeon_sha3_reg_to_lane(value); + break; + case OCTEON_COP2_SEL_SHA3_DAT24: + crypto->sha3_state[24] =3D octeon_sha3_reg_to_lane(value); break; default: g_assert_not_reached(); } } =20 +static int octeon_sha3_xordat_pos_from_sel(uint32_t sel) +{ + if (sel >=3D OCTEON_COP2_SEL_SHA3_XORDAT0 && + sel <=3D OCTEON_COP2_SEL_SHA3_XORDAT17) { + return sel - OCTEON_COP2_SEL_SHA3_XORDAT0; + } + return -1; +} + 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, @@ -1396,6 +1525,7 @@ static void octeon_gfm_mul(const uint64_t x[2], const= uint64_t y[2], uint64_t helper_octeon_cop2_dmfc2(CPUMIPSState *env, uint32_t sel) { MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; + int sha3_pos; =20 if (crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_SNOW3G) { if (sel >=3D OCTEON_COP2_SEL_SNOW3G_LFSR0 && @@ -1417,6 +1547,12 @@ uint64_t helper_octeon_cop2_dmfc2(CPUMIPSState *env,= uint32_t sel) } } =20 + if (crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_SHA3 && + octeon_sha3_is_dat_sel(sel)) { + sha3_pos =3D octeon_sha3_dat_pos_from_sel(sel); + return octeon_sha3_lane_to_reg(crypto->sha3_state[sha3_pos]); + } + switch (sel) { case OCTEON_COP2_SEL_3DES_KEY0: case OCTEON_COP2_SEL_3DES_KEY1: @@ -1507,6 +1643,7 @@ void helper_octeon_cop2_dmtc2(CPUMIPSState *env, uint= 64_t value, { MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; uint64_t q =3D (uint64_t)value; + int sha3_pos; =20 switch (sel) { case OCTEON_COP2_SEL_3DES_KEY0: @@ -1628,6 +1765,14 @@ void helper_octeon_cop2_dmtc2(CPUMIPSState *env, uin= t64_t value, octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA512); octeon_sha512_transform(crypto); break; + case OCTEON_COP2_SEL_SHA3_DAT15_WRITE: + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA3); + octeon_store_shared_hash_dat(crypto, sel, q); + break; + case OCTEON_COP2_SEL_SHA3_DAT24: + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA3); + octeon_store_shared_hash_dat(crypto, sel, q); + break; case OCTEON_COP2_SEL_HSH_IVW0: case OCTEON_COP2_SEL_HSH_IVW1: case OCTEON_COP2_SEL_HSH_IVW2: @@ -1688,6 +1833,32 @@ void helper_octeon_cop2_dmtc2(CPUMIPSState *env, uin= t64_t value, crypto->hash_block[7] =3D q; octeon_sha1_transform(crypto); break; + case OCTEON_COP2_SEL_SHA3_XORDAT0: + case OCTEON_COP2_SEL_SHA3_XORDAT1: + case OCTEON_COP2_SEL_SHA3_XORDAT2: + case OCTEON_COP2_SEL_SHA3_XORDAT3: + case OCTEON_COP2_SEL_SHA3_XORDAT4: + case OCTEON_COP2_SEL_SHA3_XORDAT5: + case OCTEON_COP2_SEL_SHA3_XORDAT6: + case OCTEON_COP2_SEL_SHA3_XORDAT7: + case OCTEON_COP2_SEL_SHA3_XORDAT8: + case OCTEON_COP2_SEL_SHA3_XORDAT9: + case OCTEON_COP2_SEL_SHA3_XORDAT10: + case OCTEON_COP2_SEL_SHA3_XORDAT11: + case OCTEON_COP2_SEL_SHA3_XORDAT12: + case OCTEON_COP2_SEL_SHA3_XORDAT13: + case OCTEON_COP2_SEL_SHA3_XORDAT14: + case OCTEON_COP2_SEL_SHA3_XORDAT15: + case OCTEON_COP2_SEL_SHA3_XORDAT16: + case OCTEON_COP2_SEL_SHA3_XORDAT17: + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA3); + sha3_pos =3D octeon_sha3_xordat_pos_from_sel(sel); + crypto->sha3_state[sha3_pos] ^=3D octeon_sha3_reg_to_lane(q); + break; + case OCTEON_COP2_SEL_SHA3_STARTOP: + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA3); + octeon_sha3_permute(crypto); + break; case OCTEON_COP2_SEL_GFM_XORMUL1_REFLECT: octeon_gfm_mul_reflect(crypto, q); break; diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 6d123a4623..278b2ed991 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -66,6 +66,7 @@ static bool octeon_cop2_is_supported_dmfc2(uint16_t sel) case OCTEON_COP2_SEL_HSH_IVW6: case OCTEON_COP2_SEL_HSH_IVW7: case OCTEON_COP2_SEL_AES_DAT0: + case OCTEON_COP2_SEL_SHA3_DAT24: case OCTEON_COP2_SEL_GFM_MUL_REFLECT0: case OCTEON_COP2_SEL_GFM_MUL_REFLECT1: case OCTEON_COP2_SEL_GFM_RESINP_REFLECT0: @@ -150,6 +151,8 @@ static bool octeon_cop2_is_supported_dmtc2(uint16_t sel) case OCTEON_COP2_SEL_HSH_DATW13: case OCTEON_COP2_SEL_HSH_DATW14: case OCTEON_COP2_SEL_HSH_DATW15: + case OCTEON_COP2_SEL_SHA3_DAT24: + case OCTEON_COP2_SEL_SHA3_DAT15_WRITE: case OCTEON_COP2_SEL_HSH_IVW0: case OCTEON_COP2_SEL_HSH_IVW1: case OCTEON_COP2_SEL_HSH_IVW2: @@ -167,11 +170,30 @@ static bool octeon_cop2_is_supported_dmtc2(uint16_t s= el) case OCTEON_COP2_SEL_GFM_RESINP1: case OCTEON_COP2_SEL_GFM_XOR0: case OCTEON_COP2_SEL_GFM_POLY: + case OCTEON_COP2_SEL_SHA3_XORDAT0: + case OCTEON_COP2_SEL_SHA3_XORDAT1: + case OCTEON_COP2_SEL_SHA3_XORDAT2: + case OCTEON_COP2_SEL_SHA3_XORDAT3: + case OCTEON_COP2_SEL_SHA3_XORDAT4: + case OCTEON_COP2_SEL_SHA3_XORDAT5: + case OCTEON_COP2_SEL_SHA3_XORDAT6: + case OCTEON_COP2_SEL_SHA3_XORDAT7: + case OCTEON_COP2_SEL_SHA3_XORDAT8: + case OCTEON_COP2_SEL_SHA3_XORDAT9: + case OCTEON_COP2_SEL_SHA3_XORDAT10: + case OCTEON_COP2_SEL_SHA3_XORDAT11: + case OCTEON_COP2_SEL_SHA3_XORDAT12: + case OCTEON_COP2_SEL_SHA3_XORDAT13: + case OCTEON_COP2_SEL_SHA3_XORDAT14: + case OCTEON_COP2_SEL_SHA3_XORDAT15: + case OCTEON_COP2_SEL_SHA3_XORDAT16: + case OCTEON_COP2_SEL_SHA3_XORDAT17: case OCTEON_COP2_SEL_HSH_STARTSHA1_COMPAT: case OCTEON_COP2_SEL_HSH_STARTMD5: case OCTEON_COP2_SEL_SNOW3G_START: case OCTEON_COP2_SEL_SNOW3G_MORE: case OCTEON_COP2_SEL_HSH_STARTSHA256: + case OCTEON_COP2_SEL_SHA3_STARTOP: case OCTEON_COP2_SEL_HSH_STARTSHA1: case OCTEON_COP2_SEL_GFM_XORMUL1_REFLECT: case OCTEON_COP2_SEL_HSH_STARTSHA512: --=20 2.54.0 From nobody Mon May 25 20:32:02 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=1778253266; cv=none; d=zohomail.com; s=zohoarc; b=QDC8eASqldYQM34rqAI8ehvzO4iQWlPx+A4/meXPiXZMrzsuMehytiWZoon6ipSL80wGhdy/WO7fa1/j2LLQi2dg1m83IG0TkqQSC/c3u6mkEZs2gs0IQlZKbzZlvWMHYm3EZv8qJpNp7Lf+8vOflMT2rn/tmkWNRss5EAinL80= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253266; 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=02Vg9TP5cPr6Hwk9IG7LGqDF5IMhJlGE68Knki2LRWs=; b=JKcutW7rd0EmzwI8EsGLEosB8XMbuQlEhyiOerhpA+QXSrpr6uEk9b6fotHxPQIzHd/gWOtDqxOd+Q0PqVnZGj2RceGl/6+DOxD4fjnCv6vG42s6HnuVFSJz/8PBzZ3t65fBOvc9mhrPSoFj7ZrwWuHCxpfAUNbq0D2DCHHTXug= 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 1778253266187338.61788170869124; Fri, 8 May 2026 08:14:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMuC-00045q-1b; Fri, 08 May 2026 11:14:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wLMtP-0002jf-0j for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:32 -0400 Received: from mail-oo1-xc35.google.com ([2607:f8b0:4864:20::c35]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtM-0001mw-78 for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:30 -0400 Received: by mail-oo1-xc35.google.com with SMTP id 006d021491bc7-682fce74c06so1427225eaf.3 for ; Fri, 08 May 2026 08:13:27 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253207; x=1778858007; 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=02Vg9TP5cPr6Hwk9IG7LGqDF5IMhJlGE68Knki2LRWs=; b=Pyz4b1RCTKyt43xYdEZd4JsevpLVtEz76x3CEXzhGi6lRL4evnlD7HlFJTesP5mQwd V+1VQ6d9u4UiDqjmUis4mH5733ZRKm+IunRNcTBKEPy2tez6rDq9WWNNqV9sNJ8BH+4J ov44/2wTSJkDOq4hMYH4Mpivf1BJf2bBGup3Gx47t7Lq0A4cmXu5tyY6V58GByYke13z TkNQJbcLz7r3RbPn2MeDcitUovNlHLM+dnpaPwx2FZgeta0kP3cVzf3io4WDpqtZG2sH YUIyFjU+M3O+6eCkhIbs2D6TYVxxRkBMq8+wg9uR5JpFz7q7jH1NQQnv61XAzmP7Uy7X HNhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253207; x=1778858007; 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=02Vg9TP5cPr6Hwk9IG7LGqDF5IMhJlGE68Knki2LRWs=; b=EqIowb1R5BBcPR6kqzPC2LFl0fdFPQYumLGS1OjZVVNzzLst4oN0972LF0YFskVkvB /uc6abtZXZGAhsG2asl3Ulg5b9hVFyF56PpwQnz9qM20sW3O9rhW4MTAJR+khj41Ch4G 5EzFqMfTasEwkofQ9hGdAhrElXw0KdI4Tln+Uj787A5C08/C5UNKRbx0Wa+labCuXtwV rMEZYMF4Zp5ssaAm552lWr0s0RjgtlScMESHWrfq/5c2dHRj83csANjiih2J7G1gSa2E jcY+RUDgfQujcxuLvYEeconS3GVVCykSNbofRrojqr5gHwz3e4QyXkrFixJsDMz7zfRf YnDA== X-Gm-Message-State: AOJu0Yz9aWrLtIuvbP0H85xUzjtZX021qwrVX6P+qp9GWRkSTphS0jYe Pw7TxpOwYejvdsu3Q8P3V5vaCRLqVGmt8nPNr8f0dexbUkoWS6o3KWgJbqobDA== X-Gm-Gg: AeBDietzKg7gMzY7jsxKGCHgsf58w9xzIG5oi0sLs8h0wP4fSBU0sKuelsLa2RjxoZu W5Ysr/V55UEAxApAw69LTeQFMipT58FHRgj0QCMl/7AqusDRRMX+9aAd+Jzm54j3ne1iFMrk7ya l3zxXLYblj4Vmi0vTXAMcK7t0ZxoEiuJVq9c/jfOxT5t+Q5z+8kZ0rYWL2I5F+CmnwM2jDtUXIb 4/1cZROXO4SJbgEfZcUUTJPEEaf5Q+ob10b6wTNLMP+p0XsKWUvZgnoM8PE0RWV8LzFGoLc3buR x7rQ76iyhF+3gxT51/nOHisFRIr9OFynL4r0wYavaqf7NxHYvzdmuJMLFjPcHigWjYVJQSHB08F XXU4tginQV+/mA5PTha0w3YxqD58jV/NYcYUh+6jVnmnZl+n0PB1SzCnpukzIJubZ/hmZgWHf0h eYG0WLPQH0GOF8G1l0T8IXTkX4Id5MZiqVYAv/nEBCPq7MmlD8X7DhijpCoh+TuXQO877zW27Zm 2BNb4m8XtLMP3Q6+qgGwTEtwJnkkcpJWRWxS7tq6p+B0MJWY3/9ikkBhyYldaMA/HnKXP9oeI7q FPx3dsVgKzuOHzruhg7rb/8P4n65BPl5hI2BPuMN3B5ZnsvwLZquXa6pr1pFX8x9Fo0WWM8= X-Received: by 2002:a05:6820:168d:b0:68a:af54:cb61 with SMTP id 006d021491bc7-69998d889ecmr6927800eaf.60.1778253206524; Fri, 08 May 2026 08:13:26 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:29 -0600 Subject: [PATCH v3 29/32] target/mips: add Octeon ZUC crypto support MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-29-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier 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::c35; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc35.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: 1778253268496154100 Add the Octeon ZUC START and MORE selectors 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 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) --- target/mips/cpu.h | 7 + target/mips/system/machine.c | 4 + target/mips/tcg/octeon_crypto.c | 353 +++++++++++++++++++++++++++++++++= ++++ target/mips/tcg/octeon_translate.c | 2 + 4 files changed, 366 insertions(+) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index 4f136e87f4..f97e50a84a 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -533,6 +533,7 @@ typedef enum MIPSOcteonSharedMode { OCTEON_SHARED_MODE_NONE =3D 0, OCTEON_SHARED_MODE_SHA512, OCTEON_SHARED_MODE_SNOW3G, + OCTEON_SHARED_MODE_ZUC, OCTEON_SHARED_MODE_SHA3, } MIPSOcteonSharedMode; =20 @@ -696,6 +697,8 @@ typedef enum MIPSOcteonCop2Sel { OCTEON_COP2_SEL_SNOW3G_MORE =3D 0x404e, OCTEON_COP2_SEL_HSH_STARTSHA256 =3D 0x404f, OCTEON_COP2_SEL_SHA3_STARTOP =3D 0x4052, + OCTEON_COP2_SEL_ZUC_START =3D 0x4055, + OCTEON_COP2_SEL_ZUC_MORE =3D 0x4056, OCTEON_COP2_SEL_GFM_XORMUL1_REFLECT =3D 0x405d, OCTEON_COP2_SEL_HSH_STARTSHA1 =3D 0x4057, OCTEON_COP2_SEL_HSH_STARTSHA512 =3D 0x424f, @@ -730,6 +733,10 @@ typedef struct MIPSOcteonCryptoState { uint32_t snow3g_fsm[3]; uint32_t snow3g_lfsr[16]; uint64_t snow3g_result; + uint32_t zuc_fsm[2]; + uint32_t zuc_lfsr[16]; + uint32_t zuc_window[3]; + uint32_t zuc_tresult; } MIPSOcteonCryptoState; =20 typedef struct CPUArchState { diff --git a/target/mips/system/machine.c b/target/mips/system/machine.c index bf48544a08..c9d477896c 100644 --- a/target/mips/system/machine.c +++ b/target/mips/system/machine.c @@ -312,6 +312,10 @@ static const VMStateDescription mips_vmstate_octeon_cr= ypto =3D { VMSTATE_UINT32_ARRAY(env.octeon_crypto.snow3g_fsm, MIPSCPU, 3), VMSTATE_UINT32_ARRAY(env.octeon_crypto.snow3g_lfsr, MIPSCPU, 16), VMSTATE_UINT64(env.octeon_crypto.snow3g_result, MIPSCPU), + VMSTATE_UINT32_ARRAY(env.octeon_crypto.zuc_fsm, MIPSCPU, 2), + VMSTATE_UINT32_ARRAY(env.octeon_crypto.zuc_lfsr, MIPSCPU, 16), + VMSTATE_UINT32_ARRAY(env.octeon_crypto.zuc_window, MIPSCPU, 3), + VMSTATE_UINT32(env.octeon_crypto.zuc_tresult, MIPSCPU), VMSTATE_END_OF_LIST() } }; diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index d9e66f3dc8..3ee56ef4c0 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -631,6 +631,277 @@ static int octeon_sha3_xordat_pos_from_sel(uint32_t s= el) return -1; } =20 +static const uint8_t octeon_zuc_s0[256] =3D { + 0x3e, 0x72, 0x5b, 0x47, 0xca, 0xe0, 0x00, 0x33, + 0x04, 0xd1, 0x54, 0x98, 0x09, 0xb9, 0x6d, 0xcb, + 0x7b, 0x1b, 0xf9, 0x32, 0xaf, 0x9d, 0x6a, 0xa5, + 0xb8, 0x2d, 0xfc, 0x1d, 0x08, 0x53, 0x03, 0x90, + 0x4d, 0x4e, 0x84, 0x99, 0xe4, 0xce, 0xd9, 0x91, + 0xdd, 0xb6, 0x85, 0x48, 0x8b, 0x29, 0x6e, 0xac, + 0xcd, 0xc1, 0xf8, 0x1e, 0x73, 0x43, 0x69, 0xc6, + 0xb5, 0xbd, 0xfd, 0x39, 0x63, 0x20, 0xd4, 0x38, + 0x76, 0x7d, 0xb2, 0xa7, 0xcf, 0xed, 0x57, 0xc5, + 0xf3, 0x2c, 0xbb, 0x14, 0x21, 0x06, 0x55, 0x9b, + 0xe3, 0xef, 0x5e, 0x31, 0x4f, 0x7f, 0x5a, 0xa4, + 0x0d, 0x82, 0x51, 0x49, 0x5f, 0xba, 0x58, 0x1c, + 0x4a, 0x16, 0xd5, 0x17, 0xa8, 0x92, 0x24, 0x1f, + 0x8c, 0xff, 0xd8, 0xae, 0x2e, 0x01, 0xd3, 0xad, + 0x3b, 0x4b, 0xda, 0x46, 0xeb, 0xc9, 0xde, 0x9a, + 0x8f, 0x87, 0xd7, 0x3a, 0x80, 0x6f, 0x2f, 0xc8, + 0xb1, 0xb4, 0x37, 0xf7, 0x0a, 0x22, 0x13, 0x28, + 0x7c, 0xcc, 0x3c, 0x89, 0xc7, 0xc3, 0x96, 0x56, + 0x07, 0xbf, 0x7e, 0xf0, 0x0b, 0x2b, 0x97, 0x52, + 0x35, 0x41, 0x79, 0x61, 0xa6, 0x4c, 0x10, 0xfe, + 0xbc, 0x26, 0x95, 0x88, 0x8a, 0xb0, 0xa3, 0xfb, + 0xc0, 0x18, 0x94, 0xf2, 0xe1, 0xe5, 0xe9, 0x5d, + 0xd0, 0xdc, 0x11, 0x66, 0x64, 0x5c, 0xec, 0x59, + 0x42, 0x75, 0x12, 0xf5, 0x74, 0x9c, 0xaa, 0x23, + 0x0e, 0x86, 0xab, 0xbe, 0x2a, 0x02, 0xe7, 0x67, + 0xe6, 0x44, 0xa2, 0x6c, 0xc2, 0x93, 0x9f, 0xf1, + 0xf6, 0xfa, 0x36, 0xd2, 0x50, 0x68, 0x9e, 0x62, + 0x71, 0x15, 0x3d, 0xd6, 0x40, 0xc4, 0xe2, 0x0f, + 0x8e, 0x83, 0x77, 0x6b, 0x25, 0x05, 0x3f, 0x0c, + 0x30, 0xea, 0x70, 0xb7, 0xa1, 0xe8, 0xa9, 0x65, + 0x8d, 0x27, 0x1a, 0xdb, 0x81, 0xb3, 0xa0, 0xf4, + 0x45, 0x7a, 0x19, 0xdf, 0xee, 0x78, 0x34, 0x60, +}; + +static const uint8_t octeon_zuc_s1[256] =3D { + 0x55, 0xc2, 0x63, 0x71, 0x3b, 0xc8, 0x47, 0x86, + 0x9f, 0x3c, 0xda, 0x5b, 0x29, 0xaa, 0xfd, 0x77, + 0x8c, 0xc5, 0x94, 0x0c, 0xa6, 0x1a, 0x13, 0x00, + 0xe3, 0xa8, 0x16, 0x72, 0x40, 0xf9, 0xf8, 0x42, + 0x44, 0x26, 0x68, 0x96, 0x81, 0xd9, 0x45, 0x3e, + 0x10, 0x76, 0xc6, 0xa7, 0x8b, 0x39, 0x43, 0xe1, + 0x3a, 0xb5, 0x56, 0x2a, 0xc0, 0x6d, 0xb3, 0x05, + 0x22, 0x66, 0xbf, 0xdc, 0x0b, 0xfa, 0x62, 0x48, + 0xdd, 0x20, 0x11, 0x06, 0x36, 0xc9, 0xc1, 0xcf, + 0xf6, 0x27, 0x52, 0xbb, 0x69, 0xf5, 0xd4, 0x87, + 0x7f, 0x84, 0x4c, 0xd2, 0x9c, 0x57, 0xa4, 0xbc, + 0x4f, 0x9a, 0xdf, 0xfe, 0xd6, 0x8d, 0x7a, 0xeb, + 0x2b, 0x53, 0xd8, 0x5c, 0xa1, 0x14, 0x17, 0xfb, + 0x23, 0xd5, 0x7d, 0x30, 0x67, 0x73, 0x08, 0x09, + 0xee, 0xb7, 0x70, 0x3f, 0x61, 0xb2, 0x19, 0x8e, + 0x4e, 0xe5, 0x4b, 0x93, 0x8f, 0x5d, 0xdb, 0xa9, + 0xad, 0xf1, 0xae, 0x2e, 0xcb, 0x0d, 0xfc, 0xf4, + 0x2d, 0x46, 0x6e, 0x1d, 0x97, 0xe8, 0xd1, 0xe9, + 0x4d, 0x37, 0xa5, 0x75, 0x5e, 0x83, 0x9e, 0xab, + 0x82, 0x9d, 0xb9, 0x1c, 0xe0, 0xcd, 0x49, 0x89, + 0x01, 0xb6, 0xbd, 0x58, 0x24, 0xa2, 0x5f, 0x38, + 0x78, 0x99, 0x15, 0x90, 0x50, 0xb8, 0x95, 0xe4, + 0xd0, 0x91, 0xc7, 0xce, 0xed, 0x0f, 0xb4, 0x6f, + 0xa0, 0xcc, 0xf0, 0x02, 0x4a, 0x79, 0xc3, 0xde, + 0xa3, 0xef, 0xea, 0x51, 0xe6, 0x6b, 0x18, 0xec, + 0x1b, 0x2c, 0x80, 0xf7, 0x74, 0xe7, 0xff, 0x21, + 0x5a, 0x6a, 0x54, 0x1e, 0x41, 0x31, 0x92, 0x35, + 0xc4, 0x33, 0x07, 0x0a, 0xba, 0x7e, 0x0e, 0x34, + 0x88, 0xb1, 0x98, 0x7c, 0xf3, 0x3d, 0x60, 0x6c, + 0x7b, 0xca, 0xd3, 0x1f, 0x32, 0x65, 0x04, 0x28, + 0x64, 0xbe, 0x85, 0x9b, 0x2f, 0x59, 0x8a, 0xd7, + 0xb0, 0x25, 0xac, 0xaf, 0x12, 0x03, 0xe2, 0xf2, +}; + +static inline uint32_t octeon_zuc_addm(uint32_t a, uint32_t b) +{ + uint32_t c =3D a + b; + + c =3D (c & 0x7fffffffU) + (c >> 31); + return c ? c : 0x7fffffffU; +} + +static inline uint32_t octeon_zuc_mul_by_pow2(uint32_t v, unsigned int shi= ft) +{ + return ((v << shift) | (v >> (31 - shift))) & 0x7fffffffU; +} + +static inline uint32_t octeon_zuc_make_u32(uint8_t a, uint8_t b, + uint8_t c, uint8_t d) +{ + return ((uint32_t)a << 24) | ((uint32_t)b << 16) | + ((uint32_t)c << 8) | d; +} + +static inline uint64_t octeon_zuc_pack_pair(uint32_t hi, uint32_t lo) +{ + return ((uint64_t)hi << 32) | lo; +} + +static void octeon_zuc_bit_reorganization(const MIPSOcteonCryptoState *cry= pto, + uint32_t x[4]) +{ + x[0] =3D ((crypto->zuc_lfsr[15] & 0x7fff8000U) << 1) | + (crypto->zuc_lfsr[14] & 0xffffU); + x[1] =3D ((crypto->zuc_lfsr[11] & 0xffffU) << 16) | + (crypto->zuc_lfsr[9] >> 15); + x[2] =3D ((crypto->zuc_lfsr[7] & 0xffffU) << 16) | + (crypto->zuc_lfsr[5] >> 15); + x[3] =3D ((crypto->zuc_lfsr[2] & 0xffffU) << 16) | + (crypto->zuc_lfsr[0] >> 15); +} + +static inline uint32_t octeon_zuc_l1(uint32_t x) +{ + return x ^ rol32(x, 2) ^ rol32(x, 10) ^ + rol32(x, 18) ^ rol32(x, 24); +} + +static inline uint32_t octeon_zuc_l2(uint32_t x) +{ + return x ^ rol32(x, 8) ^ rol32(x, 14) ^ + rol32(x, 22) ^ rol32(x, 30); +} + +static uint32_t octeon_zuc_f(MIPSOcteonCryptoState *crypto, const uint32_t= x[4]) +{ + uint32_t w =3D (x[0] ^ crypto->zuc_fsm[0]) + crypto->zuc_fsm[1]; + uint32_t w1 =3D crypto->zuc_fsm[0] + x[1]; + uint32_t w2 =3D crypto->zuc_fsm[1] ^ x[2]; + uint32_t u =3D octeon_zuc_l1((w1 << 16) | (w2 >> 16)); + uint32_t v =3D octeon_zuc_l2((w2 << 16) | (w1 >> 16)); + + crypto->zuc_fsm[0] =3D octeon_zuc_make_u32(octeon_zuc_s0[u >> 24], + octeon_zuc_s1[(uint8_t)(u >> = 16)], + octeon_zuc_s0[(uint8_t)(u >> = 8)], + octeon_zuc_s1[(uint8_t)u]); + crypto->zuc_fsm[1] =3D octeon_zuc_make_u32(octeon_zuc_s0[v >> 24], + octeon_zuc_s1[(uint8_t)(v >> = 16)], + octeon_zuc_s0[(uint8_t)(v >> = 8)], + octeon_zuc_s1[(uint8_t)v]); + return w; +} + +static void octeon_zuc_lfsr_step(MIPSOcteonCryptoState *crypto, + bool init_mode, uint32_t u) +{ + uint32_t f =3D crypto->zuc_lfsr[0]; + + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(crypto->zuc_lfsr[0], 8= )); + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(crypto->zuc_lfsr[4], 2= 0)); + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(crypto->zuc_lfsr[10], = 21)); + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(crypto->zuc_lfsr[13], = 17)); + f =3D octeon_zuc_addm(f, octeon_zuc_mul_by_pow2(crypto->zuc_lfsr[15], = 15)); + if (init_mode) { + f =3D octeon_zuc_addm(f, u); + } + + memmove(&crypto->zuc_lfsr[0], &crypto->zuc_lfsr[1], + 15 * sizeof(crypto->zuc_lfsr[0])); + crypto->zuc_lfsr[15] =3D f; +} + +static uint32_t octeon_zuc_generate_word(MIPSOcteonCryptoState *crypto) +{ + uint32_t x[4]; + uint32_t z; + + octeon_zuc_bit_reorganization(crypto, x); + z =3D octeon_zuc_f(crypto, x) ^ x[3]; + octeon_zuc_lfsr_step(crypto, false, 0); + return z; +} + +static void octeon_zuc_fill_window(MIPSOcteonCryptoState *crypto) +{ + crypto->zuc_window[0] =3D octeon_zuc_generate_word(crypto); + crypto->zuc_window[1] =3D octeon_zuc_generate_word(crypto); + crypto->zuc_window[2] =3D octeon_zuc_generate_word(crypto); +} + +static inline uint32_t +octeon_zuc_window_word(const MIPSOcteonCryptoState *crypto, unsigned int b= it) +{ + if (bit =3D=3D 0) { + return crypto->zuc_window[0]; + } + if (bit < 32) { + return (crypto->zuc_window[0] << bit) | + (crypto->zuc_window[1] >> (32 - bit)); + } + if (bit =3D=3D 32) { + return crypto->zuc_window[1]; + } + return (crypto->zuc_window[1] << (bit - 32)) | + (crypto->zuc_window[2] >> (64 - bit)); +} + +static void octeon_zuc_advance_window(MIPSOcteonCryptoState *crypto) +{ + crypto->zuc_window[0] =3D crypto->zuc_window[2]; + crypto->zuc_window[1] =3D octeon_zuc_generate_word(crypto); + crypto->zuc_window[2] =3D octeon_zuc_generate_word(crypto); +} + +static void octeon_zuc_start(MIPSOcteonCryptoState *crypto, uint64_t q) +{ + uint32_t x[4]; + bool restore_active =3D crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_= ZUC; + + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_ZUC); + if (!restore_active) { + for (int i =3D 0; i < 7; i++) { + uint64_t pair =3D crypto->sha512_block[i]; + + crypto->zuc_lfsr[i * 2] =3D (pair >> 32) & 0x7fffffffU; + crypto->zuc_lfsr[i * 2 + 1] =3D pair & 0x7fffffffU; + } + } + crypto->zuc_lfsr[14] =3D (q >> 32) & 0x7fffffffU; + crypto->zuc_lfsr[15] =3D q & 0x7fffffffU; + crypto->zuc_fsm[0] =3D 0; + crypto->zuc_fsm[1] =3D 0; + crypto->zuc_tresult =3D 0; + + for (int i =3D 0; i < 32; i++) { + octeon_zuc_bit_reorganization(crypto, x); + octeon_zuc_lfsr_step(crypto, true, octeon_zuc_f(crypto, x) >> 1); + } + + octeon_zuc_bit_reorganization(crypto, x); + (void)octeon_zuc_f(crypto, x); + octeon_zuc_lfsr_step(crypto, false, 0); + octeon_zuc_fill_window(crypto); +} + +static void octeon_zuc_more(MIPSOcteonCryptoState *crypto, uint64_t q) +{ + uint32_t t =3D crypto->zuc_tresult; + + octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_ZUC); + for (unsigned int bit =3D 0; bit < 64; bit++) { + if ((q >> (63 - bit)) & 1) { + t ^=3D octeon_zuc_window_word(crypto, bit); + } + } + crypto->zuc_tresult =3D t; + octeon_zuc_advance_window(crypto); +} + +static bool octeon_zuc_is_shared_dmfc2_sel(uint32_t sel) +{ + switch (sel) { + case OCTEON_COP2_SEL_HSH_DATW0 ... OCTEON_COP2_SEL_HSH_DATW11: + case OCTEON_COP2_SEL_HSH_IVW0 ... OCTEON_COP2_SEL_HSH_IVW3: + case OCTEON_COP2_SEL_SHA3_DAT15_READ: + case OCTEON_COP2_SEL_SHA3_DAT24: + return true; + default: + return false; + } +} + +static bool octeon_zuc_is_shared_dmtc2_sel(uint32_t sel) +{ + switch (sel) { + case OCTEON_COP2_SEL_HSH_DATW0 ... OCTEON_COP2_SEL_HSH_DATW11: + case OCTEON_COP2_SEL_HSH_IVW0 ... OCTEON_COP2_SEL_HSH_IVW3: + case OCTEON_COP2_SEL_SHA3_DAT15_WRITE: + case OCTEON_COP2_SEL_SHA3_DAT24: + return true; + default: + return false; + } +} + static const uint8_t octeon_snow3g_sr[256] =3D { 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, @@ -1527,6 +1798,39 @@ uint64_t helper_octeon_cop2_dmfc2(CPUMIPSState *env,= uint32_t sel) MIPSOcteonCryptoState *crypto =3D &env->octeon_crypto; int sha3_pos; =20 + if (crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_ZUC && + octeon_zuc_is_shared_dmfc2_sel(sel)) { + if (sel >=3D OCTEON_COP2_SEL_HSH_DATW0 && + sel <=3D OCTEON_COP2_SEL_HSH_DATW7) { + unsigned int idx =3D sel - OCTEON_COP2_SEL_HSH_DATW0; + + return octeon_zuc_pack_pair(crypto->zuc_lfsr[idx * 2], + crypto->zuc_lfsr[idx * 2 + 1]); + } + switch (sel) { + case OCTEON_COP2_SEL_HSH_DATW8: + return octeon_zuc_pack_pair(crypto->zuc_fsm[0], crypto->zuc_fs= m[1]); + case OCTEON_COP2_SEL_HSH_DATW9: + case OCTEON_COP2_SEL_HSH_IVW0: + return octeon_zuc_pack_pair(crypto->zuc_window[0], + crypto->zuc_window[1]); + case OCTEON_COP2_SEL_HSH_DATW10: + return crypto->zuc_window[2]; + case OCTEON_COP2_SEL_HSH_DATW11: + case OCTEON_COP2_SEL_HSH_IVW3: + return crypto->zuc_tresult; + case OCTEON_COP2_SEL_SHA3_DAT15_READ: + case OCTEON_COP2_SEL_SHA3_DAT24: + return 0; + case OCTEON_COP2_SEL_HSH_IVW1: + return crypto->zuc_fsm[0]; + case OCTEON_COP2_SEL_HSH_IVW2: + return crypto->zuc_fsm[1]; + default: + g_assert_not_reached(); + } + } + if (crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_SNOW3G) { if (sel >=3D OCTEON_COP2_SEL_SNOW3G_LFSR0 && sel <=3D OCTEON_COP2_SEL_SNOW3G_LFSR7) { @@ -1645,6 +1949,49 @@ void helper_octeon_cop2_dmtc2(CPUMIPSState *env, uin= t64_t value, uint64_t q =3D (uint64_t)value; int sha3_pos; =20 + if (crypto->shared_mode =3D=3D OCTEON_SHARED_MODE_ZUC && + octeon_zuc_is_shared_dmtc2_sel(sel)) { + octeon_store_shared_hash_dat(crypto, sel, q); + + if (sel >=3D OCTEON_COP2_SEL_HSH_DATW0 && + sel <=3D OCTEON_COP2_SEL_HSH_DATW7) { + unsigned int idx =3D sel - OCTEON_COP2_SEL_HSH_DATW0; + + crypto->zuc_lfsr[idx * 2] =3D (q >> 32) & 0x7fffffffU; + crypto->zuc_lfsr[idx * 2 + 1] =3D q & 0x7fffffffU; + return; + } + switch (sel) { + case OCTEON_COP2_SEL_HSH_DATW8: + crypto->zuc_fsm[0] =3D q >> 32; + crypto->zuc_fsm[1] =3D q; + return; + case OCTEON_COP2_SEL_HSH_DATW9: + case OCTEON_COP2_SEL_HSH_IVW0: + crypto->zuc_window[0] =3D q >> 32; + crypto->zuc_window[1] =3D q; + return; + case OCTEON_COP2_SEL_HSH_DATW10: + crypto->zuc_window[2] =3D q; + return; + case OCTEON_COP2_SEL_HSH_DATW11: + case OCTEON_COP2_SEL_HSH_IVW3: + crypto->zuc_tresult =3D q; + return; + case OCTEON_COP2_SEL_SHA3_DAT15_WRITE: + case OCTEON_COP2_SEL_SHA3_DAT24: + return; + case OCTEON_COP2_SEL_HSH_IVW1: + crypto->zuc_fsm[0] =3D q; + return; + case OCTEON_COP2_SEL_HSH_IVW2: + crypto->zuc_fsm[1] =3D q; + return; + default: + g_assert_not_reached(); + } + } + switch (sel) { case OCTEON_COP2_SEL_3DES_KEY0: case OCTEON_COP2_SEL_3DES_KEY1: @@ -1859,6 +2206,12 @@ void helper_octeon_cop2_dmtc2(CPUMIPSState *env, uin= t64_t value, octeon_set_shared_mode(crypto, OCTEON_SHARED_MODE_SHA3); octeon_sha3_permute(crypto); break; + case OCTEON_COP2_SEL_ZUC_START: + octeon_zuc_start(crypto, q); + break; + case OCTEON_COP2_SEL_ZUC_MORE: + octeon_zuc_more(crypto, q); + break; case OCTEON_COP2_SEL_GFM_XORMUL1_REFLECT: octeon_gfm_mul_reflect(crypto, q); break; diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index 278b2ed991..a191c0277b 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -194,6 +194,8 @@ static bool octeon_cop2_is_supported_dmtc2(uint16_t sel) case OCTEON_COP2_SEL_SNOW3G_MORE: case OCTEON_COP2_SEL_HSH_STARTSHA256: case OCTEON_COP2_SEL_SHA3_STARTOP: + case OCTEON_COP2_SEL_ZUC_START: + case OCTEON_COP2_SEL_ZUC_MORE: case OCTEON_COP2_SEL_HSH_STARTSHA1: case OCTEON_COP2_SEL_GFM_XORMUL1_REFLECT: case OCTEON_COP2_SEL_HSH_STARTSHA512: --=20 2.54.0 From nobody Mon May 25 20:32:02 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=1778253278; cv=none; d=zohomail.com; s=zohoarc; b=GD0wlDXuVoofmxtinOvJeRhqQKjhhHUaf1No9PEaQ2wIpxrRd9/EQb4ChR9gAH7vJ/qnjIxBx1vJzPNEfQg36c2+YhkLooED/TxmH25AuIpU9b6u6B2yFV8XbEPRhVDleuw3th0mBa/q+JvoTaalnEAtkrIFEyFwt8AynB88nFE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253278; 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=Rc4B/y+c21CGzIwE0VqbMqvf7sLrWfxlXV8mAZySCYU=; b=KcwJAHGg7sL9+bdCDxs48YuV4NNQFef5FmNv/ropzN1OqAVfjYgOORW+9Z8mI8k+1ECWhDh/eoMou5LnFwjHi+15gnDlXjWR/GmVrrAssXPK3GQthGsoHt5MOycOfwNYhlo6jGCAgrdeoDp09uj6/Ik1rFRkUTmxYbRYIRGiKm8= 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 1778253278874405.058183727155; Fri, 8 May 2026 08:14:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMuD-0004Ct-Dj; Fri, 08 May 2026 11:14:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wLMtQ-0002ji-5o for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:32 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtN-0001nG-8E for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:31 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-434d9df81a5so1215290fac.1 for ; Fri, 08 May 2026 08:13:28 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253208; x=1778858008; 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=Rc4B/y+c21CGzIwE0VqbMqvf7sLrWfxlXV8mAZySCYU=; b=dKq8wa38Z80ajbuDP1mfnBPcQghUDrmj+mdofI21bWi+BvS9xloAfr+/crcMbtgVNa lHT9LwzwqD9kXb8/ohgtZg1AZfuHLn/oZBxLsroyq3n61JLHL4xuhnjEBC1l735Ec58d se9gR3eHaLyrcVrZRuCiZCx1drixfHxjbVMokbXkICTVcEjgR0JD/J6Oh9jDK4pX8SVS WlpYZN9c/87wdpdl4gSlXwKWgDoGaHcGzNRdVjnu02aWhIEHWsy9iGe/TmmhpFmWiIzb lP6q5TrYbjLe51a/cYhnhJZG4a+wcbelf4YXYluTg7GkjqSuE736N+JBCdMJTIjB4zec 6qpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253208; x=1778858008; 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=Rc4B/y+c21CGzIwE0VqbMqvf7sLrWfxlXV8mAZySCYU=; b=LtNkJWwAUhzweY3twmC5EtfOOXSbjsMbCfHWi72kqawpiUUpCAUEWe38HlSu2BStq6 ezFTBxujN2itTmeijnnugOgtbZ2Yn872SbFQ7b7ZvJhET7rzEBb+DPQq2ZRLV+h354BF DhczDi10lFrADIUEL8zBHvfkSoofae1KnPvBSfmAlsYn3KKwp0Y9AYjxxWBt/7UV2iTa IiD5af9E5HGKXYqX7JhHElD0qY7pNqKBZxXKFqgYb8AbwdErOpnwwlcHkiyoNNCNcrkt Gah0WOXR1WRzVpsydggV32nuq4WDMxZNib3ohd13kjgMuLmlgQKi9eUyY4qXXx+PcL8w mZSA== X-Gm-Message-State: AOJu0YwOi7pNrefXNt3D8Y9EG9Pwc00VfcS/xULtRwxU3hE1NR9i3OCU w2ABVphxjeE7dgCJjOeHTaGODTNzXdIz5sKsl/fMhZSfXFwEn/ja3yKCscI0pQ== X-Gm-Gg: AeBDievHJ7p/o0zv3vtqR0Rp4Orh4J1k/RBPOmOLeaWKtNabRc6QAk4bfk7c5/BHpB4 uSdnnBqud8kahum9GlP0lo9+Z+JcKNI36pmxdQLaQzL7YFi5jVeHocfRgt7tbK/BgPEZqUy6tlW VTR242SnTcqi31534Ja9YUryBGH/shZeKvuY9SmzPTF7nRezbhSFlnyaj+nfFZCGkvgthFtdupy to0WmT+xNZ7HmjSdPWc7o/OSi6cLFLsXvUlFGmy7j9zwKiCCD4uDWA9tCGMhaFcZLHoa0RQPqRs 9GylPVW3yVFYbF4bpSx2dxZLgEgTELvOsoQWq54Z3h2cvw+DO67qK6dto6hHltjRrh5tir/6QVE eGPSSAcmWDoDjolxfvPFO5X4PFXO/luPeL78Jk/Bbw8ba7IMV9LzCKBOmAXUHgMO/Qk58Qy6FDR zbafcdpCNIyarsPoOdTZdlHUnm8qCbo52+m5sfqzuMF0yVem0DcQj2ysNR6TCVCogcMe1XtWczs glxU5XbV8H9wpxk45DDoYpADyqKGJI+gsH19MaeU/ZYlxv/QElVE2OF3KQYEmOrgoV/2L0FdKJ2 uk1O5xkB9ozzr+IJNn2KIxc+0NqDhbAQ7Ono5+9WJgcFkyxapdk+FU1pHCPagmL+DymxVqUB0n+ BC+hYAQ== X-Received: by 2002:a05:6871:3312:b0:3f1:6d93:4386 with SMTP id 586e51a60fabf-434f68b18e5mr8645196fac.1.1778253207797; Fri, 08 May 2026 08:13:27 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:30 -0600 Subject: [PATCH v3 30/32] target/mips: add Octeon Camellia crypto support MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-30-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier X-Mailer: b4 0.15.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::29; envelope-from=james.hilliard1@gmail.com; helo=mail-oa1-x29.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778253279629158500 Add the Octeon Camellia ROUND, FL, and FLINV selectors and model the round engine that reuses the AES RESULT/RESINP bank. Implement the Camellia F-function and FL layers directly from RFC 3713 so guest-managed key schedules can drive the engine through the hardware interface. Signed-off-by: James Hilliard --- 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) --- target/mips/cpu.h | 9 +++ target/mips/tcg/octeon_crypto.c | 120 +++++++++++++++++++++++++++++++++= ++++ target/mips/tcg/octeon_translate.c | 3 + 3 files changed, 132 insertions(+) diff --git a/target/mips/cpu.h b/target/mips/cpu.h index f97e50a84a..4848125992 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -587,6 +587,14 @@ typedef enum MIPSOcteonCop2Sel { OCTEON_COP2_SEL_AES_DEC0 =3D 0x010e, OCTEON_COP2_SEL_AES_KEYLENGTH =3D 0x0110, OCTEON_COP2_SEL_AES_DAT0 =3D 0x0111, + /* + * Camellia reuses the AES RESULT/RESINP bank and adds per-round and + * diffusion-layer selectors for the guest-managed key schedule. + */ + OCTEON_COP2_SEL_CAMELLIA_RESINP0 =3D OCTEON_COP2_SEL_AES_RESULT0, + OCTEON_COP2_SEL_CAMELLIA_RESINP1 =3D OCTEON_COP2_SEL_AES_RESULT1, + OCTEON_COP2_SEL_CAMELLIA_FL =3D 0x0115, + OCTEON_COP2_SEL_CAMELLIA_FLINV =3D 0x0116, /* * SMS4 reuses the AES result/input, IV, and key banks and only adds * operation selectors for ECB/CBC encrypt/decrypt. @@ -688,6 +696,7 @@ typedef enum MIPSOcteonCop2Sel { OCTEON_COP2_SEL_AES_ENC1 =3D 0x310b, OCTEON_COP2_SEL_AES_DEC_CBC1 =3D 0x310d, OCTEON_COP2_SEL_AES_DEC1 =3D 0x310f, + OCTEON_COP2_SEL_CAMELLIA_ROUND =3D 0x3114, OCTEON_COP2_SEL_SMS4_ENC_CBC1 =3D 0x3119, OCTEON_COP2_SEL_SMS4_ENC1 =3D 0x311b, OCTEON_COP2_SEL_SMS4_DEC_CBC1 =3D 0x311d, diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index 3ee56ef4c0..9c5f19f41d 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -1650,6 +1650,117 @@ static void octeon_aes_store_block(uint64_t regs[2]= , const uint8_t *block) regs[1] =3D ldq_be_p(block + 8); } =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_result[0]; + uint64_t right =3D crypto->aes_result[1]; + + crypto->aes_result[0] =3D right ^ camellia_f(left, key); + crypto->aes_result[1] =3D left; +} + +static void octeon_camellia_fl_layer(MIPSOcteonCryptoState *crypto, + uint64_t key, bool inverse) +{ + uint64_t state =3D crypto->aes_result[inverse ? 1 : 0]; + + crypto->aes_result[inverse ? 1 : 0] =3D inverse ? + camellia_flinv(state, key) : + camellia_fl(state, key); +} + static void octeon_sms4_crypt_common(MIPSOcteonCryptoState *crypto, bool encrypt, bool cbc) { @@ -2046,6 +2157,12 @@ void helper_octeon_cop2_dmtc2(CPUMIPSState *env, uin= t64_t value, case OCTEON_COP2_SEL_AES_KEYLENGTH: crypto->aes_keylen =3D q; break; + case OCTEON_COP2_SEL_CAMELLIA_FL: + octeon_camellia_fl_layer(crypto, q, false); + break; + case OCTEON_COP2_SEL_CAMELLIA_FLINV: + octeon_camellia_fl_layer(crypto, q, true); + break; case OCTEON_COP2_SEL_CRC_WRITE_POLYNOMIAL: case OCTEON_COP2_SEL_CRC_WRITE_POLYNOMIAL_REFLECT: crypto->crc_poly =3D q; @@ -2231,6 +2348,9 @@ void helper_octeon_cop2_dmtc2(CPUMIPSState *env, uint= 64_t value, crypto->aes_input[1] =3D q; octeon_aes_decrypt_common(crypto, false); break; + case OCTEON_COP2_SEL_CAMELLIA_ROUND: + octeon_camellia_round(crypto, q); + break; case OCTEON_COP2_SEL_SMS4_ENC_CBC1: crypto->aes_input[1] =3D q; octeon_sms4_crypt_common(crypto, true, true); diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index a191c0277b..ce3c7948e0 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -109,6 +109,8 @@ static bool octeon_cop2_is_supported_dmtc2(uint16_t sel) case OCTEON_COP2_SEL_AES_DEC_CBC0: case OCTEON_COP2_SEL_AES_DEC0: case OCTEON_COP2_SEL_AES_KEYLENGTH: + case OCTEON_COP2_SEL_CAMELLIA_FL: + case OCTEON_COP2_SEL_CAMELLIA_FLINV: case OCTEON_COP2_SEL_CRC_WRITE_POLYNOMIAL: case OCTEON_COP2_SEL_CRC_IV: case OCTEON_COP2_SEL_CRC_WRITE_LEN: @@ -204,6 +206,7 @@ static bool octeon_cop2_is_supported_dmtc2(uint16_t sel) case OCTEON_COP2_SEL_AES_ENC1: case OCTEON_COP2_SEL_AES_DEC_CBC1: case OCTEON_COP2_SEL_AES_DEC1: + case OCTEON_COP2_SEL_CAMELLIA_ROUND: case OCTEON_COP2_SEL_SMS4_ENC_CBC1: case OCTEON_COP2_SEL_SMS4_ENC1: case OCTEON_COP2_SEL_SMS4_DEC_CBC1: --=20 2.54.0 From nobody Mon May 25 20:32:02 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=1778253280; cv=none; d=zohomail.com; s=zohoarc; b=AFTyqcaazbwzGLpoR0lWEe81hbTyuCTbT7YkbasqaZkWqI5JbOLX2Df1XbHFIwUGZkUXRAuMxldIwTxWO6vTfAibDdLHbT1w1DuRucTZhCnBgqwTxdPMQ2U2n/4tZPfxf6oME0jNnxJ1CF7A7QhNCNd4vbJwBmEjsB8zPRSXszA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253280; 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=sZzgJ/wJZ1r3XOAnw9+OKtdkI2ICRbzmAKYSbDIuZLw=; b=UN+D4RRydg0XWJLMI8UBD888dXct4zOuGc5BWmOlCUPbgtXTNRxAjgnuYysESjlmRrw9mfs2TvBPYK91ix+cG2vstseLkROHT+5bdsZ0bHbch4traZKZATJa3QNEmJjswCBJAgiSWxkIcWx3dyLPo5pF76Y04FozFlLOub5+L3A= 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 1778253280762106.51429612772301; Fri, 8 May 2026 08:14:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMty-0003Xe-Bd; Fri, 08 May 2026 11:14: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 1wLMtS-0002lq-Hi for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:36 -0400 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtO-0001nc-CA for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:32 -0400 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-6966e1a0b91so1321132eaf.3 for ; Fri, 08 May 2026 08:13:30 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253209; x=1778858009; 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=sZzgJ/wJZ1r3XOAnw9+OKtdkI2ICRbzmAKYSbDIuZLw=; b=QYG7S4bd2Z8qW5aoeIyN2qDzg7+44ME79CnPPi2jSpGQBq9Rd/DESHY8t7a9+9gWv2 clsK8qkPiNp0T1WlIbNfjYE2nLEAKunz5XTQT7I+l59x7iLmBdcWr6OCPg6twjex8MGe gPHKCFeQvnDWbGYM0ijqwCLLSZh04RyA8OH9cKljIc5liGHA6sDEofAFLh5Ras/lu51M KFyHgah+L+ApQorLA1ql0IrU4BXZDI/1No2MYNlWtFacb4E7wcE0Yba2SUyA66IweiQ3 bDeEpExOeQewDxbbisJiUNCjH/wT1csOd6ker8xD3UNw6n1zWSfIVV4wa8V+MZqwzxnY vugg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253209; x=1778858009; 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=sZzgJ/wJZ1r3XOAnw9+OKtdkI2ICRbzmAKYSbDIuZLw=; b=PMYOvB3qj5eIcyJEtxA0F5vdL62AfYpxgskFb/TQt/wkctJ2j28vjm+QJKaMaXc2XB aGUDIRcT8CwK4nni1pRfQcqf71lBm9UwAQkhXcidB6Ox8vP6TgVyfu9iloHNNoT2Xr6q y2ddBTzY/dZwwllxNn9yElUiEDQw0Vncto/UeVpkipKX/668d7zIU7Sh5GUWn4+DyGFw qp3IeDdJ4OS4BYwh/9VUKds5MldjzCWRbCCppcw2odXGTw20MS0GsJ+oj7HqHF2nqVO7 ciAXVh1yoQqSX3JPiBbOs8sdwHCRp3lBgC/6YSB7MQgi4RO5d1KGa5f+s4usWZkcOb4P UWLg== X-Gm-Message-State: AOJu0Yw2Yp6WaZhPkQ7JXjt5Jqfu0kCSCMhT1WDpSBEYUaF4FbzL2Ro4 SqL5hAfHekv83KZn+2yo7X05ca3lIo9N0PKgg0UjAjTo1iFzt4ZSO/6qIkLe6w== X-Gm-Gg: AeBDiesXAWPlCcqZPNkjvtRYQwPhVkG2u67ngPFUNFuoormY4sLSYQX9ZG1OGchMBK9 BSA2mbxXAHnQeBEOSXFH3Wsw3KN6RlHNgTZFbtjITFCIqEOlENxug4/mHlGVOuhX0Dz9Ad7tXag 91RCJktciw+PjiCiecPPVuUofguIsvIKdB+VAfE3A70dEtSXF8edWC21YavJDMTuyShrqqNfzWH 5PLRvPELBCBBjt6b7smAqFx0GhTY9wGBJSzpg5N8IfSyrm1M+EqbiB/m68y2SfgbY1MASxfoHVb l76YTMo78dLRO1Y1i7kChdmVG2LjVl2ZvMPmMKj/DfTQ1TvtgXgy1j8+IQbomNGRGNd+UtLNzT9 aWzX19dxSMqPjzQMPYSxq7dx7iYlL+6XW5LPbmRUfVOJ5onSrf91/EtXjfaxJEck1RY9igiCTHs M/4DeIc75mps03DsM7pZqJhBHx+sJ5rfLGpW0fOwCtGZTH4CM7YDu1sRSqyC709aF0ABzKU28ig 0BDJhOt0ldm656aeB3lw23DsDY1yoHguCd96yTv2w3u4YJlRXl75jQbqRS3HyqD8QlsdKJtdq+u anMnP3Ynvw/ZvFmFdQTMrVuxx9KzTHVa61/laydi65z9R0H6JXQEKdrBM6Xo9kD/PIVDluo= X-Received: by 2002:a05:6820:c8c:b0:696:8098:b0d9 with SMTP id 006d021491bc7-69998d0fc66mr7375308eaf.38.1778253208829; Fri, 08 May 2026 08:13:28 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:31 -0600 Subject: [PATCH v3 31/32] target/mips: add Octeon CHORD and LLM COP2 support MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-mips-octeon-missing-insns-v2-v3-31-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier 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::c33; envelope-from=james.hilliard1@gmail.com; helo=mail-oo1-xc33.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: 1778253281704158501 Add the Octeon CHORD hardware register access path and the LLM narrow/wide read and write windows. Model both CHORD access forms, including the rdhwr $30 path and the legacy dmfc2 alias, and implement sparse backing storage for the two LLM sets so user-mode code can save, restore, and probe the architectural state. Signed-off-by: James Hilliard --- 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) --- target/mips/cpu.c | 67 +++++++++++++++++++++++++++++++++++ target/mips/cpu.h | 20 +++++++++++ target/mips/helper.h | 1 + target/mips/internal.h | 3 ++ target/mips/system/machine.c | 67 +++++++++++++++++++++++++++++++++++ target/mips/tcg/octeon_crypto.c | 72 ++++++++++++++++++++++++++++++++++= ++++ target/mips/tcg/octeon_translate.c | 13 +++++++ target/mips/tcg/op_helper.c | 6 ++++ target/mips/tcg/translate.c | 8 +++++ 9 files changed, 257 insertions(+) diff --git a/target/mips/cpu.c b/target/mips/cpu.c index 19001d829c..d439b14f7b 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->llm_narrow) { + q_tree_destroy(crypto->llm_narrow); + crypto->llm_narrow =3D NULL; + } + if (crypto->llm_wide) { + q_tree_destroy(crypto->llm_wide); + crypto->llm_wide =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); @@ -648,6 +714,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 4848125992..5764fb9490 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 @@ -609,6 +610,21 @@ typedef enum MIPSOcteonCop2Sel { OCTEON_COP2_SEL_SMS4_ENC0 =3D OCTEON_COP2_SEL_AES_ENC0, OCTEON_COP2_SEL_SMS4_DEC_CBC0 =3D OCTEON_COP2_SEL_AES_DEC_CBC0, OCTEON_COP2_SEL_SMS4_DEC0 =3D OCTEON_COP2_SEL_AES_DEC0, + /* + * Selector 0x0400 is the narrow LLM read selector and is also used as= a + * DMFC2 alias for the CHORD POW tag-switch completion bit. + */ + OCTEON_COP2_SEL_LLM_READ_ADDR0 =3D 0x0400, + OCTEON_COP2_SEL_CHORD =3D OCTEON_COP2_SEL_LLM_READ_ADDR0, + OCTEON_COP2_SEL_LLM_WRITE_ADDR_INTERNAL0 =3D 0x0401, + OCTEON_COP2_SEL_LLM_DATA0 =3D 0x0402, + OCTEON_COP2_SEL_LLM_READ64_ADDR0 =3D 0x0404, + OCTEON_COP2_SEL_LLM_WRITE64_ADDR_INTERNAL0 =3D 0x0405, + OCTEON_COP2_SEL_LLM_READ_ADDR1 =3D 0x0408, + OCTEON_COP2_SEL_LLM_WRITE_ADDR_INTERNAL1 =3D 0x0409, + OCTEON_COP2_SEL_LLM_DATA1 =3D 0x040a, + OCTEON_COP2_SEL_LLM_READ64_ADDR1 =3D 0x040c, + OCTEON_COP2_SEL_LLM_WRITE64_ADDR_INTERNAL1 =3D 0x040d, OCTEON_COP2_SEL_CRC_POLYNOMIAL =3D 0x0200, OCTEON_COP2_SEL_CRC_IV =3D 0x0201, OCTEON_COP2_SEL_CRC_LEN =3D 0x0202, @@ -746,6 +762,10 @@ typedef struct MIPSOcteonCryptoState { uint32_t zuc_lfsr[16]; uint32_t zuc_window[3]; uint32_t zuc_tresult; + uint64_t llm_data[2]; + uint64_t chord; + QTree *llm_narrow; + QTree *llm_wide; } MIPSOcteonCryptoState; =20 typedef struct CPUArchState { diff --git a/target/mips/helper.h b/target/mips/helper.h index 93a5a497d0..5e63572838 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -200,6 +200,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 23e1ada185..026dc0ea4f 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 c9d477896c..912993435f 100644 --- a/target/mips/system/machine.c +++ b/target/mips/system/machine.c @@ -131,6 +131,69 @@ static const VMStateDescription vmstate_octeon_multipl= ier_tc =3D { } }; =20 +typedef struct OcteonLLMTreePutData { + QEMUFile *f; +} OcteonLLMTreePutData; + +static gboolean put_octeon_llm_tree_entry(gpointer key, gpointer value, + gpointer user_data) +{ + OcteonLLMTreePutData *data =3D user_data; + + qemu_put_be64(data->f, *(uint64_t *)key); + qemu_put_be64(data->f, *(uint64_t *)value); + return false; +} + +static int put_octeon_llm_tree(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmde= sc) +{ + QTree *tree =3D *(QTree **)pv; + OcteonLLMTreePutData data =3D { .f =3D f }; + uint32_t nnodes =3D tree ? q_tree_nnodes(tree) : 0; + + qemu_put_be32(f, nnodes); + if (tree) { + q_tree_foreach(tree, put_octeon_llm_tree_entry, &data); + } + + return 0; +} + +static int get_octeon_llm_tree(QEMUFile *f, void *pv, size_t size, + const VMStateField *field) +{ + QTree **treep =3D pv; + uint32_t nnodes =3D qemu_get_be32(f); + + if (*treep) { + q_tree_destroy(*treep); + } + *treep =3D mips_octeon_llm_tree_new(); + + for (uint32_t i =3D 0; i < nnodes; i++) { + uint64_t addr =3D qemu_get_be64(f); + uint64_t value =3D qemu_get_be64(f); + + mips_octeon_llm_store(treep, addr, value); + } + + return 0; +} + +static const VMStateInfo vmstate_info_octeon_llm_tree =3D { + .name =3D "octeon_llm_tree", + .get =3D get_octeon_llm_tree, + .put =3D put_octeon_llm_tree, +}; + +#define VMSTATE_OCTEON_LLM_TREE(_f, _s) { \ + .name =3D stringify(_f), \ + .version_id =3D 1, \ + .info =3D &vmstate_info_octeon_llm_tree, \ + .offset =3D vmstate_offset_pointer(_s, _f, QTree), \ +} + /* MVP state */ =20 static const VMStateDescription vmstate_mvp =3D { @@ -316,6 +379,10 @@ static const VMStateDescription mips_vmstate_octeon_cr= ypto =3D { VMSTATE_UINT32_ARRAY(env.octeon_crypto.zuc_lfsr, MIPSCPU, 16), VMSTATE_UINT32_ARRAY(env.octeon_crypto.zuc_window, MIPSCPU, 3), VMSTATE_UINT32(env.octeon_crypto.zuc_tresult, MIPSCPU), + VMSTATE_UINT64_ARRAY(env.octeon_crypto.llm_data, MIPSCPU, 2), + VMSTATE_UINT64(env.octeon_crypto.chord, MIPSCPU), + VMSTATE_OCTEON_LLM_TREE(env.octeon_crypto.llm_narrow, MIPSCPU), + VMSTATE_OCTEON_LLM_TREE(env.octeon_crypto.llm_wide, MIPSCPU), VMSTATE_END_OF_LIST() } }; diff --git a/target/mips/tcg/octeon_crypto.c b/target/mips/tcg/octeon_crypt= o.c index 9c5f19f41d..3369993fc9 100644 --- a/target/mips/tcg/octeon_crypto.c +++ b/target/mips/tcg/octeon_crypto.c @@ -16,6 +16,42 @@ #include "qemu/bitops.h" #include "qemu/host-utils.h" =20 +#define OCTEON_LLM_NARROW_MASK ((1ULL << 36) - 1) + +static uint64_t octeon_llm_pack_narrow(uint64_t value) +{ + value &=3D OCTEON_LLM_NARROW_MASK; + return value | ((uint64_t)(ctpop64(value) & 1) << 36); +} + +static void octeon_llm_read(MIPSOcteonCryptoState *crypto, unsigned int se= t, + uint64_t addr, bool wide) +{ + uint64_t value; + + if (wide) { + value =3D mips_octeon_llm_load(crypto->llm_wide, addr); + } else { + value =3D octeon_llm_pack_narrow( + mips_octeon_llm_load(crypto->llm_narrow, 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->llm_wide, addr, value); + } else { + mips_octeon_llm_store(&crypto->llm_narrow, addr, + value & OCTEON_LLM_NARROW_MASK); + } +} + static inline void octeon_set_shared_mode(MIPSOcteonCryptoState *crypto, MIPSOcteonSharedMode mode) { @@ -2001,6 +2037,12 @@ uint64_t helper_octeon_cop2_dmfc2(CPUMIPSState *env,= uint32_t sel) return crypto->crc_len; case OCTEON_COP2_SEL_CRC_IV_REFLECT: return octeon_crc_reflect32_by_byte(crypto->crc_iv); + case OCTEON_COP2_SEL_CHORD: + return crypto->chord; + case OCTEON_COP2_SEL_LLM_DATA0: + return crypto->llm_data[0]; + case OCTEON_COP2_SEL_LLM_DATA1: + return crypto->llm_data[1]; case OCTEON_COP2_SEL_HSH_DATW0: case OCTEON_COP2_SEL_HSH_DATW1: case OCTEON_COP2_SEL_HSH_DATW2: @@ -2157,6 +2199,36 @@ void helper_octeon_cop2_dmtc2(CPUMIPSState *env, uin= t64_t value, case OCTEON_COP2_SEL_AES_KEYLENGTH: crypto->aes_keylen =3D q; break; + case OCTEON_COP2_SEL_LLM_READ_ADDR0: + octeon_llm_read(crypto, 0, q, false); + break; + case OCTEON_COP2_SEL_LLM_WRITE_ADDR_INTERNAL0: + octeon_llm_write(crypto, 0, q, false); + break; + case OCTEON_COP2_SEL_LLM_DATA0: + crypto->llm_data[0] =3D q; + break; + case OCTEON_COP2_SEL_LLM_READ64_ADDR0: + octeon_llm_read(crypto, 0, q, true); + break; + case OCTEON_COP2_SEL_LLM_WRITE64_ADDR_INTERNAL0: + octeon_llm_write(crypto, 0, q, true); + break; + case OCTEON_COP2_SEL_LLM_READ_ADDR1: + octeon_llm_read(crypto, 1, q, false); + break; + case OCTEON_COP2_SEL_LLM_WRITE_ADDR_INTERNAL1: + octeon_llm_write(crypto, 1, q, false); + break; + case OCTEON_COP2_SEL_LLM_DATA1: + crypto->llm_data[1] =3D q; + break; + case OCTEON_COP2_SEL_LLM_READ64_ADDR1: + octeon_llm_read(crypto, 1, q, true); + break; + case OCTEON_COP2_SEL_LLM_WRITE64_ADDR_INTERNAL1: + octeon_llm_write(crypto, 1, q, true); + break; case OCTEON_COP2_SEL_CAMELLIA_FL: octeon_camellia_fl_layer(crypto, q, false); break; diff --git a/target/mips/tcg/octeon_translate.c b/target/mips/tcg/octeon_tr= anslate.c index ce3c7948e0..c7e9bf0840 100644 --- a/target/mips/tcg/octeon_translate.c +++ b/target/mips/tcg/octeon_translate.c @@ -76,6 +76,9 @@ static bool octeon_cop2_is_supported_dmfc2(uint16_t sel) case OCTEON_COP2_SEL_GFM_RESINP0: case OCTEON_COP2_SEL_GFM_RESINP1: case OCTEON_COP2_SEL_GFM_POLY: + case OCTEON_COP2_SEL_CHORD: + case OCTEON_COP2_SEL_LLM_DATA0: + case OCTEON_COP2_SEL_LLM_DATA1: return true; default: return false; @@ -111,6 +114,16 @@ static bool octeon_cop2_is_supported_dmtc2(uint16_t se= l) case OCTEON_COP2_SEL_AES_KEYLENGTH: case OCTEON_COP2_SEL_CAMELLIA_FL: case OCTEON_COP2_SEL_CAMELLIA_FLINV: + case OCTEON_COP2_SEL_LLM_READ_ADDR0: + case OCTEON_COP2_SEL_LLM_WRITE_ADDR_INTERNAL0: + case OCTEON_COP2_SEL_LLM_DATA0: + case OCTEON_COP2_SEL_LLM_READ64_ADDR0: + case OCTEON_COP2_SEL_LLM_WRITE64_ADDR_INTERNAL0: + case OCTEON_COP2_SEL_LLM_READ_ADDR1: + case OCTEON_COP2_SEL_LLM_WRITE_ADDR_INTERNAL1: + case OCTEON_COP2_SEL_LLM_DATA1: + case OCTEON_COP2_SEL_LLM_READ64_ADDR1: + case OCTEON_COP2_SEL_LLM_WRITE64_ADDR_INTERNAL1: case OCTEON_COP2_SEL_CRC_WRITE_POLYNOMIAL: case OCTEON_COP2_SEL_CRC_IV: case OCTEON_COP2_SEL_CRC_WRITE_LEN: diff --git a/target/mips/tcg/op_helper.c b/target/mips/tcg/op_helper.c index e4107a304c..2adb4de680 100644 --- a/target/mips/tcg/op_helper.c +++ b/target/mips/tcg/op_helper.c @@ -349,6 +349,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 5c19adbbcf..65bca8a987 100644 --- a/target/mips/tcg/translate.c +++ b/target/mips/tcg/translate.c @@ -10923,6 +10923,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 Mon May 25 20:32:02 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=1778253278; cv=none; d=zohomail.com; s=zohoarc; b=A7T3od7YaCYtjD55B9pHPVE9mmuNdG9TLYaZWPxd34plM0lcG4dijsDzNFgWhsWrQotRRmQpXMtbR4uc/honwjgo1PIrhyolrpuu4mEsIArAZWwtV2Dr+fqF54pifhtrQdjfPY5Andahxwum3XvNxo7tm2fLsrKAcXFcDShd/4A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778253278; 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=hJekX8dH52yMvYykB5HOFELCbhNNSoNRaiTZ7e0Y8tM=; b=M+5fv/MFA4LG4TlY61S5+U7Aw1WOYMtVNQVUOy2ISeYcwZVo3Bu7vJjb4Fl5s3EaJllU1SQe8yb94uqYMju7lwW2rXY3VrFxtEWFGt1P/NCO3K7SPE9lIxTjvfpYxRXcIYLHpT85ZrBEoLhNnrOdzuY8KkxWCu5uc2JJALLgCm8= 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 1778253278389623.8350297974025; Fri, 8 May 2026 08:14:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wLMuH-0004f8-1Z; Fri, 08 May 2026 11:14:25 -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 1wLMtS-0002lr-Hl for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:36 -0400 Received: from mail-oi1-x236.google.com ([2607:f8b0:4864:20::236]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wLMtP-0001nw-96 for qemu-devel@nongnu.org; Fri, 08 May 2026 11:13:32 -0400 Received: by mail-oi1-x236.google.com with SMTP id 5614622812f47-47c941f7213so1290160b6e.1 for ; Fri, 08 May 2026 08:13:30 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa (71-218-113-237.hlrn.qwest.net. [71.218.113.237]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43557109b7dsm1897904fac.5.2026.05.08.08.13.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 08:13:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778253210; x=1778858010; 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=hJekX8dH52yMvYykB5HOFELCbhNNSoNRaiTZ7e0Y8tM=; b=RAuleFFEjxj73QAyOKVmvHXyv+lrcIO17O0OyaDjsyTHWGf427p6+E3ZEgFuhjh9bI uw0Z7d99nisQ2JQJRr4HFjlpkl839qGEsaLkKdB18RkRsrSTVDRNyJNT71jeIQU3IQBb 2whRRst/UIJMN7AeVma4Uo5qOnQQabCyx5K857KiHZUd874VSGuIXpZflu6TXCvo1qXK iR30aPaSMSZ1bQDt8K27VDEnvVwPgioq/NKb4jBehleeF1FzMKDB8PGewoDMU6gxx38c 3Ka9Fh2UQy7XBmk/vfpwT1UnSUdJX0PVRrF+MDHOuV3acUVF2dtz7fprGdWX9YdMiTpY U/dA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778253210; x=1778858010; 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=hJekX8dH52yMvYykB5HOFELCbhNNSoNRaiTZ7e0Y8tM=; b=jhyctLKYUj+3aGK/Z6DSk6Ym0In3opT+8nBj6vF2zRnws3LwT44ArV70BOdAnV0ZPE LYyYUSIru+pYbSuHELfJNumdON6A4cAJ+/0sK3Xz9izhLLmpKIIxAVcfSRh1toYlGEuo e66K9DAFr7Fas10yJducBVtx0kC52FxevNaIsDftPjX0VOShw0oQQZYccbHPVj0Owa+M KpWdDDVxewxt8r6HHhag4r4ZQFV5pShoxYmIFqDdUuVIw5/uTGa8wvp4vO1WmAAFUxAI Z7DFsK6Sy+VvAarR33kPDQ9srtiJDs68RzNCW2CM2B4dp7GAD/xLdpd4fCWllCxPdvNm 9dvg== X-Gm-Message-State: AOJu0YxVmiA3aH4niwFjmuJl+pcYUhYSaxm2LnDqNcdVeaNE1x47fSIF EDd4mMbTkE/yrrCPRmFO8pnN+jQyMreYp5D84ZmErmfo02pszt94HJ/Bd/hwSg== X-Gm-Gg: AeBDievuD+EO7QYjiS92e07Ggj/l7Ogc6Luuw72O5t2OX6MoU+5xtLNFyGXfdBHx2d5 P9/jVf7wb93Txt13HOODLx44Y4dYId4ieLGEu1+XJySuErYiUiCaR3ffF0ZGWE82h7HqjSeziCR haT59/+1uskt37/y+2MAD4rHxnq49P0Hhc8cs7c9Y0dh+jIG7wifOEQoWCsJa0JLU4ZHHvjpeeR 3UhlfzNub8EAtr2TlCRO/2A5T8uWpRBFCB/NGsiGrHGScuf4XnDZCSlHXpJMQe23WeHSY+jPqbn EhZ46mCOorAvCewF8znG+fa1/hNj1SA0xLP36jddCeWq7qPpUo66B1f5BCLBeL0nvKgyzZhwb7W tN5oXcRVVfx/4HcslAwC58r2r5Hway9TMBI1BDXWEK+YFaaDx3ul4uWdKwiK8H9eajSSQTYRLt4 +HIN5lOHTk52CAjVQrRFXF/Ondq4oUd53fd0ONa+V7Qz6JD2r2np1cj0gEfgayMt7FzJAhhXrH/ 0KmY6qU+WPZ5qrmUDbDMa3IIwYoSHy61c/+G3e0M88meB+vEQWAHQ5/VVXJbvvuZ5BRYwmeDIj9 WxhusykQ77wX/ijomMwjxepeHvodvpgZIPxI9XzurcIMCH6aUbVfDm3TwKJmbxKIQq9MY2M= X-Received: by 2002:a05:6808:1a0c:b0:479:72dc:bb6 with SMTP id 5614622812f47-480424fc6b0mr7291184b6e.44.1778253209943; Fri, 08 May 2026 08:13:29 -0700 (PDT) From: James Hilliard Date: Fri, 08 May 2026 09:12:32 -0600 Subject: [PATCH v3 32/32] 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: <20260508-mips-octeon-missing-insns-v2-v3-32-bcbec96357d9@gmail.com> References: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> In-Reply-To: <20260508-mips-octeon-missing-insns-v2-v3-0-bcbec96357d9@gmail.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Huacai Chen , James Hilliard , Helge Deller , Pierrick Bouvier , Pierrick Bouvier 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::236; envelope-from=james.hilliard1@gmail.com; helo=mail-oi1-x236.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: 1778253280682154100 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 --- 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