From nobody Mon Sep 28 00:33:25 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=reject dis=none) header.from=sifive.com ARC-Seal: i=1; a=rsa-sha256; t=1790497638; cv=none; d=zohomail.com; s=zohoarc; b=Ol6kbuOK6ie5SVmoh/dx24x12bGiABPSCaiuzresIOH+hUGvoAzL150YqLfLEPVCNSUFuUWlZV0RR87SbFnqfoxmjor63rUhxhzzQut0pyr/u4BFhVPJfO6ydQUXAxiXeGov8AJ049T3XtKMPTd8zYPKfiiuSXso9uSIc1W6GHA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790497638; h=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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cHPPYRSlB5lQ/aBlCq+uPr2zo6HJWshht44DXCVNEH0=; b=DQtd9H4ko1xJnjFPbgT5qCarkie3JSFknwF052gFL+J9yHGXwlZS4YrDcPexMKo4Yssh5rCSlldk1q0tt5HbkT5HPI/tJovuoI7qHzJ2ELg82+nCcjBeZplqvnrntlLexXHlSt61gfPfhKZASr3BXmNcGIowPdGpQh6ORm3C4RU= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1790497638939804.2828760944419; Sun, 27 Sep 2026 01:27:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xAkCj-0003uk-21; Sun, 27 Sep 2026 04:25:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xAkCg-0003rG-IL for qemu-devel@nongnu.org; Sun, 27 Sep 2026 04:25:46 -0400 Received: from mail-pz2-x2b.google.com ([2607:f8b0:4864:3b::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xAkCe-0004ek-J7 for qemu-devel@nongnu.org; Sun, 27 Sep 2026 04:25:46 -0400 Received: by mail-pz2-x2b.google.com with SMTP id 41be03b00d2f7-cc78e1a94b8so1096454a12.0 for ; Sun, 27 Sep 2026 01:25:44 -0700 (PDT) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0b9357f64sm14498871a91.3.2026.09.27.01.25.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Sep 2026 01:25:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1790497543; x=1791102343; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=cHPPYRSlB5lQ/aBlCq+uPr2zo6HJWshht44DXCVNEH0=; b=auq4RawZrdtlOlM/ZFP67ViS4tH4TablbuE4OjNQmn9sWeYwerFyObcoJBlrL158me l1iSYbVZjQOe70zqn2kp5Ehnr1vl5seRSz6+6TTY18S9Y/H7Cn8jI4eCmCOECdUHx5gt pfeMShkAYdL7JoOQB/yeT/YT5vf8XFCFOYZ+Ijcp0ptBERfxIVUhwRj+OiKedCtR5TOk JJlMLGNw96ndA1i76Fxd6TuWDvcQvoFmyGU9ABO1zwrBO+OdTgvGBqr77jEi8hYw5sYM 7tS9s7l8slHLzByQFYCIGfm8qzJrZ0/anKzC67iQ1UyPcB/1ILBS3QM5NmChHHQLxiK8 oeWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790497543; x=1791102343; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=cHPPYRSlB5lQ/aBlCq+uPr2zo6HJWshht44DXCVNEH0=; b=PQ3XgVpSRJHz467eFyluwewwLKa9E3zAmtpIqrMOcMvpUYq4MIb4A8EPf5SPXBVLud qj4+UFw+TNPBf7P4yAdRZlLgm8/S/ACzjXKiXhS1XVjVFhq8e103Ozm/Tvbzc8l6MiHA ytdd8vmsI3Uvo+EhOg69ATxVdUmycpP3lYeA79yMhP2UBtgoxB+edYUbOBuOMBjx361J X5uh4t/XxMrjBGVX2Q6oh8VgWTKu6BYvZDxrRujBLLDw0IV/n73kAxzLFXuMmGG9/Wk1 KP3TCJuJ2DpN10GG5byEwsjU0H5qqi1UA9tvCB/UM9E0wYerNU0S28fIC2FeRuEWs4yI ksGg== X-Gm-Message-State: AFq9FYJo2iUlrXoUCzqp9b5seUpsQcEN1dXxhSGkvaqz8c6NXJ6t053K 1HxYPmgD3V7C1KyFQtj3ofAQUBjc8sWwjlgrEFiemukYOeoUozpp2SvsRl/tDF9acDFq13GiyN2 kUPU3b9GZjr8fzOw+YKYmbygGtumhPNXorumdmywNld8ts+xp+CsINtSqo/rUhNhsVw/PVEzoqa tPuKvM2Z9LDr4/4gic5CZDQcJ+RykzM/6rgNjyM8ispA== X-Gm-Gg: AYBFou14+PsSQjoYoUmKAoamBi97KMFsEwkQRLxr75F1C3VSuhTFNX2tn3jqAqn6Fgz UFD5V37k/xmTguqn0Be/O3HgpaYFimPwn8vq/FMtAV4NyPKnndFgVyWwCQqEeB6jlRd6OzuWKyh etBSMTxlo1AQ2QH1pcnscEaIkkOTCD/GuVRwSmameCosN352JRKuBG1dcy07r16SO2SUJGT4qZ3 AZsHdW8ULe4djt7ri7JZVcRiXN72nTQIOEpjkk8X89sl48UfP1qH+0XkZXai2mzbIJf5tEh9u6k Zh8aGNFg5DKPNOy6UFw5InNvaGuDvhg0EIfLCHIrNaRG1uQU7tKib2JMEt5rTqYqPZj2Vjfognc d2GaCo9/s8LoDu06SXv7egJTKPD5wP/0bDPww9en1JBFbcMyGGMiyM4j0Qx2mYDNNbc6KOEOsVk 9DK8tfzT4v9QyFtFuACiA9PFDhtw+kZYhOcRMAloyseclO1/uE5p2Nogz+tUiTBfZjgoRsoEuXO d8PYqBZ0WPQQPOMJmzrirwNkupwGkuXRSPCZfGBr41kP6+IZcApG9pW0Z8bXilDKZGqjCqYmw== X-Received: by 2002:a17:90b:384f:b0:3a0:d7e4:c4b7 with SMTP id 98e67ed59e1d1-3a0d7e4c5bamr3554216a91.46.1790497542809; Sun, 27 Sep 2026 01:25:42 -0700 (PDT) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Daniel Henrique Barboza , Max Chou , Weiwei Li , Liu Zhiwei , Chao Liu , Alistair Francis Subject: [PATCH v4 1/6] target/riscv: Add cfg property for SiFive int8 matmul extensions Date: Sun, 27 Sep 2026 16:25:29 +0800 Message-ID: <20260927082534.3228237-2-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260927082534.3228237-1-max.chou@sifive.com> References: <20260927082534.3228237-1-max.chou@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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:3b::2b; envelope-from=max.chou@sifive.com; helo=mail-pz2-x2b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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 @sifive.com) X-ZM-MESSAGEID: 1790497639128158500 Content-Type: text/plain; charset="utf-8" Add the CPU config properties for SiFive's custom int8 matrix multiply vector extensions: - Xsfvqmaccdod: 2x8x2 int8 matrix-multiply-accumulate operations - Xsfvqmaccqoq: 4x8x4 int8 matrix-multiply-accumulate operations All instructions of these extensions require the Zve32x extension to be present whenever either extension is enabled. Validate this in riscv_cpu_validate_vendor_ext() alongside the existing vector extension validation in riscv_cpu_validate_set_extensions(). Reviewed-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis Signed-off-by: Max Chou Reviewed-by: Chao Liu --- target/riscv/cpu.c | 2 ++ target/riscv/cpu_cfg_fields.h.inc | 2 ++ target/riscv/tcg/tcg-cpu.c | 16 ++++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index da4c1a090b9..55833896bef 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -299,6 +299,8 @@ const RISCVIsaExtData isa_edata_arr[] =3D { ISA_EXT_DATA_ENTRY(xmipscbop, PRIV_VERSION_1_12_0, ext_xmipscbop), ISA_EXT_DATA_ENTRY(xmipscmov, PRIV_VERSION_1_12_0, ext_xmipscmov), ISA_EXT_DATA_ENTRY(xmipslsp, PRIV_VERSION_1_12_0, ext_xmipslsp), + ISA_EXT_DATA_ENTRY(xsfvqmaccdod, PRIV_VERSION_1_13_0, ext_xsfvqmaccdod= ), + ISA_EXT_DATA_ENTRY(xsfvqmaccqoq, PRIV_VERSION_1_13_0, ext_xsfvqmaccqoq= ), ISA_EXT_DATA_ENTRY(xtheadba, PRIV_VERSION_1_11_0, ext_xtheadba), ISA_EXT_DATA_ENTRY(xtheadbb, PRIV_VERSION_1_11_0, ext_xtheadbb), ISA_EXT_DATA_ENTRY(xtheadbs, PRIV_VERSION_1_11_0, ext_xtheadbs), diff --git a/target/riscv/cpu_cfg_fields.h.inc b/target/riscv/cpu_cfg_field= s.h.inc index f91c780299c..0f3bda1331c 100644 --- a/target/riscv/cpu_cfg_fields.h.inc +++ b/target/riscv/cpu_cfg_fields.h.inc @@ -159,6 +159,8 @@ BOOL_FIELD(ext_xmipscbop) BOOL_FIELD(ext_xmipscmov) BOOL_FIELD(ext_xmipslsp) BOOL_FIELD(ext_xlrbr) +BOOL_FIELD(ext_xsfvqmaccdod) +BOOL_FIELD(ext_xsfvqmaccqoq) =20 BOOL_FIELD(big_endian) BOOL_FIELD(mmu) diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c index b68160af830..4f132488b9e 100644 --- a/target/riscv/tcg/tcg-cpu.c +++ b/target/riscv/tcg/tcg-cpu.c @@ -416,6 +416,16 @@ static void riscv_cpu_validate_v(CPURISCVState *env, R= ISCVCPUConfig *cfg, } } =20 +static void riscv_cpu_validate_vendor_ext(RISCVCPU *cpu, Error **errp) +{ + if ((cpu->cfg.ext_xsfvqmaccdod || cpu->cfg.ext_xsfvqmaccqoq) && + !cpu->cfg.ext_zve32x) { + error_setg(errp, "Xsfvqmaccdod/Xsfvqmaccqoq extensions require " + "Zve32x extension"); + return; + } +} + static void riscv_cpu_disable_priv_spec_isa_exts(RISCVCPU *cpu) { CPURISCVState *env =3D &cpu->env; @@ -793,6 +803,12 @@ void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, = Error **errp) return; } =20 + riscv_cpu_validate_vendor_ext(cpu, &local_err); + if (local_err !=3D NULL) { + error_propagate(errp, local_err); + return; + } + if (mcc->def->misa_mxl_max =3D=3D MXL_RV32 && cpu->cfg.ext_svukte) { error_setg(errp, "svukte is not supported for RV32"); return; --=20 2.43.0 From nobody Mon Sep 28 00:33:25 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=reject dis=none) header.from=sifive.com ARC-Seal: i=1; a=rsa-sha256; t=1790497612; cv=none; d=zohomail.com; s=zohoarc; b=UGl6SnKqpQi8DKSSkv1xuNjRjtiuORuW3V6LB5unoCTXq9z6aOot5xT/nJl28B/7pBvzfBECHFIEypMtyLHsmDp9o+I2VRHb8pY0IjQ+8zgQVMe8RE8zDX9dSNnc09LsfatSX21j1SVW4/THsSOxLapCgWMZsyL7I2GFoTvQ3No= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790497612; h=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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=BGfWgZV1+ycIeA/kl0t6gd/B6Sa2mtBnzFGKgGsUbOc=; b=bqCzdpu4N9GThFwPKOws04kG4KlKMomAPYj75gWbW5T/fq5YzPfgLvmgh8VdWLu3J4CFtinabeXTZJ6dovbkJyu0UidCUf/UPhhDvVoxwBoVd7Z0NHa/177KRKf0jBovCjsrJjJoWfSbJVbs8e22JhBBrDhiX4xdrarkImUY6Oc= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1790497612373806.1490619251316; Sun, 27 Sep 2026 01:26:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xAkCl-0003xd-61; Sun, 27 Sep 2026 04:25:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xAkCi-0003tN-Ee for qemu-devel@nongnu.org; Sun, 27 Sep 2026 04:25:48 -0400 Received: from mail-pj2-x11.google.com ([2607:f8b0:4864:39::11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xAkCg-0004f0-Oz for qemu-devel@nongnu.org; Sun, 27 Sep 2026 04:25:48 -0400 Received: by mail-pj2-x11.google.com with SMTP id 98e67ed59e1d1-39d654f02baso888223a91.3 for ; Sun, 27 Sep 2026 01:25:46 -0700 (PDT) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0b9357f64sm14498871a91.3.2026.09.27.01.25.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Sep 2026 01:25:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1790497545; x=1791102345; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=BGfWgZV1+ycIeA/kl0t6gd/B6Sa2mtBnzFGKgGsUbOc=; b=BA58LRzP1oCZH9fIXm6ZVB1tKl5EZMG5Tig25QTDGV6/llBx5h27lI+eyreK/cY+Xz n5jEILMg4hDBT3uU2qrzimxvl4FBzkLL0Hiexs2zbGkNeYntyU3FrYBoY80ZP483AOOO USXESZR7NMGBLsygyJPfXIkcAvciaZxLmZBZXs9vB/BVcWp0XcSifsm98ulTHD7lSoEI oGpVdcBEW3MhyUuBGFYpnxiTd62E8jtSaTo6k5csyKqlhIgurA8soxmsDNYB/lYOk8ka q1CzjHpAiyxnsjc+MvISCVZl5OJllI6WsUE8DCyDA7MTyiAzTYeZJ/OCpwaJLuTJakjx DkhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790497545; x=1791102345; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=BGfWgZV1+ycIeA/kl0t6gd/B6Sa2mtBnzFGKgGsUbOc=; b=HMX/zMLqRCv2GLzk8hfZabgSPBQtnzPblsPiK3JwFSCGQkGlOkmREbZeDpYXVltPfR IJk4ycL5Xi1TYhRYlbNUkqvbuu2ZkmwyfeBThrY1+BDQzSyfg5HL8ceLfsn9iVlWtGNQ nORLA5/r0foobY2zX2rxHSiG1VKUrF0ZY6FpFqfOuIf0xLmU/gXLdZqTysM6LhZQiJfY Yo6IlDNU3HfBenouENQ+Yh/oCtcKuR7TVgZWCcE8BERVKsqrjT1sUhTpYBXvIpq9xLXL GBYVfa7StFf40PhVuInT7Mz75vOWFzlEyImyD6OHN4ZpgyrtV7N+PIv4b3JBvnIEp/MA GLEQ== X-Gm-Message-State: AFq9FYL97P4lGkAjR5LVuXmejb5NrN2JhKJ6/UZd/+OKaErwkOr3H1ji QWdYM4TrsP9lZGhNVPkVDBLjTMIPP58qxG50R//M6W6pjdUPPGPWTNwOnpSkIC9BGO86eu9TDKz NcT9o4JwLXAOg2cHFBapuzVubOO3X+3G/FhSHziL8R8RBwCqlNT20CzYxpYWX4MbtjwVdaILkE+ JprMvkiEDx69B4u1lFkId/BNQWFllqzeafsWlwdYWwTw== X-Gm-Gg: AYBFou30ppTuXxcJv59+Dxhh+cZDGVtzZrIZl3FrtjTIHA71IihtTaJ//MuhXKK1biz 4XAiTTQadWv/Vci/D8TgyKCNsQeRcTilU4HrrjAKGZCxOltOzy/x9OnjZTPDaV3RHAOGWg6LfzL orf2z6PGKh9Tehe6TRS00OHAbCsnElp2XCosMcTTDG1MEuVUTC/zE1jpeZa9+TEBRT7nCZEQBVm AaxuT2Iv1m33ucbCIVNy8a0RuQ9x2VQR7sRHUjdfuY2IV/WHfQke7p3GcPLy/D/f+7hs61msbt5 WFkD5fVIYvLhiTkxxUlC4rYvcWEoiAzt7wQUzpG2L/ZTN8KHLohJha9I6V2GpLHqA8+BRSC7/qk dm7iga7R2o0QK12RW3ig1y1fb/QuqPj5vXQMZfxWPtlDSXqwqn3JEhemqiI3R0qoZ/XaE8ZgNSK drIyVI1QA5DNVps3FDhLN7s9RybwOsIEbkKsLFROrrPNBaZ9eaDTAHgeSfCovp+Cea+Kbg8jQ+D jKN8PT0ah544tEr6zoyNVQbA0bXylTD0acq35uxeHvUb37u8gM8lYyMVrqAx27JlB1WDQJo8Q== X-Received: by 2002:a17:90b:4c4f:b0:3a0:bf0a:c9da with SMTP id 98e67ed59e1d1-3a0bf0ad1cbmr6106502a91.47.1790497545113; Sun, 27 Sep 2026 01:25:45 -0700 (PDT) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Daniel Henrique Barboza , Max Chou , Weiwei Li , Liu Zhiwei , Chao Liu , Alistair Francis Subject: [PATCH v4 2/6] target/riscv/cpu: List one implied-ext rule per line Date: Sun, 27 Sep 2026 16:25:30 +0800 Message-ID: <20260927082534.3228237-3-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260927082534.3228237-1-max.chou@sifive.com> References: <20260927082534.3228237-1-max.chou@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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:39::11; envelope-from=max.chou@sifive.com; helo=mail-pj2-x11.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, UPPERCASE_50_75=0.008 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 @sifive.com) X-ZM-MESSAGEID: 1790497615050158500 Content-Type: text/plain; charset="utf-8" Every entry added to riscv_multi_ext_implied_rules currently has to reflow whatever line it lands on, since entries are packed several per line. List one rule per line instead so future additions are a pure append. Suggested-by: Daniel Henrique Barboza Reviewed-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis Signed-off-by: Max Chou Reviewed-by: Chao Liu --- target/riscv/cpu.c | 58 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 55833896bef..90fa1d714c7 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -2913,20 +2913,50 @@ RISCVCPUImpliedExtsRule *riscv_misa_ext_implied_rul= es[] =3D { }; =20 RISCVCPUImpliedExtsRule *riscv_multi_ext_implied_rules[] =3D { - &ZCB_IMPLIED, &ZCD_IMPLIED, &ZCE_IMPLIED, - &ZCF_IMPLIED, &ZCMP_IMPLIED, &ZCMT_IMPLIED, - &ZDINX_IMPLIED, &ZFA_IMPLIED, &ZFBFMIN_IMPLIED, - &ZFH_IMPLIED, &ZFHMIN_IMPLIED, &ZFINX_IMPLIED, - &ZHINX_IMPLIED, &ZHINXMIN_IMPLIED, &ZICNTR_IMPLIED, - &ZIHPM_IMPLIED, &ZK_IMPLIED, &ZKN_IMPLIED, - &ZKS_IMPLIED, &ZVBB_IMPLIED, &ZVE32F_IMPLIED, - &ZVE32X_IMPLIED, &ZVE64D_IMPLIED, &ZVE64F_IMPLIED, &ZVE64X_IMPLIED, - &ZVFBFA_IMPLIED, &ZVFBFMIN_IMPLIED, &ZVFBFWMA_IMPLIED, - &ZVFH_IMPLIED, &ZVFHMIN_IMPLIED, &ZVKN_IMPLIED, - &ZVKNC_IMPLIED, &ZVKNG_IMPLIED, &ZVKNHB_IMPLIED, - &ZVKS_IMPLIED, &ZVKSC_IMPLIED, &ZVKSG_IMPLIED, &SHA_IMPLIED, - &SSCFG_IMPLIED, &SUPM_IMPLIED, &SSPM_IMPLIED, &SMCTR_IMPLIED, - &SSCTR_IMPLIED, &SSSTATEEN_IMPLIED, + &ZCB_IMPLIED, + &ZCD_IMPLIED, + &ZCE_IMPLIED, + &ZCF_IMPLIED, + &ZCMP_IMPLIED, + &ZCMT_IMPLIED, + &ZDINX_IMPLIED, + &ZFA_IMPLIED, + &ZFBFMIN_IMPLIED, + &ZFH_IMPLIED, + &ZFHMIN_IMPLIED, + &ZFINX_IMPLIED, + &ZHINX_IMPLIED, + &ZHINXMIN_IMPLIED, + &ZICNTR_IMPLIED, + &ZIHPM_IMPLIED, + &ZK_IMPLIED, + &ZKN_IMPLIED, + &ZKS_IMPLIED, + &ZVBB_IMPLIED, + &ZVE32F_IMPLIED, + &ZVE32X_IMPLIED, + &ZVE64D_IMPLIED, + &ZVE64F_IMPLIED, + &ZVE64X_IMPLIED, + &ZVFBFA_IMPLIED, + &ZVFBFMIN_IMPLIED, + &ZVFBFWMA_IMPLIED, + &ZVFH_IMPLIED, + &ZVFHMIN_IMPLIED, + &ZVKN_IMPLIED, + &ZVKNC_IMPLIED, + &ZVKNG_IMPLIED, + &ZVKNHB_IMPLIED, + &ZVKS_IMPLIED, + &ZVKSC_IMPLIED, + &ZVKSG_IMPLIED, + &SHA_IMPLIED, + &SSCFG_IMPLIED, + &SUPM_IMPLIED, + &SSPM_IMPLIED, + &SMCTR_IMPLIED, + &SSCTR_IMPLIED, + &SSSTATEEN_IMPLIED, NULL }; =20 --=20 2.43.0 From nobody Mon Sep 28 00:33:25 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=reject dis=none) header.from=sifive.com ARC-Seal: i=1; a=rsa-sha256; t=1790497622; cv=none; d=zohomail.com; s=zohoarc; b=KYbhheEG3pZjVNtZOjHqS0FF8zUHQbVHkO56xYTosUSD02a3Er9Rm3aKhBmhnM1qdivzzK+n662eh83rnciveyu1A+7CPBV+6VjX2nAHAq+aAlJD+kE1PI+J9P4+x0h+yha3cCxZwvxht+CCh8Op35VGeZBnTwQVgLXvmPHkFBM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790497622; h=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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pX81RubxJXGeHk2Ek4qy67Lkkg8XYA6a/IolSvKf1EQ=; b=jIY910AkkxDIoUdsh5xQ0ydqEwsynkgnan3YXAucmh1WNAIx2sAR5HYy2BYwb2CTc0XN1MPc+kf9PqN7xREeEdxrRUZHBBRnCfWnWuW5VT90hicJIHJidxDxmZWozb5tcE3Bc0t5BKM22r7dhTXS3uk7TAi1+ROtkShKbVDvjhA= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 179049762205379.20429215728973; Sun, 27 Sep 2026 01:27:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xAkCm-0003yD-DP; Sun, 27 Sep 2026 04:25:52 -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 1xAkCk-0003xG-G7 for qemu-devel@nongnu.org; Sun, 27 Sep 2026 04:25:50 -0400 Received: from mail-pz2-x0e.google.com ([2607:f8b0:4864:3b::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xAkCj-0004fg-1f for qemu-devel@nongnu.org; Sun, 27 Sep 2026 04:25:50 -0400 Received: by mail-pz2-x0e.google.com with SMTP id 41be03b00d2f7-cc4cdc0d663so774890a12.3 for ; Sun, 27 Sep 2026 01:25:48 -0700 (PDT) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0b9357f64sm14498871a91.3.2026.09.27.01.25.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Sep 2026 01:25:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1790497548; x=1791102348; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=pX81RubxJXGeHk2Ek4qy67Lkkg8XYA6a/IolSvKf1EQ=; b=dctgNohIOYbdA4nYoPN3yFwxBwERyQIJMGAKHxm8SsiyMrhVjaPTIDiqqpOTqbf2pb NLufa9eKDCQGBO79x9XJPjrpLBQK4UUrptn+Bfnk2Ut3Q38KhFjFzDFhekCcUCtOaauX k1xzSmxM9gYEyUBnYQnGgn30hRO/G+glt1y675PAX4Lr/bEmuWhW4iuHYvXrqdYHdUzO VnItUjoaEQ9h9Fgki+PMP7iCx0g17eWJdy7siWHw8ShygeWEP2y11CnfdqsPYjXHDp4H VCU+kGng3YiRnx57eT+Y0/oAALM2GKvH1hr76ztbZ21bubKAkyjwu44XYQOesga0BdYh AzpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790497548; x=1791102348; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=pX81RubxJXGeHk2Ek4qy67Lkkg8XYA6a/IolSvKf1EQ=; b=c77pZNcEHsY2Tw/QsFTLqioayyQitWA7nRr7pjsr+kxO6VcsFTIKjBQHj4LnOsArSD sefpS4nfdiiZoNqrgn58vdDi2xEMk5FwQQfGuMga5FcykEathyRnEX2BMGpHs6FKk3CE X82yb1uaxmt28MOLh1so8ySJStKUK3+BzrEYkyTLRagtCohvXu26UK8q448QIpPJuyUk 4x5P2v62mpU1Tk/iW1VDCPXd6LBAwUyUWNP1pTMtGYChOBouEJ0U4JSLt+4aRjXDVIC7 waW6V+PSch6j5RJH+GAmEKhMB9bUnDIFw4C+iR2Aq+wVlnA6MnoOuLRpuMK74iI9ZXRU bKPQ== X-Gm-Message-State: AFq9FYK/4tSC2W8AmxaZdK/5bakyHlpmqJGGRn96+TUyDfMDbAKVfN8Q gKgkJ0aFxvhD0b/EJe6DSo965cYo8avFkNJhSz20pFe1e5Nfbf7WYa1QQIMeNudP7dxlyqwwF4h v0b73CUKQjhFMmyrl9FRvxYl5nsaZROtOMaywcoLBiVObXLb0uAgKtceIj9hf9Y/4RDCOdnuoXB wWJxbPzCOWm346zqfO2borFSRFi6Q3l7xWfp6/aZevjQ== X-Gm-Gg: AYBFou0WLAbs5MZSRKqQ40yIlRHvrZKp5ntzzhlaaDc822/gzkrRTvZiDDHChEovNyw we+vNkxljBrO/Hl5i38IP8nMVIAsT6/ZUZyHE8eQaZF4f6Au4M3EqdiknBeIaSQ7O6iRfZrWA5T yiCgRGLBRgnt2hzkCfrMJQYhA/7kc23N3KN4pp+gmYikuO1vw/DGPgPo1OfCf3bbgpLm8vHjqU0 Uxi1oVG1v7z3B6VYB3m6OiQqmLGEI4inl0i+P9Djy/2YCZpRtOh3n0VgBgeSmGg5pI85sUYn6on rb9c45890FFbEGQB8QBBL/S44/FOvYF3l5w4OP/vFRU7Ru1MtMQ70faT6v0EghTJgpb3bUtY6W7 Psrq8XzK+LChvwslPIQXtn0nbhcb7n34eGyCaXvv8O7LUkBFYxTI19dUW0j3Y14m/p4tLXSwHxL FMb+fO6hTRoschQdpjbAf51N4fCg8+29xg0XZ6Aw8nwt5NErGX5BulZIalDceU45MeBVeaL8g9p 0rEehyfPFpWMk/kNBVVP6sh36GH9O5uqOgq8p/R6Y2Cx7Tjjx6U61wefyhmogkR+6gu0N4gWg== X-Received: by 2002:a17:90b:2748:b0:3a0:7dea:6dd4 with SMTP id 98e67ed59e1d1-3a098570051mr8166539a91.7.1790497547621; Sun, 27 Sep 2026 01:25:47 -0700 (PDT) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Daniel Henrique Barboza , Max Chou , Weiwei Li , Liu Zhiwei , Chao Liu , Frank Chang , Alistair Francis Subject: [PATCH v4 3/6] target/riscv/cpu: Add SiFive custom int8 matmul extension implied rules Date: Sun, 27 Sep 2026 16:25:31 +0800 Message-ID: <20260927082534.3228237-4-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260927082534.3228237-1-max.chou@sifive.com> References: <20260927082534.3228237-1-max.chou@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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:3b::e; envelope-from=max.chou@sifive.com; helo=mail-pz2-x0e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @sifive.com) X-ZM-MESSAGEID: 1790497623536158500 Content-Type: text/plain; charset="utf-8" From: Frank Chang Add SiFive custom int8 matmul extension implied rules to enable the implied extensions of SiFive custom int8 matmul extension recursively. Signed-off-by: Frank Chang Reviewed-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis Signed-off-by: Max Chou Reviewed-by: Chao Liu --- target/riscv/cpu.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 90fa1d714c7..714697c66cf 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -2906,6 +2906,24 @@ static RISCVCPUImpliedExtsRule ZVFBFA_IMPLIED =3D { }, }; =20 +static RISCVCPUImpliedExtsRule XSFVQMACCDOD_IMPLIED =3D { + .ext =3D CPU_CFG_OFFSET(ext_xsfvqmaccdod), + .implied_multi_exts =3D { + CPU_CFG_OFFSET(ext_zve32x), + + RISCV_IMPLIED_EXTS_RULE_END + }, +}; + +static RISCVCPUImpliedExtsRule XSFVQMACCQOQ_IMPLIED =3D { + .ext =3D CPU_CFG_OFFSET(ext_xsfvqmaccqoq), + .implied_multi_exts =3D { + CPU_CFG_OFFSET(ext_zve32x), + + RISCV_IMPLIED_EXTS_RULE_END + }, +}; + RISCVCPUImpliedExtsRule *riscv_misa_ext_implied_rules[] =3D { &RVA_IMPLIED, &RVD_IMPLIED, &RVF_IMPLIED, &RVM_IMPLIED, &RVV_IMPLIED, &RVG_IMPLIED, @@ -2957,6 +2975,8 @@ RISCVCPUImpliedExtsRule *riscv_multi_ext_implied_rule= s[] =3D { &SMCTR_IMPLIED, &SSCTR_IMPLIED, &SSSTATEEN_IMPLIED, + &XSFVQMACCDOD_IMPLIED, + &XSFVQMACCQOQ_IMPLIED, NULL }; =20 --=20 2.43.0 From nobody Mon Sep 28 00:33:25 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=reject dis=none) header.from=sifive.com ARC-Seal: i=1; a=rsa-sha256; t=1790497612; cv=none; d=zohomail.com; s=zohoarc; b=KNlZXzTY4MDv08XIzSYGZP1e5fFG6vIz2GjLjRVd/urU4Z1+pwBXA4HKgKaCuSHZRHb/3oDVrUChcZFQ1NmYp4eCq7HTbDGQRZUvS20FinY9laX/K3hh1qc0/Ea3vxDBrWjjNZeNJ1KYs/PhIMU54Vzs6v9TcSYbINiXBC0AQFg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790497612; h=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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ucQ9hpBuHKQDRQGJKG7PC5iFGUXj/Gji10OSPQI1sI0=; b=fiw7EAaWNkgsZ6L4mgZjApm7370Bld5RY5b02whbGa9O66f2boCmsGYGJ8ax4tFoM2gDhEpF62g3a/BymBV8DLnTCsvBLbcv4m2jUxlahhl9ePd9JKWrOkNU+k0GnSzHwLzyyfi28yZsieO5KVzyAoEk0JAs3fKcIJg/5EDvx+M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1790497612004886.764648995983; Sun, 27 Sep 2026 01:26:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xAkCq-00043d-Pi; Sun, 27 Sep 2026 04:25: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 1xAkCp-00042Z-2s for qemu-devel@nongnu.org; Sun, 27 Sep 2026 04:25:55 -0400 Received: from mail-pj2-x0e.google.com ([2607:f8b0:4864:39::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xAkCl-0004gA-T4 for qemu-devel@nongnu.org; Sun, 27 Sep 2026 04:25:54 -0400 Received: by mail-pj2-x0e.google.com with SMTP id d9443c01a7336-2df8818fe1eso6282085ad.1 for ; Sun, 27 Sep 2026 01:25:51 -0700 (PDT) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0b9357f64sm14498871a91.3.2026.09.27.01.25.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Sep 2026 01:25:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1790497550; x=1791102350; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ucQ9hpBuHKQDRQGJKG7PC5iFGUXj/Gji10OSPQI1sI0=; b=OW0LJXBrynyotHQTx71AbPwN0nTF47eg9SoXe0zvJkcqJUheKwx82UQF4pfQjfb09r VL2h2KNJgDqx80SgIq7srzEuvOj4Y8qXmOUOqFDKDELiR9LOUqK0shKo2uY+bIUJoHdb dWkiM12UwOW2yu9z51s3XkPziPHY6lBurVKp9Dzfbtm1/cin83th/3wcXhSokB5IOznn lDwS8tOlrX88at+l6p/0WSQQyjwRCXGRkXwFmfCxSi7HMryeY6msjN6mycVcAQbEkykM 4DXYKJplTf74+HSjsgqthNKdHDWDdAHWTvVa6Bq9eNawPeytKdPV1RhRisY07VvW0Ec+ Mx+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790497550; x=1791102350; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ucQ9hpBuHKQDRQGJKG7PC5iFGUXj/Gji10OSPQI1sI0=; b=qePvsnixNPdgTqYF6Ag46FP9o9xB1HCXPExFSFAW3udZytIdB7gOIEIUQSfyzmpDfR 7jOizlx61V3bgWonXIV/PmSuEP7e5b2HkJzvHzxrRReV/yVkL4ftVojxvfLcrXSa02zw zJaLVmROkbkzEiKGn4ClfZsk4eZw7rMErlTS7daNQycnxp585W5jQVW9y3YHr15nIlKO Fp4OHMk64Ju5zWO+BweFn7djf0nrXamDh3lQcpzpRd3KXp2hb5yxgNnWHu12blC7m4+o 0wuL1pKKQ4nVT74PJCblgV2lgd0U9eQq4Z3hOW1zsSq9eTtiea/ccKOpp4c6w1aNPuRZ Zb+Q== X-Gm-Message-State: AFq9FYK0AKIV2ANeK5X9RJ3KWq/IK/WU91gtwb3ZenQPNqLrEzP1mvnx dOKhieCPXXkMfXEBmUEgSx7olJ24qT3cxkm0rGV4FntzvN8QkK1vsjnyJ7VWs9t/5fm8IcZsQDO ffRmcrHiyt/ZP4L3zLFfwPmfh+h+4Hvq+PHTn8mzCAlZ12inZz3evVjmbDBxFhV75hypGzg2GT6 KOXSMqZmhVxLxqn7KajAGIrIs7vF+VFEUwELEwOk52Uw== X-Gm-Gg: AYBFou350l7YdhCGNjAGT5F3RL8Qh7ikyaCVBra+VfApxlNAbZT4W/rh4dPVyLY15xI p5d1poojtpmI/kTL3dAOMNRSwaHmixcVHnb+0QYwrv9WEhdFyYvIs1cU5A0ohejssuYeC7EBjgB QD1PrFnXGEzUdeEBy0p0Tk4BlXT0VbY3hZVqFxAjsfwfoVml2Ljc+iSxMqFGu1ihyY5dApIhPdv 8WjQ20DvSN/kzxn13dqWCbzwa5WatitX+KuO3fgDs8mwCBwJnkYsqmT9TABqa+LQUICYifxjmp7 bD8NpsPUjmWFi7zcZBwWlpg5Wz8wW/VKnFvBz0ERTYJpdGCFquxW52ICrMnt1Cd7bO1NCsZKi2W 5XhpJQ33GM3hWY8rCpSy7AJ6j0okqRAS9gpySkgxp7HMh8QbeQDn57C+uepP4b+Mxo3zC39ri4E k8IBGDAWAlAX+/8WeWqzTNQteizrzWMLTDqSB5oGWJFfilV56Hseq8jNzE41D3FCHUpv4oM6Wp0 83RHky9rFwO2ZHc6nvReL75uaX8Fv5129Omzgxgd213SdT4eYZdHYACKmJD68lDoNEQ+x741w== X-Received: by 2002:a17:90b:524d:b0:39e:3d38:7ef1 with SMTP id 98e67ed59e1d1-3a09864b133mr5814301a91.10.1790497550212; Sun, 27 Sep 2026 01:25:50 -0700 (PDT) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Daniel Henrique Barboza , Max Chou , Weiwei Li , Liu Zhiwei , Chao Liu , Frank Chang , Alistair Francis Subject: [PATCH v4 4/6] target/riscv: rvv: Add SiFive custom int8 matmul instructions Date: Sun, 27 Sep 2026 16:25:32 +0800 Message-ID: <20260927082534.3228237-5-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260927082534.3228237-1-max.chou@sifive.com> References: <20260927082534.3228237-1-max.chou@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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:39::e; envelope-from=max.chou@sifive.com; helo=mail-pj2-x0e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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 @sifive.com) X-ZM-MESSAGEID: 1790497613772158500 Content-Type: text/plain; charset="utf-8" From: Frank Chang Add the 8 SiFive custom int8 matrix-multiply vector instructions: sf.vqmacc{u,,us,su}.4x8x4 and sf.vqmacc{u,,us,su}.2x8x2. Each name suffix encodes the signedness of vs1/vs2. The 4x8x4 forms multiply-accumulate a 4x8 by 8x4 int8 tile into a 4x4 int32 result; the 2x8x2 forms use a 2x8 by 8x2 tile producing a 2x2 int32 result. Both Xsfvqmaccqoq/Xsfvqmaccdod extensions are gated on vlenb >=3D 32, sew =3D=3D 8 and vm =3D=3D 1, per the SiFive Int8 Matrix Multiplication Extensions Specification. Signed-off-by: Frank Chang Reviewed-by: Daniel Henrique Barboza Acked-by: Alistair Francis Signed-off-by: Max Chou Reviewed-by: Chao Liu --- MAINTAINERS | 8 ++ target/riscv/cpu_cfg.h | 5 ++ target/riscv/helper.h | 10 +++ target/riscv/meson.build | 1 + target/riscv/tcg/insn_trans/trans_xsf.c.inc | 98 +++++++++++++++++++++ target/riscv/tcg/meson.build | 1 + target/riscv/tcg/translate.c | 3 + target/riscv/tcg/xsf_helper.c | 87 ++++++++++++++++++ target/riscv/xsf.decode | 30 +++++++ 9 files changed, 243 insertions(+) create mode 100644 target/riscv/tcg/insn_trans/trans_xsf.c.inc create mode 100644 target/riscv/tcg/xsf_helper.c create mode 100644 target/riscv/xsf.decode diff --git a/MAINTAINERS b/MAINTAINERS index 43d5d3715e4..a3a8199840f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -399,6 +399,14 @@ F: target/riscv/XVentanaCondOps.decode F: target/riscv/insn_trans/trans_xventanacondops.c.inc F: disas/riscv-xventana* =20 +RISC-V SiFive (Xsf*) extensions +M: Max Chou +L: qemu-riscv@nongnu.org +S: Supported +F: target/riscv/xsf.decode +F: target/riscv/tcg/insn_trans/trans_xsf.c.inc +F: target/riscv/tcg/xsf_helper.c + RENESAS RX CPUs R: Yoshinori Sato S: Orphan diff --git a/target/riscv/cpu_cfg.h b/target/riscv/cpu_cfg.h index 211d0708ba4..d6db1cfb7cc 100644 --- a/target/riscv/cpu_cfg.h +++ b/target/riscv/cpu_cfg.h @@ -51,6 +51,11 @@ static inline bool has_xthead_p(const RISCVCPUConfig *cf= g) cfg->ext_xtheadmempair || cfg->ext_xtheadsync; } =20 +static inline bool has_xsf_p(const RISCVCPUConfig *cfg) +{ + return cfg->ext_xsfvqmaccdod || cfg->ext_xsfvqmaccqoq; +} + #define MATERIALISE_EXT_PREDICATE(ext) \ static inline bool has_ ## ext ## _p(const RISCVCPUConfig *cfg) \ { \ diff --git a/target/riscv/helper.h b/target/riscv/helper.h index aab92bf132a..43ef6b3ff92 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -1362,3 +1362,13 @@ DEF_HELPER_FLAGS_3(sc_probe_write, TCG_CALL_NO_WG, v= oid, env, tl, tl) /* Invalidate reservations overlapping a completed linux-user store. */ DEF_HELPER_3(riscv_invalidate_reservations, void, env, tl, tl) #endif + +/* SiFive Custom int8 Matrix-Multiply */ +DEF_HELPER_5(sf_vqmaccu_4x8x4, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(sf_vqmacc_4x8x4, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(sf_vqmaccus_4x8x4, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(sf_vqmaccsu_4x8x4, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(sf_vqmaccu_2x8x2, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(sf_vqmacc_2x8x2, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(sf_vqmaccus_2x8x2, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(sf_vqmaccsu_2x8x2, void, ptr, ptr, ptr, env, i32) diff --git a/target/riscv/meson.build b/target/riscv/meson.build index e1b51d2bd4d..da1df1e74e6 100644 --- a/target/riscv/meson.build +++ b/target/riscv/meson.build @@ -6,6 +6,7 @@ gen =3D [ decodetree.process('XVentanaCondOps.decode', extra_args: '--static-decod= e=3Ddecode_XVentanaCodeOps'), decodetree.process('xmips.decode', extra_args: '--static-decode=3Ddecode= _xmips'), decodetree.process('xlrbr.decode', extra_args: '--static-decode=3Ddecode= _xlrbr'), + decodetree.process('xsf.decode', extra_args: '--static-decode=3Ddecode_x= sf'), ] =20 riscv_ss =3D ss.source_set() diff --git a/target/riscv/tcg/insn_trans/trans_xsf.c.inc b/target/riscv/tcg= /insn_trans/trans_xsf.c.inc new file mode 100644 index 00000000000..1677352689f --- /dev/null +++ b/target/riscv/tcg/insn_trans/trans_xsf.c.inc @@ -0,0 +1,98 @@ +/* + * RISC-V translation routines for the SiFive vendor extensions (xsf*) + * + * Copyright (c) 2023 SiFive, Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + + +/* + * SiFive Xsfvqmaccdod/Xsfvqmaccqoq custom int8 matrix-multiply extensions + */ +static bool sf_int8_matmul_check(DisasContext *s, arg_rmrr *a) +{ + return require_rvv(s) && + vext_check_isa_ill(s) && + s->vstart_eq_zero && + (s->cfg_ptr->vlenb >=3D 32) && + (s->sew =3D=3D MO_8) && + (a->vm =3D=3D 1); +} + +static bool sf_int8_matmul_4x8x4_check(DisasContext *s, arg_rmrr *a) +{ + /* + * vd has EMUL=3D2*LMUL + * vs2 has EMUL=3DLMUL + * vs1 has EMUL=3D1 + * vd must not overlap vs1 + */ + return sf_int8_matmul_check(s, a) && + (s->cfg_ptr->ext_xsfvqmaccqoq) && + (s->lmul <=3D 2) && + require_align(a->rd, s->lmul + 1) && + require_align(a->rs2, s->lmul) && + require_align(a->rs1, 0) && + require_noover(a->rd, s->lmul + 1, a->rs2, s->lmul) && + !is_overlapped(a->rd, 1 << MAX(s->lmul + 1, 0), a->rs1, 1); +} + +static bool sf_int8_matmul_2x8x2_check(DisasContext *s, arg_rmrr *a) +{ + /* + * vd has EMUL=3DLMUL + * vs2 has EMUL=3DLMUL + * vs1 has EMUL=3D1 + * vd must not overlap vs1 + */ + return sf_int8_matmul_check(s, a) && + (s->cfg_ptr->ext_xsfvqmaccdod) && + require_align(a->rd, s->lmul) && + require_align(a->rs2, s->lmul) && + require_align(a->rs1, 0) && + !is_overlapped(a->rd, 1 << MAX(s->lmul, 0), a->rs1, 1); +} + +static bool sf_int8_matmul_op(DisasContext *s, arg_rmrr *a, uint8_t seq) +{ + static gen_helper_gvec_3_ptr * const fns[8] =3D { + gen_helper_sf_vqmaccu_4x8x4, gen_helper_sf_vqmacc_4x8x4, + gen_helper_sf_vqmaccus_4x8x4, gen_helper_sf_vqmaccsu_4x8x4, + gen_helper_sf_vqmaccu_2x8x2, gen_helper_sf_vqmacc_2x8x2, + gen_helper_sf_vqmaccus_2x8x2, gen_helper_sf_vqmaccsu_2x8x2, + }; + + /* + * The helper raises an illegal-instruction exception when vl is not a + * multiple of the tile size; save the opcode so mtval/stval report the + * faulting instruction if that exception is thrown. + */ + decode_save_opc(s, 0); + + tcg_gen_gvec_3_ptr(vreg_ofs(s, a->rd), vreg_ofs(s, a->rs1), + vreg_ofs(s, a->rs2), tcg_env, + s->cfg_ptr->vlenb, s->cfg_ptr->vlenb, 0, fns[seq]); + + finalize_rvv_inst(s); + + return true; +} + +#define GEN_SF_INT8_MATMUL_TRANS(NAME, CHECK, SEQ) \ +static bool trans_##NAME(DisasContext *s, arg_rmrr *a) \ +{ \ + if (CHECK(s, a)) { \ + return sf_int8_matmul_op(s, a, SEQ); \ + } \ + return false; \ +} + +GEN_SF_INT8_MATMUL_TRANS(sf_vqmaccu_4x8x4, sf_int8_matmul_4x8x4_check, 0) +GEN_SF_INT8_MATMUL_TRANS(sf_vqmacc_4x8x4, sf_int8_matmul_4x8x4_check, 1) +GEN_SF_INT8_MATMUL_TRANS(sf_vqmaccus_4x8x4, sf_int8_matmul_4x8x4_check, 2) +GEN_SF_INT8_MATMUL_TRANS(sf_vqmaccsu_4x8x4, sf_int8_matmul_4x8x4_check, 3) +GEN_SF_INT8_MATMUL_TRANS(sf_vqmaccu_2x8x2, sf_int8_matmul_2x8x2_check, 4) +GEN_SF_INT8_MATMUL_TRANS(sf_vqmacc_2x8x2, sf_int8_matmul_2x8x2_check, 5) +GEN_SF_INT8_MATMUL_TRANS(sf_vqmaccus_2x8x2, sf_int8_matmul_2x8x2_check, 6) +GEN_SF_INT8_MATMUL_TRANS(sf_vqmaccsu_2x8x2, sf_int8_matmul_2x8x2_check, 7) diff --git a/target/riscv/tcg/meson.build b/target/riscv/tcg/meson.build index a05ab642f41..86805b30cbc 100644 --- a/target/riscv/tcg/meson.build +++ b/target/riscv/tcg/meson.build @@ -15,6 +15,7 @@ riscv_ss.add(files( 'vcrypto_helper.c', 'vector_helper.c', 'vector_internals.c', + 'xsf_helper.c', 'zce_helper.c')) =20 =20 diff --git a/target/riscv/tcg/translate.c b/target/riscv/tcg/translate.c index cce3b6dc721..f88997c859c 100644 --- a/target/riscv/tcg/translate.c +++ b/target/riscv/tcg/translate.c @@ -1246,10 +1246,12 @@ static uint32_t opcode_at(DisasContextBase *dcbase,= target_ulong pc) #include "decode-xthead.c.inc" #include "decode-xmips.c.inc" #include "decode-xlrbr.c.inc" +#include "decode-xsf.c.inc" #include "insn_trans/trans_xthead.c.inc" #include "insn_trans/trans_xventanacondops.c.inc" #include "insn_trans/trans_xmips.c.inc" #include "insn_trans/trans_xlrbr.c.inc" +#include "insn_trans/trans_xsf.c.inc" =20 /* Include the auto-generated decoder for 16 bit insn */ #include "decode-insn16.c.inc" @@ -1270,6 +1272,7 @@ const RISCVDecoder decoder_table[] =3D { { has_xthead_p, decode_xthead}, { has_XVentanaCondOps_p, decode_XVentanaCodeOps}, { has_xlrbr_p, decode_xlrbr}, + { has_xsf_p, decode_xsf }, }; =20 const size_t decoder_table_size =3D ARRAY_SIZE(decoder_table); diff --git a/target/riscv/tcg/xsf_helper.c b/target/riscv/tcg/xsf_helper.c new file mode 100644 index 00000000000..6e953d12493 --- /dev/null +++ b/target/riscv/tcg/xsf_helper.c @@ -0,0 +1,87 @@ +/* + * RISC-V translation helpers for the SiFive vendor extensions (xsf*) + * + * Copyright (c) 2023 SiFive, Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "exec/helper-proto.h" +#include "internals.h" +#include "vector_internals.h" + +#define QOP_SUU_B int32_t, uint8_t, uint8_t, int32_t, int32_t +#define QOP_SUS_B int32_t, uint8_t, int8_t, int32_t, int32_t +#define QOP_SSU_B int32_t, int8_t, uint8_t, int32_t, int32_t +#define QOP_SSS_B int32_t, int8_t, int8_t, int32_t, int32_t + +/* SiFive Custom int8 Matrix-Multiply */ +/* + * vd may overlap vs2, we need to allocate an additional vd array + * to save temporary results of vd and write them back at the end. + */ +#define GEN_VEXT_SF_INT8_MATMUL(NAME, TD, T1, T2, TX1, TX2, \ + HD, HS1, HS2, ROWS, COLS, TILE_SIZE) \ +void HELPER(NAME)(void *vd, void *vs1, void *vs2, \ + CPURISCVState *env, uint32_t desc) \ +{ \ + int it, il, in, im, ivd, ivs1, ivs2; \ + TD *vds; \ + \ + if (env->vl % TILE_SIZE) { \ + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); \ + return; \ + } \ + \ + VSTART_CHECK_EARLY_EXIT(env, env->vl); \ + \ + vds =3D g_malloc0(sizeof(TD) * \ + ROWS * ROWS * (env->vl / TILE_SIZE)); \ + \ + for (it =3D 0; it < (env->vl / TILE_SIZE); it++) { \ + for (il =3D 0; il < ROWS; il++) { \ + for (in =3D 0; in < ROWS; in++) { \ + ivd =3D ROWS * ROWS * it + ROWS * il + in; \ + vds[ivd] =3D *((TD *)vd + HD(ivd)); \ + for (im =3D 0; im < COLS; im++) { \ + ivs1 =3D il * COLS + im; \ + ivs2 =3D TILE_SIZE * it + im * ROWS + in; \ + T1 s1 =3D *((T1 *)vs1 + HS1(ivs1)); \ + T2 s2 =3D *((T2 *)vs2 + HS2(ivs2)); \ + vds[ivd] +=3D (TX1)s1 * (TX2)s2; \ + } \ + } \ + } \ + } \ + \ + for (it =3D 0; it < (env->vl / TILE_SIZE); it++) { \ + for (il =3D 0; il < ROWS; il++) { \ + for (in =3D 0; in < ROWS; in++) { \ + ivd =3D ROWS * ROWS * it + ROWS * il + in; \ + *((TD *)vd + HD(ivd)) =3D vds[ivd]; \ + } \ + } \ + } \ + \ + env->vstart =3D 0; \ + g_free(vds); \ +} + +RVVCALL(GEN_VEXT_SF_INT8_MATMUL, sf_vqmaccu_4x8x4, QOP_SUU_B, H4, H1, H1, + 4, 8, 32) +RVVCALL(GEN_VEXT_SF_INT8_MATMUL, sf_vqmacc_4x8x4, QOP_SSS_B, H4, H1, H1, + 4, 8, 32) +RVVCALL(GEN_VEXT_SF_INT8_MATMUL, sf_vqmaccus_4x8x4, QOP_SUS_B, H4, H1, H1, + 4, 8, 32) +RVVCALL(GEN_VEXT_SF_INT8_MATMUL, sf_vqmaccsu_4x8x4, QOP_SSU_B, H4, H1, H1, + 4, 8, 32) +RVVCALL(GEN_VEXT_SF_INT8_MATMUL, sf_vqmaccu_2x8x2, QOP_SUU_B, H4, H1, H1, + 2, 8, 16) +RVVCALL(GEN_VEXT_SF_INT8_MATMUL, sf_vqmacc_2x8x2, QOP_SSS_B, H4, H1, H1, + 2, 8, 16) +RVVCALL(GEN_VEXT_SF_INT8_MATMUL, sf_vqmaccus_2x8x2, QOP_SUS_B, H4, H1, H1, + 2, 8, 16) +RVVCALL(GEN_VEXT_SF_INT8_MATMUL, sf_vqmaccsu_2x8x2, QOP_SSU_B, H4, H1, H1, + 2, 8, 16) diff --git a/target/riscv/xsf.decode b/target/riscv/xsf.decode new file mode 100644 index 00000000000..bb585046ab1 --- /dev/null +++ b/target/riscv/xsf.decode @@ -0,0 +1,30 @@ +# +# RISC-V translation routines for the SiFive vendor extensions +# +# Copyright (c) 2023 SiFive, Inc. +# +# SPDX-License-Identifier: GPL-2.0-or-later + +# Fields: +%rs2 20:5 +%rs1 15:5 +%rd 7:5 +%vm 25:1 + +# Argument sets: +&rmrr vm rd rs1 rs2 !extern + +# Formats: +@r_vm_1 ...... . ..... ..... ... ..... ....... &rmrr vm=3D1 %rs2 %rs1 = %rd + +# *** Xsfvqmaccqoq: SiFive custom int8 matrix-multiply (4x8x4 tile) *** +sf_vqmaccu_4x8x4 111100 1 ..... ..... 010 ..... 1011011 @r_vm_1 +sf_vqmacc_4x8x4 111101 1 ..... ..... 010 ..... 1011011 @r_vm_1 +sf_vqmaccus_4x8x4 111110 1 ..... ..... 010 ..... 1011011 @r_vm_1 +sf_vqmaccsu_4x8x4 111111 1 ..... ..... 010 ..... 1011011 @r_vm_1 + +# *** Xsfvqmaccdod: SiFive custom int8 matrix-multiply (2x8x2 tile) *** +sf_vqmaccu_2x8x2 101100 1 ..... ..... 010 ..... 1011011 @r_vm_1 +sf_vqmacc_2x8x2 101101 1 ..... ..... 010 ..... 1011011 @r_vm_1 +sf_vqmaccus_2x8x2 101110 1 ..... ..... 010 ..... 1011011 @r_vm_1 +sf_vqmaccsu_2x8x2 101111 1 ..... ..... 010 ..... 1011011 @r_vm_1 --=20 2.43.0 From nobody Mon Sep 28 00:33:25 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=reject dis=none) header.from=sifive.com ARC-Seal: i=1; a=rsa-sha256; t=1790497612; cv=none; d=zohomail.com; s=zohoarc; b=X5xmvebr2Rni8p0lpEN2az5SoV/dRpzH2LiWn3qTfv5Lhmqi5vLY4EqvZcmarNw9+TyzlFAtpIo8uyljKNm9IxEKVYhbNeY8di7NdBge2DZM+xmLLpaG5n99mw/buJSR/ouIq+q5Xq64kOFT+ZD7ArnyT7voQfglCjl4XDSU59E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790497612; h=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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=eJyZv5zlZVLLhvPG7D5trWPlNxAU7G9VLrphRIn6S4A=; b=G/JeyjjOEE91Wyw2LU3JvUCEmmoVDt+7UMVBoCnNOS6/Rg2+4f/hvrzB1o+YaxqRkqQdJKbzdL7o/P7Gap5l2EJPP9MH3Hu4vSG96PL5HXKKUSUno7Kf1KLewN8mXzt9jJmkksrSg5U398J6tuG+Da/fZ5IxMAmbRhtQVWEW46w= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1790497612078692.3317387222127; Sun, 27 Sep 2026 01:26:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xAkD9-000469-Bj; Sun, 27 Sep 2026 04:26:15 -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 1xAkCv-00044o-08 for qemu-devel@nongnu.org; Sun, 27 Sep 2026 04:26:02 -0400 Received: from mail-pj2-x11.google.com ([2607:f8b0:4864:39::11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xAkCo-0004hA-S9 for qemu-devel@nongnu.org; Sun, 27 Sep 2026 04:25:57 -0400 Received: by mail-pj2-x11.google.com with SMTP id 98e67ed59e1d1-396ccb65437so1194684a91.3 for ; Sun, 27 Sep 2026 01:25:54 -0700 (PDT) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0b9357f64sm14498871a91.3.2026.09.27.01.25.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Sep 2026 01:25:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1790497553; x=1791102353; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=eJyZv5zlZVLLhvPG7D5trWPlNxAU7G9VLrphRIn6S4A=; b=S5dbZwttGILlZDWw29yIVoldE8Udcx52uYJKPh4Zuxtjhw00b0pSWY2AF6fOJumeaI Cme4TBSCQ53NhtbNnt4xJxmA2WBUlEdvA/LD3j+QSupXdtRPatxiW9dX31dyzDHDnlqd A2+2BCG5+Xai1Bo9NPQLJi5lLDWu17JPGXXTsMOSID2yMbLnoH0lOKbGD7eU1FGn02PO QvYcagCkES7VBp3iq2wAiYVzmlM771K06DTCWPEIabbqKl1j4nzRsMmIYgmTC0+C/y7A Ww0V2VaRqmVZcVstscqgprj+akTO7OS0hMNik692D7O5Vz6kez0SFk0WGO8m94V3r+7K zx2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790497553; x=1791102353; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=eJyZv5zlZVLLhvPG7D5trWPlNxAU7G9VLrphRIn6S4A=; b=uvKWcmEAN8dmlLU81fBpTRV3GBJYuYOYq64lzU5pxiJ8FcZokUP7JTV/AIWIl+YGag fvnLljbB8vWExUGYz0X399Jsz8jLBsINUC+LnZqjARDQl/DKZJz7SgmUn+xyI0k2YN4x EtVQATrCzXGTa9zRGxTWHdvMoXojwAY6fTYJRPX2sPR8cfGDqj1Tj7BMGTxpQB0BgU08 3qPbKAmIYOpCoInfpvXPmUdXJz2nw9zIYRAdbOTHeXJm8btwUpP2gheZMGxhNehItAW6 j/ZcCMVEYB77uto+rhD/Jas1dExS64MXIzMzRlJMxq7MwmHJbre4gHJ6k5FU0F10HDEz I34w== X-Gm-Message-State: AFq9FYJye7QRf9im04KP91xaTQbadC51J7TSx8stoXhC69qBVuvc+1LW gHoZQnrFNfHNI+R0BqtLPCjsbVdAT28a+Wwd9qSVLXE538LZE36jLRk2kuY69UGotWlgLgezvQM Vyetvj3+5QNaBh2bF2PHy0wvlOMRUZHB4V5x0tW/ELpFvEZhr2orqnOl+ibHY/uyzETN7xQk/fx m6iUGL2mHCB3Zv1A+dvLP8pPFHSgWQSzurtvCC1xNMjg== X-Gm-Gg: AYBFou1WFudvuiNPhJTHY+IdRz48Ogdeacajc+tVcKFt5/1S6HUf3jT3urtk4tqBecD vLSOFOxw+KFbRwdcs/C6Kqk5gB23NCM1wqhC4HqM1nxbCf9axNpRpfVuZYE+/GTeSKZalGx4015 k+pbhrZwnd8uV9sdDMYqNkyar+So/W/Ks914OAfvwNo2Yl9K6bIcuvUsmYR9y+YI/CCmnGu/Jdm ZvQKJVBDZIkBy1CrijLjhczrY+OH5NSzHrQR/fuqtlNmEUiJS1wpy7SgpwK2sTJ8LVnkdg517Jn upQbBLn+vWjLBG0ZnHTO0fj28xBcVdMSlswlMv4RgBx4xbmmjmPTkqdnL05ZgmpcDKQGPL8uFDH D1i2RVukpxZzjPhceMiqGxhhS9z4L+4jVzk/3ONrNlSFIuhf5lBIPnV+qeXB1ROf9eD+rWJPJNV bHzKvjAvsNwFtPK5cdQAqiNyFMBYP1A8dZb0N9Kpy3/WPGBjIZCeqB032pdJUlSa7CNjUcXP4ph +XXHAP/HiWlbPtTxYS7x47MxErg+yZ6Yj6g+6BRnHMPFDq44Bb/6SWVcyQ+eotR77qmAlX2UA== X-Received: by 2002:a17:90b:4d09:b0:39e:6a7e:ee1b with SMTP id 98e67ed59e1d1-3a098d96146mr7883160a91.39.1790497552824; Sun, 27 Sep 2026 01:25:52 -0700 (PDT) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Daniel Henrique Barboza , Max Chou , Weiwei Li , Liu Zhiwei , Chao Liu , Jason Chien , Alistair Francis Subject: [PATCH v4 5/6] disas/riscv: Add disassembler support for Xsfvqmaccdod/Xsfvqmaccqoq Date: Sun, 27 Sep 2026 16:25:33 +0800 Message-ID: <20260927082534.3228237-6-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260927082534.3228237-1-max.chou@sifive.com> References: <20260927082534.3228237-1-max.chou@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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:39::11; envelope-from=max.chou@sifive.com; helo=mail-pj2-x11.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @sifive.com) X-ZM-MESSAGEID: 1790497613768158500 Content-Type: text/plain; charset="utf-8" From: Jason Chien Add disassembler support for all SiFive custom int8 matrix-multiply instructions: sf.vqmacc{u,,us,su}.4x8x4 and sf.vqmacc{u,,us,su}.2x8x2. These instructions share opcode 0b1011011 and funct3 0b010, and are distinguished by funct6: 60-63 for the 4x8x4 (Xsfvqmaccqoq) tile and 44-47 for the 2x8x2 (Xsfvqmaccdod) tile. Signed-off-by: Jason Chien Reviewed-by: Daniel Henrique Barboza Acked-by: Alistair Francis Signed-off-by: Max Chou Reviewed-by: Chao Liu --- MAINTAINERS | 1 + disas/meson.build | 3 ++- disas/riscv-xsf-op.c.inc | 11 +++++++++ disas/riscv-xsf.c | 49 ++++++++++++++++++++++++++++++++++++++++ disas/riscv-xsf.h | 16 +++++++++++++ disas/riscv.c | 2 ++ disas/riscv.h | 1 + 7 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 disas/riscv-xsf-op.c.inc create mode 100644 disas/riscv-xsf.c create mode 100644 disas/riscv-xsf.h diff --git a/MAINTAINERS b/MAINTAINERS index a3a8199840f..be1c505ac20 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -406,6 +406,7 @@ S: Supported F: target/riscv/xsf.decode F: target/riscv/tcg/insn_trans/trans_xsf.c.inc F: target/riscv/tcg/xsf_helper.c +F: disas/riscv-xsf* =20 RENESAS RX CPUs R: Yoshinori Sato diff --git a/disas/meson.build b/disas/meson.build index b382550e41f..9b14adf4f1b 100644 --- a/disas/meson.build +++ b/disas/meson.build @@ -8,7 +8,8 @@ common_ss.add(when: 'CONFIG_RISCV_DIS', if_true: files( 'riscv.c', 'riscv-xthead.c', 'riscv-xventana.c', - 'riscv-xlrbr.c' + 'riscv-xlrbr.c', + 'riscv-xsf.c' )) common_ss.add(when: 'CONFIG_SH4_DIS', if_true: files('sh4.c')) common_ss.add(when: 'CONFIG_SPARC_DIS', if_true: files('sparc.c')) diff --git a/disas/riscv-xsf-op.c.inc b/disas/riscv-xsf-op.c.inc new file mode 100644 index 00000000000..c8daa7ebef8 --- /dev/null +++ b/disas/riscv-xsf-op.c.inc @@ -0,0 +1,11 @@ +/* Xsfvqmaccqoq */ +OP(sf_vqmaccu_4x8x4, "sf.vqmaccu.4x8x4", rv_codec_v_r, rv_fmt_vd_vs1_vs2) +OP(sf_vqmacc_4x8x4, "sf.vqmacc.4x8x4", rv_codec_v_r, rv_fmt_vd_vs1_vs2) +OP(sf_vqmaccus_4x8x4, "sf.vqmaccus.4x8x4", rv_codec_v_r, rv_fmt_vd_vs1_vs2) +OP(sf_vqmaccsu_4x8x4, "sf.vqmaccsu.4x8x4", rv_codec_v_r, rv_fmt_vd_vs1_vs2) + +/* Xsfvqmaccdod */ +OP(sf_vqmaccu_2x8x2, "sf.vqmaccu.2x8x2", rv_codec_v_r, rv_fmt_vd_vs1_vs2) +OP(sf_vqmacc_2x8x2, "sf.vqmacc.2x8x2", rv_codec_v_r, rv_fmt_vd_vs1_vs2) +OP(sf_vqmaccus_2x8x2, "sf.vqmaccus.2x8x2", rv_codec_v_r, rv_fmt_vd_vs1_vs2) +OP(sf_vqmaccsu_2x8x2, "sf.vqmaccsu.2x8x2", rv_codec_v_r, rv_fmt_vd_vs1_vs2) diff --git a/disas/riscv-xsf.c b/disas/riscv-xsf.c new file mode 100644 index 00000000000..745fcc8efda --- /dev/null +++ b/disas/riscv-xsf.c @@ -0,0 +1,49 @@ +/* + * QEMU RISC-V Disassembler for xsf (SiFive vendor extensions). + * + * Copyright (c) 2023 SiFive, Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "disas/riscv.h" +#include "disas/riscv-xsf.h" + +#define OP(N, ...) static const rv_opcode_data op_##N =3D { __VA_ARGS__ }; +#include "riscv-xsf-op.c.inc" +#undef OP + +const rv_opcode_data *decode_xsf(rv_decode *dec, rv_isa isa) +{ + rv_inst inst =3D dec->inst; + + switch ((inst >> 0) & 0b1111111) { + case 0b1011011: + switch ((inst >> 12) & 0b111) { + case 0b010: + switch ((inst >> 26) & 0b111111) { + case 0b101100: + return &op_sf_vqmaccu_2x8x2; + case 0b101101: + return &op_sf_vqmacc_2x8x2; + case 0b101110: + return &op_sf_vqmaccus_2x8x2; + case 0b101111: + return &op_sf_vqmaccsu_2x8x2; + case 0b111100: + return &op_sf_vqmaccu_4x8x4; + case 0b111101: + return &op_sf_vqmacc_4x8x4; + case 0b111110: + return &op_sf_vqmaccus_4x8x4; + case 0b111111: + return &op_sf_vqmaccsu_4x8x4; + } + break; + } + break; + } + + return NULL; +} diff --git a/disas/riscv-xsf.h b/disas/riscv-xsf.h new file mode 100644 index 00000000000..b15b7aa97c8 --- /dev/null +++ b/disas/riscv-xsf.h @@ -0,0 +1,16 @@ +/* + * QEMU disassembler -- RISC-V specific header (xsf*). + * + * Copyright (c) 2023 SiFive, Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef DISAS_RISCV_XSF_H +#define DISAS_RISCV_XSF_H + +#include "disas/riscv.h" + +const rv_opcode_data *decode_xsf(rv_decode *, rv_isa); + +#endif /* DISAS_RISCV_XSF_H */ diff --git a/disas/riscv.c b/disas/riscv.c index ef8b7ff20f9..d755172164a 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -27,6 +27,7 @@ #include "disas/riscv-xthead.h" #include "disas/riscv-xventana.h" #include "disas/riscv-xlrbr.h" +#include "disas/riscv-xsf.h" =20 /* register names */ =20 @@ -3456,6 +3457,7 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc, = rv_inst inst, { has_xtheadsync_p, decode_xtheadsync }, { has_XVentanaCondOps_p, decode_xventanacondops }, { has_xlrbr_p, decode_xlrbr }, + { has_xsf_p, decode_xsf }, }; =20 for (size_t i =3D 0; i < ARRAY_SIZE(decoders); i++) { diff --git a/disas/riscv.h b/disas/riscv.h index b0269bb709f..4f1ffc4ae02 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -262,6 +262,7 @@ typedef struct { #define rv_fmt_vd_vs2_imm_vm "O\tD,F,im" #define rv_fmt_vd_vs2_uimm "O\tD,F,u" #define rv_fmt_vd_vs2_uimm_vm "O\tD,F,um" +#define rv_fmt_vd_vs1_vs2 "O\tD,E,F" #define rv_fmt_vd_vs1_vs2_vm "O\tD,E,Fm" #define rv_fmt_vd_rs1_vs2_vm "O\tD,1,Fm" #define rv_fmt_vd_fs1_vs2_vm "O\tD,4,Fm" --=20 2.43.0 From nobody Mon Sep 28 00:33:25 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=reject dis=none) header.from=sifive.com ARC-Seal: i=1; a=rsa-sha256; t=1790497621; cv=none; d=zohomail.com; s=zohoarc; b=RBLTF5R2U+ey/icnDmtdZBeH38zDqccCtc+xhNq/b/WThSDDcdFa9u3PLK3xOp/mDiI53CTXIs64RWuBoD3x/l4FLIMG0Wf7HZHBwJSs7Vza6X2UvtPbjz9cOS7clA2iyqJ3ecZBYDm7DYDC8ivqLHKCrk2CCggaYjmG0Z/v48k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790497621; h=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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=RQKjrCAqJCbcZUhefsSNpJKpjiFLd4C1A1Hz/kr1i7w=; b=SYU2yzMLLtBvEsZUPnXjQ47Q1egahr64J5711oIRgEf3NexPxd2jjds0vaIJVB7QazQqozV39teYAVHQYG7qYZvK97LPIxXYoIZl8CYBkbtUKfBfBpOV5j5mwM96vDcn/EZ6URytzHZFVd6kgsqwM23xjsgkxN6Bt0/QaleRWL4= 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=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1790497621850164.47790612462302; Sun, 27 Sep 2026 01:27:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xAkDA-00048P-G0; Sun, 27 Sep 2026 04:26: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 1xAkCx-00045T-1O for qemu-devel@nongnu.org; Sun, 27 Sep 2026 04:26:03 -0400 Received: from mail-pj2-x11.google.com ([2607:f8b0:4864:39::11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xAkCs-0004j7-QG for qemu-devel@nongnu.org; Sun, 27 Sep 2026 04:26:01 -0400 Received: by mail-pj2-x11.google.com with SMTP id 98e67ed59e1d1-396ccd66bb4so928812a91.1 for ; Sun, 27 Sep 2026 01:25:56 -0700 (PDT) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0b9357f64sm14498871a91.3.2026.09.27.01.25.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Sep 2026 01:25:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1790497556; x=1791102356; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=RQKjrCAqJCbcZUhefsSNpJKpjiFLd4C1A1Hz/kr1i7w=; b=Ysoe9Ky0R5U93xZxY++IzHbk4MZd8FjhuPD1jKy8K1CvzYdUnqCX7IPx3A4bDQ262W +CunRsfMv758enDBrKrjijEsdK2GY0qOzxlhHaKnd7S/WnXY+MLhMrIFrLDTZfWeM3Nz 8D+tC54WNbkW1TMBGo4b63teMEkOQZSaUEh8+WwO6YtlMemlPAHvHmcwIMxF5O8j+ftC vuHQwCA48HqDrnF+i9WOuaC0LG48lL7MHaXl6sj9STRT2gNDfSE7/PUQ2Ae7DnABLWzu kSuS6/WL82K3/m0UJFrcIP9gyIBZtddA3+TXq8b6TMRF1nZzjAmGIfsr4hEKIKgOKAdr Oxzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790497556; x=1791102356; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=RQKjrCAqJCbcZUhefsSNpJKpjiFLd4C1A1Hz/kr1i7w=; b=gs7Uorzw0u7h+IB8T0RK/t5FoCOBAbArdQu+RIczp+K0LPREqZe8Njx89gAgNCR9te xCWm3MWLOFi2yUDg/MbJewk8XYGEmqWnkzrerf5rMZ7p9WY49gL346oqg1QQ0gD6mJGM 4VAL8atZdiSlSGsu2Uh6fL0bW1xWjH3rc4EoWWfbF8JxF0ZsR0twh2EK3aXPswPL8/be GiFiu7b9DGmJLhZSi0qsz+SzNzhi51Qpru9YkLnZuUol4PkYrEYfRS1hbDQoGhfmWZZN S857Uc3q18BEGNCnKYRMQYJXDq2JstIvmuKUsLBiiX1t54Aih1OIkN7EkpJmoQiFsaNL 0lzQ== X-Gm-Message-State: AFq9FYI6XE3ThDhVxQTAi8zCNwa4kGmuGVCywYpmTVQTn8IEevnp93/n D0y2miIE7XwWQYd7+uZX2m3OmoEMVxBri0+5ELC+J0NMYieXbw/kioLgR1+Wf9lQPR910r3FgWk 4VwsUhpNqezVm49Bj1I2xIlAgzWhiZMz1OC6OdIcRe1Hz2nDfPTN1CMMbrou25+fCxry5YCaf1t RhFBhP+j1Fz397mFRyUTVo7AYMBiI86HndbYvLCRa5kQ== X-Gm-Gg: AYBFou3AhoSX0BbnROqWS+93uU2pEIpW/fQTu9/tDYoim4AqwM0D6Oxh8CXcSbPTxYM bdhsz39ey6Aix3m6AdbCdzy01V7yYP4Fyy1OUAMHf4qQ3gM+N19WFN71pyqYADZv4V0MQx1aQGE ro6n4lRlEKLilrYhDF7VFQ64CdxgIYacB1hWfstLgmyNnmjBhCLKCtr7yRwmOlC2l9eH/jv3+I/ YhYk2EqeK/AOTkHyMpo60mRD0ERcH4RuyEUDFrZ9w/jJFzBWQMd7w+BPPp7RfWvIruuY+z2gRbT 0irjynkrfiST4Q7LukCkoge/bzR9ShFJmwBfBWYanBNNyHRDyILgsq31z8uqIGQJ1ismyEhHhjr HeDUsEoq/6fOUXTAP64u23B89d4rOv8PnmDh/apNUmxlGVlPNgPTDOCO2OGR/XF5vN/y+nx85xR WG9O3reXTGEe0IglURumEl+vOBTe/53FUTGfbjE9mV5OK9zip6dKxgDtnjHRP2unFqp0eJ5C8rA AtWs7ug5b+fmRpwpnYNmJD7/CL1osGOE1+WnnjotKxvVVtfzNM3BSljX3HWGGs1mTbwc3ZIrw== X-Received: by 2002:a17:90b:35c4:b0:3a2:b16d:928b with SMTP id 98e67ed59e1d1-3a2b16da167mr488623a91.46.1790497555227; Sun, 27 Sep 2026 01:25:55 -0700 (PDT) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Daniel Henrique Barboza , Max Chou , Weiwei Li , Liu Zhiwei , Chao Liu , Alistair Francis Subject: [PATCH v4 6/6] tests/tcg/riscv64: Add tests for SiFive int8 matmul extensions Date: Sun, 27 Sep 2026 16:25:34 +0800 Message-ID: <20260927082534.3228237-7-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260927082534.3228237-1-max.chou@sifive.com> References: <20260927082534.3228237-1-max.chou@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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:39::11; envelope-from=max.chou@sifive.com; helo=mail-pj2-x11.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @sifive.com) X-ZM-MESSAGEID: 1790497623617158500 Content-Type: text/plain; charset="utf-8" Add a test that exercises all SiFive int8 matrix-multiply instructions from the Xsfvqmaccqoq and Xsfvqmaccdod extensions. For each tile shape the test covers the four signedness variants (sf.vqmaccu / sf.vqmacc / sf.vqmaccus / sf.vqmaccsu) and the reserved-encoding path: with vl set to a value that is not a multiple of the tile size the helper raises an illegal-instruction exception. Reviewed-by: Daniel Henrique Barboza Acked-by: Alistair Francis Signed-off-by: Max Chou Reviewed-by: Chao Liu --- MAINTAINERS | 1 + tests/tcg/riscv64/system/meson.build | 7 + tests/tcg/riscv64/test-xsfvqmacc.S | 260 +++++++++++++++++++++++++++ 3 files changed, 268 insertions(+) create mode 100644 tests/tcg/riscv64/test-xsfvqmacc.S diff --git a/MAINTAINERS b/MAINTAINERS index be1c505ac20..9bf7f46fc24 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -407,6 +407,7 @@ F: target/riscv/xsf.decode F: target/riscv/tcg/insn_trans/trans_xsf.c.inc F: target/riscv/tcg/xsf_helper.c F: disas/riscv-xsf* +F: tests/tcg/riscv64/test-xsfvqmacc.S =20 RENESAS RX CPUs R: Yoshinori Sato diff --git a/tests/tcg/riscv64/system/meson.build b/tests/tcg/riscv64/syste= m/meson.build index 2aca68e0782..7f861212366 100644 --- a/tests/tcg/riscv64/system/meson.build +++ b/tests/tcg/riscv64/system/meson.build @@ -62,6 +62,13 @@ tests +=3D { } } =20 +tests +=3D { + 'test-xsfvqmacc.S': { + 'cflags': cflags, + 'qemu_args': ['-cpu', 'rv64,v=3Dtrue,vlen=3D256,xsfvqmaccdod=3Dtrue,xs= fvqmaccqoq=3Dtrue', qemu_args], + } +} + if 'qemu-system-riscv64' in emulators tcg_tests +=3D { 'riscv64-softmmu': { diff --git a/tests/tcg/riscv64/test-xsfvqmacc.S b/tests/tcg/riscv64/test-xs= fvqmacc.S new file mode 100644 index 00000000000..a116712e502 --- /dev/null +++ b/tests/tcg/riscv64/test-xsfvqmacc.S @@ -0,0 +1,260 @@ +/* + * Test the SiFive Xsfvqmaccqoq/Xsfvqmaccdod custom int8 matrix-multiply + * extensions. + * + * The eight instructions widen 8-bit integer inputs to 32 bits and perform + * a matrix-multiply-accumulate into a vector of int32 accumulators: + * + * C[j] +=3D A * B[j] + * + * Xsfvqmaccqoq (4x8x4): A is 4x8, B[j] is 8x4, C[j] is 4x4 int32. One mat= rix + * operation is performed per 32 elements of vl (TILE_SIZE =3D 32). + * Xsfvqmaccdod (2x8x2): A is 2x8, B[j] is 8x2, C[j] is 2x2 int32. One mat= rix + * operation is performed per 16 elements of vl (TILE_SIZE =3D 16). + * + * The input tiles below contain bytes >=3D 0x80 so that each signedness + * variant produces a distinct result; the expected int32 tiles were compu= ted + * with an independent reference model of the specification. The accumulat= ors + * are cleared before every operation, so the expected value is the pure + * matrix product. + * + * Test exits via semihosting with status 0 on success, or the 1-based ind= ex + * of the first failing operation. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + + .option arch, +v + .option norvc + + .text + +/* + * Run one 4x8x4 operation: load the 32-byte A and B tiles, clear the 4x4 + * int32 accumulator (vd =3D v4:v5, EMUL =3D 2), execute the op, then comp= are the + * 16 int32 results against the expected tile. + */ +.macro RUN_QOQ id, word, exp + li a2, 32 + vsetvli t0, a2, e8, m1, ta, ma + la t1, a_qoq + vle8.v v1, (t1) + la t1, b_qoq + vle8.v v2, (t1) + vsetvli t0, x0, e32, m2, ta, ma + vmv.v.i v4, 0 + li a2, 32 + vsetvli t0, a2, e8, m1, ta, ma + .word \word + vsetvli t0, x0, e32, m2, ta, ma + la t1, result + vse32.v v4, (t1) + la a0, result + la a1, \exp + li a2, 16 + li t6, \id + call check_words +.endm + +/* + * Run one 2x8x2 operation: load the 16-byte A and B tiles, clear the 2x2 + * int32 accumulator (vd =3D v4, EMUL =3D 1), execute the op, then compare= the + * 4 int32 results against the expected tile. + */ +.macro RUN_DOD id, word, exp + li a2, 16 + vsetvli t0, a2, e8, m1, ta, ma + la t1, a_dod + vle8.v v1, (t1) + la t1, b_dod + vle8.v v2, (t1) + vsetvli t0, x0, e32, m1, ta, ma + vmv.v.i v4, 0 + li a2, 16 + vsetvli t0, a2, e8, m1, ta, ma + .word \word + vsetvli t0, x0, e32, m1, ta, ma + la t1, result + vse32.v v4, (t1) + la a0, result + la a1, \exp + li a2, 4 + li t6, \id + call check_words +.endm + + .global _start +_start: + /* Enable the vector unit (mstatus.VS =3D Initial). */ + li t0, 1 << 9 + csrs mstatus, t0 + + /* Route synchronous traps to trap_handler (mtvec direct mode). */ + la t0, trap_handler + csrw mtvec, t0 + + RUN_QOQ 1, 0xF220A25B, exp_qoq_u /* sf.vqmaccu.4x8x4 */ + RUN_QOQ 2, 0xF620A25B, exp_qoq_s /* sf.vqmacc.4x8x4 */ + RUN_QOQ 3, 0xFA20A25B, exp_qoq_us /* sf.vqmaccus.4x8x4 */ + RUN_QOQ 4, 0xFE20A25B, exp_qoq_su /* sf.vqmaccsu.4x8x4 */ + RUN_DOD 5, 0xB220A25B, exp_dod_u /* sf.vqmaccu.2x8x2 */ + RUN_DOD 6, 0xB620A25B, exp_dod_s /* sf.vqmacc.2x8x2 */ + RUN_DOD 7, 0xBA20A25B, exp_dod_us /* sf.vqmaccus.2x8x2 */ + RUN_DOD 8, 0xBE20A25B, exp_dod_su /* sf.vqmaccsu.2x8x2 */ + + /* + * Illegal-instruction reporting test (op 9). + * + * When vl is not a multiple of the tile size the instruction is + * reserved and the helper raises an illegal-instruction exception at + * runtime. + */ + la t1, trap_mtval + sd zero, 0(t1) + la t1, trap_mcause + sd zero, 0(t1) + /* vl =3D 16 is not a multiple of the 4x8x4 tile size (32 elements). */ + li a2, 16 + vsetvli t0, a2, e8, m1, ta, ma + .word 0xF220A25B /* sf.vqmaccu.4x8x4, traps */ + /* The handler skips the faulting insn, so control resumes here. */ + li a0, 9 /* fail code for this check */ + la t1, trap_mcause + ld t2, 0(t1) + li t3, 2 /* RISCV_EXCP_ILLEGAL_INST */ + bne t2, t3, _exit + la t1, trap_mtval + ld t2, 0(t1) + li t3, 0xF220A25B + bne t2, t3, _exit + + li a0, 0 + j _exit + +/* + * Machine-mode trap handler: record mcause and mtval, then advance mepc + * past the 4-byte faulting instruction and return. + */ + .balign 4 +trap_handler: + csrr t4, mcause + la t5, trap_mcause + sd t4, 0(t5) + csrr t4, mtval + la t5, trap_mtval + sd t4, 0(t5) + csrr t4, mepc + addi t4, t4, 4 + csrw mepc, t4 + mret + +/* + * check_words(a0 =3D result, a1 =3D expected, a2 =3D word count). + * Returns to the caller if every word matches; otherwise exits with the + * operation index held in t6. + */ +check_words: +1: beqz a2, 2f + lw t2, 0(a0) + lw t3, 0(a1) + bne t2, t3, 3f + addi a0, a0, 4 + addi a1, a1, 4 + addi a2, a2, -1 + j 1b +2: ret +3: mv a0, t6 + j _exit + +/* Exit through the semihosting SYS_EXIT_EXTENDED call with a0 as the code= . */ +_exit: + la a1, semiargs + li t0, 0x20026 /* ADP_Stopped_ApplicationExit */ + sd t0, 0(a1) + sd a0, 8(a1) + li a0, 0x20 /* TARGET_SYS_EXIT_EXTENDED */ + .balign 16 + slli zero, zero, 0x1f + ebreak + srai zero, zero, 0x7 + j . + + .data + .balign 8 +semiargs: + .space 16 +result: + .space 64 +trap_mcause: + .space 8 +trap_mtval: + .space 8 + +/* + * A (4x8, row-major) in bytes [0, 32) of vs1. + */ +a_qoq: + .byte 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x80 + .byte 0xFF, 0x01, 0x00, 0x02, 0x7F, 0x03, 0x04, 0x05 + .byte 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x08 + .byte 0x00, 0x00, 0x81, 0x00, 0x00, 0x02, 0x00, 0x03 +/* + * B (8x4, row-major) in bytes [0, 32) of vs2. + */ +b_qoq: + .byte 0x01, 0x02, 0x03, 0x04 + .byte 0x05, 0x06, 0x07, 0x08 + .byte 0x80, 0x7F, 0xFF, 0x01 + .byte 0x00, 0x10, 0x20, 0x30 + .byte 0x02, 0x02, 0x02, 0x02 + .byte 0xFE, 0x01, 0x00, 0x7F + .byte 0x03, 0x00, 0x81, 0x04 + .byte 0x40, 0x50, 0x60, 0x70 +/* + * A (2x8, row-major) in bytes [0, 16) of vs1. + */ +a_dod: + .byte 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x80 + .byte 0xFF, 0x7F, 0x00, 0x02, 0x81, 0x03, 0x04, 0x05 +/* + * B (8x2, row-major) in bytes [0, 16) of vs2. + */ +b_dod: + .byte 0x01, 0x02 + .byte 0x80, 0x7F + .byte 0x03, 0xFF + .byte 0x00, 0x10 + .byte 0x02, 0xFE + .byte 0x7F, 0x01 + .byte 0x81, 0x04 + .byte 0x40, 0x50 + + .balign 4 +exp_qoq_u: + .word 0x0000279e, 0x000029db, 0x0000371f, 0x00003bf7 + .word 0x00000648, 0x000004b5, 0x00000826, 0x0000091f + .word 0x00007be0, 0x00002030, 0x000074f0, 0x000042f0 + .word 0x0000433c, 0x000040f1, 0x0000819f, 0x000002cf +exp_qoq_s: + .word 0xffffde9e, 0xffffd9db, 0xffffcd1f, 0xffffcbf7 + .word 0x00000248, 0x000002b5, 0x00000126, 0x0000051f + .word 0xffffebe0, 0x00002030, 0xffffd4f0, 0x000042f0 + .word 0x0000403c, 0xffffc1f1, 0x0000019f, 0x000001cf +exp_qoq_us: + .word 0x00001e9e, 0x000029db, 0x00002d1f, 0x00003bf7 + .word 0x00000348, 0x000004b5, 0x00000426, 0x0000091f + .word 0xffffebe0, 0x00002030, 0xffffd4f0, 0x000042f0 + .word 0xffffc03c, 0x000040f1, 0x0000009f, 0x000002cf +exp_qoq_su: + .word 0xffffe79e, 0xffffd9db, 0xffffd71f, 0xffffcbf7 + .word 0x00000548, 0x000002b5, 0x00000526, 0x0000051f + .word 0x00007be0, 0x00002030, 0x000074f0, 0x000042f0 + .word 0xffffc33c, 0xffffc1f1, 0xffff829f, 0x000001cf +exp_dod_u: + .word 0x00002795, 0x00003155, 0x00004642, 0x0000c2c0 +exp_dod_s: + .word 0xffffde95, 0xffffd955, 0xffffc042, 0x000041c0 +exp_dod_us: + .word 0x00001e95, 0x00002955, 0xffffc342, 0x000041c0 +exp_dod_su: + .word 0xffffe795, 0xffffe155, 0x00004342, 0xffffc2c0 --=20 2.43.0