From nobody Wed Aug 26 07:25:03 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=1786556694; cv=none; d=zohomail.com; s=zohoarc; b=fCBjhaSOTEwmi9GwEZtSLqgS4rUJC5IXzoAtDOEeyODsc8qdcwG0AfcwbefKJY4i7LN1HifcVAE7TeJrqRVPshtBPmMvms7lsVc2UPklP7GPGuMJjinAJIpK3RXE6gTqf1iKuFwqOwCp2zjHL4ZfyTqqiUYB42sZD8vkuE/d6sM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786556694; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=mnhPT0S/XDH+pcuuXbxPW4eZbhXoqpil5cHfkJ/4zsw=; b=acMHXo9hK/SJ5UXgBvADB+3+pUNbSQcE10ukmG1YgJ6okcsmuRvFgzxYBnjLV+1bNuehlxuUz2a/CzfJoFy2h2UZabEGGnpuF8ujbsbwSEriuyN68VC1vR0pCKpLfBiOaPZDLxlk0e6bPTpL5GyANQAlQrFi8WOxdUgqDUMfMOo= 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 1786556694928904.5563617686498; Wed, 12 Aug 2026 10:44:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuD0N-0002s0-Hj; Wed, 12 Aug 2026 13:44:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuD0J-0002nx-Tv for qemu-devel@nongnu.org; Wed, 12 Aug 2026 13:44:40 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wuD0A-0007bu-Rr for qemu-devel@nongnu.org; Wed, 12 Aug 2026 13:44:33 -0400 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-38e08baf860so1491942a91.2 for ; Wed, 12 Aug 2026 10:44:29 -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-3931db13c3bsm13210a91.3.2026.08.12.10.44.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 10:44:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1786556668; x=1787161468; 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=mnhPT0S/XDH+pcuuXbxPW4eZbhXoqpil5cHfkJ/4zsw=; b=WudrXyG6tYJOcsRTlVDAjQdcIJDgPnzBEe/u3+8uzeCM9jHMKiTaWJTCrhQTgGWDpZ 1krCUYenc0cbMlUS5JFsOHKA150P9HJr9/wu5S1yZLsKDXUClR3ACCtgW3UYLzgfph2w hfCX8aTcNuPMiXGexfv7sSAAzn2qtM/puzHPCVp5D7khSgElPdnFEFT4DBMSafb1wsgs gZZHNIMjIiZKwmPHUthCEJHR9U5i0ofBpE1mA/M0og2AO3bsR0ERR3zqPMXU2IvL59D4 HrTmB4JoLFObTiyOEwFto6BAV5x6mEFatrqIkySHnQusYaRPXNPcdPJqC6LZkgAoZenx r8ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786556668; x=1787161468; 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=mnhPT0S/XDH+pcuuXbxPW4eZbhXoqpil5cHfkJ/4zsw=; b=DWNZ4O+IdNwc/dYZbC5+SCHEQxaw6RuuN9yBEYnUJQNMFEV/CfqflcDm7uTu0YssLC sF+hNgcQHat5cOVkFFci60qseSkfw/C5LQpCC8ibrWb8JOlUqqPVCYpbnKWPmpANiYUm 4QukrMC13LVbBxYrQc3GvoHQLc8XBRMGNMiJPXLq2Nmow4c2CPjZhT6dPXYclxSC5s3P 89UzRAwkGjXslQSzQ2cnQPJbk4e1lLaAgnmo8ko3tRiTEEgxWGJ3oPMr2zGtg40ujA2w q50caIZ7c6ovj9JHLkm/e2OFgV/+bNmoS/3Js8xgJ/pgBfRlJGQpOR2kNoKmEz7LlL84 qTbQ== X-Gm-Message-State: AOJu0YxKn4WFEFzuxBkbhkp3dbnEzQaMQa0L8ATg6E23AwjDp4D1Wnw1 /GqCm+UXSxVgDHLQQHe4fPjaCbU87ny75SXyPcYPIYi96mUxdVFUWXxEUGOmMIAUV0AiI6Th8v4 AWQ9k04QUwiST2D6KH9RYZrGBdQrR6EBL2HRpT3vQtlzdRYbcIdBLH/b/XuyMMhwmAR/29P5QP8 XNsra/nqtejnFn0ARJPiTpXKfcg3n8tfWHa47P9Xk= X-Gm-Gg: AR+sD10KfQxJf6BhyfG88d7NsVGRYSOBaORw0dTbBT+Yc/bCcye0CxnGvrxSVP6cl7y g6d3q5CpF94fQjdzE+sk4AurcYNQBMKe2EkDzAdEBRHARUCtThDbvCqVaI2rJr5KLGEQEKdo9SC Yyc/7mYRlBm0NldBF2j40b5RImv2LOjnpDrl6HOJPTWSyADBuLy2QIb3V0yQTvPW94b7NDBknxV MKnL66F6tdRZ2v1gCUWzS3naXGknRCwEvuL56G+qeHqcB0WIagtNJ6bwj8wQ3zNb4BGJPknFpPO zWHXfPNH1ICTaqtw9wd/IaQR0QCCbc8mfa0B+1cikTDWKcdvbQggBdfocbcGdms9GYGbhfxKYiV 5Z1EDResthr9Jm3h9TEYXjzKTOTvSymgLxlgUlJ0R2ArN05WaYbYFmgoZzNy3BNozqsvyXO4XfH UwIG/sZPrujY0RGWGl3xfcHZ5fraPAnSAQ+ThzuQnS4uWIlgXM4CDzK7Hfx5JOoPVcFYP/BNyoT l3GUUJkWTg56kQAaAgKUifuzil+sxD000g4qyqMIWQ1if5DYPrcMil/Rpr/Y9m6 X-Received: by 2002:a17:90b:4ccd:b0:381:1c96:829b with SMTP id 98e67ed59e1d1-3930124d046mr8362986a91.3.1786556668073; Wed, 12 Aug 2026 10:44:28 -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 v2 1/6] target/riscv: Add cfg property for SiFive int8 matmul extensions Date: Thu, 13 Aug 2026 01:44:11 +0800 Message-ID: <20260812174417.2468981-2-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812174417.2468981-1-max.chou@sifive.com> References: <20260812174417.2468981-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:20::102f; envelope-from=max.chou@sifive.com; helo=mail-pj1-x102f.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, 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 @sifive.com) X-ZM-MESSAGEID: 1786556697718158500 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(). Signed-off-by: Max Chou Reviewed-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis --- 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 5a82e6563bf..e643d7c7af7 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -298,6 +298,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 9eb47af0a76..73448fab5e7 100644 --- a/target/riscv/cpu_cfg_fields.h.inc +++ b/target/riscv/cpu_cfg_fields.h.inc @@ -156,6 +156,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 4af5cd9c731..c90023a2120 100644 --- a/target/riscv/tcg/tcg-cpu.c +++ b/target/riscv/tcg/tcg-cpu.c @@ -417,6 +417,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; @@ -794,6 +804,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 Wed Aug 26 07:25:03 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=1786556786; cv=none; d=zohomail.com; s=zohoarc; b=Fz0TlZWS6EfgP5H+X9qkBvA59v673ww40mTWZnIxf1b9yOpCNf+thULw8HnURbT0fgmnIXAtsXsyMkdTJ9Tv//JFkImU136g4N4mCGAYwH2ibYnMtM4ClyC66PAQ0Uc3inSdjWR6WERfDGa3hzZ2LWxhug/2Vvs8De+4U/ODdPA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786556786; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rOQkVidkXGCU4X6LBKsJvJHPV73NIi57GitFKMqrLX0=; b=WxdaZ3GWff3wcgh8MYy6bqhzWeleBibBHv5s7UoFNAilm6KrJnj3+vAp9XPDz4XwuSUmMA+6zKpp0pWNtO/cpP3GapxJbPLGmeXdxlTiJynahuzJKBEfoHj2WbaVn1X9Om2DCHwUqKKUO1knnn2N1HQ+GN38a4pbIZgzRJjuelI= 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 1786556786431809.1707886207033; Wed, 12 Aug 2026 10:46:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuD0T-0002tZ-1y; Wed, 12 Aug 2026 13:44: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 1wuD0K-0002nz-7W for qemu-devel@nongnu.org; Wed, 12 Aug 2026 13:44:40 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wuD0D-0007cZ-Qm for qemu-devel@nongnu.org; Wed, 12 Aug 2026 13:44:39 -0400 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-38e7109321dso1110997a91.3 for ; Wed, 12 Aug 2026 10:44:32 -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-3931db13c3bsm13210a91.3.2026.08.12.10.44.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 10:44:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1786556671; x=1787161471; 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=rOQkVidkXGCU4X6LBKsJvJHPV73NIi57GitFKMqrLX0=; b=U4Z3/TV7+O2mhdO9r1Bc3fWPjxSbssWEwKU1SAKEdNkH7IHDn+5jGfPy6tPRttakh+ b+freKjm6suBEX1aDrR3sut7VSWEhKnO6MTF+WZFaLSr++wLrssixjI0RRbfqMoIb0hI 8k17X6osH6/5U5sHAUWGzxx7EAGL4HAspbnPjIsCWLzFC1ntOAeUtlg8+fVgw0Zu6b0M P1ASKLtteGg3gpV+av2heyviWjJpYankhNxpLt4hTVbMFJDPHbOp1j/5crW1EMf1CKEd cyv6A4wszcZ0J/bVT1aV9dzbSMsA8xjOJU1UV7oZ/a8eo08UihQJsQIH/YYvHYvzj0UC vV/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786556671; x=1787161471; 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=rOQkVidkXGCU4X6LBKsJvJHPV73NIi57GitFKMqrLX0=; b=Kb8tlHPrHslbnR96bKzqKIFaUKmktsprFrCxGT7VOw41MMAjA4Ykow7oAL+aL9/n1w 5YtJaQIvQxqb3yDcDehNVs5KpTZCtLMAPUfPyKFx+MTINtJVhd7Zcc6KYkOLE9JI/j9M Hb4q46zqaD1oddjfZ1z/pJxtayZIwJjKYlCVK687HY2Qq25QqFOqrLeIIag+XbQ4LaRl QU1h81VCurLL33Ut+IVLlGMm+mSTOFZ8qRVie5OqqC3FD38riJqgmgCeuMpOoTS/n5x6 D6QeKPsu8yfS1RBqMPwr9CefLSXXFNJxTw46jbQ0SbsUaCn29qUMR5nmuEgJBxIOJL+Z Elbg== X-Gm-Message-State: AOJu0Yxq8Y1HeM8P7DEYvRm/DYrVhxSWcx8iA1dAeWomjL4InOEyHXM1 T7HCMHEi7GXLh3fXS5iCzk6pryzMhsIGowKJQX27wREy4KI6zpSH3Q0obmd061FFsSC4iidoTp6 o+hPZ+eDosXoYSdOaQw/UXmDNtsSbwsKUJH4t9c2StAQMVMzZZ5e1aQU5BX5ODwyUofUXg+0RPy fnfspvGna167XfXqJJCmq8qll6b76II4xcRTTpHxQ= X-Gm-Gg: AR+sD13HzvKDrFYiW9cHabAUJkIDoDm/Kdsa19m5PxO4YyKefNBpa7G4rMsJaG8un0p EjGaRtBQt53+1X+iFFlf+zRC6zfI35IsW08VazeDc59DjqKeuyya4tJAB8ivz96eLaf1iNXtJyU Qk4E+IY6LK6ajMWTErcFWmMKrRLIeBGbl2IoKqU+jwXKku6P85HgeSc59GMxRo7c8MNmnyTu4iq bPO3q+7qFSvRNzFcjtCJniilTKXJ4dPm/5+Mqvt5P6ngkuslc/d+bCx/kRlpsaGO4niXNj4xyN/ vbu3Nj1Wvp8A9yBy4PO/BlPbmsflb9uTQbEVJM2pnQKTEDsiTjo0s+R6UJocAQFRidvcyO5TzZ3 VGKffyjav6JNxZGKE31tn1JNGFPyM4bGKNJeyisijYHC43N92edEvvx2ShFBYt5Fqp8gFhjHw3b Hp1dweW4juqFh4NHRfFEliQCXoiDD4OsobvPVnqsoKzXGyzxDQLv85JBN7qWuVmZw9et745Bs7/ LIbzYKKlFKcMY9A4EHzCKFoiZ7u1Oq7ZfQlETqcesqDqWglLdVUk568pwI7G31p X-Received: by 2002:a17:90b:38d1:b0:380:21b7:e727 with SMTP id 98e67ed59e1d1-393014cac5dmr6841255a91.14.1786556671046; Wed, 12 Aug 2026 10:44:31 -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 v2 2/6] target/riscv/cpu: List one implied-ext rule per line Date: Thu, 13 Aug 2026 01:44:12 +0800 Message-ID: <20260812174417.2468981-3-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812174417.2468981-1-max.chou@sifive.com> References: <20260812174417.2468981-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:20::1029; envelope-from=max.chou@sifive.com; helo=mail-pj1-x1029.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, RCVD_IN_DNSWL_NONE=-0.0001, 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: 1786556788029158500 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 Signed-off-by: Max Chou Reviewed-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- 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 e643d7c7af7..fffb92ff110 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -2818,20 +2818,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 Wed Aug 26 07:25:03 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=1786556778; cv=none; d=zohomail.com; s=zohoarc; b=Gl+IaA3DwEOKOQAFP+3dPoE01/WH/cVMGanx7tbyYpfd+lTSbvnsr4QTcH6XjxgH6z+RIQFM7KmAckgxsWfflwsQwAzYBOP3CD63yEsLzGmw1kiil1hqqLRk09wgr1B19K38B9OJfgXk+uoRHxo3cSVzXACpfMZexvfLtpHtB2g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786556778; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gzDpG69c0U/dBiv0BSn17OfVNnj4yY7pxo9nq5cILcc=; b=ne9tDLAsIwGrg11BHBvGLBVQp7/+JI9LEkgYFygkTLsMq4OfFUn5qvS+zNk+bLKeQ+RkA9bViZWuwxkr1YyL8yNgQ/cPWwnQNM1JClFODdseuncvH4nTrXjwPFF2hpK/MNybUcsu94IePqFrHVPsCPTAsp27UOpMCaM+xGIFQ/o= 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 1786556778000234.83138906286842; Wed, 12 Aug 2026 10:46:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuD0a-0002yk-Tz; Wed, 12 Aug 2026 13:44: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 1wuD0L-0002qR-FG for qemu-devel@nongnu.org; Wed, 12 Aug 2026 13:44:43 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wuD0J-0007dD-L5 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 13:44:41 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-381b831d535so2164232a91.0 for ; Wed, 12 Aug 2026 10:44:35 -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-3931db13c3bsm13210a91.3.2026.08.12.10.44.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 10:44:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1786556675; x=1787161475; 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=gzDpG69c0U/dBiv0BSn17OfVNnj4yY7pxo9nq5cILcc=; b=IUYDfi/t/vlewy7jN+SYY2zR1+lTmpN1OHUBgHGt/xUZo+kO23w7izSC7Hr9CXZN/W iQD0cFIHuj+ZoIprm1XwNR1jiX3yJ33sDrD+EMxGFdHlQA1/BeDkANO8kYw1OhQe5DSi VU0kukBmXxc6Rz0CiSidz4v+V9MzGUBhh7/4P8+gyvVrQH+c1S+Pu7hoWYG8Kbr2k0dS zFPOL0EtX7QMy2ShE3UQ+CWBuEqBM3KTQY1zvC6StAD8Kb29g+76gWn9gtbB0svkgClX lmkO8alqt1nk6kw+bUz5z8NZ+P29KJj5+XiyG8PxBq3GxE9JYJ5TXt9S2avuGcBdFGdC LadA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786556675; x=1787161475; 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=gzDpG69c0U/dBiv0BSn17OfVNnj4yY7pxo9nq5cILcc=; b=kP2fiLULvUToq4Xzt6IvKsC41IKZSpwbQFku6jTfVJJmUdLGqiG57dQunKBN19e/UT ZRXO9ocVCdZDcOfYyt41G/+plGRROdJzQg0NX362YuuWQuw5TRt00Ik2UGmtiKZU2dOS PWTx72hXShYGiSxqttNvss7W6ddSJUjAxKDOJjUBSK4OTAqpRJfyHnT32AiqWNn+cn06 0PuwXBEGwIaNhNUlqb4JLe3AHDyCk/m8FSjvozZiuKpoP8pJKYZspAs2QJeXaD8EUwpQ S6lJ7FrySfqHTCI5ELK2pi+EH4H1taJ9Sa2fXot5r2YcL/rVPxPl2NuBBmnq77TCL27H P0QQ== X-Gm-Message-State: AOJu0Yzxlrv3TXRyCK1zFlJP4ovflXxKyjwmNnmCDqpzEVcpoEO/JzRr ABBoxLxODpnW0pAYHeMbAkjqW8eWVJDvL1EfWQnnCvhOPGKKxfSpM7tDovRau52mSXNFk20/dch frPYA4OEt/7Am6MpyK0H274tz+LN5oiRSeySqRoP0Uf49qaJNTPd6nQ2ozmhhNvUeQdoDg48Bjs 9ndseX2CnX4aM+MczqQUEx4K6dTHNeTCtxRHK1npo= X-Gm-Gg: AR+sD118yxMHGoSBEeQkRFom6XWRmP0zlx5O3e+8Y6pYhWgxCsvcCMFaaK4+T2aUvlj dWWPY22NDIb/qc2TrLNuCrh5vf0gN+NgRY14Qo/oScNF6leERmGeUkvKQGxl5UQjqP6A/z9I+h8 Wug8nkVYtOaEDlbGdf+p4sMBCMTBozvnNbNLUHi9GxBoaYzvKuB7aGBAgSDjKroMd9cV5UwqF2y qbvvkOZAPOf9IjsyYBdAnkIZmPqHMmmhw80L7TU+c1xYgfrAjNkyUMC03BCy7Q093N5rZPBhqxW hRKjXUhY7o+RL+u37mNs268rPOTpjPHZFrqZf4ZUg5rwVGINbMWAbmSArhZh6mbfHCd3RcL6xoM iYlKx+mxBodJqJGJUhEv0htyC3ge7KOQ/mMUSwPBpZqgrd/E2Xa0l/k1QIAPRGIJQ4sRACzt1CS gaZHtwDoYPfmqenlS4n9QSZS0RwQTiqfNQ0xTpc8PWyP8uTEMxjHKibSLHAZcn+/By/lv15FMrw aCIFTAmd5XhFJYPexPR648UhcR4/bFAdkha54+Ij3LIe4MQMlS5q79DBI0Z0y3g X-Received: by 2002:a17:90b:1f90:b0:380:fead:448d with SMTP id 98e67ed59e1d1-39301416e89mr7931944a91.13.1786556674645; Wed, 12 Aug 2026 10:44:34 -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 v2 3/6] target/riscv/cpu: Add SiFive custom int8 matmul extension implied rules Date: Thu, 13 Aug 2026 01:44:13 +0800 Message-ID: <20260812174417.2468981-4-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812174417.2468981-1-max.chou@sifive.com> References: <20260812174417.2468981-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:20::1032; envelope-from=max.chou@sifive.com; helo=mail-pj1-x1032.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, 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 @sifive.com) X-ZM-MESSAGEID: 1786556779688158500 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 Signed-off-by: Max Chou Reviewed-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- target/riscv/cpu.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index fffb92ff110..265a92a8b7f 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -2811,6 +2811,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, @@ -2862,6 +2880,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 Wed Aug 26 07:25:03 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=1786556733; cv=none; d=zohomail.com; s=zohoarc; b=hwgv4yIYf78ftJXtbI344/tbrP3kboDO/VI4Rr9YpnkT/03kqVJ5P+KZNWmIVnnHXlyt0Cw90LOTvaWDOjlgqBeWmQV/8556ouCEZ0T/JQN3YhABvaWHMJe8w/n7K9bpIE+RURaeFgvGmImZrT80Aiq4g0+/Zt4GCMuNudWHoF4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786556733; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=bOfQP/P1K7kFj3ubNy1v4DdxRk8JtgxA6LtLrm9P4BM=; b=Wvzj0cI08MoCUC+lUXOMUbW4mdGBUcIY0A0iutD72zMEFwH+4MFWBcHCP53n5CwUNN6zD3KjD52cATNNSSNEe9i/I8r2lOtxDgKW2YBTHxGpxfzHW2l2mC95LfUSGSl5hvcJ5LzblstvD5DTeiZ/xAYg9pU42geq84ZTGtaypiA= 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 1786556733665910.4665376354476; Wed, 12 Aug 2026 10:45:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuD0b-0002zk-OF; Wed, 12 Aug 2026 13:44:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuD0N-0002sL-OW for qemu-devel@nongnu.org; Wed, 12 Aug 2026 13:44:45 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wuD0J-0007ds-L8 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 13:44:43 -0400 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-38deea72eebso1435293a91.1 for ; Wed, 12 Aug 2026 10:44:39 -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-3931db13c3bsm13210a91.3.2026.08.12.10.44.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 10:44:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1786556678; x=1787161478; 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=bOfQP/P1K7kFj3ubNy1v4DdxRk8JtgxA6LtLrm9P4BM=; b=bS4+I2iW1PEM4wvMCtaFgIqMdv3ir5W3+rerQNaHT/WVChD0L3D3WT7WPn856eZA/L B+EjUg21dsEK7g72TEyzyEjRM+kUb0mtY9HON9AsqQMQdapWjJyHT1wQmzamSGCmF9OF j9pr+TAGsMgSAvY0GYq5ZLZvGPlfxNmt9Vj1ZYMuLfjt6P9AKsQtsHPVAlURhdxa5yeZ 7woDQMATTB6UlBosoF0DptuhkMLGH11orJC8DIWshJy8NG0pMJ84ocvmde4PVyF6jXMi ra4KqvAeCBFwYv66jiI5dkUi8tbALxT4wyjFVvKkLJ+rbkqHMsYEPE3EUrFikrMKozZm MjIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786556678; x=1787161478; 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=bOfQP/P1K7kFj3ubNy1v4DdxRk8JtgxA6LtLrm9P4BM=; b=OjpS3HLWMNAOVlKTw0E+NVPjQtKarILVVVomPM+6jHG/UMeMG8IfbqkK0Bdkz++i2s dPOpmtyhdStRkd9ZnqziMTUHsiQlUaFFfRHx7m4QjRkBNccoZYxY73MqBacC4/e/VM4B lXVWtgsixlqGt/UvCJkfbcQ+YnhYUZo1Vj5/+u5Oz4kFt361ywb2krc4PRNFfAgxw4lP V8gLSssE0j4vMrwJLBPDekxHJe1sia7tzr3WvDjmJtUL4z4+P1D4tgtimI7AgGRCluXj Wl9ZfBwLfnzZZsHCLgdaiQZZc2jWay95R7mmy4vpWTXpYBBTdfU2JQSn18y54VBL1CCb wl4A== X-Gm-Message-State: AOJu0YywYRL50uFJGeiaaRe06Gv8rwfqQUG0tjnJwikNTTh2wJbQtgDD AElNDNjyiGcsaTIYWvyn2veIicUSXCYIEjNSyGfNbNOuVV0OiiSo6Fs3YVXgF0NaHrM4q/tpsts O1RjwjRziDHCC47hf8DWDW+UzTSvejBKrXL5FexJeHsZGgPeXPCGQ+I8JIL+edEj30gmh2moUGb tC5maGLZMSR9Q/MDfrcX87gtwOd6HVRf48HQX6zIs= X-Gm-Gg: AR+sD11uPn6xXhX8Hbxq8BLvb68j9wmHcZJlv/+oJbQLhmb3rthRUeQr2z6lL+A01yE mxL+/ARqFH9K6IbbQOg3XpdehjKZAXEfyXBOm7hJQ3oY6ct8i5WsLQNFPRb6+PwCxxbl5fPaEwl hxxfBsk4RxANgbS3W45vUWAz09/qeTUKCYQH8SrHnmRz47kEMT1OhhQQFGLtKBNChlqbpbiLx0j pp/XvFT7aSw2ZSSutKZcPSy6m4cgeudq+M1v3Gn6w4ULEQVW9/9n53vRuHz9AswH6fvfVHAboKm OOcECOj6mbr+IPAAwpxnh9QcTbaWYbojGU6KqTvtwveZUnsQaxCJfB0tPbguUDiKHCuJ1kepton AFYj7Xhew4zQjZNBKYFrt/Zqz60k8ubpWREE87rm5NdAYxZNPWlJtYA0qPggo4L8mhMVjPSXc9k ldQrD8oUTTeBQvF5n0E6ibRPhUt/cJ0qW3+uBvkAAOH5hp0YdP6ndZ+E1eUYPPXZcLHB0gAHUXR B/Azxou8EQCjk+8Ul3ilg5OE9YWOSrper1118liJ2yA86goo5cmCTr9KyCygMFO X-Received: by 2002:a17:90b:3907:b0:381:a766:efcc with SMTP id 98e67ed59e1d1-393014f6cc9mr7170205a91.14.1786556677945; Wed, 12 Aug 2026 10:44:37 -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 v2 4/6] target/riscv: rvv: Add SiFive custom int8 matmul instructions Date: Thu, 13 Aug 2026 01:44:14 +0800 Message-ID: <20260812174417.2468981-5-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812174417.2468981-1-max.chou@sifive.com> References: <20260812174417.2468981-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:20::1029; envelope-from=max.chou@sifive.com; helo=mail-pj1-x1029.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, 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 @sifive.com) X-ZM-MESSAGEID: 1786556735980158500 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 Signed-off-by: Max Chou Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- 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 902db77218e..9c9f9bd645a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -391,6 +391,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 542b7c264fc..4234f462716 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -1358,3 +1358,13 @@ DEF_HELPER_1(ssamoswap_disabled, void, env) =20 /* Zalrsc SC write probe */ DEF_HELPER_FLAGS_3(sc_probe_write, TCG_CALL_NO_WG, void, env, tl, tl) + +/* 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 42d0f6d538a..c06526adb26 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 9684dbe7528..41e3dd2fe21 100644 --- a/target/riscv/tcg/translate.c +++ b/target/riscv/tcg/translate.c @@ -1216,10 +1216,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" @@ -1240,6 +1242,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 Wed Aug 26 07:25:03 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=1786556782; cv=none; d=zohomail.com; s=zohoarc; b=b8DFiuo475KAqqBQjlv3tYnE0dh8atTaNbUKG3+nWj7N0BKZANhqJXJxDJ4oJ6mKExvtSSB6bSSD2fA8Ab8RyuH17HCiPOEeQFnUvg53w1Fvd6tgJKpY8WgADHbjTxk9NooSBKrvl2Ov//61w3kqPL7Eb1zIW7+vztWn/a0RfaI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786556782; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=aO5xxvr129FUZ2xUaJTsH6Cn2QzOV43OYa6AnAgzYN0=; b=KlI6vLo5uXNGnKRZN3jn6oa0wu6wluvcijoz3L0/XZREVxzeHyvTQFVtcnbfLufDpazWbTxtDr33BT36cgZZWuvRRq6G5ebc+CsWLMZ/Uk7CsAyZC7K7LWcsfwDV6ZlD7ZH/fc0z0lQ3CXgFDOGashvUhgsxNovjGfWgYbf+BVo= 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 1786556782286204.40203979021624; Wed, 12 Aug 2026 10:46:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuD0a-0002xb-4w; Wed, 12 Aug 2026 13:44: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 1wuD0P-0002sT-UY for qemu-devel@nongnu.org; Wed, 12 Aug 2026 13:44:47 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wuD0M-0007fo-Sn for qemu-devel@nongnu.org; Wed, 12 Aug 2026 13:44:44 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-3810c5d691bso1006361a91.1 for ; Wed, 12 Aug 2026 10:44:42 -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-3931db13c3bsm13210a91.3.2026.08.12.10.44.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 10:44:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1786556681; x=1787161481; 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=aO5xxvr129FUZ2xUaJTsH6Cn2QzOV43OYa6AnAgzYN0=; b=YlHAptdb3IubY6tAmlStzfUMgYeup65ZIbyA0aGLdx9NfD2tFWQ9ZtV3xkIybAKY0N lkQE2cEXNPzNUw94UJy95khfkoZhzAokfvwJDykPUqgGcGSb+2zYSavf1XU/3wLTvgzF wdPA9R7DSL/eoS1kq365ftFvz2CRo7E1JCUtEln4/SMdBbEwX6Kt4UOilPqcRot0RFyq KC1zRGRb0MIK4/jXgv/B6HzQhH0RLgiQ95i2kzt3b+m+suPpvfa1cAJ6nQIbIkxdb+cm LP1iCFaZgfu89ZJLtLnsUuPldCxEX6wClv18jtEIdSxnaISVF3P0ogMzjZZHG9jZijZc jNfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786556681; x=1787161481; 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=aO5xxvr129FUZ2xUaJTsH6Cn2QzOV43OYa6AnAgzYN0=; b=EffT5ltGG84T4Zk/t51pJy3+QMbXu6pqeAOPvWct+mApBxxoUNfqRAXxE3OESU6lF/ t0QVgrcsJaj5tAhcdSbRlSp4ZNVaX3c60wHR5v8cQfJRfz3xWLktTWVdlLsGV5R0+RJl VFiTYkmdE+OWhZX/GYI/xbyZmuJ1HxEIulHEveBfRwT7wQ05y7kVBx3cUCeRH+8NAOPB bRdTm65suFRR24tDLzNM8CYuMjDwUijwif+MUK3t6ljINFAfKpjTx7TzVsPOKT1v4+JL 3jD3L6MnkOFzwWGtx0wcuBmObPIvB9PVTepbcVJ3kNFdxKyxW4jr8U/3jzo8AH+XEK1O jpKQ== X-Gm-Message-State: AOJu0YxZOYWJUx8wd/fOzvVACnlOWQE7XSYabNvKEjKs5Df0BQ97KvQw 7vESmhWnPtTb7YQQk/7Ceuv9l00NxZN/P04uK3ONlTsoQGaWmaauySwGKs7tKRrbZHdkgWQqp7k pV7tqlA+clkGgqm2kn4/Wzj0Ewfzs9/NEqBsR28kbSvUAsaO5uIIdcJMzRXTohjQnO17DAVKKtd jPSDhpt3ufafEIgVwF3PYlAFzOjvJQ7kgOoejvK5c= X-Gm-Gg: AR+sD13XNkr81rR+hXnnlxLoymDWYJpMtFGvrOoT6750xWnKhjuFLNk3W0KHBz+l/jK ZOzpX7Ms3ickczU2ps5xNWuKKobts2IYCdbu0DqhvFTeZQMX2yd0Ha6FXs4TITPOuBLABmjc9zH SoY0Z2LPd1XeN4XIwsZlYyqt7vDVahitjL56xkxM0WKFdQckVAYufKHEohUqzFNBTCmeQUcEmXP SuYTAD21LGIZCQd7zvpW1nYGULRCRzCMwapypnSCEhpCYbMGF0B9aZbEO04T50Rt4wuDw3GYqsj 6/FmgWXEcm+wiDpJ1nNqvNDiajUifWld1vwajxF8Xvaok5aEV1/IjZ6PoTn8pHSqHZDVOPK09AY 65NuYaMuxSIoFhyY2i+2pW0+ZKvo/ojA8+7cWXMkJhZoLkZcf6aJQ3b1S8/8ovG+wgn9Imk1WuA DzVrojfKbVVr2XgGiIglZjXeotMEH4Uy+PyM8VKNjFjUY+oQUo/LfI146rzzCeHjGP9ATB8FqDR kQ0GOYr8sADlRbHexRi3NOMyK5DPZwla7BZq98zKlW1+HhgqXU3BBhcUJFLq8LsbQ1Iq/zRIyw= X-Received: by 2002:a17:90a:d647:b0:37f:e326:6557 with SMTP id 98e67ed59e1d1-393013d66dcmr8458642a91.4.1786556681120; Wed, 12 Aug 2026 10:44:41 -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 Subject: [PATCH v2 5/6] disas/riscv: Add disassembler support for Xsfvqmaccdod/Xsfvqmaccqoq Date: Thu, 13 Aug 2026 01:44:15 +0800 Message-ID: <20260812174417.2468981-6-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812174417.2468981-1-max.chou@sifive.com> References: <20260812174417.2468981-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:20::1035; envelope-from=max.chou@sifive.com; helo=mail-pj1-x1035.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-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: 1786556783734158500 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 Signed-off-by: Max Chou Reviewed-by: Daniel Henrique Barboza --- MAINTAINERS | 1 + disas/meson.build | 3 +- disas/riscv-xsf.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++ disas/riscv-xsf.h | 18 +++++++++++ disas/riscv.c | 2 ++ disas/riscv.h | 1 + 6 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 disas/riscv-xsf.c create mode 100644 disas/riscv-xsf.h diff --git a/MAINTAINERS b/MAINTAINERS index 9c9f9bd645a..02ca1682099 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -398,6 +398,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 42977a1f74d..91357162682 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.c b/disas/riscv-xsf.c new file mode 100644 index 00000000000..8f752657a7c --- /dev/null +++ b/disas/riscv-xsf.c @@ -0,0 +1,79 @@ +/* + * 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" + +typedef enum { + /* 0 is reserved for rv_op_illegal. */ + xsf_op_sf_vqmaccu_4x8x4 =3D 1, + xsf_op_sf_vqmacc_4x8x4 =3D 2, + xsf_op_sf_vqmaccus_4x8x4 =3D 3, + xsf_op_sf_vqmaccsu_4x8x4 =3D 4, + xsf_op_sf_vqmaccu_2x8x2 =3D 5, + xsf_op_sf_vqmacc_2x8x2 =3D 6, + xsf_op_sf_vqmaccus_2x8x2 =3D 7, + xsf_op_sf_vqmaccsu_2x8x2 =3D 8, +} rv_xsf_op; + +const rv_opcode_data xsf_opcode_data[] =3D { + { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 }, + { "sf.vqmaccu.4x8x4", rv_codec_v_r, rv_fmt_vd_vs1_vs2, NULL, 0, 0, 0 }, + { "sf.vqmacc.4x8x4", rv_codec_v_r, rv_fmt_vd_vs1_vs2, NULL, 0, 0, 0 }, + { "sf.vqmaccus.4x8x4", rv_codec_v_r, rv_fmt_vd_vs1_vs2, NULL, 0, 0, 0 = }, + { "sf.vqmaccsu.4x8x4", rv_codec_v_r, rv_fmt_vd_vs1_vs2, NULL, 0, 0, 0 = }, + { "sf.vqmaccu.2x8x2", rv_codec_v_r, rv_fmt_vd_vs1_vs2, NULL, 0, 0, 0 }, + { "sf.vqmacc.2x8x2", rv_codec_v_r, rv_fmt_vd_vs1_vs2, NULL, 0, 0, 0 }, + { "sf.vqmaccus.2x8x2", rv_codec_v_r, rv_fmt_vd_vs1_vs2, NULL, 0, 0, 0 = }, + { "sf.vqmaccsu.2x8x2", rv_codec_v_r, rv_fmt_vd_vs1_vs2, NULL, 0, 0, 0 = }, +}; + +void decode_xsf(rv_decode *dec, rv_isa isa) +{ + rv_inst inst =3D dec->inst; + rv_opcode op =3D rv_op_illegal; + + switch ((inst >> 0) & 0b1111111) { + case 0b1011011: + switch ((inst >> 12) & 0b111) { + case 0b010: + switch ((inst >> 26) & 0b111111) { + case 60: + op =3D xsf_op_sf_vqmaccu_4x8x4; + break; + case 61: + op =3D xsf_op_sf_vqmacc_4x8x4; + break; + case 62: + op =3D xsf_op_sf_vqmaccus_4x8x4; + break; + case 63: + op =3D xsf_op_sf_vqmaccsu_4x8x4; + break; + case 44: + op =3D xsf_op_sf_vqmaccu_2x8x2; + break; + case 45: + op =3D xsf_op_sf_vqmacc_2x8x2; + break; + case 46: + op =3D xsf_op_sf_vqmaccus_2x8x2; + break; + case 47: + op =3D xsf_op_sf_vqmaccsu_2x8x2; + break; + } + break; + } + break; + } + + dec->op =3D op; +} diff --git a/disas/riscv-xsf.h b/disas/riscv-xsf.h new file mode 100644 index 00000000000..b8462c356e2 --- /dev/null +++ b/disas/riscv-xsf.h @@ -0,0 +1,18 @@ +/* + * 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" + +extern const rv_opcode_data xsf_opcode_data[]; + +void decode_xsf(rv_decode *, rv_isa); + +#endif /* DISAS_RISCV_XSF_H */ diff --git a/disas/riscv.c b/disas/riscv.c index 7f1b2627737..032cd31e35c 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 typedef enum { /* 0 is reserved for rv_op_illegal. */ @@ -5454,6 +5455,7 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc, = rv_inst inst, { has_xtheadsync_p, xthead_opcode_data, decode_xtheadsync }, { has_XVentanaCondOps_p, ventana_opcode_data, decode_xventanacondo= ps }, { has_xlrbr_p, rv_xlrbr_opcode_data, decode_xlrbr }, + { has_xsf_p, xsf_opcode_data, 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 379e642ec84..66683201b9d 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -280,6 +280,7 @@ enum { #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 Wed Aug 26 07:25:03 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=1786556720; cv=none; d=zohomail.com; s=zohoarc; b=ELLvzUful8VNbU55Fnr+tZljyVY/iYJ/GtvVUbx0lrKEjuvYHW/7GobYLWwQNNO1sYqmO0CcdZDxriNOEs/R7CyJ9yUZg3Fk/SfJwyj+dpcI4TlegtAuwhGmWFzzhKpNfae0NCVCLM58TEeauAbWEoIbmvuqLn1DUPH/QtZWt5g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786556720; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=RtqKRI6KQb3+Alt3C6qeUDt/8N+6yEZSZI5ZRKNUH7k=; b=I6gY8ugQXsytsq633ltkVC3KAuGfQSQWVKBNFvw9UPJGM8rTXZVYFR2lca5xb2JVD5a1ny9hsP4RRsl70f6pM1DAhj1Syo9FnszDJ6vKk6fkntqWSofPR0wDKxU+rWKi2BGan4MCXMMdUDJFg+Pi0qr8tnrBGYRcrePQJniIMAw= 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 1786556720323725.9788395569439; Wed, 12 Aug 2026 10:45:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuD0f-00030i-KF; Wed, 12 Aug 2026 13:45:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuD0V-0002uM-Ic for qemu-devel@nongnu.org; Wed, 12 Aug 2026 13:44:53 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wuD0R-0007iG-2G for qemu-devel@nongnu.org; Wed, 12 Aug 2026 13:44:49 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-38e69bdb0fcso1313255a91.1 for ; Wed, 12 Aug 2026 10:44: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-3931db13c3bsm13210a91.3.2026.08.12.10.44.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 10:44:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1786556685; x=1787161485; 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=RtqKRI6KQb3+Alt3C6qeUDt/8N+6yEZSZI5ZRKNUH7k=; b=B2kBzpgOwun9mW4MLebw9TQ0DW2so7t3YwQHv2jjfNw1oBE6tQ1kQK2WtR9woKUaNB IPOH8sYpvDblrVV07talOPpS3ki/SectfxGSjBHk6pUfJqAMax/qSa/smICcBGKo3Win 88K8UmHa8PmGmOmQoZiHingf9IbrAkv4AgF+u9PmZ5zHvDiMZh2EP0VXxOMHjErbuQ2y ZMsrKrLuoy1JEF3dKbsta7UHmQZEPUnWwgYHac/l3f9jJXmBXKsnNz7vh1Iz+w9omRLX yFOJYDsRX+ZunabQmMl/V/bD5UHtodjc5+AU2qIy0SbLvWPXWbEzuS72pdiBWI2JeOrv ebkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786556685; x=1787161485; 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=RtqKRI6KQb3+Alt3C6qeUDt/8N+6yEZSZI5ZRKNUH7k=; b=EBbCjNvjx93XwA7Q0ANCWY3Pi8bZY6i6Q7mTvqSgl0t/wnMugX8JbLKpKNbjr3iFpd sUF7hpavEtp/d8Ap9VmD4lhaC6vXXqRBx1qASJhD096mQAPpt8aRbgvXKSuxwm1GlvL6 tx3D5nMunLZd7OtbtRknxvz2jdQjNitBCLrtBafc403/jBEoTl8GiOWSPbfUEv5zS3D3 wX2i7CMormDRgGi7zp3Hk1gyssisWpRuUod+3ZKcw0Nf4rPQ23+5Lmqobs71M6xxa+u3 WQI3G+cXxcMoRFPQbE6GHvlnXbqEA29djNkyuS9erC0GoTjI1vmrZWkZhSBPmKBm+QUt v21w== X-Gm-Message-State: AOJu0YwzdJmHBt5WePj+emUuNqr4hKPpUQl/kPQbnB+KS0F+U6xZ6qHW 5cuJizBWXeSAIwWLzlXZ/S24i1IhsnqyrndvAE59br2B3cIhANcEWfhCCbdOpXCIWj3RxyrQX+8 mnMwnurg21/4q8Qd6rCu5+AHZlpU9TugDKn53ppjxlRv9EOuDi2JOc1YPMj66kQ3qGbmwgR3NoV GMHi7mXQPcVwzPK52yqq4ffAcTK+7qsj3kHV9j0tQ= X-Gm-Gg: AR+sD10tpK2+icffAxYLHtZKuQEzJIzbuYqpRUrnKphNN7fKe734RKBb/dODdCNOrOh AcL5Mdkds8ycN/48Q0VbuME7BmT/4TrWNutAhAEpuZfKeLKc6gEV8UXzL89IBZmQoSTCPvwT6S6 qRBNqTsZ8KH4JyW1oOfM+uG4ymwZDHiPJen8MCkanOrx3MCtfG9jGSaJ1fsdlfFhHBAl94EpPhr ZqiRHMdGgOqLqtAbZQryA9MMegCPIk5Z+A4hXEOqZCPrQrBT2Cj1/Mbot+M1qJIwyKAxEn8GuoC 1s0hZZdtQQ4sVTiIXw0+0asHOglbW/ike3KNdh5UxY/288wnxsxHOSGPu+k9ldayEbSuhQMTA6m 3hGrw2U0AQxmtnGQJ5BJ8CgALb2X1hZE7cq2vcYdedxqB6C3jXJbVmfE+14cchBp0R4KKJxU3Lf rvzlzwE+j3+bYm0zbCrHRQ3rpT9M0/dDCQyoyRz7rassRa8QQiAhGCIofsWUSFXM7jqRgmIjj1+ V1yl3VGiMJi8/BSdcYPLElGH61FMTi5LtFXnA36N+yzdtinXlcbUOB6eWCz5yJr X-Received: by 2002:a17:90b:3c11:b0:390:b41a:b92f with SMTP id 98e67ed59e1d1-39301497fe9mr7786957a91.18.1786556685234; Wed, 12 Aug 2026 10:44: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 v2 6/6] tests/tcg/riscv64: Add tests for SiFive int8 matmul extensions Date: Thu, 13 Aug 2026 01:44:16 +0800 Message-ID: <20260812174417.2468981-7-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812174417.2468981-1-max.chou@sifive.com> References: <20260812174417.2468981-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:20::102c; envelope-from=max.chou@sifive.com; helo=mail-pj1-x102c.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, 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 @sifive.com) X-ZM-MESSAGEID: 1786556721527158500 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. Signed-off-by: Max Chou Reviewed-by: Daniel Henrique Barboza --- MAINTAINERS | 1 + tests/tcg/riscv64/Makefile.softmmu-target | 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 02ca1682099..97a641a0cb0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -399,6 +399,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/Makefile.softmmu-target b/tests/tcg/riscv64/= Makefile.softmmu-target index 82be8a2c915..0615dc83e83 100644 --- a/tests/tcg/riscv64/Makefile.softmmu-target +++ b/tests/tcg/riscv64/Makefile.softmmu-target @@ -41,5 +41,12 @@ comma:=3D , run-test-crc32: test-crc32 $(call run-test, $<, $(QEMU) -cpu rv64$(comma)xlrbr=3Dtrue $(QEMU_OPTS)$<) =20 +# The SiFive int8 matmul instructions are reserved unless VLEN >=3D 256, s= o the +# runner selects vlen=3D256 along with both extensions. +EXTRA_RUNS +=3D run-test-xsfvqmacc +XSFVQMACC_CPU =3D rv64$(comma)v=3Dtrue$(comma)vlen=3D256$(comma)xsfvqmaccd= od=3Dtrue$(comma)xsfvqmaccqoq=3Dtrue +run-test-xsfvqmacc: test-xsfvqmacc + $(call run-test, $<, $(QEMU) -cpu $(XSFVQMACC_CPU) $(QEMU_OPTS)$<) + # We don't currently support the multiarch system tests undefine MULTIARCH_TESTS 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