From nobody Sat Feb 7 05:48:43 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=1769496050; cv=none; d=zohomail.com; s=zohoarc; b=XCnJoKzvDt3TNfuxmvcr0JSbc7T6dlCFKCHpLvKjnAD/7Ux3eGipWeBE0nBKNwW1UF6wlAd4fkVErE0VOMiQT7TOKyUjdeozdAYgDB7Bz9t+EehxmI0Na775o+5RQN8M/wEKrm3hTUpBGe0tpVtVVEIVCTAVo4d7HESuzay7ypo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769496050; 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=LRPOC/3+XMfcKObCsTL8Q0o11X+pdIr3Wyk3iUXtQg0=; b=kwppVQre6AvpvzSF+7IyjWIOJPIdX9pxJJjGnb3xtJcj3+qq4SfR+ZZwJwSjDoqBki3sQgDypscu9NUc3WWafR/pRhvoy46+9/u3UYjh3OhBTpB2I5t/FYtM4kon35PMaRK6DGTKwkEPSMWxWl/4vtOQ/JQ1zLSq9q6ewAslYow= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 176949605075183.1146391220193; Mon, 26 Jan 2026 22:40:50 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkchl-0002lf-P9; Tue, 27 Jan 2026 01:37:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkchi-0002ko-MT for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:34 -0500 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkchh-0006gB-DR for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:34 -0500 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-34be2be4b7cso2842001a91.3 for ; Mon, 26 Jan 2026 22:37:33 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.37.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:37:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495852; x=1770100652; 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; bh=LRPOC/3+XMfcKObCsTL8Q0o11X+pdIr3Wyk3iUXtQg0=; b=nPsYea5GfB7R3UII2qKkK2F0z9I9R6TsiAZ0dazg4CQabW1eBhESeCfZpgEJp2h54U oRtX1TR8RNT0Eq8qVeWr2bxR2YiqtluqBlu1fur29KvSW/cfSSWvbms0AK5PtFn7ygcy OvbmtcKWaPuhmF9OhBrCj3ZhFVrYxYRkdPUql/pHf4vx1Up3GHXpziz0f3Ypbn6E+Fyh ZywrnHqYFpjM9YhcrmlEl3N4Hz+ytls/A5Z68inHxry27eTTXYu1EBHu9sgWBrMeAeDj cAuwTrat70dV72//W4+2cJPcY9FmcI9/KxnSDzM+gBcHUeS5KBcW+7K8yjuT6YSfnAvb sjSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495852; x=1770100652; 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; bh=LRPOC/3+XMfcKObCsTL8Q0o11X+pdIr3Wyk3iUXtQg0=; b=QKHc77GjsuXvtUiIcRvwBDe/QHU7ZU/XUjVL7OAPDXpml3f9+7UnL9Rn8YtZMuC5Q6 DJcnxpqsM0DCHHRXBhra8lH6+vvsXOjSWIgNx0KFH4PNtBmgq1O5OB1863qyBT/LvxHu IWd0l8XMBy/bmCswf8+rlJMlGdfI9XLe3FrdZem4dA30VUHCu9SFB0d1NK5+Sfmffwi3 Rxnk8Vw6plqfhkI15JpD6zrdWdO/vd+NDowq1cB3Ltydn9jP71i1kTdNHWGEXwiKzzym ddrgQ0cHxG1rqhM9wmSkUASQGeR+m3/8CDF0KKHgW+4Er7/EWHb7JEpjj4RIk0D1T9w4 H7fg== X-Gm-Message-State: AOJu0YzJhcuYKgF73IzcS0Ut5K18EeaQQAf0Aj2vgcNZn+JyjeHldhaa 4XgrtXq+/m4q3v+qCo1j+lugeUvzKHeypbnEnPvnZ3fYY0T5x+aJ+u7qYVp0NmMqh64182EXO79 V/tsD7/mZHM077QOhTiFOgEAAJtH2YZCNb5PUpA9aT7oP5ZGxW643jpIHmTxwFwcovM6HUBn+Ii 4SRpbU1Uno4K3oglD0CFs+rIRiTi2/OX2xBgcAZPQ= X-Gm-Gg: AZuq6aKQJEGY9ifTF3mQy8gDsVu8XGJCqbDawCXeyqqEj9x543hapGP5fd3+JuK0jKE m5QlhoCD3vXwHeePH7v8DNeWBtUQSubUkhUw3YB+6LZ4rHrxm7weJeR+Bh1S79S4lDcAPV8rLl0 Y3QTvqzP4/lCH1qjlficHTLLDgiW/gjKxHa1F4zM7LAVI41S0AGHtywugEOfsGaK3dzGVub+fmq RuGU0a48Fwq0NMbd/wW2cXaoGt17ClB0EHScNZnVlZ+UJrCiFHiIRurqgthPtw0AYd6ePUnifno JrJpjjvxtMqJZ2n9Rs+aYKpADxzdddLiwO2DbvnrsLo3xenJa/98vBrJFdzMBs1qy7dCwwDBClR f4pHS8AYNS2S0ZGTqGalXzjgBT1ELCbY0ON8tQMIHR/3AofW6Un4sfZ1A0GWIRBliXQDsTikB9P AQTMxYxNCPmIDW24Wpkotl0W6pbna3vRFxBPjNxGdv//5idlHe7ek9tXgkCN2IpmWh1BfKHFHTk wC6ISwGQ5QfafQ= X-Received: by 2002:a17:90b:2d83:b0:34e:5aa2:cf68 with SMTP id 98e67ed59e1d1-353fed8a891mr723319a91.30.1769495851703; Mon, 26 Jan 2026 22:37:31 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou , Alistair Francis Subject: [PATCH v2 01/17] target/riscv: rvv: Fix NOP_UU_B vs2 width Date: Tue, 27 Jan 2026 14:37:07 +0800 Message-ID: <20260127063723.442734-2-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=max.chou@sifive.com; helo=mail-pj1-x1033.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: 1769496051754158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Max Chou --- target/riscv/vector_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c index 5aea553814..ec0ea4c143 100644 --- a/target/riscv/vector_helper.c +++ b/target/riscv/vector_helper.c @@ -4972,7 +4972,7 @@ GEN_VEXT_V_ENV(vfwcvtbf16_f_f_v, 4) =20 /* Narrowing Floating-Point/Integer Type-Convert Instructions */ /* (TD, T2, TX2) */ -#define NOP_UU_B uint8_t, uint16_t, uint32_t +#define NOP_UU_B uint8_t, uint16_t, uint16_t #define NOP_UU_H uint16_t, uint32_t, uint32_t #define NOP_UU_W uint32_t, uint64_t, uint64_t /* vfncvt.xu.f.v vd, vs2, vm # Convert float to unsigned integer. */ --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769496052; cv=none; d=zohomail.com; s=zohoarc; b=YGB6LbaYduN7LnGyfVC/WWELtZDZLcvA4366YOCURWr3X16/vkYl/6x04IA8ph9ncZVOb3odPE/PuKU6NKbKaLCibFSXwShTaygNtLnnVIjVAEo8LOqftClqY9N4MdBvn77UreI/ZSw4Jaeo+mzSAM8LwXGfBSRDJd8GYTZ9Ceo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769496052; 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=QXeb82MfeyWHVGXBNCmWOgTZPBr/H/1jUT/Lwlynhzs=; b=nEdBMg39t84z98/nfGdt7avhbPKSt1eAKGox6Pt2/TADbJnyOLIX1qioxHCTPpUizrT7gBOWAMSdsOU/b3JM09fVylnoZMkPmP05gpMh0Wo87lJKmZTZbOMy6Wczi1J3kjpxma8LBQDDF9JpX8LNEYMIcF8iOsuZprvfjTZBvOw= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769496052226562.568794543412; Mon, 26 Jan 2026 22:40:52 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkchn-0002mQ-6w; Tue, 27 Jan 2026 01:37:39 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkchl-0002ls-Sd for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:37 -0500 Received: from mail-pj1-x1041.google.com ([2607:f8b0:4864:20::1041]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkchk-0006gl-1j for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:37 -0500 Received: by mail-pj1-x1041.google.com with SMTP id 98e67ed59e1d1-34be2be4b7cso2842013a91.3 for ; Mon, 26 Jan 2026 22:37:35 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.37.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:37:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495854; x=1770100654; 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; bh=QXeb82MfeyWHVGXBNCmWOgTZPBr/H/1jUT/Lwlynhzs=; b=RGCdXMFTuBj+TdgcSzZxw1qVkNcopUOQ2hIdkOjLfc0In9zo2U6sjEaIE6viltUrDV 4SEOvwHgvGB78bePUYFX1NSZkYy5tY1FVyLUPKo64/b7fWhPOPOxJWfRmZnwT8IuWgSt EqYViYijG2DGzCrj583Z51mS9NA8xDXSdhwM7uStl+KZ7o364JMTIDpzVQKQc2Io2G9s FN6SwaUzs3uthMUZmxwAAj/CnF14bKSeYCazBxbf8Ee/S/bZTXgzhK8dGcFDV+gdQD/0 C5ecJF+c6/fq7G0c6yoWGvXdpa30RVE+hZaqaxazNsXi/CEmdxDkHaM/qhmfv0NIVriJ QYbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495854; x=1770100654; 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; bh=QXeb82MfeyWHVGXBNCmWOgTZPBr/H/1jUT/Lwlynhzs=; b=gZxO2+mLRiA5t7A4VkAxZL2+qgmtrhRnqhysdIsu1syDilGh9TbtpisIhkbQT/lACp lZDcom8Xp+U1fUzq23TPKWQdMN8J9wL6oE32gREc9jp7iAPTiLLOaGnPhj4MTSqfobzK uLv+NkNSCp28wBH5yro1e2+QQNibsAWrHqrJ/jWeQGapEJnvY6URvYjP+kgbQ1FVOB1G uP5TvXc9Vk8ueGf97aSkezZYqRGBoFq8Q/oEmTAJG2cIZQdV3q5/REbyrDyS6Et50Zjd 6jVHZLVvwekQQcB4bfGF50uuh+9zNGcXZNH9qkVCt9B8dMx0sOg1wqRyAaKYCZk4pM1p Rt8Q== X-Gm-Message-State: AOJu0YxBuNp3GwRKMtgLhzrKDRofQ0iMifq4iZzysrLqFKceagEH9wzE yzWzCKwEzZC8A4NiGdF+HfT/k4BpuTRI5NAEjmCZS2qdat0cK4ksj9FP1MFIEnyx9C6vG5q25mq 6MiE2r0SJZbSG6CQ+2MLKI5SEQXIxMVEZXH2TSv81jDG9/wqHelJQDbz2Cc2frvBsL3GB7sqntC Nm2l/axZgDbfhalhAeImGI2RWUwYfog2GGk7E0nDI0sw== X-Gm-Gg: AZuq6aLGKc8XkbsENEKIt1R003VA2qXaSyDbTnSOSTWevip8BRJ89p85Kob+jqHwyeO VgJr1+6QYgZNasdMC5EADGdTJ/TehM7QqUmjXfevrU30J+DwTIPegoLxSeFysFKIssdJkZOtoyh WsMGtYkUZCm7NVeGvTxj/aZHBWyxiS7xT5rSZOGB/0qJHAbGYKGmymIqdnyzFUFB4WBHnrsAKZB KlOdTVeP+e5yVDe7VufzPIZWsxgjNcm3t5ku5V61z6FvrbtsAuo6NFztyLbbvtDBcLpI/UKwaF5 NELsSoT/unvcTCNj8c0Th/MauAcZO8+ctbU5xYv8fLhMeCG6DWtAkZiV7r+SfRHKwsvOET1T+Aj Bq486B9JzQ4mr8KTSpTMKLjqIoIL2/EmZY6jmf9bK/G8Ag/+YUey4huFYcRBVCBIdQFehKfzYfU DWE8s4imYRigDgU7Z87CIzSHt2GyJZLrQ39iUchfC5/Kqy0azWMaMXVHZNmMeT4rLMiU/5KIbMA 8tvt6vtcewd0O0= X-Received: by 2002:a17:90a:f950:b0:340:f05a:3ed3 with SMTP id 98e67ed59e1d1-353fed75832mr1176571a91.17.1769495854201; Mon, 26 Jan 2026 22:37:34 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou Subject: [PATCH v2 02/17] fpu/softfloat: Refactor IEEE format NaN classification to share code Date: Tue, 27 Jan 2026 14:37:08 +0800 Message-ID: <20260127063723.442734-3-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1041; envelope-from=max.chou@sifive.com; helo=mail-pj1-x1041.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: 1769496053796154101 Content-Type: text/plain; charset="utf-8" The floatN_is_[quiet|signaling]_nan functions for IEEE formats (float16, bfloat16, float32, float64) contain duplicated logic that should be shared. This commit introduces internal helper functions: [float16|bfloat16|float32|float64]_is_snan_internal that determine if a NaN is signaling. Suggested-by: Richard Henderson Signed-off-by: Max Chou --- fpu/softfloat-specialize.c.inc | 152 +++++++++++++++++---------------- 1 file changed, 78 insertions(+), 74 deletions(-) diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index ba4fa08b7b..ce7315c996 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -225,6 +225,22 @@ floatx80 floatx80_default_inf(bool zSign, float_status= *status) bool z =3D status->floatx80_behaviour & floatx80_default_inf_int_bit_i= s_zero; return packFloatx80(zSign, 0x7fff, z ? 0 : (1ULL << 63)); } +/*------------------------------------------------------------------------= ---- +| Internal helper: Determine if float16 NaN is signaling. +*-------------------------------------------------------------------------= ---*/ + +static bool float16_is_snan_internal(float16 a, float_status *status) +{ + if (!float16_is_any_nan(a)) { + return false; + } + if (no_signaling_nans(status)) { + return false; + } + uint16_t frac =3D float16_val(a) & 0x3FF; + bool frac_msb =3D (frac >> 9) & 1; + return frac_msb =3D=3D snan_bit_is_one(status); +} =20 /*------------------------------------------------------------------------= ---- | Returns 1 if the half-precision floating-point value `a' is a quiet @@ -233,17 +249,27 @@ floatx80 floatx80_default_inf(bool zSign, float_statu= s *status) =20 bool float16_is_quiet_nan(float16 a_, float_status *status) { - if (no_signaling_nans(status)) { - return float16_is_any_nan(a_); - } else { - uint16_t a =3D float16_val(a_); - if (snan_bit_is_one(status)) { - return (((a >> 9) & 0x3F) =3D=3D 0x3E) && (a & 0x1FF); - } else { + if (!float16_is_any_nan(a_)) { + return false; + } + return !float16_is_snan_internal(a_, status); +} =20 - return ((a >> 9) & 0x3F) =3D=3D 0x3F; - } +/*------------------------------------------------------------------------= ---- +| Internal helper: Determine if bfloat16 NaN is signaling. +*-------------------------------------------------------------------------= ---*/ + +static bool bfloat16_is_snan_internal(bfloat16 a, float_status *status) +{ + if (!bfloat16_is_any_nan(a)) { + return false; + } + if (no_signaling_nans(status)) { + return false; } + uint16_t frac =3D a & 0x7F; + bool frac_msb =3D (frac >> 6) & 1; + return frac_msb =3D=3D snan_bit_is_one(status); } =20 /*------------------------------------------------------------------------= ---- @@ -253,16 +279,10 @@ bool float16_is_quiet_nan(float16 a_, float_status *s= tatus) =20 bool bfloat16_is_quiet_nan(bfloat16 a_, float_status *status) { - if (no_signaling_nans(status)) { - return bfloat16_is_any_nan(a_); - } else { - uint16_t a =3D a_; - if (snan_bit_is_one(status)) { - return (((a >> 6) & 0x1FF) =3D=3D 0x1FE) && (a & 0x3F); - } else { - return ((a >> 6) & 0x1FF) =3D=3D 0x1FF; - } + if (!bfloat16_is_any_nan(a_)) { + return false; } + return !bfloat16_is_snan_internal(a_, status); } =20 /*------------------------------------------------------------------------= ---- @@ -272,16 +292,7 @@ bool bfloat16_is_quiet_nan(bfloat16 a_, float_status *= status) =20 bool float16_is_signaling_nan(float16 a_, float_status *status) { - if (no_signaling_nans(status)) { - return 0; - } else { - uint16_t a =3D float16_val(a_); - if (snan_bit_is_one(status)) { - return ((a >> 9) & 0x3F) =3D=3D 0x3F; - } else { - return (((a >> 9) & 0x3F) =3D=3D 0x3E) && (a & 0x1FF); - } - } + return float16_is_snan_internal(a_, status); } =20 /*------------------------------------------------------------------------= ---- @@ -291,16 +302,24 @@ bool float16_is_signaling_nan(float16 a_, float_statu= s *status) =20 bool bfloat16_is_signaling_nan(bfloat16 a_, float_status *status) { + return bfloat16_is_snan_internal(a_, status); +} + +/*------------------------------------------------------------------------= ---- +| Internal helper: Determine if float32 NaN is signaling. +*-------------------------------------------------------------------------= ---*/ + +static bool float32_is_snan_internal(float32 a, float_status *status) +{ + if (!float32_is_any_nan(a)) { + return false; + } if (no_signaling_nans(status)) { - return 0; - } else { - uint16_t a =3D a_; - if (snan_bit_is_one(status)) { - return ((a >> 6) & 0x1FF) =3D=3D 0x1FF; - } else { - return (((a >> 6) & 0x1FF) =3D=3D 0x1FE) && (a & 0x3F); - } + return false; } + uint32_t frac =3D float32_val(a) & 0x7FFFFF; + bool frac_msb =3D (frac >> 22) & 1; + return frac_msb =3D=3D snan_bit_is_one(status); } =20 /*------------------------------------------------------------------------= ---- @@ -310,16 +329,10 @@ bool bfloat16_is_signaling_nan(bfloat16 a_, float_sta= tus *status) =20 bool float32_is_quiet_nan(float32 a_, float_status *status) { - if (no_signaling_nans(status)) { - return float32_is_any_nan(a_); - } else { - uint32_t a =3D float32_val(a_); - if (snan_bit_is_one(status)) { - return (((a >> 22) & 0x1FF) =3D=3D 0x1FE) && (a & 0x003FFFFF); - } else { - return ((uint32_t)(a << 1) >=3D 0xFF800000); - } + if (!float32_is_any_nan(a_)) { + return false; } + return !float32_is_snan_internal(a_, status); } =20 /*------------------------------------------------------------------------= ---- @@ -329,16 +342,24 @@ bool float32_is_quiet_nan(float32 a_, float_status *s= tatus) =20 bool float32_is_signaling_nan(float32 a_, float_status *status) { + return float32_is_snan_internal(a_, status); +} + +/*------------------------------------------------------------------------= ---- +| Internal helper: Determine if float64 NaN is signaling. +*-------------------------------------------------------------------------= ---*/ + +static bool float64_is_snan_internal(float64 a, float_status *status) +{ + if (!float64_is_any_nan(a)) { + return false; + } if (no_signaling_nans(status)) { - return 0; - } else { - uint32_t a =3D float32_val(a_); - if (snan_bit_is_one(status)) { - return ((uint32_t)(a << 1) >=3D 0xFF800000); - } else { - return (((a >> 22) & 0x1FF) =3D=3D 0x1FE) && (a & 0x003FFFFF); - } + return false; } + uint64_t frac =3D float64_val(a) & 0xFFFFFFFFFFFFFULL; + bool frac_msb =3D (frac >> 51) & 1; + return frac_msb =3D=3D snan_bit_is_one(status); } =20 /*------------------------------------------------------------------------= ---- @@ -348,17 +369,10 @@ bool float32_is_signaling_nan(float32 a_, float_statu= s *status) =20 bool float64_is_quiet_nan(float64 a_, float_status *status) { - if (no_signaling_nans(status)) { - return float64_is_any_nan(a_); - } else { - uint64_t a =3D float64_val(a_); - if (snan_bit_is_one(status)) { - return (((a >> 51) & 0xFFF) =3D=3D 0xFFE) - && (a & 0x0007FFFFFFFFFFFFULL); - } else { - return ((a << 1) >=3D 0xFFF0000000000000ULL); - } + if (!float64_is_any_nan(a_)) { + return false; } + return !float64_is_snan_internal(a_, status); } =20 /*------------------------------------------------------------------------= ---- @@ -368,17 +382,7 @@ bool float64_is_quiet_nan(float64 a_, float_status *st= atus) =20 bool float64_is_signaling_nan(float64 a_, float_status *status) { - if (no_signaling_nans(status)) { - return 0; - } else { - uint64_t a =3D float64_val(a_); - if (snan_bit_is_one(status)) { - return ((a << 1) >=3D 0xFFF0000000000000ULL); - } else { - return (((a >> 51) & 0xFFF) =3D=3D 0xFFE) - && (a & UINT64_C(0x0007FFFFFFFFFFFF)); - } - } + return float64_is_snan_internal(a_, status); } =20 /*------------------------------------------------------------------------= ---- --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769495949; cv=none; d=zohomail.com; s=zohoarc; b=k4bpJXhFW+Gd5HDRgZp5dVMnsLihZi+Jfe9P5fVeO85EHO/FFGixeC8Is/HvkP8K3SUIVqQsf+7PjdgBbBLMQ4u8fXVBHQj51XkLZmu8XLrlOgrpOPleQ1EVGoWed8v/R+GFjnRlM+CVZ0XcWJXy67iksA2Tw38Cg4FT3tHrwOE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769495949; 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=eJAV2CCWbII0vWEelDTLF4MqTlLb7xTdhXpTJlFw7us=; b=jJN8CmYEgkUiyj/h5IxpMz2Hx8NBXxngK5Bxz9+/w8BrCDnfooz81iT53IBRj1dgazmybabAPC7GDttyJMDa2T9d9IrC9pjmvNYme+nO2T9deoGqJpNyvQNMdV067wl8s7UYIzrtkIlCD+nW2OGD5ufGTuTKh9VWMdC5htmAl1g= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769495949142386.016004678198; Mon, 26 Jan 2026 22:39:09 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkchr-0002o7-JN; Tue, 27 Jan 2026 01:37:43 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkchp-0002nE-LL for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:41 -0500 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkchm-0006h3-LW for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:41 -0500 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-3530715386cso4617572a91.2 for ; Mon, 26 Jan 2026 22:37:38 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.37.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:37:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495857; x=1770100657; 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; bh=eJAV2CCWbII0vWEelDTLF4MqTlLb7xTdhXpTJlFw7us=; b=SRnUdnr7YAgNdTisFc34zNMrhajkihDBqH0RpWMVPOPxP98/nuIpmuYJ7ud8c6EbWa 1vrH5LZE7zBHnZq9tHgeoykhXzxEvImJxga3bxXVFY6aXZXyywWW9KOSq5/VZbLreuqA 8ov948w1pWYxa/wbdxZupMIXuZCmvFFcF5ZD1rFxWjAGUWzvtrnfe4MQFVCMAPA+EANZ C9jCFjgZjArvpI4ekoI6gHbAV/KI/yIx/ScA7s3rMV++lRpY4L6nFoRn6OegoamaSznI ywQ9lHef/w3Y+yNxxKDcO4K6vWE23rHZ6X3yOnSY8gxsm24VIvxoVNhjTZZirIV62gY9 befA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495857; x=1770100657; 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; bh=eJAV2CCWbII0vWEelDTLF4MqTlLb7xTdhXpTJlFw7us=; b=YD5Q7PvogDZRRn3wYtVh2lzkf8xGMNlgQ9Jo5YdvTQjCnoNfz3BTkVpOU25owN0s7e rK+QecP0ztuS2/04PPtIXty2Wr1f2cNiWE0yFl3cyaVI0KRETimlSyM/b9m1g51UV9s9 UKclpqAJnUjoK/SremoIcGYqMufSP354sdxKYGp5Y/EkNCnqQF4iTgjHKuP5h2+28t36 cJu73xyj0wun4/qfMcOJGR9a+HayDllJq3QvASi7ERXG9UbpDE6lflchPeVJqS/x0ZEa Cfceau6oE4A/krKJN+42TkonoBw+jhdkTUucki6f/9cRRun6d38rGrm5hAC9YwOOdt5C HFFA== X-Gm-Message-State: AOJu0YzdZfKSiupt7hJSM0inUThf0IN3txzL5b5T4sZnr5BRa22/nu9/ zHeRK6bKywU1DA3BYdf5kNwnRJEOw99+8DwCbrgR1vcM+nzqo+aJbaD8lHb7oBCFy50F7wsNGQI 9cLAvzOG3NQgpbLTDw3p4PPChHFh/cVpVjQGLoCeImVkMzYrQC+SGeLdP3oVqgKAJe6lsDGHPAK 5jPk35BYAEOV1NaQVLfnxG2sb8AedM9NXgppQxhK0rUQ== X-Gm-Gg: AZuq6aKTQMuCkLrhlZDuOCz4FuDOGl4RxjBKM00yzD51L4Bd4n77YM9c1Q2ShSqw2hO RzI/bWVUbKttBROWyUOreN3iR0ZV2X44fNdljrdGLRyRmq/1lSwX9d4Nve/W75ujYPRa4Ki+vFX PVClYpjgtsEFovYVhcWwa2/DtNXx0vw79rNoP3ul+oZUL7MtyDsZQeLVAKAmNK40HuV9kNERB42 RpDVGSZuB8l1KFfCotkEikP+vOv/UHfwCfz6YnHbcGpQdFyHar18zvxvxS9JqyPDKmeYYlC32rq LLCva59PiVxgCV/DNSNy+cNaYuQ2IRlz/WT/UOMeI5NMsQozQbSqJoFxw/v+82lq7vbeSM4N6au m+1GbnN7RMknUuT6jNF+JsjdZD1sTsojIIaH7pQ5Fc4vLjCns5+UJq89v8eiHTNRtLuGWkRGhBw hMJjiGZn0mQEiOfn+AZpyhln/3HGq9/6Yc7BmCV4b23zUHoPWnW1yxsAukLLP5n3n63qyYy4qPa XdOaKUk0zgEZek= X-Received: by 2002:a17:90b:498e:b0:32e:7270:9499 with SMTP id 98e67ed59e1d1-353febb9623mr837231a91.0.1769495856851; Mon, 26 Jan 2026 22:37:36 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou Subject: [PATCH v2 03/17] fpu/softfloat: Support OCP(Open Compute Project) OFP8 data type Date: Tue, 27 Jan 2026 14:37:09 +0800 Message-ID: <20260127063723.442734-4-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=max.chou@sifive.com; helo=mail-pj1-x102b.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: 1769495952176154100 Content-Type: text/plain; charset="utf-8" This commit provides the implementation defined behavior flags and the basic operation support for the OCP float8 data types(E4M3 & E5M2). According to the definition in OFP8 spec, the conversion from a wider format infinity depends on the saturation mode defined in the spec. Signed-off-by: Max Chou --- fpu/softfloat-parts.c.inc | 159 +++++++++++++++++++++------ fpu/softfloat-specialize.c.inc | 75 +++++++++++++ fpu/softfloat.c | 191 +++++++++++++++++++++++++++++++-- include/fpu/softfloat-types.h | 12 +++ include/fpu/softfloat.h | 81 ++++++++++++++ 5 files changed, 480 insertions(+), 38 deletions(-) diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc index 5e0438fc0b..eee7daae4d 100644 --- a/fpu/softfloat-parts.c.inc +++ b/fpu/softfloat-parts.c.inc @@ -227,11 +227,28 @@ static void partsN(canonicalize)(FloatPartsN *p, floa= t_status *status, p->exp =3D fmt->frac_shift - fmt->exp_bias - shift + !has_pseudo_denormals; } - } else if (likely(p->exp < fmt->exp_max) || fmt->arm_althp) { + } else if (likely(p->exp < fmt->exp_max)) { p->cls =3D float_class_normal; p->exp -=3D fmt->exp_bias; frac_shl(p, fmt->frac_shift); p->frac_hi |=3D DECOMPOSED_IMPLICIT_BIT; + } else if (fmt->limited_nan) { + /* + * Formats with limited NaN encodings (E4M3, E2M1, ARM Alt HP). + */ + frac_shl(p, fmt->frac_shift); + p->frac_hi |=3D DECOMPOSED_IMPLICIT_BIT; + if (fmt->normal_frac_max =3D=3D NORMAL_FRAC_MAX_ALL || + p->frac_hi <=3D fmt->normal_frac_max) { + p->cls =3D float_class_normal; + p->exp -=3D fmt->exp_bias; + } else { + if (parts_is_snan_frac(p->frac_hi, status)) { + p->cls =3D float_class_snan; + } else { + p->cls =3D float_class_qnan; + } + } } else if (likely(frac_eqz(p))) { p->cls =3D float_class_inf; } else { @@ -241,14 +258,39 @@ static void partsN(canonicalize)(FloatPartsN *p, floa= t_status *status, } } =20 +/* + * Set FloatPartsN to the maximum normal value for the given format. + * - IEEE formats (!no_infinity): exp =3D exp_max - 1, frac =3D all ones + * - Limited NaN formats (E4M3): exp =3D exp_max, frac =3D normal_frac_max + * - No NaN/InF formats (E2M1, ARM AHP): exp =3D exp_max, frac =3D all ones + */ +static void partsN(set_max_normal)(FloatPartsN *p, const FloatFmt *fmt) +{ + if (!fmt->no_infinity) { + p->exp =3D fmt->exp_max - 1; + frac_allones(p); + } else if (fmt->normal_frac_max !=3D NORMAL_FRAC_MAX_ALL) { + p->exp =3D fmt->exp_max; + frac_clear(p); + p->frac_hi =3D fmt->normal_frac_max; + } else { + p->exp =3D fmt->exp_max; + frac_allones(p); + } +} + /* * Round and uncanonicalize a floating-point number by parts. There * are FRAC_SHIFT bits that may require rounding at the bottom of the * fraction; these bits will be removed. The exponent will be biased * by EXP_BIAS and must be bounded by [EXP_MAX-1, 0]. + * + * The saturate parameter controls saturation behavior for formats that + * support it (OCP FP8 E4M3/E5M2). When true, overflow produces max normal + * instead of infinity (E5M2) or NaN (E4M3). */ static void partsN(uncanon_normal)(FloatPartsN *p, float_status *s, - const FloatFmt *fmt) + const FloatFmt *fmt, bool saturate) { const int exp_max =3D fmt->exp_max; const int frac_shift =3D fmt->frac_shift; @@ -256,8 +298,8 @@ static void partsN(uncanon_normal)(FloatPartsN *p, floa= t_status *s, const uint64_t frac_lsb =3D round_mask + 1; const uint64_t frac_lsbm1 =3D round_mask ^ (round_mask >> 1); const uint64_t roundeven_mask =3D round_mask | frac_lsb; + bool overflow_norm =3D saturate; uint64_t inc; - bool overflow_norm =3D false; int exp, flags =3D 0; =20 switch (s->float_rounding_mode) { @@ -313,30 +355,64 @@ static void partsN(uncanon_normal)(FloatPartsN *p, fl= oat_status *s, } p->frac_lo &=3D ~round_mask; } + p->exp =3D exp; =20 - if (fmt->arm_althp) { - /* ARM Alt HP eschews Inf and NaN for a wider exponent. */ - if (unlikely(exp > exp_max)) { - /* Overflow. Return the maximum normal. */ - flags =3D float_flag_invalid; - exp =3D exp_max; - frac_allones(p); - p->frac_lo &=3D ~round_mask; + /* + * Unified overflow handling based on format capabilities. + * 1. Format has infinity -> overflow to infinity (or saturate) + * 2. Format has NaN but no infinity -> overflow to NaN (or satura= te) + * 3. Format has neither -> always saturate + */ + if (!fmt->no_infinity) { + if (unlikely(exp >=3D exp_max)) { + flags |=3D float_flag_overflow; + if (s->rebias_overflow) { + exp -=3D fmt->exp_re_bias; + } else if (overflow_norm) { + flags |=3D float_flag_inexact; + parts_set_max_normal(p, fmt); + exp =3D p->exp; + p->frac_lo &=3D ~round_mask; + } else { + flags |=3D float_flag_inexact; + p->cls =3D float_class_inf; + exp =3D exp_max; + frac_clear(p); + } } - } else if (unlikely(exp >=3D exp_max)) { - flags |=3D float_flag_overflow; - if (s->rebias_overflow) { - exp -=3D fmt->exp_re_bias; - } else if (overflow_norm) { + } else if (fmt_has_nan_encoding(fmt)) { + bool is_overflow =3D (exp > exp_max) || + (exp =3D=3D exp_max && + p->frac_hi > fmt->normal_frac_max); + + if (unlikely(is_overflow)) { + flags |=3D float_flag_overflow; flags |=3D float_flag_inexact; - exp =3D exp_max - 1; - frac_allones(p); + + if (overflow_norm) { + parts_set_max_normal(p, fmt); + exp =3D p->exp; + } else { + uint8_t dnan =3D s->default_nan_pattern; + p->cls =3D float_class_qnan; + p->sign =3D dnan >> 7; + exp =3D exp_max; + frac_allones(p); + } + } + } else { + if (unlikely(exp > exp_max)) { + if (fmt->overflow_raises_invalid) { + /* ARM Alt HP: raise Invalid, not Overflow */ + flags =3D float_flag_invalid; + } else { + flags |=3D float_flag_overflow; + flags |=3D float_flag_inexact; + } + + parts_set_max_normal(p, fmt); + exp =3D p->exp; p->frac_lo &=3D ~round_mask; - } else { - flags |=3D float_flag_inexact; - p->cls =3D float_class_inf; - exp =3D exp_max; - frac_clear(p); } } frac_shr(p, frac_shift); @@ -422,11 +498,11 @@ static void partsN(uncanon_normal)(FloatPartsN *p, fl= oat_status *s, float_raise(flags, s); } =20 -static void partsN(uncanon)(FloatPartsN *p, float_status *s, - const FloatFmt *fmt) +static void partsN(uncanon_sat)(FloatPartsN *p, float_status *s, + const FloatFmt *fmt, bool saturate) { if (likely(is_anynorm(p->cls))) { - parts_uncanon_normal(p, s, fmt); + parts_uncanon_normal(p, s, fmt, saturate); } else { switch (p->cls) { case float_class_zero: @@ -434,13 +510,30 @@ static void partsN(uncanon)(FloatPartsN *p, float_sta= tus *s, frac_clear(p); return; case float_class_inf: - g_assert(!fmt->arm_althp); - p->exp =3D fmt->exp_max; - frac_clear(p); + /* + * Unified infinity handling using format capabilities. + * Formats with no_infinity must convert infinity to something= else + */ + if (!fmt->no_infinity) { + p->exp =3D fmt->exp_max; + frac_clear(p); + } else if (fmt_has_nan_encoding(fmt)) { + if (saturate) { + parts_set_max_normal(p, fmt); + } else { + uint8_t dnan =3D s->default_nan_pattern; + p->cls =3D float_class_qnan; + p->sign =3D dnan >> 7; + p->exp =3D fmt->exp_max; + frac_allones(p); + } + } else { + parts_set_max_normal(p, fmt); + } return; case float_class_qnan: case float_class_snan: - g_assert(!fmt->arm_althp); + g_assert(fmt_has_nan_encoding(fmt)); p->exp =3D fmt->exp_max; frac_shr(p, fmt->frac_shift); return; @@ -451,6 +544,12 @@ static void partsN(uncanon)(FloatPartsN *p, float_stat= us *s, } } =20 +static void partsN(uncanon)(FloatPartsN *p, float_status *s, + const FloatFmt *fmt) +{ + partsN(uncanon_sat)(p, s, fmt, false); +} + /* * Returns the result of adding or subtracting the values of the * floating-point values `a' and `b'. The operation is performed diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc index ce7315c996..3648dc7467 100644 --- a/fpu/softfloat-specialize.c.inc +++ b/fpu/softfloat-specialize.c.inc @@ -242,6 +242,63 @@ static bool float16_is_snan_internal(float16 a, float_= status *status) return frac_msb =3D=3D snan_bit_is_one(status); } =20 +/*------------------------------------------------------------------------= ---- +| Internal helper: Determine if E4M3 NaN is signaling. +| E4M3 has only one NaN encoding, so classification is policy-based. +*-------------------------------------------------------------------------= ---*/ + +static bool float8_e4m3_is_snan_internal(float8_e4m3 a, float_status *stat= us) +{ + if (!float8_e4m3_is_any_nan(a)) { + return false; + } + if (no_signaling_nans(status)) { + return false; + } + return snan_bit_is_one(status); +} + +/*------------------------------------------------------------------------= ---- +| Internal helper: Determine if E5M2 NaN is signaling. +*-------------------------------------------------------------------------= ---*/ + +static bool float8_e5m2_is_snan_internal(float8_e5m2 a, float_status *stat= us) +{ + if (!float8_e5m2_is_any_nan(a)) { + return false; + } + if (no_signaling_nans(status)) { + return false; + } + uint8_t frac =3D float8_e5m2_val(a) & 0x3; + bool frac_msb =3D (frac >> 1) & 1; + return frac_msb =3D=3D snan_bit_is_one(status); +} + +/*------------------------------------------------------------------------= ---- +| Returns 1 if the OCP FP8 E4M3 value `a' is a quiet NaN; otherwise return= s 0. +*-------------------------------------------------------------------------= ---*/ + +bool float8_e4m3_is_quiet_nan(float8_e4m3 a_, float_status *status) +{ + if (!float8_e4m3_is_any_nan(a_)) { + return false; + } + return !float8_e4m3_is_snan_internal(a_, status); +} + +/*------------------------------------------------------------------------= ---- +| Returns 1 if the OCP FP8 E5M2 value `a' is a quiet NaN; otherwise return= s 0. +*-------------------------------------------------------------------------= ---*/ + +bool float8_e5m2_is_quiet_nan(float8_e5m2 a_, float_status *status) +{ + if (!float8_e5m2_is_any_nan(a_)) { + return false; + } + return !float8_e5m2_is_snan_internal(a_, status); +} + /*------------------------------------------------------------------------= ---- | Returns 1 if the half-precision floating-point value `a' is a quiet | NaN; otherwise returns 0. @@ -285,6 +342,24 @@ bool bfloat16_is_quiet_nan(bfloat16 a_, float_status *= status) return !bfloat16_is_snan_internal(a_, status); } =20 +/*------------------------------------------------------------------------= ---- +| Returns 1 if the OCP FP8 E4M3 value `a' is a signaling NaN; otherwise 0. +*-------------------------------------------------------------------------= ---*/ + +bool float8_e4m3_is_signaling_nan(float8_e4m3 a_, float_status *status) +{ + return float8_e4m3_is_snan_internal(a_, status); +} + +/*------------------------------------------------------------------------= ---- +| Returns 1 if the OCP FP8 E5M2 value `a' is a signaling NaN; otherwise 0. +*-------------------------------------------------------------------------= ---*/ + +bool float8_e5m2_is_signaling_nan(float8_e5m2 a_, float_status *status) +{ + return float8_e5m2_is_snan_internal(a_, status); +} + /*------------------------------------------------------------------------= ---- | Returns 1 if the half-precision floating-point value `a' is a signaling | NaN; otherwise returns 0. diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 8094358c2e..533f96dcda 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -522,6 +522,13 @@ typedef struct { #define DECOMPOSED_BINARY_POINT 63 #define DECOMPOSED_IMPLICIT_BIT (1ull << DECOMPOSED_BINARY_POINT) =20 +/* + * Sentinel value for normal_frac_max indicating "all fraction values at + * exp_max are normal" (i.e., the format has no NaN encoding at exp_max). + * Used by E2M1 and ARM Alternative Half Precision formats. + */ +#define NORMAL_FRAC_MAX_ALL 0 + /* Structure holding all of the relevant parameters for a format. * exp_size: the size of the exponent field * exp_bias: the offset applied to the exponent field @@ -542,11 +549,39 @@ typedef struct { int exp_max; int frac_size; int frac_shift; - bool arm_althp; bool has_explicit_bit; uint64_t round_mask; + /* + * Format capability flags: + * no_infinity: Format has no infinity encoding. When true, exp=3Dexp_= max + * with frac=3D0 is NOT infinity - it's either NaN or max normal. + * + * limited_nan: Format has limited or no NaN patterns. When combined + * with normal_frac_max, determines NaN encoding capability: + * - limited_nan=3Dfalse: Standard IEEE NaN (exp=3Dexp_max, frac!=3D= 0) + * - limited_nan=3Dtrue && normal_frac_max!=3D0: Limited NaN (E4M3) + * - limited_nan=3Dtrue && normal_frac_max=3D=3D0: No NaN encoding (= AHP, E2M1) + * + * overflow_raises_invalid: Raise Invalid (not Overflow) exception. + * ARM Alt HP uses this to signal overflow as an invalid operation. + * + * normal_frac_max: For formats with limited_nan, the maximum fraction + * value (after normalization shift, including implicit bit) that is + * still considered normal at exp=3Dexp_max. + * Use NORMAL_FRAC_MAX_ALL (0) to indicate all frac values at exp_max + * are normal (E2M1, ARM Alt HP), which also implies no NaN encoding. + */ + bool no_infinity; + bool limited_nan; + bool overflow_raises_invalid; + uint64_t normal_frac_max; } FloatFmt; =20 +static inline bool fmt_has_nan_encoding(const FloatFmt *fmt) +{ + return !fmt->limited_nan || fmt->normal_frac_max !=3D NORMAL_FRAC_MAX_= ALL; +} + /* Expand fields based on the size of exponent and fraction */ #define FLOAT_PARAMS_(E) \ .exp_size =3D E, \ @@ -560,13 +595,27 @@ typedef struct { .frac_shift =3D (-F - 1) & 63, \ .round_mask =3D (1ull << ((-F - 1) & 63)) - 1 =20 +static const FloatFmt float8_e4m3_params =3D { + FLOAT_PARAMS(4, 3), + .no_infinity =3D true, + .limited_nan =3D true, + .normal_frac_max =3D 0xE000000000000000ULL, +}; + +static const FloatFmt float8_e5m2_params =3D { + FLOAT_PARAMS(5, 2), +}; + static const FloatFmt float16_params =3D { FLOAT_PARAMS(5, 10) }; =20 static const FloatFmt float16_params_ahp =3D { FLOAT_PARAMS(5, 10), - .arm_althp =3D true + .no_infinity =3D true, + .limited_nan =3D true, + .overflow_raises_invalid =3D true, + .normal_frac_max =3D NORMAL_FRAC_MAX_ALL, }; =20 static const FloatFmt bfloat16_params =3D { @@ -614,6 +663,16 @@ static void unpack_raw64(FloatParts64 *r, const FloatF= mt *fmt, uint64_t raw) }; } =20 +static void QEMU_FLATTEN float8_e4m3_unpack_raw(FloatParts64 *p, float8_e4= m3 f) +{ + unpack_raw64(p, &float8_e4m3_params, f); +} + +static void QEMU_FLATTEN float8_e5m2_unpack_raw(FloatParts64 *p, float8_e5= m2 f) +{ + unpack_raw64(p, &float8_e5m2_params, f); +} + static void QEMU_FLATTEN float16_unpack_raw(FloatParts64 *p, float16 f) { unpack_raw64(p, &float16_params, f); @@ -671,6 +730,16 @@ static uint64_t pack_raw64(const FloatParts64 *p, cons= t FloatFmt *fmt) return ret; } =20 +static float8_e4m3 QEMU_FLATTEN float8_e4m3_pack_raw(const FloatParts64 *p) +{ + return make_float8_e4m3(pack_raw64(p, &float8_e4m3_params)); +} + +static float8_e5m2 QEMU_FLATTEN float8_e5m2_pack_raw(const FloatParts64 *p) +{ + return make_float8_e5m2(pack_raw64(p, &float8_e5m2_params)); +} + static float16 QEMU_FLATTEN float16_pack_raw(const FloatParts64 *p) { return make_float16(pack_raw64(p, &float16_params)); @@ -758,12 +827,26 @@ static void parts128_canonicalize(FloatParts128 *p, f= loat_status *status, PARTS_GENERIC_64_128(canonicalize, A)(A, S, F) =20 static void parts64_uncanon_normal(FloatParts64 *p, float_status *status, - const FloatFmt *fmt); + const FloatFmt *fmt, bool saturate); static void parts128_uncanon_normal(FloatParts128 *p, float_status *status, - const FloatFmt *fmt); + const FloatFmt *fmt, bool saturate); + +#define parts_uncanon_normal(A, S, F, SAT) \ + PARTS_GENERIC_64_128(uncanon_normal, A)(A, S, F, SAT) =20 -#define parts_uncanon_normal(A, S, F) \ - PARTS_GENERIC_64_128(uncanon_normal, A)(A, S, F) +static void parts64_uncanon_sat(FloatParts64 *p, float_status *status, + const FloatFmt *fmt, bool saturate); +static void parts128_uncanon_sat(FloatParts128 *p, float_status *status, + const FloatFmt *fmt, bool saturate); + +#define parts_uncanon_sat(A, S, F, SAT) \ + PARTS_GENERIC_64_128(uncanon_sat, A)(A, S, F, SAT) + +static void parts64_set_max_normal(FloatParts64 *p, const FloatFmt *fmt); +static void parts128_set_max_normal(FloatParts128 *p, const FloatFmt *fmt); + +#define parts_set_max_normal(P, F) \ + PARTS_GENERIC_64_128(set_max_normal, P)(P, F) =20 static void parts64_uncanon(FloatParts64 *p, float_status *status, const FloatFmt *fmt); @@ -1662,6 +1745,20 @@ static const uint16_t rsqrt_tab[128] =3D { * Pack/unpack routines with a specific FloatFmt. */ =20 +static void float8_e4m3_unpack_canonical(FloatParts64 *p, float8_e4m3 f, + float_status *s) +{ + float8_e4m3_unpack_raw(p, f); + parts_canonicalize(p, s, &float8_e4m3_params); +} + +static void float8_e5m2_unpack_canonical(FloatParts64 *p, float8_e5m2 f, + float_status *s) +{ + float8_e5m2_unpack_raw(p, f); + parts_canonicalize(p, s, &float8_e5m2_params); +} + static void float16a_unpack_canonical(FloatParts64 *p, float16 f, float_status *s, const FloatFmt *par= ams) { @@ -1682,6 +1779,24 @@ static void bfloat16_unpack_canonical(FloatParts64 *= p, bfloat16 f, parts_canonicalize(p, s, &bfloat16_params); } =20 +static float8_e4m3 float8_e4m3_round_pack_canonical(FloatParts64 *p, + float_status *status, + const FloatFmt *params, + const bool saturate) +{ + parts_uncanon_sat(p, status, params, saturate); + return float8_e4m3_pack_raw(p); +} + +static float8_e5m2 float8_e5m2_round_pack_canonical(FloatParts64 *p, + float_status *status, + const FloatFmt *params, + const bool saturate) +{ + parts_uncanon_sat(p, status, params, saturate); + return float8_e5m2_pack_raw(p); +} + static float16 float16a_round_pack_canonical(FloatParts64 *p, float_status *s, const FloatFmt *params) @@ -1838,7 +1953,7 @@ static floatx80 floatx80_round_pack_canonical(FloatPa= rts128 *p, case float_class_normal: case float_class_denormal: if (s->floatx80_rounding_precision =3D=3D floatx80_precision_x) { - parts_uncanon_normal(p, s, fmt); + parts_uncanon_normal(p, s, fmt, false); frac =3D p->frac_hi; exp =3D p->exp; } else { @@ -1847,7 +1962,7 @@ static floatx80 floatx80_round_pack_canonical(FloatPa= rts128 *p, p64.sign =3D p->sign; p64.exp =3D p->exp; frac_truncjam(&p64, p); - parts_uncanon_normal(&p64, s, fmt); + parts_uncanon_normal(&p64, s, fmt, false); frac =3D p64.frac; exp =3D p64.exp; } @@ -2823,6 +2938,66 @@ static void parts_float_to_float_widen(FloatParts128= *a, FloatParts64 *b, } } =20 +bfloat16 float8_e4m3_to_bfloat16(float8_e4m3 a, float_status *s) +{ + FloatParts64 p; + + float8_e4m3_unpack_canonical(&p, a, s); + parts_float_to_float(&p, s); + + return bfloat16_round_pack_canonical(&p, s); +} + +bfloat16 float8_e5m2_to_bfloat16(float8_e5m2 a, float_status *s) +{ + FloatParts64 p; + + float8_e5m2_unpack_canonical(&p, a, s); + parts_float_to_float(&p, s); + + return bfloat16_round_pack_canonical(&p, s); +} + +float8_e4m3 bfloat16_to_float8_e4m3(bfloat16 a, bool saturate, float_statu= s *s) +{ + FloatParts64 p; + + bfloat16_unpack_canonical(&p, a, s); + parts_float_to_float(&p, s); + return float8_e4m3_round_pack_canonical(&p, s, &float8_e4m3_params, + saturate); +} + +float8_e5m2 bfloat16_to_float8_e5m2(bfloat16 a, bool saturate, float_statu= s *s) +{ + FloatParts64 p; + + bfloat16_unpack_canonical(&p, a, s); + parts_float_to_float(&p, s); + return float8_e5m2_round_pack_canonical(&p, s, &float8_e5m2_params, + saturate); +} + +float8_e4m3 float32_to_float8_e4m3(float32 a, bool saturate, float_status = *s) +{ + FloatParts64 p; + + float32_unpack_canonical(&p, a, s); + parts_float_to_float(&p, s); + return float8_e4m3_round_pack_canonical(&p, s, &float8_e4m3_params, + saturate); +} + +float8_e5m2 float32_to_float8_e5m2(float32 a, bool saturate, float_status = *s) +{ + FloatParts64 p; + + float32_unpack_canonical(&p, a, s); + parts_float_to_float(&p, s); + return float8_e5m2_round_pack_canonical(&p, s, &float8_e5m2_params, + saturate); +} + float32 float16_to_float32(float16 a, bool ieee, float_status *s) { const FloatFmt *fmt16 =3D ieee ? &float16_params : &float16_params_ahp; diff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h index 8f82fdfc97..b781bf10b7 100644 --- a/include/fpu/softfloat-types.h +++ b/include/fpu/softfloat-types.h @@ -119,6 +119,18 @@ typedef struct { */ typedef uint16_t bfloat16; =20 +/* + * Software OCP(Open Compute Project) floating point types + */ +typedef uint8_t float8_e4m3; +typedef uint8_t float8_e5m2; +#define float8_e4m3_val(x) (x) +#define float8_e5m2_val(x) (x) +#define make_float8_e4m3(x) (x) +#define make_float8_e5m2(x) (x) +#define const_float8_e4m3(x) (x) +#define const_float8_e5m2(x) (x) + /* * Software IEC/IEEE floating-point underflow tininess-detection mode. */ diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h index c18ab2cb60..30aca23057 100644 --- a/include/fpu/softfloat.h +++ b/include/fpu/softfloat.h @@ -189,6 +189,87 @@ float128 int128_to_float128(Int128, float_status *stat= us); float128 uint64_to_float128(uint64_t, float_status *status); float128 uint128_to_float128(Int128, float_status *status); =20 +/*------------------------------------------------------------------------= ---- +| Software OCP conversion routines. +*-------------------------------------------------------------------------= ---*/ + +bfloat16 float8_e4m3_to_bfloat16(float8_e4m3, float_status *status); +bfloat16 float8_e5m2_to_bfloat16(float8_e5m2, float_status *status); +float8_e4m3 bfloat16_to_float8_e4m3(bfloat16, bool saturate, float_status = *status); +float8_e5m2 bfloat16_to_float8_e5m2(bfloat16, bool saturate, float_status = *status); +float8_e4m3 float32_to_float8_e4m3(float32, bool saturate, float_status *s= tatus); +float8_e5m2 float32_to_float8_e5m2(float32, bool saturate, float_status *s= tatus); + +/*------------------------------------------------------------------------= ---- +| Software OCP operations. +*-------------------------------------------------------------------------= ---*/ + +bool float8_e4m3_is_quiet_nan(float8_e4m3, float_status *status); +bool float8_e4m3_is_signaling_nan(float8_e4m3, float_status *status); +bool float8_e5m2_is_quiet_nan(float8_e5m2, float_status *status); +bool float8_e5m2_is_signaling_nan(float8_e5m2, float_status *status); + +static inline bool float8_e4m3_is_any_nan(float8_e4m3 a) +{ + return ((float8_e4m3_val(a) & ~0x80) =3D=3D 0x7f); +} + +static inline bool float8_e5m2_is_any_nan(float8_e5m2 a) +{ + return ((float8_e5m2_val(a) & ~0x80) > 0x7c); +} + +static inline bool float8_e4m3_is_neg(float8_e4m3 a) +{ + return float8_e4m3_val(a) >> 7; +} + +static inline bool float8_e5m2_is_neg(float8_e5m2 a) +{ + return float8_e5m2_val(a) >> 7; +} + +static inline bool float8_e4m3_is_infinity(float8_e4m3 a) +{ + return false; +} + +static inline bool float8_e5m2_is_infinity(float8_e5m2 a) +{ + return (float8_e5m2_val(a) & 0x7f) =3D=3D 0x7c; +} + +static inline bool float8_e4m3_is_zero(float8_e4m3 a) +{ + return (float8_e4m3_val(a) & 0x7f) =3D=3D 0; +} + +static inline bool float8_e5m2_is_zero(float8_e5m2 a) +{ + return (float8_e5m2_val(a) & 0x7f) =3D=3D 0; +} + +static inline bool float8_e4m3_is_zero_or_denormal(float8_e4m3 a) +{ + return (float8_e4m3_val(a) & 0x78) =3D=3D 0; +} + +static inline bool float8_e5m2_is_zero_or_denormal(float8_e5m2 a) +{ + return (float8_e5m2_val(a) & 0x7c) =3D=3D 0; +} + +static inline bool float8_e4m3_is_normal(float8_e4m3 a) +{ + uint8_t em =3D float8_e4m3_val(a) & 0x7f; + return em >=3D 0x8 && em <=3D 0x7e; +} + +static inline bool float8_e5m2_is_normal(float8_e5m2 a) +{ + return (((float8_e5m2_val(a) >> 2) + 1) & 0x1f) >=3D 2; +} + /*------------------------------------------------------------------------= ---- | Software half-precision conversion routines. *-------------------------------------------------------------------------= ---*/ --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769496030; cv=none; d=zohomail.com; s=zohoarc; b=Rb/qrYVLp731keEgEItdPTyX9zc58dhbvpMkl51wbZ5UhvbWWy6+U3gASTf6EsIESHgm+SAeCVHMD/5jlIGGDAfjAOmZTXyQAgJEGFaNYBQw1j9q/YB8RHdmDDjdaOHoaY27oEBl2GvqgzFmw8wKS+qTqvj3779fTelqiiru+Jc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769496030; 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=IB2c/ii+7jIx2lVcfBPzX5OfuRwjeJn1wLXM2b0V/+s=; b=Xf/xZ25c2MbfFz6aJav2luXewah1A0pFumC/auR0mWsT9Cpag8Lv4Ey0tM8nEgt7Uf5inWIOwVqXNGVkbwBy4uF/nY9sxFP/hkRVAr0rZ5bU9k76TYuFrUM4kuA6Syw0Gx0El9pLpDtzXT/Tvc+kJD+O9kPzJuK0/t5BZXqc5bo= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769496030265646.1423693256635; Mon, 26 Jan 2026 22:40:30 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkchs-0002oC-9J; Tue, 27 Jan 2026 01:37:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkchq-0002nd-Lt for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:42 -0500 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkcho-0006hO-Ld for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:42 -0500 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2a7a9b8ed69so56396615ad.2 for ; Mon, 26 Jan 2026 22:37:40 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.37.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:37:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495859; x=1770100659; 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; bh=IB2c/ii+7jIx2lVcfBPzX5OfuRwjeJn1wLXM2b0V/+s=; b=nlsYluX0vmlkKstgHRRzgWH2DL6EiELbsoNbws5wTxtXWzjSjgL3obWKYhPJQus07M wiUGxNJhj8jtppcSwtRwsB1W4ZlUmBGygSu5adGibg+HFCby5hYm0s/NSypMGAmpWDoZ 0Rb4JymmURW824D0ptQ0HOGzu1arMpDKYFlc3Xkz5Rc+3QCg9tE4HkUwSkQxfPVir7Ks RTW07/EoxLiceFYMHqBVirxEwhcYXsxQvsF35ijT/0uFL1YX/TpI3FM9cEXlvpoEEBmY Jvg4XBzDwMqM2zHIu121re/UjiCyjgUAQ9MA/oFdwyPzoHh1qfJQo7hmBCy+LFqPU+Od 8SkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495859; x=1770100659; 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; bh=IB2c/ii+7jIx2lVcfBPzX5OfuRwjeJn1wLXM2b0V/+s=; b=WSx98coygN1KfkpOSriTypojMp7KZFRzmq3JQeAmY46qxlZA2Gz9P1ZW/LcEdlKiTO XD6ucT+ikiPAolmCxRlmrE3U3xddYDsM8hNnntKrK9vFM95EICpcbR4PI+S4JKAPeVF9 MjrNNa3JrC5/fepty+jwc25U8VCoFD/p4Ux8C+KPYq9yRAdzPZURC+BSAt5B1hFp8OCc YbEaThiuprgOaG7FgwdX8mZ67yu+cj/H3cNSYfGepm+xcq4FV8vmOdBTYnYeyvE9M6iM W20vkkOMVwsovw3NYv5vE70qxa0XkxVBjCUy2fp8oSBZ19lwHmvDPmN5IkasM5Vpmo2o QGHg== X-Gm-Message-State: AOJu0YwJnXmkjsHQU7BBprRl2C7+0qfq/23Ul6NtyI30Bk5tedWJfvU6 AS094x9NnhPmrTcbHwZVY+joK5dX+YEvMVcsDg3G5xvtM2NJCFRyI4w81KAkFdgG1AnBqMZgyb0 q5alintkt7ZEXRR71nyUWDehbvWVeFUNVtPPtBBxLdhyvSS67QOvymp480c5opwqkBCkOFCFkid J7fs4IUSB8DcSUTZpOdhjZyLl9NDbU13BM3WMLmc+GBQ== X-Gm-Gg: AZuq6aK5GG7ACRfRYBqEuNKlH1goFwJaTLowUn2eP5Cyn0dBqIZT7K7MQTEozeOcKJL TTEOfZBd/AtlW9mHIWMGXARWoMma4H79faimGxoBjEdtKsPOTUJWxIUD+AvVvGkjxvppv825iuV hppkAKJJCxuAjXGZ5G/l05k1O2phu1txJmfpqFADKW4MHTKBvPhrGDLHaocx6SIplwiZs1wTtlD D9gTI7aF8C3h3Nj9LONEvvOKeFV6wNOw2clskzEtycfCr6HHHzpWdmEZwMyYvn3/rYP5EFimUyB 53yEBTlBOFsksyoc/xb1+4ws+XXOdhgOmar1oEmEamD57+0AnsIBg6BrJoFOgWAXmW011WavH7J MyBFoHQ3huRBfAw0UZRSUUnjytM0hJDwRK7SOUsNNeSVLYutZSGRpt6BClU+zvE+0OhjiFt23oa 0j2oJDUSjENZH8Yo53/5cg6bW84wVd6IPrLMaoYkjBU3ueq73LKplS/0an3S4Y0yJye2vnwCeoP z0cWJa4Q+w6Vo8= X-Received: by 2002:a17:903:1a88:b0:2a0:f828:24a3 with SMTP id d9443c01a7336-2a870e18d4amr8755935ad.28.1769495859332; Mon, 26 Jan 2026 22:37:39 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou Subject: [PATCH v2 04/17] fpu/softfloat: Support OCP(Open Compute Project) OFP4 data type Date: Tue, 27 Jan 2026 14:37:10 +0800 Message-ID: <20260127063723.442734-5-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=max.chou@sifive.com; helo=mail-pl1-x631.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: 1769496032724154100 Content-Type: text/plain; charset="utf-8" This commit provides the basic operation support for the OCP float4 data type(e2m1). Signed-off-by: Max Chou --- fpu/softfloat.c | 29 +++++++++++++++++++++++ include/fpu/softfloat-types.h | 5 ++++ include/fpu/softfloat.h | 43 +++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index 533f96dcda..96845e86df 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -595,6 +595,13 @@ static inline bool fmt_has_nan_encoding(const FloatFmt= *fmt) .frac_shift =3D (-F - 1) & 63, \ .round_mask =3D (1ull << ((-F - 1) & 63)) - 1 =20 +static const FloatFmt float4_e2m1_params =3D { + FLOAT_PARAMS(2, 1), + .no_infinity =3D true, + .limited_nan =3D true, + .normal_frac_max =3D NORMAL_FRAC_MAX_ALL, +}; + static const FloatFmt float8_e4m3_params =3D { FLOAT_PARAMS(4, 3), .no_infinity =3D true, @@ -663,6 +670,11 @@ static void unpack_raw64(FloatParts64 *r, const FloatF= mt *fmt, uint64_t raw) }; } =20 +static void QEMU_FLATTEN float4_e2m1_unpack_raw(FloatParts64 *p, float4_e2= m1 f) +{ + unpack_raw64(p, &float4_e2m1_params, f); +} + static void QEMU_FLATTEN float8_e4m3_unpack_raw(FloatParts64 *p, float8_e4= m3 f) { unpack_raw64(p, &float8_e4m3_params, f); @@ -1745,6 +1757,13 @@ static const uint16_t rsqrt_tab[128] =3D { * Pack/unpack routines with a specific FloatFmt. */ =20 +static void float4_e2m1_unpack_canonical(FloatParts64 *p, float4_e2m1 f, + float_status *s) +{ + float4_e2m1_unpack_raw(p, f); + parts_canonicalize(p, s, &float4_e2m1_params); +} + static void float8_e4m3_unpack_canonical(FloatParts64 *p, float8_e4m3 f, float_status *s) { @@ -2938,6 +2957,16 @@ static void parts_float_to_float_widen(FloatParts128= *a, FloatParts64 *b, } } =20 +float8_e4m3 float4_e2m1_to_float8_e4m3(float4_e2m1 a, float_status *s) +{ + FloatParts64 p; + + float4_e2m1_unpack_canonical(&p, a, s); + parts_float_to_float(&p, s); + + return float8_e4m3_round_pack_canonical(&p, s, &float8_e4m3_params, fa= lse); +} + bfloat16 float8_e4m3_to_bfloat16(float8_e4m3 a, float_status *s) { FloatParts64 p; diff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h index b781bf10b7..f8cadffff4 100644 --- a/include/fpu/softfloat-types.h +++ b/include/fpu/softfloat-types.h @@ -131,6 +131,11 @@ typedef uint8_t float8_e5m2; #define const_float8_e4m3(x) (x) #define const_float8_e5m2(x) (x) =20 +typedef uint8_t float4_e2m1; +#define float4_e2m1_val(x) ((x) & 0xf) +#define make_float4_e2m1(x) ((x) & 0xf) +#define const_float4_e2m1(x) ((x) & 0xf) + /* * Software IEC/IEEE floating-point underflow tininess-detection mode. */ diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h index 30aca23057..4566257c09 100644 --- a/include/fpu/softfloat.h +++ b/include/fpu/softfloat.h @@ -200,6 +200,8 @@ float8_e5m2 bfloat16_to_float8_e5m2(bfloat16, bool satu= rate, float_status *statu float8_e4m3 float32_to_float8_e4m3(float32, bool saturate, float_status *s= tatus); float8_e5m2 float32_to_float8_e5m2(float32, bool saturate, float_status *s= tatus); =20 +float8_e4m3 float4_e2m1_to_float8_e4m3(float4_e2m1, float_status *status); + /*------------------------------------------------------------------------= ---- | Software OCP operations. *-------------------------------------------------------------------------= ---*/ @@ -270,6 +272,47 @@ static inline bool float8_e5m2_is_normal(float8_e5m2 a) return (((float8_e5m2_val(a) >> 2) + 1) & 0x1f) >=3D 2; } =20 +static inline bool float4_e2m1_is_quiet_nan(float4_e2m1 a, float_status *s= tatus) +{ + return false; +} + +static inline bool float4_e2m1_is_signaling_nan(float4_e2m1 a, float_statu= s *status) +{ + return false; +} + +static inline bool float4_e2m1_is_any_nan(float4_e2m1 a) +{ + return false; +} + +static inline bool float4_e2m1_is_neg(float4_e2m1 a) +{ + return float4_e2m1_val(a) >> 3; +} + +static inline bool float4_e2m1_is_infinity(float4_e2m1 a) +{ + return false; +} + +static inline bool float4_e2m1_is_zero(float4_e2m1 a) +{ + return (float4_e2m1_val(a) & 0x7) =3D=3D 0; +} + +static inline bool float4_e2m1_is_zero_or_denormal(float4_e2m1 a) +{ + return (float4_e2m1_val(a) & 0x6) =3D=3D 0; +} + +static inline bool float4_e2m1_is_normal(float4_e2m1 a) +{ + uint8_t em =3D float4_e2m1_val(a) & 0x7; + return em >=3D 0x2 && em <=3D 0x7; +} + /*------------------------------------------------------------------------= ---- | Software half-precision conversion routines. *-------------------------------------------------------------------------= ---*/ --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769495915; cv=none; d=zohomail.com; s=zohoarc; b=CMAxIxys+bKJ1hIQbVTU9eWGiym3t3UzRa/1fMNKOsSDsD9RwwQWT2oB/Bfg+/AUIZUlpKT+8QsGpIV+esjMJAdpRfEtx/rDvD/es7JNiwxX+GbSgPTuQ2MgKJH+5/jKkoAypsX1BNbnitN3VM0qQIm+4qwKAsOYItVAdMVC0VU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769495915; 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=WtNhWeVMoZx4v3vlFITbXT3n9HHx54McIikf5l1fVU4=; b=nNJoorbZNsCl4E2KwDBwn2YJ0NGiz0z/WwCmCGpqMfAdGRp5eyjCmVQ/dBxL2iCbuxs2yZeGGtcYA+Q8roPuTyEWYeHqms22AQSlSX8d229D8OzwCBFXE1a94OpzZ5b9+30wpMVuNBFDrnnzwc+Ag5Vtyz4VNklLYa5mul4SW5U= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769495915054881.0345496645363; Mon, 26 Jan 2026 22:38:35 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkchu-0002pl-UT; Tue, 27 Jan 2026 01:37:46 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkcht-0002op-0M for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:45 -0500 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkchr-0006i4-JB for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:44 -0500 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2a871daa98fso1204515ad.1 for ; Mon, 26 Jan 2026 22:37:43 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.37.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:37:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495862; x=1770100662; 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; bh=WtNhWeVMoZx4v3vlFITbXT3n9HHx54McIikf5l1fVU4=; b=B1MPdrKJSar40ms9SoO/k5fBiX4oYvsJJfHFfbNHMe6004wMGABgM670H5rqjrDhGM uRPVjrGiaIYPF1scwT7dSyZkbY3JPRpHF0ShVBYPFBuFiZYv2HnYYi/7FjOzSSaLZW/Z 8S6pCtcQJx3OiZBpoeX2zU4fdXNMccLzMnlMgQDM7qlkQKJCQPgoCENSFlpwbgbR3SFr MaZFWCDuUJYjQjfTfXJ/strFCketLfVsmZnjtQHtsswc0kr1PrdTKI5ELZK5+7Ik6HVF sT8uAe+y/QsHDMKb2F1rYSvEObQpH0pMLcrqiF3RtUZYrZ7uc5KoN9FtZBPyEbUHizZn bIdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495862; x=1770100662; 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; bh=WtNhWeVMoZx4v3vlFITbXT3n9HHx54McIikf5l1fVU4=; b=VO30H8aH76d3++R7sUVeFWR2YQzXpJdQVK3p1qPugqw08D5Ol/jz0tk2Os09I0x08l ie9CTa4vGog7Tj7Re2Vlf13E1ia1l9eos3bbaqxhLl1E6KtmvI5a1+x5amqaTGE73q+V 5cuDQHBoLqKnf4cueH8bJhM06eD21D2yvpYTVt6KlShSbeX0SEvct5GdEFj9itnYfh2q wIAWc/sOWxiN8/jXVgoTWxaLlQeNvhaIdyN/YvmLQrW7pNrZNaaFvUBH4r06jF/WAZ4j AUI50dnkDk8qrm4cuoMknEAi42ef3twC9hPMtAI7IuNNFBVnohk2oGyW19mUoQ+S9dLf h0pA== X-Gm-Message-State: AOJu0YzpLa9inR1UeNXy8qYqw+8+Xt5/p8UKiiLQOLYRxaZf2BSepJUF FVsQDUFihxgzWrLK4Kjoj6hOWYVv83hl8keJJm0aOR2TWuZ+DDXcHF54zKJg9jZO6gmbX1td+2a jFxqsZe8lcEA26cBGXTYa576KbfjnogchEa4Pb6TzSD3oTZtj/e6ivks7ioRoXwEq3WXjbyqGqG JPWZN3rykvakST6dZfgpQ9iVVnu8Bk9XCKSsEKJgdiBw== X-Gm-Gg: AZuq6aJxnJJjInEmlXECxzcuqjjbXFk/WsqX9TQGaxU4Tk/VfM4DMiiVLAdj9ZF/QuJ MfgaJSg3dBE3kS0GsXwu0yJxKA33c7YuIomrKNg09Yk3Ng3n2DKM+UDhXeAnGPac7V4MkqNrfz/ K9Ns1Q5TwFfdaaXrO5PAj1DGAi9YVmHsH0sJ1pzf3jlSSDEbFFq45FmiAtXqlMVSH6HfQlyQZ29 gBiqVf3IsUxata1wfIq6SJegPHk6dhTUbuYgNYjIcI5JpIIBdnof/BG0UFcYPRImCkZllPhNjlk ftfDWRcY4J1uRUYgnCt7fczP4pQsDmZVkN3RmDGFpM1MHwQeBybwmhewgevD7bBgqeVQsGhqcAZ ax5CVjAN+F5nv+vVqA4KYFNXXDzXQ0BCC6KCOi1x8yZ7KKkZ19hA/dkBbX6FfQDxepzpmLpMzig gBbRLcTQBLoc9j1E9wMk0gJqZ6rrZWGboMOZlrEiCMspwqRSqGiPtZMBhg3UHqk7ooE3KIYwNe8 f8wJFTcDF4Cq10= X-Received: by 2002:a17:903:1a30:b0:2a0:c1f6:6bc2 with SMTP id d9443c01a7336-2a870e18d60mr8704915ad.59.1769495862011; Mon, 26 Jan 2026 22:37:42 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou , Alistair Francis Subject: [PATCH v2 05/17] target/riscv: Add cfg properity for Zvfofp8min extension Date: Tue, 27 Jan 2026 14:37:11 +0800 Message-ID: <20260127063723.442734-6-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=max.chou@sifive.com; helo=mail-pl1-x629.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: 1769495918301154100 Content-Type: text/plain; charset="utf-8" According to the ISA spec of Zvfofp8min extension, "The Zvfofp8min extension requires on the Zve32f extension." Signed-off-by: Max Chou --- target/riscv/cpu.c | 1 + target/riscv/cpu_cfg_fields.h.inc | 1 + target/riscv/tcg/tcg-cpu.c | 5 +++++ target/riscv/vector_helper.c | 3 ++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index bd17f61d7b..d6ce51ef5e 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -194,6 +194,7 @@ const RISCVIsaExtData isa_edata_arr[] =3D { ISA_EXT_DATA_ENTRY(zvfbfwma, PRIV_VERSION_1_12_0, ext_zvfbfwma), ISA_EXT_DATA_ENTRY(zvfh, PRIV_VERSION_1_12_0, ext_zvfh), ISA_EXT_DATA_ENTRY(zvfhmin, PRIV_VERSION_1_12_0, ext_zvfhmin), + ISA_EXT_DATA_ENTRY(zvfofp8min, PRIV_VERSION_1_12_0, ext_zvfofp8min), ISA_EXT_DATA_ENTRY(zvkb, PRIV_VERSION_1_12_0, ext_zvkb), ISA_EXT_DATA_ENTRY(zvkg, PRIV_VERSION_1_12_0, ext_zvkg), ISA_EXT_DATA_ENTRY(zvkn, PRIV_VERSION_1_12_0, ext_zvkn), diff --git a/target/riscv/cpu_cfg_fields.h.inc b/target/riscv/cpu_cfg_field= s.h.inc index 3696f02ee0..59302894af 100644 --- a/target/riscv/cpu_cfg_fields.h.inc +++ b/target/riscv/cpu_cfg_fields.h.inc @@ -104,6 +104,7 @@ BOOL_FIELD(ext_zvfbfmin) BOOL_FIELD(ext_zvfbfwma) BOOL_FIELD(ext_zvfh) BOOL_FIELD(ext_zvfhmin) +BOOL_FIELD(ext_zvfofp8min) BOOL_FIELD(ext_smaia) BOOL_FIELD(ext_ssaia) BOOL_FIELD(ext_smctr) diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c index 378b298886..ba89436f13 100644 --- a/target/riscv/tcg/tcg-cpu.c +++ b/target/riscv/tcg/tcg-cpu.c @@ -710,6 +710,11 @@ void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, = Error **errp) return; } =20 + if (cpu->cfg.ext_zvfofp8min && !cpu->cfg.ext_zve32f) { + error_setg(errp, "Zvfofp8min extension depends on Zve32f extension= "); + return; + } + if (cpu->cfg.ext_zvfh && !cpu->cfg.ext_zfhmin) { error_setg(errp, "Zvfh extensions requires Zfhmin extension"); return; diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c index ec0ea4c143..ee5a1e595b 100644 --- a/target/riscv/vector_helper.c +++ b/target/riscv/vector_helper.c @@ -38,7 +38,8 @@ static target_ulong vtype_reserved(CPURISCVState *env, ta= rget_ulong vtype) int xlen =3D riscv_cpu_xlen(env); target_ulong reserved =3D 0; =20 - if (riscv_cpu_cfg(env)->ext_zvfbfa) { + if (riscv_cpu_cfg(env)->ext_zvfbfa || + riscv_cpu_cfg(env)->ext_zvfofp8min) { reserved =3D vtype & MAKE_64BIT_MASK(R_VTYPE_RESERVED_SHIFT, xlen - 1 - R_VTYPE_RESERVED_SHI= FT); } else { --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769496123; cv=none; d=zohomail.com; s=zohoarc; b=SYPfLcjj1W8K1B14IYLYf7+tiDZomDT4P8XFxYQMA5RTxOQzYIHW6wZ1gurLkiO917kI2X28EE4QFd0jRbZhV0WQV/wBdi0XriRveviogudL76EUOOLBmswndUVtvf3n81BMIE64Y4gD0mly3DAckyx+KqQPCig+1WoQ0LL5Al4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769496123; 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=0PAMSHiK5VxvAyBb7t1SnwzGu3eBjt9q5jInjPFmz0c=; b=GxJkHPuIA6SC7mDjoFX9e988198H14wtNwKMz+1kH6AUz/lGH2gvUU3qYErCXbt2kpoNI1bsfXosUIfN31gAvkzb4Hjj4MEe86VGBiQfF6Sxnx3DsCysQHN+2b/mv7FNSX6ETmPTT2im/AKxAAn8kgHTOtItcfuO1LX510KAQOY= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769496123772396.3589375592069; Mon, 26 Jan 2026 22:42:03 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkchx-0002q5-6n; Tue, 27 Jan 2026 01:37:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkchv-0002pw-KX for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:47 -0500 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkchu-0006ih-93 for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:47 -0500 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2a0c20ee83dso49461515ad.2 for ; Mon, 26 Jan 2026 22:37:45 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.37.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:37:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495865; x=1770100665; 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; bh=0PAMSHiK5VxvAyBb7t1SnwzGu3eBjt9q5jInjPFmz0c=; b=ZjTYRrlOa2AskOi9jbDjW5XhzgYmTD/d843Ktgkf+1xbwGlEZtM6WcEtrc/cW/g5Cg qaKOua5WRoRVOt9TooVaDip+uVB9i1uytU1o0aC8arffjAcb1DOTujoj/mNeaMxDEQ/P erHKXs2N+gROBuVwCxywWy1d1bJIWPF6+0vSMuc7TYceIV/KPsM7nca3c8RsAsnM1A02 CFF2JyoTzzMsH/Jl0nC8MpOQt1IfWeCpm8rIPKAXwCMw5a7oIo356aygEozEo3qFp0Ym pT6CFebc2hfzmwPcLJ5PV0Tyivt3yfOvBFB47ZuetyzQaYODMNk+9DWpIV6DmZPMNNhG TKBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495865; x=1770100665; 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; bh=0PAMSHiK5VxvAyBb7t1SnwzGu3eBjt9q5jInjPFmz0c=; b=VmbDJnDXsjF4670hY11yXrxxb97ggJQDtsZJwME+7sj3krpZLfqr70xGjMQ4Wr6Itx IQsxWGiX1lKHoAGH4golf1iJ30/MU8X18v/qeyoRdaKBah3ZKyCERA4u5hluyGAQwS6c IK6jf2fQ0GkCpUa8cotU94TChSo6UOgYnr8lJUW1n25kc3bQT+zqSMVR2n25gcPO8b0p X+u1+wUp7OQBSm0ppoLZiXaqRazOOkKB/Y2suGoTHiIiF4Aqa2oeqqxx8sCQ7OLimilx 1LU7jq8XONN+OwymdgD+Ei7M477Ow3P3FpNH45KGEo1jsqvKH1Oi134KzubGCq/CQr+u WkWw== X-Gm-Message-State: AOJu0YxBbxwNCaumWjWdt6+mEyIJYLC6lBN1UNxOPTiGhebRrMsblo8z DuAuO3+RlGH8mpTpv8x6rRkn7MUsiQPn499TMrutGIqn8JjngPYXpJAa1TbwSFtzrCtXW4YJc5o C6bP4QD2o8aLEQHhDDB7t5iFZeNTRJgtgNcAXF/o2FqqIIWBzkyPCXUZs1uxSESuuIunN0bjXyl 5BTygl/+M+79o2uDHxysM4B/LWWEeDAEwOtua6wL+0Ow== X-Gm-Gg: AZuq6aIgArYo52HO8nH0lUY44sGrq3PYq4LYmAYRbfGPweUlr4j2wXGuQm4gm3e0oRn SMIRlXJmkEzepGPmk1HDFTfq3p03jXo7lONtJLophyXbyZoZg4gIZGwWbc3Dfaqq2tiYH7dwTpi dEixXMi/acZqXrrKyzIwdO1qBW3O95bh9//8+Bh2aqQq75xmgHi/tSUvTMrsRAtsd7RBkIH0dF6 /+KSuWoytD14FLNvZ6XeVG9/cGzTh+fD2We5eT1L+xHZVykTitsexGwdRWOuAmjjaA5wMgmoGRu mrGiD7ca54nz0Ctcd3SkX63JxGt0b4YuOf/rfBDKl/0YPaam1XlA0FK+CsrgFuT3VM+twplQ+Dg loyFfTup0jrjUUKTo8v2zeXsMTzCWhrvzn2l5ah9Q5ZlYmojJmXzkt2rPyUQsEjlxUUk3VLaY5t cI9NWKXkPqG+W+820M28JRxMzk4wUAeNokQYkXPkQ9KOIg/g5rAj+KIrj2DmDGXyEr13bHgywO+ zsjWMbTjzxtxeo= X-Received: by 2002:a17:903:4b0c:b0:2a7:80bf:312e with SMTP id d9443c01a7336-2a870dbbb84mr8282765ad.28.1769495864606; Mon, 26 Jan 2026 22:37:44 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou , Alistair Francis Subject: [PATCH v2 06/17] target/riscv: Add implied rules for Zvfofp8min extension Date: Tue, 27 Jan 2026 14:37:12 +0800 Message-ID: <20260127063723.442734-7-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=max.chou@sifive.com; helo=mail-pl1-x62a.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: 1769496125910158500 Content-Type: text/plain; charset="utf-8" Add implied rules to enable the implied extensions of Zvfofp8min extension recursively. Signed-off-by: Max Chou --- target/riscv/cpu.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index d6ce51ef5e..36fddce5bf 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -2507,6 +2507,15 @@ static RISCVCPUImpliedExtsRule ZVFHMIN_IMPLIED =3D { }, }; =20 +static RISCVCPUImpliedExtsRule ZVFOFP8MIN_IMPLIED =3D { + .ext =3D CPU_CFG_OFFSET(ext_zvfofp8min), + .implied_multi_exts =3D { + CPU_CFG_OFFSET(ext_zve32f), + + RISCV_IMPLIED_EXTS_RULE_END + }, +}; + static RISCVCPUImpliedExtsRule ZVKN_IMPLIED =3D { .ext =3D CPU_CFG_OFFSET(ext_zvkn), .implied_multi_exts =3D { @@ -2635,8 +2644,8 @@ RISCVCPUImpliedExtsRule *riscv_multi_ext_implied_rule= s[] =3D { &ZKS_IMPLIED, &ZVBB_IMPLIED, &ZVE32F_IMPLIED, &ZVE32X_IMPLIED, &ZVE64D_IMPLIED, &ZVE64F_IMPLIED, &ZVE64X_IMPLIED, &ZVFBFMIN_IMPLIED, &ZVFBFWMA_IMPLIED, - &ZVFH_IMPLIED, &ZVFHMIN_IMPLIED, &ZVKN_IMPLIED, - &ZVKNC_IMPLIED, &ZVKNG_IMPLIED, &ZVKNHB_IMPLIED, + &ZVFH_IMPLIED, &ZVFHMIN_IMPLIED, &ZVFOFP8MIN_IMPLIED, + &ZVKN_IMPLIED, &ZVKNC_IMPLIED, &ZVKNG_IMPLIED, &ZVKNHB_IMPLIED, &ZVKS_IMPLIED, &ZVKSC_IMPLIED, &ZVKSG_IMPLIED, &SSCFG_IMPLIED, &SUPM_IMPLIED, &SSPM_IMPLIED, &SMCTR_IMPLIED, &SSCTR_IMPLIED, NULL --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769495991; cv=none; d=zohomail.com; s=zohoarc; b=hElYDHB2PNSKGX0HcAS2uqGrsLhdPQ+YySajyTNkQwTqqWHJo5hqK0Qa7470/h2S3rZ1p0MwECTruzZ964iH/Qsf7w9SrpSh5h+jTk0/8kWbotCv4r16N6Zt+uJf+fO0WCIZM5IDQoGa94TGvX3Rxa6sZKj3reepKui+LjShcQ4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769495991; 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=63sWoJLOOtd8lWo8QXyMTRA67VQwKXCg87mJb8KQGqM=; b=EQ79lgqNVVIQ3CtzDvCfcz6ysejeWH7nX9XkseW5SXvPrBKYv1aAaQxmu3kfGNNlUeP9aZ6Lo5EJbH133CvaFXPQiZP7N68bhnwThiCfM0CVEI7CKXmWzv0chUssBEJ3g3VA6TCvErxOt/Lknq4EerbhoOSUPNY6dLFtAOUzox8= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769495991539911.0197039447518; Mon, 26 Jan 2026 22:39:51 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkci0-0002rA-R0; Tue, 27 Jan 2026 01:37:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkchy-0002qd-K8 for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:50 -0500 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkchw-0006j2-Ph for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:50 -0500 Received: by mail-pg1-x52e.google.com with SMTP id 41be03b00d2f7-b6ce6d1d3dcso1988537a12.3 for ; Mon, 26 Jan 2026 22:37:48 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.37.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:37:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495867; x=1770100667; 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; bh=63sWoJLOOtd8lWo8QXyMTRA67VQwKXCg87mJb8KQGqM=; b=YwlQTdm0kCrDPlANMyHieOV+ueEbiUiD+aDAnbbq7bPK1PowS74RudlopufFMhh4K3 NPmOBgB9wYTVTHsBcH3z0XuK+TffGj3QkFoxyPZRNdMC3KhGWz4h/NjkfqcwKHHAM7xx ++TLNPgV09P1sM0J8nStWYjxwJuB+ch+He5f5uz8FzUIwZx4Ujg+49SDnQUaCzsoNnpD 0Q4ChGnfagYeMVzuBf5Yn8pPpvGuSd2eAMtC7/TPEIkTxWJxQZBVQHv/BmUn3H3FFN81 7Krw78f1oEHmiCMnWZSyaUcKY/BXmz684TS94GyYcsqQ+hQpJyvTVM6j5YPrvxGFGAzJ 5XMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495867; x=1770100667; 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; bh=63sWoJLOOtd8lWo8QXyMTRA67VQwKXCg87mJb8KQGqM=; b=HENUsnOfw69JyWxFY/iH7sXgQNOt4vAyEqARSt7DyHKqZCReyXiY+keMDp8sJHFRtS ulCOles1oTomFxcFpZOOSLs5Yqxt7gKu0Wcpq7bwN5bJYq4KFXjtHuW62hzXDvToKY0x BNq9uQ8M2eADGjNil1geWYygv7IH1LTElr2UXxWa8mzwlWDknA26kPOhSXvCyfaSgkQK e3uFibTVBoTqfFKjk86Rmgrw8aVHCHSzs0IrS1PRTxCHua2oCXIw3frYKYYF2QIEFSA4 svMoQ3p3c9mg8ANXK6Pgfaw5FRc9SKiwUd7Z/mLb0YFAesFBR21xVOIV0i2vfiVZWYs3 m/hQ== X-Gm-Message-State: AOJu0YymSp8R3deR7K2e/noNTo5uV/fvjOheJxhxiT71fpbxDqRgePmj rv3t2fKExGN7v0XNISuDHpFIFQMBGrooEjlnMKJuK0oh0MHb1x6f5D+CpmTE0efM3Jl1grOuVAf kaE1PhdIB2/yH4448dOPBULHhxSFkaziXIOY9/bHC3N8hnYdvqo3i51X56YQSP/NgzdWPcCnxKJ 0JXLPbvcf+HggemnUxkNS1ShT2euQ8nMgL78+nVEMZkA== X-Gm-Gg: AZuq6aKL8m+4xqnz9RrJEjehZiwccdoihsUW0Upzk2y7SzdS8z3yxsBBd2WTfFN4skE NWzkmMdJM9Hy/lLN+3542UCnD9fUfRfFTgM6JeMbUd5TCvHq0UMapPeHvF7AysCz7GNwolo7Pee Ktgs1NBLKjUZJjBNItFIUCJBTyXfVHlREzlA33kT+/Jkobsm/dJ8YBv1SSe1592jd8Ygw+UGEM9 KUQX8piDAzpfvkNPRrBEpqzcU2Ev3IIhWHBZg2wfz6NdsxspID05pE5yb4aj8Dow6tViid2Mh6M +FGeq0fwpA8/2iRHPr1xX6PE6ImAbhhC4CCH9Kr+woVls+X/cDBzfKrYU8HyEQ9G+Q+PcsCN+Yl yuGnBjjXuswALM09xxnxVrWS5SQx+WP5tW9Q/VAfMQz4anFI7rUEzhcNHS5gx9zhTibZcLOquD9 havkjYVpxNcN7sFD1lsHinC7fexnToP0q4+p+XeqgSw45nD4NK66sFLdm04zLNJdaShcG/Zo4Oo EofiuV7YccBeqg= X-Received: by 2002:a17:90b:2d83:b0:34a:a1c1:90a0 with SMTP id 98e67ed59e1d1-353fed87a85mr697371a91.28.1769495867244; Mon, 26 Jan 2026 22:37:47 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou , Alistair Francis Subject: [PATCH v2 07/17] target/riscv: rvv: Make vfwcvtbf16.f.f.v support OFP8 to BF16 conversion for Zvfofp8min extension Date: Tue, 27 Jan 2026 14:37:13 +0800 Message-ID: <20260127063723.442734-8-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52e; envelope-from=max.chou@sifive.com; helo=mail-pg1-x52e.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: 1769495995123154100 Content-Type: text/plain; charset="utf-8" According to the Zvfofp8min extension, the vfwcvtbf16.f.f.v instruction supports OFP8 to BF16 conversion when SEW is 8. And the VTYPE.altfmt field is used to select the OFP8 format. * altfmt =3D 0: OFP8.e4m3 to BF16 * altfmt =3D 1: OFP8.e5m2 to BF16 Signed-off-by: Max Chou --- target/riscv/helper.h | 12 +++ target/riscv/insn_trans/trans_rvbf16.c.inc | 16 +++- target/riscv/vector_helper.c | 97 ++++++++++++++++++++++ 3 files changed, 121 insertions(+), 4 deletions(-) diff --git a/target/riscv/helper.h b/target/riscv/helper.h index eb0a488ba8..356c24d9fb 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -1247,6 +1247,18 @@ DEF_HELPER_5(vfwcvtbf16_f_f_v, void, ptr, ptr, ptr, = env, i32) DEF_HELPER_6(vfwmaccbf16_vv, void, ptr, ptr, ptr, ptr, env, i32) DEF_HELPER_6(vfwmaccbf16_vf, void, ptr, ptr, i64, ptr, env, i32) =20 +/* OFP8 functions */ +DEF_HELPER_5(vfwcvtbf16_f_f_v_ofp8e4m3, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(vfwcvtbf16_f_f_v_ofp8e5m2, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(vfncvtbf16_f_f_w_ofp8e4m3, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(vfncvtbf16_f_f_w_ofp8e5m2, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(vfncvtbf16_sat_f_f_w_ofp8e4m3, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(vfncvtbf16_sat_f_f_w_ofp8e5m2, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(vfncvt_f_f_q_ofp8e4m3, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(vfncvt_f_f_q_ofp8e5m2, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(vfncvt_sat_f_f_q_ofp8e4m3, void, ptr, ptr, ptr, env, i32) +DEF_HELPER_5(vfncvt_sat_f_f_q_ofp8e5m2, void, ptr, ptr, ptr, env, i32) + /* Vector crypto functions */ DEF_HELPER_6(vclmul_vv, void, ptr, ptr, ptr, ptr, env, i32) DEF_HELPER_6(vclmul_vx, void, ptr, ptr, tl, ptr, env, i32) diff --git a/target/riscv/insn_trans/trans_rvbf16.c.inc b/target/riscv/insn= _trans/trans_rvbf16.c.inc index 6cfda03d2e..9aafd4d2ef 100644 --- a/target/riscv/insn_trans/trans_rvbf16.c.inc +++ b/target/riscv/insn_trans/trans_rvbf16.c.inc @@ -92,11 +92,20 @@ static bool trans_vfncvtbf16_f_f_w(DisasContext *ctx, a= rg_vfncvtbf16_f_f_w *a) static bool trans_vfwcvtbf16_f_f_v(DisasContext *ctx, arg_vfwcvtbf16_f_f_v= *a) { REQUIRE_FPU; - REQUIRE_ZVFBFMIN(ctx); =20 - if (opfv_widen_check(ctx, a) && (ctx->sew =3D=3D MO_16)) { + if (opfv_widen_check(ctx, a) && + ((ctx->sew =3D=3D MO_16 && ctx->cfg_ptr->ext_zvfbfmin) || + (ctx->sew =3D=3D MO_8 && ctx->cfg_ptr->ext_zvfofp8min))) { + gen_helper_gvec_3_ptr *fn; uint32_t data =3D 0; =20 + if (ctx->sew =3D=3D MO_16) { + fn =3D gen_helper_vfwcvtbf16_f_f_v; + } else { + fn =3D ctx->altfmt ? gen_helper_vfwcvtbf16_f_f_v_ofp8e5m2 : + gen_helper_vfwcvtbf16_f_f_v_ofp8e4m3; + } + gen_set_rm_chkfrm(ctx, RISCV_FRM_DYN); =20 data =3D FIELD_DP32(data, VDATA, VM, a->vm); @@ -106,8 +115,7 @@ static bool trans_vfwcvtbf16_f_f_v(DisasContext *ctx, a= rg_vfwcvtbf16_f_f_v *a) tcg_gen_gvec_3_ptr(vreg_ofs(ctx, a->rd), vreg_ofs(ctx, 0), vreg_ofs(ctx, a->rs2), tcg_env, ctx->cfg_ptr->vlenb, - ctx->cfg_ptr->vlenb, data, - gen_helper_vfwcvtbf16_f_f_v); + ctx->cfg_ptr->vlenb, data, fn); finalize_rvv_inst(ctx); return true; } diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c index ee5a1e595b..418212973d 100644 --- a/target/riscv/vector_helper.c +++ b/target/riscv/vector_helper.c @@ -5024,6 +5024,103 @@ GEN_VEXT_V_ENV(vfncvt_f_f_w_w, 4) RVVCALL(OPFVV1, vfncvtbf16_f_f_w, NOP_UU_H, H2, H4, float32_to_bfloat16) GEN_VEXT_V_ENV(vfncvtbf16_f_f_w, 2) =20 +/* + * OCP FP8 Narrowing Conversions (BF16/F32 -> FP8) + * 1. Initialize a local float_status with RISC-V specific NaN handling + * 2. Call the softfloat conversion function with saturation parameter + * 3. Merge exception flags back to the original status + */ +#define GEN_OCP_FP8_NARROW(NAME, CONVERT_FN, SATURATE, IN_TYPE) \ +static uint8_t NAME(IN_TYPE a, float_status *s) \ +{ \ + float_status local =3D *s; \ + local.default_nan_pattern =3D 0x70; \ + local.default_nan_mode =3D true; \ + uint8_t result =3D CONVERT_FN(a, SATURATE, &local); \ + s->float_exception_flags |=3D local.float_exception_flags; \ + return result; \ +} + +/* BF16 -> E4M3/E5M2 conversions */ +GEN_OCP_FP8_NARROW(vfncvt_bf16_to_e4m3, bfloat16_to_float8_e4m3, false, + uint16_t) +GEN_OCP_FP8_NARROW(vfncvt_bf16_to_e5m2, bfloat16_to_float8_e5m2, false, + uint16_t) +GEN_OCP_FP8_NARROW(vfncvt_bf16_to_e4m3_sat, bfloat16_to_float8_e4m3, true, + uint16_t) +GEN_OCP_FP8_NARROW(vfncvt_bf16_to_e5m2_sat, bfloat16_to_float8_e5m2, true, + uint16_t) + +/* F32 -> E4M3/E5M2 conversions */ +GEN_OCP_FP8_NARROW(vfncvt_f32_to_e4m3, float32_to_float8_e4m3, false, uint= 32_t) +GEN_OCP_FP8_NARROW(vfncvt_f32_to_e5m2, float32_to_float8_e5m2, false, uint= 32_t) +GEN_OCP_FP8_NARROW(vfncvt_f32_to_e4m3_sat, float32_to_float8_e4m3, true, + uint32_t) +GEN_OCP_FP8_NARROW(vfncvt_f32_to_e5m2_sat, float32_to_float8_e5m2, true, + uint32_t) + +/* + * OCP FP8 Widening Conversions (FP8 -> BF16) + * According to Zvfofp8min isa specification: "No rounding occurs, and no + * floating-point exception flags are set." + * 1. Initialize a local float_status with no_signaling_nans=3Dtrue + * 2. Call the softfloat conversion function + * 3. Intentionally DISCARD exception flags (not merged back) + */ +#define GEN_OCP_FP8_WIDEN(NAME, CONVERT_FN) \ +static uint16_t NAME(uint8_t a, float_status *s) \ +{ \ + float_status local =3D *s; \ + local.no_signaling_nans =3D true; \ + return CONVERT_FN(a, &local); \ +} + +GEN_OCP_FP8_WIDEN(vfwcvt_e4m3_to_bf16, float8_e4m3_to_bfloat16) +GEN_OCP_FP8_WIDEN(vfwcvt_e5m2_to_bf16, float8_e5m2_to_bfloat16) + +/* vfwcvtbf16.f.f.w vd, vs2, vm # Convert OFP8 to BF16. */ +RVVCALL(OPFVV1, vfwcvtbf16_f_f_v_ofp8e4m3, WOP_UU_B, H2, H1, + vfwcvt_e4m3_to_bf16) +RVVCALL(OPFVV1, vfwcvtbf16_f_f_v_ofp8e5m2, WOP_UU_B, H2, H1, + vfwcvt_e5m2_to_bf16) +GEN_VEXT_V_ENV(vfwcvtbf16_f_f_v_ofp8e4m3, 2) +GEN_VEXT_V_ENV(vfwcvtbf16_f_f_v_ofp8e5m2, 2) + +/* vfncvtbf16.f.f.w vd, vs2, vm # Convert BF16 to OFP8 without saturation.= */ +RVVCALL(OPFVV1, vfncvtbf16_f_f_w_ofp8e4m3, NOP_UU_B, H1, H2, + vfncvt_bf16_to_e4m3) +RVVCALL(OPFVV1, vfncvtbf16_f_f_w_ofp8e5m2, NOP_UU_B, H1, H2, + vfncvt_bf16_to_e5m2) +GEN_VEXT_V_ENV(vfncvtbf16_f_f_w_ofp8e4m3, 1) +GEN_VEXT_V_ENV(vfncvtbf16_f_f_w_ofp8e5m2, 1) + +/* vfncvtbf16.sat.f.f.w vd, vs2, vm # Convert BF16 to OFP8 with saturation= . */ +RVVCALL(OPFVV1, vfncvtbf16_sat_f_f_w_ofp8e4m3, NOP_UU_B, H1, H2, + vfncvt_bf16_to_e4m3_sat) +RVVCALL(OPFVV1, vfncvtbf16_sat_f_f_w_ofp8e5m2, NOP_UU_B, H1, H2, + vfncvt_bf16_to_e5m2_sat) +GEN_VEXT_V_ENV(vfncvtbf16_sat_f_f_w_ofp8e4m3, 1) +GEN_VEXT_V_ENV(vfncvtbf16_sat_f_f_w_ofp8e5m2, 1) + +/* Quad-width narrowing type for FP32 to OFP8 */ +#define QOP_UU_B uint8_t, uint32_t, uint32_t + +/* vfncvt.f.f.q vd, vs2, vm # Convert FP32 to OFP8. */ +RVVCALL(OPFVV1, vfncvt_f_f_q_ofp8e4m3, QOP_UU_B, H1, H4, + vfncvt_f32_to_e4m3) +RVVCALL(OPFVV1, vfncvt_f_f_q_ofp8e5m2, QOP_UU_B, H1, H4, + vfncvt_f32_to_e5m2) +GEN_VEXT_V_ENV(vfncvt_f_f_q_ofp8e4m3, 1) +GEN_VEXT_V_ENV(vfncvt_f_f_q_ofp8e5m2, 1) + +/* vfncvt.sat.f.f.q vd, vs2, vm # Convert FP32 to OFP8 with saturation. */ +RVVCALL(OPFVV1, vfncvt_sat_f_f_q_ofp8e4m3, QOP_UU_B, H1, H4, + vfncvt_f32_to_e4m3_sat) +RVVCALL(OPFVV1, vfncvt_sat_f_f_q_ofp8e5m2, QOP_UU_B, H1, H4, + vfncvt_f32_to_e5m2_sat) +GEN_VEXT_V_ENV(vfncvt_sat_f_f_q_ofp8e4m3, 1) +GEN_VEXT_V_ENV(vfncvt_sat_f_f_q_ofp8e5m2, 1) + /* * Vector Reduction Operations */ --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769496002; cv=none; d=zohomail.com; s=zohoarc; b=eEPpbdRVH3Vs3/9XpoDCcoNISzQmr+lrb91hiSevKdBQvTqjPw8yb1o+hKqJ+Jj6A6VifDq1acCjUQXusoUS6HDFSh5wwzHf9RXRZHk3CKSTyTTS8N02Y1rwjnNQlLAhEbzKVp0Q3wJWDW7bap7yuOq4wZCTJcFPGR99HmtEF9k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769496002; 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=FIZ+8DhFMV5di51oJwROCHq2vvo+jCjrZCBVlKzi/NE=; b=I7WuN6sE7dygGgqhJrNqr97hTSYb6c3HhMhEhBOOGpf+Od2UhBJGwXpYc+K+PBSZEWK/4tmDTyn2NXDX+aCmuoMBVXWs0f9iwbJ5t7HQF4AScMpATocpSGOsmhDSRZ+hRVvDTvN2ngmO8J9/sKVlNa6BVRVj60X/SQqMvESmxbM= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769496002464220.87183068483796; Mon, 26 Jan 2026 22:40:02 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkci7-0002sd-3G; Tue, 27 Jan 2026 01:38:00 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkci2-0002ra-IT for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:54 -0500 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkci0-0006jb-51 for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:53 -0500 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-3530715386cso4617711a91.2 for ; Mon, 26 Jan 2026 22:37:51 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.37.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:37:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495871; x=1770100671; 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; bh=FIZ+8DhFMV5di51oJwROCHq2vvo+jCjrZCBVlKzi/NE=; b=DOR6fOZw4/ZfK/dQsNqyzDPZvqGziZemqGuxNC8vW2Wk46r2eXHRe6Pp+iMNs9TB5D DrSp6S40mG8r2WriNaCXGm4W0uWuzYXItbipM04W9lVU5AddEUvjxIn348Q+jPBOzfnh 0nbVLHPlVjsEJ0DTLcko1GO14a1QT10TA5Nx9SlVeEsKonejPC2/4pQo06pGMYPLhkJG 9+st1yZvz7vfqtJ2JoqO9SNnh5l0vssnn07tWsAuwqqkd6iF0z/Tir3MWv74cPXOWPcL MW3f6ucxxpcDbBafVoXhzrhub1c7iAEuBM+OkNVdBRyJz2ElL6hlJbHNF9SxHbudPGh8 7ihg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495871; x=1770100671; 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; bh=FIZ+8DhFMV5di51oJwROCHq2vvo+jCjrZCBVlKzi/NE=; b=j/lWY9QsZ22VvpRy/DvJr424cQ+lvSrVvTFXsObLZl8Pd9Xdg3xa3lfIl3i8wCzzX0 616nEmstISlKu4yFXI01FG67pOtoGOZ8BdnqPKsXwDpOLATySmISyaAJfTDZSRggWQcs XXc5c1OOWb8iHcdTOu6d4KskTbnIuuJWF24jvGM4/6z8K5tFw1lUhZUx4PyZGDqyzBM+ FGls6k7JoZmoImejfnbVd/I57rSRSu/QGhcBmZPFEZBuo+sJXxwKKcvLVb9cT84oUdxW io6ah1W3+pTcg03O7QX1bQhxZHwVE+oAmmVgNelDxSmLiiJmhFy8UUbRkDWdNZkV27gt yrhg== X-Gm-Message-State: AOJu0Ywx1jlJwV6PY+CS5vRVWiGwH0aWoVTj3iJy1uhllWNhRN7C2C00 M46a0rcIWqSWacZdmVZMubzy1ZGC6hl2huALU9Dc46jaiymNuwB/XRMsKLe3DRZoNHmpKqzc/oh HcnxP62AwO2K3YU8mRzueXXIBzSeFEn5R14DqWDh0zh8eR6xNnmYtLVU9dwPaySqXhmveiLYVIP Go83Ms9phkSkVETFsItPHmVvRPJipL8ZiG3p5xFT22+A== X-Gm-Gg: AZuq6aJWkTJ0E8YxZHZMSZcd4vcttg+0+M5gOv0Mv+iDK7Dip95RUx0trKwiWsWZkwp h0N/3xDMN3so1fCisccVF1fWGXeBfv/QaCV2vswvo2a+LbSAK0hhX1T8yRHOTDzxWax1GlzSKm4 2WAmKyB306g/XS41vQ/wuxpoZxh1hrMo9oK/9vlNaEf9uf8BjI1PJyBSyxDwlTSE/+jx3pU8LrL vuQEu2q5h86Kk+E0nP2DvG6TVVSrFXb95LUzB5PTvxDV0yn4APVh2gcsnBaaeb8wVUxOUHToFJe 51GmaroxxnxxAVvEqJHRU3C5G9t8CPNknKbyz4I0aETg811+pOhtupN+aYZMnXQGubXLT7cEXqa s8GvWERGZP0Ga6hGWaVkXoSch7O/QrmzG6lIYzYM3e/6M2RSf04xxq5jGtmtyQV9g5J85QoklHX qcdGVHYJ7b8K3dH/TqcgN01IqM9nyMvXGzPrjCsYkCu0ikFJs5r6iYtdN802nJoB64U/F8EXbAp Os7Nn17DdLr3fIobxIwNNcR0A== X-Received: by 2002:a17:90b:2541:b0:33b:8ac4:1ac4 with SMTP id 98e67ed59e1d1-353fed945bbmr916050a91.35.1769495870685; Mon, 26 Jan 2026 22:37:50 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou , Alistair Francis Subject: [PATCH v2 08/17] target/riscv: rvv: Make vfncvtbf16.f.f.w support BF16 to OFP8 conversion for Zvfofp8min extension Date: Tue, 27 Jan 2026 14:37:14 +0800 Message-ID: <20260127063723.442734-9-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=max.chou@sifive.com; helo=mail-pj1-x1031.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: 1769496003324158500 Content-Type: text/plain; charset="utf-8" According to the Zvfofp8min extension, the vfncvtbf16.f.f.w instruction supports BF16 to OFP8 conversion without satuation when SEW is 8. And the VTYPE.altfmt field is used to select the OFP8 format. * altfmt =3D 0: BF16 to OFP8.e4m3 * altfmt =3D 1: BF16 to OFP8.e5m2 Signed-off-by: Max Chou --- target/riscv/insn_trans/trans_rvbf16.c.inc | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/target/riscv/insn_trans/trans_rvbf16.c.inc b/target/riscv/insn= _trans/trans_rvbf16.c.inc index 9aafd4d2ef..16f4403909 100644 --- a/target/riscv/insn_trans/trans_rvbf16.c.inc +++ b/target/riscv/insn_trans/trans_rvbf16.c.inc @@ -67,11 +67,20 @@ static bool trans_fcvt_s_bf16(DisasContext *ctx, arg_fc= vt_s_bf16 *a) static bool trans_vfncvtbf16_f_f_w(DisasContext *ctx, arg_vfncvtbf16_f_f_w= *a) { REQUIRE_FPU; - REQUIRE_ZVFBFMIN(ctx); =20 - if (opfv_narrow_check(ctx, a) && (ctx->sew =3D=3D MO_16)) { + if (opfv_narrow_check(ctx, a) && + ((ctx->sew =3D=3D MO_16 && ctx->cfg_ptr->ext_zvfbfmin) || + (ctx->sew =3D=3D MO_8 && ctx->cfg_ptr->ext_zvfofp8min))) { + gen_helper_gvec_3_ptr *fn; uint32_t data =3D 0; =20 + if (ctx->sew =3D=3D MO_16) { + fn =3D gen_helper_vfncvtbf16_f_f_w; + } else { + fn =3D ctx->altfmt ? gen_helper_vfncvtbf16_f_f_w_ofp8e5m2 : + gen_helper_vfncvtbf16_f_f_w_ofp8e4m3; + } + gen_set_rm_chkfrm(ctx, RISCV_FRM_DYN); =20 data =3D FIELD_DP32(data, VDATA, VM, a->vm); @@ -81,8 +90,7 @@ static bool trans_vfncvtbf16_f_f_w(DisasContext *ctx, arg= _vfncvtbf16_f_f_w *a) tcg_gen_gvec_3_ptr(vreg_ofs(ctx, a->rd), vreg_ofs(ctx, 0), vreg_ofs(ctx, a->rs2), tcg_env, ctx->cfg_ptr->vlenb, - ctx->cfg_ptr->vlenb, data, - gen_helper_vfncvtbf16_f_f_w); + ctx->cfg_ptr->vlenb, data, fn); finalize_rvv_inst(ctx); return true; } --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769496028; cv=none; d=zohomail.com; s=zohoarc; b=nX+7jkPUKdEMIslGG5doQsP4BceAYwYA8EES28ULbMZMYBL/SlocVYAgLW9TLm1BdH5l1UWRn9oJp45fVqp7kERGPD3f+8/XHIntrae5qot9XZyUnzZM6D3pvAjjP9Jr+Rj6cjEFClree1uCjk0CHoTC44/o3ChymxeEBs0qAlY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769496028; 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=QpMM34krHzTHUMhvQN91yHojKXhFA1FwURwec+u8eKw=; b=NtYiGzOuTHVbvAnlfN32GTzmfzqMTvPh5+1PSDY8Sotv8Hk7eAUEt13oKANyRpW08JoOdZz7AIgDBj0ZpxUQMvPP/khTEtSRCALbLxFJtyzS7oS7JcZ1a5ErfEOA83ekcXE5hjEosCIyzBJY7H7JKfjJwoCKLYctehQ0674sFdU= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769496028467849.5437191280813; Mon, 26 Jan 2026 22:40:28 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkci8-0002tN-Ec; Tue, 27 Jan 2026 01:38:00 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkci4-0002sM-Ey for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:58 -0500 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkci2-0006jx-V5 for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:56 -0500 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2a7a94c6d4fso24797695ad.0 for ; Mon, 26 Jan 2026 22:37:54 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.37.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:37:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495874; x=1770100674; 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; bh=QpMM34krHzTHUMhvQN91yHojKXhFA1FwURwec+u8eKw=; b=UclLR2k+/eNZsYszGA7Gkswlc1AXJiSeptDtIkwSTpGEV8htst/hdJg6MAbTdf7nvG NVTU9hQf5IkB0nBPTZj32o7fYTccJzWjrZGtQcv8DWFPa+TIaMZ1+7fW245g2kjhW6z2 G4L22WUcmz30GXTipHIvfE7+QBGdt6uYR8O7ZifTKcCRaqx3IyrUlKAd7Zr7NJQxx/NX Wwr2+WpRhScHuB5TEMXa485bdAJrDkDUTqsqI5f4aO15BDIn/qnrbD2DhQMD8RCWhpwA m0fpsR13xccY694I0YBMlQG+IQnfxuU1sL0JrG4M3RT1rd98W5kX1xkzHCfOm0E7rLj4 ZvSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495874; x=1770100674; 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; bh=QpMM34krHzTHUMhvQN91yHojKXhFA1FwURwec+u8eKw=; b=Qf/R13GrhtTz//JKKxOoZnZlmZgfT6xoewmmqxxGJUsjPxsEkANvmCvumlhkKL3C2s Zh1NXoBdN6pB5Cyuyhf/KEVJ4R5BvylJKIJYtdGTYbN0SspOE55t3czqI0cfUgTgvNnR teuaJ2w6T3HtOyYGD2QcgNOhM4nKCvMTGAN7XW8mZMYIXgYcLRPT+j4VKx4yN/Z+wloe ZXyNwm5b7M3Gq0Kig7oOI7XpEDWdfs5MhiDBNujqGf1c/RBXLheJpDOuyUan0gMapEKc zXb5RTE4exMnbPi/8VpKeKwwzb0LFaSGq9NiBwxwcNt5tZtapnlI7G/q5CUGxqq9eoKY /X4Q== X-Gm-Message-State: AOJu0YwQUfolB1HZKIzzTko7DkGyP31N1nm3C/SScVUioPeV+4gAkt+0 Ouoe2zKQmfhY+jXunS5cYrVtGz2lHNZesHhJAVTzGNDdZ7w/Vx0PtvC0qwYx/jeGirzd5yhHHj+ drOrWPtb4tjlvpK64YAZAbj1ZBYcUxKDyZkLqCczWOmdFdn57UzXCSGiUyuSKDW9nWT+snN1X8V bvjAXF7dPmRvcaWQ4ksX6xgPU0Gzfe6deL/Ec48GhvAQ== X-Gm-Gg: AZuq6aLPZPxSGehfee3RbhPCUDRv1MiZPuKR8fU+i0GFYz7R81wr8q4PRfF5jyHaKRN KKcxlwbLXgfyu4Dhyg6D2Vmzdrw2r4ZCwweVjjIptlLG0JoL7qsHAhtNJF8psEI3KiB+4+MlU9d ZtVikoA3Dcm+F2LgQRFR47SGZ0fUJUMAPoanto2QZ7pdCLinSLftvZoZ5WSnKqC5gBT1mxPuQBG HPPW7fgVmXj4c/3NeeEt7IryQiWdAPT/ZbVY6K1ax+z0+oy7rtii+fCtLppuEJC8f2KjkAimMgT pWSmIzrulM82BmOwRutvmijdFh15YnQnWNlsUFqc6aO3mxk4/huqf2UQAQRklJ/swyc0NBOSapd DFcdU4jRuvDboJzvSive0KCyegVwqI0BuMJz3d8Y+1AlrYv7tSVaknLJZs0nXcMiJbiurfU2UUB 98fGl7uhpikrv5CV0yCHkjUPLrWV51WAeT/mQ7mhk0JTH6vYhOIHK/XgYlW+YIKE9kl7ugFRVjP IIM3xyUfpvzWFU= X-Received: by 2002:a17:902:e784:b0:2a0:b02b:210b with SMTP id d9443c01a7336-2a870dfc7e9mr9761495ad.41.1769495873344; Mon, 26 Jan 2026 22:37:53 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou , Alistair Francis Subject: [PATCH v2 09/17] target/riscv: rvv: Add vfncvtbf16.sat.f.f.w instruction for Zvfofp8min extension Date: Tue, 27 Jan 2026 14:37:15 +0800 Message-ID: <20260127063723.442734-10-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=max.chou@sifive.com; helo=mail-pl1-x629.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: 1769496030719154100 Content-Type: text/plain; charset="utf-8" The vfncvtbf16.sat.f.f.w instruction converts a vector of 16-bit floating-point numbers to a vector of 8-bit floating-point numbers with saturation. The VTYPE.altfmt field is used to select the format of the 8-bit floating-p= oint numbers. * altfmt =3D 0: BF16 to OFP8.e4m3 * altfmt =3D 1: BF16 to OFP8.e5m2 Signed-off-by: Max Chou --- target/riscv/insn32.decode | 3 ++ target/riscv/insn_trans/trans_rvofp8.c.inc | 43 ++++++++++++++++++++++ target/riscv/translate.c | 1 + 3 files changed, 47 insertions(+) create mode 100644 target/riscv/insn_trans/trans_rvofp8.c.inc diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 6e35c4b1e6..49201c0c20 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -973,6 +973,9 @@ vfwcvtbf16_f_f_v 010010 . ..... 01101 001 ..... 101011= 1 @r2_vm vfwmaccbf16_vv 111011 . ..... ..... 001 ..... 1010111 @r_vm vfwmaccbf16_vf 111011 . ..... ..... 101 ..... 1010111 @r_vm =20 +# *** Zvfofp8min Extension *** +vfncvtbf16_sat_f_f_w 010010 . ..... 11111 001 ..... 1010111 @r2_vm + # *** Zvbc vector crypto extension *** vclmul_vv 001100 . ..... ..... 010 ..... 1010111 @r_vm vclmul_vx 001100 . ..... ..... 110 ..... 1010111 @r_vm diff --git a/target/riscv/insn_trans/trans_rvofp8.c.inc b/target/riscv/insn= _trans/trans_rvofp8.c.inc new file mode 100644 index 0000000000..f1a7b0affd --- /dev/null +++ b/target/riscv/insn_trans/trans_rvofp8.c.inc @@ -0,0 +1,43 @@ +/* + * RISC-V translation routines for the OFP8 Standard Extensions. + * + * Copyright (C) 2025 SiFive, Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#define REQUIRE_ZVFOFP8MIN(ctx) do { \ + if (!ctx->cfg_ptr->ext_zvfofp8min) { \ + return false; \ + } \ +} while (0) + + +static bool trans_vfncvtbf16_sat_f_f_w(DisasContext *ctx, arg_rmr *a) +{ + REQUIRE_FPU; + REQUIRE_ZVFOFP8MIN(ctx); + + if (opfv_narrow_check(ctx, a) && ctx->sew =3D=3D MO_8) { + gen_helper_gvec_3_ptr *fn; + uint32_t data =3D 0; + + fn =3D ctx->altfmt ? gen_helper_vfncvtbf16_sat_f_f_w_ofp8e5m2 : + gen_helper_vfncvtbf16_sat_f_f_w_ofp8e4m3; + + gen_set_rm_chkfrm(ctx, RISCV_FRM_DYN); + + data =3D FIELD_DP32(data, VDATA, VM, a->vm); + data =3D FIELD_DP32(data, VDATA, LMUL, ctx->lmul); + data =3D FIELD_DP32(data, VDATA, VTA, ctx->vta); + data =3D FIELD_DP32(data, VDATA, VMA, ctx->vma); + tcg_gen_gvec_3_ptr(vreg_ofs(ctx, a->rd), vreg_ofs(ctx, 0), + vreg_ofs(ctx, a->rs2), tcg_env, + ctx->cfg_ptr->vlenb, + ctx->cfg_ptr->vlenb, data, fn); + finalize_rvv_inst(ctx); + return true; + } + return false; +} + diff --git a/target/riscv/translate.c b/target/riscv/translate.c index a1c4b325e5..137022d7fb 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -1219,6 +1219,7 @@ static uint32_t opcode_at(DisasContextBase *dcbase, t= arget_ulong pc) #include "insn_trans/trans_privileged.c.inc" #include "insn_trans/trans_svinval.c.inc" #include "insn_trans/trans_rvbf16.c.inc" +#include "insn_trans/trans_rvofp8.c.inc" #include "decode-xthead.c.inc" #include "decode-xmips.c.inc" #include "insn_trans/trans_xthead.c.inc" --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769496012; cv=none; d=zohomail.com; s=zohoarc; b=L5rVnpOBhE9/MDoRwcjNj34tOCB5mr+hFLTnq0iuGdhU6deUk1tuYo7A72mi3rCE/6sOYmjzEc2PGReghPClbPCcROnSWrz0kKUE9GrW6BJnN87svoLFRqEd1A4kpcK74/eg2ZvyWT2XXk/1uuEjp5X35z65+IfBFBYAzIQiejM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769496012; 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=fSipeGHekKq/Th8UdKMG6p6qZH5c26imSBj5IlO1nPg=; b=bP650DPQtVXgNEIOGhwaHAD1wwhBfHqZ+Nnf5p9yySozosDCUyNEs/tbryJH5lYIFr/bWuzWDxTUzAmCbf9HkMpXaa+/o0Cf9ql7Zd8vHO19grfoBZdlUKwOfduEG1H7V6cYg025LUa+SvJsTP+3qWUAQyF7+4ssf2S8oO7ALFE= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769496012394244.5299937809417; Mon, 26 Jan 2026 22:40:12 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkciE-0002wG-D8; Tue, 27 Jan 2026 01:38:06 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkci7-0002tA-SO for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:00 -0500 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkci6-0006kX-7s for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:37:59 -0500 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-2a0fe77d141so30272135ad.1 for ; Mon, 26 Jan 2026 22:37:57 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.37.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:37:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495876; x=1770100676; 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; bh=fSipeGHekKq/Th8UdKMG6p6qZH5c26imSBj5IlO1nPg=; b=IxeVzypCDEYfEwSuEXG+MlnxLITo4+zMRIMS60RXSx2Iy7AY93jyY6vpfdEFEdeDtN GvyKKmvJDS+J2PaY18CTsIpr1usM9kOsD2QO8+ki+O60Z0FTrq8/G7M7ozZiYpCLD7Co hXI3X2vsc9FAJ9Gfs1nm1Fg0hjWu3zjk8bxxGHVVzjnjbEqHcHgr2Vv+IJiMtg3WModo cLp712o72IVPCn+uK2/xFuNVOoqFhP+iGmVeJF3XZqVzHNaAOvdX/Z6U5MYcWxqa2Pd/ lCgmyUM7D/2XjN4RMJD2S/XnK1LLqT+EDXHXCuJ8W5fJwkC6kfjuY8ibaJmPn93WTpKO cWSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495876; x=1770100676; 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; bh=fSipeGHekKq/Th8UdKMG6p6qZH5c26imSBj5IlO1nPg=; b=fXRPuUL30F6ov1+/DKrVmZkZgRnk2y0pZToi3Wu5PKB+/MEfRNxJ2ueLkCPxHoT9E2 5aEROpoRKx5BWZ9n83VoDUk1ptxQ4Zi18sEIbo1w8YTbktI1xrCxyWSBR9KW/gIMnAAP Ac9xgPMV9wDCtxae6mZQY629YDYnAFm/exrOHgqqdy/JbmXH2A+0S743228hXVnMaeG6 T/wIlzk2wCiZ0YsRTB5zGyIlP62CPDBbg5E92kt1tDP5T8sx2S+4gtGCIZ9RPO9z7Kky n5CHSTOn/I8DW0EBTfSz0UeLCsT2+AeqINPxmwdATMoul4UXPJg6HPGhe1bbyObAmUaf qGBA== X-Gm-Message-State: AOJu0Yy7zqVrVLbRW5uJcQ9VF84dj0onWzzTAYRy2MCgCcx1IUR6k5Ii /3jzbQs+6lSmW3nqNXVTs+K02Oh4ilHUAdnwswR6QYbcmoK3Dcpp+fqyvrvyf+F6cytfDgsohRf fjA0wB0DVbe7d1+eM70hIaUZXvKpwNGFNi/gZe0UKvYhpy6KdCMhElXCLg+pUo26HRfxBUkwHOA wV2BEYU4B9iPNFCx9wUMolsiPFk6mAYZHMWhQMFae6lg== X-Gm-Gg: AZuq6aKWW20+lCdzbjQygvTZbOTofAK5LmObOXTfNllV9x1S0nwN0OTeSEz9FmHnL+f eNJjdxrHBaNbfPBAwppEIlkW4ODBb5JKYFWSc3iJsjSLUfME1uCY0tyCv7Gmltfdc8Lq04hunli seFijkJ7t9JEoqiWMC3V1ypvVS4P1KPNi9X8TujGq1AFZ6fHoBMldwCy3o+rkTvSJKX++WPucMl PhfAOBCeNtT4AIHYdzYpgKbmnoyGA9hDUNQAfDtk2pKvTYYzOUDkftGiDcukX6qgNkJnPOuYI2O O4mbzeFkrFkNUIh6dd0jSpT2K+jKSN0InDOtu+/R86kb7NjtHsWF6R+ClG4inOBXFemAIRzkvx7 noQbA+420nWOrt8wAm8WxSHWWisZy65/3tUOWeOj0uH0+k326q5vtpoMDcQtyAqIrVG3hVqnLyN P2GI9bsh84hi8Iq6Im847Na+bo0L9LaV/3gKp8fGVaWEdtsoz+WZynMuwITao2i84oVwU59N440 wsCIO3E/EXOJxU= X-Received: by 2002:a17:903:906:b0:2a7:c340:4c3d with SMTP id d9443c01a7336-2a870d58b2fmr6918555ad.13.1769495876008; Mon, 26 Jan 2026 22:37:56 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou , Alistair Francis Subject: [PATCH v2 10/17] target/riscv: rvv: Add vfncvt.f.f.q and vfncvt.sat.f.f.q instructions for Zvfofp8min extension Date: Tue, 27 Jan 2026 14:37:16 +0800 Message-ID: <20260127063723.442734-11-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=max.chou@sifive.com; helo=mail-pl1-x62b.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: 1769496014920154100 Content-Type: text/plain; charset="utf-8" The vfncvt.f.f.q and vfncvt.sat.f.f.q instructions convert a vector of FP32 elements to a vector of OFP8 elements. The vfncvt.sat.f.fq instruction converts a vector of FP32 elements to a vector of OFP8 elements with satura= tion. The VTYPE.altfmt field is used to select the OFP8 format. * altfmt =3D 0: FP32 to OFP8.e4m3 * altfmt =3D 1: FP32 to OFP8.e5m2 Signed-off-by: Max Chou --- target/riscv/insn32.decode | 2 + target/riscv/insn_trans/trans_rvofp8.c.inc | 63 ++++++++++++++++++++++ target/riscv/insn_trans/trans_rvv.c.inc | 39 ++++++++++++++ 3 files changed, 104 insertions(+) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 49201c0c20..f2b413c7d4 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -974,6 +974,8 @@ vfwmaccbf16_vv 111011 . ..... ..... 001 ..... 101011= 1 @r_vm vfwmaccbf16_vf 111011 . ..... ..... 101 ..... 1010111 @r_vm =20 # *** Zvfofp8min Extension *** +vfncvt_f_f_q 010010 . ..... 11001 001 ..... 1010111 @r2_vm +vfncvt_sat_f_f_q 010010 . ..... 11011 001 ..... 1010111 @r2_vm vfncvtbf16_sat_f_f_w 010010 . ..... 11111 001 ..... 1010111 @r2_vm =20 # *** Zvbc vector crypto extension *** diff --git a/target/riscv/insn_trans/trans_rvofp8.c.inc b/target/riscv/insn= _trans/trans_rvofp8.c.inc index f1a7b0affd..8851209660 100644 --- a/target/riscv/insn_trans/trans_rvofp8.c.inc +++ b/target/riscv/insn_trans/trans_rvofp8.c.inc @@ -12,6 +12,13 @@ } \ } while (0) =20 +static bool zvfofp8min_narrow_quad_check(DisasContext *s, arg_rmr *a) +{ + return require_rvv(s) && + vext_check_isa_ill(s) && + vext_check_sq(s, a->rd, a->rs2, a->vm) && + (s->sew =3D=3D MO_8); +} =20 static bool trans_vfncvtbf16_sat_f_f_w(DisasContext *ctx, arg_rmr *a) { @@ -41,3 +48,59 @@ static bool trans_vfncvtbf16_sat_f_f_w(DisasContext *ctx= , arg_rmr *a) return false; } =20 +static bool trans_vfncvt_f_f_q(DisasContext *ctx, arg_rmr *a) +{ + REQUIRE_FPU; + REQUIRE_ZVFOFP8MIN(ctx); + + if (zvfofp8min_narrow_quad_check(ctx, a)) { + gen_helper_gvec_3_ptr *fn; + uint32_t data =3D 0; + + fn =3D ctx->altfmt ? gen_helper_vfncvt_f_f_q_ofp8e5m2 : + gen_helper_vfncvt_f_f_q_ofp8e4m3; + + gen_set_rm_chkfrm(ctx, RISCV_FRM_DYN); + + data =3D FIELD_DP32(data, VDATA, VM, a->vm); + data =3D FIELD_DP32(data, VDATA, LMUL, ctx->lmul); + data =3D FIELD_DP32(data, VDATA, VTA, ctx->vta); + data =3D FIELD_DP32(data, VDATA, VMA, ctx->vma); + tcg_gen_gvec_3_ptr(vreg_ofs(ctx, a->rd), vreg_ofs(ctx, 0), + vreg_ofs(ctx, a->rs2), tcg_env, + ctx->cfg_ptr->vlenb, + ctx->cfg_ptr->vlenb, data, fn); + finalize_rvv_inst(ctx); + return true; + } + return false; +} + +static bool trans_vfncvt_sat_f_f_q(DisasContext *ctx, arg_rmr *a) +{ + REQUIRE_FPU; + REQUIRE_ZVFOFP8MIN(ctx); + + if (zvfofp8min_narrow_quad_check(ctx, a)) { + gen_helper_gvec_3_ptr *fn; + uint32_t data =3D 0; + + fn =3D ctx->altfmt ? gen_helper_vfncvt_sat_f_f_q_ofp8e5m2 : + gen_helper_vfncvt_sat_f_f_q_ofp8e4m3; + + gen_set_rm_chkfrm(ctx, RISCV_FRM_DYN); + + data =3D FIELD_DP32(data, VDATA, VM, a->vm); + data =3D FIELD_DP32(data, VDATA, LMUL, ctx->lmul); + data =3D FIELD_DP32(data, VDATA, VTA, ctx->vta); + data =3D FIELD_DP32(data, VDATA, VMA, ctx->vma); + tcg_gen_gvec_3_ptr(vreg_ofs(ctx, a->rd), vreg_ofs(ctx, 0), + vreg_ofs(ctx, a->rs2), tcg_env, + ctx->cfg_ptr->vlenb, + ctx->cfg_ptr->vlenb, data, fn); + finalize_rvv_inst(ctx); + return true; + } + return false; +} + diff --git a/target/riscv/insn_trans/trans_rvv.c.inc b/target/riscv/insn_tr= ans/trans_rvv.c.inc index bcd45b0aa3..9053b9fb57 100644 --- a/target/riscv/insn_trans/trans_rvv.c.inc +++ b/target/riscv/insn_trans/trans_rvv.c.inc @@ -621,6 +621,45 @@ static bool vext_check_sds(DisasContext *s, int vd, in= t vs1, int vs2, int vm) require_align(vs1, s->lmul); } =20 +/* + * Common check function for vector narrowing instructions + * of single-width result (SEW) and quad-width source (4*SEW). + * + * Rules to be checked here: + * 1. The largest vector register group used by an instruction + * can not be greater than 8 vector registers + * (Section 31.5.2) + * 2. Quad-width SEW cannot greater than ELEN. + * (Section 31.2) + * 3. Source vector register number is multiples of 4 * LMUL. + * (Section 31.3.4.2) + * 4. Destination vector register number is multiples of LMUL. + * (Section 31.3.4.2) + * 5. Destination vector register group for a masked vector + * instruction cannot overlap the source mask register (v0). + * (Section 31.5.3) + * risc-v unprivileged spec + */ +static bool vext_quad_narrow_check_common(DisasContext *s, int vd, int vs2, + int vm) +{ + return (s->lmul <=3D 1) && + (s->sew < MO_32) && + ((s->sew + 2) <=3D (s->cfg_ptr->elen >> 4)) && + require_align(vs2, s->lmul + 2) && + require_align(vd, s->lmul) && + require_vm(vm, vd); +} + +static bool vext_check_sq(DisasContext *s, int vd, int vs, int vm) +{ + bool ret =3D vext_quad_narrow_check_common(s, vd, vs, vm); + if (vd !=3D vs) { + ret &=3D require_noover(vd, s->lmul, vs, s->lmul + 2); + } + return ret; +} + /* * Check function for vector reduction instructions. * --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769495949; cv=none; d=zohomail.com; s=zohoarc; b=aSBkZLztzVmnQzWTtBRFpqZRrlNZIvDVdnylrLLDqLbKb0pTCW6ltxvqk66EtFZ9/15PZBDLcQrZksTIqF04locuLUUt7HHpPYPu50A0t11MMxwtMvmgj9RbPDfMSmcZyt0nwP9n/xoeQRGIRk0xG811+LoErCOx0vNobms4uAc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769495949; 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=NKFOVd1x1tdBqkVfLTFpz+52PeGKZ9TXVu5yfqKIdwY=; b=boHPAFOwirw67WEi1mcqtU/fr5KONU3E0uC4Da/9WvyHErj683U+S+DmzmFH912TD5mV4BjuKn8Y+g5IYgl9uORzMKqOW4xAcBHpnBN995oUC4XJ4/cLXK2B5vknRcdazWtGgleJaKlkA6CL9EXAagdmFiQZRssssIdTUktl86w= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769495949376124.48358310127458; Mon, 26 Jan 2026 22:39:09 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkciJ-0002xN-0W; Tue, 27 Jan 2026 01:38:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkci9-0002te-KI for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:02 -0500 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkci8-0006ko-2j for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:01 -0500 Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-352c5bd2769so3358052a91.1 for ; Mon, 26 Jan 2026 22:37:59 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.37.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:37:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495879; x=1770100679; 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; bh=NKFOVd1x1tdBqkVfLTFpz+52PeGKZ9TXVu5yfqKIdwY=; b=XwBsdWveuXKRFYVwBMk+wFIvCVtK+dMrNoPdXaODltBbBHOevhdEJSfPaniZvvmCHh 1lSkq2o13KcPNCwVYMRQRFFA/r5+ZxDykGKcOtqo7AighPzSRtWGXw1Rwq63bcYDqhcI UYnuuqN1N8rBsbUAH+r/ldoggxJKDIaZ8evKfELF804kgsNBOJnSla5BuhIFYaDSm3K4 j0w9A/4K4fTy4oxsiI4k4d8EQZAxZcDdo9okR6iSWKbGFPt8L1tWiDzKs+0Cq0Ak01hK UYA1kVlKU1OXoACf4UXCjGOJvVEJ3OuJkT2eWAKZePzo6z1l+lL50+Uvc6iOJ+FYn9wT dy3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495879; x=1770100679; 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; bh=NKFOVd1x1tdBqkVfLTFpz+52PeGKZ9TXVu5yfqKIdwY=; b=CvqHWmRDr+zR1bblpA8DF2e/gXey2qE3YwmBImKlvrE6bABs+Q0RUPV0gObVl/3gpp qmAt6yO6KVxFakZ26HrSm2LZHdo0LYr+Jdr/F/i5GQpDNWd2YNgvDE8O9Mg17z2zqhwY 7cT3n1PrbldQowDF2SG9+QMi9zezp50vhIfTRbzNrgmnHRWSz5W20TBG/UUMBIuLeGTu DJo4WS0CeGMgHZ6ppkhJKacw9qxeRVHzkAVdtEBm8dcDU+O/Wl8M22ba/hCuL5ZBVVUz H6o8lupbhzDJNXZCtIwRc0yt2IJPqE3EdgZ4FLxMQETXcpbm4zhQrnWx0KcfGFEnsO7F p3xA== X-Gm-Message-State: AOJu0YzQli9hVeXnkYVH6V5YSlG0gHkg9cbEUEvd5Bk0MV1KIlVW3Y8t lPGFelSqBLCQbAyhzXB4Rj1O+0mj2cltrjMadEd0MDjjCplPwokT3ld1ZLfZsDrVJwa4esw5sNp pvpX6CuT+yWxHqbXJNSR4NKk10Wqx806s+sxByRNT4EzAGOyO4TPvCuqpdy0vcBr2uPs4J35Gmf nJwbAmurY+Rc8vhN1l4xS+aA+Otf80m0lddrjUMtE= X-Gm-Gg: AZuq6aIZ5utbtQb1z2JPNehSdamz1xbFBjYjBey3QRHVzUsthGbsAvFnSshU31EcLXV vKm5h0JbfkPYcjwqo1drdQ44K22S4qrJUWfYk7pTqLSZ5rGafiIEetEuTmZf5/z7JcqAAoWT9RT EP7VVPfP9BSUG3RbM9oH9AvHPSFQHHEFsydkw+2PBfsdCsht/aWuqiLRxMIqL3PC0QeDUwwBBV7 FSwzzjvSCragPzbnheth4cevD8bPSu8RQH/lYmT5LRxeqcOC0jhvyHYZmLbJ7/jp9DKIfy/9gYa FSUIJ3hVqJJZfikE3TJkKcd5S+/fzSKjgAequ/2BbpoHhQfWig8GzWEVXONpLVVt0B9hzgrDEtb qw82b3Bgr+5fWznnL5xaMnrAgDa5caVyqrHU36AhPlB3GsVnl+XeF1xAqR95ZLE86i57sCAu0c2 rZ7TaHCeXEYTp6l9u03ejK3LPnyOtNBXiCS6DkM4brd/vF42z4F2XQsJ/PNTt3lWtApxLnWCyyX bCm9QOY29FJ0W8= X-Received: by 2002:a17:90a:d603:b0:34a:b4a2:f0c8 with SMTP id 98e67ed59e1d1-353feda7c73mr806357a91.30.1769495878563; Mon, 26 Jan 2026 22:37:58 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou , Alistair Francis Subject: [PATCH v2 11/17] target/riscv: Expose Zvfofp8min properity Date: Tue, 27 Jan 2026 14:37:17 +0800 Message-ID: <20260127063723.442734-12-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1030; envelope-from=max.chou@sifive.com; helo=mail-pj1-x1030.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: 1769495951647158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Max Chou --- target/riscv/cpu.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 36fddce5bf..c8cb3d021d 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -1381,6 +1381,9 @@ const RISCVCPUMultiExtConfig riscv_cpu_experimental_e= xts[] =3D { MULTI_EXT_CFG_BOOL("x-svukte", ext_svukte, false), MULTI_EXT_CFG_BOOL("x-zvfbfa", ext_zvfbfa, false), =20 + /* Zvfofp8min extension for OFP8 conversion */ + MULTI_EXT_CFG_BOOL("x-zvfofp8min", ext_zvfofp8min, false), + { }, }; =20 --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769495949; cv=none; d=zohomail.com; s=zohoarc; b=NuZFDWuZ55N9nL+EUFZ+Oel4u/TVL3rb18658GKh0BZEBmB/lfKfmTrqQXC7V95hNDFXKf4AkzQl4uObobETBuD1pyPazvzNZD7WFv8TOCTgXHuV8E07sm7EafXRM8TB2q+DWlSMmePkK+TZkiCZmVxhAhdnd58zPvVJlcdKpTk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769495949; 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=iSJ3KB2AksZmC/j5ADncA7Ujrq+TzX7nTEDMJbopeQ0=; b=CIMySMtxPQcw+PzIlsYSrGcZNnksxQshmlBenxcNGxriBaWQ9+qPJ8Ah86HII163LNW+ukchliVcS9mCjiMo4LNYjzJcH2cRyq65OElLCGqanKBuAWIbffGe7qY9/4QRk/xAgIeAFid5IqX6UltAWfoCGt8aD7/z7aSWoiZaCcQ= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769495949251203.11544374329742; Mon, 26 Jan 2026 22:39:09 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkciJ-0002xt-4I; Tue, 27 Jan 2026 01:38:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkciC-0002vO-Dm for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:04 -0500 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 1vkciA-0006lM-Rg for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:04 -0500 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-3530715386cso4617800a91.2 for ; Mon, 26 Jan 2026 22:38:02 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.37.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:38:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495881; x=1770100681; 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; bh=iSJ3KB2AksZmC/j5ADncA7Ujrq+TzX7nTEDMJbopeQ0=; b=YD2fr2UgprhQUs8CC2YxSdgl/pmNPaNPRF+EpYdTTrNR15uBFzy/67lNZQHfq9SH6R oVKhq5NWgOhwUviPSeT2htxClaXfy0Bk4EoojQTs8KFQB6FU039ZXbSIzGvcSrt7XpjG Uu6yaDsKop8ZJlo/CS3jK85huiahpM7YrSFLLCHvV8UqhCO5k9mYwhPgCcO2QPof5PRz k3zbSRGNu+Yy3UyiNRSLxBM9iHz22PUzYUm/+AEpgl5PW28Da7tXMaMr2inse6IMraiD 0sKZ8H8eXA7e1OMMto7KUlaVm/D0rNPdJn/FhN0x9IRccH3YMNrdRpl3C7x3sbrK040z O/6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495881; x=1770100681; 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; bh=iSJ3KB2AksZmC/j5ADncA7Ujrq+TzX7nTEDMJbopeQ0=; b=SkDYqkJDm1DKZ9fHHnmWjmoBQ2sapn1I/EEQgegmA6AY9oJCEfoHNaJmP/2xV/gr1E th4edSc9DIvdEYqdVxSA2GwqeT25qlEBae9wm+kuP/Wo5HMZGiRZw30gI5gyOEXR3enR Be5oCBLUaIBWdVbpsUfdkuhf3pBwXf14UGRqDzU6h2mnV6xolhhDrEf5XyPINkdeTSr0 kgRsf+fpRODpMQ3SbYCg4roCIr3rCo2m1ZlPoEwVnOPM8Gj3J7QF30rmFogqzuic0Ftl EGrP5VmC3WlD6jQgh0DLdo+5PMMXWoWUcPp+/LVU/M7w5P8QAcOv2dsqlGmTJuIXBC/N y0nA== X-Gm-Message-State: AOJu0YzuSrnB9UITeot0W2PE5D6W3Os7jf8Z9vbQNpDjJn1kH0DCP5d1 /f7zIkPiVNBB0XUIC3pxgluwtCFwqdHykX2V7BAQMEIZNGxxEJ5Rb2TYQsDPXydhQNss77B6aq9 UHCwT/5/icKgy1uwrmqh3ofkVI7THg92G0ULd0r89gKWI2wFivnHf8gXMMpLA6gy+46Xn99QY4e gCQSnFDXKXtAEkM+/gMM5rxDbBK+toarIYXO0CEVYtlQ== X-Gm-Gg: AZuq6aKo7n0GPNzhTL3+RCgA2jTvYqsRfI+6LKhmgpy+TzmBH4kuu6foug9ZLsUtqLK 91+siklL9MukpWHdMd3pSj12/N0hb86wew8/dv74abLim+ZGkn90zTtJOKCYN90adX3HimsWFIu tO8DGyqlLD9Dh9P6hGy2gstkbRXf2+ZlFAJ+KnSgCjjt4zJuM/PmoFvy2Y1FxlqHF6QWs/ymnhh sdPIzIRjidJOrKea+rZG3E1QcOKqzyg+R0argzbMW81vEROZovD9bKQLzKR5o7DWYx9OpU09F+R r7xvHAua3ibKcL9k/5MVMU3WIaEIv1eVbi6NmC1qUJcFOkkdHlPgIA1gi81MlUZqkXbxnL/CVtr OSlNvXYf1piruA2HWvX66QVwAoZQsfU/t8gf0hO3jX53QyYQaWfTVVzbf5faspNet6Ki5SM6Qga oE4ZUxo2NG+C+V1A4vYR21++YNqdPtQClgL114pxUp1mF5U5segrES7YSsMQfUX7Xq4qUUsAHQv sGVezItvJgQMj+2zRio5q7CZg== X-Received: by 2002:a17:90b:1dc4:b0:330:6d5e:f174 with SMTP id 98e67ed59e1d1-353fed5cbe2mr980031a91.20.1769495881067; Mon, 26 Jan 2026 22:38:01 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou Subject: [PATCH v2 12/17] disas/riscv: Add support of Zvfofp8min extension Date: Tue, 27 Jan 2026 14:37:18 +0800 Message-ID: <20260127063723.442734-13-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.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: 1769495952060154100 Content-Type: text/plain; charset="utf-8" This patch adds support to disassemble Zvfofp8min instructions. Signed-off-by: Max Chou --- disas/riscv.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/disas/riscv.c b/disas/riscv.c index 85cd2a9c2a..daffe9917f 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -984,6 +984,9 @@ typedef enum { rv_op_ssamoswap_d =3D 953, rv_op_c_sspush =3D 954, rv_op_c_sspopchk =3D 955, + rv_op_vfncvtbf16_sat_f_f_w =3D 956, + rv_op_vfncvt_f_f_q =3D 957, + rv_op_vfncvt_sat_f_f_q =3D 958, } rv_op; =20 /* register names */ @@ -2254,6 +2257,9 @@ const rv_opcode_data rvi_opcode_data[] =3D { rv_op_sspush, 0 }, { "c.sspopchk", rv_codec_cmop_ss, rv_fmt_rs1, NULL, rv_op_sspopchk, rv_op_sspopchk, 0 }, + { "vfncvtbf16.sat.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, = 0 }, + { "vfncvt.f.f.q", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, + { "vfncvt.sat.f.f.q", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, }; =20 /* CSR names */ @@ -3630,7 +3636,10 @@ static void decode_inst_opcode(rv_decode *dec, rv_is= a isa) case 21: op =3D rv_op_vfncvt_rod_f_f_w; break; case 22: op =3D rv_op_vfncvt_rtz_xu_f_w; break; case 23: op =3D rv_op_vfncvt_rtz_x_f_w; break; + case 25: op =3D rv_op_vfncvt_f_f_q; break; + case 27: op =3D rv_op_vfncvt_sat_f_f_q; break; case 29: op =3D rv_op_vfncvtbf16_f_f_w; break; + case 31: op =3D rv_op_vfncvtbf16_sat_f_f_w; break; } break; case 19: --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769496033; cv=none; d=zohomail.com; s=zohoarc; b=DLiXxu49bGw5iSrKTuwD40rNPUe6fZVaTwxZQ0CZ0193HyjDIoDjV0/2i1+FCTbd4/loD/gppWNBcdlBUqQglPHxfDrFkt38SuMxHMKhz9VQXDUnv+dNw6sekKSqjYRKHnTiOaafgIkWAkRrQswNndTmzrANQtFADilU9IjT4Yw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769496033; 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=ATVqaM7ZW01f8u/zPmOMSZFgIAA3aDS5ix/aVxS3Tys=; b=QTqEbpnaIlwSdVdXamO9L2J/YIS+BbqKS0PzcCRv0TejCr89vjLplMfczSmyUmpQWw/XLdyBg/Ascm2wEPs/aC48bHYUZ+/d08wlIprm86no+mbBCT/nDiFDTmflwCeX1tZ3NRiEKb2N8gi4t4h01qpuCasC3Do8axU+Ukq9UsE= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769496033604798.384592645455; Mon, 26 Jan 2026 22:40:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkciK-0002zN-RO; Tue, 27 Jan 2026 01:38:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkciG-0002xM-Mk for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:08 -0500 Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkciD-0006ll-3x for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:07 -0500 Received: by mail-pg1-x531.google.com with SMTP id 41be03b00d2f7-c613a0ca52dso2841737a12.3 for ; Mon, 26 Jan 2026 22:38:04 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.38.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:38:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495884; x=1770100684; 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; bh=ATVqaM7ZW01f8u/zPmOMSZFgIAA3aDS5ix/aVxS3Tys=; b=VLlDSuzESu71jo0c840ZqypKUUXreMcBrkbqP52p4GqoSN6kk73owaolP5+hlOmueB N3Wt+VZxwOt1+pYjJZvr7gkJKSrqKvvEahAzSn528S2Jga23F+naZjLF/sSAZ0xD1xh/ uoBwfal6mskyVvX16Wl8WqfwqXcqUslTuVC8RrW052koKyn4VvHvaICFK8zDQzl0Q/DW +rasJj7OP3kVsAPVww98p/6lq8bo1b00VG689gB9qgkA0yatD+REnA8L1vDSaI+YcnYL pMn9avFNfERaS8FQR8LW8lq5U/kJnbvDD37ZIc/IRLjjCrbNytqhbRCiWxm4ahAx6zrg QvHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495884; x=1770100684; 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; bh=ATVqaM7ZW01f8u/zPmOMSZFgIAA3aDS5ix/aVxS3Tys=; b=a7RbFqQAAAc29ib9ziOzbw9SUaTzTyW+25fEpPmCrYHtQqR7aLm6vrfDlKXXly+p8W 7qbti3H3ClcwpkurEw0Jd8f/c7oKxez/zfrTPWroD3VB6viaRw3d2TbTanqI/dI5p5CC w/PPVBopBsdBTdg5qT3Qqb9Q0pmURKicXG8FoQTlCf1AcxHMGGWQPfb5+eSz0M6Fw46y U4IYQeIWRO1iFpsckZEz5g0MP87chJ/Yt8oKOlZBR1oBMKkD7TXwAm/wUpMar+bIRWYG r2FftN0EYqcizh0upouz4Y7AR7Y6FWZZ722MkP/6eJ9/AQCQGvoCvr/MHEnkx0D1f+zw 7CMw== X-Gm-Message-State: AOJu0YwZ0jIospDnQqaIsTlZfG2wqc9NPg/1cIz2rjpTo3qzDRewv/1j qCOIjmB/d7zGlBiIODGakX7aDWcWulbJu4DDljgtTIHfbSV6yaVVqfaClarE5gtrIu30q9+7abO la1KQ1G/DQelECShc4zqeotx+2sKGKcQTrw6O/JTOjV83ohqHCQ96gss53MaY25Id0CgCi0Co1G RZiQQpkuLxqL6+gccexdy1WbQtcxorjvFM/FJ0J06BMg== X-Gm-Gg: AZuq6aLbRRHoZpqJZTkJ9kL7/jUO5XWmbpS7Lvf/9gHP0Z+YEL3kCM5zXuaEWxiCeo/ XUiOxXCpmQr3LTOsY1cehtIUEkck9TV6KASxToXeK0eg9uvz3etIeti08EZCAdEAADeWsb6C8EO 3flS3EMAj77OSUUSdFR36GDo2wNP8ImVY4hpQO+z1ugH+Tq/+4tNCrkop81B4yvms8bd4J8RZa+ y/vWcnI8r+jJqbQfXiYGQa1Z2mQXxD293oA1AzmITwkM+T0JkOf2Kue+4MfbFRFJgBHG4J9bLgQ Qe0emkz/m97lR3JQhLAez8GWtXSsfwOo93T1WHtd9l6t+UyS9eBjJNj3oF3tY0/dWBTUhIkHjSe emWsvqbNZCjCAWYYE88wk3ACGr+dHMzHXEEW8uMhydVjd6IMTuYdoTyPc/DNWjgGBYuw6PPos0f G15/mLv3HLxrT3yW76XiKgx3VnJB46kxJO2VlgZoz3zbXPYDQ5VAzWHTS8vOrzBubTcBau/aOKl ncn2/fdzyrgqjk= X-Received: by 2002:a05:6a21:a96:b0:38e:9b5d:dc44 with SMTP id adf61e73a8af0-38ec65a285cmr616656637.74.1769495883713; Mon, 26 Jan 2026 22:38:03 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou , Alistair Francis Subject: [PATCH v2 13/17] target/riscv: Add cfg properity for Zvfofp4min extension Date: Tue, 27 Jan 2026 14:37:19 +0800 Message-ID: <20260127063723.442734-14-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::531; envelope-from=max.chou@sifive.com; helo=mail-pg1-x531.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: 1769496036868154100 Content-Type: text/plain; charset="utf-8" According to the ISA spec of Zvfofp4min extension, "The Zvfofp4min extension requires on the Zve32f extension." Signed-off-by: Max Chou --- target/riscv/cpu.c | 1 + target/riscv/cpu_cfg_fields.h.inc | 1 + target/riscv/tcg/tcg-cpu.c | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index c8cb3d021d..7823508615 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -194,6 +194,7 @@ const RISCVIsaExtData isa_edata_arr[] =3D { ISA_EXT_DATA_ENTRY(zvfbfwma, PRIV_VERSION_1_12_0, ext_zvfbfwma), ISA_EXT_DATA_ENTRY(zvfh, PRIV_VERSION_1_12_0, ext_zvfh), ISA_EXT_DATA_ENTRY(zvfhmin, PRIV_VERSION_1_12_0, ext_zvfhmin), + ISA_EXT_DATA_ENTRY(zvfofp4min, PRIV_VERSION_1_12_0, ext_zvfofp4min), ISA_EXT_DATA_ENTRY(zvfofp8min, PRIV_VERSION_1_12_0, ext_zvfofp8min), ISA_EXT_DATA_ENTRY(zvkb, PRIV_VERSION_1_12_0, ext_zvkb), ISA_EXT_DATA_ENTRY(zvkg, PRIV_VERSION_1_12_0, ext_zvkg), diff --git a/target/riscv/cpu_cfg_fields.h.inc b/target/riscv/cpu_cfg_field= s.h.inc index 59302894af..353a932c36 100644 --- a/target/riscv/cpu_cfg_fields.h.inc +++ b/target/riscv/cpu_cfg_fields.h.inc @@ -104,6 +104,7 @@ BOOL_FIELD(ext_zvfbfmin) BOOL_FIELD(ext_zvfbfwma) BOOL_FIELD(ext_zvfh) BOOL_FIELD(ext_zvfhmin) +BOOL_FIELD(ext_zvfofp4min) BOOL_FIELD(ext_zvfofp8min) BOOL_FIELD(ext_smaia) BOOL_FIELD(ext_ssaia) diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c index ba89436f13..b1097e55a3 100644 --- a/target/riscv/tcg/tcg-cpu.c +++ b/target/riscv/tcg/tcg-cpu.c @@ -715,6 +715,11 @@ void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, = Error **errp) return; } =20 + if (cpu->cfg.ext_zvfofp4min && !cpu->cfg.ext_zve32f) { + error_setg(errp, "Zvfofp4min extension depends on Zve32f extension= "); + return; + } + if (cpu->cfg.ext_zvfh && !cpu->cfg.ext_zfhmin) { error_setg(errp, "Zvfh extensions requires Zfhmin extension"); return; --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769496091; cv=none; d=zohomail.com; s=zohoarc; b=Zk05lrDM4IrsvoG3nGrUbNw8dAbxhMjp4Ukw0KGqoCmODUAuOmsSmKjaxS2IxgRofWL0Cwdr/WFdQJPWYCsx2UZOthGj7L/fenkCG4jI5CpKF+bIYuVFR9IvH9EtQ5ltlXKXvX+pkBZ60zTVvby+bj8Q9YKFj4zLYEqh1KpoyDk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769496091; 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=/7RJutSKn1k65hDY8Ig9jUscMyGWjNCtLo7Y1bHL9Eo=; b=RufhtaMPYF5tSZeojfBHb4Bi93Mgg3AJDk4uKe07+Rq3IvHnh/C2YxZSSx/silYq6VQYteXyWqeAF9b1Bn+kZxubnDDIQEBjPVg0StQLQThKhZ7tihF7/M6OBUegCT/F/qx3K4R/nhDscIBaPggaRA6ypVsGItV89fjYdJ0Eagk= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769496091031383.6670596637043; Mon, 26 Jan 2026 22:41:31 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkciM-00030X-PC; Tue, 27 Jan 2026 01:38:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkciJ-0002xp-1O for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:11 -0500 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 1vkciG-0006m5-BC for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:09 -0500 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-34ab8e0df53so4624541a91.3 for ; Mon, 26 Jan 2026 22:38:07 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.38.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:38:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495886; x=1770100686; 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; bh=/7RJutSKn1k65hDY8Ig9jUscMyGWjNCtLo7Y1bHL9Eo=; b=Ie3fO0bRVZYp9n5GXtVSo1XhVraP4SZNwavaAu0TlD+MKO8OMS6cxL66i0ZeAl7y8J /YM6o/GW4osA7DVwYs46t+kZflWlMrm6ZUDZ32vI8YhPocpoVm3ArM5QGNZAykuGIgPy 4LvhK4aXfauuydsFnlEA95CIDl5VZov2Kc9H8XMFYwKwPtKUEfteYAC6H50rwy0h210l q/xERHohC4ncWkzKdav+AcvqSO7d0qGn9peZdbqEdAoXWerBDzpx3bD0R7yRzf1ljrvd 0F54gCKymTLMHSZJtH1mtb/ADEAo6Cyae/6fey1FidWkFIQcIo9nxDfPE4idiTdD7bUh qeNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495886; x=1770100686; 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; bh=/7RJutSKn1k65hDY8Ig9jUscMyGWjNCtLo7Y1bHL9Eo=; b=cWrv2Tpiy2Pcpu//nU3P97pfZdHm0T/ub/cKLdS4DPM9HkdzvryNwAk0oD/xVQoa3E hLM8tNmFF/up7fD3azvn454c+Evci8BgAlwyPMw0Eflqaf4MXUaqDVuNTRzMDaFpKRLh vYb0XXILge32G9ITgezYRQ0uXLSxlaq+rrseaPL2jRaJdKuzmLAnsHcZM+2YEfR9zCJj niBLQhXnS+jiaVekboflNescAG6fuWTdgDc0Su94i0hPiX0+5VBDUXKZhnrSmb8qOgax ql4VSGKygEX/iHKI1amr0sFpL8ORy/Jf0KlUz7whqGD/WFpLAiPI38YZYTIS0Bsd3thS 22PA== X-Gm-Message-State: AOJu0YzXOOUFxWiTQ5t0Sj/DFCt5s53gAVQA0afZo9OjrsZzrP6n0ozP JpnDMkyqZ6eBCjoBXxOKQ6hzovPo0VCiazDlCL8/XOMm3y2rfa6jd0OYTBeJPUVKZCD6fFOIlxi 1kgO8QhfJDTei2TLjO1nsuMeHQuWX+Wlf1kQ+9gcWicHl52tFfaoGgxJD43cqnwu6Za+SbsJSo1 RCj6vtJPL4llPWUMUmmX0R9g5Owy/OHj9ru8F8jm32ng== X-Gm-Gg: AZuq6aJ4ujGEExEdtj18X2xv8DJwDaNqETWfbxd4ZPeWsP0+4PA2PmiuXdSHmxOXfkP c+8DJ9tE87a7trgq2aGShMkrZVPrpY/zjTy2E5qEapykiKTgNLJJOcaJ2J/x/EmPMznJaqOpVF9 XAVyc4hdnKNwacnwDHa8tnDbljj3d3dEfqBnKcLGG909vROjrbxuVLWoa0CQgGM0GtxbAtQzsOb iBfe0iTA6tImK5aQcAwKkVMJgLtljr2U6eNOJqk8LqUav0JHljA2EJqXEe8GZQSCdPT5frxO3R1 XclhVFDANcSUeW0uAQ8QbvnV0LxfCssDl1vHNKSr5sPI6S/kbsxEdk46Uikx+EzhlZTAQupwDhN XMoPLOvz8NvwIhLuvVR82BnGgRANd5tQObbxTJSohKBrrR72KpJV+9+5SBGlvTkYnnmUdtOZgT4 0TE8wRcaNg8+8cqjiWWDj/CmePqCA5Z7ffkFl4MRC1mI2lH7wQtaE/kB9FjXxrHJSTvCw5g3hU6 qhaeCNkGdEUTjA3vbncXjkBNg== X-Received: by 2002:a17:90b:3885:b0:33b:b020:597a with SMTP id 98e67ed59e1d1-353febd56camr906020a91.0.1769495886265; Mon, 26 Jan 2026 22:38:06 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou , Alistair Francis Subject: [PATCH v2 14/17] target/riscv: Add implied rules for Zvfofp4min extension Date: Tue, 27 Jan 2026 14:37:20 +0800 Message-ID: <20260127063723.442734-15-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.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, 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: 1769496091639158500 Content-Type: text/plain; charset="utf-8" Add implied rules to enable the implied extensions of Zvfofp4min extension recursively. Signed-off-by: Max Chou --- target/riscv/cpu.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 7823508615..87827441d3 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -2520,6 +2520,15 @@ static RISCVCPUImpliedExtsRule ZVFOFP8MIN_IMPLIED = =3D { }, }; =20 +static RISCVCPUImpliedExtsRule ZVFOFP4MIN_IMPLIED =3D { + .ext =3D CPU_CFG_OFFSET(ext_zvfofp4min), + .implied_multi_exts =3D { + CPU_CFG_OFFSET(ext_zve32f), + + RISCV_IMPLIED_EXTS_RULE_END + }, +}; + static RISCVCPUImpliedExtsRule ZVKN_IMPLIED =3D { .ext =3D CPU_CFG_OFFSET(ext_zvkn), .implied_multi_exts =3D { @@ -2648,9 +2657,10 @@ RISCVCPUImpliedExtsRule *riscv_multi_ext_implied_rul= es[] =3D { &ZKS_IMPLIED, &ZVBB_IMPLIED, &ZVE32F_IMPLIED, &ZVE32X_IMPLIED, &ZVE64D_IMPLIED, &ZVE64F_IMPLIED, &ZVE64X_IMPLIED, &ZVFBFMIN_IMPLIED, &ZVFBFWMA_IMPLIED, - &ZVFH_IMPLIED, &ZVFHMIN_IMPLIED, &ZVFOFP8MIN_IMPLIED, - &ZVKN_IMPLIED, &ZVKNC_IMPLIED, &ZVKNG_IMPLIED, &ZVKNHB_IMPLIED, - &ZVKS_IMPLIED, &ZVKSC_IMPLIED, &ZVKSG_IMPLIED, &SSCFG_IMPLIED, + &ZVFH_IMPLIED, &ZVFHMIN_IMPLIED, &ZVFOFP4MIN_IMPLIED, + &ZVFOFP8MIN_IMPLIED, &ZVKN_IMPLIED, &ZVKNC_IMPLIED, + &ZVKNG_IMPLIED, &ZVKNHB_IMPLIED, &ZVKS_IMPLIED, + &ZVKSC_IMPLIED, &ZVKSG_IMPLIED, &SSCFG_IMPLIED, &SUPM_IMPLIED, &SSPM_IMPLIED, &SMCTR_IMPLIED, &SSCTR_IMPLIED, NULL }; --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769496062; cv=none; d=zohomail.com; s=zohoarc; b=dsWZp3njspquXOMN1DdFt4vxOLVbJVlY2HVyZLMijdD+qRJvrBwwHy1i531OWMUIJBOfbCGsvNhTRho7vJwvRONUW08GJ9JAJRIKUWnd5KtM8sS1KYOjbl0Cr8Ta3txlhxGX7NhQDZT8c64T6RupUSh4EfPOFQ0BSX5JeLTZIz0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769496062; 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=JGcwg0GwnJbskM4hAjvfJZ7w7+5kGXiia0IIZ2hjvCE=; b=NprSr+hwKaV/uw2q16ez/Zabyl6+tHoSohp3JONR1xgo03s+SUrohY7u01OeYdKJznJMNIHxdi6WrrN2bPUOANnNLX9QPLY6h2ENVvQg5Pt6l5ZMT4WCRdB8LlCQ+OHU9crp74tQ7fFisaPOWVC5n3443LrVKhq8xqR6VDcM2iQ= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769496062723294.0351481106029; Mon, 26 Jan 2026 22:41:02 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkciO-00032i-Kt; Tue, 27 Jan 2026 01:38:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkciK-0002zQ-Qt for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:12 -0500 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkciI-0006mT-LQ for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:12 -0500 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-352e2c59264so3627774a91.0 for ; Mon, 26 Jan 2026 22:38:09 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.38.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:38:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495889; x=1770100689; 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; bh=JGcwg0GwnJbskM4hAjvfJZ7w7+5kGXiia0IIZ2hjvCE=; b=bB28VKssvZ2vMoEgKKmu+3hSXHkHQfYE6R/k1a93XwCsmd5TfECSSAzZCseTp+FJMy nWlhReqEIP3cygw2pqAz6wPwTxkZffBvnZ5CKs8jfBYsntXmruiEKK50c4BRomScpROj kGrNHb+tzXh5T12JFEuwS8TM18FqJWrLK7jOp1EzTNUO/7Ve+iwUCbu0TG+J6iCzgVAf kFhaNazUJlzbzILIJP3saTOH8AQJ9wd3DSbZ2mxxAlcRuO91HWxhzgb5aFjpiWUmP0Oj J+hvvJ4yLGTPVay+74Aat1KxBjvhpjsxOQFXw1qYnMkGAzFhs/jh27MPsT5ZRlFr0KAa jVuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495889; x=1770100689; 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; bh=JGcwg0GwnJbskM4hAjvfJZ7w7+5kGXiia0IIZ2hjvCE=; b=bhWA1RFk5of33CZ0TCeZZ8hBx51gkbBGevadFGwE5J+L9dPAaA8UZ54B/0zRaeS7lV EMkSll5NBywlQC6KGZ9/ndYXZb21eEdsjiJUXX9BTzsW/ju1AGEGV4opqmMaBJd5ALZJ uS8u/7EgDyOzqmNPGi24eRYbv7cPaZw9N8vZNBHP5REbIc4M0Z4wFOMEFBG2M0vdRJrZ lWflYu7vakft9dkSYi8l7/GEzYdGPRRDRtabMOJpT9Mdbr6Ek0BwIJtA9xcuk4lxjXfs cyzxpBDb/mX7VoHHEVXUJKO0slz01XBSRiUP/+r84G377qVwTYW1thIb3kuOGpcp55kk 62NA== X-Gm-Message-State: AOJu0YxC6i/yQ1+IFbqSs3P1SA5sFX7QGZaYzJjB13Sl5nkpdm/HPxEY Nn2vO2PI1aunNx0JRmGkTITI4hU32pHHyqOm6vYfbkPssB8ThmxNoH8Io9BuvLrjGRx87ctK4kI KtWzJ1a6obFokYeJ9jjzK6RpMsxELgHt7uJiyDHX+U8D7Gwlr2rMJUrqUW9mnEdy5TaTCqGOED0 B4VvCIavvRBMLTgjm3XfLSFfN9oYZKuCvVH6SH8Qu6Hw== X-Gm-Gg: AZuq6aJa+oJm+Nrdv5URGxozItvma6uXYM7jadEFetV3dmenLsghJa/4jzsv0EJ7uYP FJmSa9HrWlEoi3jS6Q3Kp7byeOQJMbHPHey2vhYxGQrlVsngIg0s7Gx4/bm3Xu4APCVcjJn/xUn 6T6pJODhfYo0jqLzL2ivQJ4doCSfFwJ0LT0Ol63HDmQme5c5Bf8IeZJUDODzOS8wpWCCy9UnMm1 WoYCDUWKVXCjiKUvEV+Y87MlhPAemCavmEPM66gx3yIWAk2qxH2fnhyazxd2b4qVhwglJ4EdKGr ILfrXcHKivRfbAEVo2mLT9E3bIIcxwtMQlQ1tPffcOZztoThaBuPQNfhniDovdjdp7+pWksCOb6 Mv7RbyyXWHMQY3/yihj+pcACTMxZNKg0CKflyCRDbhYEeYJFof5FUEUC1ypBqq/oVT6XB2SlH3i YrXpMdyOxGW+amRbk4Ls7pbrotrE60w9rRGgscmuJoNhrUNPeix3dLilKoBn0I7RhVSzK3ePTgu 9reygBr2bQ6yJQ= X-Received: by 2002:a17:90b:528e:b0:349:2154:eef4 with SMTP id 98e67ed59e1d1-353fecdcf8amr801119a91.5.1769495888865; Mon, 26 Jan 2026 22:38:08 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou , Alistair Francis Subject: [PATCH v2 15/17] target/riscv: rvv: Add vfext.vf2 instruction for Zvfofp4min extension Date: Tue, 27 Jan 2026 14:37:21 +0800 Message-ID: <20260127063723.442734-16-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=max.chou@sifive.com; helo=mail-pj1-x1033.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: 1769496063465154100 Content-Type: text/plain; charset="utf-8" The vfext.vf2 instruction converts a vector of OCP FP4 E2M1 floating-point numbers to a vector of OFP FP8 E4M3 floating-points numbers. Signed-off-by: Max Chou --- target/riscv/helper.h | 3 ++ target/riscv/insn32.decode | 3 ++ target/riscv/insn_trans/trans_rvofp4.c.inc | 44 ++++++++++++++++++++++ target/riscv/translate.c | 1 + target/riscv/vector_helper.c | 33 ++++++++++++++++ 5 files changed, 84 insertions(+) create mode 100644 target/riscv/insn_trans/trans_rvofp4.c.inc diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 356c24d9fb..162303fb6c 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -1259,6 +1259,9 @@ DEF_HELPER_5(vfncvt_f_f_q_ofp8e5m2, void, ptr, ptr, p= tr, env, i32) DEF_HELPER_5(vfncvt_sat_f_f_q_ofp8e4m3, void, ptr, ptr, ptr, env, i32) DEF_HELPER_5(vfncvt_sat_f_f_q_ofp8e5m2, void, ptr, ptr, ptr, env, i32) =20 +/* OFP4 function */ +DEF_HELPER_5(vfext_vf2, void, ptr, ptr, ptr, env, i32) + /* Vector crypto functions */ DEF_HELPER_6(vclmul_vv, void, ptr, ptr, ptr, ptr, env, i32) DEF_HELPER_6(vclmul_vx, void, ptr, ptr, tl, ptr, env, i32) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index f2b413c7d4..c58223ebd8 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -754,6 +754,9 @@ vsext_vf2 010010 . ..... 00111 010 ..... 1010111 = @r2_vm vsext_vf4 010010 . ..... 00101 010 ..... 1010111 @r2_vm vsext_vf8 010010 . ..... 00011 010 ..... 1010111 @r2_vm =20 +# Zvfofp4min Extension +vfext_vf2 010010 . ..... 10110 010 ..... 1010111 @r2_vm + vsetvli 0 ........... ..... 111 ..... 1010111 @r2_zimm11 vsetivli 11 .......... ..... 111 ..... 1010111 @r2_zimm10 vsetvl 1000000 ..... ..... 111 ..... 1010111 @r diff --git a/target/riscv/insn_trans/trans_rvofp4.c.inc b/target/riscv/insn= _trans/trans_rvofp4.c.inc new file mode 100644 index 0000000000..91bf50834f --- /dev/null +++ b/target/riscv/insn_trans/trans_rvofp4.c.inc @@ -0,0 +1,44 @@ +/* + * RISC-V translation routines for the OFP4 Standard Extensions. + * + * Copyright (C) 2025 SiFive, Inc. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +static bool vext_zvfofp4min_check(DisasContext *s, arg_rmr *a) +{ + return s->cfg_ptr->ext_zvfofp4min && + (s->sew =3D=3D MO_8) && + vext_check_altfmt(s, -1) && + (s->lmul >=3D -2) && + require_rvv(s) && + vext_check_isa_ill(s) && + (a->rd !=3D a->rs2) && + require_align(a->rd, s->lmul) && + require_align(a->rs2, s->lmul - 1) && + require_vm(a->vm, a->rd) && + require_noover(a->rd, s->lmul, a->rs2, s->lmul - 1); +} + +static bool trans_vfext_vf2(DisasContext *s, arg_rmr *a) +{ + if (vext_zvfofp4min_check(s, a)) { + uint32_t data =3D 0; + + data =3D FIELD_DP32(data, VDATA, VM, a->vm); + data =3D FIELD_DP32(data, VDATA, LMUL, s->lmul); + data =3D FIELD_DP32(data, VDATA, VTA, s->vta); + data =3D FIELD_DP32(data, VDATA, VMA, s->vma); + tcg_gen_gvec_3_ptr(vreg_ofs(s, a->rd), vreg_ofs(s, 0), + vreg_ofs(s, a->rs2), tcg_env, + s->cfg_ptr->vlenb, s->cfg_ptr->vlenb, data, + gen_helper_vfext_vf2); + tcg_gen_movi_tl(cpu_vstart, 0); + finalize_rvv_inst(s); + + return true; + } + return false; +} + diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 137022d7fb..bf403785b5 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -1220,6 +1220,7 @@ static uint32_t opcode_at(DisasContextBase *dcbase, t= arget_ulong pc) #include "insn_trans/trans_svinval.c.inc" #include "insn_trans/trans_rvbf16.c.inc" #include "insn_trans/trans_rvofp8.c.inc" +#include "insn_trans/trans_rvofp4.c.inc" #include "decode-xthead.c.inc" #include "decode-xmips.c.inc" #include "insn_trans/trans_xthead.c.inc" diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c index 418212973d..a87728f130 100644 --- a/target/riscv/vector_helper.c +++ b/target/riscv/vector_helper.c @@ -5121,6 +5121,7 @@ RVVCALL(OPFVV1, vfncvt_sat_f_f_q_ofp8e5m2, QOP_UU_B, = H1, H4, GEN_VEXT_V_ENV(vfncvt_sat_f_f_q_ofp8e4m3, 1) GEN_VEXT_V_ENV(vfncvt_sat_f_f_q_ofp8e5m2, 1) =20 +/* Zvfofp4min: vfext.vf2 - OFP4 E2M1 to OFP8 E4M3 conversion */ /* * Vector Reduction Operations */ @@ -5920,3 +5921,35 @@ GEN_VEXT_INT_EXT(vsext_vf2_d, int64_t, int32_t, H8, = H4) GEN_VEXT_INT_EXT(vsext_vf4_w, int32_t, int8_t, H4, H1) GEN_VEXT_INT_EXT(vsext_vf4_d, int64_t, int16_t, H8, H2) GEN_VEXT_INT_EXT(vsext_vf8_d, int64_t, int8_t, H8, H1) + + +void HELPER(vfext_vf2)(void *vd, void *v0, void *vs2, CPURISCVState *env, + uint32_t desc) +{ + float_status fp_status =3D env->fp_status; + uint32_t vl =3D env->vl; + uint32_t vm =3D vext_vm(desc); + uint32_t esz =3D sizeof(uint8_t); + uint32_t total_elems =3D vext_get_total_elems(env, desc, esz); + uint32_t vta =3D vext_vta(desc); + uint32_t vma =3D vext_vma(desc); + uint32_t i; + + VSTART_CHECK_EARLY_EXIT(env, vl); + + for (i =3D env->vstart; i < vl; ++i) { + if (!vm && !vext_elem_mask(v0, i)) { + /* set masked-off elements to 1s */ + vext_set_elems_1s(vd, vma, i * esz, (i + 1) * esz); + continue; + } + + uint8_t input =3D *((uint8_t *)vs2 + H1((i % 2 ? i - 1 : i) / 2)); + input =3D (i % 2) ? ((input >> 4) & 0xf) : (input & 0xf); + *((uint8_t *)vd + H1(i)) =3D float4_e2m1_to_float8_e4m3(input, + &fp_status); + } + env->vstart =3D 0; + /* set tail elements to 1s */ + vext_set_elems_1s(vd, vta, vl * esz, total_elems * esz); +} --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769495987; cv=none; d=zohomail.com; s=zohoarc; b=JruypXO0nL2YPhAfLVYqz3MnFUqb0h6D3sx7NCGIQ+ZgTgKTpHbbbS+iGC9/dHZNwZfd5+GwhaKaPtIsCbo39/j+SXI+9DdlbMBuI3jgLxlPHivFUM04YnIrK9CokltHdjRiKggqGfPDClxythNcCBL+L4oXIqFwxpfv56dE4g0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769495987; 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=1/POBbzvFsH1ygUjRGcpksWmZ9M+w+T/oFj7/7kP11s=; b=LH8OtESi2+7QBsv+y287HO0HFDylbrVTA86Few5G98v597wuc1CYIILOoAi2cn1s4fQg04vA7m3b7AaZb4zmhv+qFpTWqvTQeyCs6cXQyDmoFja1YNZSfUZQjTUBtUGcYD51YyPHZAMEg05LySRVdXOTYzYsty5KHGaGwGBihUE= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769495987544722.9351296177849; Mon, 26 Jan 2026 22:39:47 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkciQ-000350-Uu; Tue, 27 Jan 2026 01:38:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkciN-00030m-Ud for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:16 -0500 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkciL-0006n7-4f for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:15 -0500 Received: by mail-pg1-x52f.google.com with SMTP id 41be03b00d2f7-c622ce9a33bso1657845a12.2 for ; Mon, 26 Jan 2026 22:38:12 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.38.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:38:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495891; x=1770100691; 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; bh=1/POBbzvFsH1ygUjRGcpksWmZ9M+w+T/oFj7/7kP11s=; b=gBxTD10nGcDZwDcwS6xb4j2wJgy7DMFpjxlaw7vDCQiql3DFzxTqEYi0eP8Jn8u7zA IdhkUGGIhhsduDjnrhgJDhBGnmlGG5dLypjS/rJHKakvlzJsCaxhEIobMMvUD4yUayCC 3eHW/2m4ifvF9r3vu8Kde6/2oJLI3DlCYqaB9Hgn2BnzpYbKseMoAEcz2t5iuCBg1sZ5 h+wlFhwof7UPdPhSClL7agFeSMX78K4kZkXToNn0O2DM7nVwFdS1IvhiwjSU7JjBPJDH eoRlmOAcx+jlR4sfwAk4zlW/JD2YG7bVCveaU0bLmEHddC40qJc/HL7PVgMs1iVP0N94 O3Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495891; x=1770100691; 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; bh=1/POBbzvFsH1ygUjRGcpksWmZ9M+w+T/oFj7/7kP11s=; b=IK6gk4LQvUcKceOLPv5KhMSM8mCpof0xPqAvkd0wTtYqW8l+vRTuZAsVU4a4Z5N39r mT+dKOUZjIgkOtxWo3S4N7LwKajD5/HAwmB9O9P6l8lIaf/q/4PvsONPMA7ecPExyPCG mS5AJe82zXppaBfMH1gTli6ZBElF14hpueSvfbx0ljAgtPGD7nSn0d+2nmLnah8xHTm5 cZdLGtqc+XQXGt6RSE0YYfLZ+WiOKspyoKPc/xyIxmR8tOmq11VTaD4DhaciB7J0lh5M fh2HhsllEMAdExj81DNpVTL0bIaySrUz/tcCKRwxtTEAEE3FgXI9uIihEN+/ZDtm5Udr 2KmA== X-Gm-Message-State: AOJu0Yw7ZxCWqFm31iJEX+lYTbIMX5kN+VxHU9HCFctWAc8I9xwnNNYf L7fEu6FfSIOum58AzozGb9kUEEFITz8fWZNPNOIZXa5MOrLfpNNQ+yjvNyOFXKKz6L6ZzVBkchI TZvl6oUvu8jqZNFXn0qIBHsRQnV8mfRPD9TBJx9pviZya2k9yRW68eLICfiXPMxUyKqD5Y1lOxm YiTwzTQCZJVTtK0I3RvOq0M6S8YndSMcBRSb7zD+Hk0w== X-Gm-Gg: AZuq6aLLHx57O7NGDePiQglMsRwetjqBNIAa+ASCU578DY5cKHmJZgN4Iq+IoTHr9Mg Mx05x08fldMFytmahhJadvGSX55xkfUq1q35o1IpdDEDUfP8g9zm0AV9tpRZtfr5DoADZ3mdXtu O1/UQSSwgXq8/nPElOg5Bue65H8EB94O4d1icAYAgmwhrxOnlbDiHhpQF2jkHZ3z+Cf92Sb+wTc b9bPhP0u9fy5e9J2g+YXTh4Vz2nRp+g6ERuB9aXloa33ZIF59mqBCWW+Umg/jCsvXQGpdO4z1Re 0ZJpb15SFChvmreQPkt/r4pag0FLx6AhZQGcHFUpI/FF1dsY5BA5JBQUec1H/cklBEx0ZihxaKs EkPAbcwaKE1OaactUoOZVgWtdZ5YsqQY7lcJOIy46l/JghLRIuqHRXY5ENIVtG/lZnyUkcdeVCb j8JVxMdFzKWC24MOVVo1k8uGQMz3YGHdd327TV7DctZoXjRz++/HQ/yqi0rcz9ur7O88HtAdksZ e+oSZTl3DqKp2U= X-Received: by 2002:a17:90b:2c86:b0:353:4f7:cc3a with SMTP id 98e67ed59e1d1-353febc7f59mr830740a91.0.1769495891477; Mon, 26 Jan 2026 22:38:11 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou , Alistair Francis Subject: [PATCH v2 16/17] target/riscv: Expose Zvfofp4min properity Date: Tue, 27 Jan 2026 14:37:22 +0800 Message-ID: <20260127063723.442734-17-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52f; envelope-from=max.chou@sifive.com; helo=mail-pg1-x52f.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: 1769495990352154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Max Chou --- target/riscv/cpu.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 87827441d3..d2f25cd14b 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -1384,6 +1384,8 @@ const RISCVCPUMultiExtConfig riscv_cpu_experimental_e= xts[] =3D { =20 /* Zvfofp8min extension for OFP8 conversion */ MULTI_EXT_CFG_BOOL("x-zvfofp8min", ext_zvfofp8min, false), + /* Zvfofp4min extension for OFP4 conversion */ + MULTI_EXT_CFG_BOOL("x-zvfofp4min", ext_zvfofp4min, false), =20 { }, }; --=20 2.52.0 From nobody Sat Feb 7 05:48:43 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=1769495991; cv=none; d=zohomail.com; s=zohoarc; b=IA68jZAuO4bQk0vpEWH38p2/oOM/DdBj/NocXDvWkDDBxImITtUE7UtRsz+wDCPiJ1OvJQ8G/Po0oE77U1nbB3WINDzgcPrhRyp5+NYWpi5gvvy0c+2EGVliUraW0qzLlHzbmg6S/slqap1X6fRItTkqM+up7uLn2mjcCRcvFmI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769495991; 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=d5CYrkhJrpjvqBVPkzOjtXXVzTM5dZscmB48AsapUgU=; b=NJsy+7WSGFhVY7ONQRQG5Ijf8/l7oPQpswM2F9r524NyhlDtKrMEviCER+KLmn0AT5iSuNQ3PQWXKqwo2ljKEEtzXp4lzHmTOQiVKq44ByBvrOgHHD0WM3OmieV0Go+FTk3lg35LEVW8ZL+dwCW+4q/VTEkPmfSlrzehfFTwVXY= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769495991153234.37890596076; Mon, 26 Jan 2026 22:39:51 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkciT-00036F-GI; Tue, 27 Jan 2026 01:38:21 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkciQ-00034O-Ib for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:18 -0500 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 1vkciN-0006nf-8h for qemu-devel@nongnu.org; Tue, 27 Jan 2026 01:38:16 -0500 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-352c414bbbeso4320680a91.0 for ; Mon, 26 Jan 2026 22:38:14 -0800 (PST) Received: from duncan.localdomain (114-35-142-126.hinet-ip.hinet.net. [114.35.142.126]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f5f96293sm1414175a91.0.2026.01.26.22.38.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 22:38:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1769495894; x=1770100694; 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; bh=d5CYrkhJrpjvqBVPkzOjtXXVzTM5dZscmB48AsapUgU=; b=hoc0DP9nxJByA1bg5Iw0Ox0pjVe7QDWjDHxLui5NzUY2PMBKUKylxc9TkFSxRLv9qO +spbFaxRiCk9DpaPuWSsjvpmrZht6HQAPkUJjR1X1dBwMWC6cFgcgAwd9eNMnre/OpA1 9p3Xf9E2eon4NAOQOdWw3jGyFQlVGH7VRQr70mKaACwGDx2bcPd0w3pWwAi9cy5VVZdh z2QN9a5iW/mCFLjvq8yGtPbyg5HiaV3VkgU8cKK2QpLvvkn4nLZwffFmXVeIzQhFdWh6 HQEiRUKaoflH40FNsgD0vNOtj+PerAdg3K8QWtg5J3AP6Kn/1WyUp8BiRfhgNU6MLsUm cLyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769495894; x=1770100694; 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; bh=d5CYrkhJrpjvqBVPkzOjtXXVzTM5dZscmB48AsapUgU=; b=UAhr5vak0wA3eVQ3f/XRUw5s+VeR/4avgFMfF1rwFVZxzJOW2RAW4Lx+6L0sl1S0cD 9sL9yVJXh/CzsixttAQI0FLSbSXpUDd6DXXc7uMrmRnFloCmfMz84km32MuWMHaz+RpK VY2zyEH5+fEONqlK3136mHcuWQ2fBs+mEkHk9d7cBaNWDG4F9keEN9eoutdr6dmCbi1A Bp5Ghz2s37mZp1TIBIpztit0l5Y4H0Evx69/t7/m1BQniSmEEMvXK9ZoT4utSdlQORqU RCT6PexxsRxlKpoLsI3dbrXGMndRCi7jdn7E3B9HzBf+pWnssg3hhpZy6upbMJA638Cn T3Yg== X-Gm-Message-State: AOJu0YzOd//2iXvD9A57W63TNunhSg0yGF+J2eY54LgvAa+AkS9e6NJV +HUqv92hoJH11i4Z/aW4Sb0fNO3qhJOu/RXLn/QeS6vMoMG/hcWGEuwZqp8BIVARaBnGO+GppsO ni9yF9sykF415nseV/r6MgIJDW8LoUafp/Xth1DlPUl0Ng+yWW+buiTgX6+2Zt2xq6/ZqtzPPJO I8pMRrfUYPZn+qj2hTLlxcmav6jfBnp0pmc2BXDJzECw== X-Gm-Gg: AZuq6aK6Ma54Q9Xi5zQoehSNQQqL9/+l157sSZlbdOehXZ4didxoCpKS7Fpi8GqWqzS 6YNJD9f7nYNBCiDWt5dAeQ8ie5dJUE31aeot5uW1OjIo5TB4mnIYMs4ZJ0/xHpJcB3Nn6myvtMX X3mrZq0ntUTN8dwXIIrsh9EwoEnDziOjIscpZY6Af5wzewoXjmLoQNxbCXGXuHCIwGOdFQ9n+MX rkavgH6HhFXyggtVmgjFaT1/ljYfru1xHfxaT6cZUSuXrMe9Nr/tJ4qScA97DeIX+VkcVrCQLtc 7JpKv4IRIBByenB9XHVd5SVILT+sJP9xcGfa9YC0OS7IY1ljMftejU7EUG4Fm5MXzihe81ZM8Nj rOQIpT60goAJq3KEfS0g5aipVmR6SGmMGU3Mg8ilHC7Am3Z2GIJKYfRMvt59zLelBSaUgIcMrp/ SarbqPDxWCqYVbYVGrNBY+vaNDMwJSJqXLFAjtKpV5IZEFUIJ8W1HjGhEvkuYma8uKqgLkxYXGt BP82XCG7YLv4LuK1tlMdCRQyg== X-Received: by 2002:a17:90b:58c8:b0:343:e692:f8d7 with SMTP id 98e67ed59e1d1-353ffb1937cmr610526a91.11.1769495893938; Mon, 26 Jan 2026 22:38:13 -0800 (PST) From: Max Chou To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Aurelien Jarno , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , richard.henderson@linaro.org, Max Chou Subject: [PATCH v2 17/17] disas/riscv: Add support of Zvfofp4min extension Date: Tue, 27 Jan 2026 14:37:23 +0800 Message-ID: <20260127063723.442734-18-max.chou@sifive.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260127063723.442734-1-max.chou@sifive.com> References: <20260127063723.442734-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=lists.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=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: 1769495995016154100 Content-Type: text/plain; charset="utf-8" This patch adds support to disassemble Zvfofp4min instructions. Signed-off-by: Max Chou --- disas/riscv.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/disas/riscv.c b/disas/riscv.c index daffe9917f..9abf86f2d7 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -987,6 +987,7 @@ typedef enum { rv_op_vfncvtbf16_sat_f_f_w =3D 956, rv_op_vfncvt_f_f_q =3D 957, rv_op_vfncvt_sat_f_f_q =3D 958, + rv_op_vfext_vf2 =3D 959, } rv_op; =20 /* register names */ @@ -2260,6 +2261,7 @@ const rv_opcode_data rvi_opcode_data[] =3D { { "vfncvtbf16.sat.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, = 0 }, { "vfncvt.f.f.q", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, { "vfncvt.sat.f.f.q", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, + { "vfext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, }; =20 /* CSR names */ @@ -3715,6 +3717,7 @@ static void decode_inst_opcode(rv_decode *dec, rv_isa= isa) case 12: op =3D rv_op_vclz_v; break; case 13: op =3D rv_op_vctz_v; break; case 14: op =3D rv_op_vcpop_v; break; + case 22: op =3D rv_op_vfext_vf2; break; } break; case 20: --=20 2.52.0