From nobody Fri Apr 3 20:53:34 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=1775126929; cv=none; d=zohomail.com; s=zohoarc; b=Ol4qqyXgF2wb7nAP4EwhIa3TxSdpD4Ztanul1izU00QBCeXBTGYLQZaxddM9i/zgEhBy7GA7NFETT/un73SIBPDJAjCXl2pM+Hpndsx5PQtGTCSZE0tnOu0OhJ3el+Uy/uqsL2yjrvuOr/9t2O8+8WDIWcjbRfmtSYJt1fx2QTk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775126929; 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=UQmlyxpZaVVP/6TW6V7qRLUtxbYcGCiDyOnIxm58+4w=; b=ESAuw1z8vAe5KveNfH3CUSBBSRsUIiPV8MleKJFM2QspxE2R0a5dqSm67AqFlzxuQn87RhSQtYyMy6COHZvcQmzg1xHlgBV8YkbgC9LCpyThz5E7INGsgzeWhdkAuh44Omm1/vQvro3vZrgnftZsV723zmGZEYGjUKN6myPBZK8= 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 1775126929632464.8599473411159; Thu, 2 Apr 2026 03:48:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8FaY-0004gF-8U; Thu, 02 Apr 2026 06:47:50 -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 1w8FaU-0004eZ-W6 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:47 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8FaS-0007mt-77 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:46 -0400 Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6328Rx6h352408 for ; Thu, 2 Apr 2026 10:47:38 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 4d9myh8h0c-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:37 +0000 (GMT) Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-2c8ac8e422dso1240015eec.0 for ; Thu, 02 Apr 2026 03:47:37 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:36 -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=UQmlyxpZaVV P/6TW6V7qRLUtxbYcGCiDyOnIxm58+4w=; b=K8MeTxwcNLE/aJrSey/79pLnwrc qqFo5btqngkq/ujsUTbIO8FHI4kml6jKVwLXH7K3w1NRIc9skRU4MwTsRJKz3sLt nH/tVc+D3A8Mw6nzbcANVWirnd2pD+HBThTivy3lDsBV6FAZRbwbiHFLnaFpC6c1 QzepLD23/0CpURrL53B0Jy+jyi/xUModybSELi0HatkSgpLQrSVECeeVRxjnEQQu wAEe2/MQiMmy7rlPJFMETgqFSN7aIfgXnAR933y0UhwwP5clx+2PxgsjBcTRCagj YB8oa7qJVt6T0cHaZKpOc9NqZRw2VVLIT9RCO9wCw7Ihu8IWkQG64M6WHBw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126857; x=1775731657; 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=UQmlyxpZaVVP/6TW6V7qRLUtxbYcGCiDyOnIxm58+4w=; b=Xu6c0miNb4698SlkyaXZlaoLwyGt6xaRdPLCsoWDN87fsVOcpljnJ/GljPCrZ0k/Gp w6kHpUfIWaNtWw2sVqdrETfaDaCWl46udgTmU8ubbVTP2W+AsoRZ9NpzxeWKfwrDH0t2 V6h/RUmIiMFf3HSkAca/EZV/hnm8y8TVuNtGVt4lTgr0fKElOveGPus1ZRZv6nO35xkU mamgoiPt6zXIRcghN9Pcxffks8HUOEOD8/VNJ4uoiTpHS6ELuegY2qAHyQ7iKLoAlKAG u4Dv6AY6LWjEwzE7VC+1sH58kvBS0OuolZnfC+tnGrOcij1ECdeLrNNiZO3WKvZCe3jt N0cw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126857; x=1775731657; 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=UQmlyxpZaVVP/6TW6V7qRLUtxbYcGCiDyOnIxm58+4w=; b=njpb8Z8VG4Q9ons3sKRq8rb8Qc2a6IBM1XGW+7lxxdiQlgTNgpiBQv6kOQDVZqoRgX ysnMJkZuu9Tk8FmSQKNggRJ/ntVlTG+3aHh44IasnQ3nDGo9o7n0rCQw3LewJSEygbif V9HYHY+afT6LlykcJa8UCWsvWOW43i4UphTW2YqZw2H+O9NN6fCuY+CLEKCUkdou58mh B5SCLsUDmRdIfLDzyzkRZ6uPdujr/+3u2crI/Lb1yvOLD5KY81+HaFsY/sxYreMOzmG6 5QhUgSvMQTx9IorR+V3L0D9qIKShvVEwlou5m9U34YCupZHX8LqaCYtsj0akF6g04lW5 lM8g== X-Gm-Message-State: AOJu0YyMzgcmT8jBKqsuVDAM9tJrmqA7+x1IFPjPHYkJNYO6BkOs6+P1 Vjxyvjf2xNh76dD7tTY4jcd3eeinu/yB6jTIdzOZw9ZHpBF8tr21SQ0hflhAfeOiT3M1bjZw2WS vQ/JYtuIwL5ShU25jo+de1aZKqW3uDaadI4nighXuPhxZm7iP0JoId/+9KB0TukWOGw4N X-Gm-Gg: ATEYQzxPCWxm6cpOvwY3OuO17xtMLiIqFUX6gRUxhN3d+FAGzdVmFdjGXY9Ls3qbeMU xx76lWhjZ+M8vuy/IozWJzQdTrbwBpjSSJ0YVNWm2B7Gm5M19XIiKWbDPpSwYLFSWVpyMJKrtRZ A5vv2dKEPXYi/0gk+hZ5Vufd5aioP9LzWEJiMSWt/pmaEdtkuO85EnTTUapzM/yUhpF7UvoWyyR AOj5dwVihQBvVQGu860qTtn9of9fx8xbMNi9RdHkfgr9EBXhQE2I7trlal3WqoSVVomBQmBA3S0 RKQMd8DGzKCVIy/w9yfvDNiFbkHIZmnTeD+OQ3pZEV5tvZJFK4FbxYGSF/YbFt+o5Tjm0maOdCl j8nSeAfBle/nn1o0tZXLMSbunpnUwEtaJuK4GqOovrLuJQU+Jg+kHu97qu6wll7+kBy/j1sn0vL ryxkmmrNzY X-Received: by 2002:a05:7300:5707:b0:2c6:7f49:a871 with SMTP id 5a478bee46e88-2c9326aa17bmr4127113eec.20.1775126857178; Thu, 02 Apr 2026 03:47:37 -0700 (PDT) X-Received: by 2002:a05:7300:5707:b0:2c6:7f49:a871 with SMTP id 5a478bee46e88-2c9326aa17bmr4127083eec.20.1775126856510; Thu, 02 Apr 2026 03:47:36 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, 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 v2 01/16] tests/docker: Update hexagon cross toolchain to 22.1.0 Date: Thu, 2 Apr 2026 03:47:18 -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: RQS08OrLZ6fGRlyZLV0GxyRYzE1nCI1Q X-Proofpoint-ORIG-GUID: RQS08OrLZ6fGRlyZLV0GxyRYzE1nCI1Q X-Authority-Analysis: v=2.4 cv=JII2csKb c=1 sm=1 tr=0 ts=69ce4949 cx=c_pps a=cFYjgdjTJScbgFmBucgdfQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=ovJmrJClAAAA:8 a=qC_FGOx9AAAA:8 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=q7X4_axEi9qJq2Gpr8MA:9 a=scEy_gLbYbu1JhEsrz4S:22 a=brTEhlvMp4NY0_u118I2:22 a=fsdK_YakeE02zTmptMdW:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfX31p2Ny88mZr4 71+X9aOn4a9G2TPRXNM0EDuZtVZ4vi1EitZod8L7UOEUOuvi9IltmkiYdds7uNUatogwTiW1zfo 36hrggzsTogqhcNj1ajgky6flMd3UL8I/RQm0VvOGGwRMEHUqIJCVpnACgrLCo7NJy7rHpXVmuG jeDyuhuf2SU1SRXloOF5sKnddthqC6ZZUA9lR1A3nOWY7dQ90/b9MMIoB7sPZcl/Y6vXkF7Wv5K 6iCBy+lf9Bi3g8u9r4MiC6SD9uXkiVxxyC9x7rHplBeltn8aF43tcWsDW6wmUCfk+yn/xCR+mRO 0eS4mOFy3oaI9eu7sBFtRhgUUUgrfKIxwZBLxxJpCvVim7BH00QeY8MSey6BOqewON2GDND4KLo KjqXCblFkWtTJkTjTsH2XgBKOxHbY6p2dPZlprF4kKyQN3/FkFjeXMNKNHieJMZ67nzywkZxWxD dc/I11/6KaN9Hda7vBg== 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 spamscore=0 clxscore=1015 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775126931931158500 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 --- 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:34 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=1775127009; cv=none; d=zohomail.com; s=zohoarc; b=nJpPsVKYJZhQpRe0XOz6edtnEH797WnmSTF8ZZXP79WD+Tc8JgZsdUFP5owiH6hAlVe1cnI92nXOfM5LmGOOnXcsudHSnCZg544j4Z0kEKaWUIJgwU3bNhYzSAqh9wcU1Y6+fLqPxAVDLaWZRrnb3c2vrprqOpkzZWFTNdzgw3M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775127009; 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=nOvzeWfo1gzMP3it2e0DgF8ZBLHR2ZVPC9oC1yks6l8=; b=K7S9g9IwUhCBhL+AsNF5IXvcJqFdLqfNkzWxtyEWoxp8nFKG09pzQ2a6aLbPuF2dwo4lH7CrqKbu//G6HLisfEt6z/FeRXcHzE0sfmujJIF5+qOZiXNP4miD2O7EeQ6LyaU9qdDL+AzDP+pw63uce1jdgQ0v0FZQoaRTObUSAU4= 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 177512700918799.08413144819701; Thu, 2 Apr 2026 03:50:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Fad-0004ib-8V; Thu, 02 Apr 2026 06:47:55 -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 1w8FaV-0004eb-0q for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:47 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8FaS-0007n9-77 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:46 -0400 Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6329ojAi1551329 for ; Thu, 2 Apr 2026 10:47:39 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 4d9heesgvc-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:38 +0000 (GMT) Received: by mail-dy1-f197.google.com with SMTP id 5a478bee46e88-2c68a134df8so690190eec.1 for ; Thu, 02 Apr 2026 03:47:38 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:37 -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=nOvzeWfo1gz MP3it2e0DgF8ZBLHR2ZVPC9oC1yks6l8=; b=J9iNizoskDz3T4W7Dj5U4ogegjg PsFeu0csuUjNAj8ItUrY+DTZc6ev/braFFWA690TVuH2w4p0rtcGvCK8YLUKEYek 5aYYYEZoKxFBQMXLOHj27xg6O5sz30MnW1DvvccKwOP7Kr9gAifbu4FxCo3RO+7F DAtegOH/kG2ZwV6EB/OsuEVgjqsNqWdb+kEbhvetw8xuBI8E9zeqrwIEdCmJStVh ixcvuKFUq6S2X1Xq9M4Bd190psFQ70ywvjqWkMo6pXe9RdpyP2gd/znQAP3i7Zv6 KeEmbOoktgNvsohLA+UYBm5xWDpd/nhaoRndanWVBZi3bnSviujGjRCXb3w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126858; x=1775731658; 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=nOvzeWfo1gzMP3it2e0DgF8ZBLHR2ZVPC9oC1yks6l8=; b=hr9QeBVUnNViA73fyMlhYACHRSTjATiAMGWzk7AsWvv0f256CBrUFSXoC4eihveOa4 LIoeOu8SrSwGwtSFeZh2YduXVhuECJCVh35DewPEATt5yeyC6qKEH/E7pDOodj789Tpn We5sLudmjf3eMYchZy5ZXYDmBoj3ZiuFJ5eMsnOxKSCCh4yZIqGXJGold7HftWzl9L04 8hkraudm/1+yTXVC4k4Rs5hbfzlprFHSflQHkKywaDhLDmeG3uw4OfN85xXkS0k/1elK YvEFuhPMKRkkHIz7zeW5a82P+fwaZPsz3IdKySKPaRjdjikEkSA7FCAk4oOmrKilADe+ xVrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126858; x=1775731658; 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=nOvzeWfo1gzMP3it2e0DgF8ZBLHR2ZVPC9oC1yks6l8=; b=g9KBYhemg5wri2aVvUF3x7Sjs4kZu+D+oMyvRnrSFkrOdCWRP33kiQA8Q/J4eL1KFr pxiDJi7MJaCQQZEgdF2J3Wa6o3Pk63QKg0IE7YSN5FW8wKS+q+uuT4dP0j1IJ362BEAR qmrZCK9z8Lo2lFQY638LOUVE/FroRrfbXmOW9nvZpDLJ8FdYHIla1imBNFT6V+7ALrzb mnsRj8gU6qBajTpl0euOZs0rneCskXBVeiopMUkUjLsuSKse2e6IinCqLDg7L5fWD6Pa qOi/H8EjQBqoj123YrXxV5XbS6GgfrccWvbHJ9JAZMUX1576Ci9eq6gAoM5mbF9zEErD b4Qw== X-Gm-Message-State: AOJu0YxYPoxU34a1vLtUSvzCBsAPR6OOIMe3ZikhB9XI/+6LD6ealjFf PZ+kR2Y3Dx0CoK95990BKkW07p/gb8De16Ary/PDV0zdWc6/hkrHk6DCYojKb+DjwyjGIu9gIK/ IZaJv3nW5HN9pPe1iN0O3f8Ggl9fhsisjwmZn9O6AlyEykTet0URLCb7n9xviKsYp3WIk X-Gm-Gg: ATEYQzxO4bsObbdjJ5TOG2rp/wFEcQSrvYxqOx8hqTilIq+cUBH10xAXVCiQgcdevQG I5DVW771DrGZDSVmXzR+xhnP+esRX5UzNSL9SBaAhj9qKvPDyr5BtwCcH6CcgAxwyshOXhihajx tU/AixQiCVj6D0MYNyGP2eCxRXMnWmviE1f4j4oGxSi2f/A3kwodrfGCaJyVgrKVSA9QNUr0Thv PuehwImftxdzpWkUZ1VMnZP3m5paSlLoFHUM4jZ1MVOwNG9YkfYKGRNBe0Ds/EMaaKN9EaXfmSu GlFk/sJkRmEKR1o5RJ5/ylvVaksn1v6mR7WmauWtdLo9sn48MrWmWNyE+MTxHBJQKN2nDC8rM/h Pz5ZK/ARVqUPSiHlzMZIdlyRoR5V9B9SAGhxt3VXZ05Synw7ahffLtz/V36hbeOQd5EPZSJlALO 0VL78Wy70y X-Received: by 2002:a05:7300:ed0e:b0:2c0:c5e4:6057 with SMTP id 5a478bee46e88-2c9328ac376mr3866696eec.19.1775126857965; Thu, 02 Apr 2026 03:47:37 -0700 (PDT) X-Received: by 2002:a05:7300:ed0e:b0:2c0:c5e4:6057 with SMTP id 5a478bee46e88-2c9328ac376mr3866681eec.19.1775126857439; Thu, 02 Apr 2026 03:47:37 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 02/16] target/hexagon: fix incorrect/too-permissive HVX encodings Date: Thu, 2 Apr 2026 03:47:19 -0700 Message-Id: <529c8c9063f2f25d215727905d830bb0b19028e7.1775122853.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-Proofpoint-ORIG-GUID: ULqYCN1JL0x5cGWePmQg4coLmD2vX8MS X-Authority-Analysis: v=2.4 cv=VY36/Vp9 c=1 sm=1 tr=0 ts=69ce494a cx=c_pps a=Uww141gWH0fZj/3QKPojxA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=LtKSMYrkcOpncNoavBoA:9 a=PxkB5W3o20Ba91AHUih5:22 X-Proofpoint-GUID: ULqYCN1JL0x5cGWePmQg4coLmD2vX8MS X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfX/yir0TkesiLb J9A3JglncQZwdswpehP4ZVwsSe/CO3PpoBgChlyMyq1JNtLcILC9ffR2jpG03OFfzBV2WPSbXmR DepoXZ/T8Z7jwEhQ3F4tEWTfdVguVWSYPcSfAagYKIAM3EYGQ6TlxUMn2HPVLrLGosVIwwIfUIh SDDiw40J4mIXyrJ9R6Gnbs8BkyFJDTVp+HgheCWZMcfXjKIhuuPT4VxPVWm5t1CprdWqWyVp48T tRc0k7NOG7yMHG42DrUQP0fwZFJ3ve2KdXfZp8NKAHGqM4H5fYClHbAUUBXlcegWAKUFMrgY2Kb 4uhukwBA5GEbF9ZhnWC9yvI28ABhBE0HiiWdmHhWPW9BtdvMNwcsNNjs6E0UBKt5tYLe7jMxMsH /ARbkCHOjK6W6BuAgih5AHTeS5jbLOJdNGe3fkjaWaxmUrS2Nm/lbecKf1ktlcawYtdHpvfF5mm j272pNfMX/k/6rUl7Qw== 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 malwarescore=0 spamscore=0 adultscore=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-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775127010424154100 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. Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino --- 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:34 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=1775126890; cv=none; d=zohomail.com; s=zohoarc; b=g7T8f/L3IAydrACEb5sYx+4XVNw7VYqiBWCS3HjXWww6K4Dz08urkG1LN7teJXq/Cv+AcKKKDiomkcJ/eImT0rMU9ew3hgPOoCxs3HxVB0YvvKslY6CNqmSiIE9TUPb89e4gy7Y0ixzB3dIVo6ZLOjh2/CR7xjOWs83arRjrJWE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775126890; 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=tdmd31/hVMibPQNSMF+BHceyMKga+YxUHsDryJbW/yM=; b=jrytdgs6fI3HrGRqfiQNdEkWuy0jXICYvnutwccbkpv0yzSoN75c1V03IlSjFPCq9Eh4FUTfGFiibILUsgV4lpNJlNgXFvYlKDLzgf9fJyCEt9bRjRSsMjD7J7hP0vERK27OhQtsDXnCXOLxpRBwXFWcjcxxTD0tV6vi6kUKqww= 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 1775126890734313.6958567335986; Thu, 2 Apr 2026 03:48:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Faf-0004jC-0D; Thu, 02 Apr 2026 06:47:57 -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 1w8FaW-0004fH-EU for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:48 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8FaT-0007nE-GE for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:48 -0400 Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6328d7LC1249375 for ; Thu, 2 Apr 2026 10:47:40 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 4d9n4t0fs9-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:39 +0000 (GMT) Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-2c5b48baf75so5456029eec.0 for ; Thu, 02 Apr 2026 03:47:39 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:38 -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=tdmd31/hVMi bPQNSMF+BHceyMKga+YxUHsDryJbW/yM=; b=a5c0nS5CeYjZyl2aT9kImUwVi2j P7LGk309owNNgbnlWb27Bq9zTn6wtIJjJRXwyvLN+O6bNAKMjcuV8zrjw2gAU5g/ 6+onZgDsmtkSjzehfASQzZhdgq6uHWWJdN85bQYDSEGpt6vFB/W9ZB04UsyEzt4U AtIH1av7RViHTkLgSYD3dWcJqMg7bKUENd003egNJfew/SzfVu72BHlKBFMK/qyt oJcN2H6EI9eQnfZHTAWLkCciQn2fl2g7NNP6wZYAmwR+RkPnTxOWPXVeq9IC5lry lUqb8HbGAVPRnaxLRaFTD9fVI/Nf2mpYLYc9Zegxx2pFzpZrzlkxbRkDAqQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126859; x=1775731659; 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=tdmd31/hVMibPQNSMF+BHceyMKga+YxUHsDryJbW/yM=; b=MriGsqBrF1GpsTmoe4XoLg6PzQD+lMdAFxaUJ7KZXjc6vIofGIqD89azYXt3JKntV/ h2qcdKMX3IwgB16Z2bLZX1L/Xh0yN9CD3tbBTHS70n77avUJqRqMIx9/dMxStytxTWAE XzQ7AjB5gGZ9jJa0n2Jx9Pkq7gaNhlRhlS3kRUHbdODeO1msYxN90txeIYqp369qscl/ BF53LVZWNxscBTfhQ3QUvbKvf7dB7K0aC67CNHvBfLLSoHfQg9+KsCIORligcgTTG286 R+JR94BelgUOnNhZz/+tZYsaFTlBoXEYyXJizPMj+KQdLKfhHIKc/n2FM5liDEpjHiNU EDkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126859; x=1775731659; 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=tdmd31/hVMibPQNSMF+BHceyMKga+YxUHsDryJbW/yM=; b=XaHdIsYurnuXGZZbDe8YjVidEim4blBJKtfCHZ52Iyxkh9eVY1rOYIzfDbZGAsO2yB iZ1Fx2YUY0leL9hYI0nbB+Ep/eAVxvPqV1rUizcH8z4cF3POjJtcsk+aW2ceXDjIAvqB zVX4b2pH8jLTpwj4XCSNbIk3iUKqVSZRU44j1hw+mzM5lh4nR9dczyxnB6PhojiHDiJ/ CgFRo0tm0uDP3eRLDcD8ZM1fI6I5Zq7OM+7BCmGGwg7BtlwipRtXn9QqcZDMFKCo69S5 VZrMCAmilawXDDR5haQjYrxv/Vefej1o7+jy8fIM6j17/49S5dBBZoWoyzWGg0hb2pcg /1GA== X-Gm-Message-State: AOJu0Yx+Z59vN44jYxW9+cPiwp8PkqfiujlFTITcQRuMtHfic+z359od Hr+N+noA12Qaq5Qm7CUR9n+bam9dyAO+q7LImI11YrCBCFdqu7jnqBJvr3k7F06/Wt7TlodNkE6 9yvY+kaIzKH62y5j9ccoS3VRj2vzBaFZlrci5ryX3srrZir7x/C6nCMd7Eii0PLr07CVv X-Gm-Gg: AeBDiesw/AMgD8uVO9AjtIjcZ5t9IjQUEpBXGrx9WI8yYwZvar9ojRH++W088W4RvTA eYNe2Wn/j65oVqS38NAG41Nt027IY85KP0pW5GWQwbajVnfMFKNJjddR7WU6cXoB8HUC2ro6ayO NPyysWkxvIiKhm0gr80h+v9ZCZT5uOla5Og3dmxJ9jtW4REHMCnqwmYSG1xP1W2zubNnkh8XNmd zpdcamlkmBIWS0UU+b5CCwEQqH3ku3JoC9u65co/U3jFHGqJMigo1VrlOCenlDwB4WEHytgHv8g IXRcrUEHxiGZCHQvAYp52zf7XjebNz31hMIngEko+ChjMflWOwDfp4nDgjmn4W26I7BDk1fN5/3 h+HAZU/SBeZlhIO9h25iJDXMuhHLsClW2j8OfJkrmPiEH0Pj4QB3OTylcv/KVkFe6lJVQaaqE9D l24G8U4N1H X-Received: by 2002:a05:7300:dc8b:b0:2be:837d:cc4d with SMTP id 5a478bee46e88-2ca8dcea8a4mr1457338eec.5.1775126858940; Thu, 02 Apr 2026 03:47:38 -0700 (PDT) X-Received: by 2002:a05:7300:dc8b:b0:2be:837d:cc4d with SMTP id 5a478bee46e88-2ca8dcea8a4mr1457314eec.5.1775126858341; Thu, 02 Apr 2026 03:47:38 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 03/16] target/hexagon/cpu: add HVX IEEE FP extension Date: Thu, 2 Apr 2026 03:47:20 -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-ORIG-GUID: 6wSV6cocFeSotUmD9Xu1MsUiLoYIs9Lk X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfX/ZWQ4eAXX3el 5dQOTgsT7K2EuUusSXGtZLABD+XnEvyukjzvbfZyUWJUsm+Q+CrMqj21g0sg4mQauJH4DM3OK/s jtCfMjjRjPFFW9zBL5ZLFJGtZFpzu8hbE2Y7O7pjROdz7TW3pblp4rlYi8j0IetmBhO/ShzvgNB Tikkb0/yjYSOu55gBphbMEx05e1M1HswrK0pKIy8CAh/Qj//1H9YxC0m90qlO/nrk4xM0zhXSt3 D7jn0FCH0ZASNM+BnfVAC1fHmvLVhUJ19EKT6KuFlwO91FMYvgH4FoQEWwhgygdwsHZ6CV/uUTl x+jK5I3VX9wSeVxzw2tXFKRGLFVLZDFYFbKb3/GYiyrP3uunjH+5ZawE4dM+vFIPGhx2nwdM2Ua AlG6D67g+Sb+UQmJROa/9HmuHR2PEFFv65S1CqSNnw75Av2VAC+7OfgIBfkPyDny23Kf2KCTMNr yxgWJRMc+8mJTL/4BXg== X-Proofpoint-GUID: 6wSV6cocFeSotUmD9Xu1MsUiLoYIs9Lk X-Authority-Analysis: v=2.4 cv=Ap/jHe9P c=1 sm=1 tr=0 ts=69ce494b cx=c_pps a=cFYjgdjTJScbgFmBucgdfQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=QVGlRXe_Esul27Px_LMA:9 a=scEy_gLbYbu1JhEsrz4S:22 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 malwarescore=0 spamscore=0 clxscore=1015 bulkscore=0 impostorscore=0 adultscore=0 lowpriorityscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775126892000158500 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 effectively only set the destination registers to 0. 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/translate.c | 1 + target/hexagon/gen_tcg_funcs.py | 11 ++++++++++ target/hexagon/hex_common.py | 35 ++++++++++++++++++++++++++++++++ 7 files changed, 53 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/translate.c b/target/hexagon/translate.c index 633401451d..fa8f615a9e 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) diff --git a/target/hexagon/gen_tcg_funcs.py b/target/hexagon/gen_tcg_funcs= .py index 87b7f10d7f..b752ec883c 100755 --- a/target/hexagon/gen_tcg_funcs.py +++ b/target/hexagon/gen_tcg_funcs.py @@ -22,6 +22,14 @@ import string import hex_common =20 +def gen_disabled_ieee_insn(f, tag, regs): + f.write(" if (!ctx->ieee_fp_extension) {\n") + for regtype, regid in regs: + reg =3D hex_common.get_register(tag, regtype, regid) + if reg.is_hvx_reg() and reg.is_written(): + reg.gen_zero(f) + f.write(" return;\n") + f.write(" }\n") =20 ## ## Generate the TCG code to call the helper @@ -62,6 +70,9 @@ def gen_tcg_func(f, tag, regs, imms): i =3D 1 if immlett.isupper() else 0 f.write(f" int {hex_common.imm_name(immlett)} =3D insn->immed[{= i}];\n") =20 + if "A_HVX_IEEE_FP" in hex_common.attribdict[tag]: + gen_disabled_ieee_insn(f, tag, regs) + if hex_common.is_idef_parser_enabled(tag): declared =3D [] ## Handle registers diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py index c0e9f26aeb..32a61505ce 100755 --- a/target/hexagon/hex_common.py +++ b/target/hexagon/hex_common.py @@ -723,6 +723,11 @@ def decl_tcg(self, f, tag, regno): TCGv_ptr {self.reg_tcg()} =3D tcg_temp_new_ptr(); tcg_gen_addi_ptr({self.reg_tcg()}, tcg_env, {self.hvx_off(= )}); """)) + def gen_zero(self, f): + f.write(code_fmt(f"""\ + tcg_gen_gvec_dup_imm(MO_64, {self.hvx_off()}, + sizeof(MMVector), sizeof(MMVector), 0); + """)) def gen_write(self, f, tag): pass def helper_hvx_desc(self, f): @@ -789,6 +794,11 @@ def decl_tcg(self, f, tag, regno): TCGv_ptr {self.reg_tcg()} =3D tcg_temp_new_ptr(); tcg_gen_addi_ptr({self.reg_tcg()}, tcg_env, {self.hvx_off(= )}); """)) + def gen_zero(self, f): + f.write(code_fmt(f"""\ + tcg_gen_gvec_dup_imm(MO_64, {self.hvx_off()}, + sizeof(MMVector), sizeof(MMVector), 0); + """)) def gen_write(self, f, tag): pass def helper_hvx_desc(self, f): @@ -821,6 +831,11 @@ def decl_tcg(self, f, tag, regno): vreg_src_off(ctx, {self.reg_num}), sizeof(MMVector), sizeof(MMVector)); """)) + def gen_zero(self, f): + f.write(code_fmt(f"""\ + tcg_gen_gvec_dup_imm(MO_64, {self.hvx_off()}, + sizeof(MMVector), sizeof(MMVector), 0); + """)) def gen_write(self, f, tag): f.write(code_fmt(f"""\ gen_vreg_write(ctx, {self.hvx_off()}, {self.reg_num}, @@ -854,6 +869,11 @@ def decl_tcg(self, f, tag, regno): TCGv_ptr {self.reg_tcg()} =3D tcg_temp_new_ptr(); tcg_gen_addi_ptr({self.reg_tcg()}, tcg_env, {self.hvx_off(= )}); """)) + def gen_zero(self, f): + f.write(code_fmt(f"""\ + tcg_gen_gvec_dup_imm(MO_64, {self.hvx_off()}, + sizeof(MMVectorPair), sizeof(MMVectorPair), 0); + """)) def gen_write(self, f, tag): pass def helper_hvx_desc(self, f): @@ -913,6 +933,11 @@ def decl_tcg(self, f, tag, regno): TCGv_ptr {self.reg_tcg()} =3D tcg_temp_new_ptr(); tcg_gen_addi_ptr({self.reg_tcg()}, tcg_env, {self.hvx_off(= )}); """)) + def gen_zero(self, f): + f.write(code_fmt(f"""\ + tcg_gen_gvec_dup_imm(MO_64, {self.hvx_off()}, + sizeof(MMVectorPair), sizeof(MMVectorPair), 0); + """)) def gen_write(self, f, tag): f.write(code_fmt(f"""\ gen_vreg_write_pair(ctx, {self.hvx_off()}, {self.reg_num}, @@ -946,6 +971,11 @@ def decl_tcg(self, f, tag, regno): TCGv_ptr {self.reg_tcg()} =3D tcg_temp_new_ptr(); tcg_gen_addi_ptr({self.reg_tcg()}, tcg_env, {self.hvx_off(= )}); """)) + def gen_zero(self, f): + f.write(code_fmt(f"""\ + tcg_gen_gvec_dup_imm(MO_64, {self.hvx_off()}, + sizeof(MMQReg), sizeof(MMQReg), 0); + """)) def gen_write(self, f, tag): pass def helper_hvx_desc(self, f): @@ -993,6 +1023,11 @@ def decl_tcg(self, f, tag, regno): TCGv_ptr {self.reg_tcg()} =3D tcg_temp_new_ptr(); tcg_gen_addi_ptr({self.reg_tcg()}, tcg_env, {self.hvx_off(= )}); """)) + def gen_zero(self, f): + f.write(code_fmt(f"""\ + tcg_gen_gvec_dup_imm(MO_64, {self.hvx_off()}, + sizeof(MMQReg), sizeof(MMQReg), 0); + """)) def gen_write(self, f, tag): pass def helper_hvx_desc(self, f): --=20 2.37.2 From nobody Fri Apr 3 20:53:34 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=1775127005; cv=none; d=zohomail.com; s=zohoarc; b=a3uKySRmJCOVAICe5QCqe1Frkyl3qkboaZG8sQuSSeX2KV2/Xk2hwXRtjXtrTyOgNaa8/I9RWvXmmSJ6dBkFN+ttokKwjO6wBgkNJnn1qf7X+QU9e/5Qa2PxvraWUcK4D5oR3zeAvT6pPnaEgPCvpdpcWb5aucO6NUY519swmc4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775127005; 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=Xz1CmgTtPGxO7CCCYjV3Yce2C/RGGhA/FnEMzJwczJA=; b=WPerMCB57JLz621eehxziA++YJgldTGJmffcdP8kupU/Lz4zy0RgjPUKvXl1OLHSEzfDwHn00KnVOB2F22uqVmP0xMzo5SRx9GFQYRCZZPngGesXX5PDir7X4+1P+FWIsx3MXUXPV6fKTICJuJFPWZ5no8LmRifMMGfpMF8h6fo= 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 1775127005682728.4175103347823; Thu, 2 Apr 2026 03:50:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8FaX-0004fx-Bn; Thu, 02 Apr 2026 06:47:49 -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 1w8FaV-0004ea-1I for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:47 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8FaS-0007nJ-Kn for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:46 -0400 Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6326p30D4009504 for ; Thu, 2 Apr 2026 10:47:40 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 4d97e03jxh-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:40 +0000 (GMT) Received: by mail-dy1-f198.google.com with SMTP id 5a478bee46e88-2c16233ee11so1114862eec.1 for ; Thu, 02 Apr 2026 03:47:40 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:38 -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=Xz1CmgTtPGx O7CCCYjV3Yce2C/RGGhA/FnEMzJwczJA=; b=OrlP/CFnYSvs87oJ/wfcAwKFXIa tWn7L5sjQX4LwP/ojJfuRvcFki4eR1I3pApICPsah/Dm+ltMxJh2Qh7fbdmdurO2 kJREvZf1dPdphhNNuXM+DA5MI5TnCQFtNbmYr+QcAS2rBf8641G2M/KZVxmqidL2 1rNhbvQE+FFWj2T5XjWjgoH9b6EavOQDUJXhEpHUu/hV+pelLNMZc6CMb8eYyd2I 3lbBmAfQbedRoy8QDqbE28XFiB3nrLq9W3cOLVuX2gm1kSjTOmyGRNtVD1qOEv+s 2BYNy7OM34e4vpEH455eqMr4glXtTQ/nOBrcpd2RRkJdNEflFMQ1s8q9/Pw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126860; x=1775731660; 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=Xz1CmgTtPGxO7CCCYjV3Yce2C/RGGhA/FnEMzJwczJA=; b=GfmHyBFipgYMLZA+IaNrYx5Ma5Q8oiTKRFXOb/fUHQrl5m5YCxXiWiPPMwnPnDyZL3 4U1flTqfriPKbgRrAY0/v+R5SL6h0QN2+ywQvZ4Li6D+GEgmZ05npq9vmOzqnIMVlJEi CEsX87fDAQcPwGuYGo3BCvBV7DPE48Y/AOaOR60S4/swMnpljqWnzzxbzp7RigZmqnJo MZ1pngwUHFi9MNCtosnLJQE5CC1H47/NX56k721e7ehY4tVWBMmQDSBxdeGdfVUAdMo9 3FcJoLkeL4gOYJJ6CteF19e6zhEknHCszkRcmuHbw1yaMG7gko7EUnJ9ESZ0UAdFnoyK 10hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126860; x=1775731660; 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=Xz1CmgTtPGxO7CCCYjV3Yce2C/RGGhA/FnEMzJwczJA=; b=baFJFYaNz4RCKzT0WiA+zCmpUMl6kmD/05qsuUCIjD8A1WmfSJGt2KBoqXQOTBC1tO q7U/asg2GfmH3c2RlctyTdzgJc9miPUpXb2L+zf0S5e9wQpCxMLsdkQvAMVvUkxzqKsl NcUTKoLHxQQTH6A/aX6m6QKg/hiAFRuqmLiP8OFLizG8572+0lBtj9+m4mox6vVCvOrZ lF4IfEPYf17E2jywgR90mcqWRXscyCFnBPhHkUWUrdCLzm+Lb56N92HCRxY2ndE+gzlx vRVUX0rvfBbv+L97zM041joHOOXRMAAeh//hH5XhqTi7TmoBZihzMBQXf/7MsPBNK9YH NVWQ== X-Gm-Message-State: AOJu0YxHkB77GRbwu6D5R8kL9mbbM014lyaB+BlE+bx06DXBpyQJNk2T eC2EsBSfUXaj6uPOxm9BvucFv/+8JcVhEM7RxN6/6snW0dPv3ErqHEjB0ohOr+mjU0q7zPAr7CS bhjd8ESNj45R5I89ngkzn9/Pz2cbnPA7lPx3eGPPRRPz7UONRRSW4A5jOYrGfuvNAANp2 X-Gm-Gg: AeBDieuvxIsAagEkDskMNL8VPbi2uu5bi8EccnGCrGQ/YrBnsN1IN8/4cHm6heclLRL EkX8pgvZFNIIjnT24fDTWg2Dvj5iWf0LuBP8ev3AcFKAV+kWwVYCpksk5lybaPloaT79vjwIayQ at4Wn5uDPUKHDPCjtLhZO4GeCh0Qn/jQ8KLFIepuZHwcU9BK7K5xMYAIr3WMtHQYjKA3mx+793q BcokcJJIsYdsToDQ5bVc+5Un1jHKAgJXJpiNt+lnwbsrqx3uZ7O0nDvi5X2oxKAlX7cZ+Kx4CQc HZjOJaJRDyFiNBS9o2dPnjr+cHFAqr24wV9jSSo55x3y9QlAD1Ze6jElsZZqghJ3wKDKxMLGljC MoqMnaxrBn1Y86isx55eYrmZJsft16rzG939aff6nb8GBAgajALzLCZM+Z11jtfFtHX5zFd54ju aNCdl0mLQH X-Received: by 2002:a05:7301:fa12:b0:2b7:2664:ae9f with SMTP id 5a478bee46e88-2ca8d4889ffmr1569921eec.1.1775126859676; Thu, 02 Apr 2026 03:47:39 -0700 (PDT) X-Received: by 2002:a05:7301:fa12:b0:2b7:2664:ae9f with SMTP id 5a478bee46e88-2ca8d4889ffmr1569901eec.1.1775126859169; Thu, 02 Apr 2026 03:47:39 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 04/16] hexagon: group cpu configurations in their own struct Date: Thu, 2 Apr 2026 03:47:21 -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=fdGgCkQF c=1 sm=1 tr=0 ts=69ce494c cx=c_pps a=wEP8DlPgTf/vqF+yE6f9lg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=AHWWR7nXwgbOQO2z_T8A:9 a=bBxd6f-gb0O0v-kibOvt:22 X-Proofpoint-ORIG-GUID: sRQn15xrTJeeXm5wexdmRVSwkj5lCxEy X-Proofpoint-GUID: sRQn15xrTJeeXm5wexdmRVSwkj5lCxEy X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfX3YBYdf47/CU9 kmLNSR5Ar8A6BBmUyfWEippTFW47Pwu2vILiwrHwrb0iLk07hiZb31O8Q7ic5EdnoBKnH2QzPfU oqnsHXOfwYOHg+PzHwS/Hdwy2jucp0FRlgeD4D2p3oZMptnxzlCCgOCAnW43KcOQBgot9MtzEmj aRYL4G3x4M60Z29BbkqnenuXtE2ZRCXa5h2Z+VbGz18qVk9zMpwUPvNh43FV2DXad6+edDZ4u6T tyMKSbdfOUnsr422gxwtYaVRmQIO7EwGO2vwWkATa2D9HJnmMKG8KWIHDSTJI5Dd8JsbpGgzKWZ g+kOJYB32IRoDhMYMoZ8htfwRluxdN+OqJ8hOXwgIyLCXCdAMCOs2ojj8wbmsdnvBM+VL4PfIwO APYP59aiqXlAE+DVhBCfHoTMKOUea3XnqLDOB59Qh+kCX0zHSbMPDcSKTssaGjXSpU/6Brgl6DA hj8YlBVaGUYa5qFLu5A== 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 adultscore=0 malwarescore=0 impostorscore=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775127006288158500 Content-Type: text/plain; charset="utf-8" This will be used in a follow up commit. Signed-off-by: Matheus Tavares Bernardino --- target/hexagon/cpu.h | 10 +++------- target/hexagon/cpu_bits.h | 7 +++++++ target/hexagon/cpu.c | 14 +++++++------- target/hexagon/translate.c | 6 +++--- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h index 77822a48b6..d28beaa92f 100644 --- a/target/hexagon/cpu.h +++ b/target/hexagon/cpu.h @@ -119,19 +119,15 @@ typedef struct HexagonCPUClass { ResettablePhases parent_phases; } HexagonCPUClass; =20 +#include "cpu_bits.h" + struct ArchCPU { CPUState parent_obj; =20 CPUHexagonState env; - - bool lldb_compat; - target_ulong lldb_stack_adjust; - bool short_circuit; - bool ieee_fp_extension; + HexagonCPUConfig cfg; }; =20 -#include "cpu_bits.h" - FIELD(TB_FLAGS, IS_TIGHT_LOOP, 0, 1) =20 G_NORETURN void hexagon_raise_exception_err(CPUHexagonState *env, diff --git a/target/hexagon/cpu_bits.h b/target/hexagon/cpu_bits.h index 19beca81c0..83d13de569 100644 --- a/target/hexagon/cpu_bits.h +++ b/target/hexagon/cpu_bits.h @@ -20,6 +20,13 @@ =20 #include "qemu/bitops.h" =20 +typedef struct HexagonCPUConfig { + bool lldb_compat; + uint32_t lldb_stack_adjust; + bool short_circuit; + bool ieee_fp_extension; +} HexagonCPUConfig; + #define PCALIGN 4 #define PCALIGN_MASK (PCALIGN - 1) =20 diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index 8b72a5d3c8..5470d9c7ce 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -50,11 +50,11 @@ static ObjectClass *hexagon_cpu_class_by_name(const cha= r *cpu_model) } =20 static const Property hexagon_cpu_properties[] =3D { - DEFINE_PROP_BOOL("lldb-compat", HexagonCPU, lldb_compat, false), - 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), + DEFINE_PROP_BOOL("lldb-compat", HexagonCPU, cfg.lldb_compat, false), + DEFINE_PROP_UNSIGNED("lldb-stack-adjust", HexagonCPU, cfg.lldb_stack_a= djust, + 0, qdev_prop_uint32, target_ulong), + DEFINE_PROP_BOOL("short-circuit", HexagonCPU, cfg.short_circuit, true), + DEFINE_PROP_BOOL("ieee-fp", HexagonCPU, cfg.ieee_fp_extension, true), }; =20 const char * const hexagon_regnames[TOTAL_PER_THREAD_REGS] =3D { @@ -77,7 +77,7 @@ const char * const hexagon_regnames[TOTAL_PER_THREAD_REGS= ] =3D { static target_ulong adjust_stack_ptrs(CPUHexagonState *env, target_ulong a= ddr) { HexagonCPU *cpu =3D env_archcpu(env); - target_ulong stack_adjust =3D cpu->lldb_stack_adjust; + target_ulong stack_adjust =3D cpu->cfg.lldb_stack_adjust; target_ulong stack_start =3D env->stack_start; target_ulong stack_size =3D 0x10000; =20 @@ -181,7 +181,7 @@ static void hexagon_dump(CPUHexagonState *env, FILE *f,= int flags) { HexagonCPU *cpu =3D env_archcpu(env); =20 - if (cpu->lldb_compat) { + if (cpu->cfg.lldb_compat) { /* * When comparing with LLDB, it doesn't step through single-cycle * hardware loops the same way. So, we just skip them here diff --git a/target/hexagon/translate.c b/target/hexagon/translate.c index fa8f615a9e..ce3af96675 100644 --- a/target/hexagon/translate.c +++ b/target/hexagon/translate.c @@ -987,8 +987,8 @@ static void hexagon_tr_init_disas_context(DisasContextB= ase *dcbase, ctx->num_hvx_insns =3D 0; 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; + ctx->short_circuit =3D hex_cpu->cfg.short_circuit; + ctx->ieee_fp_extension =3D hex_cpu->cfg.ieee_fp_extension; } =20 static void hexagon_tr_tb_start(DisasContextBase *db, CPUState *cpu) @@ -1041,7 +1041,7 @@ static void hexagon_tr_translate_packet(DisasContextB= ase *dcbase, CPUState *cpu) * so end the TLB after every packet. */ HexagonCPU *hex_cpu =3D env_archcpu(env); - if (hex_cpu->lldb_compat && qemu_loglevel_mask(CPU_LOG_TB_CPU)) { + if (hex_cpu->cfg.lldb_compat && qemu_loglevel_mask(CPU_LOG_TB_CPU)= ) { ctx->base.is_jmp =3D DISAS_TOO_MANY; } } --=20 2.37.2 From nobody Fri Apr 3 20:53:34 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=1775127000; cv=none; d=zohomail.com; s=zohoarc; b=GDiYFZ3SMuvxB4RGfinLdJMpcE8yUtUEUwMAdpHPP+63LWXUN6/b/BXuZVJ0LuYRkUKkWFbMUVbbLFGg3JYbsew7JomnEnIVrTWSbAe7KDJORzN5Q5sdQ4IXB7eSoIW7giHaLYyOSvvf2vc4m0BgaB/9rklEcjNwt4KqJhjxqmE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775127000; 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=0S7Zfen1BUQ8XVf0HAhwF1ysgfu/0MLe2KDwvHQXyBo=; b=CoqtiXj/ikUtMZkf22UOIKrhhHWEtvwkvsiC3x76JmlzSBbfI3oUy/XgDRxJGPQdq9yEkCauXYMXggFoiX2gSa8CHtaahHCOQXXG1T5LUU2YbosaOzk2yE2g71GV3/S9gLeYz/YMWEtskiBCTDTLmG76qth9HwDJnpWP2gWg23w= 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 1775127000344525.0294495457337; Thu, 2 Apr 2026 03:50:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Faa-0004hZ-Gb; Thu, 02 Apr 2026 06:47:52 -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 1w8FaV-0004fE-TH for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:48 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8FaS-0007nS-SS for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:47 -0400 Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6327CVWa3044437 for ; Thu, 2 Apr 2026 10:47:41 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 4d9483vevp-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:41 +0000 (GMT) Received: by mail-dy1-f198.google.com with SMTP id 5a478bee46e88-2c72849f648so3525212eec.0 for ; Thu, 02 Apr 2026 03:47:41 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:39 -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=0S7Zfen1BUQ 8XVf0HAhwF1ysgfu/0MLe2KDwvHQXyBo=; b=lwF3Ig/KisnwOEwsDBc5sUvH2Nh 7do2BnYvPNFEex7XX/deznUe5B2PAMVD+ADxKL/KxJZD0S4HSBxyzYVz/K5KrwPz ZEv2Yn0O5lQedQYbgSJcnwnlG8lBiTqZV5DalJXyLB06Ud5EQn4H1k7PUcnEGGBH dYP/TWeShR6BqSOUvrlLn1BvoJBKRxH0ngRMfhs44tvWXonXM6bpRp96hDO9Pn0a foNayb+K9y3U89fEyZ8uY8++VZn3ut6PZuLOKpBm4H57RZky2xvoUd5h0GtlEzQ2 KN1Lt2LCVJHK7lwA2jSM6BBJRfWX3OemBQTkk2QUgAg6iciQtIXlTqjrI7g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126861; x=1775731661; 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=0S7Zfen1BUQ8XVf0HAhwF1ysgfu/0MLe2KDwvHQXyBo=; b=ZljdqLDiXzxALc0IyHII/1KN0x0k4ToDIWBwRDNo08ldNOcWFuu7HvpqDkFCv34aB/ xoJ1nHKBtlIn2Kv3AGDRPWPP25GjuEhCghSSyAJ9L2bOB1kPzlmuTD+l9L0ZFq3frd2k aL5iyhPDoaBeElihSFo+xFWkxMY2RMZg1hDI0BM2XyTCgc80AnQntW3M/ltm6bT6UZXJ CG3vCCrxyc6B9MdMVYVKseU9iDoMwUxiXNIj4IlR6Ve3st8OrQ+4vSP2S8J095O2w+Kb B2CZxacGRWnm8gaI9yO5QfNBKxpbVCgrSCzMYjVZ5eecDFHabjduxDCoXFwvsATQeud/ XTZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126861; x=1775731661; 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=0S7Zfen1BUQ8XVf0HAhwF1ysgfu/0MLe2KDwvHQXyBo=; b=fdhgS8yZoDEBG94Cq8JJadRPV3T8RW9S4H0NfspN2bY4tf1u6Qi/AIgp1/GSzO/FWo 2bJPcEo4VSr9uZfHuBZTBatv60JcgKVZkTKpjT0y62gHZ1titKQn4a1nDGTAY/mrE8/E 57E4eJto2mlCaE6b7sPiNRWRVGjeVzTRFr7YxrtlBuBWyAhiA5m+JywX6vauVpLiWWmR f2U+KTXUJC4yFoKjm9IVL804bjQjeXckyQLVo6EFq0RQo0t+PXjHc9oFqx15+phrdiKJ 2NBzOQ1DrfJ1m2v3TR+Qtuf7TAOfSbEHbwHgFkcjJLyOp/OhcXmDgQF8gF9QNhWZwUWP ao2g== X-Gm-Message-State: AOJu0YwXviw/2zSV3XHQAiMH6/QugYv5VwRTzH0XQR8UPgypWE6HYDui NI1x/JTbsu/ZMNOgRMFx8b6+4nyKMCAFtabl1Fmgcagm11ERddo5GaFYqU4ml3y5nrzvVuSyJDl Xt2kTuyf2xOX1JWjfnimtCNwaX4o8rKF9E2gdfGTSdXkE7l9a+gNwkFXpW+NfsJs5XM9t X-Gm-Gg: ATEYQzyzS8DpGJNTUs3A+BWE54AHRCjm3LrSZegFI37MALP67mjPT3XaTghPcG5kJPE d2Epq0hk2O+KUkQNJDK3DnmH1kP9jS4W6+VdBzTmkwrPwlfjVcdj0On4JzgCqPNRJcEu6DakVjI I88iUgLEKXSNhbiu+Lv6U6wwLuKzLta+ALma/gu3lrfJj1Lhvy/aGjPFn82X8W3sYFWWyZLPamS obE9+sXj0cV3wlE4Pvbu0qkxm+KZvaQe8ur3s4f/o33iZvzMQYgQ0WYTg8Smk+4lOyNQt8DBTOE i3yJECzqUycCXQxJNtZrYZ9mQmC0L06P9EJ85tQ3SdZtuiMwGzAV7mkFWpAg93X0OBmS4wVuPuU 3+83iVYiNxGzWl//VBbMs/NsWYybCEh6iUX06LOLiSiwbHXtBZVcGkdiMo8cRKusj7RThG10/BO BkSjOV42vt X-Received: by 2002:a05:7301:6087:b0:2c5:b23e:48a6 with SMTP id 5a478bee46e88-2c9328abd2fmr3675947eec.23.1775126860598; Thu, 02 Apr 2026 03:47:40 -0700 (PDT) X-Received: by 2002:a05:7301:6087:b0:2c5:b23e:48a6 with SMTP id 5a478bee46e88-2c9328abd2fmr3675927eec.23.1775126860093; Thu, 02 Apr 2026 03:47:40 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 05/16] hexagon: print info on "-d in_asm" for disabled IEEE FP instructions Date: Thu, 2 Apr 2026 03:47:22 -0700 Message-Id: <3ff972307eb799dad24ec655759ee37aa788ca1f.1775122853.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=RYydyltv c=1 sm=1 tr=0 ts=69ce494d cx=c_pps a=wEP8DlPgTf/vqF+yE6f9lg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=uwSgyZDXI7pCxt1u4dUA:9 a=bBxd6f-gb0O0v-kibOvt:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfXziCcT6Yp/wby AnuDEdEY/hqClOkgfl9tOK0uZnD1vKHemmahieIkgelO0qNCfkAcDRdT6mNkDb7BRdL7I5jBTwi fHVfK2QeHSGK9yFUm2jp8aG3jssNZT3GTKOQgS5lT/2KGKDxWJpo8VWIzYf8u1EIYgnEHt/apuG Cak+5v7Y+qPfQEe4KOzdyOxAF7MQXNIdDRJwbx4x15toijZ+uqOIxNfi7nDoYTSFJcoDKHsIc44 B7eSdZltpLejRnlKh0GRp04OPPirgkzsV6mxrAbADOa013snWmJSjgmeGPQRtTwiDtkonlTUg89 B7KdFyuCyhKPG8qytNSlcHjCVoKruXE6cptwLCHTbFq+xhaGXKLR4scYAaG12+B3oJ/0ta0irZs H6avN2jQyE+zzjnBHLRCnXd0HYZVhMZ6YdCIpvcoRvMZ9wBI5i/fTv/iDyQcc7kg51Q5xu7xq4f JZP/zz2Ua1rg2rVQjfA== X-Proofpoint-ORIG-GUID: eUY9D6Uts2z6iNn0V9jV14Lljx_xmFqd X-Proofpoint-GUID: eUY9D6Uts2z6iNn0V9jV14Lljx_xmFqd 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 clxscore=1015 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 impostorscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775127002350154100 Content-Type: text/plain; charset="utf-8" When cpu->cfg.ieee_fp_extension is off, IEEE FP instructions don't get executed. Let's print that info on the "-d in_asm" output to help users. This will generate an output like the following: 0x00020e30: 0x1f82e1c0 { V0.sf =3D vadd(V1.sf,V2.sf) (disabled: no i= eee_fp) } Signed-off-by: Matheus Tavares Bernardino --- target/hexagon/cpu_bits.h | 3 ++- target/hexagon/printinsn.h | 2 +- disas/hexagon.c | 3 ++- target/hexagon/cpu.c | 2 ++ target/hexagon/decode.c | 4 ++-- target/hexagon/printinsn.c | 7 ++++++- 6 files changed, 15 insertions(+), 6 deletions(-) diff --git a/target/hexagon/cpu_bits.h b/target/hexagon/cpu_bits.h index 83d13de569..1f9e617d72 100644 --- a/target/hexagon/cpu_bits.h +++ b/target/hexagon/cpu_bits.h @@ -72,6 +72,7 @@ static inline bool is_packet_end(uint32_t endocing) return ((bits =3D=3D 0x3) || (bits =3D=3D 0x0)); } =20 -int disassemble_hexagon(uint32_t *words, int nwords, bfd_vma pc, GString *= buf); +int disassemble_hexagon(uint32_t *words, int nwords, bfd_vma pc, + GString *buf, const HexagonCPUConfig *cfg); =20 #endif diff --git a/target/hexagon/printinsn.h b/target/hexagon/printinsn.h index 2ecd1731d0..6a45ec571f 100644 --- a/target/hexagon/printinsn.h +++ b/target/hexagon/printinsn.h @@ -21,7 +21,7 @@ #include "insn.h" =20 void snprint_a_pkt_disas(GString *buf, Packet *pkt, uint32_t *words, - target_ulong pc); + target_ulong pc, const HexagonCPUConfig *cfg); void snprint_a_pkt_debug(GString *buf, Packet *pkt); =20 #endif diff --git a/disas/hexagon.c b/disas/hexagon.c index c1a4ffc5f6..e2d3804606 100644 --- a/disas/hexagon.c +++ b/disas/hexagon.c @@ -57,8 +57,9 @@ int print_insn_hexagon(bfd_vma memaddr, struct disassembl= e_info *info) return PACKET_WORDS_MAX * sizeof(uint32_t); } =20 + const HexagonCPUConfig *cfg =3D info->target_info; buf =3D g_string_sized_new(PACKET_BUFFER_LEN); - len =3D disassemble_hexagon(words, i, memaddr, buf); + len =3D disassemble_hexagon(words, i, memaddr, buf, cfg); (*info->fprintf_func)(info->stream, "%s", buf->str); g_string_free(buf, true); =20 diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index 5470d9c7ce..d7f4df5f96 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -307,6 +307,8 @@ static void hexagon_cpu_disas_set_info(const CPUState *= cs, { info->print_insn =3D print_insn_hexagon; info->endian =3D BFD_ENDIAN_LITTLE; + HexagonCPU *cpu =3D HEXAGON_CPU(cs); + info->target_info =3D &cpu->cfg; } =20 static void hexagon_cpu_realize(DeviceState *dev, Error **errp) diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c index dbc9c630e8..d7ce8c8e1b 100644 --- a/target/hexagon/decode.c +++ b/target/hexagon/decode.c @@ -801,7 +801,7 @@ int decode_packet(DisasContext *ctx, int max_words, con= st uint32_t *words, =20 /* Used for "-d in_asm" logging */ int disassemble_hexagon(uint32_t *words, int nwords, bfd_vma pc, - GString *buf) + GString *buf, const HexagonCPUConfig *cfg) { DisasContext ctx; Packet pkt; @@ -810,7 +810,7 @@ int disassemble_hexagon(uint32_t *words, int nwords, bf= d_vma pc, ctx.pkt =3D &pkt; =20 if (decode_packet(&ctx, nwords, words, &pkt, true) > 0) { - snprint_a_pkt_disas(buf, &pkt, words, pc); + snprint_a_pkt_disas(buf, &pkt, words, pc, cfg); return pkt.encod_pkt_size_in_bytes; } else { g_string_assign(buf, ""); diff --git a/target/hexagon/printinsn.c b/target/hexagon/printinsn.c index 4865cdd133..85527f56e2 100644 --- a/target/hexagon/printinsn.c +++ b/target/hexagon/printinsn.c @@ -51,7 +51,7 @@ static void snprintinsn(GString *buf, Insn *insn) } =20 void snprint_a_pkt_disas(GString *buf, Packet *pkt, uint32_t *words, - target_ulong pc) + target_ulong pc, const HexagonCPUConfig *cfg) { bool has_endloop0 =3D false; bool has_endloop1 =3D false; @@ -85,6 +85,11 @@ void snprint_a_pkt_disas(GString *buf, Packet *pkt, uint= 32_t *words, g_string_append(buf, "\t"); snprintinsn(buf, &(pkt->insn[i])); =20 + if (!cfg->ieee_fp_extension && + GET_ATTRIB(pkt->insn[i].opcode, A_HVX_IEEE_FP)) { + g_string_append(buf, " (disabled: no ieee_fp)"); + } + if (i < pkt->num_insns - 1) { /* * Subinstructions are two instructions encoded --=20 2.37.2 From nobody Fri Apr 3 20:53:34 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=1775127009; cv=none; d=zohomail.com; s=zohoarc; b=lZXkvmOaUsRdpXq9r4hnQMQh6MVJWv4mAIqXgY8UvkuUMZDCgkgGIztzNniiAHNCJ7XgQhJJF67yuLDSpreycZJf8zJK9JjaGUqemckn/ZZ2CVsx4+NlxHaHdvono6fZhrRDol38hFh1OpOxF63GHNvt+w4DdevnFb2/v83aeAs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775127009; 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=Lt5ZKcS9m827h6lrANzVyp3BPHqMMY0lTAXwtdIH6DQ=; b=OOBBb3/OrIJjg9O0tca5mRr3K4wHwDDDsTHwuvpnhUU4sUZO9EIOi6ThjHIS6zftRkNGTKTCpLCCFwZL06MLkCgYrHUW2kCRpET+YbyG5z7luRe0+yOqLtFx8WgBQyjnIz7hXXuDHE8I+3knLGbx1C4f0gv1lT1/wv+Q4Z5i7og= 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 17751270096471017.984382232572; Thu, 2 Apr 2026 03:50:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Fad-0004im-Pf; Thu, 02 Apr 2026 06:47:55 -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 1w8FaX-0004fu-7q for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:49 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8FaT-0007ng-GM for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:48 -0400 Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6326lgFv4009757 for ; Thu, 2 Apr 2026 10:47:43 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 4d97e03jxr-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:43 +0000 (GMT) Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-2c7130f88e3so5925574eec.0 for ; Thu, 02 Apr 2026 03:47:43 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:40 -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=Lt5ZKcS9m82 7h6lrANzVyp3BPHqMMY0lTAXwtdIH6DQ=; b=F6zoFUQT3FhbXCi/cF6XidoqRIK 47JhkddEgFhzD4u6xAnGWl7UDpgI0TJgHoJl3LpLBUXMubGzdJ9UqqsGNhQuuFVq 13qHs042GXgUFsg2g3SEjKGFJi7bVWpbvAmhyxOu0xNOQRTKQRp2DyiMPMzXzebg VnUVVO9CpclUaJuDtLd5JaLLEpbgLwzmoew8xMSJRXjxzkoXJpDfP7vrkmDKmi8N jxnt4zk6UBqKOT+WprpAYVGCBWWJ8Qnwbf5BryyvrO5oLMsSo8pPb9X4gfYpmYUp 7f7iNTnpGRXJ6IvDJf6wz/YHJt9T2wozK4LBUU88x3pPa0aGzPdgtgOjSyg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126862; x=1775731662; 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=Lt5ZKcS9m827h6lrANzVyp3BPHqMMY0lTAXwtdIH6DQ=; b=bMyEqWD2rfJi0FYVuWOhvBRDCUYsFwkkTTC0dubEBfW6G1jmhT2kAvOM/1PPBA2mii ErwpDz8k2mf1R0Kw5ksKsShLIHn63sCUpzYJj2gemRvc8JCR+1lE5sMG5PliyQnnLhWV uQ82rhzIOpIXyvMnY/AEuL7AipSqSZBvNCoRcgBzZRHKxFMAzGz4OCV+Xdg1IAnlmTvE n+FaNjwi58NjTF7e3jpVDc23UHuJdFUVgR4CyvZKmlwgyAqS4dnJOkOOv7TNKiHTEpaN pXauVk6Dbzs4nZhOjiMwMOasYD1HNhvFplHejx450VGZ3jSp//aK/zFgiw2NZTLXlj23 AKzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126862; x=1775731662; 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=Lt5ZKcS9m827h6lrANzVyp3BPHqMMY0lTAXwtdIH6DQ=; b=JMrGQKbv0TLDfZLimiKUS+0hiUOrpeZgxZFUfYzi0/gn5zrldKf4x3NF0m8QXFfADy BVJ8JBXAUQfL7xpnJfq9u+ANyMtpHkamj6cyerg5zIo3A64HmBRG9k619m79F+lOZsj1 h1Bo/TIerjFU8AFJN7F/t9Z8ICgOxHYsJb0PN+AJWx+y5TUHX+YM6tGI/EI1nmDxNnbs Xc+/+q63uHFZpbey6fsZ9vxW45oKps8eUtdwG60TIaGA0xmnExCO/OFqZHlOrRisVkuj ON0yzPfyIyFkQ6My9jBrxtuQSWPs6Y+8liC4jj9i1Ez8LRQYdbbZtPAJ0jBJ50wPgdaF R9wQ== X-Gm-Message-State: AOJu0YwFsQ3ESY0wRb7mqF7DghYx0WybnwrEoqVNKE3xXCzaavKcIBfK 2Cqg+vB9JyK71dzoTVeCnzs9+MI56Z20lKsz4vczkPhafoTLWA3y/b63TY45j7lUGes+LbD6Jks OMHlx3TQANnhYN7SwTdkm3t6Du4x2yLeXQuuUb7TJBLd0DWh+UFftSjwJpou1p+1NXOh9 X-Gm-Gg: AeBDiesL55B1YCazz53YgFVl4/GNC+plj+iAH871Oz0OW/IGf5UGuihcksT3e9DOeYu 49gurQAHZf1Xl+NnPI2de4O+SwmHGPtwO15ATL1lQmg9f2qfVKxFsi/yTSADznw6V35ZPxP+9SC WORsmIYyNxZbLACtKqUc3cYozvi3aE26USsUmfQ2Y8WqstyH3Z0yTB0uLAjm5G+MRdy866hYehR eTI9tzx/RO7zYfWDHX0Tq9gB/mh09NdDu6MgOFdtlU8FLmB8e8yCnsbnxo+9TKqUWj6wXA6brA1 ekjM39WrU97nOtgJiUNKMIypfRLuLyrjwOUTkqw53fBjpjxGGjfnhjSnIY4dz/B6iZH4y0Jcpdb WDpAWRWqcWT6mlXdnhTfhadbf8oU8AL0QkIjcFFLmohjeZuw026Bs7S4y8BRrcLhalKpU+eCHLi 6A9jYoVake X-Received: by 2002:a05:7300:1491:b0:2c5:50fe:c771 with SMTP id 5a478bee46e88-2c932cbef0fmr3774123eec.29.1775126861979; Thu, 02 Apr 2026 03:47:41 -0700 (PDT) X-Received: by 2002:a05:7300:1491:b0:2c5:50fe:c771 with SMTP id 5a478bee46e88-2c932cbef0fmr3774104eec.29.1775126861403; Thu, 02 Apr 2026 03:47:41 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 06/16] target/hexagon: add v68 HVX IEEE float arithmetic insns Date: Thu, 2 Apr 2026 03:47:23 -0700 Message-Id: <453a9e248b8c2af50cf89912121605db07792dd5.1775122853.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=fdGgCkQF c=1 sm=1 tr=0 ts=69ce494f cx=c_pps a=cFYjgdjTJScbgFmBucgdfQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=qE3Jc76nSGxyAz5NJn0A:9 a=scEy_gLbYbu1JhEsrz4S:22 X-Proofpoint-ORIG-GUID: iChYAtFk6qsN0enajCyfPfDp9uvRUJ_h X-Proofpoint-GUID: iChYAtFk6qsN0enajCyfPfDp9uvRUJ_h X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfX+AU/e88KFGvQ suuBzkkj/ObxxxJjxkVTPeL9yKQdK0o30gcrvbjeeURs6u+ULj3IvSYzoSeWSKNqxyJJPCTsc4M ZC+B79QLRIzMhnJah7LallXuR4K5ZEeCf+TkGKKSMM9HgdrVpSSAyjSXJnZW5ZMtUvXUCiKyp39 clFWOt86Y7y/eklgDR7r3uRuy2J0T1RVwJKWBkVWFCTzEC8O0iwI4TbEYk8JaaWlUggZNaE0gk/ C/lIX+DiO5AHjO0R6QJcRpL7kE2k4VO0L5O18nC5cKjxtnM5/52JVPGNu1RTK7t8Sb7Fs0/5Okw D22SOrAXgC76syucGYdyH9dvD5DRVcJoylEQ0Sh76WpVbl18uwOiPiuN1PrNlIk3LbFyeea16ej 44dJuN4nCY57UnMsx+IpeePOL04f0JZHrv03GYc1zPQXngPzjWl80L8zKSytv7/juddttSMyqrR jCnqMqEE9hNPxPku1jg== 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 adultscore=0 malwarescore=0 impostorscore=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775127010275158500 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/cpu.h | 1 + target/hexagon/mmvec/hvx_ieee_fp.h | 47 ++++++++++ target/hexagon/mmvec/macros.h | 1 + target/hexagon/mmvec/mmvec.h | 2 + target/hexagon/attribs_def.h.inc | 4 + target/hexagon/arch.c | 8 ++ target/hexagon/cpu.c | 3 + target/hexagon/mmvec/hvx_ieee_fp.c | 69 +++++++++++++++ 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 + 12 files changed, 248 insertions(+) create mode 100644 target/hexagon/mmvec/hvx_ieee_fp.h create mode 100644 target/hexagon/mmvec/hvx_ieee_fp.c diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h index d28beaa92f..5a008d1949 100644 --- a/target/hexagon/cpu.h +++ b/target/hexagon/cpu.h @@ -87,6 +87,7 @@ typedef struct CPUArchState { MemLog mem_log_stores[STORES_MAX]; =20 float_status fp_status; + float_status hvx_fp_status; =20 target_ulong llsc_addr; target_ulong llsc_val; diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h new file mode 100644 index 0000000000..5577179abd --- /dev/null +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HEXAGON_HVX_IEEE_H +#define HEXAGON_HVX_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..ac709d8993 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/hvx_ieee_fp.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/arch.c b/target/hexagon/arch.c index e17e714a6a..358aa71e03 100644 --- a/target/hexagon/arch.c +++ b/target/hexagon/arch.c @@ -199,6 +199,10 @@ void arch_fpop_start(CPUHexagonState *env) set_float_rounding_mode( softfloat_roundingmodes[fREAD_REG_FIELD(USR, USR_FPRND)], &env->fp_status); + /* + * No need to check env->hvx_fp_status, these instructions don't + * raise exceptions nor interact with usr fields. + */ } =20 #ifdef CONFIG_USER_ONLY @@ -232,6 +236,10 @@ void arch_fpop_end(CPUHexagonState *env, bool pkt_need= _commit) SOFTFLOAT_TEST_FLAG(float_flag_overflow, FPOVFF, FPOVFE); SOFTFLOAT_TEST_FLAG(float_flag_underflow, FPUNFF, FPUNFE); } + /* + * No need to check env->hvx_fp_status, these instructions don't + * raise exceptions nor interact with usr fields. + */ } =20 int arch_sf_recip_common(float32 *Rs, float32 *Rt, float32 *Rd, int *adjus= t, diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index d7f4df5f96..d6ca51f175 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -300,6 +300,9 @@ static void hexagon_cpu_reset_hold(Object *obj, ResetTy= pe type) set_float_detect_tininess(float_tininess_before_rounding, &env->fp_sta= tus); /* Default NaN value: sign bit set, all frac bits set */ set_float_default_nan_pattern(0b11111111, &env->fp_status); + + set_default_nan_mode(1, &env->hvx_fp_status); + set_float_default_nan_pattern(0b01111111, &env->hvx_fp_status); } =20 static void hexagon_cpu_disas_set_info(const CPUState *cs, diff --git a/target/hexagon/mmvec/hvx_ieee_fp.c b/target/hexagon/mmvec/hvx_= ieee_fp.c new file mode 100644 index 0000000000..ceb32ce43b --- /dev/null +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -0,0 +1,69 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hvx_ieee_fp.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); \ + return (op); \ + } + +#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); \ + return (op); \ + } + +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 32a61505ce..9e8bcfdcf0 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..e800cda317 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->hvx_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->hvx_= fp_status); + VddV.v[1].sf[i] =3D fp_mult_sf_hf(VuV.hf[2*i+1], VvV.hf[2*i+1], &env->= hvx_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->hvx_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->hvx_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->hvx_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->hvx_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-= >hvx_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->hvx_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->hvx_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->hvx_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->hvx_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->hvx_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->hvx_f= p_status); + VddV.v[1].sf[i] =3D fp_add_sf_hf(VuV.hf[2*i+1], VvV.hf[2*i+1], &env->h= vx_fp_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->hvx_f= p_status); + VddV.v[1].sf[i] =3D fp_sub_sf_hf(VuV.hf[2*i+1], VvV.hf[2*i+1], &env->h= vx_fp_status)) =20 /*************************************************************************= ***** DEBUG Vector/Register Printing diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build index d169cf71b2..9195014821 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/hvx_ieee_fp.c', )) =20 # --=20 2.37.2 From nobody Fri Apr 3 20:53:34 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=1775126909; cv=none; d=zohomail.com; s=zohoarc; b=JxCXoPphfyBPhlw5qyPZyhdmpx0a6TWOXDBTu/z//EkuXOmfPzovEo+cQlFZVhYG+x6iyA0YWdhbij6lc2b73OHyYF6ZBNKGwU3j8GEUxU9gcPDYMF/9oBtDNNwuMov4XI5F2Huj9fE3y47UvxxeAFDlbLpCG5dxb9ycdzYz/os= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775126909; 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=4RSdHo2GcTr7UdboRqLK3BJKg4ylymHGVOjaziBCMkg=; b=HBrodAYn6HMaayqAnaX1D/pseWEF5tFIo4B1t3uRjqsq+ddSehM470gqcP8eVABb1+ez8wQaIG7EGn0gDNtrfPDnnI0RYcNcEyThPBTX1FxCcijoRo8rdQ07z6t50+QWxpojKS2MRxJx4sXBfC/oFUbJGT4hBEa/ubqjer6k5xw= 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 1775126909388370.72046039275097; Thu, 2 Apr 2026 03:48:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8FaY-0004gJ-KG; Thu, 02 Apr 2026 06:47:50 -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 1w8FaW-0004fS-IM for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:48 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8FaT-0007nk-Ha for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:48 -0400 Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6328S2bv353259 for ; Thu, 2 Apr 2026 10:47:44 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 4d9myh8h10-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:43 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-2c72849f648so3525318eec.0 for ; Thu, 02 Apr 2026 03:47:43 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:41 -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=4RSdHo2GcTr 7UdboRqLK3BJKg4ylymHGVOjaziBCMkg=; b=YzS88NfqdfzCwqAmjP8H4iLPJd2 vNw4Y1Dn0+0bHtUf8rxs66IcLp0gEyncH0lNIXDtvA2o+oyl8o/AjPuTzZVhSHMQ Ehw5dsqNJySleQKQaAertLycGJszUjobLL2VO0JxATTUzvJuWf7MDe3pnJXu4LJE QZ12j8enGQy45tfbbWQV/ggsy2rA+aYjqEznnFu6xUKmPbP0vL94GDiJbFDphWmz CRSZhjDoDjk9c7KYXLlXZoUCBycBRx4dno/hOFmI83F7Pi7xDvNXgsYK28/7p6oI I1NUKRyLhqRPnmV5WIWrl6+wqvYTQHYU5CntM3Ck3lRc/W6XNJ315NI02jw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126863; x=1775731663; 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=4RSdHo2GcTr7UdboRqLK3BJKg4ylymHGVOjaziBCMkg=; b=RA3f7HzvrcpVchvZFMfeI6ILjw5x81un9xtnbiI2uVRTCsx011ysNx/Fd8+G2RzkDW 5Come45U11oMzi9uU55syhy6QPA+NHqeUmXc6RrmMWXJe62WrJuOrWeUdPAkv8oDRVQy J1/ePmGCfzsLfQxOcjtbXqWJxvb348su+RPHHUR6u9pjGjdabFEWBbD5uj7IUOfgYNL9 QOWWd3TmVmaU0oqktdQP1ZjfXmiZM1BNjacgL9vqq0ongJvAqSUdDFtd6EVXTPlCgERb pxm7GJJppMx4Eat8U6UzbfjKhbYD865RBPQ78ovH9boPK7xvyglFFXFBPqIw8FA6qnfc Foxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126863; x=1775731663; 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=4RSdHo2GcTr7UdboRqLK3BJKg4ylymHGVOjaziBCMkg=; b=K/0sgUdW8m7vs/C/zjV+lYVtT2MLuIR5yv1rhV04RNlA3jsPBBx12VKPU8NxuWUfhU f0gK9UTePQLdY7TiWz1yvLQWQCsrTclvCU4/g0VRYkAlAOL+1MS01Nvn4RxnXzw7gzgw fSm5OvOi++vueRVn10dGAWH/g3PhumcryKzkbla1do/3y7+S+FPERyi9VEGTaYscwmie rbCJB707Xzio6zqiXHeYseh68GP8RfB44wdJQii98MtNa7qe8xcUlbncsgODgitbPYyq 1zv7gW7VvZGh4lG5AK8suX1Cow1Oi/RAYFJON6ZvypFQo8dCK13EzH4gJuNMXBUmAO0M OVVA== X-Gm-Message-State: AOJu0YzeuUgr66dxAb5Gmci8kewCZy1gy1ZRrAR8uEbxxHeVi8dN5Boj TWcfOeRPCKzirKjTvVke78eAeK8cAMd3+jQ3QQ/c8A0wf+54z+PSLYFV0Hxy7azXideuJvN3TDP iaHqRzQ0l37eZHvAyZq8MfbyFlZfiVHqHsDT0v1d5w6gNzZn1+n/9kuFXQQ2lUsoly7ND X-Gm-Gg: ATEYQzxOn/+iixV4DFBSv2WrCufv5V5dZriYn2LCi2YRJPE1bxwc3rbXu8/AzibrULx i+pv+yqRrqEJ5adRcmLo/EWYpe/8uOMbJIFjfaexVT4XUGkftTZM0We/Ca/FR0X4H6g7ivK4A6p zoVVQpJoci/khZS8wFZDwL4ih/ilKFL1XFFCynbK0P7IBEbYb7YQhKBbvAF6b18+ii+rqn2QLX5 uyyWFfemcPg1wG2WplFK/h4eIc6rl+4QSFzH7nDlaKf33GtwLwwW2JHCW7dPXNc2RssrIs93v72 Um3cEXqJ2fBrJe5Ow1RS/m/wlRUNUfiE/znxJpLbqHp5v/vc/Cbd8TW6nFqLKAeC7mzkg2Janhn BV0COWlELqUzJsS0KIRuD0m5IUqRB/Y31pJj1HTZY21tJeFLLLw+PPWcVD3RH6uJ4SQGWuQdqWI tuyEjbz8e0 X-Received: by 2002:a05:7300:2391:b0:2b8:64ad:ad4d with SMTP id 5a478bee46e88-2c9328ac7e6mr3804962eec.26.1775126863106; Thu, 02 Apr 2026 03:47:43 -0700 (PDT) X-Received: by 2002:a05:7300:2391:b0:2b8:64ad:ad4d with SMTP id 5a478bee46e88-2c9328ac7e6mr3804940eec.26.1775126862426; Thu, 02 Apr 2026 03:47:42 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 07/16] target/hexagon: add v68 HVX IEEE float min/max insns Date: Thu, 2 Apr 2026 03:47:24 -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: eXXoUpgHSdauE89wE7-Zb36mzRZnAyT1 X-Proofpoint-ORIG-GUID: eXXoUpgHSdauE89wE7-Zb36mzRZnAyT1 X-Authority-Analysis: v=2.4 cv=JII2csKb c=1 sm=1 tr=0 ts=69ce494f cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=vhM5H77lNnm7tnBND-cA:9 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfXzDzNoHJSyJ4k ln2HBErWohJpBCJWPkYFg8yH1Nygv2AzNObszJUhCXNoq3YXZ5K8TkHch3QJ5EEFRG69CBDKQl3 HTbKdMFP9eZT4Fufqze8WRN+TGP+EZNCz1lab4rW2RmGEDxcZdmCaHhpuaMVP5GVFQN4BOKGx/8 vn+lvIVfmWZxuuvmfuGBLVSzPJyZ9iwzKE/m1iNMkU2vhwy7RahlTG2M7zh1jOZT5IY71Bl/0ev KSVtkv9FqPFoZR73Krs3+lnC9VFn8S0x3bypeEuiy68klaYuILDBpeX2+d6GGN1Mj0qgtMMwGjs iVxI2yeTOErs4gcQZ8BlHllVn8oyCxBbvqER0u7pF6g5YLxCeVm2vLfAI4cP8yi56HjoAYulWUu YkyOkOyaHWewoJVI9mIv5eZ2+oLlo/BBHke/bBFKQ4x05DvC6YX+/9NQeevK9e3gzYXsLEzedRN 3yx7z6hFfRsH1tNj9/g== 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 spamscore=0 clxscore=1015 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775126911017154100 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 hvx_ieee_fp.h Signed-off-by: Matheus Tavares Bernardino --- target/hexagon/mmvec/hvx_ieee_fp.h | 12 ++++ target/hexagon/mmvec/hvx_ieee_fp.c | 62 ++++++++++++++++++++ target/hexagon/imported/mmvec/encode_ext.def | 10 ++++ target/hexagon/imported/mmvec/ext.idef | 36 +++++++++++- 4 files changed, 119 insertions(+), 1 deletion(-) diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h index 5577179abd..f4801e3be9 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.h +++ b/target/hexagon/mmvec/hvx_ieee_fp.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/hvx_ieee_fp.c b/target/hexagon/mmvec/hvx_= ieee_fp.c index ceb32ce43b..086e8dd29e 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.c +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -67,3 +67,65 @@ 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..d7f50db778 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -823,4 +823,14 @@ 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") + #endif /* NO MMVEC */ diff --git a/target/hexagon/imported/mmvec/ext.idef b/target/hexagon/import= ed/mmvec/ext.idef index e800cda317..19135853d4 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,38 @@ 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->hvx_f= p_status); VddV.v[1].sf[i] =3D fp_sub_sf_hf(VuV.hf[2*i+1], VvV.hf[2*i+1], &env->h= vx_fp_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->hvx_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->hvx_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->hvx_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->hvx_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->hvx_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->hvx_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->hvx_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->hvx_fp_status)) + /*************************************************************************= ***** DEBUG Vector/Register Printing *************************************************************************= *****/ --=20 2.37.2 From nobody Fri Apr 3 20:53:34 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=1775126921; cv=none; d=zohomail.com; s=zohoarc; b=EG5+Rbvf1/jFWqok/+HXIxJ/gv1WsNA1Ygze/fc+QdPEd2RAvutV6bxezeYmtvx0UfG5lQDtB5fS2tyyqUnL9waMpFX43gQ9AGosZSG5WPzS9HaRvSrdcNFm6ufmcJV18vMmsyXzOvHMFfGC8UV+K6kXAHXjO2cWcRvTOVex5BM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775126921; 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=soNRWiA+58LShvYtPlR5O15pOIyvGIp2qUYXHskXHes=; b=iL3TIgMUCIOaCSOgggWl87c8FREVbks+Y1ehThot/BWnc6U4SybEIZo9ITekxg/mFHHIUGlrENT8WHPnnZ182G3OzhjlrS6fc3PEMErFNTf55N0UOEX0M5DpjZxZiqnwhiEF4a6pt7PP/FNzDxO4GRMT7O+GVPH0gU/+ymk7xyk= 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 1775126921042774.8982093679733; Thu, 2 Apr 2026 03:48:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8FaZ-0004h5-T1; Thu, 02 Apr 2026 06:47:52 -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 1w8FaX-0004fs-53 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:49 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8FaU-0007nx-L2 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:48 -0400 Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6328dAhQ1249508 for ; Thu, 2 Apr 2026 10:47:45 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 4d9n4t0fsn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:44 +0000 (GMT) Received: by mail-dy1-f198.google.com with SMTP id 5a478bee46e88-2ba9a744f7dso1115327eec.0 for ; Thu, 02 Apr 2026 03:47:44 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:43 -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=soNRWiA+58L ShvYtPlR5O15pOIyvGIp2qUYXHskXHes=; b=HC0+4T/Ueh8B2x3i1VRjK8pxj4x r74u6SOmZYeWqNThA13T1JoOPJmiXfv7X3peFmSVDV8mcDW1I9EH93UxxoG8WQ5W hdUoUSrJenbtsnosENg+ycZ4eVaVq5aW0XwQh+UbyB4VuOZg5FlXVfjll7jR/8kF mXK6XP4sRaVVk0ZkW/Y+o4i/RutcnkYmiDK3Sl+2AT6x63GLN4ziWElcDPSEHppP zxRfMXsjr/Av6GmokbgKX19DvMmCP42pVRVyqKdUPEZTYpbxZRTXBYMCzHGkPlOh vYFwM/2mZHPjZF1J6x0oTQAd2sUYyLJ05dYRD2KvVTLqaPTvyEQwyuWREIg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126864; x=1775731664; 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=soNRWiA+58LShvYtPlR5O15pOIyvGIp2qUYXHskXHes=; b=XY1gOkUQV0j6vreqTKA7DHONkdO36yZ2Y68q30E6XnuxfwueV2xpmcYaQIjdz4FfxT fZeeNQXm856cXSyKIu/KrDoG/2gXh5jherLqkWnOI5jeXp3ZTUYHyfwonXv4t/IYAAxK MoeQpBZgicHF/mlv5HH94rk2CWDMsDkp2DXFSNQZU6cc/SVS/N+coY1HTWCm8S625Dhg ebh/zDzC56xhOtJ51hDYpGuaH4d8jeIyqz2hM/ReGjeh2OwSW7qdE1ZAmYYxHE+jFUXO C2UsoSYHmeR7OyIlcV5VRZ6lkOByRzfdkntFXEx7gUnqoU1VU7YIUYguvtsW+viWZqx1 hOiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126864; x=1775731664; 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=soNRWiA+58LShvYtPlR5O15pOIyvGIp2qUYXHskXHes=; b=FcGNWHPjuoTVkDS1NXCXXtWU/B89SSDBNTYLw5uEPunLFke59gAfXo1g/yi4ucrqi1 aHJZL9QMFo+cd2c5A0QPehqasB9bBmllu5PM0BUeRVCd1FdbcvkK4Wsb3Jg5OqZh7x5Z xMe4/lZuSxmznL5t/AsV6sT+A2aZ+32xI6Sp/oycLI/JvmpqGsHXIbcUaRAwxe43RAzf Tm9wuQBVJRIKXiIlPzyJum3aUP9BWnv9R9B2fsfal9m+Yo00xe7bzUBnuakj1gDkDDBx 1es+I41R5UtSHSn7Bz8hN5vVdc0zC48KnmJTUHW6wH2Fx0jbp+3eJRb6Zv6fvZN5Dmja 8miQ== X-Gm-Message-State: AOJu0Yx8SqqY5rZlf85LgTXI1TDa7m3GxBruHDS3zrv8Ni2sKPdHgVYN yjY/1PM9ToM9DgOWBgNS9fB96lVCEgMCgJFT+T99eIsuHRMspGBotkhcsp/kuHqamLyLYGu6Vn+ JTeZz4Zl08gs2cQItHa165/JmHlMGgCg5PCc8aJpxMRIgY5Hf2dGzfFhTJay3vWmcKbTW X-Gm-Gg: AeBDietHa8NGa4/yOgfKvObNMkymrGa3GTbvuAqEAkbHQAd42xc+QJQaQKDVbqY40Ja QG+8X5rXGH09+n6b2zi5R9LNeZ3bY/hGhnQwk+rU3smjiRoCyZSnzNmsSaqson9ZZeS/eaUQmuE WcQCZ+7EQjTWEn4ACUb77C02Bf9yq7j23/nwLC0+rFxAdIVjCqSbLtS4Qn38VeJKtKYZLrwniL+ z0pQ+J/BVwhGCkl+i6SmKoXGZhJ7iveEL24MkoUB0roem8TbB/hR3HbUE4crhnEV871klCCrkyk rnPls9c/n5Qr6W618cWix4qPGcALS/Z+ZveJ1hhn4R0lbRpR6ItdLNzinpuO4VpdOtt3aV8oyVi GCNBu9BF71ixy0w7RL7F1vqXcV69zI4cd2O0T79HBUUzRtEF6To1BoydTaGlZY90NvBwZ0WVGjR 1ECllCOMV9 X-Received: by 2002:a05:7300:d50e:b0:2c1:6cfd:73d4 with SMTP id 5a478bee46e88-2ca8f7452f2mr1379155eec.23.1775126864202; Thu, 02 Apr 2026 03:47:44 -0700 (PDT) X-Received: by 2002:a05:7300:d50e:b0:2c1:6cfd:73d4 with SMTP id 5a478bee46e88-2ca8f7452f2mr1379138eec.23.1775126863692; Thu, 02 Apr 2026 03:47:43 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 08/16] target/hexagon: add v68 HVX IEEE float misc insns Date: Thu, 2 Apr 2026 03:47:25 -0700 Message-Id: <7d1812d87058379ae9b4c2e9adcdf1cdb9eafb26.1775122853.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-Proofpoint-ORIG-GUID: Vberd3zamJEK9ZT5LmHMaS1etuvD3IKu X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfX26wAynXiZDOl kHKiaJOQZG99Xzo2Hnsgw/U0NMkuBv8hdCfWF5UDKxlg/MB4ly1oBgWSG0lxws8BaHOwPcNjSpf f381PMdYx7BUeMZ+lyGOobesNnQuqXIdxk3Ca0QE/NtpSfDEACYBmOmRMrdsf5ihJ0KsefsGNwk yyrf2pz6f7E965z97EGGDFdHw+IWH6ftrGk9wjBmRLpuF6BlAJsemox9Iv3oZsGbhJ3aCLgSUel 8DRNsI2dxJy66lrUNlDf38etCUDSg9eVTyZ+vAH1YbVLFwEn2y8qqDaNjwzlNzwZlPAuPjWWMev 0zNKCtJlfeI5lfgrl8zTWMHSxspB05RJL6nD4Mo/F1shux6g0tPza1g/xyH1diQ+ttBJDp/V0qa 88a1Dbb6f7YjuRGg2UrCHkoRc50ckuAq7rcjYrJRpRDkxyxG2deaFNqa6BSuNUzVILvsdDKeU9Y 1QbusdEuWROlO1U3q0w== X-Proofpoint-GUID: Vberd3zamJEK9ZT5LmHMaS1etuvD3IKu X-Authority-Analysis: v=2.4 cv=Ap/jHe9P c=1 sm=1 tr=0 ts=69ce4950 cx=c_pps a=wEP8DlPgTf/vqF+yE6f9lg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=b_pcDZiHv-GACHTOAAQA:9 a=bBxd6f-gb0O0v-kibOvt:22 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 malwarescore=0 spamscore=0 clxscore=1015 bulkscore=0 impostorscore=0 adultscore=0 lowpriorityscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775126923230154100 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/imported/mmvec/encode_ext.def | 7 +++++++ target/hexagon/imported/mmvec/ext.idef | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index d7f50db778..72daf8724c 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -833,4 +833,11 @@ DEF_ENC(V6_vmin_sf,"00011111110vvvvvPP1uuuuu010ddddd") DEF_ENC(V6_vmax_hf,"00011111110vvvvvPP1uuuuu011ddddd") DEF_ENC(V6_vmin_hf,"00011111110vvvvvPP1uuuuu100ddddd") =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 19135853d4..54bed47083 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -3026,6 +3026,18 @@ ITERATOR_INSN_ANY_SLOT_2SRC(16,vmin_hf,"Vd32.hf=3Dvm= in(Vu32.hf,Vv32.hf)", \ "Vector min of hf input", VdV.hf[i] =3D qf_min_hf(VuV.hf[i], VvV.hf[i]= , \ &env->hvx_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 float16_chs(VuV.hf[i])) +ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vfneg_sf, "Vd32.sf=3Dvfneg(Vu32.sf)",= \ + "Vector IEEE neg: sf", VdV.sf[i] =3D float32_chs(VuV.sf[i])) +ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vabs_hf, "Vd32.hf=3Dvabs(Vu32.hf)", \ + "Vector IEEE abs: hf", VdV.hf[i] =3D float16_abs(VuV.hf[i])) +ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vabs_sf, "Vd32.sf=3Dvabs(Vu32.sf)", \ + "Vector IEEE abs: sf", VdV.hf[i] =3D float32_abs(VuV.hf[i])) + /*************************************************************************= ***** DEBUG Vector/Register Printing *************************************************************************= *****/ --=20 2.37.2 From nobody Fri Apr 3 20:53:34 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=1775126950; cv=none; d=zohomail.com; s=zohoarc; b=Mcm8Dq7R/PR6D3XKCTA8PtK46c5kEH47CLCU6ldbDv4NwGEoRWMFinO/QVmrdElOBfw0/Atf40pNxVM9U/POGp2aA4swSpa5P5QrlCQT9QrwnCvlnyB+KUs97p8ZSm2NnkP17n3eWjHJut0bEbAAdb7ONFHusjTRXKjsKVp/Y9c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775126950; 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=3PB+fajE6hKx1JiZo+b7XWJ8ECYSiC+34vAh9YpHzhg=; b=heni27lj5UTkS6O4p6pSu+8mxqQvmxQ7tbqmnwQfG7GwhEOPuHhRy6IsCr4xLR9JubnL7TZl3FO1mCxL6QltZBEMonRNknwH/jIqoZKR1t9abqB48Zx1+2qDWiK0+vk+MN4MMa+YmWd2sMuF7u9UPCylHU3aa/57VW4yYgB+6+I= 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 1775126950109767.3052008870333; Thu, 2 Apr 2026 03:49:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Fag-0004jp-4x; Thu, 02 Apr 2026 06:47:58 -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 1w8FaZ-0004gf-61 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:51 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8FaV-0007oT-MT for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:47:50 -0400 Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6326w5KS4010110 for ; Thu, 2 Apr 2026 10:47:46 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 4d97e03jy0-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:46 +0000 (GMT) Received: by mail-dy1-f197.google.com with SMTP id 5a478bee46e88-2bdf75bc88fso825521eec.0 for ; Thu, 02 Apr 2026 03:47:46 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:44 -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=3PB+fajE6hK x1JiZo+b7XWJ8ECYSiC+34vAh9YpHzhg=; b=ghgO341La5i62AjSVT9JlP4jmCx zCyK1m+E6ewZOdwmZ1H+LPGlSGgBDC2xEcl0tUuQdVDqvC8nmw0tkxNhnhZMNqRQ osF2GaS686+WpB3IzvQfhzGN00z4XKYovK9LaLP7njylcbhhIfSJM3L0VXlcxXnT GlSYVgnxUJIY6VPzDmtHGBP/l3AFw3bCaos7MP9xrIqou1FqXT79Bhc/rw6CA+69 QB+3Mnr53S65eH4jkZ/W830lV6cJGpaW3aKm/ALSif1iIWR3GZr0zZhNYcI/HLBJ qp5ed+u7OsYQZhisLtDJ/cDGuL93xRx2R467n4E5pxqKpLsZSnxGGMfoMcw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126865; x=1775731665; 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=3PB+fajE6hKx1JiZo+b7XWJ8ECYSiC+34vAh9YpHzhg=; b=OxCCGJkvFpUN751NwQ2AF3pE2X/hejDw43lN+4MTHrsvzVvxxOOxam+YsRqbEDyYmR h0hY0FTLm2py2wAAYMVR2kHdNxFFPm1qqahUQctNcW/QxaZBL3DfR9vRZH2nL5BPBEoc 6ApAzJ7FS+9CY5NX5zCsL42jKSw3WRX9S12qi4G84cezV+gJ6rNOzRKAW6WpzuOEfx3a G/CHbRMX/cqHqQBWpIQ48O0pInjThkMQDCB4Ac/R1dTNgTIu1tRgnEbN2fRXpbZBCogN 0b6+1f05EdhW4JxFtILbVoHd/rWvDs/+GKcvktxAGszLKTT82TK7/iRL/hElqTA4/QVb 1vaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126865; x=1775731665; 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=3PB+fajE6hKx1JiZo+b7XWJ8ECYSiC+34vAh9YpHzhg=; b=cFTvHY0oAyJPpSnNdSYbBLt4tuB06iF1s3Qmom7hSdhayjS3xHj3DqS6n4gRAbL4aN nVuCmSPTDUSuLavwGnblDnb9yeuA5OwphADUuf5YXGqwMj8uDWAYQwB2e8aYn6V/FH8m TuiXjUx9n9VNtGUrRPK3OGhygwz68zywr/M6wwDQaTQ0UiqrOvr+VTwI2QozKCk9hSYj oWulgTSFeDA2mgKt2AP+jUXimxi4IwxZz7iBUGTIGNNFb51a4MkcTBPjdEaTbPbNrzMw o9rhKuva7vlL6yehVoY7SKkX866AT3TaVWQaYUDeVjtkbNWi8XZrNsIr5KOKIgA8cVSf i/kQ== X-Gm-Message-State: AOJu0YwdOU3NqYIbGHEY3uPbt8bTy170krFFZst2TId+4bMSab9nXc5S K7rELMvUYyiuAX0V6SiN8YzNr02+OkI1L+OmXA0TVvN/5IVtQe4covfM9uKxFi/BjjI57L5eC4D gXXmaWa/ywL+fmLGy9qrMLB8AGS793TaPWzhBz5urwp7Gng7+8bWyqG9SHkllHPLrk8t3 X-Gm-Gg: ATEYQzxNBJBG/mj0YZcOhA7DPblScuCaXQyl1usyN+IsPgtg6FZj1JY2KxGki46HMgL tw6UZ2EbIV5cfNZjCBVeSwwjMi95gmVpKpUFofuBPIkofz/4Jw9eQc+VieApXOflbWXwpWV3H0O +9hGQ03liKbZrawW0FeTElBiO5ZC6hCO252lX0lyypkYbdFLsfgYeNWB4m4CV27TReOgefjO+j9 /fMDuCqeD3jPfCEtv3fBKdj5wR156RXkmPu2+6hn+Y6KkK3jhuIFFZ+gJTJh+PdjTfbPULifVJ0 jUMf74bcPT1QWs+qU3n+0kmgxdUFhxGU8MRFO6zG1vN7MlZ+g1kc2RCRFp6lNZMqXvUDTNKwFM1 Ab7rId7qF+PZDfIiTHV5ZCmCMxRQHINbKx9rmkmPqL3Wjy8Lcrt6HZdd/WkblRGXHf8RVmu0yvO uKHoBhjeRy X-Received: by 2002:a05:7301:fa0d:b0:2c1:85a:d25d with SMTP id 5a478bee46e88-2c930e6bc1emr3630270eec.1.1775126865181; Thu, 02 Apr 2026 03:47:45 -0700 (PDT) X-Received: by 2002:a05:7301:fa0d:b0:2c1:85a:d25d with SMTP id 5a478bee46e88-2c930e6bc1emr3630251eec.1.1775126864614; Thu, 02 Apr 2026 03:47:44 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 09/16] target/hexagon: add v68 HVX IEEE float conversion insns Date: Thu, 2 Apr 2026 03:47:26 -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=fdGgCkQF c=1 sm=1 tr=0 ts=69ce4952 cx=c_pps a=Uww141gWH0fZj/3QKPojxA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=0QsP6ROi4U8MYujRKJUA:9 a=PxkB5W3o20Ba91AHUih5:22 X-Proofpoint-ORIG-GUID: OZlH77gEeTFi41fSFZWzM5CudxbZFM42 X-Proofpoint-GUID: OZlH77gEeTFi41fSFZWzM5CudxbZFM42 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfX8/ByERKflPEx 15smUxWMVFPHItj8Uzzvv+glQjxWSyG3d2AzWWSeC5yCR73thI746AEsuX/VtUkgOHLaISUSARC ZmXCklSPydPg2cx7Z0JX/RqePKrUXP37MlRpxPRe54lMveapjov8yYdgu27ouHqkYvBt9e4yBQI i7Mg32r+s8Irq0in4UmtCjMBEZxbIRh1JFXHSC18llCHsdVLMGaWkMIE54x2zp3C6X3cgidBr3F cc2RMw+iPJ1pVOIt1LC6aZXqnqD01pTsbmjCfCmK8MdJTWSQPhGzPkCsDBg/UKnSMmarvu3ZYOP tz3vcjLeuO8Nr15TgQodYtDORrJoRMMrD894y2im/sfaqAWBhk5AkPzJpS/kwP+hOkAGIvzRel6 xYxwPSUJ6sqzXagvq8jMpQ9mtJj/Y9ViXtwaxl4d+CBZH12rqP72K6ndMmm9q0HPO28HeW1ItQ+ IZvpvU/+QxzReghWVCw== 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 adultscore=0 malwarescore=0 impostorscore=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775126951979158500 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/hvx_ieee_fp.h | 21 +++++ target/hexagon/mmvec/hvx_ieee_fp.c | 88 ++++++++++++++++++ target/hexagon/imported/mmvec/encode_ext.def | 18 ++++ target/hexagon/imported/mmvec/ext.idef | 97 ++++++++++++++++++++ 4 files changed, 224 insertions(+) diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h index f4801e3be9..e73f8161b1 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.h +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -56,4 +56,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/hvx_ieee_fp.c b/target/hexagon/mmvec/hvx_= ieee_fp.c index 086e8dd29e..d39a883ab7 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.c +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -129,3 +129,91 @@ uint16_t qf_min_hf(uint16_t a1, uint16_t a2, float_sta= tus *fp_status) } 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) +{ + float32 f1 =3D make_float32(a); + /* float32_to_int32 converts any NaN to MAX, hexagon looks at the sign= . */ + if (float32_is_any_nan(f1)) { + 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) +{ + float16 f1 =3D make_float16(a); + /* float16_to_int16 converts any NaN to MAX, hexagon looks at the sign= . */ + if (float16_is_any_nan(f1)) { + 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 72daf8724c..c1ed1b6c23 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -840,4 +840,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 54bed47083..6d5bab0894 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), \ @@ -3038,6 +3041,100 @@ ITERATOR_INSN_IEEE_FP_16_32_LATE(16, vabs_hf, "Vd3= 2.hf=3Dvabs(Vu32.hf)", \ ITERATOR_INSN_IEEE_FP_16_32_LATE(32, vabs_sf, "Vd32.sf=3Dvabs(Vu32.sf)", \ "Vector IEEE abs: sf", VdV.hf[i] =3D float32_abs(VuV.hf[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->hvx_fp_status); + VddV.v[1].sf[i] =3D f16_to_f32(VuV.hf[2*i+1], &env->hvx_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->hvx_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->hvx_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->hvx_fp_status); + VdV.hf[2*i+1] =3D f32_to_f16(VvV.sf[i], &env->hvx_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->hvx_fp_status); + VdV.ub[4*i+1] =3D f16_to_ub(VuV.hf[2*i+1], &env->hvx_fp_status); + VdV.ub[4*i+2] =3D f16_to_ub(VvV.hf[2*i], &env->hvx_fp_status); + VdV.ub[4*i+3] =3D f16_to_ub(VvV.hf[2*i+1], &env->hvx_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->hvx_fp_status); + VdV.b[4*i+1] =3D f16_to_b(VuV.hf[2*i+1], &env->hvx_fp_status); + VdV.b[4*i+2] =3D f16_to_b(VvV.hf[2*i], &env->hvx_fp_status); + VdV.b[4*i+3] =3D f16_to_b(VvV.hf[2*i+1], &env->hvx_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->hvx_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->hvx_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->hvx_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->hvx_fp_status)) + /*************************************************************************= ***** DEBUG Vector/Register Printing *************************************************************************= *****/ --=20 2.37.2 From nobody Fri Apr 3 20:53:34 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=1775126929; cv=none; d=zohomail.com; s=zohoarc; b=PIuHS4XJcN8wxJZYoRF6/BZUqjbV64DwL0jBL3FWifJAoaeQLUVeupaCHO/rWDje2p4bT5VeJSlWurI5lkzwi3ZpbRWwoQ+o4jOJM3hKljCrtcZ6kOEmMSOo34cUdKwfkfymTUAxfqjWMQPzp04VOFuTSd7sM4qoO35HiFgqgHI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775126929; 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=qQ0CPCSb3EJvawUvosj5tPUWguLWpst70une3py6NVA=; b=hngq9szUoJkDNY1pS56WWQmBDpIRPBzdWpwIznDrSnOElKsAZxYns9bv8DvsDKV1wAKOKt1lSZy66xbVB7PxK8+YNqZzfK6w0joI9o7WILCYZ1ItoPuReXq7eGIAyrKNrS5O1lYLYNCrTcYguYqbVm/m79fEdWfOUHqptJW3JRM= 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 1775126929556712.2220731686779; Thu, 2 Apr 2026 03:48:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Fb0-0004oa-VE; Thu, 02 Apr 2026 06:48:22 -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 1w8Fan-0004kd-ED for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:05 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Fag-0007ot-L2 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:01 -0400 Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6328Rt8V352289 for ; Thu, 2 Apr 2026 10:47:47 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 4d9myh8h17-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:47 +0000 (GMT) Received: by mail-dy1-f197.google.com with SMTP id 5a478bee46e88-2c72849f648so3525459eec.0 for ; Thu, 02 Apr 2026 03:47:47 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:45 -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=qQ0CPCSb3EJ vawUvosj5tPUWguLWpst70une3py6NVA=; b=hFqHR50jxkuaO9/wBXGDwJ3D1cO IcPs1FEAMF2nducc7hqZUBmz/MuHK3ObNgg0ZiMhtZQtI1TUr7iEz9vTUqRlgcOk 5T2UNQI6V8v3R9Rq8cQJ8w4VGqeInHKPUZrBs54KdethXCni4V4r8TIq3Erb2kh9 FoACH7bWHPDcbScVewOXpSod4U8sDGJ1GRRvQJyzDIv8E0Z7CLWTZnbZenJUIkp3 GlzHPIxUbBcUc+nyJNm1s3VUivMu8P+jGl7IQDW9A/Q1sSyiAHwHUZ7cVtXoi7H/ sI+g3QE1AT2SuHfdBiz80FYcGxC/e/WA7qsl6sWppvKSz+4eOEx8ZAzWtXA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126866; x=1775731666; 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=qQ0CPCSb3EJvawUvosj5tPUWguLWpst70une3py6NVA=; b=Phk/nYBzRo4GP6d0ecMGRrxWHTAKa5qvlAu3Eb3hAt5f+bgKnUiW0cQ1a+4cEXxqHD IPCmaX6LPNSpx4ngc1Z66EwCiB/BTdQ7ZHAYk04lZD+D7zM8tuIcFCWAIKtwsiNwW9sU 8kejMJJz9XLhqlEaxEQ8C+XoGEawsgwfnZX/twMbPl7/qNpVTYVXqtlxeJeKS9V6PUX0 TRpx3VWEjl66De5rQKEo0UdPMcfg4R/rM53hAWWG1Q2GRbvZOnFZ21AJfpQvuC9Jcjjy sh/SyPBnKTHSAEeVCoo6pSwn+4vezJv96SCwGqlSsKfLZbIwVonwfLCwvx+qk2RkJxBg 2bTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126866; x=1775731666; 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=qQ0CPCSb3EJvawUvosj5tPUWguLWpst70une3py6NVA=; b=r18Bo0F2+W+qa0CFNrmNkzUi5FbxjPRQnD4s7y3xgzhFGTj1n9PYHXZhxylZfKvQoY jurIYJfBgnmaqQqDXX2KaioUbKgmFj70bgAvj7g+tf+a3/Rm36BUmVw+kziLgWDWZpzL ND6XxN4LQLWERVkvLOwXteHOfr8YOB25exwXc43LE3ZSydqNPV3UzDuEGQcEj9uGW6FO yCV7pqkbwsPi3IC0qiJCr/VR1rxPsbM5aOpeKH2qHLHqSaDb7ZmK84PQ22cvIx5vuEXl scoBblpIMSbuwXe+8xXcK5FspmPFPBAAQqj7go2CvuiJntrLXaN3X7nemGMSBHG5ouiY 1djw== X-Gm-Message-State: AOJu0Yz9VC7ymYZwZOrIpRB1SZmFvRGt23mC4tOOsir3vZB4OyFZOlVp jfIc3jwbmubLfHBVaYckDXcm3c+X9paVQeRx2gW2SOFwPWc4DZBN3BRQwSO14C+98fSkpJPmlwN SQrxvUaX7B6DvZPPlvIGQJHZMP/DB+nEJLx7bsNE5FnAZdJx3teQahjudcJxYx87HGz/a X-Gm-Gg: ATEYQzxg3r5VxoG1S+RqGJehC5EnSbGxHuCd5IrKrFqW2oNz7X52IpkZVtYFxiTmcUy RAsUbu7u/MSjf9rVb5QRNYPPh7wGvu5Pdt++xEAFcdWK3ojnox2REAYGJpOZEd/P2nmvNAopMMy U6BHy/3qB7bormalEp3yKnEBzKBN4gz0rxKboT0izHdCc5N3jiFYyxFwd1H5IUT7maN/2mz5Ubi it1yj4gvrd/YQM0VyeqZUDGmIsnQrH+ZjMSpQ3G/plcQ133st/7DuRZG+3skm6VFopRqua+Z1xU swVu9l8sl8xZW0oHYqTEURH5rHsXK/rQUFKGAHM9ew53q5ryVEExmo8Gcd2pi2Q8pG+uTS7VI8L 2Btlkrjrh+eX3I6LWcmXWxiJ02rW3Hk1xuABWMc1s/iBVrL2iBKPxc8eicriS40qNkRWZjrMbHB 2mLgcB+UTe X-Received: by 2002:a05:7300:fb8e:b0:2c7:11f2:d072 with SMTP id 5a478bee46e88-2c9323b8c8cmr4502835eec.16.1775126866167; Thu, 02 Apr 2026 03:47:46 -0700 (PDT) X-Received: by 2002:a05:7300:fb8e:b0:2c7:11f2:d072 with SMTP id 5a478bee46e88-2c9323b8c8cmr4502809eec.16.1775126865584; Thu, 02 Apr 2026 03:47:45 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 10/16] target/hexagon: add v68 HVX IEEE float compare insns Date: Thu, 2 Apr 2026 03:47:27 -0700 Message-Id: <02cf6a499f7363330a7e600f75b70ed0c6ebb7ca.1775122853.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-Proofpoint-GUID: hUzUK1J7_uxmL1xTuVAQrFvPhlara4MW X-Proofpoint-ORIG-GUID: hUzUK1J7_uxmL1xTuVAQrFvPhlara4MW X-Authority-Analysis: v=2.4 cv=JII2csKb c=1 sm=1 tr=0 ts=69ce4953 cx=c_pps a=Uww141gWH0fZj/3QKPojxA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=9xUHUbetx40kEkOjbCQA:9 a=PxkB5W3o20Ba91AHUih5:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfX9s+an11PevIs cWBM0E5LAs74WyRLKF3asoiJodsehyJ1TBytQkAAei6kr5Yu1fxvGDjTrqxGSCraEXonXpmM0xN R3tdiIlfCvDapbNyyPHRLdL1TQn1ZqFNKcQVUiQjCtFCMz9iT5+mdO3WfljNyoMw3DWVpwx+ShY 0LwlTtoVeEWCNIPnt8lXrhk6HtdtBHwLO9/Y5c1PR+BMReF/2Ovkm+IOkpYwh5Fd1905PuY50ql nRAA9mNE1tWSgfSZjwQiwzbRx2mG9Sgfu0PZFvYGjH2vyvaq2MDlJSs4pdQNUmek3wGKNAzWB+1 /O+0xBNvHCOOjtj1KvzVsWkj3e1Nwy9w7plmlJJRDfVTr9OJUIv5ThJ8kIhVio/mw3TtOH5oKiD nTqHdLKj3eVQiKYp1hZ/dfofiCQcTaBETyXpfim9KEb8IsO/Gez2GKM2QIcvyJVhONEd7OTBNo5 BH99aKIMysF4WSg8Ksw== 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 spamscore=0 clxscore=1015 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775126931585154100 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/hvx_ieee_fp.h | 4 ++ target/hexagon/mmvec/macros.h | 3 + target/hexagon/attribs_def.h.inc | 2 + target/hexagon/mmvec/hvx_ieee_fp.c | 52 +++++++++++++++++ target/hexagon/hex_common.py | 1 + target/hexagon/imported/mmvec/encode_ext.def | 10 ++++ target/hexagon/imported/mmvec/ext.idef | 61 ++++++++++++++++++++ 7 files changed, 133 insertions(+) diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h index e73f8161b1..b68d6db23e 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.h +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -56,6 +56,10 @@ 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 compare instructions */ +uint32_t cmpgt_sf(uint32_t a1, uint32_t a2, float_status *fp_status); +uint16_t cmpgt_hf(uint16_t a1, uint16_t a2, float_status *fp_status); + /* * IEEE - FP Convert instructions */ diff --git a/target/hexagon/mmvec/macros.h b/target/hexagon/mmvec/macros.h index ac709d8993..318d44efb7 100644 --- a/target/hexagon/mmvec/macros.h +++ b/target/hexagon/mmvec/macros.h @@ -356,4 +356,7 @@ extract32(VAL, POS * 8, 8); \ } while (0); =20 +#define fCMPGT_SF(A, B) cmpgt_sf(A, B, &env->hvx_fp_status) +#define fCMPGT_HF(A, B) cmpgt_hf(A, B, &env->hvx_fp_status) + #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/mmvec/hvx_ieee_fp.c b/target/hexagon/mmvec/hvx_= ieee_fp.c index d39a883ab7..131d8e5595 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.c +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -217,3 +217,55 @@ int16_t conv_h_hf(uint16_t a, float_status *fp_status) } return float16_to_int16_round_to_zero(f1, fp_status); } + +/* + * Returns true if f1 > f2, where at least one of the elements is guarante= ed + * to be NaN. + * Up to v73, Hexagon HVX IEEE FP follows this order: + * QNaN > SNaN > +Inf > numbers > -Inf > SNaN_neg > QNaN_neg + */ +static bool float32_nan_compare(float32 f1, float32 f2, float_status *fp_s= tatus) +{ + /* opposite signs case */ + if (float32_is_neg(f1) !=3D float32_is_neg(f2)) { + return !float32_is_neg(f1); + } + + /* same sign case */ + bool result =3D (float32_is_any_nan(f1) && !float32_is_any_nan(f2)) || + (float32_is_quiet_nan(f1, fp_status) && !float32_is_quiet_nan(f2, = fp_status)); + return float32_is_neg(f1) ? !result : result; +} + +static bool float16_nan_compare(float16 f1, float16 f2, float_status *fp_s= tatus) +{ + /* opposite signs case */ + if (float16_is_neg(f1) !=3D float16_is_neg(f2)) { + return !float16_is_neg(f1); + } + + /* same sign case */ + bool result =3D (float16_is_any_nan(f1) && !float16_is_any_nan(f2)) || + (float16_is_quiet_nan(f1, fp_status) && !float16_is_quiet_nan(f2, = fp_status)); + return float16_is_neg(f1) ? !result : result; +} + +uint32_t cmpgt_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_any_nan(f1) || float32_is_any_nan(f2)) { + return float32_nan_compare(f1, f2, fp_status); + } + return float32_compare(a1, a2, fp_status) =3D=3D float_relation_greate= r; +} + +uint16_t cmpgt_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_any_nan(f1) || float16_is_any_nan(f2)) { + return float16_nan_compare(f1, f2, fp_status); + } + return float16_compare(a1, a2, fp_status) =3D=3D float_relation_greate= r; +} diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py index 9e8bcfdcf0..c81dd5b836 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 c1ed1b6c23..3572e4de4c 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -858,4 +858,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 6d5bab0894..6f01a9d48f 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -3135,6 +3135,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->hvx_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:34 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=1775126934; cv=none; d=zohomail.com; s=zohoarc; b=gsw9yz4q16LgFmz8qGtjO95Oaef9cziE6BNzdWNsLjVoioDiZ/vDuDedTq3dEwQj8gvpOaGMU7Or8AvNWnwabrkRzpHKAMS8WjXxqG+2/SOYgp2JjRqpfGbtKUAgMr2MUwiREYeTlquG2zvYe4eFTlmCqzDIPdDMYNS716JPqS4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775126934; 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=Z86RJd9yRDm73chbLTrBdQ3pbt8HT4DpM1gyCHvPTUI=; b=dRuBngDoGRIYuX2IAqhr3GZFlIB4Bdd9TXNXPB3VuvkELAMehhB/v/fT8vU9wBwd3NMICM4cvOi2k5upDhhPUXUy06mSbhpqPaubcH78gzdOTV22/goMhAEhqicHGv7uL0q/3Ok2lbOIdvyhqXZN6FeQBHYB9uOPqPo5lSELfeo= 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 1775126934632606.708073249129; Thu, 2 Apr 2026 03:48:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8FbS-0005UX-VM; Thu, 02 Apr 2026 06:48:47 -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 1w8Fan-0004kb-Dh for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:05 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Fah-0007pG-LQ for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:01 -0400 Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6326cHLh1966350 for ; Thu, 2 Apr 2026 10:47:48 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 4d9b9h2pkw-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:47 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-2c4cfe08c9dso4683939eec.1 for ; Thu, 02 Apr 2026 03:47:47 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:46 -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=Z86RJd9yRDm 73chbLTrBdQ3pbt8HT4DpM1gyCHvPTUI=; b=ZHQb1KPTbECnGaanEBNGBXC3f01 jFandQa8dXjS7MIGWX67RQmUd9NsmJdixJETD0GfTxmDeVhF2XiQO/Hit/tHOlG2 lc66+DKfqRoPzpT39kHvUQaUBrBEaezLYpMqjBZUA1GcoUGl2uu1haE8ThJQ8b+v RJstM1IAtYaDPQ/MepnilNAXiUPu03uYJ7Bp8vndjICzCxv6tgpDz7fjkR6J539C V5kfQYuhGokS2ahGrvv3RI55jcKP/NIglNnP8vIG18IViZy4Su1hBodHnuReyltL GpzcvKb+SBP1TTNSj40264WmmRbOIQe8wE9nh+MOm7mr3VO4f5Xpf7Ff5kQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126867; x=1775731667; 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=Z86RJd9yRDm73chbLTrBdQ3pbt8HT4DpM1gyCHvPTUI=; b=hLI3iksSNkBfnEpNGNLuWdpRGUhX3KK6y/Acgl9K7Qor+3Gs2yf/wSE893FOWoInoo tHZ/izbgrgnEwTkLD6tjK46pSsVkk1jlj2H0PF5Y7Ke31tfsC6Y/bN7AYf7jmgU9oQWF 2KBUDT1rpjWU5/w2c6SU+VqGdNKCUA47re6+3PIGr1IMIgLorVZrzNP5ie5zg2+CDhV4 iJw/4YwLRc8qImO6PkTyxfM1hHM+LFJ8i34JC0nAlYms7QmcFLPT93KfJJu6a+Dltt8r 1cIn3OI+OwWDnyAOlsiIqOK9vrwgEeBEIHgKLeLv/iE8EBy1rhX51XfF+HdFNUQ8BDn4 EjOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126867; x=1775731667; 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=Z86RJd9yRDm73chbLTrBdQ3pbt8HT4DpM1gyCHvPTUI=; b=WTFCZPt32mg+3kr/t66dRKqEYkJq2lNEvg7fWMEm3aGf+jElRNIgJG0YVznpMJp3xp NA8cUolEyC4YyIxqflERJ+TaHePjhGO84wrjZL4RxaVFHZKLGo5Vhcop2ZmTqYuU1IH0 TPVxXDmz7z0jO7YYFGtARn50Ob4W4fI2BoZYqa8eoF7Sor0t/eewUTLLnPUwukTU5SwP ih3IteFutfV10Sq2qOzcbu+0oe/rkSUs00N+A010QRNCdMqB6dNmhG8X4Io61/H7sPlB gSzsbo+6vH0IWdoBpaF8RGgeN6hpTeqAtJfjX9+XOjfRPMocLGA5fN0e31xxYJRT0iG9 7YFA== X-Gm-Message-State: AOJu0YzPn45KmLp+aV/6VePgHezFK6hFZiKRuzCiXaQqGvsRSOqBr2mF dn5wREmRIZLdc3/J0nsVpUCzuqllXAhVflupu63SgxFgnkiC/Q7v8Jh1ufdiD0vrI3jTRMzl8nU d3Xl4N4RwoGK9txnIB7lRGjogyu3mDCGOVGHGnU0M0rY/DVhlThZze0MbcfP6gXE1hrUw X-Gm-Gg: ATEYQzzV7QJEFqjVZYvjsp2s614Z5CSrevM5PPhDL06d+Wu+Tl5wxYYiI3lckCfPiGZ bdQFZf6omUo7FfTzpHo8l0RyWLZZ1MV8pt7HwiqtpxydAyNU99dKUhIqn3gsDWlteXE0apZ04DL yudn435EGBfr62XHttDT7WzbwfM7tFKaq8/dJp3DbnzOledsvf6ft5gW5Z6/F7oaWd21MvCycgu dVR4H6j9d+Z1fvoy/eQXXWtEtN9RtL81g+ARpgluIW6FQWFEuZzSNiMMtZq8nFTLAJyMkFoUgi8 eexnBAWB/r5Xg8P8BH0ohdGvjX9o5FGibCytF65jmwawlvpF+O02FU59rCVMdActJDqWDq1NUfH wZPY4vf/hHNujzxo32V2W44Lo8egbGYQwZjV+tC33jq4CTmZ08RL1sJb04WaA5DZ3ieGN/K4kJ8 IwCsbIIe49 X-Received: by 2002:a05:7300:fd0b:b0:2c1:14ca:7c86 with SMTP id 5a478bee46e88-2c932db3e06mr3601625eec.32.1775126867036; Thu, 02 Apr 2026 03:47:47 -0700 (PDT) X-Received: by 2002:a05:7300:fd0b:b0:2c1:14ca:7c86 with SMTP id 5a478bee46e88-2c932db3e06mr3601605eec.32.1775126866527; Thu, 02 Apr 2026 03:47:46 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 11/16] target/hexagon: add v73 HVX IEEE bfloat16 insns Date: Thu, 2 Apr 2026 03:47:28 -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=TqLrRTXh c=1 sm=1 tr=0 ts=69ce4954 cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=mMeFUOTstzKuDvyCm9AA:9 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-ORIG-GUID: BTJGmrKy-wtWZ9NFhMDAmNN_F0EG28fP X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfXyCGXoNZUeZxO BA2hlR7Af2e2KM26udsSzhU9yW0tQOqTdIVoMQmSBpNACEI3wrfgHQdkif//I7DlzkNrGHd1oC6 pxTya5aBuTTuFRFWua89muPlD4kuBHXD78lG14lRX0DmiUETr1sWdS89+gZSoYAz0W0JMm94nM9 lmlvWavieaJLxC+JfpTJCx2WOvmbpoP1ZBkKKge/HknOPqvhSmPqiOrvxsML5IQ+fRY8QjqbwOE bTnr5YqbDsG8AkmVfXltV+vpxQOrgCrBiAm1XiopdtUgZW30Oyf+M36hiPrbW2aVU53rDl9zlk8 hWBR+wt/irQT1VQPHn/YpaY/jb48i7prduuY26JqMRUfQqpv62Fcao9WpYWjtjGaF2e50uTHO9Z O6Xy7GD5BK++BpFA/dd1Yymm4v5/I02ltYAsNpD6uO6U8uz9qJuh1KB/6bBg1V6EUopuCEdhO6n gSdBb4PVq+8mrkc+D9A== X-Proofpoint-GUID: BTJGmrKy-wtWZ9NFhMDAmNN_F0EG28fP 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 priorityscore=1501 clxscore=1015 malwarescore=0 spamscore=0 adultscore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775126936105158500 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/hvx_ieee_fp.h | 44 ++++++++++++++ target/hexagon/mmvec/macros.h | 4 ++ target/hexagon/mmvec/mmvec.h | 1 + target/hexagon/mmvec/hvx_ieee_fp.c | 4 ++ target/hexagon/imported/mmvec/encode_ext.def | 15 +++++ target/hexagon/imported/mmvec/ext.idef | 64 ++++++++++++++++++++ 6 files changed, 132 insertions(+) diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h index b68d6db23e..0ca529b627 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.h +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -81,4 +81,48 @@ 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(bfloat16_to_float32(A, &env->hvx_fp_status), \ + bfloat16_to_float32(B, &env->hvx_fp_status), \ + &env->hvx_fp_status) +#define fp_add_sf_bf(A, B) \ + fp_add_sf_sf(bfloat16_to_float32(A, &env->hvx_fp_status), \ + bfloat16_to_float32(B, &env->hvx_fp_status), \ + &env->hvx_fp_status) +#define fp_sub_sf_bf(A, B) \ + fp_sub_sf_sf(bfloat16_to_float32(A, &env->hvx_fp_status), \ + bfloat16_to_float32(B, &env->hvx_fp_status), \ + &env->hvx_fp_status) + +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, fp_status) bfloat16_to_float32(A, fp_status) + +static inline uint16_t sf_to_bf(int32_t A, float_status *fp_status) +{ + 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 float32_to_bfloat16(rslt, fp_status); +} + +#define fp_min_bf(A, B) \ + sf_to_bf(fp_min_sf(bf_to_sf(A, &env->hvx_fp_status), \ + bf_to_sf(B, &env->hvx_fp_status), \ + &env->hvx_fp_status), \ + &env->hvx_fp_status); + +#define fp_max_bf(A, B) \ + sf_to_bf(fp_max_sf(bf_to_sf(A, &env->hvx_fp_status), \ + bf_to_sf(B, &env->hvx_fp_status), \ + &env->hvx_fp_status), \ + &env->hvx_fp_status); + #endif diff --git a/target/hexagon/mmvec/macros.h b/target/hexagon/mmvec/macros.h index 318d44efb7..4945a61194 100644 --- a/target/hexagon/mmvec/macros.h +++ b/target/hexagon/mmvec/macros.h @@ -25,6 +25,9 @@ #include "accel/tcg/probe.h" #include "mmvec/hvx_ieee_fp.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)) @@ -358,5 +361,6 @@ =20 #define fCMPGT_SF(A, B) cmpgt_sf(A, B, &env->hvx_fp_status) #define fCMPGT_HF(A, B) cmpgt_hf(A, B, &env->hvx_fp_status) +#define fCMPGT_BF(A, B) fCMPGT_SF((uint32_t)(A) << 16, (uint32_t)(B) << 16) =20 #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/hvx_ieee_fp.c b/target/hexagon/mmvec/hvx_= ieee_fp.c index 131d8e5595..9e2cff2ef7 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.c +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -269,3 +269,7 @@ uint16_t cmpgt_hf(uint16_t a1, uint16_t a2, float_statu= s *fp_status) } return float16_compare(a1, a2, fp_status) =3D=3D float_relation_greate= r; } + +DEF_FP_INSN_3(mult_sf_bf_acc, 32, 16, 16, 32, + float32_muladd(bf_to_sf(f1, fp_status), bf_to_sf(f2, fp_stat= us), + f3, 0, fp_status)) diff --git a/target/hexagon/imported/mmvec/encode_ext.def b/target/hexagon/= imported/mmvec/encode_ext.def index 3572e4de4c..16f043b77d 100644 --- a/target/hexagon/imported/mmvec/encode_ext.def +++ b/target/hexagon/imported/mmvec/encode_ext.def @@ -868,4 +868,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 6f01a9d48f..aaae2d90e1 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -3155,6 +3155,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 ")", \ @@ -3193,8 +3202,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->hvx_fp_stat= us); + 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->hvx_fp_stat= us); + 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], &env->hvx_fp_status); + VdV.bf[2*i+1] =3D sf_to_bf(VvV.sf[i], &env->hvx_fp_status); 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:34 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=1775126974; cv=none; d=zohomail.com; s=zohoarc; b=ClAujaA+HXdzUPWh4sVk80l5btCjgCATBCYmcTrp4RDeSlEeT5D4BBKZPYU3oeRWjc4XcvHQcGwEuUWFrZfhrH8dbPdnBCZZS/OXDyzKbKoi4NDI/gwWvGDl7uzCnLWz3pbHJYXE2yj/4dkWMlSwbtXEh9mlVfpsH17cVAWB/tA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775126974; 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=D7rnSVAJp6sd+gvxD4uEflttLT9iHzjnYVqCVfxs/yE=; b=bbql2wMtNd2d7bfSSSq5AgAQt4IDDbTaTfB4uZZZY2BZHp4EZw9e4AYVhCvfHyVZLbKIyzxmQpA49FxHX/9KaJNhVYYYtVh6zbzOrCYyXd4Qp8qh+5O5c2XCLo95Ha++iDeHmORdaqXzUnv8d6I6cThHHTvuxFwzfWbA2UCjoEQ= 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 177512697497222.18142472973443; Thu, 2 Apr 2026 03:49:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8FbR-0005Ip-QI; Thu, 02 Apr 2026 06:48:45 -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 1w8Fan-0004kc-EE for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:05 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Fai-0007pg-Gs for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:02 -0400 Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6328dAMk1249516 for ; Thu, 2 Apr 2026 10:47:49 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 4d9n4t0fsx-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:48 +0000 (GMT) Received: by mail-dy1-f198.google.com with SMTP id 5a478bee46e88-2cb6f605b95so549707eec.1 for ; Thu, 02 Apr 2026 03:47:48 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:47 -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=D7rnSVAJp6s d+gvxD4uEflttLT9iHzjnYVqCVfxs/yE=; b=JZGRk0+BSB4A3CJdrnxKHWs5ZuM vRr/MVByKuNUD3jluNrjUfG04tP/WRsWymY9ywmMVhhXzK4ma97NJCXDPXvbDEzL XNJNXKkM/q31wmIkeWf9gG5LnTHXBmzBGHxoYD8y7kFSPoJm1rpjBBKvq86mXUm5 RXScDegqbHP+Ad64A969JIIexsssKGSGQ+uKDskOntRrydiYwKrx/X8ard1VwbDT QMhGZcpcWm3FW+ZPnDOfP1ZlOkIctxNG2ksu4MkN0bzT+UCuby8xEKXbSJ+IfziS bWThnjvpRowmJpC2pPTYHogTn5cNUVfXkIzW8//57Qm3guX2p5h/3HjezdQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126868; x=1775731668; 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=D7rnSVAJp6sd+gvxD4uEflttLT9iHzjnYVqCVfxs/yE=; b=iPcf0Y13/rTaRfUnlxF9LH66GExS6Sy+lNpn3l1uetveo2FXrDPmJ6ytrC15sszpGO o9OVKg+C8QdC0qlx82bYXC/a+IaKIREieOt1ZJbLlyuDrncfzFO78PKhL5KOldJZQZCw EY8d6rJcdNbY9aI6jRHmlROwEGPTHWoWrQUzfB9qozcnAoYQ0/pIlKv98aIchUqaIfLC AlH2SZdoKcGFM9wkhXO6nk14UoCSnqfoXlZg7cUBpxm4uEA7kbxpzBXFs1jLD5BPp9Je yfCUq9zCN0b0wg+R8lauTVbh9TFU1+n8C1mdsgEv+hzxrZrZFhAoZ2jGxJJGR7dvvqhR Vw+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126868; x=1775731668; 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=D7rnSVAJp6sd+gvxD4uEflttLT9iHzjnYVqCVfxs/yE=; b=o+o/dSqefe1s9Ht/XNgzuNFDd8v7pQblMJpoV8Rkh1EE1kVQaoNjlTmj0O2+JcZE5F 0dQwAELe0E9gItEtGiqOK4Y4mzhYaPOnywBXziCYDO9qM8ziY64+UZYqJ1BHLarRmRco l2EAyUrVjuq7gqbEpEr9gHf59+vhPJjoeIYHko/qDfPreqgzh7fkcQwdsY7jUQbN9h1E p74QBO70/mV1FqW0i6tgO8yXtTB5bc79+LZY+52nTQxqEQ9W3mzNjiXo1aolgg2/OhCg MWyhneqLBnb983kkHFIwDBYJ92gjN5G/bBT9CC9H7LSSiYasGjqUWIKXFyihwiZRFJEI FDww== X-Gm-Message-State: AOJu0YxamVCWc2wdd+xWHLH4Nk++fLjRg2oCFR2CpfV5pMKweUoA3JPB ha1e2C0HSTPUdqaOnBWy2CWwBMj1yF7P9u6YIJTAFDxP+QutCSkOM2hugJT4DeqIXh74VsvYKac vfd5gb32+uY1jHet49a9Nh+WT7qk8LglPyVL9kVGvxXmROU9TAzLlyYwuhxaO37YmgUlu X-Gm-Gg: ATEYQzw9MUQgt0ZIuBY5zd3nBaLXa+vJDbe5Crn2tz5bjFLzQe2uoT6XhJJAvK9+YpG V6MflZu3dNzZL2XdEUuFkeQu64yyLr5vQtyXU3Tem4bv9HdJzCwBBAOOuOeaja4z1eCqfZxmAaD U+oMrxHfttF/Gq7Wf2tCUWBky7uGLa8vwPp1M4fucRrr85eMMoCQvAuYPF6iDOnwnenqgK9RC18 e5UPx6cRBAC3Ro/kvBjB+Wplo66B5rXXU5dvMyxTL+Bz3sP+UVdYtKE7eeCsuMQ4vUIZZraMAPr nYV2SGaxfsrVJGMr8Zfpt4FCoUJKg0bSoKqzMpUbAtZYwR6oHssuoorw+WZIWBDizt/+tjNSiNd 9zx2Tblim0RTZ2E7/BQocMFHI1WCyOiDlmlGbmZxMBk4XHH3bybn+Tf9QC8Z/TK+kMJRruqFWq5 EMVVVgk4Yq X-Received: by 2002:a05:693c:3117:b0:2c6:7f49:a87a with SMTP id 5a478bee46e88-2c930d75fafmr3937213eec.9.1775126867949; Thu, 02 Apr 2026 03:47:47 -0700 (PDT) X-Received: by 2002:a05:693c:3117:b0:2c6:7f49:a87a with SMTP id 5a478bee46e88-2c930d75fafmr3937189eec.9.1775126867413; Thu, 02 Apr 2026 03:47:47 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 12/16] tests/hexagon: add tests for v68 HVX IEEE float arithmetics Date: Thu, 2 Apr 2026 03:47:29 -0700 Message-Id: <719aeb5d4f23bd3315932888dd9d1bae9fb636d8.1775122853.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-Proofpoint-ORIG-GUID: URjdAVqljVZA5kSf341kf9NeU_gJ8MtY X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfX207SSM3u/SCF vem+I9eMqtZtove2FTIUhYClsO7/d1W8qQJwJsgm03fma1gMqlXpPXFDmVR9nIAh3Qi4+U3uwUN /HruCnM0Czr7+FmvXE2auc7hbUEl8bg4iLQeh6kx4TU1Vhy2nKwa0j69xPmrtOe8ck+WbSzj7L+ aPegczVtPK3td+MnzK1Q1S8K4z3WZYjldghbsoWasR1fqikU809Bsk5MBsKHcGE67+uyNVW6us9 sRYt4/Cgg+ADKNs0F61IHyn/npcSqVfB+TslA8W73mWbcBMIDVG6qhDvFSvzrTF9xgKcWpZ/TOw B1zafHPIf8Md4gxLrvyTwNvu5qpT/01UOkKPwEQhTD1blVIiYmrTNObqeflwcAS3V2Pj2CUG3ZR 7KsoRYYLrXkg23cBMAX41qtEhA4987FzDWjgb+b/NKZ9VUavrDJk5hDF70hakGKAb0ualra4Y8u mnS5Mldg/LaS/7+WuSQ== X-Proofpoint-GUID: URjdAVqljVZA5kSf341kf9NeU_gJ8MtY X-Authority-Analysis: v=2.4 cv=Ap/jHe9P c=1 sm=1 tr=0 ts=69ce4955 cx=c_pps a=wEP8DlPgTf/vqF+yE6f9lg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=p626gilfWeCCYUnsPZkA:9 a=bBxd6f-gb0O0v-kibOvt:22 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 malwarescore=0 spamscore=0 clxscore=1015 bulkscore=0 impostorscore=0 adultscore=0 lowpriorityscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775126975866154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Matheus Tavares Bernardino --- tests/tcg/hexagon/hex_test.h | 4 + tests/tcg/hexagon/hvx_misc.h | 41 ++++++++ tests/tcg/hexagon/fp_hvx.c | 155 ++++++++++++++++++++++++++++ tests/tcg/hexagon/fp_hvx_disabled.c | 57 ++++++++++ tests/tcg/hexagon/Makefile.target | 8 ++ 5 files changed, 265 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/hex_test.h b/tests/tcg/hexagon/hex_test.h index cfed06a58b..e7a6644d41 100644 --- a/tests/tcg/hexagon/hex_test.h +++ b/tests/tcg/hexagon/hex_test.h @@ -19,6 +19,8 @@ #ifndef HEX_TEST_H #define HEX_TEST_H =20 +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + static inline void __check32(int line, uint32_t val, uint32_t expect) { if (val !=3D expect) { @@ -110,6 +112,7 @@ static inline void __check64_ne(int line, uint64_t val,= uint64_t expect) =20 /* Some useful floating point values */ 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; @@ -128,6 +131,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 2e868340fd..0330cb289d 100644 --- a/tests/tcg/hexagon/hvx_misc.h +++ b/tests/tcg/hexagon/hvx_misc.h @@ -18,6 +18,8 @@ #ifndef HVX_MISC_H #define HVX_MISC_H =20 +#include "hex_test.h" + static inline void check(int line, int i, int j, uint64_t result, uint64_t expect) { @@ -34,8 +36,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 +67,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) @@ -81,6 +87,33 @@ static inline void init_buffers(void) } } =20 +static const uint32_t FP_VALUES[] =3D { + SF_INF, SF_INF_neg, SF_QNaN, SF_QNaN_special, SF_SNaN, SF_QNaN_neg, + SF_SNaN_neg, SF_HEX_NaN, SF_zero, SF_zero_neg, SF_one, SF_one_recip, + SF_one_invsqrta, SF_two, SF_four, SF_small_neg, SF_large_pos, SF_any, + SF_denorm, SF_random, SF_neg_two, +}; +#define FP_VALUES_MAX ARRAY_SIZE(FP_VALUES) + +static inline void init_buffers_fp(void) +{ + _Static_assert(BUFSIZE * (MAX_VEC_SIZE_BYTES / 4) > + FP_VALUES_MAX * FP_VALUES_MAX, + "test arrays can't fit all FP_VALUES combinations"); + int counter1 =3D 0, counter2 =3D 0; + for (int i =3D 0; i < BUFSIZE; i++) { + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / 4; j++) { + buffer0[i].sf[j] =3D FP_VALUES[counter1]; + buffer1[i].sf[j] =3D FP_VALUES[counter2]; + counter2++; + if (counter2 =3D=3D FP_VALUES_MAX) { + counter2 =3D 0; + counter1 =3D (counter1 + 1) % FP_VALUES_MAX; + } + } + } +} + #define VEC_OP1(ASM, EL, IN, OUT) \ asm("v2 =3D vmem(%0 + #0)\n\t" \ "v2" #EL " =3D " #ASM "(v2" #EL ")\n\t" \ @@ -175,4 +208,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..0365833753 --- /dev/null +++ b/tests/tcg/hexagon/fp_hvx.c @@ -0,0 +1,155 @@ +/* + * 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(output)); \ + for (int i =3D 0; i < BUFSIZE; i++) { \ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[i]; \ + HVX_Vector hvx_buffer0 =3D *(HVX_Vector *)&buffer0[i]; \ + HVX_Vector hvx_buffer1 =3D *(HVX_Vector *)&buffer1[i]; \ + *hvx_output =3D \ + Q6_V##type_res##_##vop##_V##type_arg##V##type_arg(hvx_buff= er0, \ + hvx_buff= er1); \ + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / bytes_##type_res; j= ++) { \ + expect[i].type_res[j] =3D \ + raw_##type_res(op(float_##type_arg(buffer0[i].type_arg= [j]), \ + float_##type_arg(buffer1[i].type_arg= [j]))); \ + } \ + } \ + check_output_##type_res(__LINE__, BUFSIZE); \ + } + +#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 + *************************************************************************= ****/ + +static void test_vdmpy_sf_hf(bool acc) +{ + memset(expect, 0xff, sizeof(expect)); + + for (int i =3D 0; i < BUFSIZE; i++) { + HVX_Vector hvx_buffer0 =3D *(HVX_Vector *)&buffer0[i]; + HVX_Vector hvx_buffer1 =3D *(HVX_Vector *)&buffer1[i]; + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[i]; + + uint32_t PREFIL_VAL =3D 0x111222; + *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_buf= fer0, + hvx_buffer1); + } + + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / 4; j++) { + float a1 =3D float_hf_to_sf(float_hf(buffer0[i].hf[2 * j + 1])= ); + float a2 =3D float_hf_to_sf(float_hf(buffer0[i].hf[2 * j])); + float a3 =3D float_hf_to_sf(float_hf(buffer1[i].hf[2 * j + 1])= ); + float a4 =3D float_hf_to_sf(float_hf(buffer1[i].hf[2 * j])); + /* + * Note, IEEE FP specifies +0.0 + -0.0 =3D=3D +0.0. So we use = -0.0 in + * the default case to preserve the zero sign. + */ + float prev =3D acc ? float_sf(PREFIL_VAL) : -0.0; + expect[i].sf[j] =3D raw_sf(CHECK_NAN((a1 * a3) + (a2 * a4) + p= rev, NAN_SF)); + } + } + check_output_sf(__LINE__, BUFSIZE); +} + +static void test_new(void) +{ + asm volatile("r0 =3D #0x2\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" + "{\n" + " v0.sf =3D vadd(v1.sf, v2.sf)\n" + " vmem(%0 + #0) =3D v0.new\n" + "}\n" + : + : "r"(output), "r"(expect) + : "r0", "r1", "v0", "v1", "v2", "memory"); + check_output_w(__LINE__, 1); +} + +int main(void) +{ + init_buffers_fp(); + + /* 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); + + test_new(); + + 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..388a42e2b7 --- /dev/null +++ b/tests/tcg/hexagon/fp_hvx_disabled.c @@ -0,0 +1,57 @@ +/* + * 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" + +static void test_disabled(void) +{ + memset(output, 0xAA, sizeof(output)); + memset(expect, 0, sizeof(expect)); + asm volatile("r0 =3D #0xff\n" + "v0 =3D vsplat(r0)\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) + : "r0", "r1", "v0", "v1", "v2", "memory"); + check_output_w(__LINE__, 1); +} + +static void test_disabled_with_new(void) +{ + memset(output, 0xAA, sizeof(output)); + memset(expect, 0, sizeof(expect)); + asm volatile("r0 =3D #0xff\n" + "v0 =3D vsplat(r0)\n" + "r1 =3D #0x1\n" + "v1 =3D vsplat(r1)\n" + "v2 =3D vsplat(r1)\n" + "{\n" + " v0.sf =3D vadd(v1.sf, v2.sf)\n" + " vmem(%0 + #0) =3D v0.new\n" + "}\n" + : + : "r"(output) + : "r0", "r1", "v0", "v1", "v2", "memory"); + check_output_w(__LINE__, 1); +} + +int main(void) +{ + test_disabled(); + test_disabled_with_new(); + puts(err ? "FAIL" : "PASS"); + return err ? 1 : 0; +} diff --git a/tests/tcg/hexagon/Makefile.target b/tests/tcg/hexagon/Makefile= .target index 549c95082f..789721bdac 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 @@ -126,6 +128,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:34 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=1775126940; cv=none; d=zohomail.com; s=zohoarc; b=TyJ6zT2U4QK+sTGotg5HbKegpOy8n9k3gRfY+M/MR1hdaTKpY7BT1qDHRjdvypAAVpy55mW2G7lQxRToJDvKOoqRkI5rCk75zMgpg/DTPoSbMkpwpm8H3FvwbVBRxDdXNb1ngFDLKEZPU6V6/ERuws8hrnUC+jLh+FVMPMSA37I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775126940; 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=P5hMle4dsIJuY/9/X8rZbjNfzfN97R2T6TLhakQh8Ec=; b=hw42rZ4Wqnxe89jlCfIJ4OzgvMsbPznCBFGlxmC5PBXK1EdY2hHkLJfMMCwdRwCOkxUCi8wu2pWPofiUjjgpgJhVhUKbDUlZ3XBo9qQqTTkMLLds2HXXAwL5NQZ9PkdAiodrX9zy1g9L9+YhxjEQTc7dXJVybDlb1gkQsOIinoI= 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 177512694068795.10140531358127; Thu, 2 Apr 2026 03:49:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8FbS-0005Qd-IP; Thu, 02 Apr 2026 06:48:46 -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 1w8Fap-0004l4-7I for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:13 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Fai-0007pl-Vs for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:06 -0400 Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6328Rp8e351773 for ; Thu, 2 Apr 2026 10:47:49 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 4d9myh8h1d-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:49 +0000 (GMT) Received: by mail-dy1-f198.google.com with SMTP id 5a478bee46e88-2c72849f648so3525561eec.0 for ; Thu, 02 Apr 2026 03:47:49 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:47 -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=P5hMle4dsIJ uY/9/X8rZbjNfzfN97R2T6TLhakQh8Ec=; b=QdNXPe0qoWCwb1rPbYhruVW9xed tDVS+RcYj6U0sDoY6rjjfg96wHruaM/HLHKOcEEL01iqlAmZq+OuPMlUBt9UsQwa fOquuG2Cg5OVImeLXp3ToEeWghfbyRqtyE9gwZGnKCtsEaIW2ORasx41lzMZ1s+H HB+0m3C5jcexOkyGZVnUxKvMLjY1f119QWjKwfIjH9Soc98IOkzi9nwZqcY5tQPt I2/hMOjYlUxTboJny4GO4LaESGIefG/WVv2D4Q9F9fSNbwzM0NN1ZxNrNz7hNCqt VeJRCzcbfk+poH13hhZvt69kEwGL9yLer2Vkyi4D2mvEtO5x+3dGjcRUjzQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126869; x=1775731669; 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=P5hMle4dsIJuY/9/X8rZbjNfzfN97R2T6TLhakQh8Ec=; b=brT6rbsYp6sMUGiqZ/cNTk8tVOfgaID+yVXhZ2EMexgOmBWnEoSCY2qX+1oRqjecNR T8EP+qzwm3DldcVaQLWfQe9rMxKxtBz5ZIff84r+rekcznHpJEyaCrzvWvWmRgsUA/o1 5kGrn7Hz6sU8nQasg3VDukZimIfYR+7uXEpqTg0dIzDJxq6gylgRq7M77KtwP4OXfW8P AYj6QdDUCps8mcaOCfhBLLLPPyg0kqno0awvPqPK7wPl6M2+XCpIQDOazqa+nXQ9T37u SABU8XybX6iWPrJrqRdMn9IZ93eTCq04QefR0zHkjhkVOs5GAREB/4mCAGrdB2TsXp2R cKzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126869; x=1775731669; 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=P5hMle4dsIJuY/9/X8rZbjNfzfN97R2T6TLhakQh8Ec=; b=P5C5rUfpI44Fx73M6tgqCZ0awYtmCiToUrrk4wW5GFFjVH1s4QlVEt6G53pWg8NnhM GLahc6CyM/Fk38cvsbqyCXp3GkRCxS/8Bp9DP8GO8JXcyrN0SIN7vIfrrtoHzgAj0cle nwVQt3oyxsac+llNgzm4JbuSkULAiGnAxwiY/79Z73xJ1uqhRyxEmni2tmv2T1rOYwAs v8fk8Zfrx+XmAdc7avHmVdZYMTeaN1q0Oeh4Ez2wzdfyNx+JeeDgqvmOm9nKNTogiPm/ vWF/WxyaR37Unz6QOtEJRRmCatnmZ5tT3F8GDZLgSOHNXzZg8GKqldGwfLPKdmfPKZVR DxZw== X-Gm-Message-State: AOJu0YxjOcectnYFFShuPZExE7jN356LUf/M/qnLyDWgwZzMCv3sChLZ sxvBLgxhxRi50hhTOOwn17+g22AhhU3AjeLhgawqEVxLc/8JbKZePl/KWpwYEU0SbZ9ByLYNNOq RXM1pRA4ZvPR4LoGTEjoiHooo9zDarP+L0J68rfaYgkq351Y9x+0FovrM904xpOuaFmFg X-Gm-Gg: ATEYQzzY5m0ZsPTMDqpAL50vWlGDtNLnHDEgLriv34pvLV/R7EaHn22zyDUjEOTPCHJ Z7Hk9IGoj6IeqqBPYHq6SZ5MJIX7xxzNJXdqiKZKeSdOG0TjzF/VNJuL5LgDT3IjKZ1H0k59ZQx 4pYIUZxwgU9DLKtpd6Wb0TRasggvKGY32fSk6AUlTT+t+62+CDbAItRvFLFjJ0MjnryAX3aY+OY blzzRiYaB386B/Rjuhzx4+zndDXUWUO1V9JVCAh9zRVmqBpHE5YNaadwhlcaYO/4qOcc5DQ4b/E ihi370a8PPTNoH0mCqRXpQfZTT2fjGnC6jmYboQX3v4ixlZlxXYb0Z/ifXJ9+zYd4S5oxo5L0sn Kb1Snc15FgVXU9Q/vJWvHiZcoA4dylQTkqrwhW+CaDpZE8wXx1SFOCYcw0mIcz4523Kg3O0vUt0 yNKk8IIErq X-Received: by 2002:a05:7300:a287:b0:2c0:e404:8b08 with SMTP id 5a478bee46e88-2c932bb18d0mr3349230eec.29.1775126868721; Thu, 02 Apr 2026 03:47:48 -0700 (PDT) X-Received: by 2002:a05:7300:a287:b0:2c0:e404:8b08 with SMTP id 5a478bee46e88-2c932bb18d0mr3349218eec.29.1775126868228; Thu, 02 Apr 2026 03:47:48 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 13/16] tests/hexagon: add tests for v68 HVX IEEE float min/max Date: Thu, 2 Apr 2026 03:47:30 -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: xOo_rfwc2GBN1HA5MJchKkCF70IVpZFY X-Proofpoint-ORIG-GUID: xOo_rfwc2GBN1HA5MJchKkCF70IVpZFY X-Authority-Analysis: v=2.4 cv=JII2csKb c=1 sm=1 tr=0 ts=69ce4955 cx=c_pps a=wEP8DlPgTf/vqF+yE6f9lg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=gVZ7t9wPRZXE4v3XZ3MA:9 a=bBxd6f-gb0O0v-kibOvt:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfX5bH5RDpbLYSV BUwBSw04W6IgE9Vb0hkQzZURNG9+F6IhbymmOJjCIn2URBOzKJKttIvBWp4JmDhlsa8BATD6U7n QXx0v7Xc/KmK/BI4b6NMWvw/t4h7ZtVVE416wR0+ucAR25K84IIZhYxaKF321lIjfwLQDsgZEHI uBjyFd2K1D4L0l2MFIVabvfD/Svd2CKFHvQDHgV6LYkqG1cKOyET0IWc/kNBVZ2Q7CSr4Syo4P5 rvTwUYGeWXMl221s64ZteNFRaN6dA76W92jqhAkoqEXtqUBnUp4BY6v2GF9+xZXjRucjqgfG8+T 7U30daqI7s4PLoFflwWl5vnVt04CiDi7PNodwUh9D0eY0T/ElmermtGg2esmWkX8FBuAJLqxyiN VPewBEtdMZ8qn0t0fYnFpevGNLWB2g/Ub3DWvZOfk03xiSKAGjl/mwSH9Q+cUvk3ekeI2NNcsyr twyoHc26cTVugVLTofg== 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 spamscore=0 clxscore=1015 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775126941487154100 Content-Type: text/plain; charset="utf-8" Reviewed-by: Taylor Simpson Signed-off-by: Matheus Tavares Bernardino --- tests/tcg/hexagon/fp_hvx.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/tcg/hexagon/fp_hvx.c b/tests/tcg/hexagon/fp_hvx.c index 0365833753..46f49c0d3c 100644 --- a/tests/tcg/hexagon/fp_hvx.c +++ b/tests/tcg/hexagon/fp_hvx.c @@ -73,6 +73,30 @@ 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 signbit_fp(X) \ + (sizeof(X) =3D=3D bytes_hf ? ((raw_hf(X) & 0x8000) !=3D 0) : \ + ((raw_sf(X) & 0x80000000) !=3D 0)) + +#define STD_MIN(X, Y) ((X) < (Y) ? (X) : (Y)) +#define STD_MAX(X, Y) ((X) > (Y) ? (X) : (Y)) + +#define MIN(X, Y, DEF_NAN) \ + ((isnan(X) || isnan(Y)) ? DEF_NAN : \ + ((X) !=3D (Y)) ? STD_MIN(X, Y) : (signbit_fp(X) ? (X) : (Y))) /* -0 <= +0 */ +#define MAX(X, Y, DEF_NAN) \ + ((isnan(X) || isnan(Y)) ? DEF_NAN : \ + ((X) !=3D (Y)) ? STD_MAX(X, Y) : (signbit_fp(X) ? (Y) : (X))) /* -0 <= +0 */ + +#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 *************************************************************************= ****/ @@ -150,6 +174,12 @@ int main(void) =20 test_new(); =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:34 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=1775126950; cv=none; d=zohomail.com; s=zohoarc; b=UbgyD1b9TQp1iXRO1nQp6KmuDhB9koeTJ3jSXOtVyX8LBoCu8/2h3mchcdCFz+U8YJqhJJAwEcnlbpfuGmNceFcgfQolRwpU7vQalZwG+YSYsyUDsRJHh1Au3lgBWUHHHuk2746+5+Dzq5/MnMXxdAjAhXz2xr+41O7li8CnENQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775126950; 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=gN4yioD5Rgh7UznFLRejmfl/X6fbAyKgQNiOL9X2Qck=; b=fQaTXxlo02mHI7yzPJoT4/nbZal8t+LUKx+gj1RoE0BMtIIACBsSPZY5TiVoJsLLnBzKUl9cwh6FSeRyWez05RzTTtrSa3MfCbFrZKacM9luQo286SfoPHk9tmdxW31QwJJD18YKVJuNc72S1r2KvkDWmnqG3JQOFrsStDNuCII= 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 1775126950268499.2781254651561; Thu, 2 Apr 2026 03:49:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8FbT-0005cD-Lp; Thu, 02 Apr 2026 06:48:47 -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 1w8Faq-0004lQ-S8 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:13 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Fak-0007q5-7m for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:07 -0400 Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6326btI41965395 for ; Thu, 2 Apr 2026 10:47:51 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 4d9b9h2pm6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:50 +0000 (GMT) Received: by mail-dy1-f197.google.com with SMTP id 5a478bee46e88-2ba9a744f7dso1115411eec.0 for ; Thu, 02 Apr 2026 03:47:50 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:48 -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=gN4yioD5Rgh 7UznFLRejmfl/X6fbAyKgQNiOL9X2Qck=; b=aBpt8IhUVKWmfYgH9k0nTkZ49Mb p01zSbZG5NjIeoSSFyZchHS1QhBc17g7yhpQcKg/YJKFrGZbQAEVDQhvWeU2AKKp u/oLGDTrLnqkIQsStCmc4wTjEZH2WMoECKP6kKs+ogOEr72jEx7T+jiIrZcBsvXG MaBbDL3HFjioYPav/pfJtuikbngzh5VOmxx8wjLgDEYxdrV04zxsuYhOx2U1UJOv gB7r+nIKsUqgvRx/KJfZ3EqhvXlZuy93bGHwEWbKya3mAPxQPg5WpZEgSkholyWY MA36YTqd8+dwSiqJQy9NysTC4MMRJYHPLLFn9KhHSpImzULbEJDcO1g9hPg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126870; x=1775731670; 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=gN4yioD5Rgh7UznFLRejmfl/X6fbAyKgQNiOL9X2Qck=; b=OfsbNJcomBD2PqLen1i+x5nU9W9zCL6/1vN1GYY3HzKwDTH8DHCj8LW9vyEYbasRY6 kf58FwMUPEOSKECFT85iy6J7y1D0JoXbz9EjlNPE8aJZnOUWxJBxFos9hEie9XDcvw2K 6iKGc8SNI0u45rXrBzLCFHF9hURWyyOsCZHSGRCCrpgtO/MIqBhrkgd3OKKIef27ZXsZ xvBV/a1enXb/+ycvXZkoqTeRUfMOt6JcAApYMF164K+wMFln9Z4xBNTj59U1nWvT5U8X ZeWoJXRskvrlzJsu97xckJe89Bwy72hhZ9oQB4TPlErdg6jydHcIsvuK1hb9WZyWQOQ7 nrpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126870; x=1775731670; 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=gN4yioD5Rgh7UznFLRejmfl/X6fbAyKgQNiOL9X2Qck=; b=H8yewEdslFuCPRTDlCCvBXWznyr40d2MRjXo1Rr50D5pUbU9seSil02is37D9wuRqs OVsfPa9bambz0AZqwkmB/R52ct73aAuz+DVYzs7tUGmyCk+LjRE+TPZW+RjyUDP8EGKS cbZ2Iln5t4ZQvidgcL4s89VUVQAZet5VS15y4YxFTThuPGQnMb5bHDDkZdxkeuaitJQl 320yM4tQx3OjYBx6cMnkAlcCWk7DRzPxF3gIaFiqI1LJr+H+NduDVI7MPJUfWJFqxY32 ka/2mtOSa9L0sRmQRSKqRbyS2TOYuoQ0KGIBRPpU+PM92WvY9k5XpKiixA8lWCepm/JX WExQ== X-Gm-Message-State: AOJu0YyH6tHaLSwICPScM1SJ2dLvtxpvF0P9akWid6Zv9NMCM+/DzfHo NPKrS6wrR4nDqNJnOL7iP5VD28XIojD/ZZjZSVkbX2+tbLNVqwgqwQj/4w07ajZB0VgIhM9xuCF LL5SL64SWKEuTR6PrIUw1Iw2qYZOxj/i9HDZD8M2xU/ELAs7idCFcJlQOTu3zyrxQtgXd X-Gm-Gg: AeBDiev14c4Cfby0zXnjSRGivIywU+bWvOe4J9BL4SVJ5I/FAeulnuOq+m4aQ8yx54Z UMrctwF2tNhEuykqRJIOftTv2XkREkM+jRWxzvsugPoDRpDIPUyLFSTJvqKV9Wbdp1vB9DX0Z3E mCH1gaFbV25XVni3+X8A0eJyFfnMrMzCXBI6xNh55nLRaiIt41Y7pnRafUrELJ7wusA+xnhuUQC qNtvQLJZuFv3/tkMSXvHtFE0u594W0fk6/I9c2vDRAm/jb6bZKYB092O0db9Lxj+Wihm6zukp9A iqj/Jxg2Ub5Rg3kUipIiGZdAEbSCOUPUGRdV5MKTX1bru98yw0kuANAwhvCFY3x4Pt9IWRLFBDH PgsTFn3gNkVAxZL2I69Mf8DBKulIyxSbY2dZI658+ZjxzIYfzaL3FO7hc36Jctw1TZPtrpcXPyh JLgtDsGgkH X-Received: by 2002:a05:693c:2c06:b0:2c1:161f:ac39 with SMTP id 5a478bee46e88-2ca8f74aa15mr1332277eec.26.1775126869774; Thu, 02 Apr 2026 03:47:49 -0700 (PDT) X-Received: by 2002:a05:693c:2c06:b0:2c1:161f:ac39 with SMTP id 5a478bee46e88-2ca8f74aa15mr1332260eec.26.1775126869147; Thu, 02 Apr 2026 03:47:49 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 14/16] tests/hexagon: add tests for v68 HVX IEEE float conversions Date: Thu, 2 Apr 2026 03:47:31 -0700 Message-Id: <4bbaed1625dba497aa7838d5417dd0cad4c10e22.1775122853.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=TqLrRTXh c=1 sm=1 tr=0 ts=69ce4956 cx=c_pps a=Uww141gWH0fZj/3QKPojxA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=tBVvuLY118niWomA0oIA:9 a=PxkB5W3o20Ba91AHUih5:22 X-Proofpoint-ORIG-GUID: G1AJjcx1uPAjyOjupsLBMEBGCoWEnjHW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfX1WNosviEsbKL P1nhRwa0Nj2zwgUVUz72RgGWJbwOFTnusn03QCgh4KjegKE1xegIjy1U2NOy1fi9HW2zIR9pKeR ZjkHEVXZ+CBr+PykV0f2E6E06Q3mxita+yp378cPLnT0XdK5/iNQhlleN87J5OUBURaDO1PzvfE n4/bkh/2aNHssUuvxLvgp/anVmSNSguNkCVuso/honVm6aijpXFWXOT0LxyNboArFegJzEQXHC9 mWrqc8hZI4yHhXoNY8BBPUxMx/T3nuDhhh+aqCBCm/mS1q4vEjZBwkPWk6k30GQVV65xcn/TxU+ 4G6KmecLKXaDnkWNVUvp67wGvV75lbDsN2zsAcKzw9wfmWmshq6Q0UkZVs3MmLcn2WK3V5hoexz zWq4CKtx938crzapNFKBed2GB4Mhg0g87ta9D0B414pbyOgFL39iPzR3g8JYoDXK8HE+a5uHF2Y HE5C0J53AkOIWbQJvgg== X-Proofpoint-GUID: G1AJjcx1uPAjyOjupsLBMEBGCoWEnjHW 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 priorityscore=1501 clxscore=1015 malwarescore=0 spamscore=0 adultscore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775126953564154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Matheus Tavares Bernardino --- tests/tcg/hexagon/hex_test.h | 14 +++ tests/tcg/hexagon/hvx_misc.h | 2 + tests/tcg/hexagon/fp_hvx_cvt.c | 188 ++++++++++++++++++++++++++++++ tests/tcg/hexagon/Makefile.target | 3 + 4 files changed, 207 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 e7a6644d41..d5da8ad240 100644 --- a/tests/tcg/hexagon/hex_test.h +++ b/tests/tcg/hexagon/hex_test.h @@ -111,6 +111,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 0x7d00; +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_INF_neg =3D 0xff800000; const uint32_t SF_QNaN =3D 0x7fc00000; diff --git a/tests/tcg/hexagon/hvx_misc.h b/tests/tcg/hexagon/hvx_misc.h index 0330cb289d..43de20da6a 100644 --- a/tests/tcg/hexagon/hvx_misc.h +++ b/tests/tcg/hexagon/hvx_misc.h @@ -69,7 +69,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..71c3f0fd4f --- /dev/null +++ b/tests/tcg/hexagon/fp_hvx_cvt.c @@ -0,0 +1,188 @@ +/* + * 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) \ + static 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) \ + static 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) \ + static 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((_Float16)2.1), 2); \ + TEST_EXP(h, hf, raw_hf((_Float16)2.8), 2); \ +}) + +DEF_TEST_VCONV(hf, h, { \ + TEST_EXP(hf, h, 0, HF_zero); \ + TEST_EXP(hf, h, 2, HF_two); \ + TEST_EXP(hf, h, -2, HF_neg_two); \ + TEST_EXP(hf, h, 2049, raw_hf((_Float16)2048)); /* rounds DOWN */ \ + TEST_EXP(hf, h, 2051, raw_hf((_Float16)2052)); /* rounds UP */ \ +}) + +DEF_TEST_VCONV(sf, w, { \ + TEST_EXP(sf, w, 0, SF_zero); \ + TEST_EXP(sf, w, 2, SF_two); \ + TEST_EXP(sf, w, -2, SF_neg_two); \ + TEST_EXP(sf, w, 16777217, raw_sf((float)16777216)); /* rounds DOWN */ \ + TEST_EXP(sf, w, 16777219, raw_sf((float)16777220)); /* rounds UP */ \ +}) + +int main(void) +{ + test_vcvt_uh_hf(); + test_vcvt_h_hf(); + test_vcvt_ub_hf(); + test_vcvt_b_hf(); + test_vconv_w_sf(); + test_vconv_sf_w(); + test_vconv_h_hf(); + test_vconv_hf_h(); + + puts(err ? "FAIL" : "PASS"); + return err ? 1 : 0; +} diff --git a/tests/tcg/hexagon/Makefile.target b/tests/tcg/hexagon/Makefile= .target index 789721bdac..83969e0e73 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 @@ -132,6 +133,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:34 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=1775126974; cv=none; d=zohomail.com; s=zohoarc; b=ccmp8lPR/mTN7jkRNVv5ofZUXTb1VZwjgq5ZjvOKTr3IVIwykmoBRx/JeuoV1e/O3OtGaQ42YVe4hFQxMlVXBa8AQ2mFdMd9OHlarnYurlVEHkEa5iTnlVZ+qF86Z9xABp5Rxha/XElbvBgYrrkhzYmZUItI/YrKr7HvwYvA3CU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775126974; 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=RfmOA1oJRbM59T5jNLihWyqgY4oN9Qis1RTJ8xh8eSY=; b=G/8XJiEu4TU1A3Uw/jwX6PAhXAANPVuDcq4ue0DHp6aNTu4gpZeNQiuI8pdx7G6z/4wH51iYjTjsSXJ6skcXavzAXWeJA5yFrQYePdpfNLKnraS/Y4os+/dsXJvSMgPjLaw7hrzAA8lQeeIJFCvpju4GsQgyTWsy0uF8ka1cdK4= 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 177512697413562.48492435676292; Thu, 2 Apr 2026 03:49:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8FbU-0005fu-Fn; Thu, 02 Apr 2026 06:48:48 -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 1w8Fap-0004l3-6s for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:13 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Fak-0007q9-RK for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:06 -0400 Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6328RsVY352251 for ; Thu, 2 Apr 2026 10:47:51 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 4d9myh8h1h-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:51 +0000 (GMT) Received: by mail-dy1-f197.google.com with SMTP id 5a478bee46e88-2c72849f648so3525638eec.0 for ; Thu, 02 Apr 2026 03:47:51 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:49 -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=RfmOA1oJRbM 59T5jNLihWyqgY4oN9Qis1RTJ8xh8eSY=; b=SDPCcNE+wHgTOvJwL0HTmbj6QyC 6gFYb/Sn7UCy3cSl0BdlD0D7Z9FMvy5XERH8b0o9cAZ4S6aX38JcVbG3eN1eUhdL brcnmgUb93SBg9TdXh1IIPNeWa7Oqjf/jLe5fW0WrmDHhTjIkNzZ7Jbzumw/vxdv 4jmPfAwEYdTi+KIpsnglpmcdCVyybiobLUzfgaBz10bm2rvL8B4bfIjRjvqrBvmE 5Tjyh1dHPJCx7tDbNgtZxuSJYNBZfHnfcuiyZxonhUjRapJlwTDdg6ZnyuxKiqZf UFCH3hN8KO187xr6TwbQ+cWkMKYWlEHA5KR9K4pMulYkiTdnzliNFxpel6Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126871; x=1775731671; 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=RfmOA1oJRbM59T5jNLihWyqgY4oN9Qis1RTJ8xh8eSY=; b=Go+OuH3mW0acjhj/qXWxBiP+yWQ6x20xSqVgxLe69g8L0UxiKRxUNwgtPYqMex6uRD wFinOvCB8BC2hYtydQlVnToQAaT7/6eecYhKXfpGuwMdRw0zMUeTLvylHec/4Lac/L+D iC6W1Zsk41EXb3nVdhUqYB2IXdoKg7Cbj9uS6SHkDM0agp1IY6dCW0qEodfX2yT6TRtr 0s3JNs3NeIawleNcgNZr1ySQDXcfjqSGodYCmeoSHP19E+o5ZheKi9jmY5NywnOoEU/7 fX/XHIvooac2QYFwypFPTor5j8sonZt0UXR+AzOyL0BTYnLkp3pUNGWC2tpcgSGIuHYS 5kPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126871; x=1775731671; 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=RfmOA1oJRbM59T5jNLihWyqgY4oN9Qis1RTJ8xh8eSY=; b=SnDGFwmhc1CWARBe/UVL3aBqju8kPKvPQl5b3krU5AvqPNutrQKwz2s36cA+9uLLts qu3H51QSnhQTFGsjtVTPdIQXNBBE28rZdFtpzPai8bkPFazstbNlpFxfeOuqiQNJJZ9n fCOYlUka3wSbzxPx1K9TzRv2GpmaXTJVt6qXACDkaGjc2XxRg6rWEgXYmcgUcOv+IMVt 3p9tGpNCYvO6p0hZTl8ROj1ycI5YeE5IzJfjY3tCN34slps9jIBJAGdXjwBYeMaUWxEg JrMv4Lo5lYGYrcbY6wmKUCUw1GRTuV07EbDwjPAe1uxkO2Db7fR+SnYIPi/SlYBeylYP iF8A== X-Gm-Message-State: AOJu0Yz9SzR4toZ4pMUjhGyS5PBNzAEdd68SWtXpiRay/tTToikU79cm WOZLhcXpCbnPcQkHI0K8tOuIM5dvZocnStmRrrr5TVQp9GU54oYNAuFP2mqF9Mis4FhNpxeFngi Qsw1A9HMQHiQG8gSrJwuhuLQwBgqS0TumVJT6at7Rm06LevjdVDgzjNlveZsIG9iDdg+D X-Gm-Gg: ATEYQzz+UhoQR8s/urzSWPkAxBb480oQwmA7PQwzqFtOspDpgtVNFml3x+holdub6/7 sdMFLSmz7SbxTeC0F3J35CZ713P7djdcURHvTmXjk0bRYDnQvY27srQMyAhWJmm4gE1qULrXq5q MQQTxexykOwoS7KP90wiSiGWeyESZybk3czcbb6jVmpvPlW7ZNgbVpp/avztE2z90k4uR5ObIT8 KxOE1wW21CYCnic2jfgHNmcAY7gwygpqw2ssQheCaustNjLeXP7agyKcGAgQ3BRC28FkSvTd4ym Oqk59EYCVeX2hscF2Urvlh/cndkhdLn7FI85m38sgBeKQSi2G9TtEoHqHC8Wig+1h7MvEqE6BrT HfHDc7wvsqlz9EZ2uUEKV+QV5rTCQtF1/8InmL9wio+3GilO0Il7Vkf2qTe0LLlt3MKX6bwxrMy DlBNTzpeSZ X-Received: by 2002:a05:7300:3708:b0:2c7:ea98:da0 with SMTP id 5a478bee46e88-2c9323b72c2mr4144145eec.19.1775126870630; Thu, 02 Apr 2026 03:47:50 -0700 (PDT) X-Received: by 2002:a05:7300:3708:b0:2c7:ea98:da0 with SMTP id 5a478bee46e88-2c9323b72c2mr4144129eec.19.1775126870016; Thu, 02 Apr 2026 03:47:50 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 15/16] tests/hexagon: add tests for v68 HVX IEEE float comparisons Date: Thu, 2 Apr 2026 03:47:32 -0700 Message-Id: <7058091ab3c247cd7c94c6505dec6fc0bd9be196.1775122853.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-Proofpoint-GUID: -Y4RDZ_6zPNN9RbzA5jSUKK8IMVD9Se_ X-Proofpoint-ORIG-GUID: -Y4RDZ_6zPNN9RbzA5jSUKK8IMVD9Se_ X-Authority-Analysis: v=2.4 cv=JII2csKb c=1 sm=1 tr=0 ts=69ce4957 cx=c_pps a=Uww141gWH0fZj/3QKPojxA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=g6BQdadCeQXt8ut-Y_AA:9 a=PxkB5W3o20Ba91AHUih5:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfXxaRQXCJfRsUb kSAIjzE2eq8+r1NFwtB+5O3olZyBG2CXa8u1Yg2uTjns1QrwVE2kVSNn+C5U9mMk7ZQ/z5rZmoA 22BRhzwMcGJGpQ1P65oIdtaUr2L5wGCNiS5111pj0Cd5ZKRk2Zw9doIT55LjnrzbgwZpwg4UHpu WvO0TnmRoE9xi+EIKQe1CkED8JdU+NUq9gJOQhWs9BM6Q6WKNBpchcpCc6vvVSMJHJwcOccJGg8 A6W/12qmcTiEgpPHJRXN5hZLCuX1txylGJ8QxTU5kzcfbOpvBmcXlZUQjN5Tf9Ry693O/Kg88se lGZtBgX7y4VWkSd8M++MyKgYhe15x7nWk+9cfUaX0kFwThmD3DpKKKeR3sDyd1AQRaP2oU6XcuU 1m5nsnHx3eU7ynZ7dwlHfrDSiI9geXTTo0H/AGcmyxKrEaRWVzJMPesDCQIqj5vleU/o+mD1lBU FIKfdh1janh5Vai401w== 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 spamscore=0 clxscore=1015 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775126975866154101 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 | 227 ++++++++++++++++++++++++++++++ tests/tcg/hexagon/Makefile.target | 3 + 3 files changed, 231 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 d5da8ad240..79d30ec61c 100644 --- a/tests/tcg/hexagon/hex_test.h +++ b/tests/tcg/hexagon/hex_test.h @@ -115,6 +115,7 @@ 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 0x7d00; +const uint16_t HF_SNaN_neg =3D 0xfd00; const uint16_t HF_QNaN_neg =3D 0xfe00; const uint16_t HF_zero =3D 0x0000; const uint16_t HF_zero_neg =3D 0x8000; diff --git a/tests/tcg/hexagon/fp_hvx_cmp.c b/tests/tcg/hexagon/fp_hvx_cmp.c new file mode 100644 index 0000000000..c4e1c81ce5 --- /dev/null +++ b/tests/tcg/hexagon/fp_hvx_cmp.c @@ -0,0 +1,227 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#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 MAX_TESTS_hf (MAX_VEC_SIZE_BYTES / 2) +#define MAX_TESTS_sf (MAX_VEC_SIZE_BYTES / 4) + +#define TRUE_MASK_sf 0xffffffff +#define TRUE_MASK_hf 0xffff + +static const char *comparisons[MAX_TESTS_sf][2]; +static HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; +static HVX_Vector buffers[2], true_vec, false_vec; +static int exp_index; + +#define ADD_TEST_CMP(TYPE, VAL1, VAL2, EXP) do { \ + ((MMVector *)&buffers[0])->TYPE[exp_index] =3D VAL1; \ + ((MMVector *)&buffers[1])->TYPE[exp_index] =3D VAL2; \ + expect[0].TYPE[exp_index] =3D EXP ? TRUE_MASK_##TYPE : 0; \ + comparisons[exp_index][0] =3D #VAL1; \ + comparisons[exp_index][1] =3D #VAL2; \ + assert(exp_index < MAX_TESTS_##TYPE); \ + exp_index++; \ +} while (0) + +#define TEST_CMP_GT(TYPE, VAL1, VAL2) do { \ + ADD_TEST_CMP(TYPE, VAL1, VAL2, true); \ + ADD_TEST_CMP(TYPE, VAL2, VAL1, false); \ +} while (0) + +#define PREP_TEST() do { \ + memset(&buffers, 0, sizeof(buffers)); \ + memset(expect, 0, sizeof(expect)); \ + exp_index =3D 0; \ +} while (0) + +#define CHECK(TYPE, TYPESZ) do { \ + HVX_VectorPred pred =3D Q6_Q_vcmp_gt_V##TYPE##V##TYPE(buffers[0], buff= ers[1]); \ + *hvx_output =3D Q6_V_vmux_QVV(pred, true_vec, false_vec); \ + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / TYPESZ; j++) { \ + if (output[0].TYPE[j] !=3D expect[0].TYPE[j]) { \ + printf("ERROR: expected %s %s %s\n", comparisons[j][0], \ + (expect[0].TYPE[j] !=3D 0 ? ">" : "<=3D"), comparisons[= j][1]); \ + err++; \ + } \ + } \ +} while (0) + +static void test_cmp_sf(void) +{ + /* + * General ordering for sf: + * QNaN > SNaN > +Inf > numbers > -Inf > SNaN_neg > QNaN_neg + */ + + /* Test equality */ + PREP_TEST(); + ADD_TEST_CMP(sf, raw_sf(2.2), raw_sf(2.2), false); + ADD_TEST_CMP(sf, SF_SNaN, SF_SNaN, false); + CHECK(sf, 4); + + /* Common numbers */ + PREP_TEST(); + TEST_CMP_GT(sf, raw_sf(2.2), raw_sf(2.1)); + TEST_CMP_GT(sf, raw_sf(0), raw_sf(-2.2)); + CHECK(sf, 4); + + /* Infinity vs Infinity/NaN */ + PREP_TEST(); + TEST_CMP_GT(sf, SF_QNaN, SF_INF); + TEST_CMP_GT(sf, SF_SNaN, SF_INF); + TEST_CMP_GT(sf, SF_INF, SF_INF_neg); + TEST_CMP_GT(sf, SF_INF, SF_SNaN_neg); + TEST_CMP_GT(sf, SF_INF, SF_QNaN_neg); + TEST_CMP_GT(sf, SF_INF_neg, SF_SNaN_neg); + TEST_CMP_GT(sf, SF_INF_neg, SF_QNaN_neg); + TEST_CMP_GT(sf, SF_SNaN, SF_INF_neg); + TEST_CMP_GT(sf, SF_QNaN, SF_INF_neg); + CHECK(sf, 4); + + /* NaN vs NaN */ + PREP_TEST(); + TEST_CMP_GT(sf, SF_QNaN, SF_SNaN); + TEST_CMP_GT(sf, SF_SNaN, SF_SNaN_neg); + TEST_CMP_GT(sf, SF_SNaN_neg, SF_QNaN_neg); + CHECK(sf, 4); + + /* NaN vs non-NaN */ + PREP_TEST(); + TEST_CMP_GT(sf, SF_QNaN, SF_one); + TEST_CMP_GT(sf, SF_SNaN, SF_one); + TEST_CMP_GT(sf, SF_one, SF_QNaN_neg); + TEST_CMP_GT(sf, SF_one, SF_SNaN_neg); + CHECK(sf, 4); +} + +static void test_cmp_hf(void) +{ + /* + * General ordering for hf: + * QNaN > SNaN > +Inf > numbers > -Inf > QSNaN_neg > QNaN_neg + */ + + /* Test equality */ + PREP_TEST(); + ADD_TEST_CMP(hf, raw_hf((_Float16)2.2), raw_hf((_Float16)2.2), false= ); + ADD_TEST_CMP(hf, HF_SNaN, HF_SNaN, false); + CHECK(hf, 2); + + /* Common numbers */ + PREP_TEST(); + TEST_CMP_GT(hf, raw_hf((_Float16)2.2), raw_hf((_Float16)2.1)); + TEST_CMP_GT(hf, raw_hf((_Float16)0), raw_hf((_Float16)-2.2)); + CHECK(hf, 2); + + /* Infinity vs Infinity/NaN */ + PREP_TEST(); + TEST_CMP_GT(hf, HF_QNaN, HF_INF); + TEST_CMP_GT(hf, HF_SNaN, HF_INF); + TEST_CMP_GT(hf, HF_INF, HF_INF_neg); + TEST_CMP_GT(hf, HF_INF, HF_SNaN_neg); + TEST_CMP_GT(hf, HF_INF, HF_QNaN_neg); + TEST_CMP_GT(hf, HF_INF_neg, HF_SNaN_neg); + TEST_CMP_GT(hf, HF_INF_neg, HF_QNaN_neg); + TEST_CMP_GT(hf, HF_SNaN, HF_INF_neg); + TEST_CMP_GT(hf, HF_QNaN, HF_INF_neg); + CHECK(hf, 2); + + /* NaN vs NaN */ + PREP_TEST(); + TEST_CMP_GT(hf, HF_QNaN, HF_SNaN); + TEST_CMP_GT(hf, HF_SNaN, HF_SNaN_neg); + TEST_CMP_GT(hf, HF_SNaN_neg, HF_QNaN_neg); + CHECK(hf, 2); + + /* NaN vs non-NaN */ + PREP_TEST(); + TEST_CMP_GT(hf, HF_QNaN, HF_one); + TEST_CMP_GT(hf, HF_SNaN, HF_one); + TEST_CMP_GT(hf, HF_one, HF_QNaN_neg); + TEST_CMP_GT(hf, HF_one, HF_SNaN_neg); + CHECK(hf, 2); +} + +static void test_cmp_variants(void) +{ + HVX_VectorPred true_pred, false_pred, pred; + memset(&true_pred, 0xff, sizeof(true_pred)); + memset(&false_pred, 0, sizeof(false_pred)); + + PREP_TEST(); + ADD_TEST_CMP(sf, SF_one, SF_zero, true); + ADD_TEST_CMP(sf, SF_zero, SF_one, false); + ADD_TEST_CMP(sf, SF_one, SF_zero, true); + ADD_TEST_CMP(sf, SF_zero, SF_one, false); + + /* greater and */ + pred =3D Q6_Q_vcmp_gtand_QVsfVsf(true_pred, buffers[0], buffers[1]); + *hvx_output =3D Q6_V_vmux_QVV(pred, true_vec, false_vec); + for (int j =3D 0; j < 4; j++) { + int exp =3D j % 2 ? 0 : 0xffffffff; + if (output[0].sf[j] !=3D exp) { + printf("ERROR line %d: gtand %d: expected 0x%x got 0x%x\n", + __LINE__, j, exp, output[0].sf[j]); + err++; + } + } + pred =3D Q6_Q_vcmp_gtand_QVsfVsf(false_pred, buffers[0], buffers[1]); + *hvx_output =3D Q6_V_vmux_QVV(pred, true_vec, false_vec); + for (int j =3D 0; j < 4; j++) { + if (output[0].sf[j]) { + printf("ERROR line %d: gtand %d: expected false\n", __LINE__, = j); + err++; + } + } + + /* greater or */ + pred =3D Q6_Q_vcmp_gtor_QVsfVsf(false_pred, buffers[0], buffers[1]); + *hvx_output =3D Q6_V_vmux_QVV(pred, true_vec, false_vec); + for (int j =3D 0; j < 4; j++) { + int exp =3D j % 2 ? 0 : 0xffffffff; + if (output[0].sf[j] !=3D exp) { + printf("ERROR line %d: gtor %d: expected 0x%x got 0x%x\n", + __LINE__, j, exp, output[0].sf[j]); + err++; + } + } + pred =3D Q6_Q_vcmp_gtor_QVsfVsf(true_pred, buffers[0], buffers[1]); + *hvx_output =3D Q6_V_vmux_QVV(pred, true_vec, false_vec); + for (int j =3D 0; j < 4; j++) { + if (!output[0].sf[j]) { + printf("ERROR line %d: gtor %d: expected true\n", __LINE__, j); + err++; + } + } +} + +int main(void) +{ + memset(&true_vec, 0xff, sizeof(true_vec)); + memset(&false_vec, 0, sizeof(false_vec)); + + test_cmp_sf(); + test_cmp_hf(); + test_cmp_variants(); + + puts(err ? "FAIL" : "PASS"); + return err ? 1 : 0; +} diff --git a/tests/tcg/hexagon/Makefile.target b/tests/tcg/hexagon/Makefile= .target index 83969e0e73..76ba245add 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 @@ -135,6 +136,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 From nobody Fri Apr 3 20:53:34 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=1775127000; cv=none; d=zohomail.com; s=zohoarc; b=SSI8AANVersml1Ndua7VfsYfg3Gf5jCeQo9Z2EWXPtklxgGfh/xgZbjsSyBauoxv+n1TjMwZh51q834EUassaUbV0msRtrw9sqVBRHY8GFRhIcZK+4AQJ1gpocvoK7f07xSk3sqYCjPH21CHMzSwM3XrP45qtFLacvfEIerivsM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775127000; 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=AwG/0VXCfmYH2CY/btD01+fOPkZvD3Oqx7BljHhIpwE=; b=GjtUUeVXOcWSyrmObil+/Kc7FZRAikfgb4X1wY3CmWE0BDIhEFI0ORN6Fgq5H03hBfBrJxTm2bx2EV1GTFt6XQlp5xLPF8MbcVLk6Q3E6UtGC01BAHfiYkWke1EVLBrhC3v58IeI6/YY700WZn69mplBKRrZ1vaVB/xzmU+l7Lc= 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 1775127000333141.59011733098657; Thu, 2 Apr 2026 03:50:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8FbT-0005WE-5n; Thu, 02 Apr 2026 06:48:47 -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 1w8Faq-0004lR-SM for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:13 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Fal-0007qI-Uf for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:48:08 -0400 Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6328Rx6i352408 for ; Thu, 2 Apr 2026 10:47:52 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 4d9myh8h1j-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 02 Apr 2026 10:47:52 +0000 (GMT) Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-2bdf75bc88fso825594eec.0 for ; Thu, 02 Apr 2026 03:47:52 -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-2ca7d00f5easm2004783eec.29.2026.04.02.03.47.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 03:47:50 -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=AwG/0VXCfmY H2CY/btD01+fOPkZvD3Oqx7BljHhIpwE=; b=oGoB3QQjZHBksvj8LNnexpJMWl7 4k9DYJXjVapmpjBldVltKwIKKQk6z+kc5i01MhX6qDHvGq56Wh01lQxPkdY6R/lS EhySZSoXychzUgYE7PZxMJ32/3PfCO52kZmb/9A9RiRogc9N+IBPqvej9rWy7tjR dPpBZnEIxpp8PJ0Lf2bvKxm5ARBGPt7NmTRCF0gCIR1gsFtMfXCrEPV4xPunOlpT +CT0qgaVo27mIrE8DrC3Ckm91G7QZ0hx2pEepOU5MNpETzk5mAJfwg9g2WbXpUBR Bt+LGmzeSSvNB3vlZya3koBkfOHwoGA3u5tYPp/vLiJKzQCJH9jBvuhXb0Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775126872; x=1775731672; 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=AwG/0VXCfmYH2CY/btD01+fOPkZvD3Oqx7BljHhIpwE=; b=K0x8+ysVcmsHy9Z06n3muvBGXEGcGXiueyVO8k+YgXUrIKzLqvqG6BEzQXXI4tVsNR GPlpg07khI38StEZTYUpRwDrHs8XWYpLrU5C11dn6Wwggv5FjqnDlMe90Lc0CRhIKMsY X5FH+mcEVVR6+/6Fs3bRzaau9PabS6pBFdLBdL0fxJqX5rVUo0q+E+xDj9JFeNwzYBO0 bum/AEUSE6MbzTIrwsYEXNiSxc7JyaBD6SeaqxTb7XI8dcLZ2R9aLvfZz2+51sf33BOe /jLgv5TelgGghI1oCUl50KQmREtBXmBguc5MSOKpensSuvNHVXNiMc3vfC3Wcj2B4WvL vBKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775126872; x=1775731672; 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=AwG/0VXCfmYH2CY/btD01+fOPkZvD3Oqx7BljHhIpwE=; b=DXuCnwiSdLSMFtob/+fCxJWAUX9mC3BotEwf1pg+KLHNdByMLRUGgjBAxg0ssp6eU7 5/Ks0OFSTPOxIB4I5mtbt8cSM3EDQmGpXjY9mZ1J3aGDr432H71bfx45E+egKzzxV1jy fOOChfdsIrg9iON/MduhYjeHjplZls42fQGH8zNQOMpygHY2ZMaFVgol0SfGWPrxeBx7 37QmQAmezM+mkgOuPEee9J/4Ss07me4cH+Us/j3ERNuLT7KmScaW1+yQHGQYglbQY8p9 BQH8vHpy7zoOSebca+NCg2klpz2d0OcHkQ9Ia1OuJGykGdPKFZ9KvR/BNYaXEfa9f6gn Cfxw== X-Gm-Message-State: AOJu0YyJvpz5/Hsit/Was+76GyflePEBrJiHklAxZxEXtEOB4kMROkyJ 0b+2wE3zUCO0J9irZcwFcNXM4Hj+XPt0bxXfRVs1rq7dg3Dg44cBIZQqYvbzSZ2FGvpQbKQGhpg 4ow/jMn483tzsZ5k8u0HzV21DTl/mbc1GTnApcrCOqwCIBErWgZq90NocBmHOmgGkqrIw X-Gm-Gg: ATEYQzyvav3f/EGLk6Xxy9/tbvYpnR5ZmeBgTSHuNfWjv+XXuZKb69iYseAtOXBTy0f JF4749YOzE7//YZ5iaYY4DGVcgsAE4uOBEwcmVCScKAaHKVCM8W/zOuMuwOGmID3zYSoAfJoHMP oFM0UreUrMemwCn6o+lFhfPn6GUv4CbdbnJUJfO807yFA2DSSRkorDpXsaZeIWh+fF6C+Pn8mxj blrtVV1WiElXC7LJ3TNEukUU1GFuRaFxzHRbgibk1wrAhzZzyornArPVMNAVJSra+75z0Ze+vhB kC21QG1DhrJiCW2bvDnQFPE7zK6kMqq6sgEWqBbSH/F0cejnuHKF1Jo5xMnhkAmZom4VOnpFVSE O7u8UG84Jvg7qJ+5WvESNK9v83KgdKZBjMnYT4gG2K291fJe79Tl1Teiq2nL7mAIAeXR7DTPHZ2 pAzaOEfN7z X-Received: by 2002:a05:7301:168a:b0:2c0:f424:b545 with SMTP id 5a478bee46e88-2c931c9246dmr4298309eec.15.1775126871559; Thu, 02 Apr 2026 03:47:51 -0700 (PDT) X-Received: by 2002:a05:7301:168a:b0:2c0:f424:b545 with SMTP id 5a478bee46e88-2c931c9246dmr4298284eec.15.1775126870968; Thu, 02 Apr 2026 03:47:50 -0700 (PDT) From: Matheus Tavares Bernardino To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, ale@rev.ng, anjo@rev.ng, brian.cain@oss.qualcomm.com, ltaylorsimpson@gmail.com, marco.liebel@oss.qualcomm.com, philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com Subject: [PATCH v2 16/16] tests/hexagon: add tests for HVX bfloat Date: Thu, 2 Apr 2026 03:47:33 -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: ke28dCZnPHJwLUjOREgGjYFIAVP2IgT1 X-Proofpoint-ORIG-GUID: ke28dCZnPHJwLUjOREgGjYFIAVP2IgT1 X-Authority-Analysis: v=2.4 cv=JII2csKb c=1 sm=1 tr=0 ts=69ce4958 cx=c_pps a=cFYjgdjTJScbgFmBucgdfQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=5fiZ3uqFNM85zO-AtVUA:9 a=scEy_gLbYbu1JhEsrz4S:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5NyBTYWx0ZWRfX+Fj98zAXL/tn oTv5d6R+XIJoFhKhqvTV7/RpKUmQRLwbdKPnC6cMoWIqXfGRU0diFpum6fnj3SMwDPmW6A1rvxA bUDRD8gLBrOoAgQ754MUYpBhqj3DQ0iZVBg5H8K9zuCp+VeM8p6rUm6pMhNJrBrNOGUFaotyQrD n2wKDQM+Vy1AFdbeQorkk22uAWQGBn6BSfx/0/UFCDDOKruXVbB0A04LgnSkyBU1sa2Le9TFnPv THiqjM72LkKLpp0pdmcitTyqTrJdRP6mJokjCXFYbeG5zQWWoJASSuWa5+iReIlOuIdVsnWt4sO DbOXqE5/e9HZ9DOcqCXrs3TYWqYtwoAP6qM6QqWl73X09rI6jCU7a0xmncUMRIiIm/ItrEte6lm vKvG+IAZQYiJ7phu0YchDvyV9ihIZ4pUp8rZ5SH0IuKUXLsrrn2f1R2y+1lONmvy8R27mk3dLAa bpHzy0oDBVdzmCg4+gA== 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-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 spamscore=0 clxscore=1015 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020097 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.168.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775127002288154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Matheus Tavares Bernardino --- tests/tcg/hexagon/hex_test.h | 13 +++++++++ tests/tcg/hexagon/hvx_misc.h | 30 ++++++++++++++++++++ tests/tcg/hexagon/fp_hvx.c | 41 +++++++++++++++++++++++++++ tests/tcg/hexagon/fp_hvx_cmp.c | 52 ++++++++++++++++++++++++++++++++++ tests/tcg/hexagon/fp_hvx_cvt.c | 31 ++++++++++++++++++++ 5 files changed, 167 insertions(+) diff --git a/tests/tcg/hexagon/hex_test.h b/tests/tcg/hexagon/hex_test.h index 79d30ec61c..f86e6e1a69 100644 --- a/tests/tcg/hexagon/hex_test.h +++ b/tests/tcg/hexagon/hex_test.h @@ -126,6 +126,19 @@ const uint16_t HF_small_neg =3D 0x8010; const uint16_t HF_any =3D 0x3c00; const uint16_t HF_neg_two =3D 0xc000; =20 +const uint16_t BF_INF =3D 0x7f80; +const uint16_t BF_INF_neg =3D 0xff80; +const uint16_t BF_QNaN =3D 0x7fc0; +const uint16_t BF_SNaN =3D 0x7f81; +const uint16_t BF_QNaN_neg =3D 0xffc0; +const uint16_t BF_SNaN_neg =3D 0xff81; +const uint16_t BF_HEX_NaN =3D 0x7fff; +const uint16_t BF_zero =3D 0x0000; +const uint16_t BF_zero_neg =3D 0x8000; +const uint16_t BF_one =3D 0x3f80; +const uint16_t BF_two =3D 0x4000; +const uint16_t BF_four =3D 0x4080; + const uint32_t SF_INF =3D 0x7f800000; const uint32_t SF_INF_neg =3D 0xff800000; const uint32_t SF_QNaN =3D 0x7fc00000; diff --git a/tests/tcg/hexagon/hvx_misc.h b/tests/tcg/hexagon/hvx_misc.h index 43de20da6a..c21ea975c1 100644 --- a/tests/tcg/hexagon/hvx_misc.h +++ b/tests/tcg/hexagon/hvx_misc.h @@ -41,6 +41,7 @@ typedef union { 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]; + uint16_t bf[MAX_VEC_SIZE_BYTES / 2]; uint8_t ub[MAX_VEC_SIZE_BYTES / 1]; int8_t b[MAX_VEC_SIZE_BYTES / 1]; } MMVector; @@ -73,6 +74,7 @@ CHECK_OUTPUT_FUNC(uh, 2) CHECK_OUTPUT_FUNC(hf, 2) CHECK_OUTPUT_FUNC(ub, 1) CHECK_OUTPUT_FUNC(b, 1) +CHECK_OUTPUT_FUNC(bf, 2) =20 static inline void init_buffers(void) { @@ -97,6 +99,12 @@ static const uint32_t FP_VALUES[] =3D { }; #define FP_VALUES_MAX ARRAY_SIZE(FP_VALUES) =20 +static const uint16_t BF_VALUES[] =3D { + BF_INF, BF_INF_neg, BF_QNaN, BF_SNaN, BF_QNaN_neg, BF_SNaN_neg, + BF_HEX_NaN, BF_zero, BF_zero_neg, BF_one, BF_two, BF_four, +}; +#define BF_VALUES_MAX ARRAY_SIZE(BF_VALUES) + static inline void init_buffers_fp(void) { _Static_assert(BUFSIZE * (MAX_VEC_SIZE_BYTES / 4) > @@ -116,6 +124,25 @@ static inline void init_buffers_fp(void) } } =20 +static inline void init_buffers_bf(void) +{ + _Static_assert(BUFSIZE * (MAX_VEC_SIZE_BYTES / 2) > + BF_VALUES_MAX * BF_VALUES_MAX, + "test arrays can't fit all BF_VALUES combinations"); + int counter1 =3D 0, counter2 =3D 0; + for (int i =3D 0; i < BUFSIZE; i++) { + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / 2; j++) { + buffer0[i].bf[j] =3D BF_VALUES[counter1]; + buffer1[i].bf[j] =3D BF_VALUES[counter2]; + counter2++; + if (counter2 =3D=3D BF_VALUES_MAX) { + counter2 =3D 0; + counter1 =3D (counter1 + 1) % BF_VALUES_MAX; + } + } + } +} + #define VEC_OP1(ASM, EL, IN, OUT) \ asm("v2 =3D vmem(%0 + #0)\n\t" \ "v2" #EL " =3D " #ASM "(v2" #EL ")\n\t" \ @@ -212,10 +239,13 @@ static inline void test_##NAME(bool invert) \ =20 #define float_sf(x) ({ typeof(x) _x =3D (x); *((float *)&(_x)); }) #define float_hf(x) ({ typeof(x) _x =3D (x); *((_Float16 *) &(_x)); }) +#define float_bf(x) ({ uint32_t _u =3D ((uint32_t)(x)) << 16; *((float *)&= (_u)); }) #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 raw_bf(x) ({ typeof(x) _x =3D (x); (uint16_t)(*((uint32_t *)&(_x))= >> 16); }) #define float_hf_to_sf(x) ((float)x) #define bytes_hf 2 #define bytes_sf 4 +#define bytes_bf 2 =20 #endif diff --git a/tests/tcg/hexagon/fp_hvx.c b/tests/tcg/hexagon/fp_hvx.c index 46f49c0d3c..f22514b4bf 100644 --- a/tests/tcg/hexagon/fp_hvx.c +++ b/tests/tcg/hexagon/fp_hvx.c @@ -29,6 +29,7 @@ int err; #define CHECK_NAN(A, DEF_NAN) (isnan(A) ? DEF_NAN : (A)) #define NAN_SF float_sf(0x7FFFFFFF) #define NAN_HF float_hf(0x7FFF) +#define NAN_BF float_hf(0x7FFF) =20 /*************************************************************************= ***** * Binary operations @@ -91,11 +92,43 @@ DEF_TEST_OP_2(vmpy, MULT_HF, hf, 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) +#define MIN_BF(X, Y) MIN(X, Y, NAN_BF) +#define MAX_BF(X, Y) MAX(X, Y, NAN_BF) =20 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); +DEF_TEST_OP_2(vmin, MIN_BF, bf, bf); +DEF_TEST_OP_2(vmax, MAX_BF, bf, bf); + +#define DEF_TEST_OP_2_INTERLEAVED(vop, op, type_res, type_arg) \ + static void test_##vop##_##type_res##_##type_arg(void) \ + { \ + memset(expect, 0xff, sizeof(expect)); \ + memset(output, 0xff, sizeof(output)); \ + for (int i =3D 0; i < BUFSIZE / 2; i++) { \ + HVX_VectorPair *hvx_output =3D (HVX_VectorPair *)&output[2 * i= ]; \ + HVX_Vector hvx_buffer0 =3D *(HVX_Vector *)&buffer0[i]; \ + HVX_Vector hvx_buffer1 =3D *(HVX_Vector *)&buffer1[i]; \ + *hvx_output =3D \ + Q6_W##type_res##_##vop##_V##type_arg##V##type_arg(hvx_buff= er0, \ + hvx_buff= er1); \ + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES / bytes_##type_res; j= ++) { \ + expect[2 * i].type_res[j] =3D \ + raw_##type_res(op(float_##type_arg(buffer0[i].type_arg= [2 * j]), \ + float_##type_arg(buffer1[i].type_arg= [2 * j]))); \ + expect[2 * i + 1].type_res[j] =3D \ + raw_##type_res(op(float_##type_arg(buffer0[i].type_arg= [2 * j + 1]), \ + float_##type_arg(buffer1[i].type_arg[2= * j + 1]))); \ + } \ + } \ + check_output_##type_res(__LINE__, BUFSIZE); \ + } + +DEF_TEST_OP_2_INTERLEAVED(vadd, SUM_SF, sf, bf); +DEF_TEST_OP_2_INTERLEAVED(vsub, SUB_SF, sf, bf); +DEF_TEST_OP_2_INTERLEAVED(vmpy, MULT_SF, sf, bf); =20 /*************************************************************************= ***** * Other tests @@ -180,6 +213,14 @@ int main(void) test_vfmax_sf_sf(); test_vfmax_hf_hf(); =20 + /* bfloat */ + init_buffers_bf(); + test_vmin_bf_bf(); + test_vmax_bf_bf(); + test_vadd_sf_bf(); + test_vsub_sf_bf(); + test_vmpy_sf_bf(); + puts(err ? "FAIL" : "PASS"); return err ? 1 : 0; } diff --git a/tests/tcg/hexagon/fp_hvx_cmp.c b/tests/tcg/hexagon/fp_hvx_cmp.c index c4e1c81ce5..4417e736f9 100644 --- a/tests/tcg/hexagon/fp_hvx_cmp.c +++ b/tests/tcg/hexagon/fp_hvx_cmp.c @@ -22,9 +22,11 @@ int err; =20 #define MAX_TESTS_hf (MAX_VEC_SIZE_BYTES / 2) #define MAX_TESTS_sf (MAX_VEC_SIZE_BYTES / 4) +#define MAX_TESTS_bf (MAX_VEC_SIZE_BYTES / 4) =20 #define TRUE_MASK_sf 0xffffffff #define TRUE_MASK_hf 0xffff +#define TRUE_MASK_bf 0xffff =20 static const char *comparisons[MAX_TESTS_sf][2]; static HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; @@ -160,6 +162,55 @@ static void test_cmp_hf(void) CHECK(hf, 2); } =20 + +static void test_cmp_bf(void) +{ + /* + * General ordering for bf: + * QNaN > SNaN > +Inf > numbers > -Inf > SNaN_neg > QNaN_neg + */ + + /* Test equality */ + PREP_TEST(); + ADD_TEST_CMP(bf, 0, 0, false); + ADD_TEST_CMP(bf, BF_SNaN, BF_SNaN, false); + CHECK(bf, 2); + + /* Common numbers */ + PREP_TEST(); + TEST_CMP_GT(bf, raw_hf((_Float16)2.2), raw_hf((_Float16)2.1)); + TEST_CMP_GT(bf, raw_hf((_Float16)0), raw_hf((_Float16)-2.2)); + CHECK(bf, 2); + + /* Infinity vs Infinity/NaN */ + PREP_TEST(); + TEST_CMP_GT(bf, BF_QNaN, BF_INF); + TEST_CMP_GT(bf, BF_SNaN, BF_INF); + TEST_CMP_GT(bf, BF_INF, BF_INF_neg); + TEST_CMP_GT(bf, BF_INF, BF_SNaN_neg); + TEST_CMP_GT(bf, BF_INF, BF_QNaN_neg); + TEST_CMP_GT(bf, BF_INF_neg, BF_SNaN_neg); + TEST_CMP_GT(bf, BF_INF_neg, BF_QNaN_neg); + TEST_CMP_GT(bf, BF_SNaN, BF_INF_neg); + TEST_CMP_GT(bf, BF_QNaN, BF_INF_neg); + CHECK(bf, 2); + + /* NaN vs NaN */ + PREP_TEST(); + TEST_CMP_GT(bf, BF_QNaN, BF_SNaN); + TEST_CMP_GT(bf, BF_SNaN, BF_SNaN_neg); + TEST_CMP_GT(bf, BF_SNaN_neg, BF_QNaN_neg); + CHECK(bf, 2); + + /* NaN vs non-NaN */ + PREP_TEST(); + TEST_CMP_GT(bf, BF_QNaN, BF_one); + TEST_CMP_GT(bf, BF_SNaN, BF_one); + TEST_CMP_GT(bf, BF_one, BF_QNaN_neg); + TEST_CMP_GT(bf, BF_one, BF_SNaN_neg); + CHECK(bf, 2); +} + static void test_cmp_variants(void) { HVX_VectorPred true_pred, false_pred, pred; @@ -220,6 +271,7 @@ int main(void) =20 test_cmp_sf(); test_cmp_hf(); + test_cmp_bf(); test_cmp_variants(); =20 puts(err ? "FAIL" : "PASS"); diff --git a/tests/tcg/hexagon/fp_hvx_cvt.c b/tests/tcg/hexagon/fp_hvx_cvt.c index 71c3f0fd4f..bd8d39d6b6 100644 --- a/tests/tcg/hexagon/fp_hvx_cvt.c +++ b/tests/tcg/hexagon/fp_hvx_cvt.c @@ -19,6 +19,8 @@ int err; #include "hvx_misc.h" #include "hex_test.h" =20 +#define NAN_BF 0x7FFF + #define TEST_EXP(TO, FROM, VAL, EXP) do { \ ((MMVector *)&buffer)->FROM[index] =3D VAL; \ expect[0].TO[index] =3D EXP; \ @@ -172,6 +174,34 @@ DEF_TEST_VCONV(sf, w, { \ TEST_EXP(sf, w, 16777219, raw_sf((float)16777220)); /* rounds UP */ \ }) =20 +#define TEST_EXP_BF(VAL, EXP) do { \ + ((MMVector *)&buffers[1])->sf[index] =3D VAL; \ + ((MMVector *)&buffers[0])->sf[index] =3D VAL; \ + expect[0].bf[2 * index] =3D EXP; \ + expect[0].bf[2 * index + 1] =3D EXP; \ + index++; \ +} while (0) + +static void test_vconv_bf_sf(void) +{ + HVX_Vector *hvx_output =3D (HVX_Vector *)&output[0]; + HVX_Vector buffers[2]; + int index =3D 0; + memset(&buffers, 0, sizeof(buffers)); + memset(expect, 0, sizeof(expect)); + + TEST_EXP_BF(SF_QNaN, NAN_BF); + TEST_EXP_BF(SF_SNaN, NAN_BF); + TEST_EXP_BF(SF_QNaN_neg, NAN_BF); + TEST_EXP_BF(SF_INF, BF_INF); + TEST_EXP_BF(SF_INF_neg, BF_INF_neg); + TEST_EXP_BF(SF_one, BF_one); + TEST_EXP_BF(SF_zero_neg, BF_zero_neg); + + *hvx_output =3D Q6_Vbf_vcvt_VsfVsf(buffers[0], buffers[1]); + check_output_hf(__LINE__, 1); +} + int main(void) { test_vcvt_uh_hf(); @@ -182,6 +212,7 @@ int main(void) test_vconv_sf_w(); test_vconv_h_hf(); test_vconv_hf_h(); + test_vconv_bf_sf(); =20 puts(err ? "FAIL" : "PASS"); return err ? 1 : 0; --=20 2.37.2