From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271793; cv=none; d=zohomail.com; s=zohoarc; b=R934/9PZRKe9oYKzNkA8B35TbVzlqx1qpSmYCN482Qdfn67/Fr/2EfP1PB18pTXmZZebYA8/GPyFWESQZ/kYlkG9ejF8Ks8yg0A71jBUeVO5lB+hV3CVfhk8RqmV7T8D7v87O28RE4ybiMIIfYGa6IWX11iIbz4XeRIh5qbYsIE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271793; 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=ZaSE5FAGvb9L9rKv3u4p8gymDEWwzpmw3iLQZAJ38eA=; b=MjNdvdsmyvU+2Oj7uvIAH+UFtWZd3tc9hMVBDF1anuSRFuH9nSQQB9U6ZlqP1PoQjqrEfyzCfzCBfq2Fd1f3Nof97NtPrlN7tU+VKH9o4RedvR7Uf6Kfzt5j3fgdHiWjgssaD/7ES0vYO4eS/FWnEbyF6NLOqsZtdcO9v0m/1Hk= 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 1774271793557725.8721367746905; Mon, 23 Mar 2026 06:16:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f8S-0000Eb-LK; Mon, 23 Mar 2026 09:16:00 -0400 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 1w4f8Q-0000Dt-Tr for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:15:59 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8O-0000Kj-KL for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:15:58 -0400 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NCegCW2475974 for ; Mon, 23 Mar 2026 13:15:55 GMT Received: from mail-dy1-f198.google.com (mail-dy1-f198.google.com [74.125.82.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d35r203ev-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:15:55 +0000 (GMT) Received: by mail-dy1-f198.google.com with SMTP id 5a478bee46e88-2c0ba59a830so3245694eec.0 for ; Mon, 23 Mar 2026 06:15:54 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.15.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:15:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=ZaSE5FAGvb9 L9rKv3u4p8gymDEWwzpmw3iLQZAJ38eA=; b=nmXlsZuYqzgJ5fDbUg47Su9ByfT 5zZWOyszFYhc1+DCSmaYI4kSGWnPZAuz3+zj3+nKw2/cnUJsSw+oHMAcTxj2JWSU viCv/2Kf/9J6Y/VsTAurnbAWsuYOgRaKizXhkZpT6PqhIy/auiGcrorM2ijJ8vMl vE8946feWtJm8sgOo1/EsoDbtbQtqOBogMNZ0XSc9N60ym6ixGLspkhRV8LBqakl g868Lrv9/RwHXwP6cUUSCaGz7jDJEKo76eB9WXKrXvglKuXKZGIwEwNkVkXl/LXe nTejE22qLWJJWHMraNHZESzftQyBFegOQuQj4Kn3Z0KdLD8NyKtQccNufnA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271754; x=1774876554; 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=ZaSE5FAGvb9L9rKv3u4p8gymDEWwzpmw3iLQZAJ38eA=; b=eQ2M6omAoqPOIZliLOBfCWyaJ7NJuAxjfUCYZdH41WQD37KRIAHNjOax5amlT3+S8H /mnKXHhnWpFEIxir8YfrQuk12GRb7Z1yZegwAV9WUm+BOZqRRdmKPlDFV2GgwCpQuKaV MdwZfaDiIkqEBpKxV+Vq538L2Q5dInQyR8NC5BWgt91mIImUGGuw6vje5bH66uJJPL4b BpLJVGE84ItiWVpyY2VVzcKA2czjvnTBs8aTcWDVbzyuYO9f9LzE1hpM5ApOMm6ezxK/ ySGmxTKAF5QlxrkAWb0+AeXGIBxYllJgC8aUgQcx4ETiqPBitlfeksm0qd1QvvVREFZT wm6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271754; x=1774876554; 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=ZaSE5FAGvb9L9rKv3u4p8gymDEWwzpmw3iLQZAJ38eA=; b=iLvnur/N+9+J8e1NGqLeAovjIBwLLBuadFLuhDP3aQ/FNC73QaVdmXacsuM7Q4nbgd 4gFyGHwAs7BHLzmSL7BzuL594XKmDBQRgw0yFyF0afwDbDidfCNj36+zak8iKZZAd+IN +0iPoXzZIZJUhoufm5w4nw1RWzPIZbwqTjCl40uJB3gzcq4+xvYq9Ugo1lkd0YxkGcy8 Dod4awGXHkQ8NQ3Lud6DvWlUq1KRNiJD9Zsv9YlxeuQn8qxLRdZTUtz7V0gF0S0HiER6 umWyPS1+Ug0UHYEK0nsNlPXZ21ccYrllw0ZWN+9OXEiJ6as/297E2J9nHAiq5C+vvc3X fsIQ== X-Gm-Message-State: AOJu0YxIiZKBXLlvX/yAimPD5jNdQ1xkQLhO4AbOts6ESuGtxs9v3Idx KdbxtX/p9OTNm1OV/GfGjrPtgG/ANoUDHesSMpiWE4dIISww6mBcFSA2siPaXIGkuDItmCB46iv RLbL8pt/xW6/u6F75KTRSo6Y2m8dSRpd3NdzbQZB+h3ZNLfL1j7iLv71GIjaEJhuFnJ8i X-Gm-Gg: ATEYQzz/8kWtsKc6qTWCdHDrv/+qLI/rgpwl18dkkROOTQ21G6uGKynKxgyBdZRmqHJ m5ChqPicMc3+BPsSZ2hwbnir2ax7/FNREpKI1VSoMOuAUA+S9tGxBxHgkKIolVMnk+mi72GRQld e8+uT0W2hmhQsoWqApo12zR+HLIHLRysjEIZU4L4VMKGO8SAOlewqA7vOl4rtvONs1UGiuKDixV tfQYGuXNc30+iQJZG8k3kqHHwsaLWMs5JZ6K9TcoFfkg4z6oZ65HSOZ1JKl3SB9EJnUO7ffsCli K1UWEgOn+AObMY/BxTeY6lhpffa12aW01k52rI76xRFxm29UHbJBErno/ed+U541rk6BVanVpsT Jwb76ehdmO8PZXIoaMHZkcIQ7cvbSYmUtYb/ME4plp+zn3UfF+oLOASXVeFs1k+lzvfip+zQ0Yi 4/gOCziinM X-Received: by 2002:a05:693c:300b:b0:2be:1f56:ed21 with SMTP id 5a478bee46e88-2c109563b70mr4891460eec.7.1774271753702; Mon, 23 Mar 2026 06:15:53 -0700 (PDT) X-Received: by 2002:a05:693c:300b:b0:2be:1f56:ed21 with SMTP id 5a478bee46e88-2c109563b70mr4891433eec.7.1774271752888; Mon, 23 Mar 2026 06:15:52 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com, Pierrick Bouvier , =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [PATCH 01/13] tests/docker: Update hexagon cross toolchain to 22.1.0 Date: Mon, 23 Mar 2026 06:15:37 -0700 Message-Id: X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=VvUuwu2n c=1 sm=1 tr=0 ts=69c13d0b cx=c_pps a=wEP8DlPgTf/vqF+yE6f9lg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=ovJmrJClAAAA:8 a=qC_FGOx9AAAA:8 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=q7X4_axEi9qJq2Gpr8MA:9 a=bBxd6f-gb0O0v-kibOvt:22 a=brTEhlvMp4NY0_u118I2:22 a=fsdK_YakeE02zTmptMdW:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: tm5Ntaz8aV3TqYRsgjWVOxJ7ok6bWyh2 X-Proofpoint-ORIG-GUID: tm5Ntaz8aV3TqYRsgjWVOxJ7ok6bWyh2 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfX0pbZTdt4GVSt se4eT1Ue9bDP1Del7N3wSg6URWs6iHF43A5hS7FjoAZx/GOOGtESsCFho+xZF+TKoaMq3l7t3TS cv4dVRPPWKtjDjbM0eeI2+NjfV0kkJu5BBImbjBtF3wOOyOUu5tagMATN5YFaWH3ztxwrJYBjmF op1Ebsqangp/vpB7TUL/o04lkp/8WlozvHf53Nr2hYevqKSv5yqpFO7D1gboYGqjNIDWTngcGEF AqrQExT7QxLB8P1n0AEFCSjiXZQsdMz4YkVSRdzEm0tpDZbcp7gy1V2N0A1E8rGscEAldL68wFY 5271ms/l86yRFoGbNpBSLJk59fvHa6Knpu0SJUDWc08cksbCy7ekkgdsr45qIkpAzOK3Nty8oaB wP5PGMtbXSpbuJWAf4rr53hYO0UNw//6JVSeZb+q4RLLlT2TVIohVPNC60nK6i1GK7D4O+f3Ey3 sDle5SrxrJONM3KgJsg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 spamscore=0 adultscore=0 lowpriorityscore=0 impostorscore=0 bulkscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271795821158500 Content-Type: text/plain; charset="utf-8" From: Brian Cain Update the hexagon cross-compiler Docker container to use toolchain version 22.1.0, replacing the previous 12.Dec.2023 release. Changes to accommodate the new toolchain: - Add libc++1, libc++abi1, libunwind-19 runtime deps for the new LLVM-based toolchain - Add zstd for the new .tar.zst archive format - Update artifact URL domain to artifacts.codelinaro.org Reviewed-by: Pierrick Bouvier Signed-off-by: Brian Cain --- I've added this patch because the tests that are added at the end of the series depend on the new toolchain. Brian, feel free to drop this patch when you rebase the series onto your hex-next if the patch is already present there. tests/docker/dockerfiles/debian-hexagon-cross.docker | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/docker/dockerfiles/debian-hexagon-cross.docker b/tests/d= ocker/dockerfiles/debian-hexagon-cross.docker index 91d4b71ac9..636d0ca8a0 100644 --- a/tests/docker/dockerfiles/debian-hexagon-cross.docker +++ b/tests/docker/dockerfiles/debian-hexagon-cross.docker @@ -19,7 +19,11 @@ RUN apt-get update && \ curl \ ccache \ xz-utils \ + zstd \ ca-certificates \ + libc++1 \ + libc++abi1 \ + libunwind-19 \ bison \ flex \ git \ @@ -40,12 +44,12 @@ RUN apt-get update && \ dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --sh= ow > /packages.txt =20 ENV TOOLCHAIN_INSTALL /opt -ENV TOOLCHAIN_RELEASE 12.Dec.2023 +ENV TOOLCHAIN_RELEASE 22.1.0 ENV TOOLCHAIN_BASENAME "clang+llvm-${TOOLCHAIN_RELEASE}-cross-hexagon-unkn= own-linux-musl" -ENV TOOLCHAIN_URL https://codelinaro.jfrog.io/artifactory/codelinaro-toolc= hain-for-hexagon/${TOOLCHAIN_RELEASE}/${TOOLCHAIN_BASENAME}.tar.xz +ENV TOOLCHAIN_URL https://artifacts.codelinaro.org/artifactory/codelinaro-= toolchain-for-hexagon/${TOOLCHAIN_RELEASE}_/${TOOLCHAIN_BASENAME}.tar.zst ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" =20 -RUN curl -#SL "$TOOLCHAIN_URL" | tar -xJC "$TOOLCHAIN_INSTALL" +RUN curl -#SL "$TOOLCHAIN_URL" | tar --zstd -xC "$TOOLCHAIN_INSTALL" ENV PATH $PATH:${TOOLCHAIN_INSTALL}/${TOOLCHAIN_BASENAME}/x86_64-linux-gnu= /bin ENV MAKE /usr/bin/make # As a final step configure the user (if env is defined) --=20 2.37.2 From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271801; cv=none; d=zohomail.com; s=zohoarc; b=Cj+KanBly1eFnZ4KhSK0cSkrMnZdCDM0QuOr8xaCa6TfMV9SsD3i8XmlQ4OxaOIu08O6FvJ7r23chUYHHx1adyv4m5VUJksDNSrdZ6YwA7f9w1HYpOoRNaN57+few4YrCuN6VYh7h0u7cQcO+e6vKL18iSJqIWS8JTBJW45sAXI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271801; 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=mRl0tEPmSml8N9vbVqFqWQaoiaqMFhuvOGyu/2fAPQE=; b=f3hwVyI/gTeCdnGboVXdeLpqFyyJamNdMqIymptZI6cCk6T2nrgbzmHTozdV+pJtGExsjZ3rIbizNMQlz1Fzz+u4y4gfHxUGxMH+JEUb0ncjYAcufyLrMXunDaf8RKSrTT/K+oA/sn/kGlB7tlLVNBmdchTqCfvUcTeY5/Z1B2M= 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 1774271801799315.79501567180193; Mon, 23 Mar 2026 06:16:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f8Z-0000Fw-4d; Mon, 23 Mar 2026 09:16:07 -0400 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 1w4f8R-0000E2-OZ for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:15:59 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8P-0000Kw-8N for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:15:59 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62N7X6PN3240094 for ; Mon, 23 Mar 2026 13:15:56 GMT Received: from mail-dy1-f197.google.com (mail-dy1-f197.google.com [74.125.82.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d1jng5fv7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:15:56 +0000 (GMT) Received: by mail-dy1-f197.google.com with SMTP id 5a478bee46e88-2ba9a744f7dso3189442eec.0 for ; Mon, 23 Mar 2026 06:15:56 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.15.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:15:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=mRl0tEPmSml 8N9vbVqFqWQaoiaqMFhuvOGyu/2fAPQE=; b=RPus7hbPDK7qFSn+U16PjwY6L9k 2WMAiTS9BoHKcSkpv47iVxSfq8Pf7VddZfsG7Wb6VBWQBguym7JWpvCWxcQ7tla4 y5xMFhXVNnbcNdB6Iw03IQhqg51R7ASffCzy6CA9FntLKXtvfGkMF41uUbGYMqYv 1GHoMCgMtrO1lcnTWAzyLCB2276wNt1je1SBKZdd/NfibQQSmTxZmcow69QmPCBj djdYnqMfBPmwKX0XvFByKYVNvm1Kk8cpgxZ9iNdvHIEjbgBsUyS0KWlRPBX34Jiu aSIEXOicjM4az8HFUpOgU4eNFKOm8XvUnRq1yPzFuGA7J3WOXkLUrwqKMLg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271755; x=1774876555; 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=mRl0tEPmSml8N9vbVqFqWQaoiaqMFhuvOGyu/2fAPQE=; b=B/gNupjkqGF86OrmaOMaSfblKYMSTB3xHkNt6smzvEdVAyF5AyoKyPk35+eJhQBsgO WFQW3kTSwEoh/rMpfofl5b1hINOHDxFOpIWRspGTS56a4WHc0Zh54DeTU8miC7kd2RsF isLpLpNiMCVxNJCQds1jE3IvkvdV8S/pq0IrmA6Erm1vEQpumx1OXT/fYz3xnRga5q98 vAD18zRjr//Evd8BTOxt9Wn9zKYmkwhBJN5ap3/6KjElF3jRAXL0gPsaYbZTp72rKypu cFqW+eEPBrCLjp50Dc0n/lD4biAej2qHlwgZG/gCJVIWyMb4Q5o8Di0IQzzQIbwzQK5T vJSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271755; x=1774876555; 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=mRl0tEPmSml8N9vbVqFqWQaoiaqMFhuvOGyu/2fAPQE=; b=IOg+nhmy30hW1thYWd1dpy5rW6m3bl+MpCuekottQ93oZRmoWVGaFdAFZAblwlLn8c 0ZGCKmIgoBNvAh8/cxqtjIs72tGbR1mJdNQD2jFIBdneWNW4OjYRAMq4gcCdyFD+qwXo z76W9LCVB4ehJUBdvaR9+1N6Tv5atUpfxwAENiJSUtpM7Ka0nM4X0BZNqXhpS6T3jlq9 KI34yFaRTXAyVxxtI/r1xahhrocH+ziejkpyIsWWkPDUKxZ0JeB0v+ViFdL2ISr/KXqF VqwMzy+LQ+qS7cLTuhoqOlZtwdAlqkTVa0lakJ2qCgfEtQj53YLIKfpSdt2eek7WBfpo Whog== X-Gm-Message-State: AOJu0YxGqx3AfKVUSN0BnFaAjM5I2T4hVwt0/xzQEcSDh1aCsMwhEmtg n7iSYalQFgnpMsQQAyySCHcLOtmQwjJI+dURFH9Ui9r/K9Bm3qrHjBb4b2HGKNkShMiFq2ImD/q FvSUFrxv9iygUiHEa884MrOnH3BbeOoDGpes2g4hJPmMx7w9LTRFljwPA1li2i5jSRyTH X-Gm-Gg: ATEYQzy0+U5aunqH2fYS4nVYwDtP1Q/79kQQa/dr9n4xotI7gOemD1IU88m/V/blwih 73u4QQi2Gbjr+k8lMmeCZL/dufPJ2APJvvQcSDNMZoiK40hPdowyvEwpUDrS0pQqPLtyu27mMPt 0be7iUDIEGZNfGGXNHS3d5jeSHMLHfcR8Ck3v29Zkeaob3KsyiS1wcJe3PaqDFRl9g7+UT3pUx/ 8iO/gwmOZWOlXmPY8Upet0hQkeuShdS49zJqAnWTs1Hgte8EIrckoGZTrbrCStiOoRygYIrWDyL uhbHgOjVTXSy9o5kh+A96J9Iu37mtoUOCy/nVAE3Lj4E1JJRE/Ne7ZCjo0/5VZcX21IlRVn93VC HarY3dibsDBsxtVv0fYQdz3o0WeU1oN+PrCBst83DdjVqeQo96cL95ZX5KYkjwGqrJNzl12f+AE CyCCPclZGX X-Received: by 2002:a05:7301:290a:b0:2be:6f30:fa7c with SMTP id 5a478bee46e88-2c109755a09mr5406593eec.16.1774271754585; Mon, 23 Mar 2026 06:15:54 -0700 (PDT) X-Received: by 2002:a05:7301:290a:b0:2be:6f30:fa7c with SMTP id 5a478bee46e88-2c109755a09mr5406551eec.16.1774271753697; Mon, 23 Mar 2026 06:15:53 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH 02/13] target/hexagon: fix incorrect/too-permissive HVX encodings Date: Mon, 23 Mar 2026 06:15:38 -0700 Message-Id: X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 66sN7EzMRAnO0YD0YTPEhcJEykHJzyzH X-Authority-Analysis: v=2.4 cv=Q63fIo2a c=1 sm=1 tr=0 ts=69c13d0c cx=c_pps a=Uww141gWH0fZj/3QKPojxA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=LtKSMYrkcOpncNoavBoA:9 a=PxkB5W3o20Ba91AHUih5:22 X-Proofpoint-ORIG-GUID: 66sN7EzMRAnO0YD0YTPEhcJEykHJzyzH X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfX2o2/5C7g2nTF RbSD18YX+vp3nMWI2+W7xY4Eu4o6Fiui8bIaIgiiRJiLw/++X/F0tPAsTzJdGYICew5SabjxVsu RC9nsHYkYx6jdvVcU/RkwqXyL0UV21PAFbFD9+ySVlTmZw8ShB4McJ8qecpwKSD7aCHwCFN6o9I IGut6u++tu2fWL/uVWzZg4m7v1+3ddnxcxSitAvnaqZE/d84AIldio/0QTrPfff6uL+xnzZeCpN ldUXBJyDqd+PCZEGukOSTS/cZtwg3HtDeqNSNk2O4ykpE0fU66VQPuKegppHq/QmQdPLotrNYQ/ dEolAd0LkZuxiQN0hDI8GFK4co6enxAgG1vPkzJamDnT3jJ913bQyqhFAv8wX6Z5PEFvRF8px89 AGlJ9aVf+lcCF1GYJg+Mf6V49BG/Nxxl5Tl7/xgr51qidh9WjSFMUq1RsHNMZPYm07tRQ55Il8K TqPDee0Ytn5CDZVmsDw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 priorityscore=1501 bulkscore=0 spamscore=0 malwarescore=0 adultscore=0 phishscore=0 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271803413154100 Content-Type: text/plain; charset="utf-8" The following encodings have become stricter since v68: - V6_vunpackob, V6_vunpackoh: ---00 -> --000 - V6_vaddbq/hq/wq, V6_vaddbnq/hnq/wnq: ---01 -> --001 - V6_vsubbq/hq, V6_vsubwq/bnq/hnq/wnq: ---01/---10 -> --001/--010 - V6_vhist, V6_vwhist128/256, V6_vwhist128/256_sat: ---00 -> --000 - V6_vhistq, V6_vwhist128/256q, V6_vwhist128/256q_sat: ---10 -> --010 Pre v68 compilers, by default, already use "0" for the non-specified bit that changed in v68, so unless someone is manually writing the binary encoding, this should not cause any backwards incompatibility with pre-v68 binaries. Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Taylor Simpson --- target/hexagon/imported/mmvec/encode_ext.def | 48 ++++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 402438f566..6d70086b5f 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -647,36 +647,36 @@ DEF_ENC(V6_vsubububb_sat, ICLASS_CJ" 1 110 101 vvv= vv PP 0 uuuuu 101 ddddd") DEF_ENC(V6_vmpyewuh_64, ICLASS_CJ" 1 110 101 vvvvv PP 0 uuuuu 110 d= dddd") =20 DEF_FIELDROW_DESC32( ICLASS_CJ" 1 110 --0 ----- PP 1 ----- ----- --= -","Vx32=3DVu32") -DEF_ENC(V6_vunpackob, ICLASS_CJ" 1 110 --0 ---00 PP 1 uuuuu 000 xx= xxx") // -DEF_ENC(V6_vunpackoh, ICLASS_CJ" 1 110 --0 ---00 PP 1 uuuuu 001 xx= xxx") // +DEF_ENC(V6_vunpackob, ICLASS_CJ" 1 110 --0 --000 PP 1 uuuuu 000 xx= xxx") // +DEF_ENC(V6_vunpackoh, ICLASS_CJ" 1 110 --0 --000 PP 1 uuuuu 001 xx= xxx") // //DEF_ENC(V6_vunpackow, ICLASS_CJ" 1 110 --0 ---00 PP 1 uuuuu 010 xxxx= x") // =20 -DEF_ENC(V6_vhist, ICLASS_CJ" 1 110 --0 ---00 PP 1 -000- 100 ---= --") -DEF_ENC(V6_vwhist256, ICLASS_CJ" 1 110 --0 ---00 PP 1 -0010 100 ---= --") -DEF_ENC(V6_vwhist256_sat, ICLASS_CJ" 1 110 --0 ---00 PP 1 -0011 100 ---= --") -DEF_ENC(V6_vwhist128, ICLASS_CJ" 1 110 --0 ---00 PP 1 -010- 100 ---= --") -DEF_ENC(V6_vwhist128m, ICLASS_CJ" 1 110 --0 ---00 PP 1 -011i 100 --= ---") +DEF_ENC(V6_vhist, ICLASS_CJ" 1 110 --0 --000 PP 1 -000- 100 ---= --") +DEF_ENC(V6_vwhist256, ICLASS_CJ" 1 110 --0 --000 PP 1 -0010 100 ---= --") +DEF_ENC(V6_vwhist256_sat, ICLASS_CJ" 1 110 --0 --000 PP 1 -0011 100 ---= --") +DEF_ENC(V6_vwhist128, ICLASS_CJ" 1 110 --0 --000 PP 1 -010- 100 ---= --") +DEF_ENC(V6_vwhist128m, ICLASS_CJ" 1 110 --0 --000 PP 1 -011i 100 --= ---") =20 DEF_FIELDROW_DESC32( ICLASS_CJ" 1 110 --0 ----- PP 1 ----- ----- --= -","if (Qv4) Vx32=3DVu32") -DEF_ENC(V6_vaddbq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 000 x= xxxx") // -DEF_ENC(V6_vaddhq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 001 x= xxxx") // -DEF_ENC(V6_vaddwq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 010 x= xxxx") // -DEF_ENC(V6_vaddbnq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 011 xxxx= x") // -DEF_ENC(V6_vaddhnq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 100 xxxx= x") // -DEF_ENC(V6_vaddwnq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 101 xxxx= x") // -DEF_ENC(V6_vsubbq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 110 x= xxxx") // -DEF_ENC(V6_vsubhq, ICLASS_CJ" 1 110 vv0 ---01 PP 1 uuuuu 111 x= xxxx") // +DEF_ENC(V6_vaddbq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 000 x= xxxx") // +DEF_ENC(V6_vaddhq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 001 x= xxxx") // +DEF_ENC(V6_vaddwq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 010 x= xxxx") // +DEF_ENC(V6_vaddbnq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 011 xxxx= x") // +DEF_ENC(V6_vaddhnq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 100 xxxx= x") // +DEF_ENC(V6_vaddwnq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 101 xxxx= x") // +DEF_ENC(V6_vsubbq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 110 x= xxxx") // +DEF_ENC(V6_vsubhq, ICLASS_CJ" 1 110 vv0 --001 PP 1 uuuuu 111 x= xxxx") // =20 -DEF_ENC(V6_vsubwq, ICLASS_CJ" 1 110 vv0 ---10 PP 1 uuuuu 000 x= xxxx") // -DEF_ENC(V6_vsubbnq, ICLASS_CJ" 1 110 vv0 ---10 PP 1 uuuuu 001 xxxx= x") // -DEF_ENC(V6_vsubhnq, ICLASS_CJ" 1 110 vv0 ---10 PP 1 uuuuu 010 xxxx= x") // -DEF_ENC(V6_vsubwnq, ICLASS_CJ" 1 110 vv0 ---10 PP 1 uuuuu 011 xxxx= x") // +DEF_ENC(V6_vsubwq, ICLASS_CJ" 1 110 vv0 --010 PP 1 uuuuu 000 x= xxxx") // +DEF_ENC(V6_vsubbnq, ICLASS_CJ" 1 110 vv0 --010 PP 1 uuuuu 001 xxxx= x") // +DEF_ENC(V6_vsubhnq, ICLASS_CJ" 1 110 vv0 --010 PP 1 uuuuu 010 xxxx= x") // +DEF_ENC(V6_vsubwnq, ICLASS_CJ" 1 110 vv0 --010 PP 1 uuuuu 011 xxxx= x") // =20 -DEF_ENC(V6_vhistq, ICLASS_CJ" 1 110 vv0 ---10 PP 1 --00- 100 --= ---") -DEF_ENC(V6_vwhist256q, ICLASS_CJ" 1 110 vv0 ---10 PP 1 --010 100 --= ---") -DEF_ENC(V6_vwhist256q_sat, ICLASS_CJ" 1 110 vv0 ---10 PP 1 --011 100 --= ---") -DEF_ENC(V6_vwhist128q, ICLASS_CJ" 1 110 vv0 ---10 PP 1 --10- 100 --= ---") -DEF_ENC(V6_vwhist128qm, ICLASS_CJ" 1 110 vv0 ---10 PP 1 --11i 100 -= ----") +DEF_ENC(V6_vhistq, ICLASS_CJ" 1 110 vv0 --010 PP 1 --00- 100 --= ---") +DEF_ENC(V6_vwhist256q, ICLASS_CJ" 1 110 vv0 --010 PP 1 --010 100 --= ---") +DEF_ENC(V6_vwhist256q_sat, ICLASS_CJ" 1 110 vv0 --010 PP 1 --011 100 --= ---") +DEF_ENC(V6_vwhist128q, ICLASS_CJ" 1 110 vv0 --010 PP 1 --10- 100 --= ---") +DEF_ENC(V6_vwhist128qm, ICLASS_CJ" 1 110 vv0 --010 PP 1 --11i 100 -= ----") =20 =20 DEF_ENC(V6_vandvqv, ICLASS_CJ" 1 110 vv0 ---11 PP 1 uuuuu 000 d= dddd") --=20 2.37.2 From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271857; cv=none; d=zohomail.com; s=zohoarc; b=Ld4DWLG/VmU8N83uBq00Rjly3kvpBbFfGYbjpUPATUHjdZCiF47ARuRwWvelVKOurOjCkJpLaIeJw1baN/meqgATJIOegFHOEMWA1yRllxfB+DaKGu7CbKQjm1PM7DJaPyx4buyFjzPoIrfAn6GAon93kMNtOv2kNoqiuwX35/Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271857; 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=+9uNrFY6zGkSuG/XbKlv8ybDbu8GutyHUVFX3MoK7RA=; b=Y4NnnUVG0qVuDPk72xrzYj68kG350NjgvvaIidj+7aBXEUMt7YS56jKUkiKZ0XulzlGXlSBUD8PtZQdMnT2iwulwbEhCPjE/n79V5X57hlhM8j0hfXDykSCzf3TI6hCa1vKuCyX5hsOEd378z8DikdOIMH+XpexrOxLIEDMOIJ8= 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 177427185795736.89523389244869; Mon, 23 Mar 2026 06:17:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f8U-0000El-H9; Mon, 23 Mar 2026 09:16:02 -0400 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 1w4f8R-0000E3-PT for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:15:59 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8P-0000L3-Kw for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:15:59 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NC28UT3042065 for ; Mon, 23 Mar 2026 13:15:56 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d355w07h9-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:15:56 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-2bdc1b30ac8so5993663eec.1 for ; Mon, 23 Mar 2026 06:15:56 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.15.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:15:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=+9uNrFY6zGk SuG/XbKlv8ybDbu8GutyHUVFX3MoK7RA=; b=V8svCJz/CnWCXg47qIRzsD1PBV9 cRLGsOGku5QAbWvw9ME8asTo/8Vf8vQw0IyVNq5cQgsLNopCRB3V4f9rlbNijZpx 8n9OPexN6M+DT8kmjaBX8kSO07qtOzaAxvkR0nQ35bogeseTkJkRKM66WpM5Jjec 9j9NMykh7j6i3slcIM3hUPq6w4auB2b6Aa0g1ndHMp3F0o6lSWpktcqlGE1NpLG+ N0U+bNVOCr6908rZfIA8cfMLFBLDsgKOpnrvp58Eb/Zsv9oj03MgQILfnk3DKcQL 9/mVfABh2l2RtvzpQNV78XbRk9Sq5vmyurbh6QmlCwkxAIWXzSUKcClw1+g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271756; x=1774876556; 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=+9uNrFY6zGkSuG/XbKlv8ybDbu8GutyHUVFX3MoK7RA=; b=MpZ/fQdg7xGDshic6NRef1NZdAId/EwFYicA706sn0WhmTn5Vjbc+O2JTbiCX+WLm2 zBVufbj2FgzdsQI/JAXb2ZZ5fhnP3X1sFuOEduLoaVDTV0qsBxvvV+Tvhfobpky/oEAE V03QboZ5FYtZgwg4c8Qq+q96mga6OaqajYhR1QlxY9VRzR+KHaOWxNmvce1gasKwK1Ld /o/v8LRdPFQosflUkJTRTfZGUjRfiwu9LOWn9tSSXjLUla+/+nuYNPff0fm36EbdQmYX moq/RPsQQqPxZ6pob3uZbq4xnxHJ21us1oUIQIf7NFcdikneiBANQX2OZxsIz3QMCUBt lM9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271756; x=1774876556; 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=+9uNrFY6zGkSuG/XbKlv8ybDbu8GutyHUVFX3MoK7RA=; b=jJvWdtsopDjwMtdKZvGp3f5Nj5crlp0rQLTRE+i3YvQVui0ZxsPQOGk4IIgEKAruXh puPEGPt5HcK5lWZRQmEI0QXFvJjcgZstV3p51gaycdTYb89czJiM3Y5zgXgcMee3flxX brrcbaoR4ZJWPefVEfUSMBjV78lNObfr4tdgbw081bZ1tH+UURleNLET1ItsrJgSxKdQ 3opYRDREp+KKdxPTx/WSoSQvID/xJsT2rwF2EFVRp6+yMK4mmBJ0UznqT74GU3aATGYH adKp+iYAvnS0uIboIawfohPi/No7ey5OXXfd1su/R1orzlvLtBuIIv/d6P5ppbIH1cSc W8rw== X-Gm-Message-State: AOJu0YyC8xre6oy+1HsHOrYSpk88jS/KQ8SfacdrSpIEn0LptirTFbOJ zpixV94DiPaE5GcTuPUmenulwYck3l5XoTyQbPHElDqBAz65lZ4HBkDK5egSeuEBtOH2sAqiIU4 /rTp45GyNtiY/ieyjdQJpGAx3T6LXIlc/As3kj1j0HEqKlRepJsHmKE7qdWQZpUubc4xa X-Gm-Gg: ATEYQzza0tAg9+LZQ8z1zYsZskw2TmgUcVpCx6bJfai6OlfGuOag76ywUaKNad9jiHb 8NKravh/7n0a/KQB6H6W8SH64709pSezmykqbEIHHKNLeQpOvvPeZNk2pTJ3K5eQEkTMaDi5w6T ZhfvKi6VVGXl7VobGm9HYirbIfpuARaRMAcTwdysId55nJ2qxo72zTJCEOq5EuKE8z58YosACw3 0aTKiyNHy9LzjsfWy00RSxYeZS1ih5VAb8+k+S89EXrTHcLDXFd5XDbE3uLgMS0KsmkzQWZEv1g TCxB80f1WM0VNpW0tx6Wg/ODQmnPNODW6TNMcACbZSgQH+yaW7PjrqxuQB8vLbIw403IJ6oOoPa k9HHysyi0xG8lHuaO6yYbEKCzPWgLeqdX7Eek3WY0t6CmAmtVlSZolq4oRJUZVoZCgNhS9ch8ov DoP2YZ6t2E X-Received: by 2002:a05:693c:300f:b0:2be:837d:cc4d with SMTP id 5a478bee46e88-2c109579f0bmr5949747eec.5.1774271755299; Mon, 23 Mar 2026 06:15:55 -0700 (PDT) X-Received: by 2002:a05:693c:300f:b0:2be:837d:cc4d with SMTP id 5a478bee46e88-2c109579f0bmr5949724eec.5.1774271754553; Mon, 23 Mar 2026 06:15:54 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH 03/13] target/hexagon/cpu: add HVX IEEE FP extension Date: Mon, 23 Mar 2026 06:15:39 -0700 Message-Id: <4f6bd77ba6c6c07c8796e805ce6e50539bde260e.1774271525.git.matheus.bernardino@oss.qualcomm.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=fq7RpV4f c=1 sm=1 tr=0 ts=69c13d0c cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=kpEvSfgP-Ez5Y9dk4oUA:9 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-ORIG-GUID: TMAkN1c1-tMKCM9pgDApnbIdCAgB0ErP X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfX7ygD8+sT9Mv/ HAOnERkJvvHaeanRaHzbLIBWVYtVr0dabYJPGWfInapGpS7QX56P/BQxQ2yVhS6LAVRu4/xMvWn ygHJlneGCj/3rb03sQOezijTPTXtWULPq8ZnOyPH0SOesrZeEsga2XWV3wPrIBiqLmt1IflPAZd q1xAiwAcgbj/GYnUu1hCHk3xtbTkSbbS4/0uG2OCntVM/w0k0InVOQbAo7UbLWZS2Oh80U/VR+W 4oLQp3BWotBUnkUSxI+mLsSkG43l/ZTCWX0dVSzuDIhPHKC/yMIBXFO4hZ4Zm48YkznVJCr5p07 7WAkjy4Dx423qbe/qlVETHnsv3XSunkaqdnfUX91v3joQcSAZtx8p5HvGyvXZ+sNI7CvLInTFsy CrqyOM5KyQl+hZI9A6e8MZzv8i7cTPyTs3ALb77IVUN51ZCuuW2HOx0u5PmzOEkPX4b3+a6bOGK 7MqGFvLz3nvPC380Tgg== X-Proofpoint-GUID: TMAkN1c1-tMKCM9pgDApnbIdCAgB0ErP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 adultscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271860111154100 Content-Type: text/plain; charset="utf-8" This flag will be used to control the HVX IEEE float instructions, which are only available at some Hexagon cores. When unavailable, the instruction is essentially treated as a no-op. Signed-off-by: Matheus Tavares Bernardino --- target/hexagon/cpu.h | 1 + target/hexagon/translate.h | 1 + target/hexagon/attribs_def.h.inc | 3 +++ target/hexagon/cpu.c | 1 + target/hexagon/decode.c | 22 ++++++++++++++++++++++ target/hexagon/translate.c | 1 + 6 files changed, 29 insertions(+) diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h index 85afd59277..77822a48b6 100644 --- a/target/hexagon/cpu.h +++ b/target/hexagon/cpu.h @@ -127,6 +127,7 @@ struct ArchCPU { bool lldb_compat; target_ulong lldb_stack_adjust; bool short_circuit; + bool ieee_fp_extension; }; =20 #include "cpu_bits.h" diff --git a/target/hexagon/translate.h b/target/hexagon/translate.h index b37cb49238..516aab7038 100644 --- a/target/hexagon/translate.h +++ b/target/hexagon/translate.h @@ -70,6 +70,7 @@ typedef struct DisasContext { target_ulong branch_dest; bool is_tight_loop; bool short_circuit; + bool ieee_fp_extension; bool read_after_write; bool has_hvx_overlap; TCGv new_value[TOTAL_PER_THREAD_REGS]; diff --git a/target/hexagon/attribs_def.h.inc b/target/hexagon/attribs_def.= h.inc index 9e3a05f882..c85cd5d17c 100644 --- a/target/hexagon/attribs_def.h.inc +++ b/target/hexagon/attribs_def.h.inc @@ -173,5 +173,8 @@ DEF_ATTRIB(NOTE_SHIFT_RESOURCE, "Uses the HVX shift res= ource.", "", "") DEF_ATTRIB(RESTRICT_NOSLOT1_STORE, "Packet must not have slot 1 store", ""= , "") DEF_ATTRIB(RESTRICT_LATEPRED, "Predicate can not be used as a .new.", "", = "") =20 +/* HVX IEEE FP extension attributes */ +DEF_ATTRIB(HVX_IEEE_FP, "HVX IEEE FP extension instruction", "", "") + /* Keep this as the last attribute: */ DEF_ATTRIB(ZZ_LASTATTRIB, "Last attribute in the file", "", "") diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index ffd14bb467..8b72a5d3c8 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -54,6 +54,7 @@ static const Property hexagon_cpu_properties[] =3D { DEFINE_PROP_UNSIGNED("lldb-stack-adjust", HexagonCPU, lldb_stack_adjus= t, 0, qdev_prop_uint32, target_ulong), DEFINE_PROP_BOOL("short-circuit", HexagonCPU, short_circuit, true), + DEFINE_PROP_BOOL("ieee-fp", HexagonCPU, ieee_fp_extension, true), }; =20 const char * const hexagon_regnames[TOTAL_PER_THREAD_REGS] =3D { diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c index dbc9c630e8..d832a64a17 100644 --- a/target/hexagon/decode.c +++ b/target/hexagon/decode.c @@ -696,6 +696,18 @@ static bool pkt_has_write_conflict(Packet *pkt) return !bitmap_empty(conflict, 32); } =20 +static void convert_to_nop(Insn *insn) +{ + bool is_endloop =3D insn->is_endloop; + memset(insn, 0, sizeof(*insn)); + insn->opcode =3D A2_nop; + insn->new_read_idx =3D -1; + insn->dest_idx =3D -1; + insn->generate =3D opcode_genptr[insn->opcode]; + insn->iclass =3D 0b111; + insn->is_endloop =3D is_endloop; +} + /* * decode_packet * Decodes packet with given words @@ -746,6 +758,16 @@ int decode_packet(DisasContext *ctx, int max_words, co= nst uint32_t *words, /* Ran out of words! */ return 0; } + + /* Disable HVX IEEE instruction if extension is disabled. */ + if (!ctx->ieee_fp_extension) { + for (i =3D 0; i < num_insns; i++) { + if (GET_ATTRIB(pkt->insn[i].opcode, A_HVX_IEEE_FP)) { + convert_to_nop(&pkt->insn[i]); + } + } + } + pkt->encod_pkt_size_in_bytes =3D words_read * 4; pkt->pkt_has_hvx =3D false; for (i =3D 0; i < num_insns; i++) { diff --git a/target/hexagon/translate.c b/target/hexagon/translate.c index 8a223f6e13..9f8104f949 100644 --- a/target/hexagon/translate.c +++ b/target/hexagon/translate.c @@ -988,6 +988,7 @@ static void hexagon_tr_init_disas_context(DisasContextB= ase *dcbase, ctx->branch_cond =3D TCG_COND_NEVER; ctx->is_tight_loop =3D FIELD_EX32(hex_flags, TB_FLAGS, IS_TIGHT_LOOP); ctx->short_circuit =3D hex_cpu->short_circuit; + ctx->ieee_fp_extension =3D hex_cpu->ieee_fp_extension; } =20 static void hexagon_tr_tb_start(DisasContextBase *db, CPUState *cpu) --=20 2.37.2 From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271852; cv=none; d=zohomail.com; s=zohoarc; b=CuYPc81Q2sO6F2Z6HlYPYtHN5D+7pgEep10PmFlJyZiTkf6xrCScXHyZX9GOy4FJrNPJYk+U+B5LF8/zvEtOXSQaIAJZpWFQnLsZC+U1Lrw+p9kRQi8Vd8TDSkwesFYp9Rvf2euDmONjzj6TLKjDwZZTQOCkzkqtH6/YaEF/R1c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271852; 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=xszGSmvQU2266Tq2RhuqXAqX3U6gLi/3258I/JkWnZY=; b=joFrQm/arBfZt1lpDrGob8MhVsTTfK9+syJfOCJBCZ1FyT9F2OJIbrQwnCjZYqYZp6t51VhKqyPtt3yJF6vc93IQ8Hi9vsQ4nFqUnAyV3MJfWBZG5axyLuT3KracjABMiaNt94tcok70Nc2Q7ah5xCO3nMNtXwTsVcJpjU8FNJA= 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 1774271852370166.82550269769115; Mon, 23 Mar 2026 06:17:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f8a-0000GI-5y; Mon, 23 Mar 2026 09:16:08 -0400 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 1w4f8U-0000Ej-CE for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:02 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8R-0000LU-QD for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:02 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NC2FBW3042310 for ; Mon, 23 Mar 2026 13:15:58 GMT Received: from mail-dy1-f199.google.com (mail-dy1-f199.google.com [74.125.82.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d355w07hc-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:15:57 +0000 (GMT) Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-2c109ba1296so11016733eec.1 for ; Mon, 23 Mar 2026 06:15:57 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.15.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:15:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=xszGSmvQU22 66Tq2RhuqXAqX3U6gLi/3258I/JkWnZY=; b=FSsupUqh8GpniWa+JN67vYD09gq w7ArXCAi9/sAsTu7Q3H73g6hfohCl1a71e2YAlSCT9fInwH58KswqgFPzx9YXRNw o6yX/OQOjfH3NB+STKY+f2cbY2mmZpY41GsB8Uh5Rye+zKjCzE6TvVj8EVBo4pVf /LxAVq9VAC5kfe4aZdICHT5bErPqklZ0fivTTOe5aadHITfYmqBMuSHbEIu3o6y2 2GF3pZBfFhAgwiiO827R+ZoGZE30+SyhSXFItRlAJXGtcyoe8siRaIpNDYRQDAAP e73vN8jQEFcUbS/guvE1QSz4cqWAToyYfb/a/fOz0a/tPtlirtY25TcJAjw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271756; x=1774876556; 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=xszGSmvQU2266Tq2RhuqXAqX3U6gLi/3258I/JkWnZY=; b=DwnHhria4vJtYeD4Wf6JI2+JDpp0YwjJM2/3LqCCbyaSAxFB9Y3ygsgqI/CEkQj2Ut arAHbM6MSGI8qi+9AEVEG0b+PUz5cUCAg51FOWQlEyP1gD6f7fxdv3VARd6KeiiVrlVg 1KzzDyBGj89HV38IkPow1B3xwsESWt3rwGwzqxfpErWf91NOOlPIul4bSAsZZqhMKABr xj9QLzH9aY67SF2dE1axfRBm2Z2IXso7q7hdVvXaXlZEqSNZrVSJptgoGgXC+zmL1ozd IrBFPEZ/luhfirbx8a5BROQEGDwFdeHVfIrOVqpAJLm22lDUs9rxQRbmK48bqt9XnFY6 L+CQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271756; x=1774876556; 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=xszGSmvQU2266Tq2RhuqXAqX3U6gLi/3258I/JkWnZY=; b=OEFJVio6zimHMEcJUHIqkLFgUX0gxBa5oQfQlGaZxNkuqPy6+CPS7XMYrWp7OwtC3+ 7NQzuQYMmGITkYS1/qKtvCsbWzfTHfDPCmXHuKk2XAzx6nqdM9JQNkjZFpqjzoLr54wt sKICqLw7g+MHmSjMLclrLxW4wZG7M4RyZJqR6Li1YTRwGKlcvnK5j8sG0bwjkSCMrcaQ PAAiymV/F27obTK3hnWPxXKLGC+ZRcuFDsJSUx9i3yw268QA/+PqEGp7pumcP6mzzD2u wbyKMCXjGFujmvo9qrGI1qs7I7Ui7EETnIo1vR/E0hK11TVjxlvSyVGGQvsaDF8qrheO Yc4g== X-Gm-Message-State: AOJu0YxtTi/9wmNTffrqvSpcQpcNzSymyvMYyZxW+dqV9WSJ2iClVgKc sKjqwH54IkkmjLKNLxkYKQJP1gPqPhikGSnYr4pY0FL6Nt/EPRJXdFMs3swYEOGKej7MvhrckR9 w71CbIjpvxqyo02VYuSd7Aq+F1QmoqvfDEb9qot1KA65LG2hORw76JmOJ9vhgWe+XWkJ9 X-Gm-Gg: ATEYQzy34hf4uQnnyf7i0kIkuSKsg3lHVEBqPdlMjsZ6GzpOuAg2MqaNJrumgd6OYIX OmSwl0sfgwzx0uVPedK8/gzRQFpeaEr7+PTc3mX42m29AU8WNhN+c7CB4rk3/PmGqzOZ000A1U/ YNj1kgrU47qdh8Z+54YzmoioO17ZQrDx/eH+5fZE0elXiA1c17C5AnIODRlu9LxYqIN5uw9P7yZ 5OVudYScfsc6amK+dyVQzmz2BS0RMaznjpT80xaYrQ4x8aQm2lLXtJJ025KF9DVKx6nfPAhDeX3 2bG/uLEqzbSUFH7ZPfyiV9rL6kckRaWMsFi4vJRoMn4BUAx5m+1E4rO62KOg7Q3kIXGxSdKlWAQ 1D1e/YSPiYGQAIuK1kNfSUhEMg8yP7B4MFSQArWAc+Gwjif3FF6g5lPDYW6t6RZMWBpyCEyzWhC 07MZ+d1Lx7 X-Received: by 2002:a05:7300:7496:b0:2be:e92:7f33 with SMTP id 5a478bee46e88-2c1097ecb50mr7361206eec.35.1774271756203; Mon, 23 Mar 2026 06:15:56 -0700 (PDT) X-Received: by 2002:a05:7300:7496:b0:2be:e92:7f33 with SMTP id 5a478bee46e88-2c1097ecb50mr7361177eec.35.1774271755453; Mon, 23 Mar 2026 06:15:55 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH 04/13] target/hexagon: add v68 HVX IEEE float arithmetic insns Date: Mon, 23 Mar 2026 06:15:40 -0700 Message-Id: <831949008a7266559a6f313f99a394cd68cc9846.1774271525.git.matheus.bernardino@oss.qualcomm.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=fq7RpV4f c=1 sm=1 tr=0 ts=69c13d0d cx=c_pps a=cFYjgdjTJScbgFmBucgdfQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=jpBV4qzoUt2RcIzicscA:9 a=scEy_gLbYbu1JhEsrz4S:22 X-Proofpoint-ORIG-GUID: 6OBPI2fM4fIm8JDEMuNuSxIStz7pZpGp X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfX3gJJeWzD3i/6 MWAUqQH1dxcoZWNvLdEvoEA1wpallNXOajDrVAc+D4BlUwvh99S0YtcHBIi3GtS6gYw/1ePK6tq CwJXzvNOQLDsZ+sDgenoUZC5HRhzMcAhujP3EK+N0o3B9d+OywYVpLnrmYZ7kk1nlUnEkiiu/w0 q/7WqCH1QzKCES1yS4bc9bD4rZyv7vnTl5c7kUao3tTheKJxKKB51iAs8vpzq7Q6Hf/sm+9Cz59 QMcUqjiMPL7X/lXyP1JrO8csEK1xdMKlA8jjMwVwYZ7+QnK4MyZ8/IXfUGmPsciHUtdAFsjttme Vuj/hN69h3mxtLxClWCZdKZCNzjoRf/ocli5xbxqdw1opqEURBU3GePsuxVvLATCTgCnSuzXEyO rT6o+H21fcZeiVmfpn4EMhwaJHHH75/3YN4Z6i5emyG8gtHSmq+vGwCoi1S6QjtQBi0IldkcsTu S7pQYqWJJQXeQ9zqPTw== X-Proofpoint-GUID: 6OBPI2fM4fIm8JDEMuNuSxIStz7pZpGp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 adultscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271854146158500 Content-Type: text/plain; charset="utf-8" Add HVX IEEE floating-point arithmetic instructions: - vmpy_sf_sf, vmpy_sf_hf, vmpy_hf_hf: multiply operations - vdmpy_sf_hf: dot-product multiply - vmpy_sf_hf_acc, vmpy_hf_hf_acc, vdmpy_sf_hf_acc: multiply-accumulate - vadd_sf_sf, vsub_sf_sf, vadd_sf_hf, vsub_sf_hf: add/sub with sf output - vadd_hf_hf, vsub_hf_hf: add/sub with hf output Signed-off-by: Matheus Tavares Bernardino --- target/hexagon/mmvec/kvx_ieee.h | 47 ++++++++++ target/hexagon/mmvec/macros.h | 1 + target/hexagon/mmvec/mmvec.h | 2 + target/hexagon/attribs_def.h.inc | 4 + target/hexagon/mmvec/kvx_ieee.c | 87 ++++++++++++++++++ target/hexagon/hex_common.py | 1 + target/hexagon/imported/mmvec/encode_ext.def | 18 ++++ target/hexagon/imported/mmvec/ext.idef | 93 ++++++++++++++++++++ target/hexagon/meson.build | 1 + 9 files changed, 254 insertions(+) create mode 100644 target/hexagon/mmvec/kvx_ieee.h create mode 100644 target/hexagon/mmvec/kvx_ieee.c diff --git a/target/hexagon/mmvec/kvx_ieee.h b/target/hexagon/mmvec/kvx_iee= e.h new file mode 100644 index 0000000000..e92ddebeb9 --- /dev/null +++ b/target/hexagon/mmvec/kvx_ieee.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HEXAGON_KVX_IEEE_H +#define HEXAGON_KVX_IEEE_H + +#include "fpu/softfloat.h" + +/* Hexagon canonical NaN */ +#define FP32_DEF_NAN 0x7FFFFFFF +#define FP16_DEF_NAN 0x7FFF + +/* + * IEEE - FP ADD/SUB/MPY instructions + */ +uint32_t fp_mult_sf_sf(uint32_t a1, uint32_t a2, float_status *fp_status); +uint32_t fp_add_sf_sf(uint32_t a1, uint32_t a2, float_status *fp_status); +uint32_t fp_sub_sf_sf(uint32_t a1, uint32_t a2, float_status *fp_status); + +uint16_t fp_mult_hf_hf(uint16_t a1, uint16_t a2, float_status *fp_status); +uint16_t fp_add_hf_hf(uint16_t a1, uint16_t a2, float_status *fp_status); +uint16_t fp_sub_hf_hf(uint16_t a1, uint16_t a2, float_status *fp_status); + +uint32_t fp_mult_sf_hf(uint16_t a1, uint16_t a2, float_status *fp_status); +uint32_t fp_add_sf_hf(uint16_t a1, uint16_t a2, float_status *fp_status); +uint32_t fp_sub_sf_hf(uint16_t a1, uint16_t a2, float_status *fp_status); + +/* + * IEEE - FP Accumulate instructions + */ +uint16_t fp_mult_hf_hf_acc(uint16_t a1, uint16_t a2, uint16_t acc, + float_status *fp_status); +uint32_t fp_mult_sf_hf_acc(uint16_t a1, uint16_t a2, uint32_t acc, + float_status *fp_status); + +/* + * IEEE - FP Reduce instructions + */ +uint32_t fp_vdmpy(uint16_t a1, uint16_t a2, uint16_t a3, uint16_t a4, + float_status *fp_status); +uint32_t fp_vdmpy_acc(uint32_t acc, uint16_t a1, uint16_t a2, uint16_t a3, + uint16_t a4, float_status *fp_status); + +#endif diff --git a/target/hexagon/mmvec/macros.h b/target/hexagon/mmvec/macros.h index c7840fbf2e..2af3d2d747 100644 --- a/target/hexagon/mmvec/macros.h +++ b/target/hexagon/mmvec/macros.h @@ -23,6 +23,7 @@ #include "mmvec/system_ext_mmvec.h" #include "accel/tcg/getpc.h" #include "accel/tcg/probe.h" +#include "mmvec/kvx_ieee.h" =20 #ifndef QEMU_GENERATE #define VdV (*(MMVector *restrict)(VdV_void)) diff --git a/target/hexagon/mmvec/mmvec.h b/target/hexagon/mmvec/mmvec.h index 52d470709c..eaedfe0d6d 100644 --- a/target/hexagon/mmvec/mmvec.h +++ b/target/hexagon/mmvec/mmvec.h @@ -38,6 +38,8 @@ typedef union { int16_t h[MAX_VEC_SIZE_BYTES / 2]; uint8_t ub[MAX_VEC_SIZE_BYTES / 1]; int8_t b[MAX_VEC_SIZE_BYTES / 1]; + int32_t sf[MAX_VEC_SIZE_BYTES / 4]; /* single float (32-bit) */ + int16_t hf[MAX_VEC_SIZE_BYTES / 2]; /* half float (16-bit) */ } MMVector; =20 typedef union { diff --git a/target/hexagon/attribs_def.h.inc b/target/hexagon/attribs_def.= h.inc index c85cd5d17c..d3c4bf6301 100644 --- a/target/hexagon/attribs_def.h.inc +++ b/target/hexagon/attribs_def.h.inc @@ -175,6 +175,10 @@ DEF_ATTRIB(RESTRICT_LATEPRED, "Predicate can not be us= ed as a .new.", "", "") =20 /* HVX IEEE FP extension attributes */ DEF_ATTRIB(HVX_IEEE_FP, "HVX IEEE FP extension instruction", "", "") +DEF_ATTRIB(HVX_IEEE_FP_ACC, "HVX IEEE FP accumulate instruction", "", "") +DEF_ATTRIB(HVX_IEEE_FP_OUT_16, "HVX IEEE FP 16-bit output", "", "") +DEF_ATTRIB(HVX_IEEE_FP_OUT_32, "HVX IEEE FP 32-bit output", "", "") +DEF_ATTRIB(CVI_VX_NO_TMP_LD, "HVX multiply without tmp load", "", "") =20 /* Keep this as the last attribute: */ DEF_ATTRIB(ZZ_LASTATTRIB, "Last attribute in the file", "", "") diff --git a/target/hexagon/mmvec/kvx_ieee.c b/target/hexagon/mmvec/kvx_iee= e.c new file mode 100644 index 0000000000..b763899aa3 --- /dev/null +++ b/target/hexagon/mmvec/kvx_ieee.c @@ -0,0 +1,87 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "kvx_ieee.h" + +#define DEF_FP_INSN_2(name, rt, a1t, a2t, op) \ + uint##rt##_t fp_##name(uint##a1t##_t a1, uint##a2t##_t a2, \ + float_status *fp_status) { \ + float##a1t f1 =3D make_float##a1t(a1); \ + float##a2t f2 =3D make_float##a2t(a2); \ + \ + if (float##a1t##_is_any_nan(f1) || float##a2t##_is_any_nan(f2)) { \ + return FP##rt##_DEF_NAN; \ + } \ + float##rt result =3D op; \ + \ + if (float##rt##_is_any_nan(result)) { \ + return FP##rt##_DEF_NAN; \ + } \ + return result; \ + } + +#define DEF_FP_INSN_3(name, rt, a1t, a2t, a3t, op) \ + uint##rt##_t fp_##name(uint##a1t##_t a1, uint##a2t##_t a2, \ + uint##a3t##_t a3, float_status *fp_status) { \ + float##a1t f1 =3D make_float##a1t(a1); \ + float##a2t f2 =3D make_float##a2t(a2); \ + float##a3t f3 =3D make_float##a3t(a3); \ + \ + if (float##a1t##_is_any_nan(f1) || float##a2t##_is_any_nan(f2) || \ + float##a3t##_is_any_nan(f3)) \ + return FP##rt##_DEF_NAN; \ + \ + float##rt result =3D op; \ + \ + if (float##rt##_is_any_nan(result)) \ + return FP##rt##_DEF_NAN; \ + return result; \ + } + +DEF_FP_INSN_2(mult_sf_sf, 32, 32, 32, float32_mul(f1, f2, fp_status)) +DEF_FP_INSN_2(add_sf_sf, 32, 32, 32, float32_add(f1, f2, fp_status)) +DEF_FP_INSN_2(sub_sf_sf, 32, 32, 32, float32_sub(f1, f2, fp_status)) + +DEF_FP_INSN_2(mult_hf_hf, 16, 16, 16, float16_mul(f1, f2, fp_status)) +DEF_FP_INSN_2(add_hf_hf, 16, 16, 16, float16_add(f1, f2, fp_status)) +DEF_FP_INSN_2(sub_hf_hf, 16, 16, 16, float16_sub(f1, f2, fp_status)) + +DEF_FP_INSN_2(mult_sf_hf, 32, 16, 16, + float32_mul(float16_to_float32(f1, true, fp_status), + float16_to_float32(f2, true, fp_status), + fp_status)) +DEF_FP_INSN_2(add_sf_hf, 32, 16, 16, + float32_add(float16_to_float32(f1, true, fp_status), + float16_to_float32(f2, true, fp_status), + fp_status)) +DEF_FP_INSN_2(sub_sf_hf, 32, 16, 16, + float32_sub(float16_to_float32(f1, true, fp_status), + float16_to_float32(f2, true, fp_status), + fp_status)) + +DEF_FP_INSN_3(mult_hf_hf_acc, 16, 16, 16, 16, + float16_muladd(f1, f2, f3, 0, fp_status)) +DEF_FP_INSN_3(mult_sf_hf_acc, 32, 16, 16, 32, + float32_muladd(float16_to_float32(f1, true, fp_status), + float16_to_float32(f2, true, fp_status), + f3, 0, fp_status)) + +uint32_t fp_vdmpy(uint16_t a1, uint16_t a2, uint16_t a3, uint16_t a4, + float_status *fp_status) +{ + float32 prod1 =3D fp_mult_sf_hf(a1, a3, fp_status); + float32 prod2 =3D fp_mult_sf_hf(a2, a4, fp_status); + return fp_add_sf_sf(float32_val(prod1), float32_val(prod2), fp_status); +} + +uint32_t fp_vdmpy_acc(uint32_t acc, uint16_t a1, uint16_t a2, + uint16_t a3, uint16_t a4, + float_status *fp_status) +{ + float32 red =3D fp_vdmpy(a1, a2, a3, a4, fp_status); + return fp_add_sf_sf(float32_val(red), acc, fp_status); +} diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py index c0e9f26aeb..f6a2848db1 100755 --- a/target/hexagon/hex_common.py +++ b/target/hexagon/hex_common.py @@ -215,6 +215,7 @@ def need_env(tag): "A_LOAD" in attribdict[tag] or "A_CVI_GATHER" in attribdict[tag] or "A_CVI_SCATTER" in attribdict[tag] or + "A_HVX_IEEE_FP" in attribdict[tag] or "A_IMPLICIT_WRITES_USR" in attribdict[tag]) =20 =20 diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 6d70086b5f..4ce87d09fd 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -804,5 +804,23 @@ DEF_ENC(V6_vmpyewuh, ICLASS_CJ" 1 111 111 vvvvv PP = 0 uuuuu 101 ddddd") DEF_ENC(V6_vmpyowh, ICLASS_CJ" 1 111 111 vvvvv PP 0 uuuuu 111 ddddd= ") DEF_ENC(V6_vmpyuhvs,"00011111110vvvvvPP1uuuuu111ddddd") =20 +/* IEEE FP multiply instructions */ +DEF_ENC(V6_vmpy_sf_sf,"00011111100vvvvvPP1uuuuu001ddddd") +DEF_ENC(V6_vmpy_sf_hf,"00011111100vvvvvPP1uuuuu010ddddd") +DEF_ENC(V6_vmpy_hf_hf,"00011111100vvvvvPP1uuuuu011ddddd") +DEF_ENC(V6_vdmpy_sf_hf,"00011111101vvvvvPP1uuuuu110ddddd") + +/* IEEE FP multiply-accumulate instructions */ +DEF_ENC(V6_vmpy_sf_hf_acc,"00011100010vvvvvPP1uuuuu001xxxxx") +DEF_ENC(V6_vmpy_hf_hf_acc,"00011100010vvvvvPP1uuuuu010xxxxx") +DEF_ENC(V6_vdmpy_sf_hf_acc,"00011100010vvvvvPP1uuuuu011xxxxx") + +/* IEEE FP add/sub instructions */ +DEF_ENC(V6_vadd_sf_sf,"00011111100vvvvvPP1uuuuu110ddddd") +DEF_ENC(V6_vsub_sf_sf,"00011111100vvvvvPP1uuuuu111ddddd") +DEF_ENC(V6_vadd_sf_hf,"00011111100vvvvvPP1uuuuu100ddddd") +DEF_ENC(V6_vsub_sf_hf,"00011111100vvvvvPP1uuuuu101ddddd") +DEF_ENC(V6_vadd_hf_hf,"00011111101vvvvvPP1uuuuu111ddddd") +DEF_ENC(V6_vsub_hf_hf,"00011111011vvvvvPP1uuuuu000ddddd") =20 #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index 03d31f6181..3f0d8e366e 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -2895,9 +2895,102 @@ EXTINSN(V6_vprefixqw,"Vd32.w=3Dprefixsum(Qv4)", A= TTRIBS(A_EXTENSION,A_CVI,A_CVI_ } } ) =20 +/* KVX - IEEE FP Instructions */ =20 +/* Single pipe, 32-bit output */ +#define ITERATOR_INSN_IEEE_FP_32(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_OUT_32), \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) =20 +/* Single pipe, 16-bit output */ +#define ITERATOR_INSN_IEEE_FP_16(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_OUT_16), \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) =20 +/* Two pipes: P2 & P3, single output: P2, 32-bit output */ +#define ITERATOR_INSN_IEEE_FP_DOUBLE_SINGLE_32(WIDTH,TAG,SYNTAX,DESCR,CODE= ) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX_DV,A_HVX_IEEE_FP_OUT_32),= \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* Two pipes: P2 & P3, two outputs, 32-bit output */ +#define ITERATOR_INSN_IEEE_FP_DOUBLE_32(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX_DV,A_HVX_IEEE_FP_OUT_32),= \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* + * single pipe, accumulate instruction, produces 16-bit output, requires 1= 6-bit + * accumulate input + */ +#define ITERATOR_INSN_IEEE_FP_ACC_16(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_ACC,A_HVX_I= EEE_FP_OUT_16,A_CVI_VX_NO_TMP_LD), \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* + * single pipe, accumulate instruction, produces 32-bit output, requires 3= 2-bit + * accumulate input + */ +#define ITERATOR_INSN_IEEE_FP_ACC_32(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_ACC,A_HVX_I= EEE_FP_OUT_32,A_CVI_VX_NO_TMP_LD), \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* IEEE FP multiply instructions */ +ITERATOR_INSN_IEEE_FP_DOUBLE_SINGLE_32(32, vmpy_sf_sf, + "Vd32.sf=3Dvmpy(Vu32.sf,Vv32.sf)", "Vector IEEE mul: sf", + VdV.sf[i] =3D fp_mult_sf_sf(VuV.sf[i], VvV.sf[i], &env->fp_status)) +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vmpy_sf_hf, + "Vdd32.sf=3Dvmpy(Vu32.hf,Vv32.hf)", "Vector IEEE mul: hf widen to sf", + VddV.v[0].sf[i] =3D fp_mult_sf_hf(VuV.hf[2*i], VvV.hf[2*i], &env->fp_s= tatus); + VddV.v[1].sf[i] =3D fp_mult_sf_hf(VuV.hf[2*i+1], VvV.hf[2*i+1], &env->= fp_status)) +ITERATOR_INSN_IEEE_FP_16(16, vmpy_hf_hf, "Vd32.hf=3Dvmpy(Vu32.hf,Vv32.= hf)", + "Vector IEEE mul: hf", + VdV.hf[i] =3D fp_mult_hf_hf(VuV.hf[i], VvV.hf[i], &env->fp_status)) +ITERATOR_INSN_IEEE_FP_32(32, vdmpy_sf_hf, "Vd32.sf=3Dvdmpy(Vu32.hf,Vv3= 2.hf)", + "Vector IEEE mul reduction: hf widen to sf", + VdV.sf[i] =3D fp_vdmpy(VuV.hf[2*i+1], VuV.hf[2*i], VvV.hf[2*i+1], + VvV.hf[2*i], &env->fp_status)) + +/* IEEE FP multiply-accumulate instructions */ +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vmpy_sf_hf_acc, + "Vxx32.sf+=3Dvmpy(Vu32.hf,Vv32.hf)", "Vector IEEE fma: hf widen to sf", + VxxV.v[0].sf[i] =3D fp_mult_sf_hf_acc(VuV.hf[2*i], VvV.hf[2*i], + VxxV.v[0].sf[i], &env->fp_status); + VxxV.v[1].sf[i] =3D fp_mult_sf_hf_acc(VuV.hf[2*i+1], VvV.hf[2*i+1], + VxxV.v[1].sf[i], &env->fp_status)) +ITERATOR_INSN_IEEE_FP_ACC_16(16, vmpy_hf_hf_acc, + "Vx32.hf+=3Dvmpy(Vu32.hf,Vv32.hf)", "Vector IEEE fma: hf", + VxV.hf[i] =3D fp_mult_hf_hf_acc(VuV.hf[i], VvV.hf[i], VxV.hf[i], &env-= >fp_status)) +ITERATOR_INSN_IEEE_FP_ACC_32(32, vdmpy_sf_hf_acc, + "Vx32.sf+=3Dvdmpy(Vu32.hf,Vv32.hf)", "Vector IEEE fma reduce: hf widen= to sf", + VxV.sf[i] =3D fp_vdmpy_acc(VxV.sf[i], VuV.hf[2*i+1], VuV.hf[2*i], VvV.= hf[2*i+1], + VvV.hf[2*i], &env->fp_status)) + +/* IEEE FP add/sub instructions */ +ITERATOR_INSN_IEEE_FP_32(32, vadd_sf_sf, "Vd32.sf=3Dvadd(Vu32.sf,Vv32.sf)", + "Vector IEEE add: sf", + VdV.sf[i] =3D fp_add_sf_sf(VuV.sf[i], VvV.sf[i], &env->fp_status)) +ITERATOR_INSN_IEEE_FP_32(32, vsub_sf_sf, "Vd32.sf=3Dvsub(Vu32.sf,Vv32.sf)", + "Vector IEEE sub: sf", + VdV.sf[i] =3D fp_sub_sf_sf(VuV.sf[i], VvV.sf[i], &env->fp_status)) +ITERATOR_INSN_IEEE_FP_16(16, vadd_hf_hf, "Vd32.hf=3Dvadd(Vu32.hf,Vv32.hf)", + "Vector IEEE add: hf", + VdV.hf[i] =3D fp_add_hf_hf(VuV.hf[i], VvV.hf[i], &env->fp_status)) +ITERATOR_INSN_IEEE_FP_16(16, vsub_hf_hf, "Vd32.hf=3Dvsub(Vu32.hf,Vv32.hf)", + "Vector IEEE sub: hf", + VdV.hf[i] =3D fp_sub_hf_hf(VuV.hf[i], VvV.hf[i], &env->fp_status)) +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vadd_sf_hf, + "Vdd32.sf=3Dvadd(Vu32.hf,Vv32.hf)", "Vector IEEE add: hf widen to sf", + VddV.v[0].sf[i] =3D fp_add_sf_hf(VuV.hf[2*i], VvV.hf[2*i], &env->fp_st= atus); + VddV.v[1].sf[i] =3D fp_add_sf_hf(VuV.hf[2*i+1], VvV.hf[2*i+1], &env->f= p_status)) +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vsub_sf_hf, + "Vdd32.sf=3Dvsub(Vu32.hf,Vv32.hf)", "Vector IEEE sub: hf widen to sf", + VddV.v[0].sf[i] =3D fp_sub_sf_hf(VuV.hf[2*i], VvV.hf[2*i], &env->fp_st= atus); + VddV.v[1].sf[i] =3D fp_sub_sf_hf(VuV.hf[2*i+1], VvV.hf[2*i+1], &env->f= p_status)) =20 /*************************************************************************= ***** DEBUG Vector/Register Printing diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build index d169cf71b2..f9a93975ad 100644 --- a/target/hexagon/meson.build +++ b/target/hexagon/meson.build @@ -250,6 +250,7 @@ hexagon_ss.add(files( 'fma_emu.c', 'mmvec/decode_ext_mmvec.c', 'mmvec/system_ext_mmvec.c', + 'mmvec/kvx_ieee.c', )) =20 # --=20 2.37.2 From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271844; cv=none; d=zohomail.com; s=zohoarc; b=D2+uGse6/AjaymW9QzW8YiwSNIIA8E4M+WauDq+g5HqW4wi8aKxNMuXYKy/zG3mrW8Fo8n2dlptKXtLpmWbrMcZVMSUtOVMU3MJhVP4SlfGVHDKIq9NpoXdthqQsWWIfvDq7VtyJuzOcgGVxj+KB69YCm7VhYpYW/1LyjX0SoC4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271844; 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=ANMsdtIxPbNH+bQHOtC1oftfsPQnsKamB/rAUUz74gQ=; b=gAnECESkN6WvFQ6AAabeETvzGUfW3G3H3dOyRWPLm9GUQKJqRXHEE0c+L+DsrCWsaJfWzGXAKLPMikNmcVcCDXIXALVS83vbn2bvE3hWhKqhgCbh8x90rdwhdtbr+Phjxqwfw/VHpr9NEj6S2sJi2Q0MGBfVAOokFLsCNxK4FU8= 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 1774271844951834.2737135305077; Mon, 23 Mar 2026 06:17:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f8c-0000Gh-0m; Mon, 23 Mar 2026 09:16:10 -0400 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 1w4f8V-0000Fd-Vi for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:03 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8R-0000LX-W2 for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:03 -0400 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NCeiDd2476059 for ; Mon, 23 Mar 2026 13:15:59 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d35r203f7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:15:58 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-2ba9a744f7dso3189481eec.0 for ; Mon, 23 Mar 2026 06:15:58 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.15.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:15:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=ANMsdtIxPbN H+bQHOtC1oftfsPQnsKamB/rAUUz74gQ=; b=nTZuiXOukUo/Zz3MVrKZZfeztop tYTZXM/0t1AysPWvjjM6TRypLBai1qTeVpxq9wD82Zj/5qmKROvKfpCz0ZXsd7gI UMrTFsgWYmYsZYOoYsVayLHfs9q9oKUAKkixeIoHzHdv0tMIFZxsOLYlK7IYF1uS fqohL0buJ6upXYnV5/XRk4T6lGTFBpw87jZKva4E+gDR/YDciskEGnpSMJZwBBd2 pndd2E/AlbwpdyEO7di65fuVqri7Hx541dmTZyz/wp7exC4nYREkbMAzr+/Luxhd vrK+3R4nHt6UbU3gL3rA7GAXOdZ3TYbJjpvNCq1ckjTS2va5G8LUnxyORtA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271758; x=1774876558; 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=ANMsdtIxPbNH+bQHOtC1oftfsPQnsKamB/rAUUz74gQ=; b=VNgrhfGn9el+YH/til+u/dcLzTkR+rVczEtvX8ym7LHB4spYmn1L6v72gowss7UgfP xX+PvSCOaEFLuPLbdXZblRE6aVncLOIqxisJ+DV3w32qmp5FIbXztwZeC20IGR+nOWgR 4aTD4jg7fJCuNwr+AU+3OxwFDmnIgtt4LCrNafc5vjkslKGfGoNpE7R/N2O9aoCBK49F F0E2x5ydJe8KaIK7uodl/M/xfuie8o2PUiJpB/+POA4fgq4sksvCCSvJG3wEv8DWngUd 0RaQl0aOmCDbV2rLtIR0sRe1pCCCxyDi7E7jtDF3qqU8svpjqwfmq6QPoB8Ei2ixo8dV VpSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271758; x=1774876558; 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=ANMsdtIxPbNH+bQHOtC1oftfsPQnsKamB/rAUUz74gQ=; b=Xn3u/cwrFuXCTrZymmY/Lj/aaaBNoI7sSsjD+BLk5HM0KygLzPc9cy01o8U5Nsxsj3 VO5EaZo6JrF82z8ecXtCUEkD5nqvlk8zIeF6WhqH1GMManBhXEF50voax6crbJYICA+W fvBe6ZFmwL8JtC0hG4OSgthOr7Lub26di551F9xH2nHhfABDfNNI9SsdWgTXQyhDKS2o o8RRdBRDbZ2UOZ7jZrv1P2sEv9MKuJg3a1n01+jdBgasNZzNauoaTB1ZAWYlz4GOophU UI6df82W+r0fRLs+rRz2E+2B3pIhrkgfTybyipDs/stT2ge2wXYYLXHmXMxDKj0+MfwS QJpQ== X-Gm-Message-State: AOJu0YxviD/stuIyAA/mkyNEFAtoDDzn1B0J6H+7T+HBu5NnYHJTFa5y GroZrcTf/1aqdVjzsWFG9cKJKyDyGMWf1H11fd6soI0f/KsIgbrE/LrLXxCzCTJxxGbtMk38nAa vGp0R1Wq1xsgCOI+8N7/hDfHUvmV58GIPgpefFng/grYcIlu46mvnn/LeB+MXoi7aT9g3 X-Gm-Gg: ATEYQzyPpSRIic8sdXyuc/sVB25FX/Z0Snqp3lkHVq/bEd+DziP9rwQMkA5lmAO4dOg dZL2uBmphCmxsmVA1wwo2q/IYLrS+lGTr9E7JAs8y+z318k0hOCBnh3P/YGb2osfkxYuGHdfzg4 W6rBeXdJeGJpcSZpbZygBclM6OwaDCfAPLJQgU7/0EaJqSDdrOIEgfg+Id60UjZd1HA1x4X9dDs xUJKbTVJwb4wf8o4PgJ0r9Q3+WLFFOklE7qXtPaEV3E0v/2D2gc1NAVplD0dwv9+YkC3YKO9kfc hBtqCjGmoTZJLbG6as/PWkSslHUIS/epXOftZcvapoZhNgbU84Hb2ahLSGP+2Ps/AXwNfptOYDo rwY3LmoR52rF6U6PybGGz+JGHOKdKXrJODxXApUoqS9zsgHTcgizg/mIBJ9i75fFcvnuoadu2NC YokuoBloAp X-Received: by 2002:a05:7300:d704:b0:2b0:48f7:837d with SMTP id 5a478bee46e88-2c109624055mr4877507eec.11.1774271757363; Mon, 23 Mar 2026 06:15:57 -0700 (PDT) X-Received: by 2002:a05:7300:d704:b0:2b0:48f7:837d with SMTP id 5a478bee46e88-2c109624055mr4877479eec.11.1774271756567; Mon, 23 Mar 2026 06:15:56 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH 05/13] target/hexagon: add v68 HVX IEEE float min/max insns Date: Mon, 23 Mar 2026 06:15:41 -0700 Message-Id: <4895991dcd597b052869e2275d5f0056dfc2368b.1774271525.git.matheus.bernardino@oss.qualcomm.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=VvUuwu2n c=1 sm=1 tr=0 ts=69c13d0e cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=yvcF8Y4nJBuLCN0LrDUA:9 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-GUID: BxGuSRWNPc4v9Gx6x_zd4mIXA4PsMavx X-Proofpoint-ORIG-GUID: BxGuSRWNPc4v9Gx6x_zd4mIXA4PsMavx X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfXwdfpHq/iAtp+ is0Wj8HiPReXaFcjygzCW+SoKZ3BONAs6rtev5baZFTyrdgnoyTra3YlGukBwPlSOxUGOaDvj44 atJZA5NBxAMUpaaCTVQArOWeHU0DWoqfNO1E1Rqfzlv5y72DlGClVaOrxF5dK5eUOz+UX7waHNt m6gjpspFPXKhnvEMNcDdZs0kVFQdFZkMHgMQghlhw6O+MB5HBtE2kNXVpfWQpMdI/coCLfuwxcg 3wYH6IkhpXCMO2SWm4bQsOJWCrzJaGqeeqQDRUavY7GNU528mEK670E3m8EJRQF6skw1XG0Z6pV T8aqwgUzCajPZRvEO2rqLFibjUaj55NvB4Xwayj5EibBeXL97ajxPmuKqQkm1CbKojlWrg3z1k6 8k+2QVhJ5dRnWyjxuiBPvP+9A5WkV0g53CzuCOvt+epUCnbozwBmlmUtseKTECWjOfN5HLv+Z7s jspiTHWu9C8gVOQ29EA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 spamscore=0 adultscore=0 lowpriorityscore=0 impostorscore=0 bulkscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271845926158500 Content-Type: text/plain; charset="utf-8" Add HVX IEEE floating-point min/max instructions: - vfmin_hf, vfmin_sf: IEEE floating-point minimum - vfmax_hf, vfmax_sf: IEEE floating-point maximum - vmax_hf, vmax_sf: qfloat IEEE maximum - vmin_hf, vmin_sf: qfloat IEEE minimum The Hexagon qfloat variants are similar to the IEEE-754 ones, but they handle NaN slightly differently. See comment on kvx_ieee.h Signed-off-by: Matheus Tavares Bernardino --- target/hexagon/mmvec/kvx_ieee.h | 12 +++++ target/hexagon/mmvec/kvx_ieee.c | 46 ++++++++++++++++++++ target/hexagon/imported/mmvec/encode_ext.def | 11 +++++ target/hexagon/imported/mmvec/ext.idef | 28 +++++++++++- 4 files changed, 96 insertions(+), 1 deletion(-) diff --git a/target/hexagon/mmvec/kvx_ieee.h b/target/hexagon/mmvec/kvx_iee= e.h index e92ddebeb9..78f546eb8e 100644 --- a/target/hexagon/mmvec/kvx_ieee.h +++ b/target/hexagon/mmvec/kvx_ieee.h @@ -44,4 +44,16 @@ uint32_t fp_vdmpy(uint16_t a1, uint16_t a2, uint16_t a3,= uint16_t a4, uint32_t fp_vdmpy_acc(uint32_t acc, uint16_t a1, uint16_t a2, uint16_t a3, uint16_t a4, float_status *fp_status); =20 +/* IEEE - FP min/max instructions */ +uint32_t fp_min_sf(uint32_t a1, uint32_t a2, float_status *fp_status); +uint32_t fp_max_sf(uint32_t a1, uint32_t a2, float_status *fp_status); +uint16_t fp_min_hf(uint16_t a1, uint16_t a2, float_status *fp_status); +uint16_t fp_max_hf(uint16_t a1, uint16_t a2, float_status *fp_status); + +/* Qfloat min/max treat +NaN as greater than +INF and -NaN as smaller than= -INF */ +uint32_t qf_max_sf(uint32_t a1, uint32_t a2, float_status *fp_status); +uint32_t qf_min_sf(uint32_t a1, uint32_t a2, float_status *fp_status); +uint16_t qf_max_hf(uint16_t a1, uint16_t a2, float_status *fp_status); +uint16_t qf_min_hf(uint16_t a1, uint16_t a2, float_status *fp_status); + #endif diff --git a/target/hexagon/mmvec/kvx_ieee.c b/target/hexagon/mmvec/kvx_iee= e.c index b763899aa3..33621a15f3 100644 --- a/target/hexagon/mmvec/kvx_ieee.c +++ b/target/hexagon/mmvec/kvx_ieee.c @@ -85,3 +85,49 @@ uint32_t fp_vdmpy_acc(uint32_t acc, uint16_t a1, uint16_= t a2, float32 red =3D fp_vdmpy(a1, a2, a3, a4, fp_status); return fp_add_sf_sf(float32_val(red), acc, fp_status); } + +DEF_FP_INSN_2(min_sf, 32, 32, 32, float32_min(f1, f2, fp_status)) +DEF_FP_INSN_2(max_sf, 32, 32, 32, float32_max(f1, f2, fp_status)) +DEF_FP_INSN_2(min_hf, 16, 16, 16, float16_min(f1, f2, fp_status)) +DEF_FP_INSN_2(max_hf, 16, 16, 16, float16_max(f1, f2, fp_status)) + +#define float32_is_pos_nan(X) (float32_is_any_nan(X) && !float32_is_neg(X)) +#define float32_is_neg_nan(X) (float32_is_any_nan(X) && float32_is_neg(X)) +#define float16_is_pos_nan(X) (float16_is_any_nan(X) && !float16_is_neg(X)) +#define float16_is_neg_nan(X) (float16_is_any_nan(X) && float16_is_neg(X)) + +uint32_t qf_max_sf(uint32_t a1, uint32_t a2, float_status *fp_status) +{ + float32 f1 =3D make_float32(a1); + float32 f2 =3D make_float32(a2); + if (float32_is_pos_nan(f1) || float32_is_neg_nan(f2)) return a1; + if (float32_is_pos_nan(f2) || float32_is_neg_nan(f1)) return a2; + return fp_max_sf(a1, a2, fp_status); +} + +uint32_t qf_min_sf(uint32_t a1, uint32_t a2, float_status *fp_status) +{ + float32 f1 =3D make_float32(a1); + float32 f2 =3D make_float32(a2); + if (float32_is_pos_nan(f1) || float32_is_neg_nan(f2)) return a2; + if (float32_is_pos_nan(f2) || float32_is_neg_nan(f1)) return a1; + return fp_min_sf(a1, a2, fp_status); +} + +uint16_t qf_max_hf(uint16_t a1, uint16_t a2, float_status *fp_status) +{ + float16 f1 =3D make_float16(a1); + float16 f2 =3D make_float16(a2); + if (float16_is_pos_nan(f1) || float16_is_neg_nan(f2)) return a1; + if (float16_is_pos_nan(f2) || float16_is_neg_nan(f1)) return a2; + return fp_max_hf(a1, a2, fp_status); +} + +uint16_t qf_min_hf(uint16_t a1, uint16_t a2, float_status *fp_status) +{ + float16 f1 =3D make_float16(a1); + float16 f2 =3D make_float16(a2); + if (float16_is_pos_nan(f1) || float16_is_neg_nan(f2)) return a2; + if (float16_is_pos_nan(f2) || float16_is_neg_nan(f1)) return a1; + return fp_min_hf(a1, a2, fp_status); +} diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 4ce87d09fd..23fbb75743 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -823,4 +823,15 @@ DEF_ENC(V6_vsub_sf_hf,"00011111100vvvvvPP1uuuuu101dddd= d") DEF_ENC(V6_vadd_hf_hf,"00011111101vvvvvPP1uuuuu111ddddd") DEF_ENC(V6_vsub_hf_hf,"00011111011vvvvvPP1uuuuu000ddddd") =20 +/* IEEE FP min/max instructions */ +DEF_ENC(V6_vfmin_hf,"00011100011vvvvvPP1uuuuu000ddddd") +DEF_ENC(V6_vfmin_sf,"00011100011vvvvvPP1uuuuu001ddddd") +DEF_ENC(V6_vfmax_hf,"00011100011vvvvvPP1uuuuu010ddddd") +DEF_ENC(V6_vfmax_sf,"00011100011vvvvvPP1uuuuu011ddddd") +DEF_ENC(V6_vmax_sf,"00011111110vvvvvPP1uuuuu001ddddd") +DEF_ENC(V6_vmin_sf,"00011111110vvvvvPP1uuuuu010ddddd") +DEF_ENC(V6_vmax_hf,"00011111110vvvvvPP1uuuuu011ddddd") +DEF_ENC(V6_vmin_hf,"00011111110vvvvvPP1uuuuu100ddddd") +DEF_ENC(V6_vcvt_ub_hf,"00011111110vvvvvPP1uuuuu101ddddd") + #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index 3f0d8e366e..43153366b1 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -43,7 +43,9 @@ EXTINSN(V6_##TAG, SYNTAX, ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA), \ DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) =20 - +#define ITERATOR_INSN_ANY_SLOT_2SRC(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC= ,A_HVX_FLT), \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) =20 #define ITERATOR_INSN2_ANY_SLOT(WIDTH,TAG,SYNTAX,SYNTAX2,DESCR,CODE) \ ITERATOR_INSN_ANY_SLOT(WIDTH,TAG,SYNTAX2,DESCR,CODE) @@ -2992,6 +2994,30 @@ ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vsub_sf_hf, VddV.v[0].sf[i] =3D fp_sub_sf_hf(VuV.hf[2*i], VvV.hf[2*i], &env->fp_st= atus); VddV.v[1].sf[i] =3D fp_sub_sf_hf(VuV.hf[2*i+1], VvV.hf[2*i+1], &env->f= p_status)) =20 +#define ITERATOR_INSN_IEEE_FP_16_32_LATE(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ + ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_OUT= _16,A_HVX_IEEE_FP_OUT_32), \ + DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* IEEE FP min/max instructions */ +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vfmin_hf, "Vd32.hf=3Dvfmin(Vu32.hf,Vv= 32.hf)", \ + "Vector IEEE min: hf", VdV.hf[i] =3D fp_min_hf(VuV.hf[i], VvV.hf[i], = &env->fp_status)) +ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vfmin_sf, "Vd32.sf=3Dvfmin(Vu32.sf,Vv= 32.sf)", \ + "Vector IEEE min: sf", VdV.sf[i] =3D fp_min_sf(VuV.sf[i], VvV.sf[i], = &env->fp_status)) +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vfmax_hf, "Vd32.hf=3Dvfmax(Vu32.hf,V= v32.hf)", \ + "Vector IEEE max: hf", VdV.hf[i] =3D fp_max_hf(VuV.hf[i], VvV.hf[i], &= env->fp_status)) +ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vfmax_sf, "Vd32.sf=3Dvfmax(Vu32.sf,V= v32.sf)", \ + "Vector IEEE max: sf", VdV.sf[i] =3D fp_max_sf(VuV.sf[i], VvV.sf[i], &= env->fp_status)) + +ITERATOR_INSN_ANY_SLOT_2SRC(32,vmax_sf,"Vd32.sf=3Dvmax(Vu32.sf,Vv32.sf)", \ + "Vector max of sf input", VdV.sf[i] =3D qf_max_sf(VuV.sf[i], VvV.sf[i]= , &env->fp_status)) +ITERATOR_INSN_ANY_SLOT_2SRC(32,vmin_sf,"Vd32.sf=3Dvmin(Vu32.sf,Vv32.sf)", \ + "Vector min of sf input", VdV.sf[i] =3D qf_min_sf(VuV.sf[i], VvV.sf[i]= , &env->fp_status)) +ITERATOR_INSN_ANY_SLOT_2SRC(16,vmax_hf,"Vd32.hf=3Dvmax(Vu32.hf,Vv32.hf)", \ + "Vector max of hf input", VdV.hf[i] =3D qf_max_hf(VuV.hf[i], VvV.hf[i]= , &env->fp_status)) +ITERATOR_INSN_ANY_SLOT_2SRC(16,vmin_hf,"Vd32.hf=3Dvmin(Vu32.hf,Vv32.hf)", \ + "Vector min of hf input", VdV.hf[i] =3D qf_min_hf(VuV.hf[i], VvV.hf[i]= , &env->fp_status)) + /*************************************************************************= ***** DEBUG Vector/Register Printing *************************************************************************= *****/ --=20 2.37.2 From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271889; cv=none; d=zohomail.com; s=zohoarc; b=PHi+6V0vfb5keQVYTymVaMUxFOaO+muy9q94lkAvsdBSi9F9Exaxxim2pZdCrJC0VEFXR8I+uqAP3cKu4NprURVSGor+LblafK2fL5YPgogIAUIJlky6vk/cELCsRQdafW2yCiXO7uM9O3ClUpdgu7yzRQRc7PteL4KWKUJGPAI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271889; 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=yxnWkgrof+C3h7cqEh7UJxAE8rAxqqV8GNsStTLZtDs=; b=J0c803fSOq02qJd9K4qqIucHXB7pY4UjNzV44nexO6LnyzhGq3DGEX5UpkejZZnU5NtFjEwTAZZlGCgh8aWnrVIXU+NDy8baTd1J/K2kQB5eHZu2ZpTACApVedCnRp7aj+VThgS+ZxKMAsKPqlc8egIZj/azq/gqnCTpL/D1B/U= 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 1774271889952358.26980517588515; Mon, 23 Mar 2026 06:18:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f8h-0000Hb-J1; Mon, 23 Mar 2026 09:16:15 -0400 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 1w4f8V-0000FY-QE for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:03 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8S-0000Lm-Bx for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:03 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NADsZ53539886 for ; Mon, 23 Mar 2026 13:15:59 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d33k30ju5-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:15:59 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-2c1030ca85eso4179562eec.0 for ; Mon, 23 Mar 2026 06:15:59 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.15.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:15:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=yxnWkgrof+C 3h7cqEh7UJxAE8rAxqqV8GNsStTLZtDs=; b=DF2rNuRquh6KEYO8C/3Eqpd0rBX JatvHeFEvXVj7yheRyg79mkzJWdlJMn8ds7Soz10mRN5Qmeq2i/MkBw4Tn7lr+hP o8ZfPMLeAItlpXoxQz9vPAg/NGzw7Inm1A2+KjYfEd1leePEqI9S18Ob02P5ogD6 BuOVTheME2+TxQR6H72oJsDikM88nMfJjzzJCxs7ISv1514to2z6iaYhKzAB2lOf DV0PuvPfK1DCM22JxOG7htGW9eIo3ggeqA8uRNR51riSbExVwTX0cn9v3UDXWz/4 aPfkPKRG/neYx1o4an66VZhzG4gS9e2sjZUIs6Q3/2HaMJXlBAcR5/fG+/g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271758; x=1774876558; 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=yxnWkgrof+C3h7cqEh7UJxAE8rAxqqV8GNsStTLZtDs=; b=IffpDmqd4SL9rzVeg/kXOdAvH32LX34OSyO6i6wR8VIB+pPWPfkkXnXdbq8Ml1EmSv eT02ev/kOfqLz7FafAFjWif7KhXf0fFvzdMgplEZpYp6CHWw5LQh6DXCNtcCzYwvdKvA tgfAdCT52WAcq9MVAyoWS4k19jvsJLN7ASH6LYg5+9uApQ0VX/yji8rC6WFcmDK8TZaK Q+phfbEiQvsVor912XBiiFVae1UqF/KRb52TBtmaBYWeqmtENKM/OOoacrUo3YZMJgih YBAt/tQ7zNTDqOgs6T+OSvZ+ZH7R3ed3fCx8h8wmxb7dII6KFHgIi7+MiOtPmoB1lgG4 5xBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271758; x=1774876558; 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=yxnWkgrof+C3h7cqEh7UJxAE8rAxqqV8GNsStTLZtDs=; b=SEXWmcifpGMsjOH/hMMcASnffxNigFUe1BZ9rpq3S+ebmOrlNHVK2WD+eTBDDAooWW 5GmUAcaREMeBtOKP10Fbjmidk5Kmhs6T6Wyk81osMXmhtBXzmJMJ+KaOvmEh0hBv6IaT sWW2Ji5DxIt8gMmtNxY6JGl/or48Zg41tKZvmNPk/7S/r3BleFKlAFAbKnNoywjTYhaU 6zwFiegdmMHQF2X7Y8ACzbk2EMdPoWoqf7M5OFunSePDGpR1g5HqriTXebmMnIuNFPL/ w9GRwAcr7pTgqCnIYn+Mst9iplpG5B9eosBz3ue9PLVDvlMBXVwyWtLKpIOcje3sDyea GlyQ== X-Gm-Message-State: AOJu0YyqjmNKcHHlaO1dn6GFJq0w65DUK8HnHSWea+lWXywffTZ878p3 hMAyTwqcYmfk2hHiaXVgPVyFDxkonrC+2galSHLYRAVIZWWrAfjj6yX0iIjBFlpxRumsB9ZYShE /qPre0A+qatM3jxbYVAAgKAy+ScFsXziIGcGFcpSKqRFf2V6+y8DfRUBwJMtQJL721J74 X-Gm-Gg: ATEYQzxAo8VOQh0COd6VPZih0Hpk9s8Uasar+QI8WNKwPAz89cIsW7zLLfiJqsiy3KS 5PadGAmoKjenOziTK8TlemZXTHEPJqB0pBtuV5WDOcLD1idZm8y36PnzRqAi4tRn2qGk+tmZkmJ h5CIpML+d/Jw5PgDrWbYKaBll2aRCHcbxyadt2jtLUgT0SNWOlFgqOkJtChEe7djvNDb5+ZRxrs 7QHg2blgTJhwuhQIKremX33S5sJkVpHYmhzs2phcAtXGOTTiQXuBUI2Ph3lOUHBKq7DJANP9pi8 4qpBJvc2YKcDsj8tEqNAmXdv+5/1pqoZto7zGBP7l/jnxJTLut40eaO/q6qemJt5vAfyogRGhJ3 Zvp99zEo4uUtK7ZLYZbAa6OVO2qcjhtU/XbCNaC7d1hp5fBy3jNPUUuPgkOO4pBfp5QPl91EiW2 e1w+ylLxVo X-Received: by 2002:a05:7301:6093:b0:2ba:a1a5:b5b1 with SMTP id 5a478bee46e88-2c109584b61mr6077194eec.7.1774271758115; Mon, 23 Mar 2026 06:15:58 -0700 (PDT) X-Received: by 2002:a05:7301:6093:b0:2ba:a1a5:b5b1 with SMTP id 5a478bee46e88-2c109584b61mr6077171eec.7.1774271757552; Mon, 23 Mar 2026 06:15:57 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH 06/13] target/hexagon: add v68 HVX IEEE float misc insns Date: Mon, 23 Mar 2026 06:15:42 -0700 Message-Id: X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=CYYFJbrl c=1 sm=1 tr=0 ts=69c13d0f cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=QFng14Z7CN1KHDVayVwA:9 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfX2Eu1vEEn4K7o fozT1tpvSLqdx/lQmI+cQ+vEtYBJ98ldOaT+looXzK/PgmMRlxBMvjOpi3MrzmUyHvPSFg8rIUA j8qMiccjpFehGUa7HOmBH6a1qjsvTR2qOYXX9LbnPINVG8nErjhSfh6+g+vw5cJ2Dy9jEX7uEvb +G8kNUGdEKy1JV9VzIPbLk8tfybZ9ZWLIHqkbM0nJWwvtT4jc2QG493CrbpeYd/NZMqTXUu0903 sT0VPNwJBwwwc8t7/ez+v9VrqpNOp6tnVv9utlVafqoTiS1QC2y66y/E8HbWDlc+tjdY+xgLxUm PBnKvoZOUc30DZHUHJv9AZySHIuPcEsZsI+uJD364Dgx2F036aCOK9sDelP7MIRz/m9YfTRnTc5 BKFroVFGM2aAeNNzYD5unUrBxLL/XOP00gmVDOc2CHAMxrDn6q6EItP7HVFGtlYfWoO3wXVdao9 9s02dnasCA1CldoQiLg== X-Proofpoint-GUID: J_aIG_2SqMh4XofJgt33mElrquPkLWT0 X-Proofpoint-ORIG-GUID: J_aIG_2SqMh4XofJgt33mElrquPkLWT0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 clxscore=1015 spamscore=0 phishscore=0 lowpriorityscore=0 adultscore=0 malwarescore=0 bulkscore=0 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271892793154100 Content-Type: text/plain; charset="utf-8" Add HVX IEEE floating-point miscellaneous instructions: - vassign_fp (vfmv): vector move - vfneg_hf, vfneg_sf: vector floating-point negate - vabs_hf, vabs_sf: vector absolute value Signed-off-by: Matheus Tavares Bernardino --- target/hexagon/mmvec/kvx_ieee.h | 3 +++ target/hexagon/imported/mmvec/encode_ext.def | 7 +++++++ target/hexagon/imported/mmvec/ext.idef | 14 ++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/target/hexagon/mmvec/kvx_ieee.h b/target/hexagon/mmvec/kvx_iee= e.h index 78f546eb8e..263feb7e94 100644 --- a/target/hexagon/mmvec/kvx_ieee.h +++ b/target/hexagon/mmvec/kvx_ieee.h @@ -13,6 +13,9 @@ #define FP32_DEF_NAN 0x7FFFFFFF #define FP16_DEF_NAN 0x7FFF =20 +#define signF32UI(a) ((bool)((uint32_t)(a) >> 31)) +#define signF16UI(a) ((bool)((uint16_t)(a) >> 15)) + /* * IEEE - FP ADD/SUB/MPY instructions */ diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 23fbb75743..7138e593dd 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -834,4 +834,11 @@ DEF_ENC(V6_vmax_hf,"00011111110vvvvvPP1uuuuu011ddddd") DEF_ENC(V6_vmin_hf,"00011111110vvvvvPP1uuuuu100ddddd") DEF_ENC(V6_vcvt_ub_hf,"00011111110vvvvvPP1uuuuu101ddddd") =20 +/* IEEE FP move, negate, abs instructions */ +DEF_ENC(V6_vassign_fp,"00011110--0-0110PP1uuuuu001ddddd") +DEF_ENC(V6_vfneg_hf,"00011110--0-0110PP1uuuuu010ddddd") +DEF_ENC(V6_vfneg_sf,"00011110--0-0110PP1uuuuu011ddddd") +DEF_ENC(V6_vabs_hf,"00011110--0-0110PP1uuuuu100ddddd") +DEF_ENC(V6_vabs_sf,"00011110--0-0110PP1uuuuu101ddddd") + #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index 43153366b1..5ef5baa404 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -3018,6 +3018,20 @@ ITERATOR_INSN_ANY_SLOT_2SRC(16,vmax_hf,"Vd32.hf=3Dvm= ax(Vu32.hf,Vv32.hf)", \ ITERATOR_INSN_ANY_SLOT_2SRC(16,vmin_hf,"Vd32.hf=3Dvmin(Vu32.hf,Vv32.hf)", \ "Vector min of hf input", VdV.hf[i] =3D qf_min_hf(VuV.hf[i], VvV.hf[i]= , &env->fp_status)) =20 +/* IEEE FP move, negate, abs instructions */ +ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vassign_fp, "Vd32.w=3Dvfmv(Vu32.w)", \ + "Vector IEEE move", VdV.w[i] =3D VuV.w[i]) +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vfneg_hf, "Vd32.hf=3Dvfneg(Vu32.hf)",= \ + "Vector IEEE neg: hf", VdV.hf[i] =3D (VuV.hf[i] ^ 0x8000)) +ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vfneg_sf, "Vd32.sf=3Dvfneg(Vu32.sf)",= \ + "Vector IEEE neg: sf", VdV.sf[i] =3D (VuV.sf[i] ^ 0x80000000)) +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vabs_hf, "Vd32.hf=3Dvabs(Vu32.hf)", \ + "Vector IEEE abs: hf", \ + VdV.hf[i] =3D ((signF16UI(VuV.hf[i])) ? (VuV.hf[i] ^ 0x8000) : VuV.hf[= i])) +ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vabs_sf, "Vd32.sf=3Dvabs(Vu32.sf)", \ + "Vector IEEE abs: sf", \ + VdV.sf[i] =3D ((signF32UI(VuV.sf[i])) ? (VuV.sf[i] ^ 0x80000000) : VuV= .sf[i])) + /*************************************************************************= ***** DEBUG Vector/Register Printing *************************************************************************= *****/ --=20 2.37.2 From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271853; cv=none; d=zohomail.com; s=zohoarc; b=Ke6qL2lT+tnCOPapHh692iYBe7UP6QhQBr25NRgrrr/0nT/F5jQGtQNT7a0Yg8lFiPmeCPgdSj8AuS5k2AW3fzolhoBaP1yKwXG8AJMeF2LASYzeOuQbDR5JNg5Vq2pA39qoCY0QAORyseBwHAvR9mv4L6DkOb5Z09QVN4hoHdc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271853; 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=egwQItMyVGs47MWCx12tDbJndnZBPbX1svAKzwwW5t8=; b=b3qzJ2vhxkUhYC8nVKACbrmeQpjBC0Uys7TAxhCJ5wyVFre5wBlh4/fN8TWX9nrXENtFtEB9nIR7pEeeb8dKO+Mq0LRaqnGeMMz7Oq6pjWDXhQWgmFKgIKeGlmMqSE6Z6YRwSmdEqzliD0dg8r/wDCwahQrJQpXxu65wcvz9DfA= 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 177427185314087.80758998029432; Mon, 23 Mar 2026 06:17:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f8b-0000GO-CG; Mon, 23 Mar 2026 09:16:09 -0400 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 1w4f8W-0000Fo-D9 for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:04 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8T-0000Lw-Ve for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:04 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NADws93539916 for ; Mon, 23 Mar 2026 13:16:01 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d33k30ju8-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:16:00 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-2c0f6593ef5so2705606eec.1 for ; Mon, 23 Mar 2026 06:16:00 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.15.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:15:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=egwQItMyVGs 47MWCx12tDbJndnZBPbX1svAKzwwW5t8=; b=It58Fgya293aP4ADibzKL9+d06H nhUwfXCcCbq1leALkgq9ctPY5OphCSwJ0HHrqDbJVrKOY/Ju07813dRVHD6w2sRj lvmU0wbB+cvcFervYfXRfVFhKaJ5vp07aFzFF+4tMUXG2Jl7Kh6yIZiY2PI/g9OY CoD9DxHx9EvSx1QNzNX7i/tcMuiURfq42FjVtMrWjkuLwH+BDNAhx3J1SVhW6+Lo T0BMkJuL/jPdRMwmjajqIuNUert4aS5K+yb1lyZ7G6kaeewCu0B4NpILMKRGH8vs I2e/ZhbkmElkusbCXQR+sO4ZBr6Yz8uwJ9+UX91OiUEhf/zXPEm7cU489iQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271760; x=1774876560; 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=egwQItMyVGs47MWCx12tDbJndnZBPbX1svAKzwwW5t8=; b=TTf2ExgeWK0NyCoiINO2KiYa0zcr/53KoKOrLFBUt0SXumEtK7IC1RY87VhP0h81+L /TAQ9LueZp5Chk1rHh3LB6hRZe9yIE6u0cj+Wb1BRhUH5fdM4u6HtZI/btlkC03B+oiI FxSbvk5b3PTIejaObwgnCPBIffb6vh77iLEVP5Ac3iW0CkQ1dqcvZU5GIzSNjsqbdkzF EO623zp4Z11uFJXw8L8R2bymXv36L45+J0wMiX3b4z++Up0vLcyW01OSX/+V4I60lsYG qqst7HtxgfxmnIKv3KtiP5ADKcjfzIArCFiIN++wYQS/bnRpvTj55RZcpNQLtsDYNlAw fWqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271760; x=1774876560; 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=egwQItMyVGs47MWCx12tDbJndnZBPbX1svAKzwwW5t8=; b=mKUOQse/gH9589ax6qI56sc87QrqJaz2VN72WYQVmRQlrvPjlXRTFFmWhhL3l9Tirp hxzxdSZItlMKVwR1ie0R7cyTfXe5ok3+MgxNa59lCpAj1rLurkbhPlur7fUUV/IfwM9I NVpIGBCegeMXJ5/sPmOTVLjBETUa+C0NpCrqUwXR/v9048dEzzNzWZKO1SMkeZgO8WFd mlMV7qrw+qc+Oo0XD0Cs3Z2zLigZRiFf58vOVe6ptlmX5EmB2kSUbf/cFvxHvWltpUuu z46QqcP+QuUTNQfT01O+B+PMcKGuE+glQX8p//jdgX58wOpMtDUf2NFgDbP4sub+bT8d v4Qg== X-Gm-Message-State: AOJu0YzdeMe2KH0F1SPoz8YVedHUcvMYXZAyfud4++IULUsm4P6JB9IC MYDrH+8XMoZTvWEnLTrhefgodcBGS5IR8WKSq7qP5VLtW3/1WZ+n6F8Uym8146QxVQ4DP+KsFwI 0wkn9OcTuVYGd0GE+VRVYBAg7ZIw7aYZ5SMYlPpzm/91h1QDEgp1i7zjVZLFsgPwFQX9G X-Gm-Gg: ATEYQzzC2LlwXYeirTV13O/nP9JsOo9lEUUnxc5NZnxJIoG4U+cen4l28trmj8x8keL IwhDh33828drXxV9hF4Jus6WvOzs4bZCOm6+9hhDAbldI+doeEoCpfXNrXLitZLg6lH0B7Qiurm 8U3Jv3zBCzhn/6l8EK2XdcIDL6fga73aAiZ3kF2tRstjSOihdn5AmM3qewXAMmOGjR5j8qL2pSb r5yl/I/Dh9GV3s+Lm26mlIjJgtGbKA/AoZ6Vycn/RawCb5gpUM8IeEXK0+QVovx3txxhsb9CusN KpL4NMaFQBz0/NogMTQbbX8yqY1l0HOJ3ThyeGu2lexz8QhskfP/0u17riXBpNyiWj8KpSs4KFU fahg8Cs7BTUhBPGb4GhBWdA0LXQCjf5ClO1pBvS5M07EZobclWRF83TFmabUKEVNbMYsajRT07H VEpsBths/F X-Received: by 2002:a05:7300:a883:b0:2c0:d9e6:7eb3 with SMTP id 5a478bee46e88-2c109728272mr4578581eec.23.1774271759364; Mon, 23 Mar 2026 06:15:59 -0700 (PDT) X-Received: by 2002:a05:7300:a883:b0:2c0:d9e6:7eb3 with SMTP id 5a478bee46e88-2c109728272mr4578567eec.23.1774271758508; Mon, 23 Mar 2026 06:15:58 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH 07/13] target/hexagon: add v68 HVX IEEE float conversion insns Date: Mon, 23 Mar 2026 06:15:43 -0700 Message-Id: X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=CYYFJbrl c=1 sm=1 tr=0 ts=69c13d10 cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=0QsP6ROi4U8MYujRKJUA:9 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfX8p8zzU6ZyfEX lEzWdzeFmBcmoioujuwhWDOsU2JY2Oe5mAIm0oPRyCjGAEvwQ4hhLfCsMAeFPqmMTdZhypizGOt ta78nb5sBCZ0l8CpzJTcvF0h4pZytvPWSmA6xDJLOlmceSIWo3wqp+j4ob3EdyNcfWQMtJETScV 62lsJHXHtoUVZTyPI0AgXdFioljrnj5aes4xeJEMmaz2nYkZr6kyFZfyh7AHKwppnrqzvsa7Fdh i45hMuO3QDDN1QwetvT14aMouuc0TakcKMVRNSbd/sy998JA+pqb5EGeeFyCBlpk04rbBIgrj9Z 75tVNZxbG5bu8r6ra5UY5byP22sGzQo2YBv2lDfOFn8IAgVNpewHBbgednHqq4hTCtcC9wKrzGd V2073UdYDwO+xRpEOh9kz/4NJraAxX1dPO1Iw/6Jd5Tg8H4CyiW1ZAox1ZFL9tH/6AMDMyCizum JFmvvhNUBSQcrmm8chg== X-Proofpoint-GUID: eMBl-882mHkw5h-_u2cn2I9X5tFs2Jo7 X-Proofpoint-ORIG-GUID: eMBl-882mHkw5h-_u2cn2I9X5tFs2Jo7 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 clxscore=1015 spamscore=0 phishscore=0 lowpriorityscore=0 adultscore=0 malwarescore=0 bulkscore=0 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271854139158500 Content-Type: text/plain; charset="utf-8" Add HVX IEEE floating-point conversion instructions: - vconv_hf_h, vconv_h_hf, vconv_sf_w, vconv_w_sf: vconv operations - vcvt_hf_sf, vcvt_sf_hf: float <-> half float conversions - vcvt_hf_b, vcvt_hf_h, vcvt_hf_ub, vcvt_hf_uh: int to half float - vcvt_b_hf, vcvt_h_hf, vcvt_ub_hf, vcvt_uh_hf: half float to int Signed-off-by: Matheus Tavares Bernardino --- target/hexagon/mmvec/kvx_ieee.h | 21 +++++ target/hexagon/mmvec/kvx_ieee.c | 98 ++++++++++++++++++++ target/hexagon/imported/mmvec/encode_ext.def | 18 ++++ target/hexagon/imported/mmvec/ext.idef | 97 +++++++++++++++++++ 4 files changed, 234 insertions(+) diff --git a/target/hexagon/mmvec/kvx_ieee.h b/target/hexagon/mmvec/kvx_iee= e.h index 263feb7e94..8a6816f6b3 100644 --- a/target/hexagon/mmvec/kvx_ieee.h +++ b/target/hexagon/mmvec/kvx_ieee.h @@ -59,4 +59,25 @@ uint32_t qf_min_sf(uint32_t a1, uint32_t a2, float_statu= s *fp_status); uint16_t qf_max_hf(uint16_t a1, uint16_t a2, float_status *fp_status); uint16_t qf_min_hf(uint16_t a1, uint16_t a2, float_status *fp_status); =20 +/* + * IEEE - FP Convert instructions + */ +uint16_t f32_to_f16(uint32_t a, float_status *fp_status); +uint32_t f16_to_f32(uint16_t a, float_status *fp_status); + +uint16_t f16_to_uh(uint16_t op1, float_status *fp_status); +int16_t f16_to_h(uint16_t op1, float_status *fp_status); +uint8_t f16_to_ub(uint16_t op1, float_status *fp_status); +int8_t f16_to_b(uint16_t op1, float_status *fp_status); + +uint16_t uh_to_f16(uint16_t op1); +uint16_t h_to_f16(int16_t op1); +uint16_t ub_to_f16(uint8_t op1); +uint16_t b_to_f16(int8_t op1); + +int32_t conv_sf_w(int32_t a, float_status *fp_status); +int16_t conv_hf_h(int16_t a, float_status *fp_status); +int32_t conv_w_sf(uint32_t a, float_status *fp_status); +int16_t conv_h_hf(uint16_t a, float_status *fp_status); + #endif diff --git a/target/hexagon/mmvec/kvx_ieee.c b/target/hexagon/mmvec/kvx_iee= e.c index 33621a15f3..bbeec09707 100644 --- a/target/hexagon/mmvec/kvx_ieee.c +++ b/target/hexagon/mmvec/kvx_ieee.c @@ -131,3 +131,101 @@ uint16_t qf_min_hf(uint16_t a1, uint16_t a2, float_st= atus *fp_status) if (float16_is_pos_nan(f2) || float16_is_neg_nan(f1)) return a1; return fp_min_hf(a1, a2, fp_status); } + +uint16_t f32_to_f16(uint32_t a, float_status *fp_status) +{ + return float16_val(float32_to_float16(make_float32(a), true, fp_status= )); +} + +uint32_t f16_to_f32(uint16_t a, float_status *fp_status) +{ + return float32_val(float16_to_float32(make_float16(a), true, fp_status= )); +} + +uint16_t f16_to_uh(uint16_t op1, float_status *fp_status) +{ + return float16_to_uint16_scalbn(make_float16(op1), + float_round_nearest_even, + 0, fp_status); +} + +int16_t f16_to_h(uint16_t op1, float_status *fp_status) +{ + return float16_to_int16_scalbn(make_float16(op1), + float_round_nearest_even, + 0, fp_status); +} + +uint8_t f16_to_ub(uint16_t op1, float_status *fp_status) +{ + return float16_to_uint8_scalbn(make_float16(op1), + float_round_nearest_even, + 0, fp_status); +} + +int8_t f16_to_b(uint16_t op1, float_status *fp_status) +{ + return float16_to_int8_scalbn(make_float16(op1), + float_round_nearest_even, + 0, fp_status); +} + +uint16_t uh_to_f16(uint16_t op1) +{ + return uint64_to_float16_scalbn(op1, float_round_nearest_even, 0); +} + +uint16_t h_to_f16(int16_t op1) +{ + return int64_to_float16_scalbn(op1, float_round_nearest_even, 0); +} + +uint16_t ub_to_f16(uint8_t op1) +{ + return uint64_to_float16_scalbn(op1, float_round_nearest_even, 0); +} + +uint16_t b_to_f16(int8_t op1) +{ + return int64_to_float16_scalbn(op1, float_round_nearest_even, 0); +} + +int32_t conv_sf_w(int32_t a, float_status *fp_status) +{ + return float32_val(int32_to_float32(a, fp_status)); +} + +int16_t conv_hf_h(int16_t a, float_status *fp_status) +{ + return float16_val(int16_to_float16(a, fp_status)); +} + +int32_t conv_w_sf(uint32_t a, float_status *fp_status) +{ + float_status scratch_fpst =3D {}; + const float32 W_MAX =3D int32_to_float32(INT32_MAX, &scratch_fpst); + const float32 W_MIN =3D int32_to_float32(INT32_MIN, &scratch_fpst); + float32 f1 =3D make_float32(a); + + if (float32_is_any_nan(f1) || float32_is_infinity(f1) || + float32_le_quiet(W_MAX, f1, fp_status) || + float32_le_quiet(f1, W_MIN, fp_status)) { + return float32_is_neg(f1) ? INT32_MIN : INT32_MAX; + } + return float32_to_int32_round_to_zero(f1, fp_status); +} + +int16_t conv_h_hf(uint16_t a, float_status *fp_status) +{ + float_status scratch_fpst =3D {}; + const float16 H_MAX =3D int16_to_float16(INT16_MAX, &scratch_fpst); + const float16 H_MIN =3D int16_to_float16(INT16_MIN, &scratch_fpst); + float16 f1 =3D make_float16(a); + + if (float16_is_any_nan(f1) || float16_is_infinity(f1) || + float16_le_quiet(H_MAX, f1, fp_status) || + float16_le_quiet(f1, H_MIN, fp_status)) { + return float16_is_neg(f1) ? INT16_MIN : INT16_MAX; + } + return float16_to_int16_round_to_zero(f1, fp_status); +} diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 7138e593dd..5325bbd704 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -841,4 +841,22 @@ DEF_ENC(V6_vfneg_sf,"00011110--0-0110PP1uuuuu011ddddd") DEF_ENC(V6_vabs_hf,"00011110--0-0110PP1uuuuu100ddddd") DEF_ENC(V6_vabs_sf,"00011110--0-0110PP1uuuuu101ddddd") =20 +/* IEEE FP vcvt instructions */ +DEF_ENC(V6_vcvt_sf_hf,"00011110--0-0100PP1uuuuu100ddddd") +DEF_ENC(V6_vcvt_hf_sf,"00011111011vvvvvPP1uuuuu001ddddd") +DEF_ENC(V6_vcvt_hf_ub,"00011110--0-0100PP1uuuuu001ddddd") +DEF_ENC(V6_vcvt_hf_b,"00011110--0-0100PP1uuuuu010ddddd") +DEF_ENC(V6_vcvt_hf_uh,"00011110--0-0100PP1uuuuu101ddddd") +DEF_ENC(V6_vcvt_hf_h,"00011110--0-0100PP1uuuuu111ddddd") +DEF_ENC(V6_vcvt_uh_hf,"00011110--0--101PP1uuuuu000ddddd") +DEF_ENC(V6_vcvt_h_hf,"00011110--0-0110PP1uuuuu000ddddd") +DEF_ENC(V6_vcvt_ub_hf,"00011111110vvvvvPP1uuuuu101ddddd") +DEF_ENC(V6_vcvt_b_hf,"00011111110vvvvvPP1uuuuu110ddddd") + +/* IEEE FP vconv instructions */ +DEF_ENC(V6_vconv_sf_w,"00011110--0--101PP1uuuuu011ddddd") +DEF_ENC(V6_vconv_w_sf,"00011110--0--101PP1uuuuu001ddddd") +DEF_ENC(V6_vconv_hf_h,"00011110--0--101PP1uuuuu100ddddd") +DEF_ENC(V6_vconv_h_hf,"00011110--0--101PP1uuuuu010ddddd") + #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index 5ef5baa404..8b832166e0 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -63,6 +63,9 @@ ITERATOR_INSN_ANY_SLOT_DOUBLE_VEC(WIDTH,TAG,SYNTAX2,DESCR= ,CODE) EXTINSN(V6_##TAG, SYNTAX, ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VS), \ DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) =20 +#define ITERATOR_INSN_SHIFT_SLOT_FLT(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VS,A_HVX_FLT), \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) =20 #define ITERATOR_INSN_SHIFT3_SLOT(WIDTH,TAG,SYNTAX,DESCR,CODE) \ EXTINSN(V6_##TAG, SYNTAX, ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VS,A_CVI_VS_3SRC= ,A_NOTE_SHIFT_RESOURCE,A_NOTE_NOVP,A_NOTE_VA_UNARY), \ @@ -3032,6 +3035,100 @@ ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vabs_sf, "Vd3= 2.sf=3Dvabs(Vu32.sf)", \ "Vector IEEE abs: sf", \ VdV.sf[i] =3D ((signF32UI(VuV.sf[i])) ? (VuV.sf[i] ^ 0x80000000) : VuV= .sf[i])) =20 +/* Two pipes: P2 & P3, two outputs, 16-bit */ +#define ITERATOR_INSN_IEEE_FP_DOUBLE_16(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ +ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX_DV,A_HVX_IEEE_FP_OUT_16),= \ +DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* Two pipes: P2 & P3, two outputs, 32-bit output */ +#define ITERATOR_INSN_IEEE_FP_DOUBLE_32(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ + ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX_DV,A_HVX_IEEE_FP_OUT_= 32), \ + DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* Single pipe, 16-bit output */ +#define ITERATOR_INSN_IEEE_FP_16(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ + ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_OUT_16)= , \ + DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/* single pipe, output can feed 16- or 32-bit accumulate */ +#define ITERATOR_INSN_IEEE_FP_16_32(WIDTH,TAG,SYNTAX,DESCR,CODE) \ +EXTINSN(V6_##TAG, SYNTAX, \ + ATTRIBS(A_EXTENSION,A_HVX_IEEE_FP,A_CVI,A_CVI_VX,A_HVX_IEEE_FP_OUT_16,= A_HVX_IEEE_FP_OUT_32), \ + DESCR, DO_FOR_EACH_CODE(WIDTH, CODE)) + +/*************************************************************************= ***** + * IEEE FP convert instructions + *************************************************************************= *****/ + +ITERATOR_INSN_IEEE_FP_DOUBLE_16(32, vcvt_hf_ub, "Vdd32.hf=3Dvcvt(Vu32.ub)= ", + "Vector IEEE cvt from int: ub widen to hf", + VddV.v[0].hf[2*i] =3D ub_to_f16(VuV.ub[4*i]); + VddV.v[0].hf[2*i+1] =3D ub_to_f16(VuV.ub[4*i+1]); + VddV.v[1].hf[2*i] =3D ub_to_f16(VuV.ub[4*i+2]); + VddV.v[1].hf[2*i+1] =3D ub_to_f16(VuV.ub[4*i+3])) + +ITERATOR_INSN_IEEE_FP_DOUBLE_16(32, vcvt_hf_b, "Vdd32.hf=3Dvcvt(Vu32.b)", + "Vector IEEE cvt from int: b widen to hf", + VddV.v[0].hf[2*i] =3D b_to_f16(VuV.b[4*i]); + VddV.v[0].hf[2*i+1] =3D b_to_f16(VuV.b[4*i+1]); + VddV.v[1].hf[2*i] =3D b_to_f16(VuV.b[4*i+2]); + VddV.v[1].hf[2*i+1] =3D b_to_f16(VuV.b[4*i+3])) + +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vcvt_sf_hf, "Vdd32.sf=3Dvcvt(Vu32.hf)", + "Vector IEEE cvt: hf widen to sf", + VddV.v[0].sf[i] =3D f16_to_f32(VuV.hf[2*i], &env->fp_status); + VddV.v[1].sf[i] =3D f16_to_f32(VuV.hf[2*i+1], &env->fp_status)) + +ITERATOR_INSN_IEEE_FP_16(16, vcvt_hf_uh, "Vd32.hf=3Dvcvt(Vu32.uh)", + "Vector IEEE cvt from int: uh to hf", + VdV.hf[i] =3D uh_to_f16(VuV.uh[i])) +ITERATOR_INSN_IEEE_FP_16(16, vcvt_hf_h, "Vd32.hf=3Dvcvt(Vu32.h)", + "Vector IEEE cvt from int: h to hf", + VdV.hf[i] =3D h_to_f16(VuV.h[i])) +ITERATOR_INSN_IEEE_FP_16_32(16, vcvt_uh_hf, "Vd32.uh=3Dvcvt(Vu32.hf)", + "Vector IEEE cvt to int: hf to uh", + VdV.uh[i] =3D f16_to_uh(VuV.hf[i], &env->fp_status)) +ITERATOR_INSN_IEEE_FP_16_32(16, vcvt_h_hf, "Vd32.h=3Dvcvt(Vu32.hf)", + "Vector IEEE cvt to int: hf to h", + VdV.h[i] =3D f16_to_h(VuV.hf[i], &env->fp_status)) + +ITERATOR_INSN_IEEE_FP_16(32, vcvt_hf_sf, "Vd32.hf=3Dvcvt(Vu32.sf,Vv32.sf)", + "Vector IEEE cvt: sf to hf", + VdV.hf[2*i] =3D f32_to_f16(VuV.sf[i], &env->fp_status); + VdV.hf[2*i+1] =3D f32_to_f16(VvV.sf[i], &env->fp_status)) + +ITERATOR_INSN_IEEE_FP_16_32(32, vcvt_ub_hf, "Vd32.ub=3Dvcvt(Vu32.hf,Vv32.h= f)", "Vector cvt to int: hf narrow to ub", + VdV.ub[4*i] =3D f16_to_ub(VuV.hf[2*i], &env->fp_status); + VdV.ub[4*i+1] =3D f16_to_ub(VuV.hf[2*i+1], &env->fp_status); + VdV.ub[4*i+2] =3D f16_to_ub(VvV.hf[2*i], &env->fp_status); + VdV.ub[4*i+3] =3D f16_to_ub(VvV.hf[2*i+1], &env->fp_status)) + +ITERATOR_INSN_IEEE_FP_16_32(32, vcvt_b_hf, "Vd32.b=3Dvcvt(Vu32.hf,Vv32.hf= )", + "Vector cvt to int: hf narrow to b", + VdV.b[4*i] =3D f16_to_b(VuV.hf[2*i], &env->fp_status); + VdV.b[4*i+1] =3D f16_to_b(VuV.hf[2*i+1], &env->fp_status); + VdV.b[4*i+2] =3D f16_to_b(VvV.hf[2*i], &env->fp_status); + VdV.b[4*i+3] =3D f16_to_b(VvV.hf[2*i+1], &env->fp_status)) + +ITERATOR_INSN_SHIFT_SLOT_FLT(32, vconv_w_sf,"Vd32.w=3DVu32.sf", + "Vector conversion of sf32 format to int w", + VdV.w[i] =3D conv_w_sf(VuV.sf[i], &env->fp_status)) + +ITERATOR_INSN_SHIFT_SLOT_FLT(16, vconv_h_hf,"Vd32.h=3DVu32.hf", + "Vector conversion of hf16 format to int hw", + VdV.h[i] =3D conv_h_hf(VuV.hf[i], &env->fp_status)) + +ITERATOR_INSN_SHIFT_SLOT_FLT(32, vconv_sf_w,"Vd32.sf=3DVu32.w", + "Vector conversion of int w format to sf32", + VdV.sf[i] =3D conv_sf_w(VuV.w[i], &env->fp_status)) + +ITERATOR_INSN_SHIFT_SLOT_FLT(16, vconv_hf_h,"Vd32.hf=3DVu32.h", + "Vector conversion of int hw format to hf16", + VdV.hf[i] =3D conv_hf_h(VuV.h[i], &env->fp_status)) + /*************************************************************************= ***** DEBUG Vector/Register Printing *************************************************************************= *****/ --=20 2.37.2 From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271809; cv=none; d=zohomail.com; s=zohoarc; b=fYbbKaEMHe7cLXwbbj1WYGJoCoAKYnx/6NWHHEy675PTH+ExyPKu6DgdgTJLNCi+XZ4CRhnjIaKX4QQoZG1U6yRiKiAnxV3WQyox2Tb5qMHEw2I8kLNeyOizyhhQVh0JkNBWnXLmEY1LbW1vJieflyqNMdMlpG3S+Y/VpQF9KBA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271809; 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=RFNTE4r6lEHzzhNGAcvE0NH/DzeW9XdrgsnPT6PjuLk=; b=lNOAeomXZULR9xXgM0nR25Oy+Fo/MGpucHM3NOiHE9ae3yLRLta7XJlRleg8M2vsQLUbSbqAdsgCgycevc0c52yDPGeMb9Bh+GZlfy9r+RxbOPyoeTvfLWI4btIeOT6XRz7Qms00Roi/X7d7qwQ3InRmiJo2pSBhPsQAa+s9wlQ= 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 1774271809756871.9941770293552; Mon, 23 Mar 2026 06:16:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f8i-0000IB-3V; Mon, 23 Mar 2026 09:16:21 -0400 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 1w4f8X-0000Fx-5G for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:05 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8V-0000MD-6U for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:04 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NBgUZn123583 for ; Mon, 23 Mar 2026 13:16:02 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d34vkr9fm-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:16:02 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-2c105e5ac70so3072846eec.0 for ; Mon, 23 Mar 2026 06:16:02 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.15.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:15:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=RFNTE4r6lEH zzhNGAcvE0NH/DzeW9XdrgsnPT6PjuLk=; b=hnYwST8hQ1tbLJfC9xCTWOQQQLl pGt/QQHzrV5x1gZmF9qs21jrGb291X9HSbXlyCpApIiDA9JICmWMwGleQyxVNQv2 fJskXizzu7w3jBgZZFSrQjsvjBC8M2ND/HfR36WYxXhzvL1H8KcaT0NHVNRlmEU8 k5WZn3EP7Oj2yxT8X7uX/dNBa8QCS7N5C7zWhgkfgEMGB/C+/6t30EfqPyXmn6xj QEN/MP4Rj7aWL9V+xh7xhMiTnuYPJxnjWA73Iv2jKt+ReejAVODM1UHtZXfOpd9C A1niAvRgQ2rSeFrMoztI2w/1yyn92Bg8/XOBk1TXpaV3+aaE7TAgnfRAgLg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271761; x=1774876561; 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=RFNTE4r6lEHzzhNGAcvE0NH/DzeW9XdrgsnPT6PjuLk=; b=LcrtXs4XrZv02z2igE/UP0eQXXv7HaXCW9rSAxZchAiwc6q3YAj4+LE/4d7pOpTnP4 75CIEaP4u6FVV1DnQty4anb0NtHGLUSEMDOqZp0q5sIIPlG8Ee/OVUSk7QXkOYkKFg5i 6hTSxlrRC56C++zGFz2s4KRPDnNx2lsDz9GWvBPOiu7ued7uVSTW0NqCE/ndMPqzSdDT AuC/liQZ2CUwAWgcEaFsrJ5t67Y/KICnqxyRIMr/4yPRw1DZZizbzWHgmXUAqVpNO0Er cuwKrywHWREmURCDyYKp5H+in7Ar2TyTKbJaW6tl30hYDNhpQPLvKd7nUHCFSkv/iX7e vQaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271761; x=1774876561; 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=RFNTE4r6lEHzzhNGAcvE0NH/DzeW9XdrgsnPT6PjuLk=; b=ZyGg3Phvz4id+itpE6DUcs3HoGL5vpCGJsPENIRhCdKGGrjMrUjZkhdzUmoGzRsgGj WjWdxQpCnCLQl4kYSWE1d0lVWNTBGrFB/pMs9RXhQmLYfjqD2CLAjd1Nwigc8xvsuAkS iGjqFErrn9F8vNd4Cr/9hd/wnTOOo3yIGEkXyyxiFmG7mM7pwA9cwtuwK8BqMbOk1CyO XWD2YJq57KErasZN8xnvkDWaikM5cXrjqmSGZMC41VHEuzfXfUU/2LOaLlXfoKfyBrpM kO8/IB0H447P7IESuwfeE09G84pWw/hOPfUfGz9UQ9qBPcJ6XNsTtH6zmqcBKxJ8VGHu dHsg== X-Gm-Message-State: AOJu0YxGKZIh3kKTzwAbcBAFHp9u06hqtEcoqA8cgG54lytZHkMOhkOI T5cgxu7efrikXxIZeAVf7R52og3O3USLAahtL2WBYfU2N1pUaZdWDP7Xx2H5hnhzrlj3b0HWr2U J4dvHtftE+LYS1jJOlSqIbo3PdOlwYUhhsqe0A0V1y8ns0rrPG5s5KpAkGO7jS9dXo+Uo X-Gm-Gg: ATEYQzxqUHFqyTHm1ESEbWSY4bRJwYPDQUkwXdhpN9wtTjpXQ5RiZxrJ0S5Rqx1qV8q AdozB+lsco2dwx8svOjK8VZ8oUV4cRuU0MyPbV+pupyDEefCrbZDvNnpuYUr3rIylTcMX/gYlML VZ0voqWYw9FRhBfZFF1dFvjLEzFxXvOs7gjN2nhHxYQkD37CWjqrAtUrbLv6KJBwI82HZiO5qXe I7JTa4peVWzWOAWFdj675M9iU8kZO4iJblfAMUoihHMkfiX0NgVO4kGnYrFSj5RxI4ox/xjY9MR 7+vJTm7+RpGe2TSKOfKa9WDxUB4FLHfmP/bDi/ZDeFvtFvCqYM1OMk++aEi2+4F9JS/1zI0hJI0 J664k3Ao96bMp2AHPo6VpYRAG0Paf925TTS6RvEDalxaCuYYQV2EgsXoq7seMWKF/ZeseIKr42w pPtsYyeQBL X-Received: by 2002:a05:7301:6794:b0:2b7:13f5:43ac with SMTP id 5a478bee46e88-2c10966353emr5856778eec.15.1774271760655; Mon, 23 Mar 2026 06:16:00 -0700 (PDT) X-Received: by 2002:a05:7301:6794:b0:2b7:13f5:43ac with SMTP id 5a478bee46e88-2c10966353emr5856756eec.15.1774271759829; Mon, 23 Mar 2026 06:15:59 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH 08/13] target/hexagon: add v68 HVX IEEE float compare insns Date: Mon, 23 Mar 2026 06:15:44 -0700 Message-Id: X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfXzf0DKFQezTWQ b9Z/mTuQ+9KXSvbtKHpGTBfKqg30Cvuxsu6k8+odYvjnyHsUiAxCUL1AbQgeWwre8OaFbl+pUgj xRDfHeNXLhqvBmzVsP5NJ54FUimlBTGfBdZ9OtgThnLwfF6L0ZhADojHV/BYr+Bts3MkQxWXLyO xZ65yh2Gd2NrdarMoc0ApTb/T44B9shaSTRHacMCbfHpXatqZcS7PZ8QbvcdLMhA7QDCuK/7zWQ 3BukqcaKjA1nt4/CPD20ndV+4wBDZ0xzfDIHuDBm/gmAraUGa0MWQQxRSnfWTciWUghZhmcU/7C FvCIQSEH0oGWI0veEKWb4v1bl3c5a1WgHXC56E0d8s04WaqdMENYwIInxwe+FXdC6U+QhH1hXdf N9p37gXnxDLft52GUzL751Eb/pBAOkpJ7O6hmBLFmcwQ5Hs5NBJXe9PdEr7wC1CNuuKkRF1cLMw qhfOHgKMONL2L2zXEqQ== X-Authority-Analysis: v=2.4 cv=eMoeTXp1 c=1 sm=1 tr=0 ts=69c13d12 cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=rrxrgvBJ-XzOK2CxOk4A:9 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-GUID: oJwpu-gceGr-hGQFV2Z5R4YHuPV5UShy X-Proofpoint-ORIG-GUID: oJwpu-gceGr-hGQFV2Z5R4YHuPV5UShy X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 adultscore=0 lowpriorityscore=0 impostorscore=0 bulkscore=0 phishscore=0 spamscore=0 clxscore=1015 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271811928158500 Content-Type: text/plain; charset="utf-8" Add HVX IEEE floating-point compare instructions: - V6_vgthf, V6_vgtsf: greater-than compare - V6_vgthf_and, V6_vgtsf_and: greater-than with predicate-and - V6_vgthf_or, V6_vgtsf_or: greater-than with predicate-or - V6_vgthf_xor, V6_vgtsf_xor: greater-than with predicate-xor Signed-off-by: Matheus Tavares Bernardino --- target/hexagon/mmvec/macros.h | 10 ++++ target/hexagon/attribs_def.h.inc | 2 + target/hexagon/hex_common.py | 1 + target/hexagon/imported/mmvec/encode_ext.def | 10 ++++ target/hexagon/imported/mmvec/ext.idef | 61 ++++++++++++++++++++ 5 files changed, 84 insertions(+) diff --git a/target/hexagon/mmvec/macros.h b/target/hexagon/mmvec/macros.h index 2af3d2d747..c342507d1a 100644 --- a/target/hexagon/mmvec/macros.h +++ b/target/hexagon/mmvec/macros.h @@ -356,4 +356,14 @@ extract32(VAL, POS * 8, 8); \ } while (0); =20 +#define fCMPGT_SF(A, B) \ + (float32_is_any_nan(A) || float32_is_any_nan(B) ? \ + (int32_t)(A) > (int32_t)(B) : \ + float32_compare((A), (B), &env->fp_status) =3D=3D float_relation_grea= ter) + +#define fCMPGT_HF(A, B) \ + (float16_is_any_nan(A) || float16_is_any_nan(B) ? \ + (int16_t)(A) > (int16_t)(B) : \ + float16_compare((A), (B), &env->fp_status) =3D=3D float_relation_great= er) + #endif diff --git a/target/hexagon/attribs_def.h.inc b/target/hexagon/attribs_def.= h.inc index d3c4bf6301..2d0fc7e9c0 100644 --- a/target/hexagon/attribs_def.h.inc +++ b/target/hexagon/attribs_def.h.inc @@ -81,6 +81,7 @@ DEF_ATTRIB(CVI_SCATTER, "CVI Scatter operation", "", "") DEF_ATTRIB(CVI_SCATTER_RELEASE, "CVI Store Release for scatter", "", "") DEF_ATTRIB(CVI_TMP_DST, "CVI instruction that doesn't write a register", "= ", "") DEF_ATTRIB(CVI_SLOT23, "Can execute in slot 2 or slot 3 (HVX)", "", "") +DEF_ATTRIB(CVI_VA_2SRC, "Execs on multimedia vector engine; requires two s= rcs", "", "") =20 DEF_ATTRIB(VTCM_ALLBANK_ACCESS, "Allocates in all VTCM schedulers.", "", "= ") =20 @@ -179,6 +180,7 @@ DEF_ATTRIB(HVX_IEEE_FP_ACC, "HVX IEEE FP accumulate ins= truction", "", "") DEF_ATTRIB(HVX_IEEE_FP_OUT_16, "HVX IEEE FP 16-bit output", "", "") DEF_ATTRIB(HVX_IEEE_FP_OUT_32, "HVX IEEE FP 32-bit output", "", "") DEF_ATTRIB(CVI_VX_NO_TMP_LD, "HVX multiply without tmp load", "", "") +DEF_ATTRIB(HVX_FLT, "This a floating point HVX instruction.", "", "") =20 /* Keep this as the last attribute: */ DEF_ATTRIB(ZZ_LASTATTRIB, "Last attribute in the file", "", "") diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py index f6a2848db1..f93c7559d2 100755 --- a/target/hexagon/hex_common.py +++ b/target/hexagon/hex_common.py @@ -216,6 +216,7 @@ def need_env(tag): "A_CVI_GATHER" in attribdict[tag] or "A_CVI_SCATTER" in attribdict[tag] or "A_HVX_IEEE_FP" in attribdict[tag] or + "A_HVX_FLT" in attribdict[tag] or "A_IMPLICIT_WRITES_USR" in attribdict[tag]) =20 =20 diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 5325bbd704..3f84a1691b 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -859,4 +859,14 @@ DEF_ENC(V6_vconv_w_sf,"00011110--0--101PP1uuuuu001dddd= d") DEF_ENC(V6_vconv_hf_h,"00011110--0--101PP1uuuuu100ddddd") DEF_ENC(V6_vconv_h_hf,"00011110--0--101PP1uuuuu010ddddd") =20 +/* IEEE FP compare instructions */ +DEF_ENC(V6_vgtsf,"00011100100vvvvvPP1uuuuu011100dd") +DEF_ENC(V6_vgthf,"00011100100vvvvvPP1uuuuu011101dd") +DEF_ENC(V6_vgtsf_and,"00011100100vvvvvPP1uuuuu110010xx") +DEF_ENC(V6_vgthf_and,"00011100100vvvvvPP1uuuuu110011xx") +DEF_ENC(V6_vgtsf_or,"00011100100vvvvvPP1uuuuu001100xx") +DEF_ENC(V6_vgthf_or,"00011100100vvvvvPP1uuuuu001101xx") +DEF_ENC(V6_vgtsf_xor,"00011100100vvvvvPP1uuuuu111010xx") +DEF_ENC(V6_vgthf_xor,"00011100100vvvvvPP1uuuuu111011xx") + #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index 8b832166e0..304c4966d8 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -3129,6 +3129,67 @@ ITERATOR_INSN_SHIFT_SLOT_FLT(16, vconv_hf_h,"Vd32.hf= =3DVu32.h", "Vector conversion of int hw format to hf16", VdV.hf[i] =3D conv_hf_h(VuV.h[i], &env->fp_status)) =20 +/*************************************************************************= ***** + * IEEE FP compare instructions + *************************************************************************= *****/ + +#define VCMPGT_SF(DEST, ASRC, ASRCOP, CMP, N, SRC, MASK, WIDTH) \ +{ \ + for (fHIDE(int) i =3D 0; i < fVBYTES(); i +=3D WIDTH) { \ + fHIDE(int) VAL =3D fCMPGT_SF(VuV.SRC[i/WIDTH],VvV.SRC[i/WIDTH]) ? = MASK : 0; \ + fSETQBITS(DEST,WIDTH,MASK,i,ASRC ASRCOP VAL); \ + } \ +} + +#define VCMPGT_HF(DEST, ASRC, ASRCOP, CMP, N, SRC, MASK, WIDTH) \ +{ \ + for (fHIDE(int) i =3D 0; i < fVBYTES(); i +=3D WIDTH) { \ + fHIDE(int) VAL =3D fCMPGT_HF(VuV.SRC[i/WIDTH],VvV.SRC[i/WIDTH]) ? = MASK : 0; \ + fSETQBITS(DEST,WIDTH,MASK,i,ASRC ASRCOP VAL); \ + } \ +} + +/* Vector SF compare */ +#define MMVEC_CMPGT_SF(TYPE,TYPE2,DESCR,N,MASK,WIDTH,SRC) \ + EXTINSN(V6_vgt##TYPE##_and, "Qx4&=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-and", \ + VCMPGT_SF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), &, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE##_xor, "Qx4^=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-xor", \ + VCMPGT_SF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), ^, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE##_or, "Qx4|=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE2= ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-or", \ + VCMPGT_SF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), |, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE, "Qd4=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than", \ + VCMPGT_SF(QdV, , , ">", N, SRC, MASK, WIDTH)) + +/* Vector HF compare */ +#define MMVEC_CMPGT_HF(TYPE,TYPE2,DESCR,N,MASK,WIDTH,SRC) \ + EXTINSN(V6_vgt##TYPE##_and, "Qx4&=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-and", \ + VCMPGT_HF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), &, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE##_xor, "Qx4^=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-xor", \ + VCMPGT_HF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), ^, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE##_or, "Qx4|=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE2= ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-or", \ + VCMPGT_HF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), |, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE, "Qd4=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than", \ + VCMPGT_HF(QdV, , , ">", N, SRC, MASK, WIDTH)) + +MMVEC_CMPGT_SF(sf,"sf","Vector sf Compare ", fVELEM(32), 0xF, 4, sf) +MMVEC_CMPGT_HF(hf,"hf","Vector hf Compare ", fVELEM(16), 0x3, 2, hf) + /*************************************************************************= ***** DEBUG Vector/Register Printing *************************************************************************= *****/ --=20 2.37.2 From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271855; cv=none; d=zohomail.com; s=zohoarc; b=gF2v1TKqDnyTv8QvmH3duqXVjQC7KrYLxSyE+rQ542Dd1kZl5S15kHXUx/NdrC06DWA20BJl8NoDOJKCdhTlwxVR+looAoJ/dvg/eY8f/EdrSg808LzgdjYPBcL0OVudC77/eCNbKX/dXwMo7ZiGAUF+0EG4d+UkIKefzvOPXC4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271855; 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=nncu3t7ihMb7k526f+gk25Y9drXeyPy+eVtfolGEQOM=; b=VXgtvQkC0Z+U6G7j2LDGFqaOZD6WyDpihiQ4+9Prsr0h080NCurwMcVhMyalrQfcjyn40qIghHv6oN/Ja+fCaJmKu5ennVf4SM3j7DLpoQk5eT84DXYOyU8S8qJjxNoT7NrZ61EgnHD2/yMUVHhPYtVJZmIgXWhQiI2QUUR0PJ4= 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 1774271855146478.97577732910247; Mon, 23 Mar 2026 06:17:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f8h-0000HZ-CG; Mon, 23 Mar 2026 09:16:15 -0400 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 1w4f8Y-0000G3-Nb for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:07 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8W-0000MN-7K for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:06 -0400 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NCegDN2475971 for ; Mon, 23 Mar 2026 13:16:03 GMT Received: from mail-dy1-f199.google.com (mail-dy1-f199.google.com [74.125.82.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d35r203fj-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:16:03 +0000 (GMT) Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-2c0e264d802so12704842eec.0 for ; Mon, 23 Mar 2026 06:16:03 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.16.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:16:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=nncu3t7ihMb 7k526f+gk25Y9drXeyPy+eVtfolGEQOM=; b=kFkeM25JRT2dMhR7iLhtKbpUTNS IMEyPBwO69lzTL9+RgKQ4s2Zb51JG+7IBgySlJ2snBscafWuw4XPFCLKGe+8ozEO oEjHQDJyfD4xKRfpK1a7gyFtqcwaFvjsOastbYZIO3hu5GG5ZPZwQ3twecO5fu5R uX4uzjBmJSp2rOeK2HVyh8dkglyiJU/7qmUDbFrAwEd5Abijhh+uEIt47tNUkCvK 0FmD9AIwKc+CPd/1gObVVEXFXor7kApVnx+YRRzi1NE0o+ydoss76S6GM8raorq9 PWrNFMVpUvhXqf8n6vEvq13SEmKz5W15BT9LOxwWyS+iYFlVfm8MD2lYD/A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271762; x=1774876562; 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=nncu3t7ihMb7k526f+gk25Y9drXeyPy+eVtfolGEQOM=; b=PJkkME8HRXB6Z0ZHyVThVTTjk9xfDqoHe9WQkpp86gx5XYwUMm1NStx/Z9bXCsw3c7 v2999lmOZI5bDrVphTD0YtnoAxYc5MCgphOTFsyoQq8k2HRQH9gyBeVzlRtrKXa22Mcb oMoSBvmDltJLizVtriY/wyyJ5kDNhB2bDFPn5bB6hv5ZqCY3N8Xhr8bpfgR1oCRS65ay nM/A1ykPA/RKWwvi70J0JlNyTrAgsGqdqmzZ8FFr0JKhqPdW9YyjS4VYH4c/esXyshU9 ToWZrhfJ6//VzyF8GsGy3jOm2Enf9BdQj7otJBmowl6Am0rcdcs+7YKsVk6VkoTnQO1O XlQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271762; x=1774876562; 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=nncu3t7ihMb7k526f+gk25Y9drXeyPy+eVtfolGEQOM=; b=HV+izYY7xBNdQthbaohNR/pyLwNvxMftfb7vqVK6svNZeWKuY9zyJpyZv/mAJVmpBv sm38ykkz7mRiLTifdfbR8/2od91GxVTocJpZ83yAF5CAMRHGT90MYFUoj3pXAxfjuvEg 2x/02OcMkxPhuond0PVqOeqj4HAEKvZwPsbo2rbJuvxzCZaGBBcBa6KxeESU2LEV2Jtt 8x8HrfSNW+mKZSwkUD6t5bpqgdzmRuKi92+dcjtmypzMezEs/dTlF//mFWbSiVmEyd5O /hxiUHx367LcnYzVvvfBZ47/48njoOHsjDp0HFJBABZNJCGeTc4H2mOTf7r1MIFhVGa9 q1rQ== X-Gm-Message-State: AOJu0YxohcQNKkby6HL+/YVP8N8hLn9sZTXxBXv1KjQjGDkBw4p3MTDL 4TaVnuHu2A9UMLpvIUSLgIm5GsZYxtrhykzGM44mGGmLJPuTCsi939bJOY1nAISFBQHEHAXcYuU p9ESSWjHH+SHVWnhSm8OMfusCkyAVE/cpuTQEcrrughys5H5GbgGKUpsdMsivj2x5I1D+ X-Gm-Gg: ATEYQzzYw+VEQ5ZopMv1qytSKFKT11AxoAqQPtPxvO8TBJNiYv1S7ehLX4lc72bmh/s Dr02+12px3JYlAHIoTe62xqdzf79j6xJ9i8hrkSYq7KulBe0m3FBzvEuwhlG2UlnRRVrGwtldbf 5hkOhtFfBdXhm8daTDZA3myXKn3FznnEcNQlEhJV9khLOBX8qWTqnq+MLQFMHnWSN50OXIVnqBX LhDwjuqXmxVzOMk+vTmBaIpqT3SV6zInm3aHmL2TiO+pDJY2koqln7HGKD7Cc3zO0fH6MPfMKd0 wCplBfu0rDR5u4k4sJTxiCoxQBKYFs9jo3rxuYZKVy+/BkOzWp0QCmN5q4uV2XDcp0EWCcNdAfm T+N9U14GVXns9lntXemIwu7lSDAWZxeeKFmwHKwq/GSYBpxj2/M7R2q/QX3DaVGNDEAGPfIuvGk bEC9XbCUmy X-Received: by 2002:a05:7300:5707:b0:2c0:d690:7b9 with SMTP id 5a478bee46e88-2c10970eb6dmr6179315eec.22.1774271761648; Mon, 23 Mar 2026 06:16:01 -0700 (PDT) X-Received: by 2002:a05:7300:5707:b0:2c0:d690:7b9 with SMTP id 5a478bee46e88-2c10970eb6dmr6179296eec.22.1774271760828; Mon, 23 Mar 2026 06:16:00 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH 09/13] target/hexagon: add v73 HVX IEEE bfloat16 insns Date: Mon, 23 Mar 2026 06:15:45 -0700 Message-Id: <003328f47c0b5e286ef06ba55cc9734e7bba4af8.1774271525.git.matheus.bernardino@oss.qualcomm.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=VvUuwu2n c=1 sm=1 tr=0 ts=69c13d13 cx=c_pps a=cFYjgdjTJScbgFmBucgdfQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=RUNPfk55iMBok5ld-isA:9 a=scEy_gLbYbu1JhEsrz4S:22 X-Proofpoint-GUID: JiWAiCRp6bUnp3JuSlXFpdSNMLBvUBW6 X-Proofpoint-ORIG-GUID: JiWAiCRp6bUnp3JuSlXFpdSNMLBvUBW6 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfX4LyEJl6y6zUd 3cIJ+/Fn6YV9JvV3oIQmooNuIkPqdD9QyNSLTLmKmpFaVnHz1RZ3PKWg3SdWO61X/0GqvnLRPVy cwqJZ0XjdnyUZjOIYymYGenbdhSr5e/ISm2jFxJbYXkjtJ95qeAayM1Nj1cr6XPZQi/VSz5QETE CZ2UDiP/TDXYY7EAjeQipkVkSZmLiL15TIW7rG/qMXhKbWqUogjeoGnSgyk9QGMZddiVYYCZC9N GmklFqga4j4D8RKVLGs8E9xVeAvyw/S2yx6bE7XhW3LDAMWxnfeEG8g4wnnFxNuw6z+A2yZHH2e Y0RTXHQyKQzeEPYmB1oKvfTHYMytC8mG5qddzxp0Pz6hwOPCN2JX5whGnk0YNh244T/kaDz+pOS QVJ5jmy7dizVoZprMNnYmxOxXj06f0/MSITq/jerOxs/1qvzTCpjevtgSFZ8oRvRV3oHbBjckkb Vm9fQsA2gAGITRNolHw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 spamscore=0 adultscore=0 lowpriorityscore=0 impostorscore=0 bulkscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271858300154100 Content-Type: text/plain; charset="utf-8" Add HVX IEEE bfloat16 (bf16) instructions: Arithmetic operations: - V6_vadd_sf_bf, V6_vsub_sf_bf: add/sub bf16 widening to sf output - V6_vmpy_sf_bf: multiply bf16 widening to sf output - V6_vmpy_sf_bf_acc: multiply-accumulate bf16 widening to sf output Min/Max operations: - V6_vmin_bf, V6_vmax_bf: bf16 min/max Comparison operations: - V6_vgtbf: greater-than compare - V6_vgtbf_and, V6_vgtbf_or, V6_vgtbf_xor: predicate variants Conversion operations: - V6_vcvt_bf_sf: convert sf to bf16 Signed-off-by: Matheus Tavares Bernardino --- target/hexagon/mmvec/kvx_ieee.h | 36 +++++++++++ target/hexagon/mmvec/macros.h | 5 ++ target/hexagon/mmvec/mmvec.h | 1 + target/hexagon/mmvec/kvx_ieee.c | 3 + target/hexagon/imported/mmvec/encode_ext.def | 15 +++++ target/hexagon/imported/mmvec/ext.idef | 64 ++++++++++++++++++++ 6 files changed, 124 insertions(+) diff --git a/target/hexagon/mmvec/kvx_ieee.h b/target/hexagon/mmvec/kvx_iee= e.h index 8a6816f6b3..eb670d4ec3 100644 --- a/target/hexagon/mmvec/kvx_ieee.h +++ b/target/hexagon/mmvec/kvx_ieee.h @@ -80,4 +80,40 @@ int16_t conv_hf_h(int16_t a, float_status *fp_status); int32_t conv_w_sf(uint32_t a, float_status *fp_status); int16_t conv_h_hf(uint16_t a, float_status *fp_status); =20 +/* IEEE BFloat instructions */ + +#define fp_mult_sf_bf(A, B) \ + fp_mult_sf_sf(((uint32_t)(A)) << 16, ((uint32_t)(B)) << 16, &env->fp_s= tatus) +#define fp_add_sf_bf(A, B) \ + fp_add_sf_sf(((uint32_t)(A)) << 16, ((uint32_t)(B)) << 16, &env->fp_st= atus) +#define fp_sub_sf_bf(A, B) \ + fp_sub_sf_sf(((uint32_t)(A)) << 16, ((uint32_t)(B)) << 16, &env->fp_st= atus) + +uint32_t fp_mult_sf_bf_acc(uint16_t op1, uint16_t op2, uint32_t acc, + float_status *fp_status); + +#define bf_to_sf(A) (((uint32_t)(A)) << 16) + +#define fp_min_bf(A, B) ({ \ + uint32_t _bf_res =3D fp_min_sf(bf_to_sf(A), bf_to_sf(B), &env->fp_stat= us); \ + (uint16_t)((_bf_res >> 16) & 0xffff); \ +}) + +#define fp_max_bf(A, B) ({ \ + uint32_t _bf_res =3D fp_max_sf(bf_to_sf(A), bf_to_sf(B), &env->fp_stat= us); \ + (uint16_t)((_bf_res >> 16) & 0xffff); \ +}) + +static inline uint16_t sf_to_bf(int32_t A) +{ + uint32_t rslt =3D A; + if ((rslt & 0x1FFFF) =3D=3D 0x08000) { + /* do not round up if exactly .5 and even already */ + } else if ((rslt & 0x8000) =3D=3D 0x8000) { + rslt +=3D 0x8000; /* rounding to nearest number */ + } + rslt =3D float32_is_any_nan(A) ? FP32_DEF_NAN : rslt; + return rslt >> 16; +} + #endif diff --git a/target/hexagon/mmvec/macros.h b/target/hexagon/mmvec/macros.h index c342507d1a..b70996578e 100644 --- a/target/hexagon/mmvec/macros.h +++ b/target/hexagon/mmvec/macros.h @@ -25,6 +25,9 @@ #include "accel/tcg/probe.h" #include "mmvec/kvx_ieee.h" =20 +#define fBFLOAT() +#define fCVI_VX_NO_TMP_LD() + #ifndef QEMU_GENERATE #define VdV (*(MMVector *restrict)(VdV_void)) #define VsV (*(MMVector *restrict)(VsV_void)) @@ -366,4 +369,6 @@ (int16_t)(A) > (int16_t)(B) : \ float16_compare((A), (B), &env->fp_status) =3D=3D float_relation_great= er) =20 +#define fCMPGT_BF(A, B) fCMPGT_SF(((int)A) << 16, ((int)B) << 16) + #endif diff --git a/target/hexagon/mmvec/mmvec.h b/target/hexagon/mmvec/mmvec.h index eaedfe0d6d..9d8d57c7c6 100644 --- a/target/hexagon/mmvec/mmvec.h +++ b/target/hexagon/mmvec/mmvec.h @@ -40,6 +40,7 @@ typedef union { int8_t b[MAX_VEC_SIZE_BYTES / 1]; int32_t sf[MAX_VEC_SIZE_BYTES / 4]; /* single float (32-bit) */ int16_t hf[MAX_VEC_SIZE_BYTES / 2]; /* half float (16-bit) */ + uint16_t bf[MAX_VEC_SIZE_BYTES / 2]; /* bfloat16 */ } MMVector; =20 typedef union { diff --git a/target/hexagon/mmvec/kvx_ieee.c b/target/hexagon/mmvec/kvx_iee= e.c index bbeec09707..b5c434ad6d 100644 --- a/target/hexagon/mmvec/kvx_ieee.c +++ b/target/hexagon/mmvec/kvx_ieee.c @@ -229,3 +229,6 @@ int16_t conv_h_hf(uint16_t a, float_status *fp_status) } return float16_to_int16_round_to_zero(f1, fp_status); } + +DEF_FP_INSN_3(mult_sf_bf_acc, 32, 16, 16, 32, + float32_muladd(bf_to_sf(f1), bf_to_sf(f2), f3, 0, fp_status)) diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 3f84a1691b..352a8ec14b 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -869,4 +869,19 @@ DEF_ENC(V6_vgthf_or,"00011100100vvvvvPP1uuuuu001101xx") DEF_ENC(V6_vgtsf_xor,"00011100100vvvvvPP1uuuuu111010xx") DEF_ENC(V6_vgthf_xor,"00011100100vvvvvPP1uuuuu111011xx") =20 +/* BFLOAT instructions */ +DEF_ENC(V6_vmpy_sf_bf,"00011101010vvvvvPP1uuuuu100ddddd") +DEF_ENC(V6_vmpy_sf_bf_acc,"00011101000vvvvvPP1uuuuu000xxxxx") +DEF_ENC(V6_vadd_sf_bf,"00011101010vvvvvPP1uuuuu110ddddd") +DEF_ENC(V6_vsub_sf_bf,"00011101010vvvvvPP1uuuuu101ddddd") +DEF_ENC(V6_vmax_bf,"00011101010vvvvvPP1uuuuu111ddddd") +DEF_ENC(V6_vmin_bf,"00011101010vvvvvPP1uuuuu000ddddd") +DEF_ENC(V6_vcvt_bf_sf,"00011101010vvvvvPP1uuuuu011ddddd") + +/* BFLOAT compare instructions */ +DEF_ENC(V6_vgtbf,"00011100100vvvvvPP1uuuuu011110dd") +DEF_ENC(V6_vgtbf_and,"00011100100vvvvvPP1uuuuu110100xx") +DEF_ENC(V6_vgtbf_or,"00011100100vvvvvPP1uuuuu001110xx") +DEF_ENC(V6_vgtbf_xor,"00011100100vvvvvPP1uuuuu111100xx") + #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index 304c4966d8..afe9de3716 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -3149,6 +3149,15 @@ ITERATOR_INSN_SHIFT_SLOT_FLT(16, vconv_hf_h,"Vd32.hf= =3DVu32.h", } \ } =20 +#define VCMPGT_BF(DEST, ASRC, ASRCOP, CMP, N, SRC, MASK, WIDTH) \ +{ \ + fBFLOAT(); \ + for (fHIDE(int) i =3D 0; i < fVBYTES(); i +=3D WIDTH) { \ + fHIDE(int) VAL =3D fCMPGT_BF(VuV.SRC[i/WIDTH],VvV.SRC[i/WIDTH]) ? = MASK : 0; \ + fSETQBITS(DEST,WIDTH,MASK,i,ASRC ASRCOP VAL); \ + } \ +} + /* Vector SF compare */ #define MMVEC_CMPGT_SF(TYPE,TYPE2,DESCR,N,MASK,WIDTH,SRC) \ EXTINSN(V6_vgt##TYPE##_and, "Qx4&=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")", \ @@ -3187,8 +3196,63 @@ ITERATOR_INSN_SHIFT_SLOT_FLT(16, vconv_hf_h,"Vd32.hf= =3DVu32.h", DESCR" greater than", \ VCMPGT_HF(QdV, , , ">", N, SRC, MASK, WIDTH)) =20 +/* Vector BF compare */ +#define MMVEC_CMPGT_BF(TYPE,TYPE2,DESCR,N,MASK,WIDTH,SRC) \ + EXTINSN(V6_vgt##TYPE##_and, "Qx4&=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")",\ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-and", \ + VCMPGT_BF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), &, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE##_xor, "Qx4^=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE= 2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-xor", \ + VCMPGT_BF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), ^, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE##_or, "Qx4|=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE2= ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than with predicate-or", \ + VCMPGT_BF(QxV, fGETQBITS(QxV,WIDTH,MASK,i), |, ">", N, SRC, MASK, = WIDTH)) \ + EXTINSN(V6_vgt##TYPE, "Qd4=3Dvcmp.gt(Vu32." TYPE2 ",Vv32." TYPE2 ")", \ + ATTRIBS(A_EXTENSION,A_CVI,A_CVI_VA,A_CVI_VA_2SRC,A_HVX_FLT), \ + DESCR" greater than", \ + VCMPGT_BF(QdV, , , ">", N, SRC, MASK, WIDTH)) + MMVEC_CMPGT_SF(sf,"sf","Vector sf Compare ", fVELEM(32), 0xF, 4, sf) MMVEC_CMPGT_HF(hf,"hf","Vector hf Compare ", fVELEM(16), 0x3, 2, hf) +MMVEC_CMPGT_BF(bf,"bf","Vector bf Compare ", fVELEM(16), 0x3, 2, bf) + +/*************************************************************************= ***** + BFloat arithmetic and max/min instructions + *************************************************************************= *****/ + +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vadd_sf_bf, + "Vdd32.sf=3Dvadd(Vu32.bf,Vv32.bf)", "Vector IEEE add: bf widen to sf", + VddV.v[0].sf[i] =3D fp_add_sf_bf(VuV.bf[2*i], VvV.bf[2*i]); + VddV.v[1].sf[i] =3D fp_add_sf_bf(VuV.bf[2*i+1], VvV.bf[2*i+1]); fBFLOA= T()) +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vsub_sf_bf, + "Vdd32.sf=3Dvsub(Vu32.bf,Vv32.bf)", "Vector IEEE sub: bf widen to sf", + VddV.v[0].sf[i] =3D fp_sub_sf_bf(VuV.bf[2*i], VvV.bf[2*i]); + VddV.v[1].sf[i] =3D fp_sub_sf_bf(VuV.bf[2*i+1], VvV.bf[2*i+1]); fBFLOA= T()) +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vmpy_sf_bf, + "Vdd32.sf=3Dvmpy(Vu32.bf,Vv32.bf)", "Vector IEEE mul: hf widen to sf", + VddV.v[0].sf[i] =3D fp_mult_sf_bf(VuV.bf[2*i], VvV.bf[2*i]); + VddV.v[1].sf[i] =3D fp_mult_sf_bf(VuV.bf[2*i+1], VvV.bf[2*i+1]); fBFLO= AT()) +ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vmpy_sf_bf_acc, + "Vxx32.sf+=3Dvmpy(Vu32.bf,Vv32.bf)", "Vector IEEE fma: hf widen to sf", + VxxV.v[0].sf[i] =3D fp_mult_sf_bf_acc(VuV.bf[2*i], VvV.bf[2*i], + VxxV.v[0].sf[i], &env->fp_status); + VxxV.v[1].sf[i] =3D fp_mult_sf_bf_acc(VuV.bf[2*i+1], VvV.bf[2*i+1], + VxxV.v[1].sf[i], &env->fp_status); + fCVI_VX_NO_TMP_LD(); fBFLOAT()) +ITERATOR_INSN_IEEE_FP_16(32, vcvt_bf_sf, + "Vd32.bf=3Dvcvt(Vu32.sf,Vv32.sf)", "Vector IEEE cvt: sf to bf", + VdV.bf[2*i] =3D sf_to_bf(VuV.sf[i]); + VdV.bf[2*i+1] =3D sf_to_bf(VvV.sf[i]); fBFLOAT()) + +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vmax_bf, "Vd32.bf=3Dvmax(Vu32.bf,Vv32= .bf)", + "Vector IEEE max: bf", VdV.bf[i] =3D fp_max_bf(VuV.bf[i], VvV.bf[i]); + fBFLOAT()) +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vmin_bf, "Vd32.bf=3Dvmin(Vu32.bf,Vv32= .bf)", + "Vector IEEE max: bf", VdV.bf[i] =3D fp_min_bf(VuV.bf[i], VvV.bf[i]); + fBFLOAT()) =20 /*************************************************************************= ***** DEBUG Vector/Register Printing --=20 2.37.2 From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271809; cv=none; d=zohomail.com; s=zohoarc; b=S29BZbP8Hju9sYNvSfJgd8FRKVK62Q8BJQzGc//E8UYV15ilwvnRzGMKmBA+tpL+DDNj4ebXpJ0VgPjPUxSBJ4Zf54yyjRrJkTo/eDqBeaIGFXiC5L1QmvzPqgSDLAah1+zO01jzrFIUK9XAnkiIwLuMbxZcpM1Vae8t1S2nUQU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271809; 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=LWVCwCbLYg1i5yP2hcK3daGsPxhnZwCn9wr4vZH3grw=; b=GHwCVFV8egS/YTjSO4yBwGI0KiJxcPe++zYIph2Yh9fFPX5iyAkI4FD2xKj2SuZDJaioZuqMmxt5CAQwarKoNBDM8s6Fq+wz3UM5tDC4kPyD7tnBlkzNByxDvqO6PP+y7N/QaoICm5ZA9f8tC4GQHs0D60YFyJ92om+QYv9SO2E= 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 1774271809487811.360232935414; Mon, 23 Mar 2026 06:16:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f91-0000ST-7I; Mon, 23 Mar 2026 09:16:36 -0400 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 1w4f8k-0000Id-Cy for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:21 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8h-0000Mp-4Y for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:18 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NC29Pa3042122 for ; Mon, 23 Mar 2026 13:16:04 GMT Received: from mail-dl1-f70.google.com (mail-dl1-f70.google.com [74.125.82.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d355w07j2-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:16:04 +0000 (GMT) Received: by mail-dl1-f70.google.com with SMTP id a92af1059eb24-128edc72e5bso19361373c88.1 for ; Mon, 23 Mar 2026 06:16:03 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.16.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:16:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=LWVCwCbLYg1 i5yP2hcK3daGsPxhnZwCn9wr4vZH3grw=; b=Dyw3JSKwS5Hgz4dkbC7KSLKXbTk G2NOo3q1e7059lg//fCmzqxmIN8s+Ot9K+5oULDEdUeiB5RbVm9N10b4f9C7wKAU toNnEthW9YaQ0aP+HBDaR7WLkgsjXRpSt8QypfJEtJiHHVE91qOKnXdDU67YpXbJ QFVFujFM/0VZwZuiLM/W26dPS0rc/Z81PtdwO1tpR/R4SKXOVb5zNCpVDwqxuxb7 7svbvUfshz21rR6oO8sDzLChNblEsn0yUVFUukrB2obh2L/mWE6cgY0lSdi9GlKY 39RP3/30t26FT5Bj3sXy5qBAYaCbREgFE2v5eiQ0AwFBcCLPkxZUHjKMKGg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271763; x=1774876563; 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=LWVCwCbLYg1i5yP2hcK3daGsPxhnZwCn9wr4vZH3grw=; b=cjutDFJ/mH8WhWEWEp9qNxwvWPD5f3XctGVxZFKeKM9gf2qwLDCicdaxkYMi9CMyls FFqEF73oLmjBGLYP/2RKhibR4GYnun13V93CsabJ1c4SEiY2SfoqoRO9GEbphILFjPgN w/vvWR/v28+BT3zZXOfQwAYXJIqGzN7iN+YvMlvfZCKl8x0btWZV2v4UEc621653ns6z X3sCsMksExuCDkpXldRHnrgq1SykWbPHIovm550RN/yZxSkRQY4Kv1TWeVdDms3Do74m TAD+VBUy//7eZpyuFxcHatv+nHR97TzAAKBGB9VTAw3k7fsGkZVXfAEGteCe6HkLA/De V+dA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271763; x=1774876563; 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=LWVCwCbLYg1i5yP2hcK3daGsPxhnZwCn9wr4vZH3grw=; b=Lw6kNhCgmGwns+awxj8lFlNPaYsaiqp9ewATEMIHdEIH9olcEJxVbqpyo9eQ5HGtgJ mYHvtzSGNMaol31tacKE+cZgUROxcRA8uz1As+DcCz57M4ZM7mUHMiUKENTpL79+xhRZ 3m8s91oJjz0W0aE9pDBZGLcIsudpAzUu64d6hQi/z/aTcYWrhxLRNnDU0Sq9dJb15zC1 k/zRHPFrjDSUAptXQKwkTVWntuMakmJFBYO7PYh+rOI7AVxE5ShbZm1kvvFcOXYoR+89 hXfvi6GS//7T4DMyfMH8mQyCh/Qw/y+wIOp5q0sRsfFyZprjTQ7AXWhffjRQW62/PziP 5B+w== X-Gm-Message-State: AOJu0YxpK6wjl8kj7vw4jX6c3vaJ9XXtIOPZ2BQFJIDZmyrX4JHvZb+A 2hg4hw+cX2/nvv1sELl9nJ6FmuG+Wnot0GDStNrCr3LWq5q58guOG/z5n31tDKH9BC5VXQnQXKs T8PopoZjQKygkaJkTWr2lcp+AgoVXJUi49cAxQ8nRVBtKHMqFOpisZgif9bf32EOObknV X-Gm-Gg: ATEYQzwFR06H06Ww9hFrSv0BtkjeaDOiHl1yih9WkpA4JOxhdWem/q+5YQE8ise/uWJ nh0UncgZva1oNECImHqj7a91xSMYrLfE4Szpx0V016LV9F5SheP7iKmEoEL8sd/kssb2ahGOUqQ YaFgR/bEjZcIOYJ6xaWCtRf2bgECvDlUbFg9MueJ0AFyOVSyGO8oGwDtrxVY6x6Sa8JrVkMdzTt VMMMkIxd2xJsQ7dHHGReHTQO/55sNQY0zAmp7d5pJqtnLaM5xp7HvrXs/lZNJeZG0YEGqAUHqpL +eJUZeyjUX999I6SxVg/d91nJDNK26/r3suotocu6m23YQpMcSEUsVfi0KJg/UCG2C4G5scDa6L Ihqvs1w9WDVYoarmRUOWQS0ZSI/5kCuIucsQBo3G2cXo0lE2k0vcVVsLl5f0ekhhUmoqFPR0oAn z1fI1Rzh4d X-Received: by 2002:a05:7022:e1e:b0:124:9acd:3b15 with SMTP id a92af1059eb24-12a726f86cemr5804142c88.39.1774271762703; Mon, 23 Mar 2026 06:16:02 -0700 (PDT) X-Received: by 2002:a05:7022:e1e:b0:124:9acd:3b15 with SMTP id a92af1059eb24-12a726f86cemr5804099c88.39.1774271761847; Mon, 23 Mar 2026 06:16:01 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH 10/13] tests/hexagon: add tests for v68 HVX IEEE float arithmetics Date: Mon, 23 Mar 2026 06:15:46 -0700 Message-Id: <82c5487435a72c68ceec1c09dd6fb986409328e1.1774271525.git.matheus.bernardino@oss.qualcomm.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=fq7RpV4f c=1 sm=1 tr=0 ts=69c13d14 cx=c_pps a=SvEPeNj+VMjHSW//kvnxuw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=LraSumSEs8G2_VdLntMA:9 a=Kq8ClHjjuc5pcCNDwlU0:22 X-Proofpoint-ORIG-GUID: DwX32lhYosGqxH0465yBfrvgm7RQzNKw X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfX0+vYDYVUSCTf tu23JTCsjRViqcolReJI790rh8nZsySxE96/M3PFKrcOaJJFrsUtJQvldgsBYo4LQ4DKLmo6uE0 IJ6+U7FvWrSwjfNQJj+pDLnPlJou/auAgH/t/MVCEab3pn+I9oIsRjCcNdoVZoGQ8J2JRJQ4Qa2 l7QPXLjfREMzYpQfldUVDT9KeRSTCvVZVrwejck16ECI/yZuNRjGuwgy7w3vYsgY8r8pRahTXuZ rJH35Q5cWnW0qZo/6uZ7qjhreZKaBD/d+viLGYm1Nd6D21w6eq2e9n5ykz9erR3sW0dZB9/AQKI thQhnEKrGNIqvXqLiWozzJ9pGYye1PkvP/4kzFlzVga4y1tMj0uLCks98T1oSfmDKxxpzgYYilo eZbBdob0HnqrBynPYJ5EkEiXAcFde1OsviKVYq/eESt0nmfvLkUUF073x2VbpyQLMqMJiYznULv wcwdEY/Ntm76oWSJ+eQ== X-Proofpoint-GUID: DwX32lhYosGqxH0465yBfrvgm7RQzNKw X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 adultscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271811842154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Matheus Tavares Bernardino --- tests/tcg/hexagon/hvx_misc.h | 12 +++ tests/tcg/hexagon/fp_hvx.c | 129 ++++++++++++++++++++++++++++ tests/tcg/hexagon/fp_hvx_disabled.c | 32 +++++++ tests/tcg/hexagon/Makefile.target | 8 ++ 4 files changed, 181 insertions(+) create mode 100644 tests/tcg/hexagon/fp_hvx.c create mode 100644 tests/tcg/hexagon/fp_hvx_disabled.c diff --git a/tests/tcg/hexagon/hvx_misc.h b/tests/tcg/hexagon/hvx_misc.h index 2e868340fd..771a4a22b6 100644 --- a/tests/tcg/hexagon/hvx_misc.h +++ b/tests/tcg/hexagon/hvx_misc.h @@ -34,8 +34,10 @@ typedef union { uint64_t ud[MAX_VEC_SIZE_BYTES / 8]; int64_t d[MAX_VEC_SIZE_BYTES / 8]; uint32_t uw[MAX_VEC_SIZE_BYTES / 4]; + uint32_t sf[MAX_VEC_SIZE_BYTES / 4]; /* convenience alias */ int32_t w[MAX_VEC_SIZE_BYTES / 4]; uint16_t uh[MAX_VEC_SIZE_BYTES / 2]; + uint16_t hf[MAX_VEC_SIZE_BYTES / 2]; /* convenience alias */ int16_t h[MAX_VEC_SIZE_BYTES / 2]; uint8_t ub[MAX_VEC_SIZE_BYTES / 1]; int8_t b[MAX_VEC_SIZE_BYTES / 1]; @@ -63,7 +65,9 @@ static inline void check_output_##FIELD(int line, size_t = num_vectors) \ =20 CHECK_OUTPUT_FUNC(d, 8) CHECK_OUTPUT_FUNC(w, 4) +CHECK_OUTPUT_FUNC(sf, 4) CHECK_OUTPUT_FUNC(h, 2) +CHECK_OUTPUT_FUNC(hf, 2) CHECK_OUTPUT_FUNC(b, 1) =20 static inline void init_buffers(void) @@ -175,4 +179,12 @@ static inline void test_##NAME(bool invert) \ check_output_b(__LINE__, BUFSIZE); \ } =20 +#define float_sf(x) ({ typeof(x) _x =3D (x); *((float *)&(_x)); }) +#define float_hf(x) ({ typeof(x) _x =3D (x); *((_Float16 *) &(_x)); }) +#define raw_sf(x) ({ typeof(x) _x =3D (x); *((uint32_t *)&(_x)); }) +#define raw_hf(x) ({ typeof(x) _x =3D (x); *((uint16_t *)&(_x)); }) +#define float_hf_to_sf(x) ((float)x) +#define bytes_hf 2 +#define bytes_sf 4 + #endif diff --git a/tests/tcg/hexagon/fp_hvx.c b/tests/tcg/hexagon/fp_hvx.c new file mode 100644 index 0000000000..85b8ff78ed --- /dev/null +++ b/tests/tcg/hexagon/fp_hvx.c @@ -0,0 +1,129 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include +#include +#include + +int err; +#include "hvx_misc.h" + +#if __HEXAGON_ARCH__ > 75 +#error "After v75, compiler will replace some FP HVX instructions." +#endif + +/*************************************************************************= ***** + * NAN handling + *************************************************************************= ****/ + +#define isnan(X) \ + (sizeof(X) =3D=3D bytes_hf ? ((raw_hf(X) & ~0x8000) > 0x7c00) : \ + ((raw_sf(X) & ~(1 << 31)) > 0x7f800000UL)) + +#define CHECK_NAN(A, DEF_NAN) (isnan(A) ? DEF_NAN : (A)) +#define NAN_SF float_sf(0x7FFFFFFF) +#define NAN_HF float_hf(0x7FFF) + +/*************************************************************************= ***** + * Binary operations + *************************************************************************= ****/ + +#define DEF_TEST_OP_2(vop, op, type_res, type_arg) \ + static void test_##vop##_##type_res##_##type_arg(void) \ + { \ + memset(expect, 0xff, sizeof(expect)); \ + memset(output, 0xff, sizeof(expect)); \ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; \ + HVX_Vector hvx_buffer0 =3D *(HVX_Vector *)&buffer0[0]; \ + HVX_Vector hvx_buffer1 =3D *(HVX_Vector *)&buffer1[0]; \ + \ + *hvx_output =3D \ + Q6_V##type_res##_##vop##_V##type_arg##V##type_arg(hvx_buffer0,= \ + hvx_buffer1)= ; \ + \ + for (int i =3D 0; i < MAX_VEC_SIZE_BYTES / bytes_##type_res; i++) = { \ + expect[0].type_res[i] =3D \ + raw_##type_res(op(float_##type_arg(buffer0[0].type_arg[i])= , \ + float_##type_arg(buffer1[0].type_arg[i])= )); \ + } \ + check_output_##type_res(__LINE__, 1); \ + } + +#define SUM(X, Y, DEF_NAN) CHECK_NAN((X) + (Y), DEF_NAN) +#define SUB(X, Y, DEF_NAN) CHECK_NAN((X) - (Y), DEF_NAN) +#define MULT(X, Y, DEF_NAN) CHECK_NAN((X) * (Y), DEF_NAN) + +#define SUM_SF(X, Y) SUM(X, Y, NAN_SF) +#define SUM_HF(X, Y) SUM(X, Y, NAN_HF) +#define SUB_SF(X, Y) SUB(X, Y, NAN_SF) +#define SUB_HF(X, Y) SUB(X, Y, NAN_HF) +#define MULT_SF(X, Y) MULT(X, Y, NAN_SF) +#define MULT_HF(X, Y) MULT(X, Y, NAN_HF) + +DEF_TEST_OP_2(vadd, SUM_SF, sf, sf); +DEF_TEST_OP_2(vadd, SUM_HF, hf, hf); +DEF_TEST_OP_2(vsub, SUB_SF, sf, sf); +DEF_TEST_OP_2(vsub, SUB_HF, hf, hf); +DEF_TEST_OP_2(vmpy, MULT_SF, sf, sf); +DEF_TEST_OP_2(vmpy, MULT_HF, hf, hf); + +/*************************************************************************= ***** + * Other tests + *************************************************************************= ****/ + +void test_vdmpy_sf_hf(bool acc) +{ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; + HVX_Vector hvx_buffer0 =3D *(HVX_Vector *)&buffer0[0]; + HVX_Vector hvx_buffer1 =3D *(HVX_Vector *)&buffer1[0]; + + uint32_t PREFIL_VAL =3D 0x111222; + memset(expect, 0xff, sizeof(expect)); + *hvx_output =3D Q6_V_vsplat_R(PREFIL_VAL); + + if (!acc) { + *hvx_output =3D Q6_Vsf_vdmpy_VhfVhf(hvx_buffer0, hvx_buffer1); + } else { + *hvx_output =3D Q6_Vsf_vdmpyacc_VsfVhfVhf(*hvx_output, hvx_buffer0, + hvx_buffer1); + } + + for (int i =3D 0; i < MAX_VEC_SIZE_BYTES / 4; i++) { + float a1 =3D float_hf_to_sf(float_hf(buffer0[0].hf[2 * i + 1])); + float a2 =3D float_hf_to_sf(float_hf(buffer0[0].hf[2 * i])); + float a3 =3D float_hf_to_sf(float_hf(buffer1[0].hf[2 * i + 1])); + float a4 =3D float_hf_to_sf(float_hf(buffer1[0].hf[2 * i])); + float prev =3D acc ? float_sf(PREFIL_VAL) : 0; + expect[0].sf[i] =3D raw_sf(CHECK_NAN((a1 * a3) + (a2 * a4) + prev,= NAN_SF)); + } + + check_output_sf(__LINE__, 1); +} + +int main(void) +{ + init_buffers(); + + /* add/sub */ + test_vadd_sf_sf(); + test_vadd_hf_hf(); + test_vsub_sf_sf(); + test_vsub_hf_hf(); + + /* multiply */ + test_vmpy_sf_sf(); + test_vmpy_hf_hf(); + + /* dot product */ + test_vdmpy_sf_hf(false); + test_vdmpy_sf_hf(true); + + puts(err ? "FAIL" : "PASS"); + return err ? 1 : 0; +} diff --git a/tests/tcg/hexagon/fp_hvx_disabled.c b/tests/tcg/hexagon/fp_hvx= _disabled.c new file mode 100644 index 0000000000..af409ab8d2 --- /dev/null +++ b/tests/tcg/hexagon/fp_hvx_disabled.c @@ -0,0 +1,32 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include + +int err; +#include "hvx_misc.h" + +int main(void) +{ + asm volatile("r0 =3D #0xff\n" + "v0 =3D vsplat(r0)\n" + "vmem(%1 + #0) =3D v0\n" + "r1 =3D #0x1\n" + "v1 =3D vsplat(r1)\n" + "v2 =3D vsplat(r1)\n" + "v0.sf =3D vadd(v1.sf, v2.sf)\n" + "vmem(%0 + #0) =3D v0\n" + : + : "r"(output), "r"(expect) + : "r0", "r1", "v0", "v1", "v2", "memory"); + + check_output_w(__LINE__, 1); + puts(err ? "FAIL" : "PASS"); + return err ? 1 : 0; +} diff --git a/tests/tcg/hexagon/Makefile.target b/tests/tcg/hexagon/Makefile= .target index a70ef2f660..16072c96fd 100644 --- a/tests/tcg/hexagon/Makefile.target +++ b/tests/tcg/hexagon/Makefile.target @@ -50,6 +50,8 @@ HEX_TESTS +=3D vector_add_int HEX_TESTS +=3D scatter_gather HEX_TESTS +=3D hvx_misc HEX_TESTS +=3D hvx_histogram +HEX_TESTS +=3D fp_hvx +HEX_TESTS +=3D fp_hvx_disabled HEX_TESTS +=3D invalid-slots HEX_TESTS +=3D invalid-encoding HEX_TESTS +=3D multiple-writes @@ -123,6 +125,12 @@ v68_hvx: CFLAGS +=3D -mhvx -Wno-unused-function v69_hvx: v69_hvx.c hvx_misc.h v69_hvx: CFLAGS +=3D -mhvx -Wno-unused-function v73_scalar: CFLAGS +=3D -Wno-unused-function +fp_hvx: fp_hvx.c hvx_misc.h +fp_hvx: CFLAGS +=3D -mhvx -mhvx-ieee-fp +fp_hvx_disabled: fp_hvx_disabled.c hvx_misc.h +fp_hvx_disabled: CFLAGS +=3D -mhvx -mhvx-ieee-fp + +run-fp_hvx_disabled: QEMU_OPTS +=3D -cpu v73,ieee-fp=3Dfalse =20 hvx_histogram: hvx_histogram.c hvx_histogram_row.S $(CC) $(CFLAGS) $(CROSS_CC_GUEST_CFLAGS) $^ -o $@ $(LDFLAGS) --=20 2.37.2 From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271889; cv=none; d=zohomail.com; s=zohoarc; b=SOOBSl5QQ3B1BhFw4yVoa/q4eqBpz0EBP19OwJs5x6coE+mDSDRXWL86LPvGv6vF0a3uH7+gmLpUGgGPJlEd72NvtNW4dPkTyd+gQQ5sTHZcjxDXFdJ1jovfU1oi7Xfe7UiHg0PqtKjpN1v6/bSrZAJQ0fnaLLAzykv0b48RzxE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271889; 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=pmIXsZGoP1S2sx8U8Y5xa8Km1onyIRUsMobLhRC9lrU=; b=mhk+XG00u0HrpP/iacpMJJBeJJjqP6khRO6w8qv18XcYwolQ5e0rWi1rFeMsn5mCFNPf0u3uBV1/IZmv0hl6eWvK1ZO4fkpfyCO4uxt0RAsMIdSqRB4IOwIb6OLSzHjA3FWvunTxzCmZYuFFEDatfUY+12OFRQotL/wJGCloUKQ= 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 1774271889252732.3575309005164; Mon, 23 Mar 2026 06:18:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f8q-0000KC-3h; Mon, 23 Mar 2026 09:16:24 -0400 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 1w4f8k-0000IZ-1n for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:21 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8i-0000N4-Gi for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:17 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NAJpBk1584563 for ; Mon, 23 Mar 2026 13:16:05 GMT Received: from mail-dy1-f197.google.com (mail-dy1-f197.google.com [74.125.82.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d1jng5fvu-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:16:05 +0000 (GMT) Received: by mail-dy1-f197.google.com with SMTP id 5a478bee46e88-2ba8013a9e3so145539eec.0 for ; Mon, 23 Mar 2026 06:16:05 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.16.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:16:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=pmIXsZGoP1S 2sx8U8Y5xa8Km1onyIRUsMobLhRC9lrU=; b=MpMwI7bgckRf7upOctVlhRfkA7A WTQ3yqZ0NAw2PZyAF4tO2zRucheYjiWHyEg2w9droLkCb0bY+KgBVbY8pY4+otM/ IkxgQ6UbT6XWOBHOVaq2FnXCCMTI9QG8BmvEr9d7yrAxWvlxszjXWUBfV2EHsFF5 TfWNdf86jeWHJZKZ9JOX3FPctGfdjsEe8dlXoVtM2eopfiLiMHziZHDIysjGViF8 jmSo+dt7Wx0+j9GC8tGs4w0oE9oLIIMLk2B/XnrVCDcRMd8Yl9yRImyInx5LBt8c zzZMjEfGSsgEyrTRKE/LsaviTkyJKJotH4NxmX/ly1+5zNPYiHCYOokod+g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271764; x=1774876564; 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=pmIXsZGoP1S2sx8U8Y5xa8Km1onyIRUsMobLhRC9lrU=; b=X5FbaGytGxs4FuJSfsEQQ84WjHuMb0l5QEpwxDAnQye/0eHuQewZdVhGIxEqjq0x8N q5GOa1BDDN8kqKrzJsKqkkY+B7Sx70iGCndtdwr8c4+CzWb8CAaMVCgBZfq2mO3n97LS i9WG9l5ztRWcmLtXSTujcOGpUiIRCvnC8C6Rs41dSau0ASSgITU+Jpl7By5QqLjgBgO2 uA0rDrc8/rk6qg1UE8dy9cRepxorsUb3Y1fboCMutAgGtxCdqQNW1kn4wL0j7OaNjjaw 9loDw1N8AEOR43E4W6+Qibedjc9CCaWYFYDU7m2CH/rNoKatsvUdKzY8p/4aio7xHkSP wt+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271764; x=1774876564; 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=pmIXsZGoP1S2sx8U8Y5xa8Km1onyIRUsMobLhRC9lrU=; b=BQ3WoVIy8ZF2WPvZ7iOmJvG8KSAhbjQSB58Enj4YoPtFx27zwTF/DMVWHEUyBeMMWC JJsfzJyIX16p9leo7exv0e9VDn4WqYQy1jaYXH5M8zmy7YEF45X2roii61zd9enILNAs Ji1lzvIA1JZ8kPr3FRMpJ6nlzytMKVl5SrD34R6XdeRRpxSg0i3HKTexyEwMKUbMqUCL +9l8266ax3Uh9ABL4uxTxf4JW5AlF1rZVIwAit7Dk4IXIz5mKXXpE1ByWfMmz+XNjzfv 2uIx8gQpqzJGwdPMAjGK7djve0LxTnJNCFiBZNPOVpCM0FB9m/tcqXuXegqcHzBUq9ap Ds8Q== X-Gm-Message-State: AOJu0Yw5SSebE4EjdOOWZNWcIka09PZiUFdprYKQbyfkoVERtEWvLdl+ MDVNE6zfS6V5glORljpnNlt3a5Q5KgLD+e+bAic3f7NgTF3wrzjW/YQykTjfFft9FNS/MaB+sg5 pe//+bBmfU13hxQuaMIVV/gtmA/x9hiLvjc4IZ51b2pi4vR2JKqRCTNQHlwMIfzs9XPBn X-Gm-Gg: ATEYQzx4c2LWDXG/EEbxrmliIwIklOMSjh7VqWG0OXKYNZRy2gZPyqO2WK5iJ9wy1a1 /A8K8vyoaWsDpz+q/eel9Xi+UWq1PCs5rUrS4izekPlUvIiLepdUh36MS7My+h80aoJGinjtA8a gSCSadHP8ecQP4jQb95kKDZtr8ipThNTuU55sbNXw7DfXLM4mcvPYvbGCW2noRcftJhKGX9b7zP 4hHu0c9OHIvvBnz9qvzmAlnL2B0zRcdG0zvFOF9vMDJ95LOa8FDLAvJS0FipXk7GDBcc/MyLunL y/Fq/IQgRSjTT00XISJ7fjSWOJjqeFXIkOK4wXsHLWvNoW5kpHGzvWkLAD2YmEwsXSH8GRXBCci hhsYaYA0dEAShMr9d1gtjB9QK2ltuGXUXnQkMQN+hogVpL6DzgCYJStPRNLjEmUlhqVuAgxeoZz FBqVgi+LqS X-Received: by 2002:a05:7300:3252:b0:2be:80c4:2c8c with SMTP id 5a478bee46e88-2c1095fe003mr5072170eec.8.1774271763884; Mon, 23 Mar 2026 06:16:03 -0700 (PDT) X-Received: by 2002:a05:7300:3252:b0:2be:80c4:2c8c with SMTP id 5a478bee46e88-2c1095fe003mr5072132eec.8.1774271763114; Mon, 23 Mar 2026 06:16:03 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH 11/13] tests/hexagon: add tests for v68 HVX IEEE float min/max Date: Mon, 23 Mar 2026 06:15:47 -0700 Message-Id: X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: nBVRJPhJvd8gvmRc9t9xMxxgv4V3IftQ X-Authority-Analysis: v=2.4 cv=Q63fIo2a c=1 sm=1 tr=0 ts=69c13d15 cx=c_pps a=Uww141gWH0fZj/3QKPojxA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=xhxbJrj1hkZauH2664MA:9 a=PxkB5W3o20Ba91AHUih5:22 X-Proofpoint-ORIG-GUID: nBVRJPhJvd8gvmRc9t9xMxxgv4V3IftQ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfX5pRvffsO33x+ QKOVRJgueZzTsNfjc8b45ucC65XWPk5IxlATSv03nhF0VIgO6FB9EAVdRE7C/ikSOn8vlzdFfjq 4GBKaSShGK0WXIN8h+EBYp0M5z5UFzlkkOmnL8WnBmlbzxF/10DZMNwQmyogg/mFplhumTi/meG iO9NpSooPYD9RpacBAcufOPRbDs1hwd93vlDRhkFUEdiuQFfZVBtsTl+30UvTOe2U5NKluRe7Ww 8b5laB2giaV23glHEmFTGQt/g1i4t1vcp0d3ZEHB5jIvEQOb+JBRslEn959rjZW9CPqheIi80oh CHYSFITvZy2AZZlyoUOWoUu8K/M6X3N/dDqovTS1WiA2Ksk4nlMSkhK3QvAswa7YCO6Z01h6hfW iXdOLSVmKh4H7i7SANPO/RwyIfgbJ8O7jiNBvLANJ8IHZg1cSgQ3U1QnmrA8ML5TsAQtTWvbZiS ZW/IoqLKU2Nh6Xhh28Q== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 priorityscore=1501 bulkscore=0 spamscore=0 malwarescore=0 adultscore=0 phishscore=0 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271890223158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Taylor Simpson --- tests/tcg/hexagon/fp_hvx.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/tcg/hexagon/fp_hvx.c b/tests/tcg/hexagon/fp_hvx.c index 85b8ff78ed..ded3a80f8f 100644 --- a/tests/tcg/hexagon/fp_hvx.c +++ b/tests/tcg/hexagon/fp_hvx.c @@ -73,6 +73,21 @@ DEF_TEST_OP_2(vsub, SUB_HF, hf, hf); DEF_TEST_OP_2(vmpy, MULT_SF, sf, sf); DEF_TEST_OP_2(vmpy, MULT_HF, hf, hf); =20 +#define MIN(X, Y, DEF_NAN) \ + ((isnan(X) || isnan(Y)) ? DEF_NAN : ((X) < (Y) ? (X) : (Y))) +#define MAX(X, Y, DEF_NAN) \ + ((isnan(X) || isnan(Y)) ? DEF_NAN : ((X) > (Y) ? (X) : (Y))) + +#define MIN_HF(X, Y) MIN(X, Y, NAN_HF) +#define MAX_HF(X, Y) MAX(X, Y, NAN_HF) +#define MIN_SF(X, Y) MIN(X, Y, NAN_SF) +#define MAX_SF(X, Y) MAX(X, Y, NAN_SF) + +DEF_TEST_OP_2(vfmin, MIN_SF, sf, sf); +DEF_TEST_OP_2(vfmax, MAX_SF, sf, sf); +DEF_TEST_OP_2(vfmin, MIN_HF, hf, hf); +DEF_TEST_OP_2(vfmax, MAX_HF, hf, hf); + /*************************************************************************= ***** * Other tests *************************************************************************= ****/ @@ -124,6 +139,12 @@ int main(void) test_vdmpy_sf_hf(false); test_vdmpy_sf_hf(true); =20 + /* min/max */ + test_vfmin_sf_sf(); + test_vfmin_hf_hf(); + test_vfmax_sf_sf(); + test_vfmax_hf_hf(); + puts(err ? "FAIL" : "PASS"); return err ? 1 : 0; } --=20 2.37.2 From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271847; cv=none; d=zohomail.com; s=zohoarc; b=A5XWQJ3kWylK2+MaAsEqm58dQ/Bpl2Sm+rhKTuMONZMTBIwM8jHFkidEUC5R4o9LH9YWrSpp3X+QMwYh6hewJox3yCzuHQ7beJpdVYQnM0sKwjbSdXd/+KJmH91W+HveKgfUXTSufY2G/vbuw8Z+gVXtdAeDybBB3JmpFA0pT1k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271847; 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=dFL4dAtjRg5Tov9boz2LT8i8YFT494sJ8UQ7RaiQI7w=; b=UuuNZp8x0WMMTDzX2crtMtlAkyX/tAdunOZRfx3QBdyAsdsn8UdjqoDtKpoV3T9MCXfOYRtBhndg5Fts0KdU/0Gjsj09xzA6ww7KLfrzo9eaC4anD5GPYMGtuXAArRhgS5z7XmreoRkxn23D+HmESTO7aHcH2oCshweX4zU0bhQ= 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 1774271847929578.5685119672733; Mon, 23 Mar 2026 06:17:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f9A-0000X8-I7; Mon, 23 Mar 2026 09:16:44 -0400 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 1w4f8l-0000Il-P1 for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:21 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8j-0000NL-PS for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:19 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NBgUZq123583 for ; Mon, 23 Mar 2026 13:16:06 GMT Received: from mail-dy1-f199.google.com (mail-dy1-f199.google.com [74.125.82.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d34vkr9fw-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:16:06 +0000 (GMT) Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-2c109ba1296so11018578eec.1 for ; Mon, 23 Mar 2026 06:16:06 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.16.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:16:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=dFL4dAtjRg5 Tov9boz2LT8i8YFT494sJ8UQ7RaiQI7w=; b=Vd5cg3sTtEGhPh3TtH6TFXUJf07 RUsyEG4tRJedBSeXSvg6NWB3IysbXBlb92MZo0dHFAMhtpEi7N07MmbKJqdhhN41 0kbQnu3ZM45V2tKVLLWOch6S6ReTCmpbVNw7XhF3qW0xxlkweLuEW85RDexzgeXB KIfUjdafViAeSrI9JWEjvXpS43DheIWl3rkJ4Z4DHHOgOcbCSiIcSTYYZDdKU+zn dPgLG5OaLaoDHOiQabHPwWayYLtfZ6PF6RlQ9wuRdOgqHjilyuBbd22++3uZzStY vsGXxuW/k0IH593Kvz3tcO+i+bzU/0RML4I0DwQwFZrfJtX2DVXBnQMDMXA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271765; x=1774876565; 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=dFL4dAtjRg5Tov9boz2LT8i8YFT494sJ8UQ7RaiQI7w=; b=H9pwkyGBK60FfHQLeW+lCZ7YqyL8qCbV3ISek9OTABak4ONpuqKfAcGgdbHINokenB srqGvG/STTWeSBuSzpLBpUXsbgPgNFbe0PGKWsX3MfSOyqhM3/R0B/Ug0X74qOJKyceu nRsWV7zUMMg4+wtEaPLD+/gUzsXLc0lxLFTl3RyYFyrE90W1VDv4xPVojjqb+dOT+rTJ QLmubwnVfsz6Ulg/Tx898SSckDcEls0U3soezjheG6TH0EQWVRTpnOaOkD1ZthFMdoAR a5nOAnUmjtDn8dBnMaDuD0Z9NH/z5BTDN4fz5tNHr2Oflpb3n1lJ5JNf7MFtT5OBYFgp oo+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271765; x=1774876565; 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=dFL4dAtjRg5Tov9boz2LT8i8YFT494sJ8UQ7RaiQI7w=; b=fkcnFjV0OZQWw78bE1pZn8wfR0PxH0en5MOIFOpOO0Vj1ezpXRPgj4+z2WQggzqj0s jyjWWpOZSLTH/b+laC/9TtLps+bUQR6YKqKKl9eqsj9d8L+IHyP+B3/p8wU8yfySXjce UGo5WsoOIU1KtSHWZJyfds+TU6sHRr5x3oe0cgjX4R6QdVDKrnsItXlJuq91Eh6auAtY gjS17u0jY1NgiVxFzmU1G30YMGyzfCdSE5I3l+uBjCXlTMzax1f2j7eTuJVhRbXfwELy YnJqR0HPb/S5sFfk1TPGGO/UdRRmfC2o7wa1He+S5wyucOM3vZ9nlO9MGiuR3OdQjuTO H1Kw== X-Gm-Message-State: AOJu0Ywl4yum3u6rN9F3MRouRV/78xLEvSD8zZuHZ/cvp7u9Wwxcd6nx HL7uvevz5XK2CyXVSkCKqiYbdZx4syO3/GfWgkZJo/OmsRniubjrrT110pHl7Fw8jMMuMgujXqb 2oR+PnfA27Xna0TJG41cncJ9lFNQ5o6AN2Rx+pWgWUroZxIESl6hDnrcatrG+03re6T2H X-Gm-Gg: ATEYQzwzqEeq8J/YDbqs0t9GcXuDLnsbvWTEgTiK0njoyKA6KDLY0Yq9GftfwL/aKgB s4WUBtk78HAfErIa2W84tL1sQq+rFCOhyzMcoIkVYDDs93584FuPRoHnp+RIXMnAKaspfzXPv1Y 2A3LEQ2yUZu9v+s4BwAjYyluxN2QmWy9OSyUygCsEe87iPrBR/HiQ89fmTLzyiDWYuhdrBSHJt5 UhvXG7jeP83pfmohqZ+1f1qmoOLWsv/2qy2/Ow3MhL/uTdPFeOMaTPXMDCAvfw709t3kKGAF1Lt l0bXS0ZdMUBsW2F9nFcgY/MUEp1SV5w6fZNouMJz2+W/2JKRBDkigPKpgB/CfjRyaSyRBVeQbCw /OkzEMfBpgjDMDhk40xfVu3+znvTaivXFvbU0as7vXQhjxqzuHQWhqs54n0hDXa3Q7EY8S01kf7 ArDf6s5LGX X-Received: by 2002:a05:7300:7496:b0:2be:e92:7f33 with SMTP id 5a478bee46e88-2c1097ecb50mr7361558eec.35.1774271765095; Mon, 23 Mar 2026 06:16:05 -0700 (PDT) X-Received: by 2002:a05:7300:7496:b0:2be:e92:7f33 with SMTP id 5a478bee46e88-2c1097ecb50mr7361523eec.35.1774271764437; Mon, 23 Mar 2026 06:16:04 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH 12/13] tests/hexagon: add tests for v68 HVX IEEE float conversions Date: Mon, 23 Mar 2026 06:15:48 -0700 Message-Id: X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfXydWzQiXvXNQY 4338gZND4v/473QkL7UQuF8RUn0P4DH8ddpwxckULfMOezUn1ysSrufxrK0TykMHVYLYin84GN/ kL42NB/hignx2EOh+i1dmvhrre0aG7P+JJN3sBNCv00vMlJsYgHRDDV0XgxEP4XS83VIcGm8lxT VQNUY7vrk5L1W96dmb5npQ2Kk9LnTqHT4l1Nya4DcENI8lYXVeRTfszhDm0Z/RFhU1rNB4CX9aD bj7Ygb0rrGmqsGl67M0Z2Q+sgBR7vKpFj8za3FqLLcEpjsLSfVYakg93HHWQH2aJ6wA+x1Yxonz o9UPFHzQAA3THo6JYWntYqEgGmiU0FuX3Sz6Cf/9dC8n14KKVD2JXz7oucQU4QVB4uwf/IV3XOK GQ5sCxeIeG6aGu7A5UqNOFe3T5q6UFViwJdsVCA7CkINAwoXdbr0rtWzNfRytZKSrpk2IE9oelt 5AfsqCeoZd5lehfnCOw== X-Authority-Analysis: v=2.4 cv=eMoeTXp1 c=1 sm=1 tr=0 ts=69c13d16 cx=c_pps a=cFYjgdjTJScbgFmBucgdfQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=0od7JiDa8KAJqeLmwRIA:9 a=scEy_gLbYbu1JhEsrz4S:22 X-Proofpoint-GUID: AZwx2ZaKmaEY2R8HR3uDJWEFm_msutuv X-Proofpoint-ORIG-GUID: AZwx2ZaKmaEY2R8HR3uDJWEFm_msutuv X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 adultscore=0 lowpriorityscore=0 impostorscore=0 bulkscore=0 phishscore=0 spamscore=0 clxscore=1015 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271850080158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Matheus Tavares Bernardino --- tests/tcg/hexagon/hex_test.h | 15 +++ tests/tcg/hexagon/hvx_misc.h | 2 + tests/tcg/hexagon/fp_hvx_cvt.c | 194 ++++++++++++++++++++++++++++++ tests/tcg/hexagon/Makefile.target | 3 + 4 files changed, 214 insertions(+) create mode 100644 tests/tcg/hexagon/fp_hvx_cvt.c diff --git a/tests/tcg/hexagon/hex_test.h b/tests/tcg/hexagon/hex_test.h index cfed06a58b..28522faf04 100644 --- a/tests/tcg/hexagon/hex_test.h +++ b/tests/tcg/hexagon/hex_test.h @@ -109,6 +109,20 @@ static inline void __check64_ne(int line, uint64_t val= , uint64_t expect) "usr =3D r2\n\t" =20 /* Some useful floating point values */ +const uint16_t HF_INF =3D 0x7c00; +const uint16_t HF_INF_neg =3D 0xfc00; +const uint16_t HF_QNaN =3D 0x7e00; +const uint16_t HF_SNaN =3D 0x7f80; +const uint16_t HF_QNaN_neg =3D 0xfe00; +const uint16_t HF_zero =3D 0x0000; +const uint16_t HF_zero_neg =3D 0x8000; +const uint16_t HF_one =3D 0x3c00; +const uint16_t HF_one_recip =3D 0x3bf9; +const uint16_t HF_two =3D 0x4000; +const uint16_t HF_small_neg =3D 0x8010; +const uint16_t HF_any =3D 0x3c00; +const uint16_t HF_neg_two =3D 0xc000; + const uint32_t SF_INF =3D 0x7f800000; const uint32_t SF_QNaN =3D 0x7fc00000; const uint32_t SF_QNaN_special =3D 0x7f800001; @@ -128,6 +142,7 @@ const uint32_t SF_large_pos =3D 0x5afa572e; const uint32_t SF_any =3D 0x3f800000; const uint32_t SF_denorm =3D 0x00000001; const uint32_t SF_random =3D 0x346001d6; +const uint32_t SF_neg_two =3D 0xc0000000; =20 const uint64_t DF_QNaN =3D 0x7ff8000000000000ULL; const uint64_t DF_SNaN =3D 0x7ff7000000000000ULL; diff --git a/tests/tcg/hexagon/hvx_misc.h b/tests/tcg/hexagon/hvx_misc.h index 771a4a22b6..26dd9ad774 100644 --- a/tests/tcg/hexagon/hvx_misc.h +++ b/tests/tcg/hexagon/hvx_misc.h @@ -67,7 +67,9 @@ CHECK_OUTPUT_FUNC(d, 8) CHECK_OUTPUT_FUNC(w, 4) CHECK_OUTPUT_FUNC(sf, 4) CHECK_OUTPUT_FUNC(h, 2) +CHECK_OUTPUT_FUNC(uh, 2) CHECK_OUTPUT_FUNC(hf, 2) +CHECK_OUTPUT_FUNC(ub, 1) CHECK_OUTPUT_FUNC(b, 1) =20 static inline void init_buffers(void) diff --git a/tests/tcg/hexagon/fp_hvx_cvt.c b/tests/tcg/hexagon/fp_hvx_cvt.c new file mode 100644 index 0000000000..7497455ac6 --- /dev/null +++ b/tests/tcg/hexagon/fp_hvx_cvt.c @@ -0,0 +1,194 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include +#include +#include + +#if __HEXAGON_ARCH__ > 75 +#error "After v75, compiler will replace some FP HVX instructions." +#endif + +int err; +#include "hvx_misc.h" +#include "hex_test.h" + +#define TEST_EXP(TO, FROM, VAL, EXP) do { \ + ((MMVector *)&buffer)->FROM[index] =3D VAL; \ + expect[0].TO[index] =3D EXP; \ + index++; \ +} while (0) + +#define DEF_TEST_CVT(TO, FROM, TESTS) \ + void test_vcvt_##TO##_##FROM(void) \ + { \ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; \ + HVX_Vector buffer; \ + int index =3D 0; \ + memset(&buffer, 0, sizeof(buffer)); \ + memset(expect, 0, sizeof(expect)); \ + TESTS \ + *hvx_output =3D Q6_V##TO##_vcvt_V##FROM(buffer); \ + check_output_##TO(__LINE__, 1); \ + } + +DEF_TEST_CVT(uh, hf, { \ + TEST_EXP(uh, hf, HF_QNaN, UINT16_MAX); \ + TEST_EXP(uh, hf, HF_SNaN, UINT16_MAX); \ + TEST_EXP(uh, hf, HF_QNaN_neg, UINT16_MAX); \ + TEST_EXP(uh, hf, HF_INF, UINT16_MAX); \ + TEST_EXP(uh, hf, HF_INF_neg, 0); \ + TEST_EXP(uh, hf, HF_neg_two, 0); \ + TEST_EXP(uh, hf, HF_zero_neg, 0); \ + TEST_EXP(uh, hf, raw_hf((_Float16)2.1), 2); \ + TEST_EXP(uh, hf, HF_one_recip, 1); \ +}) + +DEF_TEST_CVT(h, hf, { \ + TEST_EXP(h, hf, HF_QNaN, INT16_MAX); \ + TEST_EXP(h, hf, HF_SNaN, INT16_MAX); \ + TEST_EXP(h, hf, HF_QNaN_neg, INT16_MAX); \ + TEST_EXP(h, hf, HF_INF, INT16_MAX); \ + TEST_EXP(h, hf, HF_INF_neg, INT16_MIN); \ + TEST_EXP(h, hf, HF_neg_two, -2); \ + TEST_EXP(h, hf, HF_zero_neg, 0); \ + TEST_EXP(h, hf, raw_hf((_Float16)2.1), 2); \ + TEST_EXP(h, hf, HF_one_recip, 1); \ +}) + +/* + * Some cvt operations take two vectors as input and perform the following: + * VdV.TO[4*i] =3D OP(VuV.FROM[2*i]); + * VdV.TO[4*i+1] =3D OP(VuV.FROM[2*i+1]); + * VdV.TO[4*i+2] =3D OP(VvV.FROM[2*i]); + * VdV.TO[4*i+3] =3D OP(VvV.FROM[2*i+1])) + * We use bf_index and index in a way that the tests are always done either + * using the first or third line of the above snippet. + */ +#define TEST_EXP_2(TO, FROM, VAL, EXP) do { \ + ((MMVector *)&buffers[bf_index])->FROM[2 * index] =3D VAL; \ + expect[0].TO[(4 * index) + (2 * bf_index)] =3D EXP; \ + index++; \ + bf_index =3D (bf_index + 1) % 2; \ +} while (0) + +#define DEF_TEST_CVT_2(TO, FROM, TESTS) \ + void test_vcvt_##TO##_##FROM(void) \ + { \ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; \ + HVX_Vector buffers[2]; \ + int index =3D 0, bf_index =3D 0; \ + memset(&buffers, 0, sizeof(buffers)); \ + memset(expect, 0, sizeof(expect)); \ + TESTS \ + *hvx_output =3D Q6_V##TO##_vcvt_V##FROM##V##FROM(buffers[0], buffe= rs[1]); \ + check_output_##TO(__LINE__, 1); \ + } + +DEF_TEST_CVT_2(ub, hf, { \ + TEST_EXP_2(ub, hf, HF_QNaN, UINT8_MAX); \ + TEST_EXP_2(ub, hf, HF_SNaN, UINT8_MAX); \ + TEST_EXP_2(ub, hf, HF_QNaN_neg, UINT8_MAX); \ + TEST_EXP_2(ub, hf, HF_INF, UINT8_MAX); \ + TEST_EXP_2(ub, hf, HF_INF_neg, 0); \ + TEST_EXP_2(ub, hf, HF_small_neg, 0); \ + TEST_EXP_2(ub, hf, HF_neg_two, 0); \ + TEST_EXP_2(ub, hf, HF_zero_neg, 0); \ + TEST_EXP_2(ub, hf, raw_hf((_Float16)2.1), 2); \ + TEST_EXP_2(ub, hf, HF_one_recip, 1); \ +}) + +DEF_TEST_CVT_2(b, hf, { \ + TEST_EXP_2(b, hf, HF_QNaN, INT8_MAX); \ + TEST_EXP_2(b, hf, HF_SNaN, INT8_MAX); \ + TEST_EXP_2(b, hf, HF_QNaN_neg, INT8_MAX); \ + TEST_EXP_2(b, hf, HF_INF, INT8_MAX); \ + TEST_EXP_2(b, hf, HF_INF_neg, INT8_MIN); \ + TEST_EXP_2(b, hf, HF_small_neg, 0); \ + TEST_EXP_2(b, hf, HF_neg_two, -2); \ + TEST_EXP_2(b, hf, HF_zero_neg, 0); \ + TEST_EXP_2(b, hf, raw_hf((_Float16)2.1), 2); \ + TEST_EXP_2(b, hf, HF_one_recip, 1); \ +}) + +#define DEF_TEST_VCONV(TO, FROM, TESTS) \ + void test_vconv_##TO##_##FROM(void) \ + { \ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; \ + HVX_Vector buffer; \ + int index =3D 0; \ + memset(&buffer, 0, sizeof(buffer)); \ + memset(expect, 0, sizeof(expect)); \ + TESTS \ + *hvx_output =3D Q6_V##TO##_equals_V##FROM(buffer); \ + check_output_##TO(__LINE__, 1); \ + } + +DEF_TEST_VCONV(w, sf, { \ + TEST_EXP(w, sf, SF_QNaN, INT32_MAX); \ + TEST_EXP(w, sf, SF_SNaN, INT32_MAX); \ + TEST_EXP(w, sf, SF_QNaN_neg, INT32_MIN); \ + TEST_EXP(w, sf, SF_INF, INT32_MAX); \ + TEST_EXP(w, sf, SF_INF_neg, INT32_MIN); \ + TEST_EXP(w, sf, SF_small_neg, 0); \ + TEST_EXP(w, sf, SF_neg_two, -2); \ + TEST_EXP(w, sf, SF_zero_neg, 0); \ + TEST_EXP(w, sf, raw_sf(2.1f), 2); \ + TEST_EXP(w, sf, raw_sf(2.8f), 2); \ +}) + +DEF_TEST_VCONV(h, hf, { \ + TEST_EXP(h, hf, HF_QNaN, INT16_MAX); \ + TEST_EXP(h, hf, HF_SNaN, INT16_MAX); \ + TEST_EXP(h, hf, HF_QNaN_neg, INT16_MIN); \ + TEST_EXP(h, hf, HF_INF, INT16_MAX); \ + TEST_EXP(h, hf, HF_INF_neg, INT16_MIN); \ + TEST_EXP(h, hf, HF_small_neg, 0); \ + TEST_EXP(h, hf, HF_neg_two, -2); \ + TEST_EXP(h, hf, HF_zero_neg, 0); \ + TEST_EXP(h, hf, raw_hf(2.1), 2); \ + TEST_EXP(h, hf, raw_hf(2.8), 2); \ +}) + +DEF_TEST_VCONV(hf, h, { \ + TEST_EXP(hf, h, INT16_MAX, HF_QNaN); \ + TEST_EXP(hf, h, INT16_MAX, HF_SNaN); \ + TEST_EXP(hf, h, INT16_MIN, HF_QNaN_neg); \ + TEST_EXP(hf, h, INT16_MAX, HF_INF); \ + TEST_EXP(hf, h, INT16_MIN, HF_INF_neg); \ + TEST_EXP(hf, h, 0, HF_small_neg); \ + TEST_EXP(hf, h, -2, HF_neg_two); \ + TEST_EXP(hf, h, 0, HF_zero_neg); \ + TEST_EXP(hf, h, 2, raw_hf(2.1)); \ + TEST_EXP(hf, h, 2, raw_hf(2.8)); \ +}) + +DEF_TEST_VCONV(sf, w, { \ + TEST_EXP(sf, w, INT32_MAX, SF_QNaN); \ + TEST_EXP(sf, w, INT32_MAX, SF_SNaN); \ + TEST_EXP(sf, w, INT32_MIN, SF_QNaN_neg); \ + TEST_EXP(sf, w, INT32_MAX, SF_INF); \ + TEST_EXP(sf, w, INT32_MIN, SF_INF_neg); \ + TEST_EXP(sf, w, 0, SF_small_neg); \ + TEST_EXP(sf, w, -2, SF_neg_two); \ + TEST_EXP(sf, w, 0, SF_zero_neg); \ + TEST_EXP(sf, w, 2, raw_sf(2.1f)); \ + TEST_EXP(sf, w, 2, raw_sf(2.8f)); \ +}) + +int main(void) +{ + test_vcvt_uh_hf(); + test_vcvt_h_hf(); + test_vcvt_ub_hf(); + test_vcvt_b_hf(); + test_vconv_w_sf(); + puts(err ? "FAIL" : "PASS"); + return err ? 1 : 0; +} diff --git a/tests/tcg/hexagon/Makefile.target b/tests/tcg/hexagon/Makefile= .target index 16072c96fd..e240372fd2 100644 --- a/tests/tcg/hexagon/Makefile.target +++ b/tests/tcg/hexagon/Makefile.target @@ -51,6 +51,7 @@ HEX_TESTS +=3D scatter_gather HEX_TESTS +=3D hvx_misc HEX_TESTS +=3D hvx_histogram HEX_TESTS +=3D fp_hvx +HEX_TESTS +=3D fp_hvx_cvt HEX_TESTS +=3D fp_hvx_disabled HEX_TESTS +=3D invalid-slots HEX_TESTS +=3D invalid-encoding @@ -129,6 +130,8 @@ fp_hvx: fp_hvx.c hvx_misc.h fp_hvx: CFLAGS +=3D -mhvx -mhvx-ieee-fp fp_hvx_disabled: fp_hvx_disabled.c hvx_misc.h fp_hvx_disabled: CFLAGS +=3D -mhvx -mhvx-ieee-fp +fp_hvx_cvt: fp_hvx_cvt.c hvx_misc.h +fp_hvx_cvt: CFLAGS +=3D -mhvx -mhvx-ieee-fp =20 run-fp_hvx_disabled: QEMU_OPTS +=3D -cpu v73,ieee-fp=3Dfalse =20 --=20 2.37.2 From nobody Fri Apr 3 20:53:33 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=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1774271844; cv=none; d=zohomail.com; s=zohoarc; b=Tv/2+Zm/CAaxeIQyA8F4vN6SioPkg8gNs6rzrslqxCrSuQjLD/H3I25mWVBP6SQUqlZqleljiEsFCP9/ij4anw3cz9r/ip5mC1eHiAdse8Nqt/vhd4jJL4nShQ4pS17mfG9nEMF7MyZJ90eAa+3E3JfE+9DU28yUHafR58/jL/E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774271844; 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=wxSDJLqM9vbGPEMmhLZ18CzmgBXFcFzdhXgwNgVwEN0=; b=SjIPlAD7aEP2aFKg/BAf+P/oCcV/iq7MJkXgSn/ZH1dNSdkO6eKx0Wg0LD6HqAuGZPnNcAfA+xv/R1HbRNjlu7H9yhZKzt7BSH2WFlznfcBlWNO1SJ4mQA+hjbr1Zx/4Twt0MW9gKC3d0znMZtaguY74Ldr6M3UYN81c1aJFT80= 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 1774271844525791.3713645027402; Mon, 23 Mar 2026 06:17:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4f8s-0000KZ-30; Mon, 23 Mar 2026 09:16:26 -0400 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 1w4f8l-0000Im-Tm for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:21 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4f8k-0000NS-DE for qemu-devel@nongnu.org; Mon, 23 Mar 2026 09:16:19 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NADsDX3539883 for ; Mon, 23 Mar 2026 13:16:07 GMT Received: from mail-dy1-f199.google.com (mail-dy1-f199.google.com [74.125.82.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d33k30jux-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 13:16:07 +0000 (GMT) Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-2c0e264d802so12705961eec.0 for ; Mon, 23 Mar 2026 06:16:07 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c10b14cadbsm14702574eec.3.2026.03.23.06.16.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:16:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=wxSDJLqM9vb GPEMmhLZ18CzmgBXFcFzdhXgwNgVwEN0=; b=gN8xDnyHza71EMJ5RaLPPfJkPuj YlL19BzVyXLhJsEFrZsLaFVfbEMH/KVOd/M8II7qk+foFnbejBzi5Swtx1W+T8ay +3lBhbZITFdr3Y+1jI8TTX8HlxchcfxnUhtxj/0JotliukwFKnN3eORfBXGxPAhz Z3kJOMskTE2OE9U83uxgasbunm9gML1ZFVb4c9cNAnjZIdQPaKJc/dBjTCrdpRUC GDZQz9YQKgye7kNG71t77NqJkU3qmiKILnYe2HNLMOn26Leq5obEnSeG6KdyuQbp jkc2N4Me2CetQAP0ZQ/4G6oew2yGacNte7s1vj603jqMRBJnhmlpCWOIrZA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774271766; x=1774876566; 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=wxSDJLqM9vbGPEMmhLZ18CzmgBXFcFzdhXgwNgVwEN0=; b=J4QSdCoBp3kEbXjZbDYEm2w0VF53k/YotSP6A1vrRAeinlDA7a+rdayAXBiFpUDF6S 0BNwdM5HGgFU5josiCzCHzGh57k4ucTTI79enW3UxNplKtI+RRsZDYCqbv/7ND01RtfD 0YLlvycuVxpwyiyb+rBFsvH/LZoQp7sXMG8uh9zy79pwaz8JmUBUo4ZnWO1czDhToEQY fYAdrSznudGlJHePqDcEP9VaDh5tAescsc8axcDH/xJmQPHo9d7auuIxDVk4ck46KaLp uLG7HjCaJZljdeWSJPvpLRPhOFNwrBkl/t+6Ms6ch5Jq302QHZ5XYgrxH6MKQ9E/Ij0s rg5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271766; x=1774876566; 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=wxSDJLqM9vbGPEMmhLZ18CzmgBXFcFzdhXgwNgVwEN0=; b=ZHIiMyKjiBRfHlXwM9wLJdCwP7G+816lJWmpSBFKJmfHhrEtFeaBLal6ld1tBw3BIv JLVNJQ43J2bMqrLJlm/aicPL2qEG36fFEscp68BwN87oiAq1iCipxD/2Ux8VZttqnKe/ bg3V77omZzVamOXDNNfnxAbYsQoXwjL18nlhyBbNykkHFfJo51AHiDpcl3rOrlYuNoSG wgoKCEP/07/pLbLxNW6AIIL4GS/YdBxDBfVh91SIrR45nDfxKMFWptu3eLl1D6HDK5aS Yn6gFUCwmbK9soRe6UPPpzK+jSdLak9ku3PFJgrPKiqh09Qypm+fSpaHPqsrwr2QIk/U 4P5w== X-Gm-Message-State: AOJu0YzeecDk4dIXvl0gnYROZfQ8TkYWjFWgJ8cQi+904pjyzMdzKj/Y /g+YxrORYlqpydsOE4fcYTYBR+JQJLOZAXl/i7xPXyitvAqqY65lMXI4ZJBZe2bGgOcjaTty4Rz WxhZpvWBnie2JbU7LXf5hUVj5cvwaUNn4pSWNUyFXbCx46+T6utlePBxCLGTfnFG5HsEK X-Gm-Gg: ATEYQzxe2R3uc4t5Wqg1eiPZzxRpGqzCrEssw+jXTUxqxTQEtgeBsgdjAsqubWS6EvP /MFtlXNUBizLpz+Y825vKCi0aLPoZ6SIlO8Zqin6EF1TxbXkWtZxZH39vWDrPt7oPqwiyD6/qft IBKYjZFPyYUUcV3fSJTyV88lk1so7QO8ZPp0xBhuJqp3LQt85p4SLG0EzJUgj27YwFMYZxPpr06 yyqMu4FLX2BGIgFs11COaevks4EBxGtLqH8sCrkSWd8I2UgPjpRRd+T5G2dfpFIw3hLiVSh+HWr jVFDXVKfQ4whI4rD2eSoK5eq9cUjUvMwVDdzb/fIA6cridzYHE2qUADJsKV1VF2CV0TO6r32QDJ YE6VMWCsOIlXoUTdfQfHuto79bRUzPRWMBvsXK6ZwWCzdnPgIZCvTEJlN3tuUVoIu1tc3YVAm4p 1oIDPvny/i X-Received: by 2002:a05:7300:a145:b0:2be:617:2ddf with SMTP id 5a478bee46e88-2c10970ed0fmr5751894eec.16.1774271766162; Mon, 23 Mar 2026 06:16:06 -0700 (PDT) X-Received: by 2002:a05:7300:a145:b0:2be:617:2ddf with SMTP id 5a478bee46e88-2c10970ed0fmr5751865eec.16.1774271765347; Mon, 23 Mar 2026 06:16:05 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, ale@rev.ng, anjo@rev.ng, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH 13/13] tests/hexagon: add tests for v68 HVX IEEE float comparisons Date: Mon, 23 Mar 2026 06:15:49 -0700 Message-Id: <76a65d4bf9062558256d29756e9e847d18692be9.1774271525.git.matheus.bernardino@oss.qualcomm.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=CYYFJbrl c=1 sm=1 tr=0 ts=69c13d17 cx=c_pps a=cFYjgdjTJScbgFmBucgdfQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=0FvW_baqbJdJ8tG75fUA:9 a=scEy_gLbYbu1JhEsrz4S:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDEwMyBTYWx0ZWRfX5HvaAHbur8RC gOVUey16BS2Crib5h4mzkumuCsXDnsP1vub2DRalUCC4IIs1lLGc4n8/7+vqaJfgR4awuFTrcyB idQN9aJIKhLK0qN8dx6CbGkVTv/di2wfucFk7Y0uCku4tHDCot+c5+WHRucLDZyU9SY2w7Tb70e +KZJlSwHVEZVlktM0uS3MhSzNlLkD6H6o5/sVx0KTxsQalB20WqKJT75fRsdZ7sDrhuKEFbxmi4 LyG+jFxCE11m/E4JeFnLgdWY8Ir5Af53vUXFqoF6KckfX3kYHQ+lm/je6bQ793TB7+ugC98eDYM 7q7H4t6u08PUFg8ARzrAMy9++tfZ55nKdZAETS4ChkuhEA1x9x1ht2G0SrZ4TLyAgO4clRHlbsf MuXAd0gW+pitFir5Dj8fPtwOD2uhry68nktQMp2gpiPt5bJMQRCOg4IPlXpBQOP7vksr/QvT94n /BaUhGB5dADXiFc2ECg== X-Proofpoint-GUID: usmgfBGLEWkVXRODWlVaTqppyPDsHH9q X-Proofpoint-ORIG-GUID: usmgfBGLEWkVXRODWlVaTqppyPDsHH9q X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-23_04,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 clxscore=1015 spamscore=0 phishscore=0 lowpriorityscore=0 adultscore=0 malwarescore=0 bulkscore=0 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230103 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=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 @qualcomm.com) X-ZM-MESSAGEID: 1774271845907154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Matheus Tavares Bernardino --- tests/tcg/hexagon/hex_test.h | 1 + tests/tcg/hexagon/fp_hvx_cmp.c | 58 +++++++++++++++++++++++++++++++ tests/tcg/hexagon/Makefile.target | 3 ++ 3 files changed, 62 insertions(+) create mode 100644 tests/tcg/hexagon/fp_hvx_cmp.c diff --git a/tests/tcg/hexagon/hex_test.h b/tests/tcg/hexagon/hex_test.h index 28522faf04..5bc7a76a17 100644 --- a/tests/tcg/hexagon/hex_test.h +++ b/tests/tcg/hexagon/hex_test.h @@ -124,6 +124,7 @@ const uint16_t HF_any =3D 0x3c00; const uint16_t HF_neg_two =3D 0xc000; =20 const uint32_t SF_INF =3D 0x7f800000; +const uint32_t SF_INF_neg =3D 0xff800000; const uint32_t SF_QNaN =3D 0x7fc00000; const uint32_t SF_QNaN_special =3D 0x7f800001; const uint32_t SF_SNaN =3D 0x7fb00000; diff --git a/tests/tcg/hexagon/fp_hvx_cmp.c b/tests/tcg/hexagon/fp_hvx_cmp.c new file mode 100644 index 0000000000..e925c973f3 --- /dev/null +++ b/tests/tcg/hexagon/fp_hvx_cmp.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include +#include +#include + +#if __HEXAGON_ARCH__ > 75 +#error "After v75, compiler will replace some FP HVX instructions." +#endif + +int err; +#include "hvx_misc.h" +#include "hex_test.h" + +#define TEST_CMP(VAL1, VAL2, EXP) do { \ + ((MMVector *)&buffers[0])->sf[index] =3D VAL1; \ + ((MMVector *)&buffers[1])->sf[index] =3D VAL2; \ + expect[0].w[index] =3D EXP ? 0xffffffff : 0; \ + index++; \ +} while (0) + +int main(void) +{ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; + HVX_Vector buffers[2], true_vec, false_vec; + HVX_VectorPred pred; + int index =3D 0; + + memset(&buffers, 0, sizeof(buffers)); + memset(expect, 0, sizeof(expect)); + memset(&true_vec, 0xff, sizeof(true_vec)); + memset(&false_vec, 0, sizeof(false_vec)); + + TEST_CMP(raw_sf(2.2), raw_sf(2.1), true); + TEST_CMP(raw_sf(2.2), raw_sf(2.2), false); + TEST_CMP(raw_sf(0), raw_sf(-2.2), true); + TEST_CMP(SF_SNaN, SF_SNaN, false); + TEST_CMP(SF_INF, SF_INF_neg, true); + TEST_CMP(SF_INF_neg, SF_INF, false); + TEST_CMP(SF_SNaN, SF_QNaN, false); + TEST_CMP(SF_QNaN, SF_SNaN, true); + TEST_CMP(SF_QNaN, SF_QNaN_neg, true); + + pred =3D Q6_Q_vcmp_gt_VsfVsf(buffers[0], buffers[1]); + *hvx_output =3D Q6_V_vmux_QVV(pred, true_vec, false_vec); + + check_output_sf(__LINE__, 1); + + puts(err ? "FAIL" : "PASS"); + return err ? 1 : 0; +} diff --git a/tests/tcg/hexagon/Makefile.target b/tests/tcg/hexagon/Makefile= .target index e240372fd2..ba93ffab17 100644 --- a/tests/tcg/hexagon/Makefile.target +++ b/tests/tcg/hexagon/Makefile.target @@ -52,6 +52,7 @@ HEX_TESTS +=3D hvx_misc HEX_TESTS +=3D hvx_histogram HEX_TESTS +=3D fp_hvx HEX_TESTS +=3D fp_hvx_cvt +HEX_TESTS +=3D fp_hvx_cmp HEX_TESTS +=3D fp_hvx_disabled HEX_TESTS +=3D invalid-slots HEX_TESTS +=3D invalid-encoding @@ -132,6 +133,8 @@ fp_hvx_disabled: fp_hvx_disabled.c hvx_misc.h fp_hvx_disabled: CFLAGS +=3D -mhvx -mhvx-ieee-fp fp_hvx_cvt: fp_hvx_cvt.c hvx_misc.h fp_hvx_cvt: CFLAGS +=3D -mhvx -mhvx-ieee-fp +fp_hvx_cmp: fp_hvx_cmp.c hvx_misc.h +fp_hvx_cmp: CFLAGS +=3D -mhvx -mhvx-ieee-fp =20 run-fp_hvx_disabled: QEMU_OPTS +=3D -cpu v73,ieee-fp=3Dfalse =20 --=20 2.37.2