From nobody Sat Apr 11 17:07:49 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=1775673856; cv=none; d=zohomail.com; s=zohoarc; b=TKvSoFqCkBK1ZVnpe8I7b3Bj/VbpNmR3bmlKiCIN8EHwfANth1HQGYv/gH+NTioAuu64heYIdHmAyKZ+nU3zDSrdWOlMWYAs115UqDAF1z7zWmTOIJh/fqZI1rQ/kQ+IWy29v53PS8gqy1pPQKJ9RIvla7hLn52eIHtLFYZUNKk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775673856; 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=lbR8tORUi2IRMP1B87FDKO707C85iRSK9eCWHArC5G3bfAtAWRp9E4v5zQvmjSOB6Ov4nyidwbpQ+zrFE6qcsEDo3HpFC1PdtO8En7bGsnsSv9TakggDB0wU7J1ceraqkXQpK6njPXy/cPwakArbydTxl0XsJFtDz8lzDcFOAyQ= 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 (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775673856930344.9709366310516; Wed, 8 Apr 2026 11:44:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAXqP-0003cW-2e; Wed, 08 Apr 2026 14:41:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAXqK-00036s-7A for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:41:36 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAVtz-0006ns-7w for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:17 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 638GC6q01072656 for ; Wed, 8 Apr 2026 16:37:12 GMT Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddtb382b7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:12 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-c741b950511so46695a12.0 for ; Wed, 08 Apr 2026 09:37:12 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:10 -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=mKeDk74UkXKfmZ43IbeWeKzAS3I b1ir8jxZ2jzOV9UIBrsUCeFxGujpqu30lWEwaDIFSRsLl2Y6CqdX0/r8DyQa5cJo KTT2OwhRR87jVzaUncbAYelzLx2Y3n54/xOwh2a/tlkE9WHaSOduzAb3PqPXsPkI d2vzKEV5escMmeae0O9vKoSqdaCy6vstcBG+nFLKSwPnAaWq3Q3T9rOrTrovf9RR Ofk1V754ovQbOYT8w9n8GE74F3vTlGt746CZEJJLfRhHfrXjw9rMQOBhYWOU9HzF ZpGuDK1PK0/XeeisR5brtlUIqA3J7JSAnP4UPZMkSQVfrutL23mAgceQi9Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666231; x=1776271031; 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=Zq4NeuUTavp8Gjc2wIiVkzBo0TnZNYWnYPoyCZNL+SsPsQrYuXBNCv7lsR2KhiewbO Xe9yUrNlqfiZAHS6Yu+TG90OIirl1p5+p8TT86xzvupsNBMQVq+7xmEERI51aoSMamdL /8ZiktHc4711I+AQgr7YJ+g6H+YvT4N7jwA5Z1d51A57jHUzla6zhE7GrBoSd6SZqB0w CafdhCPEkZOMgSA8xn7QcU7FlhojAkBFXMSFn3xwTstxw+t+5Spr/jonZZ5doUdM16fD nWH4auBtjUxyh6HwIK8iamHRCaPbcF4p5O1xts6IeJeeYPvKPvd0+DKj57rd+GjGs+8P pA6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666231; x=1776271031; 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=n+i7Rk378U8aCe7RBiygiYYXhB2Ee3SipWJ0BZo80RbLijaQHgmMo7QM1wj8Ijdz13 St6VHgC4J6zJIb63AZ6geTZcRpT9kT8AThbq/Pz/a/xLUs8JYpeldUMddCMamB6G7lmr p1Iv5865JkgDBcAFu4u7NMh1uwPfPrGh9wzW0AUjzU+y7j2tGO8jXGZmYBEQaPv3k5Kk R4Z9T+BEeVwoEJ3F99lKQFwIbTVTrOwuE+5F/COzIbCpR7xkBD4XE+Zd6M8NlYt8jyiq f2OZId8WHWSEg3GOGPSWILIAeY5mMoq67Bx7ShHdx/sXZSEeerXWC0mrqWP9QnHohSSf 8CRA== X-Gm-Message-State: AOJu0YziaFOjoz6OH0o7cy9+/RTzQ7hhB3Z40DicyiEtGuYIFH4T6N6e UAmmygeQh7Rze60/lvbpXpM5v5L+Bk2EqrNM41seo5JjhJ34dLJmG6HJKtz+qV5ZSS6qsbAQaCv zEkakwl256CJal2LrSD2mlDU7f5HGyMY+15RGuasWNTkN9KsFgbvvk+/llVmf+bfHnygG X-Gm-Gg: AeBDiev/3b+eQIjH2RMXVTSG6HLDmQagJNzepTyeIiAsjYyTlZcilUeY9BoQa1s+vtn //04foi1mKwN/6jFmg2WInUkalTNQ8Hyl/0Hh2mPHVVy4Emj3YHhuhsISdG6rdOwkuE85Apk+s6 +MgMV4PP3o+Y/XqeINy1SV3oeDMqOe4fjD2AmpyTjtJpC/S4RPJoAd2ovm0e6QeK0T0QUYh7v5U HJTNVX/W68BcieoHJxaPSvUTXl4J5p14wYPLxr4DtZ3h9r6rt6lFBrgE5BHO2k0KybKlcr0po6e FHLfSndT1+e5B+Zye5LXBZe9Qzb7e0KWTFZDbFKwdYaLrn4LNn/KxMuEcmQeN2t7X6YU0Y0SN1o 5eHJW7uxg/0eW0xKOTi2fsM96fnuJxLYBLWZ/tqfntLmJRMx1lZX6q4xyAZH8xYdkRaqCLeD+aS PzChs/KJp+ X-Received: by 2002:a05:7022:4396:b0:12a:6a64:81ef with SMTP id a92af1059eb24-12c28b962ffmr97534c88.9.1775666231116; Wed, 08 Apr 2026 09:37:11 -0700 (PDT) X-Received: by 2002:a05:7022:4396:b0:12a:6a64:81ef with SMTP id a92af1059eb24-12c28b962ffmr97501c88.9.1775666230366; Wed, 08 Apr 2026 09:37:10 -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 v3 01/16] tests/docker: Update hexagon cross toolchain to 22.1.0 Date: Wed, 8 Apr 2026 09:36:52 -0700 Message-Id: X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfX/vIpkQtewCEB 7mjhQhlZviBCsVgTwc+Ts9W++d4+XisZE7UncRLrhr9bNuXb1RTkCRgNeUdwrAunWEcSttI1Z7M BP9Wm2PHObjf7G03tcm4Dx3Z9L/X0ouJjse4K6ecLXWWI89LC5ThQMrywnUos3OjZr9BYh43JH6 7GdpgrQJc+O3iySSluFtm4AL0IK0AFa7hJvzofY+i6tN6jTrUw6Uj/en76c3qSTT1+cfNbTMd6y LnG0BBpIfKx7qZcf34pgcF+VReXUw/3OL5g2dMUafl/xxFqNm8GRDqy8KB1/bk7pr0TD8bBaPQi 0HkzaXv/EmxaepTqugpLO44X8EYWkpBZ392JOjgEzvSORPWOYheUM9VO0/0qyfQ7ZEb5cGaw90H zpKEsmefdPSr9Laxrp35anNJR8Oiu0gzBcuxJOW3uON/cR+eKl2vI/qPsVx6bi0Nef4wX0UbcRS Q8zzeR83XNfx4lrz/oQ== X-Authority-Analysis: v=2.4 cv=eKIjSnp1 c=1 sm=1 tr=0 ts=69d68438 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=ovJmrJClAAAA:8 a=qC_FGOx9AAAA:8 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=q7X4_axEi9qJq2Gpr8MA:9 a=bFCP_H2QrGi7Okbo017w:22 a=brTEhlvMp4NY0_u118I2:22 a=fsdK_YakeE02zTmptMdW:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: SLu8gPdUn_psBthHpW2eapc9cYVR_uw1 X-Proofpoint-ORIG-GUID: SLu8gPdUn_psBthHpW2eapc9cYVR_uw1 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-08_05,2026-04-08_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 clxscore=1015 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775673858630158500 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 Sat Apr 11 17:07:49 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=1775673695; cv=none; d=zohomail.com; s=zohoarc; b=lPkRUrGmZVlTxsQWkXYUthe+pjjldOZJMN40pYaU8EpRBcrcL1/0TWiwhzMTtaiQI2BJBoDsGbsD8apvWEvvm0PNWAwCoK1fQrgb/82j+8A2crT0xb5pvtMqvUn9nrcui/BCuaAxh9kBm/b5/j9ncSZjZykuZEFwQLX49/LMHl8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775673695; 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=Fa040AomnezimlfdHrcYPSDDb+RUdvtXeF+++nlrWsFD6n9UiluWK5NyX6ePCv8dDW4UFMpxhyhvB1YQHwh5/HAmk1Ew5O+8drndxwBqS+vWZ79q4lHhSibQRaxdNi7o+tXiVBxtPgEsFHGjwnkOHnOHb3TlCSayjyWCKmJHfSk= 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 (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775673695785445.0275350554241; Wed, 8 Apr 2026 11:41:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAXqF-0002Vx-BM; Wed, 08 Apr 2026 14:41:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAXqB-0002GU-LE for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:41:27 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAVtz-0006nx-S7 for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:18 -0400 Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 638G4R3V2845045 for ; Wed, 8 Apr 2026 16:37:13 GMT Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddt7hg3m2-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:13 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-c7422397574so140157a12.0 for ; Wed, 08 Apr 2026 09:37:13 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:10 -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=Zb3ar69CPS/Qb5ocrIbW4Z1Id2Z CRfmFcHYK/SfdDd6DhEQZbyRYYhwtdd+A0DYbcppn5Bcru1dgy29aXDhiMbq/qPA aPCahryKsc2rmNR79m3pe6Y36DFTrMuteJqzJ4z2dyRS9aLcH7L1oDPWBCvTPTl3 fxlyscdSuSPEYqV3B1i1diFL52t3rZYk/tA/aUQVFJKQ/e3KtNZJ1Cfxq4q5pa2o 70tl7HrMkPctsC8/1N0ZQdC0pRsV6MBV4ztPjNoiY9fwLsmd/DV/lbvwKB5dg2au noiIQtcuXMXMpcHPCB6+71XBH5h9BrSigCbciXXDTwVqY+2hvyskUDm0nKg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666232; x=1776271032; 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=EfF+YRNFQxCAz6RYzgrZL36/RXhLejPM8Xb9y2yGtNhKzwbOEnu+NW9zO0pReGR9TU Qh0rWhG9+5D9gcdzVjgnjE32dIiMqc7JamihXTADVIcTW/zDfZDVRqHTiwaYkfEQwbhX rz1xgCBLbTRjNWD8dV//khJJxmGkvUawoEeE4E/FoSKFTkYXWgpOS4D+zVhdkXUH4TCN Wu/Y5FqdrTFNZusJvvzwK6ZaorqB+HcN8MnEpdf00cmbdTITnvShcPN/qq1aErfZ1Gpw w1GDRN3Utep/fAfhhT/Pm/l2SMnjtc8+Kw+AFrYuk9eI1qJD72Dp59gArMUhmL1opopV S8iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666232; x=1776271032; 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=cSLfZOjLt9NKQ3ICL2q/SMPzwhMT4ElqiLy+ormuhokFldLfvpA1A5sh4pV1rg9Hzb j5EXS8GYTysx5rMntZLXXrQbiC7QqdxNK1JDX3zV38OMycWXoxUDgNUrjwbPp7a18JIC msN72r200+Ju5qJCvXpe90B0vPw97IqTiI+2jmXfQ14Kf4IzFgdyIyrwmn6iOcgJZnBy 1xz9bXi8+t/W9rITIynEBxgK7lVGncLMx6EH6FTt+y7HnnvJW94ZXz0JVJZ3C9CDwEE6 vRuu7tjMWKR9WMxgAHkDgm/l/2O8ZtEetSQddbies7Mem4eBVlug1aO1X7K5bxvDd+jE 2nVQ== X-Gm-Message-State: AOJu0YyDu23nZFRvbJx2/W8R3LxsS4G3km4XFtbI2t7xbVm1inUsYq++ RVWKv8ZN0qp2pn6/Nili/GCr9XhTpZjxtHi1YUEGLrxyPXItOKzq/Yt1//jTXR5IZYR04ydd4pz Q2kfaJ3HbzztZRBexYQoDfp0AVxdwMpgiLH6w5jB8eG3RJQdtN4Zb826d0KW40TLx+HYW X-Gm-Gg: AeBDievYxBoR8ga2iNWcTeyuNoxsiDkdwZ2MGwswl3UiRXNjNXiWfQNmwYXVlwkbjF/ IyjLAK2bPGZveoOa4Jkh5rThi4d7xQF6amPsY46908w5Nbh/cpB1vyMUeAHEV/bb/9VDdL1BP+k lebjYjQ5hYqIVHl2Mw2IQEtim8V5YLL06LXUikSTBvFDIGuJtWX9LXlG0D+OWpa4bEWl8y1hVWJ xJ7+n9wNWMkW4b3ySwPC1/ql/jelaOcnnzu73Q7QhlMRpSbVlIHmI4wmo8j/93hx8MsEFwzA41B MFJ777ieze5qMhFXdP2L7skRugYwbP2+6WNoTSD7q5ENBZ1lCza+c4N5I7A3KHQG0Vd2MZhs4bh BDs5RY3fwUcTuVjky29tNuQUYZ0reFSs31Hqj7Iy1Ge58h8SrO429+su4lHg47tFBGra41w60Rb WnCZZ9hatG X-Received: by 2002:a05:7022:384:b0:12c:8b9:7200 with SMTP id a92af1059eb24-12c28c1baddmr93654c88.17.1775666232137; Wed, 08 Apr 2026 09:37:12 -0700 (PDT) X-Received: by 2002:a05:7022:384:b0:12c:8b9:7200 with SMTP id a92af1059eb24-12c28c1baddmr93621c88.17.1775666231280; Wed, 08 Apr 2026 09:37:11 -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 v3 02/16] target/hexagon: fix incorrect/too-permissive HVX encodings Date: Wed, 8 Apr 2026 09:36:53 -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=O5IJeh9W c=1 sm=1 tr=0 ts=69d68439 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=LtKSMYrkcOpncNoavBoA:9 a=_Vgx9l1VpLgwpw_dHYaR:22 X-Proofpoint-ORIG-GUID: Q9BOEHHNIS6jQt3vRyckvOFl2leYJD_v X-Proofpoint-GUID: Q9BOEHHNIS6jQt3vRyckvOFl2leYJD_v X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfXysYCbGAKitJV Qlm9UP4/1QtvwBrWe78X3nLXkg1rPh6n4q9wjbQz7jc4xZZxTwbOdtCVswLLaH1Oot97wtxYcHk 7J2qy81J4q4SSt26A5yqyYafTqIEHaRxV1oh8vUyojKB7gP19TSx7UXTGS8XE9rdZXoiPGYH1db Kw5vPia9PRYf+pxC8OS5a0H78ZvhrYDgZR0QpcA8BGbKDQbvs1AQYnn5EsHJJ/XYGqlpwJdzFDj nhBKi4G1ntEAPJKuHacqqBeQ6h5aHveqMKMBngn/jUN9qRV2J5X2lQsV/3tXB7RpiUBRSRApzUJ 7PI8UpnSk3mbOTscqeHr0cfis2jo1wK7uHypT27mOgqC37o8teQ4YGjVrq0Tk3znEAlzbInSS9F d+rRlDblOq8odgj7Em6V+vvhXb8IdvF+LIsC4+gPF0gbBS9IA1TWIIej48VTMH2rIS0CycrBMQg 7Zc1bQhn/8f+rwX4j3A== 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-08_05,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 malwarescore=0 spamscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 suspectscore=0 clxscore=1015 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775673698090158500 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 Sat Apr 11 17:07:49 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=1775673755; cv=none; d=zohomail.com; s=zohoarc; b=VAvWjQLu6Qvb9Qh4HvCToFVBZnCVzzEbsZ1Lvsfes1ba/P/s1Rn5CcKrf7sx+65kZV3fCthAwdOdgxXj3IW+nAWj+8+QHmYc6ZYVXC7xljHO8+asN8mCPpANDJf2O3LzX30qg2yp7+A7vAC4e6BZEZvoS4DH5+vvUGhptkMvQzc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775673755; 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=WW59yQTz4Zph6QCMKcCbuHkjr5kUUEpWBNCcsGDR5L0trizKHCHqdc8VgZnrFg6i7f8ZpmHXm4sys1yk1Bng5VcK/Fc+2woyD7RWk0NVkq8dx20MecamjnhaQUTntYI0+JCO//QXGDGwdOVwAq0Ra16m+Pl91wMB/31b3kmt318= 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 (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775673755580253.40577552639093; Wed, 8 Apr 2026 11:42:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAXqJ-0002r7-2M; Wed, 08 Apr 2026 14:41:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAXqB-0002BO-36 for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:41:27 -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 1wAVtz-0006o1-8f for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:17 -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 638G3CnS3781111 for ; Wed, 8 Apr 2026 16:37:14 GMT Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddt6y84bf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:13 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-b630753cc38so138136a12.1 for ; Wed, 08 Apr 2026 09:37:13 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:11 -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=f4TUKGTssulp1YiqAiqhgvOZR34 h9sSQnoQby+y3sHebn6OmMgAO4q5qS1Q8OqiUDxKM1v73QuJfWfFdZFfKzOmTisn 08tAs9NKEBahSGx6Nk+p/u5RvQ5Ys9DCPV0UX46X4/UqXLX0NmZg9ao82NbGrCBs BZKWOgkXHYQ6FLBDXa2iNUwUe5syA33EzlZ9vAnXqstuXpyZvWJfuudRWzx8HQIV Esl1FtPHFLzXNjupdHCg68N94kB/2Z0QsHX//6ofMm9OGs5y6j4JN/VBYxEZ8/kQ ZOIfVYEZp8JKh2m3rvsF4Ohhrhux24pxP0Y1bHoeqzFeABiAIb322BkR9eg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666233; x=1776271033; 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=ae+u2VUiWSlyj1vscAu+luKpvwX5shfeyzGeBm0TeKTCvrI+gpaf3sVZHb2FcrbmKB ITVlk7mkhQSwggvhE08bh9mTOMS8+np8yHJ6To2htub8nKK6WntfwXyowQoxqJ8yPRbe dN+Nco6Ph1/Yr51rZSBWtG6D+a6rihtHG4wRyuDcKMtH+pWA88Or3xH1cZoaFviQpnMx a9EHgxag9g0eiTXS7OXkOosHcBWKIir+bfozB6utVq5g4Pfnmx+qoOCq3vWZIsO3Gv9X cHF5S6mOgn/N+oiQLIxF3xzDVZ5e77QpsnaI2r25jC37R06npMBIk/T1lT2eZw6/tOAa N63w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666233; x=1776271033; 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=fF+OHGWNcysUi+gczTSkVN579UMAFMmh+Yv52qiMW/4TfiQZcwYh6tlY7ziYWXSHT6 ttcLSebLXKYJh2HUCCWcl7ji8jsVPIiGsdCrPdbcbgeL6+dVJWDSc/WHdTGv06fm5ZoC 0bBWBUIuy0J/P9bIRgdbF2XYN5y+n8R+y6YkEYs4i5+PvB0tAlvhKXWWdYEs1OTq0RJ/ k4DY2VGZPkuT8oICN0H0pilONOQbiwC4i81qJDEFSesS3yjKxAOonxsl6J+0AvZnisMQ wsYqALco4Tm3Fn1nzKd1kio0UBp49orIZsZRQgu1XHRfM6Ekay9e1USIda0E3+DW4gay b9Rg== X-Gm-Message-State: AOJu0YxzAVm4WbxgZClpG57B1aGTkn+677MSxm+jY4EZx2bKgjq1OmYG BSEh/5ONVXX2ibj8BxJTc6W8pDU0FRkqysQcP+QporBujKiy5RmywyHfzWHnwz3VKW0Bkqeugqb fO99fmvAH3QKadQrR+txGdKXaQGMwo9AzEaB+BX4SXB6UT8wbezhOVrqcR8o8qLhBN4cZ X-Gm-Gg: AeBDiev/8YcNs94RrWEv9I5rkIEXQq2bxosduJQZG7CM/S0PvCyg+CdXA4ghw0bGv1d IBDphSskytpSV5yMUaSCXCmcTsMVSSN6a5SBFd8gr+LD9par18khSgYwNQwUpWqeddWVsBlOCG0 v1xYoUX+ADxXopHRJp4tuk5OqUdbr/AExslpnU1nVcjToKg0lCTD4iMktRExFkLju61lG+8s7a8 x6rtkWcrZM4f3c+3X54vdq6g2a0XY6yuguyxunud928wFtlDgfudFAfZvIwQlKOgC2lspXZIZ/U apDFIM9VIwvmnv7iTA30xGYygllCfQxd/OomRK2s0HRPuJxKVFwg4voZeRrcfzZP0Rkn4P1w2NT Yjrff45RJaH5y8eDhhyYgAKzpgXVFyWyNqlCmIy3nLWVvQMMJMDuSRP6CcEJ4RpQoGByC3RzOPQ d5qosYfGUK X-Received: by 2002:a05:7022:212:b0:128:d24a:a5ba with SMTP id a92af1059eb24-12bfb760956mr10168468c88.20.1775666232806; Wed, 08 Apr 2026 09:37:12 -0700 (PDT) X-Received: by 2002:a05:7022:212:b0:128:d24a:a5ba with SMTP id a92af1059eb24-12bfb760956mr10168442c88.20.1775666232170; Wed, 08 Apr 2026 09:37:12 -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 v3 03/16] target/hexagon/cpu: add HVX IEEE FP extension Date: Wed, 8 Apr 2026 09:36:54 -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: 98xhWD-1hH7TIhUcVMrQ67jo4793rki6 X-Proofpoint-GUID: 98xhWD-1hH7TIhUcVMrQ67jo4793rki6 X-Authority-Analysis: v=2.4 cv=R9sz39RX c=1 sm=1 tr=0 ts=69d68439 cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==: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=3WC7DwWrALyhR5TkjVHa:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfXzTQ+BKJNR2YQ fPGneCx9MJQCBqHLUxWCjziax9446CvAvxUeWGMUQxiatCe18CDrEQI0nPAXx2NVN+mdCsDkXE1 fN7ZVB9uc+txxUvpYwO3bhFiC+m4AkmIvrZnHcN63xcbUNt8Exy51qM3vQkpgwFBG2GbAqRIivY TGowT8MtsUV0e7K33DZZUoFp4tdA/mwOtmNlBsoO8Jxpmap0rtuOCHOEbNN1MliNujI0tQMIrRy jAd9YxHa4vSbvw/yJj2s677721QcfhwR0jbyUY+4WN++E+qLNFXbcxr5AY2IsN5ashoE0BnPNAv tYw9+eIRqxDPM1NGhdnYE7W+wwPTHSxPmGDw90DEO7TJYfUo6As8Na1S2iplPE2qMbsn8VQmpCU /AF1PDQliKw0NkNu5Mtw73hj0/oaZID6pXLEISfIKeGDjlvtrzZxW3sUZ4V5acWf5lT35Azcm13 2KGtu/vSy58VGcHrVrA== 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-08_05,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 phishscore=0 spamscore=0 priorityscore=1501 suspectscore=0 adultscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 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: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775673756395158500 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 Sat Apr 11 17:07:49 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=1775676076; cv=none; d=zohomail.com; s=zohoarc; b=gQpvTZsZULcejlpL1xU/sb7Ww70hI6AF/csuZZ9a75EHyQ27TR32n9vSaZQ+UZpUsc+K7/8RTvARrhS3Cm0WBoNdB6lChHnu9c9pclwFVP8h5j556qVnzDAn5Csi4+6fSJ9+pwTucpfx88fP5W+9EaCYIO9xRKEsVXNZH3w1G5I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775676076; 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=TWHvHBGObTIb8kYMjlVaoGk1WazzNFmEN68UZqt0QrzidmE6O1+gJoQ+rJd6PFL66ma70X6KjJ19DqBCWQmyepi27nioM4AinQcSciczKeMltFE0cDG0Yiodj2jsUAOKnOxeCJc5dXhPWHK5fz+ntCMwEXh204/ZTzYs+T1VsJQ= 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 (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775676076086464.8717298443406; Wed, 8 Apr 2026 12:21:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAYRl-0000a4-Ia; Wed, 08 Apr 2026 15:20:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAY2n-0005jf-0V for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:54:29 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAVu0-0006o9-8l for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:18 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 638GCDdF1073261 for ; Wed, 8 Apr 2026 16:37:15 GMT Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddtb382bf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:15 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-c7424d91b2dso39073a12.1 for ; Wed, 08 Apr 2026 09:37:15 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:12 -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=NJVmEoc9CfN6PWNfO0fgvnnR8j3 Nsa8haSNBS1sMwcoORibkJgUBLD+plZ9+85G1V2+pEztvdXfDKlOg7e+uK6SYDCs Q0/c1moP8dD6t5098fpfkbLFrRgJEGdstCOgVT86xogArxB+kw4/r1/WUz+qYvtB tQCP1VZnQnuyQm6BhPLCt0DGnU3kMixxKYTzQQp+N2rVOHLpZJtxiukL/lkQUzrA wGSmoS3YnSzh9911cOpw9uEV2A6Tahymx6I42Y9yiH/m+Pu5AbPg3YS09BCP3IGc Ve/jm7d+cagSjuQh6Hb/vf4UbqhN7p6FwjVzPbeh9/AbqcAheobGXLqDPAA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666234; x=1776271034; 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=K3Z+cXPVHWSCVAOmNm0uqRWp8QhINqgsWxGhQJ5zUx1A3nQzBc5V/5ZmvGm6LT/ZId Jvnu7G0syJm5yJ1nedARZsWYywbKA2ZSNP+lintfROokKaYVyxTabmGIh7iJ/9zkXhAF h0N2TZGU1iz0L1jlXeSAq92tdGhiij+yDUfy3CMX/FANmMrbaxeBkDhTieDOJBU8xrVB IfzyLkRPShU0mdyNF/nwIcCB6tF/cMZLTga5Z9ksl05MBLdIN5vxUCGM/j/706AkT3Dd C3m3iANoxma7W/sF50Ntrc5eYwGd3L105MJSKHNOaLRsBzjN4l4pkUmhSXO1k0p6NoiU arSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666234; x=1776271034; 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=plJh1S7jKAybt1dLn4dSVe+K49PuLNWMMr9fw9lZPfSzK7klXpGAvO9cX/o3x39gSO 6GSlr2Ej43QgfVYlbl6Sh6bUpyutOfEZK8s3dsOg/YMk+AkfGZeyEi/KnZ090vU53z5V hlqNcRhJjoSkLwxtLoKSe8j7EqWyr/NwzgT7BVUpbu650dq343bcrNM31Lawz4ds35yR ysBm4yXFRvWyh97XW1RMfomqpnRVfDOQrKU0WSGQpw6H57KwrfmTiEMQZTx+XTpWpt8G +dXV6eBGNQ4ODeOKyDlIPfTcntJyobt3e8fD6r6nNmWVg1MJKvw6Ysf+CJqAb7fxdu+1 QwKw== X-Gm-Message-State: AOJu0Yz7+UbzqPeDgYYEs96oYEXgBLBPZKdwGkL/c3v3x2xvuHhEsL6D NeL/PGdMYWDo3T3/5v8SrG6vO0r4qpwbyf1SchsoTviTr6r3JhYchzN+ynurnunTagab7nDB/2O VTTd/cPSe7NGkTJ+NTi8S3606EqBDuHA9z6jWDiWjmnw1GaYUMAOb3TBch2cr0BokH0ik X-Gm-Gg: AeBDieusKKdy+oBlqSg0EM+duwimEk7QDZCoM3k8d71aSP1DHt6GH2dRYTTpTGhIqvg bo72QUcwZXW5vX4n1uNySadglgECR184V13Lbgh956pauNuZIe3/8ErEMrKjoxL3/XDCEWcOlIO 3w8P8O8byfJh8uGMF4Mr2arWXl5u5wyM1WkEm5sghlrSBJH8T6wqi4rMNkAx91XaHNgbgQUC2I5 +ysVkUJEAH39siEnJqVD342qYlhlfrARRnykuyCp4x3C3yd+7CjFWKc/qIE9OjLSSMniJZAB+uT n0gdoM7ngcKZrrEGlhpKKoXqpr+6kywtnuoe7Bl2Xaqw8t0A2i2aFsAS+senDm8E/aXRWZ5y5LY mtPAWnT3+aD8jSoEhJjSyXU/CbRdW4CSGttnoQp+pHNdKA50Q1w9E6akPMh4P16byUj2N4xH0bV 18zjY5gO4j X-Received: by 2002:a05:7022:6881:b0:128:dedf:f56d with SMTP id a92af1059eb24-12bfb74419bmr11038051c88.24.1775666233641; Wed, 08 Apr 2026 09:37:13 -0700 (PDT) X-Received: by 2002:a05:7022:6881:b0:128:dedf:f56d with SMTP id a92af1059eb24-12bfb74419bmr11038024c88.24.1775666233062; Wed, 08 Apr 2026 09:37:13 -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 v3 04/16] hexagon: group cpu configurations in their own struct Date: Wed, 8 Apr 2026 09:36:55 -0700 Message-Id: X-Mailer: git-send-email 2.37.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfX+8glG7gmmDL1 5RqBU9ACSp8eg6nIncNWwF5jndCVQkBGfBo6xAUBEn5Jqf1EEm56HLh5pwo6mQhhPtaSGPDNHwu Ge5wLtphJP2z+FwP4iYaDvT6FiKx6y9ws+KLKZZFSN1RTBcDSOunucy9XgtsZw5prlmg+rQMOTj 8dAGcGm+26VlKmsL0N/H7UXKwk2P4+rtHKfW4BwM970bFAoe33vyI6Zny6/NNVsLH1EESMG99G4 LjESmQB+x0xbA0UV+IEBr+FRaltYk8Ox2fSEtbPDfptoHTUCTA4mY9WLcpuovnrt0czh+t4/oaA PREiBMS1hdRgsUvt4Tr3TrO1DSmYwl4S7sPibQXl1d1mKB0csl26Llvnby0TrgGBVKEOn5Y/vEY kpQheWxKv/xONTLRwZnSuspWZFpLRWAzND0VG1JNy8RseS3UjoFcTV0gBofdPia1rtloeMWQ6zq hwpcjP7gfBNIElmx7KA== X-Authority-Analysis: v=2.4 cv=eKIjSnp1 c=1 sm=1 tr=0 ts=69d6843b cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=AHWWR7nXwgbOQO2z_T8A:9 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-GUID: 3K7r7gASpZIozAkPxZE9mJ-Cno8dAVPA X-Proofpoint-ORIG-GUID: 3K7r7gASpZIozAkPxZE9mJ-Cno8dAVPA 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-08_05,2026-04-08_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 clxscore=1015 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775676077050154100 Content-Type: text/plain; charset="utf-8" This will be used in a follow up commit. Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Taylor Simpson --- 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 Sat Apr 11 17:07:49 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=1775676824; cv=none; d=zohomail.com; s=zohoarc; b=XrceAlEVMct+vx91QQpjRECDuyDPPa1IsnheSmO+x9RzQbAE/dzXd1q+HLJq8S/9fHC0gqWeBQxYE+KwDjzDn/kcP5bfXooL6JTh1KDHweFksiEniVKdS7dWUoQW0mau5+ad7ZjobcDcOV3QPe8pNpYpGfQovHPXN8qDHTirt+M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775676824; 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=cUay2AIr5xzGeHngvrIW/HvDKix1TYk8lRjnE/XdUzHyQ675laggh33ntg9l6mMSb26x8PePlCpyf6FG0Hp7fOhVColEe14UlSi9dAx1L1qX2ZSwpGqrREUC5H+r8rIAU5mHOzdEWoBtf39RlCAtWacVVF62c9Fcf5ogQv8SUBo= 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 (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775676824475529.4797824813728; Wed, 8 Apr 2026 12:33:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAYSd-0002fo-6o; Wed, 08 Apr 2026 15:21:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAY2m-0005jX-R7 for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:54:28 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAVu0-0006oE-VS for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:18 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 638Ftf0d2411845 for ; Wed, 8 Apr 2026 16:37:16 GMT Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dd61vcns4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:16 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2b242cbb97aso208505ad.1 for ; Wed, 08 Apr 2026 09:37:15 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:13 -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=PoABlAdVnZHWMtNITr1U53cW6Td ZYDkAOcLr3w7Qvn/xMD2Fj+bcnGyFD21Stfn1ITL0AMxIcShIP3XhPmPH9ehZz9M JyeS41fumo0yEb8DDexD8JKqD96ky1NUZN/yrVff2772YjVLq3ViU8A0ZarlgnfQ hq/g2d/4oK/96/u6X9+ouEPSBC3RvLSzwcOywgNBbR4b0qmbmT6FmRcSmAgUR2FW KdauSYjqUVvZHEXyJZ0LviiZW016XqVvSODJfLwXAR4FCviVjyG4Efz0fIGzadjO c+ykH7AvwXpQ8lCJOlNmm4p6cByK7Dzz9jUkQXOql0yOwze1uaVnLzSa4vA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666235; x=1776271035; 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=iZuZvHG3s56A039boitP7IZt5rKL5UhZ1r00HFNUTRhfNrq/0VWEafK8bg8CfrcqWe Hlja5/SJgp5mbxb1y8p/i3oEdCGsAJTe8U7CKH4iJAa79jghVPzPg87mF01vzzmMy4E8 NPqj1Ba/4uzoiiuJDBTm0gkhCmoaOhN9rcJ2GMcluh7v5x+6xYL/dDv6QNq1cfMX1xR9 hWwzVHaYHtRrw8KpDN177AKsBkQ3YMTba55UeyV3RhcivfmsUacNCa7noK0bcFUZz0uP yd5Lv6uN1Taesw64T9IJCLTCJfM3lUcczCIfow++FS3s52f/XsKN1kOghYlOXAYhWK93 +5iQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666235; x=1776271035; 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=WQ6ppki/1ACKVTGXiJalYnB9NXZ9K2RKCTSbDOMzGehADXkbkDn5BCS2/JI9Vz5ztS C1Xq95ZEsLqDVa5/6mFHYPEkj6UKSAcBzbRQQhYKjBnERTYmncsF/P4o3/jJF8A9eyv9 2zeuyBCCNr9ubiwQMwPLmlz6qER9PjkIN3sRbrbN9VTrLhbz5bKdqMvs4AlWzf4rL2Xd ly2pMkCA74agJ1UGQBKwqNOywHlng7/ejDc5bTlUbt0h8oFcdissl8dxXBIpF+5Ecj7w PMKwv0QQrs6K7LbxBA8oj7CBpzi+rOwNkdQMgNiybqA8NnIO4TGdE3mSPVv5TLSuesz4 zU1A== X-Gm-Message-State: AOJu0YwfupyZuY8iktqYq7ajUNWzP7+i7wtMOXkzdwp07wx8L33fgi/j elcF4xBK3xmK8t/9BY008o+EAgxuXY+/eb4x/oO3KPnWtFpSty+F/KowQwN636RFUaRDAUkqKCy t7qfLQDXWCT6HE5QrdqceAW+N7TGzGNNNowX54E0/QRJFVPeIUveAU8wkqcr364/P2YxO X-Gm-Gg: AeBDiesX7LQMWRBZsCEyk7TdQUps6zfTYicaxxwIaJ6Mv1P+gd8Mhl6r8AuVz9MZIco hb0iAWhQkj+DP5+M+OkVDc6IzIQLO6VUQr17t71y/zgfiyP+K1p0KI9Pv3+VfrbqARGNsTiVtAm M59WpdlaoGvI9z+XqwtmDSgpLcflmhg0U+6LQE1cBk26A41Y3F49KYPr2kbNN0O9Djv/O54LOIY iQN+O5JDkPJRdkbi4f4DPKiBplwaSNOMC5fgYT7MUQx6Pv6Ymf+m3AHEHoodBS0YHMaH5+qEdEN X/jgwf7d2i7T88RBco3BZBnVBYM3AwfmFayusHSd1cMBld3wHvF6Ri8okDUNCrzTJWlXYCJV/KA WrmH+Fo9k2YR+jDD9O+DOKSSwCJ2vsA/dfHgZYlWvCJaGD5jjS/r4FLzgn4MztzOV/AigN7EbdN /P0zWKCoxQ X-Received: by 2002:a05:7022:90e:b0:12b:ee8a:19ae with SMTP id a92af1059eb24-12bfb6eb332mr11164165c88.7.1775666234631; Wed, 08 Apr 2026 09:37:14 -0700 (PDT) X-Received: by 2002:a05:7022:90e:b0:12b:ee8a:19ae with SMTP id a92af1059eb24-12bfb6eb332mr11164142c88.7.1775666233937; Wed, 08 Apr 2026 09:37:13 -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 v3 05/16] hexagon: print info on "-d in_asm" for disabled IEEE FP instructions Date: Wed, 8 Apr 2026 09:36:56 -0700 Message-Id: <192fd1ca5cefcac271f5efb4cb0b5b15e671f833.1775665981.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-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfX9gI2eme8iyMc tKYvthUi4rqZwG1r4aO1eukja7ZUyyuH45Jc/VMhOTBUK+bMOnM9z1vnctg26m8iZ6z1OiSRnuT II/xzYGuNcvF3j4FcmGuUoCd0+gOl1LBKJzh1FmZKHhgfgvJzxbs7I5195aK0KPKZfqmWKISd70 GkJUvrS0DZmM2TzgYE8J0BH9v9+FJcCsCJZEGHz6DrZxYKLI7vOTg5KOKgv08etEsjhzsmPe3qV XHNue0E+e4NtBMyi5PsYCTOmh3OTtQ+4SfKWr1Yyt0yL2bEzr2u/Rg7yHQ3ODNSIyPptA134Uoj T1oPJmYRkJgJIAPQUBl5kPiiCQyPxCasADhO4GEqjsYatqZfXrzTks9MBHpIRFZsrcp0wuy7Ksq ChnGvqGSJNGqKn0JLa6KS0ztht3indfUMAEs/6DqiFuDv5QQQPvPVqgyzKxYXraWMmb4PBFzl1N Eq8ItT+STOihQW4tHmQ== X-Authority-Analysis: v=2.4 cv=FecHAp+6 c=1 sm=1 tr=0 ts=69d6843c cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=uwSgyZDXI7pCxt1u4dUA:9 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-ORIG-GUID: qPfrfWUy-aMQsBSpMunofxs5FIyka0Vp X-Proofpoint-GUID: qPfrfWUy-aMQsBSpMunofxs5FIyka0Vp 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-08_05,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775676827007154100 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 Reviewed-by: Taylor Simpson --- 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 Sat Apr 11 17:07:49 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=1775673900; cv=none; d=zohomail.com; s=zohoarc; b=eqJkEDyApgR8i3DnwkLFCHS7ojDjAiL2QeVaX2/nLQbyariCuboPry16l4O8dnBpWwbcd0tsDrvayPsXzEpFvyhC8UWSlJ+5DNVqIH1E9/coWeZ/ELXuOq5feiGU7Xp6uu+8Nn8MeGCMTcvUG3t+O8zTUDJuGP7rB6Us3UX+vJ8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775673900; 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=nfRX01pCsgZofrBRBBBLPS9sR+Q0K/b8Bi7xmrVe3Is=; b=Ra5M7MlxnkLRxNWjsNDfEF1tYgYF9oTBkK+gWC8EYkhLhni+d+xGjKtDQr+POx+ZnFao3wiUu1AW9ZclbKGUmbgHUAW7d4BvgUjkmRKgRbM1jrjyg+N2MdptzaPtMTYZ38ec8VmkD0t0oUvrEXYPdYZcVw4MwxZsaNFFsWAXmXE= 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 (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775673900334191.614268137517; Wed, 8 Apr 2026 11:45:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAXsS-0008Cb-J5; Wed, 08 Apr 2026 14:43:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAXsQ-0007ta-2W for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:43:46 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAVu2-0006ob-H0 for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:20 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 638GC20U1072630 for ; Wed, 8 Apr 2026 16:37:17 GMT Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddtb382bk-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:17 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-c76b6db8bb2so36147a12.3 for ; Wed, 08 Apr 2026 09:37:17 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:14 -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=nfRX01pCsgZ ofrBRBBBLPS9sR+Q0K/b8Bi7xmrVe3Is=; b=QDLKKoJO8pOOI19EzfPZFuQEBw3 DRRQm9IAEkPktZ2iPe3pFDlis/sIziiZ3lx/kpbFD1zUhTAdfLt7/JCquvURn2xh QD6s1/i9x6cD07nXsqzqOu6Mbw8X5/IlDUikZIlqrwS+uAFhz53hxHsEHlo5YpZ9 cIL4PVDrpv+7xN//tMY9j7zmRLytSDU0oDF61/dqS349Avec50gtzsYmU3SY56yd kBrOJ2byXTrjLZayPjjCPvTtvNL41OZJ3Fw/moVZ/Lz3mQa7MBTtMf9m5pZnZK3I L3Fz7pAFQROuUweewkv9pmUnnTLK/EBaCnfKNa4QcKPPlgl4QofsP80cFIQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666236; x=1776271036; 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=nfRX01pCsgZofrBRBBBLPS9sR+Q0K/b8Bi7xmrVe3Is=; b=G1i/4dbw9vR/9Uv0EDbhEEeq8ZQXbjzSG1sxHu+dVzUWnTFofy3QehkpkFhRA8MkDa 9A480ZhRvR278jZ4GlImimZj+c9kIFWq6+icmfEIODMbBVwY8v3alswJX6BsoOikbrH3 v4vwfBFIHepwVvuxpN7n/zmYXpCxIiVO5eCuYZvr494e+/+pxJaWg0OZHc+RjV+2YSj8 J4yooJU7GzJF9ucBbsNpUkof/m2OHHK+RoDul4plybvIP/tugLBfC1zXVWGoL4efQFHG 11kUzleUjXCOoaeyhB/M1idbpBVTy2t5ko9eET4xojBJpPD7o94L0P/Kdc20ucT+l5ad tQEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666236; x=1776271036; 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=nfRX01pCsgZofrBRBBBLPS9sR+Q0K/b8Bi7xmrVe3Is=; b=UfsAF82KOfjJEKIezngvZW6MP1tYAKT/WM2fiD433tIeKlUFWeaI+3RfHp+YDHWOea jMFrgqR+GhuFaWLKDRkzdvA/J6cs0CSDUet2Ve20c/jJXekGMWb3OVcYFMMrcDPk8yp/ Rml6SN7V8dtgCd1WmtvnLLP8Bs2Jrx2yOj0FKcIx9B0nblLrCHP/AGCDkzmfG2VjnjBu PgRvMEUPb/8MELKuM8IeDFs2PIhB9toUg+LH3I2ecNBKx1Ev9rZEYCIHB80tjKBU5PVf NKpZQZur4L1lCgnz/O40ehILniFOeo1fvmgDvIzVOWJ0MVIvzBtkLGXLaU5j/N+uptye ZzKg== X-Gm-Message-State: AOJu0YxLyfA2fQETdJF/2kTHmlyixc8UWcboqBseLCPA6pQ2ncyV6lKu DgeD+/VeQSziTXda9D0J/nyC2+5tJn2vbzz6ftUZptjXG+YDfIzP3fQKGio5LAfvPHlfP5g14aS zwHVrx2E+NWIZFBH1JSynG0w/YLsaajBBIMfpToGlGUP9G25BZThV8cTCfmKsxE6r491H X-Gm-Gg: AeBDietxxz+mAfQo8wiTg8chGfVWibeLk8OBGyFp4sGA4uyq+FW9JMsTMmr5X6mnmS/ O1m5VFgUYj9dQ5pNLjaD/BZBJHgPNTJo7psRHs3UMtFgEnAWqzGmHz7WfMzseRD3v6MfCQCB/5I EkKuPEFIzCGxVsOG4DHQMeOWUgt9d9RRdf2hzms4avXgdMfEeMA5Tp2u7PSBEmipSUhYFuymO60 fmjtLF14QAY6GwZ+RcSvTO9GbELX8MvHuNRtJrl/gAgJEmzGoksDP/M48hp/JWbXfUz5zDpRZvG N1nJ5cMuV2TfJNmjv0NpP3i3GFKlBlfYhaVw29CLa0duZVTrLNVPMwIVYKBu539iwoVi3eJNmff eM+42xKhbWH0et62gar9rM9oVKLx8nSedXhT0VlVynTyWvZKXhkzgYaXk/6lcJsEY9Q6k3a4bAC dJi2FfZSGl X-Received: by 2002:a05:7022:10d:b0:12a:7181:2f1c with SMTP id a92af1059eb24-12bfb7452bcmr11882512c88.17.1775666235726; Wed, 08 Apr 2026 09:37:15 -0700 (PDT) X-Received: by 2002:a05:7022:10d:b0:12a:7181:2f1c with SMTP id a92af1059eb24-12bfb7452bcmr11882482c88.17.1775666235044; Wed, 08 Apr 2026 09:37:15 -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 v3 06/16] target/hexagon: add v68 HVX IEEE float arithmetic insns Date: Wed, 8 Apr 2026 09:36:57 -0700 Message-Id: <42b4b2d1c61637d9fd951f05371fad452d9af77e.1775665981.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-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfXw/I+t6CGDT8U iOJOXBJKDa9zQLVyelGOqHuSMQnilbwUz2kXpCYlc/fGj+DA85nxmIUwO2JGARpU+gceRlnz9Ck a7TKBY2HDkrrYokB5WSYDWXWi0eT1Zgh9Ay2wrNS3XapSbxtW5fVRLeTD9K9ajbmQ4CWF599lf/ RVtDa8L4wxeFzZtAwk9dN3fLvoISZGs7sDkUTZS4tuyggQzX48GSko/o4dWhreiPAKyfj2bUPaW HxRxy8yn/RQDjQI1CcjGdYW23TJBTajtmCKJ5NjOZl27WTj8moc/UjDKlF8/8k3FGjwGexvGndU vbKWuf5au4UpV7dr6W9yXmmHb/iWrNa+m/PxW52CIV95jyJFfBPm7YTS0NXpkOGs/xWbuncM+il hVDTsxFqrJLG8xa0ipyL6jRrb4hHGHmk3cp3NlY5ejPVnTrxaoXV1OCLQUNXV3jl9jjeKqDHblB kshbHUhtDSdc9WhG5cg== X-Authority-Analysis: v=2.4 cv=eKIjSnp1 c=1 sm=1 tr=0 ts=69d6843d cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=4NIkZbyvPJlZ22FWuuMA:9 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-GUID: HLGYYXeIKSfPL1foGRcZUoaI8dwNHoWE X-Proofpoint-ORIG-GUID: HLGYYXeIKSfPL1foGRcZUoaI8dwNHoWE 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-08_05,2026-04-08_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 clxscore=1015 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775673901966154100 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 Reviewed-by: Taylor Simpson --- target/hexagon/cpu.h | 1 + target/hexagon/mmvec/hvx_ieee_fp.h | 18 ++++ 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 | 21 ++++ target/hexagon/hex_common.py | 1 + target/hexagon/imported/mmvec/encode_ext.def | 18 ++++ target/hexagon/imported/mmvec/ext.idef | 101 +++++++++++++++++++ target/hexagon/meson.build | 1 + 12 files changed, 179 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..75008deb3b --- /dev/null +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -0,0 +1,18 @@ +/* + * 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" + +#define f16_to_f32(A) float16_to_float32((A), true, &env->hvx_fp_status) + +float32 fp_mult_sf_hf(float16 a1, float16 a2, float_status *fp_status); +float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, float16 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..31909303b5 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]; + float32 sf[MAX_VEC_SIZE_BYTES / 4]; + float16 hf[MAX_VEC_SIZE_BYTES / 2]; } 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..3367226998 --- /dev/null +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -0,0 +1,21 @@ +/* + * 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" + +float32 fp_mult_sf_hf(float16 a1, float16 a2, float_status *fp_status) +{ + return float32_mul(float16_to_float32(a1, true, fp_status), + float16_to_float32(a2, true, fp_status), fp_status); +} + +float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, float16 a4, + float_status *fp_status) +{ + return float32_add(fp_mult_sf_hf(a1, a3, fp_status), + fp_mult_sf_hf(a2, a4, fp_status), 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..14df8e4790 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -2895,9 +2895,110 @@ 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 float32_mul(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 float16_mul(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 float32_muladd(f16_to_f32(VuV.hf[2*i]), + f16_to_f32(VvV.hf[2*i]), + VxxV.v[0].sf[i], 0, &env->hvx_fp_stat= us); + VxxV.v[1].sf[i] =3D float32_muladd(f16_to_f32(VuV.hf[2*i+1]), + f16_to_f32(VvV.hf[2*i+1]), + VxxV.v[1].sf[i], 0, &env->hvx_fp_stat= us)) +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 float16_muladd(VuV.hf[i], VvV.hf[i], VxV.hf[i], 0, &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 float32_add(fp_vdmpy(VuV.hf[2*i+1], VuV.hf[2*i], + VvV.hf[2*i+1], VvV.hf[2*i], + &env->hvx_fp_status), + VxV.sf[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 float32_add(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 float32_sub(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 float16_add(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 float16_sub(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 float32_add(f16_to_f32(VuV.hf[2*i]), + f16_to_f32(VvV.hf[2*i]), &env->hvx_fp_st= atus); + VddV.v[1].sf[i] =3D float32_add(f16_to_f32(VuV.hf[2*i+1]), + f16_to_f32(VvV.hf[2*i+1]), &env->hvx_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 float32_sub(f16_to_f32(VuV.hf[2*i]), + f16_to_f32(VvV.hf[2*i]), &env->hvx_fp_st= atus); + VddV.v[1].sf[i] =3D float32_sub(f16_to_f32(VuV.hf[2*i+1]), + f16_to_f32(VvV.hf[2*i+1]), &env->hvx_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 Sat Apr 11 17:07:49 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=1775673754; cv=none; d=zohomail.com; s=zohoarc; b=hEktdecCgpTzsmYJVD1pDDyaWycAfLQH9qMX7Z5nNR38zkB3secDHQtjsdAGUGlfH8UBnll2eK7l3iYYCJsjc/PdUzRz2JizfxVp3qB+ImVkkIBrAjTjmaiJBc03lnJVgkFbqnnIlPv6j93kGkLMwevV2lDPm30VWlw4lUDqREo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775673754; 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=nkTOqU3p++3FTV67E006ISdH7bkUa1lMdBoloXYrJgo=; b=fuVeT0nxn4ITIVVOCg9+it3dZ2ocooEt7cBRGH/B/rSaFGog/FOk5BA/fHgplU+Nt53JwwLzzQSN79eE4dCkstNObYPX8/E1qpCL1xKrNdn3n7AttPLwdxKFHndBW2gEHLdGLsbEQ/J0aiUlbRZz/le/XhfwgvwmqIbfywI75tU= 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 (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775673754559768.9319691114684; Wed, 8 Apr 2026 11:42:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAXqC-0002P4-JM; Wed, 08 Apr 2026 14:41:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAXq5-0001xa-3Y for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:41:22 -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 1wAVu4-0006ow-4C for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:21 -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 638B8clB1314539 for ; Wed, 8 Apr 2026 16:37:18 GMT Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dd8d6m406-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:18 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-c7422397574so140250a12.0 for ; Wed, 08 Apr 2026 09:37:18 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:15 -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=nkTOqU3p++3 FTV67E006ISdH7bkUa1lMdBoloXYrJgo=; b=BibofhdzQ1M6yug20Qg1uEx3C84 VridvlkpoNYvXMUDbLL3g08nBfvs3vGZY1zoNTpF3B+7p5WV7eVDAN/QeFahK6vo wzr7rCrIKuBcyZYfI5sajSQlRtGCdp95cB8BT+oap8Aiz/+uiv3EjQF0W/lhh8kV BcTFsKEF1NJnA8BUHgP/WOpbdS9T7kA7n3VIiwtOGo0XVK9/kCAY0FuQivUPXSUn rzD134SPmgCZnj1l15DGVCRfIRtwb03gU4L1ecyZqioetmsUCqaSU5/yxo8rdyl9 BZvhUUoxVC+htslS5N9juDT4GEEqBE+O6fK3uh9+P8Osdr9jJR9f3wvC3wQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666237; x=1776271037; 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=nkTOqU3p++3FTV67E006ISdH7bkUa1lMdBoloXYrJgo=; b=T/sS6rciYDFIEaB/Ctx8eoRLUAe95d5qHIbFbVkUyr8EmgpE4jR2erxygjfIvgfZtJ 2KgbA0pYI8fE+NmvtAc1QribvDvEMPM7GDOU3UU5H6qveOHCZJhVZX9uWOvxPNsIRQIn vhIwVAWhV2nHlY+KZ8C3a+DmsDZm06nrGSsk9lV91NB9FPp/JvbuviUZ2bVSDExG8iD7 yvBM/HOL80m2uh7zRTgl557roOCqAxOjWMsRhaHCgfiOQQ2E+ldBNLK+HfoQXmM68d2Y ak/g4rWl+15i5SBuFq8YkXDTtS5kKYOVudGQzenoJMQ1M7Mjwr/b4ghBC1Japs1lYXLC 0Rdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666237; x=1776271037; 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=nkTOqU3p++3FTV67E006ISdH7bkUa1lMdBoloXYrJgo=; b=Hu8VuDPUd+YPMMqIP8+/6lbxfjZF2bnV2Nfna2opEA/X9uzhGRirhloBk3S/Zp1fmX arOrHa3dE3os3PrMf8gzaO8OEXvtM9oByM+jR+DlwOXHaAc8d/ywCdd2ELBJrm45F3l9 p9pdr1crp+EaMThnX3tOK7hohNxUAC6bDM1X02oGt7EEo93hgUN6OpFLT9/NXRDWFT+Z ch+VBl7OBPuQaVdHx+ZVBL+/Xjrir+PiF8CwW9lj5S6LNXkryHv3d6pC9mZ7gNDfrVoz 4c22VGaSWAtuhDacBgK6qHESEXgkK5GGewc2ZRyPzPnyATMqVq50TKvIyOSyqeh1xkKn FjWw== X-Gm-Message-State: AOJu0YzZT3zX89GynheNd7wFh97YWVqXVocdbjaqCoW5aLcXAVlyqpxP k75nKFnmTb/slUays+lhINFU72uaP0A05eg8JGPo64jiO770ZJ1Y6Cx7CvaD8rwcel4hkJ2zx0U GEU96+4hpdACl6DP6tQ9I5u1Dpjx77e3lKyWoJz3VPlgrOQHRDdYvvb1SkT9/+yA/J2eB X-Gm-Gg: AeBDievmET5NEbgJyu+jgEPJlzYpCGBsKinLdiF5OsfKboHG/fEJwRC8h8XHUZhHn1U dT6ATAURnTd/737Tkwj5w8ZMaePXc2pVrHSSAFe7ul7qgQmaCrhhvDg/ZaKiSb0XOIf0aGlu6ze y8lkXmdtCR/LSWdvcDfsDPpVnORKOqdL/+t5Nq51v8FizIEZ5wve2Ap7QIP+d2bKdwUyLRb/3SN 0qPbqNMww8Gg2r1lI6kN/5rNQc/xxwpM2UxvqjKr/+Va9B3PXZBnwY5J6SzSdBco4ebzD0kLqOD 4l/We90qguMKeHUtNYBCUZxWnWVjoObLzLNyI7dSwh9F5/BZyloRr4Dvc84q7zRgPom3W5tn9sJ beyFBnKbizqYchVUSdVxqUQyOtodBhQH7gYJCvDZ+RD7eSP2TbP6jczuVMqnO3Q3/EB498KaX61 6Kp+GfK065 X-Received: by 2002:a05:7022:f96:b0:119:e569:f609 with SMTP id a92af1059eb24-12c28bd4cfbmr79073c88.2.1775666236627; Wed, 08 Apr 2026 09:37:16 -0700 (PDT) X-Received: by 2002:a05:7022:f96:b0:119:e569:f609 with SMTP id a92af1059eb24-12c28bd4cfbmr79055c88.2.1775666235879; Wed, 08 Apr 2026 09:37:15 -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 v3 07/16] target/hexagon: add v68 HVX IEEE float min/max insns Date: Wed, 8 Apr 2026 09:36:58 -0700 Message-Id: <01040724683b0329a732666a2b839afade5d72e1.1775665981.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: P7vjWjcw8JsGLd1sHrniAJNlKVY42HRm X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfX5LfbLbO9fHgp asJHGARC3IGBaL9OncCGgbl2bZnaJWmV/5x9pI5TxfRAzrVuS4VBOF3WRLMv15IzNcDCb30d6Wf SWQExDG4DLH2A+gWeWtCwIvLlKbhkoZWxf2RP5ODobPytayrlyxU7/ijrO4DPBtzRX4gXyrtFn8 K/DVKBsQaP25PMwT3fj25thG6SUpiKxhC22NM0ncO9G47lbQTwMab0CQsvbg2OAZasW6FatY7rc nI0JYvssPAI5q49O6Y7+rxbH63N8DDQrMw6NCo3MP6Ig4l2Bqiote0Su3q4C8mEw6uD9U95kKDr 1Gf0uSJJeg1amxyQovpewnq62InXmwbXOMelXNw/f5WFl2wKHCrTgojdnd8O7dYccP9W0mItYXL GShS0PBekSqOytd/kbtjjdBzVnQpj57gvRKnOclzw7UlYAwQQKomfChuAoSWxPrt93bm0bSH0Xr Echr0ugs+dWaiXt5Rvg== X-Authority-Analysis: v=2.4 cv=GN041ONK c=1 sm=1 tr=0 ts=69d6843e cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==: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=jrXzG3Pa4KLJnUkuMhcA:9 a=3WC7DwWrALyhR5TkjVHa:22 X-Proofpoint-GUID: P7vjWjcw8JsGLd1sHrniAJNlKVY42HRm 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-08_05,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 suspectscore=0 clxscore=1015 spamscore=0 adultscore=0 bulkscore=0 impostorscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 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: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775673755798154100 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 Reviewed-by: Taylor Simpson --- target/hexagon/mmvec/hvx_ieee_fp.h | 6 +++ target/hexagon/attribs_def.h.inc | 2 + target/hexagon/mmvec/hvx_ieee_fp.c | 49 ++++++++++++++++++++ target/hexagon/hex_common.py | 1 + target/hexagon/imported/mmvec/encode_ext.def | 10 ++++ target/hexagon/imported/mmvec/ext.idef | 36 +++++++++++++- 6 files changed, 103 insertions(+), 1 deletion(-) diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h index 75008deb3b..ed8e4f2da9 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.h +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -15,4 +15,10 @@ float32 fp_mult_sf_hf(float16 a1, float16 a2, float_stat= us *fp_status); float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, float16 a4, float_status *fp_status); =20 +/* 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/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 3367226998..868c0c5b18 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.c +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -19,3 +19,52 @@ float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, flo= at16 a4, return float32_add(fp_mult_sf_hf(a1, a3, fp_status), fp_mult_sf_hf(a2, a4, fp_status), 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)) + +float32 qf_max_sf(float32 a1, float32 a2, float_status *fp_status) +{ + if (float32_is_pos_nan(a1) || float32_is_neg_nan(a2)) { + return a1; + } + if (float32_is_pos_nan(a2) || float32_is_neg_nan(a1)) { + return a2; + } + return float32_max(a1, a2, fp_status); +} + +float32 qf_min_sf(float32 a1, float32 a2, float_status *fp_status) +{ + if (float32_is_pos_nan(a1) || float32_is_neg_nan(a2)) { + return a2; + } + if (float32_is_pos_nan(a2) || float32_is_neg_nan(a1)) { + return a1; + } + return float32_min(a1, a2, fp_status); +} + +float16 qf_max_hf(float16 a1, float16 a2, float_status *fp_status) +{ + if (float16_is_pos_nan(a1) || float16_is_neg_nan(a2)) { + return a1; + } + if (float16_is_pos_nan(a2) || float16_is_neg_nan(a1)) { + return a2; + } + return float16_max(a1, a2, fp_status); +} + +float16 qf_min_hf(float16 a1, float16 a2, float_status *fp_status) +{ + if (float16_is_pos_nan(a1) || float16_is_neg_nan(a2)) { + return a2; + } + if (float16_is_pos_nan(a2) || float16_is_neg_nan(a1)) { + return a1; + } + return float16_min(a1, a2, fp_status); +} 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 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 14df8e4790..0e9cace203 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) @@ -3000,6 +3002,38 @@ ITERATOR_INSN_IEEE_FP_DOUBLE_32(32, vsub_sf_hf, VddV.v[1].sf[i] =3D float32_sub(f16_to_f32(VuV.hf[2*i+1]), f16_to_f32(VvV.hf[2*i+1]), &env->hvx_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 float16_min(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 float32_min(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 float16_max(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 float32_max(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 Sat Apr 11 17:07:49 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=1775673858; cv=none; d=zohomail.com; s=zohoarc; b=AmoHM5UvVLOrJAItwhtAalquB1uaE2ppbZx5Q4oTu2S41uHbMpxcDxHsxbqDkYe/QVj8s24v8W4TSzbyGJdzIVXwIvJajVh0A9atQ8CSCM6s7iLBY5BIXbV9cg3BPnf8diIfAqvr7BtmQlUO5X75jwWETiLg2LQMq3LnAtYwJlI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775673858; 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=D8XB9U6uJxWK1qSpayLLf8XN+ydkf0YDu+EikZ8lS78=; b=WUDkQiLjselXqELkQ2dutqF3AyuLXpoF3FF67J9hjFoIDu6rZSAnxyCZdm9LDhBoYJgj5BOYckQlmH51fFV3m8uXGPS64Lv9tFZnLTlh1nPMboLUrmPYurcUWLWhdWQglw1eU4UJNPCeKsmoDq5gbJ6msPOnH7E743/L58SuBXs= 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 (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775673858472221.65078523014483; Wed, 8 Apr 2026 11:44:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAXqP-0003lk-RE; Wed, 08 Apr 2026 14:41:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAXqM-0003R4-O7 for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:41:38 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAVu4-0006p2-DN for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:21 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 638GD8TM674162 for ; Wed, 8 Apr 2026 16:37:19 GMT Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddtbmr2h5-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:19 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-c709551ec08so115515a12.3 for ; Wed, 08 Apr 2026 09:37:19 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:16 -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=D8XB9U6uJxW K1qSpayLLf8XN+ydkf0YDu+EikZ8lS78=; b=C+IX71Cs4R9IhiO/IcZXmPPq68o pe4k1Ql5fwozoenW3dg3AZONideh9V52PfBfcayN1S3WO9/RqV88dkS8/TtGL6QW 1pQrZ3oUHzKBELLy5XZZqvBmJAx+BrEbSvVfePsNQOtXvd0CRbbA26I0GAtaAd2R HU1ZycbcB1aUNNc5NSzvw9Vxo4RkFsbHMqbhCTLuTiCj5VpJEZamGn+Rt67G3jAt e5S+eBmm/fWomIJDlY8iiz2NKy3QqGdxmZTOoakJYdhpdpC955jtQ1JpdO4BIkmI okdi6fWlpzDdoStOmQQbrCKi4GbRiGk4Vz4Tf1RsgIkZKe3k3szeFyHt4Ww== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666238; x=1776271038; 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=D8XB9U6uJxWK1qSpayLLf8XN+ydkf0YDu+EikZ8lS78=; b=TRDwW3WH4mo5W2SCZoZ/IYjL6qhMRAohBQEwxPIZUdmPGVM337VJ+M3J1Lc0ITmvcZ PFOs0z1N7HpDD0ipOenyyQG66tJaQKe/Ipixh3aCfRcb99LzcGjdgWLJwuWkU3Cl5l+H qRAJWRTtNB9Oc3oujgdafjdwnlvR8FvGhoDXWG+aSJpKc6QjRWMwTCwN9WIEtoSDaF53 cCAVIKwadmXZ7ZwYNfbBsdiUCNClcUET3dwwNgsJloxXnOd66LLLYw1gtbT36QiyTBXj mvwBFX0XWoWxsCRFFkh1c0iKk+goOEe88YpU9435EwlB6YJtio+S1GV6VsaDqjOJuMP7 PswQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666238; x=1776271038; 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=D8XB9U6uJxWK1qSpayLLf8XN+ydkf0YDu+EikZ8lS78=; b=RRPP2aM8xtNpXxUElSLbD2sC/ZNO5QlHCDWSahPJdIVklDSuNdd5uGAYXyz1VOvf49 8Jv7yR6/UyQEb2PTRrYC3GrbH+CT0l56L9MfOoHgKZ1prQXu8OBu/JRYlZQO/wr+P+/U j5OQrr3HmtCpRbQ0jX7mtFW0xG8gjPPSjFD1x/4J46fFXlBLaQnywy88uUJrMK5u2Y44 caAc94wqIYK4yql+ZVZrLQ2W3n+YinMMBCrL8c9XvUF1tS7QhHkmUk+K/7jiJ0O+AgtC WTAzKg1FnB1+ZBO44ZLVyQ66kBiP14+SyRUJSlY2rzH6a+UyXZSeOg+LXvsSo3S+sE5W Ruwg== X-Gm-Message-State: AOJu0YxaJO0zcGzFsU617dgtdibZocxK7LnC3wrPJ8B2eQOs8xGOclW2 aZCIiGRXbuhtWAtYlgNDh78BWu+uQGuTcHlfRJpbRS/DlU9BgfHiN1ybu/E9apDF5GVnteiOQc0 E2SVNLDoudbP//4a/wW2jK9+nhRtO+GVx0o+0CbKG1YXJS3N2WHoBtbDYpt/+c1ElNmOC X-Gm-Gg: AeBDietBRtrOIK6obgIjCpH0ZNn1JyuUyoKBs5hEz+z+5Lvc/8/To1OiehoY2Ydhh89 ZZ9Hw1aP4m3eiTSpTb9P9g0cv0vH3offVC0FiM9O+DuAHZg/Sey6igLfoUPJudfLrKjI0XGPypT BsWhZZj0F+7ZJp/siihFFmHUqAQHbC5brhvsclO3G6Z0qTKe98SSsyAL+DjcjPaRsO/ivRDF4wo NhwP+ZuWBKtWpioSvBoFkbS37ubU1IUX5yQW/QSiWWRLbFCZwqc8w3fkncyGEWryXg7NGkLRam3 mVmg7qKUsJEGj7Hv+vTr7N1xZrb9ASaa8eACcFzezu1hu3baiAyGyUiwP/F2tZXs82E9U8JioLx cZufNDDyiiOyQ+rGeK158fbJAjWQhdihVrYlDjLaaLj05QiBrx1jggrta4Qu7I39jZA7aKVRbKB LnK4d1fiOe X-Received: by 2002:a05:7022:6997:b0:128:d362:31e8 with SMTP id a92af1059eb24-12bfb74518amr11549439c88.20.1775666237881; Wed, 08 Apr 2026 09:37:17 -0700 (PDT) X-Received: by 2002:a05:7022:6997:b0:128:d362:31e8 with SMTP id a92af1059eb24-12bfb74518amr11549413c88.20.1775666237325; Wed, 08 Apr 2026 09:37:17 -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 v3 08/16] target/hexagon: add v68 HVX IEEE float misc insns Date: Wed, 8 Apr 2026 09:36:59 -0700 Message-Id: <2aa7f105031465bdbd63c22bca6e2b77b92bab5f.1775665981.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: dae6gfnzzDxSrSrbxgCZiA5OI61ZZ_bm X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfX7Mb1IOquiQXN 9e23zbIj8MTV1FCmFRkYRQJqqb3lnYtsNjxXokNaWFRJecF2bklSW7Ff3X8g1ruhZW5DqvLJ8ff fz+Jv47t2ZNj1o7kfD+Sh7wGlQ/uI/go7NXkp/xIP+To8AMSV0UHchYzhweL6nXU/txgxlIliSB hdggSckQrqlJyJTUcJO9aUEIT+XBIDQeoTrT+El1IdzH46s9KJs8sxXWnpExIh/jM8aO8F1OM2D NByv4/qf2b9pLEcVTB/wzgGdEb4KGxdvOHd/DX4lknb4VbV2Uu0+ACxne2vC4d5qVObVWHEbuMh W7OZJTE1l6WkaG/euqv2drbx/haUXb09zTa+wLwTbCZFhop5wAUSiaNP0LAmq4Wpg3LZXORDcqQ UWws1uz5lj8aHqFkVlY6yfUQ/5En+gw0rct5kwvWk6bveOLXkh7DflN7dQXgCtHdLxkyoqjbhd3 v9zYuS36rHI6OX769Mg== X-Authority-Analysis: v=2.4 cv=YM2vDxGx c=1 sm=1 tr=0 ts=69d6843f cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=XuGYLkldsImkkdaR63EA:9 a=3WC7DwWrALyhR5TkjVHa:22 X-Proofpoint-ORIG-GUID: dae6gfnzzDxSrSrbxgCZiA5OI61ZZ_bm 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-08_05,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 adultscore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775673858597158500 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 Reviewed-by: Taylor Simpson --- 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 0e9cace203..5312661684 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -3034,6 +3034,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 Sat Apr 11 17:07:49 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=1775675538; cv=none; d=zohomail.com; s=zohoarc; b=aGVbXkvSJTwR0W5ywLhBsLZg6vahB1i7+FtE1XFMv7fGlpRmVnYYNqXC86QtKiBP6Lp06GqIddIqUhC2pr+FkB5K6/mh/E7RDUQHak1nia7/AwiiSU4eJy+TJUM8tVXoCZ9f3fP/TaoP8zDSsvj6CBtvk6Hg1DwUVkrkpavnLWE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775675538; 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=nEO8O8LtTfeUWyUqF9mWHYGzxkUsvQem17/x0W1FDNM=; b=RAWFthSODfq8egTJ9X+nPpdtdypw3OqE5joM0CyEgNHLG6ktztvTlWk9FdwkATRkM4uKM2nnKBA0FFFoMjFzAUzJ2g6exWjpJstyRHOJXewj2d5CTsenPyNAnRzmAd0fwxX5Xn3KAl4jl07BEamneuVWuB0ccrUIwhGGR3AfmW4= 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 (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775675538005151.55361215270602; Wed, 8 Apr 2026 12:12:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAYGo-0004Vn-SB; Wed, 08 Apr 2026 15:08:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAYFW-0003Io-KF for qemu-devel@nongnu.org; Wed, 08 Apr 2026 15:07:40 -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 1wAVu5-0006pD-Lx for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:23 -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 638EKI8x575843 for ; Wed, 8 Apr 2026 16:37:20 GMT Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddrph8hqg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:20 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-c7422397574so140267a12.0 for ; Wed, 08 Apr 2026 09:37:19 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:17 -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=nEO8O8LtTfe UWyUqF9mWHYGzxkUsvQem17/x0W1FDNM=; b=I1Naz9yrvKkjeX6xwfA6TLXJbf/ 8Tg38HgrskGeWnG/94mPB/Ihni1384DkfkKKKq1kcfd46t+YFzgZFDC6KanBOb9Q MMrVUBrPKHv+DKrho82HYcATqQiin9O3pNXqfW8XGIXWtRSz7KFc6PYn8Bz1Gwhm G2UB+E1iifH65OrjC/MJZfFHwvXLLty1a3quBrFMBYAuQ7YQCGvRzln8HztDqoI1 I9FZ+tNHJLw7fLCEPk/U59Dsuu/SeeMW8TPjMk8tAjsow5pJKpkbIlo8K3LNpnME /wireeBywr2oHQ/4U98tTTCdz6YT6CqRaIeC8ERSVxUfv0c0IwcvOmwlZHg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666239; x=1776271039; 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=nEO8O8LtTfeUWyUqF9mWHYGzxkUsvQem17/x0W1FDNM=; b=LvgLCXf984ACbSQBkAVRw23tDQZP0V2LDueQjNjut7/yrWvgzaugkXgGI/SL+a9GiT fxogS9/ICYGnIabUROv4qOJQqz/FCs+BcAAA8d4u/0GTH9rs4j42mW67dKqOddGpDmWo Q/+3vVyREDqf4VMG2JCOPGFbVGyPS16ayXG8KRkNTEiA5bUa9LaLFvX2EFxuI1a40aVX rw7w/G69yCcVqTjmxyAy0wszThxnJIsaEs2gAeY/mgwTvw1eh0R8SaRPg5ICzBXUMPkt UcTJ7b0eQnLCbKQsNoL2l3eL7Eu/Ww6SRmyLEfkH7FC9RTIo/IDREvKPoUQgSPJlOjAt FVBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666239; x=1776271039; 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=nEO8O8LtTfeUWyUqF9mWHYGzxkUsvQem17/x0W1FDNM=; b=BT2NzZHFPLj/PUN3iIIB/eZJGRO2g/Uiwf4k/deWsW2gk+LajGhzETZ3CvP7A30eMZ SuT3hh5tkR8tkUeWH8NnPbMF+S1PsrlvQzVl9EomnlWMsptI6frniQXibVzp39XIzVIu BpzgMnrppGNaxZZd8E7qdfSrb5wmy5wMz5KtbCmc5zeKdSsLKBoMe/vAmHwviZuVVSjp A4WY/17wYnFMA/UgHMZR5nbP2Zrw+RA7n59xylKfmPN1rqhgekt0guNQEByqgxdcU/tB ffTi0BVdUziw2Pl2rBNTXUEfCsKseCzgvQa0c0WeauetNKSLYo/7HZqt1ctakmZV1sxi c52w== X-Gm-Message-State: AOJu0Yz8la0PO74FlxSjvSZM9ZQDHNPagHA5Xu3MuyzrMG5HnI2AwSDo 8DTj4q4GahXo0L/UoVurTnTn535zbASPY04/MEl10Am/XhpOWaMp4CvBtWC2L7r1G4gNJWsgPfb RNtWC9rlHowJdRS+isy73Ec4vHwjOmEuBf2zl4zgTHY+RgHo13atJpjGxcv/v+raEb1WC X-Gm-Gg: AeBDietw2c1PH7MIBLjFykuWojb4n0/ij9NFmIQQxYQ3jLuL8Qd9bXWyBj/Y/RQDyP5 3IiuX7P/7ki+rIurQJimKvxkoHwP49Ekvk+/UQEfIzB3alm7KZjqTD1rnM+WfUAe927yh67VXMW gFhOGOrhJPbzp0aceOBUgUUFJA95AulCRkVCZXMhwM4aVYCDClBw5HKqsDreX4AhLZkBL8WV4hF yQQOeXLKoh92niUjeLh76bVp119FTL1hW0WmVa67hab2FBLF28IRcQ6mNWhyZrF6sqBBHe0jJQx 8kb8kx350Ka1PY5tblfgQ2rISIl5blpx6HxWEODz6518g2zyzX8BGt9AwnQst9827nUb655h456 3v++GJBw3nZIVyb7VZBhpimc2KxS52sW/pAQ7XUZT2NEw0k6kV2sm6sY4gmlwA0MtbgZ9Ez2itt fqelMbV0QV X-Received: by 2002:a05:7022:2520:b0:12a:6ab7:3f71 with SMTP id a92af1059eb24-12c28bd4e16mr71220c88.7.1775666239035; Wed, 08 Apr 2026 09:37:19 -0700 (PDT) X-Received: by 2002:a05:7022:2520:b0:12a:6ab7:3f71 with SMTP id a92af1059eb24-12c28bd4e16mr71198c88.7.1775666238299; Wed, 08 Apr 2026 09:37:18 -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 v3 09/16] target/hexagon: add v68 HVX IEEE float conversion insns Date: Wed, 8 Apr 2026 09:37:00 -0700 Message-Id: <99bac24648fdd5c5903e057eb4c9208d851070a4.1775665981.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: Rq4QgTynvK0m9l8IsgUw9P-SxKeqz6BY X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfXwj8lSpgjWXM/ Xu8BaIjntjUm4vvdkGymDEk/tSBLk5reKIYkNSya4D+/pb7A+VyIBBpEdLjszNPc5Jx6VbTuIIt vS+Yi8fHjzQWAmt4scynH1vHFqK1Q++bwzbv/x4xJLOnKKKQdLKx760bGkcttW1rGGLoUT1oW1Q 6WA2FN+EMmxLOVtKu7WybBPH/h6RYHC1luJMltqZgVDHBps93bOR3wXn8qPPyZ0PwsjQMta/OYf jXt3H330u5jax69wAP+MgXLgVTURZNHp235O3YTmY8l7yA/B2zBjFfmQONpLdB/MDtcwy7SR4op wMqIPOJL538z5qdtaaIiT02POOBLaASD+K2JR9eHAiQVYNyUsFhJPHG2AxOLQMyWPiL+tlAj6FO BAzaLELX45asEpNAziXRH+RBVc4/07ju/uXwHuAxgPLEocoE/hgKMCoG/B1Ap2rytV2QHnQrECm na5P6qbE1AYviFkyfzw== X-Authority-Analysis: v=2.4 cv=PMA/P/qC c=1 sm=1 tr=0 ts=69d68440 cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=2JvGeOnW2cDEA-NDw-QA:9 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-ORIG-GUID: Rq4QgTynvK0m9l8IsgUw9P-SxKeqz6BY 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-08_05,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 priorityscore=1501 phishscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 impostorscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 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: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775675538785154100 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 Reviewed-by: Taylor Simpson --- target/hexagon/mmvec/hvx_ieee_fp.h | 4 + target/hexagon/mmvec/hvx_ieee_fp.c | 18 ++++ target/hexagon/imported/mmvec/encode_ext.def | 18 ++++ target/hexagon/imported/mmvec/ext.idef | 97 ++++++++++++++++++++ 4 files changed, 137 insertions(+) diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h index ed8e4f2da9..d55837b756 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.h +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -10,6 +10,7 @@ #include "fpu/softfloat.h" =20 #define f16_to_f32(A) float16_to_float32((A), true, &env->hvx_fp_status) +#define f32_to_f16(A) float32_to_float16((A), true, &env->hvx_fp_status) =20 float32 fp_mult_sf_hf(float16 a1, float16 a2, float_status *fp_status); float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, float16 a4, @@ -21,4 +22,7 @@ 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); =20 +int32_t conv_w_sf(float32 a, float_status *fp_status); +int16_t conv_h_hf(float16 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 868c0c5b18..0d9ff8bd5f 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.c +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -68,3 +68,21 @@ float16 qf_min_hf(float16 a1, float16 a2, float_status *= fp_status) } return float16_min(a1, a2, fp_status); } + +int32_t conv_w_sf(float32 a, float_status *fp_status) +{ + /* float32_to_int32 converts any NaN to MAX, hexagon looks at the sign= . */ + if (float32_is_any_nan(a)) { + return float32_is_neg(a) ? INT32_MIN : INT32_MAX; + } + return float32_to_int32_round_to_zero(a, fp_status); +} + +int16_t conv_h_hf(float16 a, float_status *fp_status) +{ + /* float16_to_int16 converts any NaN to MAX, hexagon looks at the sign= . */ + if (float16_is_any_nan(a)) { + return float16_is_neg(a) ? INT16_MIN : INT16_MAX; + } + return float16_to_int16_round_to_zero(a, 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 5312661684..3306169060 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), \ @@ -3046,6 +3049,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 uint64_to_float16_scalbn(VuV.ub[4*i], float_ro= und_nearest_even, 0); + VddV.v[0].hf[2*i+1] =3D uint64_to_float16_scalbn(VuV.ub[4*i+1], float_= round_nearest_even, 0); + VddV.v[1].hf[2*i] =3D uint64_to_float16_scalbn(VuV.ub[4*i+2], float_= round_nearest_even, 0); + VddV.v[1].hf[2*i+1] =3D uint64_to_float16_scalbn(VuV.ub[4*i+3], float_= round_nearest_even, 0)) + +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 int64_to_float16_scalbn(VuV.b[4*i], float_roun= d_nearest_even, 0); + VddV.v[0].hf[2*i+1] =3D int64_to_float16_scalbn(VuV.b[4*i+1], float_ro= und_nearest_even, 0); + VddV.v[1].hf[2*i] =3D int64_to_float16_scalbn(VuV.b[4*i+2], float_ro= und_nearest_even, 0); + VddV.v[1].hf[2*i+1] =3D int64_to_float16_scalbn(VuV.b[4*i+3], float_ro= und_nearest_even, 0)) + +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]); + VddV.v[1].sf[i] =3D f16_to_f32(VuV.hf[2*i+1])) + +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 uint64_to_float16_scalbn(VuV.uh[i], float_round_nearest_= even, 0)) +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 int64_to_float16_scalbn(VuV.h[i], float_round_nearest_ev= en, 0)) +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 float16_to_uint16_scalbn(VuV.hf[i], float_round_nearest_= even, 0, &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 float16_to_int16_scalbn(VuV.hf[i], float_round_nearest_e= ven, 0, &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]); + VdV.hf[2*i+1] =3D f32_to_f16(VvV.sf[i])) + +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 float16_to_uint8_scalbn(VuV.hf[2*i], float_round_nea= rest_even, 0, &env->hvx_fp_status); + VdV.ub[4*i+1] =3D float16_to_uint8_scalbn(VuV.hf[2*i+1], float_round_n= earest_even, 0, &env->hvx_fp_status); + VdV.ub[4*i+2] =3D float16_to_uint8_scalbn(VvV.hf[2*i], float_round_nea= rest_even, 0, &env->hvx_fp_status); + VdV.ub[4*i+3] =3D float16_to_uint8_scalbn(VvV.hf[2*i+1], float_round_n= earest_even, 0, &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 float16_to_int8_scalbn(VuV.hf[2*i], float_round_neare= st_even, 0, &env->hvx_fp_status); + VdV.b[4*i+1] =3D float16_to_int8_scalbn(VuV.hf[2*i+1], float_round_nea= rest_even, 0, &env->hvx_fp_status); + VdV.b[4*i+2] =3D float16_to_int8_scalbn(VvV.hf[2*i], float_round_neare= st_even, 0, &env->hvx_fp_status); + VdV.b[4*i+3] =3D float16_to_int8_scalbn(VvV.hf[2*i+1], float_round_nea= rest_even, 0, &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 int32_to_float32(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 float16_val(int16_to_float16(VuV.h[i], &env->hvx_fp_stat= us))) + /*************************************************************************= ***** DEBUG Vector/Register Printing *************************************************************************= *****/ --=20 2.37.2 From nobody Sat Apr 11 17:07:49 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=1775675117; cv=none; d=zohomail.com; s=zohoarc; b=IExOXZW3clpA8jiknLKUL941IHn/p9ueU4ahuQznpVg9bWKeeCCVe6TZRhKL4WPPnZEOfDnMTXVlgjKMXfnvPmIh0CRmK3hOyMlEugnh1TMc8yAVX32shItcML/Y/an2a4/IniGfYRZor+3+2rT4/g90sE2LaA9luwoMIfZwq9o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775675117; 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=TZUvyFs0LMucxealilFRfwo6HJ2f5iAQ5AEToHBFgnI=; b=RYRvEHO7bOBfWEwSVmiRHDuqFtSZ3rIv+o04wjLmpwPDtrJod9Isb1W6z8ZZgiZbOFyGgZBCrnLZurXZLXkz/8HJsZa7wjakFRCCOUFJFmPeKyOV8zffvzYXTsT9rL3KqTh9SgoPHG9mwQ96M5gCuxPIYeDmyv09zTDGogMoMtg= 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 (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177567511773384.6232825392326; Wed, 8 Apr 2026 12:05:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAYCa-0001Qp-60; Wed, 08 Apr 2026 15:04:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAYCQ-0001O9-1A for qemu-devel@nongnu.org; Wed, 08 Apr 2026 15:04:27 -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 1wAVu7-0006ph-8R for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:25 -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 638Fs3Ti1924490 for ; Wed, 8 Apr 2026 16:37:22 GMT Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddt28r5aa-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:21 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-b630753cc38so138289a12.1 for ; Wed, 08 Apr 2026 09:37:21 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:18 -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=TZUvyFs0LMu cxealilFRfwo6HJ2f5iAQ5AEToHBFgnI=; b=CRvIf/fOk0F/PmdQEBuHH/hsunO p0hCsRbekAvpDz6u7LiXuoEV9iZ4acH3yUwLrDs9te9BE99ZC9Slm8Yc7+GpR3vH QoMa/HPK8JkPBImDHhBX2/nSmvhWDD4K+rpkn8W1p6p6LLtILd1J6U6YydoCfIlL 9Hq0pJVfgwgon7FtI/ORm1N1bg6Ra6ZIIqW5Z29NxCl9lL9jLO/EsqE3kyaRvuWq pZYKYYwyQ8frUVe5lRSWqBr3W9sKed7T+v812vpfO9jBMpsjjT9yCEr5iiuAiLpY 5Mg78mEpu1fsXPB9/RtPR8Obu+Q/geox/wTDjYc0HMOHmV0ZI2UyrgaIC8Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666241; x=1776271041; 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=TZUvyFs0LMucxealilFRfwo6HJ2f5iAQ5AEToHBFgnI=; b=YHkuMFrpFlh/Rj49RQCHGYlAIbtwORml1WvjLKgNsiZvmarIT80QoV5IoI98UD6hR4 xmG1dqkTRlgLFQ8lhexs6C/VODxKtqQwbSl1frbBG/lann4H9uiMfavbqesVydrgPvZ5 uly3VLNbzWF+QtgHANi1cbJ9NvdN7i3HSSfjpD18A91C2rihQgMjCEV+khB4Kv8OaMPw 97JfmUc7dcjGW46xtKQguUcpIEbuM5sR2Ypi/qWUdnWBIPEa4LTS27YVcYs3E09ToCp8 Fo98iz6nGS3Kj+I2P7UijGAryWStoYqKUi/O3u1mB9M5tevwei+OiitpUbLjBCEiScZf pbHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666241; x=1776271041; 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=TZUvyFs0LMucxealilFRfwo6HJ2f5iAQ5AEToHBFgnI=; b=JQvci2BbmUTHoqm1u+q5x4Q6QZpV08VsKEwoPKXq03C4dcRzle1gsLfjf26rDyNI/0 +LbRQSdmHiDQ0wplzKgXQBQabSvFKw4bb060GKOq0egRKUQ3+aJqKXSGqHu26ZkN4H+s 0dQhOTyC1bqwpfR1KTHOFe21bZBlvvKea7E2On4m5Q7eiZ8g2WR3rqZ9duWRR5C78br8 3mpvKdd7DHco5JtAzeOazPqv7K2DjIz/5AWhLezFfeUg2xgXoFAbbDz0bg76wIBWx54j Q5I9oc4Hz7EMTQZDsdeQ/fByfqIaLjwJfgwoT95DNAXiNqA/ZIRasLxir6O2rl2IQW/Q E3iA== X-Gm-Message-State: AOJu0Yz9ohF3HQItHvtx2LKvb0rfWVuxS1rTN9HXbPV8/eYc/rMXzFUe bIWzJFw3/6xbhvpoQcq5ydWmEhvczI6jr6QvAtY29Hel3XV9h0xjHmgSE8U5YdLJbqO8i5kOrf/ J0N0zWI465hj75zpQXdehJ+L1vEm7kUObRmKAfY5/5FHPz6X+wx0hkzqKpq1/V52mCv9z X-Gm-Gg: AeBDievd3JqlRHqorx1OhZKvaAakSrHid1JfCpXElM/HzbaL5pfHAnFmnexNt+CYHmV cD0ugBaX6/bvtXtUNvdonaAhNtJdtehRH41QgVWMv19SnNdB0bwkE6qIkKm2eH+zQQTSySn/eme oSvm3GtUyOsl3Fch9ecNV1O+ZAkYzvggpWQNWbSC69Gs9CLLdDOQYl3WnikSvmak6cITZvJawkP w8SefaLwaxK0esan2oUUR7LqyaQU0KUYBHDKnYu4u+MHkx4NlA8qBsB2bWd1Kuyj+jeqncHcr7x ekIsKjPk3YdsikKXIagMHg8Qvt6oq3J7pwOyj56Bq6vUk6+YsmL5If4/Zt/C2u0oQyMtVhC+IvM 6MBIPHSLMdlVGYnT/Ipngc9Ok2rcuV6xE4LnEvZ7rlrxgyaYZVlxuEifPchAc2CBPr6MC1qJJLU m9vJPgwA4T X-Received: by 2002:a05:7022:61f:b0:12a:6c7e:bef9 with SMTP id a92af1059eb24-12bfb6fb39dmr11627227c88.9.1775666240279; Wed, 08 Apr 2026 09:37:20 -0700 (PDT) X-Received: by 2002:a05:7022:61f:b0:12a:6c7e:bef9 with SMTP id a92af1059eb24-12bfb6fb39dmr11627196c88.9.1775666239562; Wed, 08 Apr 2026 09:37:19 -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 v3 10/16] target/hexagon: add v68 HVX IEEE float compare insns Date: Wed, 8 Apr 2026 09:37:01 -0700 Message-Id: <9518dd95bde0a79b7d74bf1f2a15577bfaadb976.1775665981.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: p59yCA-lJZkBBDHp2XIKUfxk86WRjjgD X-Authority-Analysis: v=2.4 cv=fIIJG5ae c=1 sm=1 tr=0 ts=69d68441 cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==: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=JuoMN6qKTgbS_bYW1w0A:9 a=3WC7DwWrALyhR5TkjVHa:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfX7rclfm8bJo1y KiunQLM9KyiiMiix7NDgBJXv8+7Rq1XohCm5fEo0C40byW3pxtNC42AK+Y09xGR/L3N3EHvBmQS HK4bZ0le0mfnVjKoeRuRyR1WIuCAQDAUzX7EGQIU4rrJKxF6C9JfOUG5bc7lG32/RL5KgzIzGIK zOIlgZDztB1u5ifG7uGBtd1Gam5+C5dI6uAg1Fo7K0sD9iQJv6Ike3vZn5SWqSbURC35M80jpOs MbpHnOXYIKNdPjVqPTBLYvomuT5OXsvptEvWzWuvAJK2VQ9lzj/m67YhbRs/OdXr3Vdvu6U1qJx POlGws4lMn0ENmmO3+SW9El+7/ym4qqSLN5Jdn9Gv1SypisttiwtqEddslhCsf+4HYv6HMXndYl oU2t2DotKHlwe0iTFu6xB8magHWRGQuqU8nKV/EEtnntM4dI7YAT9/d08dUDEpY2TPNCyQOZR/y 23qtYkBvYNNBkHs/K0A== X-Proofpoint-GUID: p59yCA-lJZkBBDHp2XIKUfxk86WRjjgD 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-08_05,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 adultscore=0 bulkscore=0 malwarescore=0 phishscore=0 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 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: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775675120311154100 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 Reviewed-by: Taylor Simpson --- target/hexagon/mmvec/hvx_ieee_fp.h | 4 ++ target/hexagon/mmvec/macros.h | 3 + target/hexagon/mmvec/hvx_ieee_fp.c | 48 +++++++++++++++ target/hexagon/imported/mmvec/encode_ext.def | 10 ++++ target/hexagon/imported/mmvec/ext.idef | 61 ++++++++++++++++++++ 5 files changed, 126 insertions(+) diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h index d55837b756..ad854b905d 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.h +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -25,4 +25,8 @@ uint16_t qf_min_hf(uint16_t a1, uint16_t a2, float_status= *fp_status); int32_t conv_w_sf(float32 a, float_status *fp_status); int16_t conv_h_hf(float16 a, 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); + #endif 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/mmvec/hvx_ieee_fp.c b/target/hexagon/mmvec/hvx_= ieee_fp.c index 0d9ff8bd5f..f3f8f30d48 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.c +++ b/target/hexagon/mmvec/hvx_ieee_fp.c @@ -86,3 +86,51 @@ int16_t conv_h_hf(float16 a, float_status *fp_status) } return float16_to_int16_round_to_zero(a, 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(float32 a1, float32 a2, float_status *fp_status) +{ + if (float32_is_any_nan(a1) || float32_is_any_nan(a2)) { + return float32_nan_compare(a1, a2, fp_status); + } + return float32_compare(a1, a2, fp_status) =3D=3D float_relation_greate= r; +} + +uint16_t cmpgt_hf(float16 a1, float16 a2, float_status *fp_status) +{ + if (float16_is_any_nan(a1) || float16_is_any_nan(a2)) { + return float16_nan_compare(a1, a2, fp_status); + } + return float16_compare(a1, a2, fp_status) =3D=3D float_relation_greate= r; +} 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 3306169060..b10c5f3240 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -3143,6 +3143,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 float16_val(int16_to_float16(VuV.h[i], &env->hvx_fp_stat= us))) =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 Sat Apr 11 17:07:49 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=1775676467; cv=none; d=zohomail.com; s=zohoarc; b=BAMpa0f8b+nhKuBeYZD7rN1RsauZ0LYlCxpgrhB5LjLLZyIf66h7TepWNn5ZOKA64NMfDtagMd7webDme8bQUAj3Q5RZtef7EiQyk0BNA2GSq67DEYSw8CZhOmqLVLaIf/aRY4yOfYEo8nkAQUsJRFFUiltT1It8bal/8I6Cq58= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775676467; 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=Ceyrp3bDWeS2CmxzLTgZ2UxaZhVIRbI80CTNO5AByP8=; b=HBYVN+tAjHmz6PfKrFFAet10tu6OTio3ilB/+Fl2nwcaOgQar1ju/tP7LdJoyVek7sEkK+BLCz+3NXkyFKRLG36Y36/chtMzQEWLpT0CLJ2r+vHRbyNpaAzlp2Poq2af5tZaxnM6IuQeEoObm/sKJ4XHZmdEbd3hDK+cBUJS3pE= 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 (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775676467110198.5467166601859; Wed, 8 Apr 2026 12:27:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAYVw-0005Rl-QM; Wed, 08 Apr 2026 15:24:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAY5t-0006v6-TB for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:57:42 -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 1wAVu8-0006po-0S for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:25 -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 638B5CA21314466 for ; Wed, 8 Apr 2026 16:37:22 GMT Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dd8d6m40e-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:22 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-c70ea91bfe1so36482a12.1 for ; Wed, 08 Apr 2026 09:37:22 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:20 -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=Ceyrp3bDWeS 2CmxzLTgZ2UxaZhVIRbI80CTNO5AByP8=; b=WaWdudGHtvBJw+pbrs4Hi/H4vDY WBUUNZrq6R+Fb7w5RnC2fJMQARAQCMW+LwXS62rx8y5QytXGfuZhVRYYuJ84X5cF bVtuhM+QOk4qojhEcILwvIlJWX8A9FVjdJZot6b1lWEchFHdcjWsYcDFgcQe7j1X ipjYBJGZAcel8Ao33wOrNZ1+DpINkSfOJAbd8Dh8ZmQPKqRkacmQbslkn4ZiT5qC MPTU8HKJQYtaiUH+44UaxzoTP9X/MALiBqjG7VvSpXUIxQXC3DAtHm4UPmNLcN+0 cyddv96FipU8V3DebG+O0srdRFybgX94jK0o3AGozeknrR0fBhadqxBBf0w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666242; x=1776271042; 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=Ceyrp3bDWeS2CmxzLTgZ2UxaZhVIRbI80CTNO5AByP8=; b=Uq+EaSRHPafozQv5GJ/s/ankSPC02W49CDK4c8/9iXbZv3PBbJi2OGsr4zCey9O0o+ NWxF5+A9vuRrMO50A/e2jFOwNzhic9+Zm9rUDL9RxswqQ+XrvX2kzyw25ycf5es1HfCH p5rU0/QRrwmOSdMnv7dZPwhFXbQFLlG+JARR1xTmrzwa/2HiG+U78OtA6TN5FekS8UvM p01orc7DlR/sOJYswrhhPASWF6yDaijN9WCT0+13zze+FpcZKGm1Qaiz/nPRzNEZndQJ Bi+qKKv/tN/cHVcRA4W2Ls/F39WtwidNK0iguwTrBMIHmllI/nDdye/TSTjKwiQYGGFR s1rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666242; x=1776271042; 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=Ceyrp3bDWeS2CmxzLTgZ2UxaZhVIRbI80CTNO5AByP8=; b=iJd5KF6mbBUucGghsz9T4MoJLW1Ue+zBfWitpR5TY36+iUMPawyZ+56bi1/NvgJcj1 7v0F7sbd+BulNnlzXeZ6pHvMz3s4rWI+/33nxcxrh3jdtsiulBYlMkLiK6Q+HCpTXlRs UdDCw4dUIz6WDqCop63ljUFRGAQJqr2+M+EJwc0O1ZJkWwu03O+AGdJ43fTU3JKKvGKy okVPxvgnYBMj1J0wDJIN17rr214fwVIAnePqVi1EFGSE+Uo2xLO7UZy+HOw+ZAIUoF8I QYL5Ryz8+lmR2ANDZAOlG1/a6svN3VfBpIBaz1wGpPuStl8z7TluN1Oh17Bi5V9wnfvf mnXA== X-Gm-Message-State: AOJu0YzOh/FJabxho6NObXJcAC59ojNp87gsbAbF4Bn8AxuvMuh4oZR9 T+AwTcEdnvSBNKHIj7CzopI2EC2MYLckO8zmJ7S5fiA1H0GyY+NDieHShMyHEg5r6Ivz7Sp384M X5RVKLt8XyTE4yOdzcbs1wWab4yziQaRcLV2+z2GsHI88geS/uQzDJfOLt8CTRXN+e5Pp X-Gm-Gg: AeBDiesm+XkiLbiC4TfRQwg5/0sLyvyxyddEvvjqH1T9/ljZuUH9TX/nEHb787M160/ ivxW/H92scy0mH6wTMfj8jo6UAPE83/VToYT5hoykmNIwRpwksUAWAcKn3yzsLnI0iW9vaDLlyA pfh4bQRVsSc7bRGIXT7rFgoUDIANKn1ZDajQEymWf7umg7EM8Vk5OYrd4I/DPUMAUuvyULAHPFT 9dMqXyXgBcxHZf03PTle6gSKCvps5UfMt3HYu81wmXPxPRHgw2p9wwE6DxoS4k9/0SHGWcbtw/p DWEKbXkOZVEVsxgZ2U/+ieJBV8KuP3pWXUcuRgMOemu0ELKAIAeN1zLsjfCwnomiL0pe7SRIwjU iENBk3A16fyAYFUfIj6lxSbOHPXk+844dexzTqduGLNstcBn12SEZO4oSdGAMQmL1MlQ0GQdTOt imlPc0ZXxg X-Received: by 2002:a05:7022:b98:b0:128:df80:1852 with SMTP id a92af1059eb24-12bfb6fe54fmr10695337c88.9.1775666241528; Wed, 08 Apr 2026 09:37:21 -0700 (PDT) X-Received: by 2002:a05:7022:b98:b0:128:df80:1852 with SMTP id a92af1059eb24-12bfb6fe54fmr10695315c88.9.1775666240715; Wed, 08 Apr 2026 09:37:20 -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 v3 11/16] target/hexagon: add v73 HVX IEEE bfloat16 insns Date: Wed, 8 Apr 2026 09:37:02 -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: mjIjDg18J1Y1UMIY_XHCPrhzi6MWLS7B X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfX3rfCehR3JT8m XPK/4LL9GX2I9bmLWHvCx6Fd230BiSpW7KEKjiWmOPwLRsqktgnzyvcOP8qDfqwiNmxgA9J6ukz YG+K8BF9i7x8XtKVwF4cwlm7+mzw1f7KzVxC471cC60NHu5qe5qGALZs0FEosUzKaqULvbqP9Rz KFT72LVQhcskkNwOl5DdvxK+iQ8uy0vFBlFjL4YldJE5n4XbKkATwUl4B/jo5+zdasPxcz2lWQJ ZhVkLLau9DPdr0oRpkzBuVcokW6Tx8xLMUNb6L2//tX8MybLNunEOV6msG1YGy4vLiKbfRIupgL yGSXoXDD2BgV3kr/0mZXZzW7WXPqmAz3fevJdVGunqkDBAiwU8vkMYvQkGEfS0CYKldwGZN3nHx dhiGoxmKGaUzwINekhhflst09NEoKVXkkvm1xAD+mAIBcV47GAl+u5ioh15E6zr8CykBJkAyaTp +gCnJBk2nIknd0SAcGg== X-Authority-Analysis: v=2.4 cv=GN041ONK c=1 sm=1 tr=0 ts=69d68442 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==: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=onv092Jz13JiHwvUDIoA:9 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-GUID: mjIjDg18J1Y1UMIY_XHCPrhzi6MWLS7B 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-08_05,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 suspectscore=0 clxscore=1015 spamscore=0 adultscore=0 bulkscore=0 impostorscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 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: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775676468304158500 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 Reviewed-by: Taylor Simpson --- target/hexagon/mmvec/hvx_ieee_fp.h | 37 ++++++++++++ target/hexagon/mmvec/macros.h | 4 ++ target/hexagon/mmvec/mmvec.h | 1 + target/hexagon/imported/mmvec/encode_ext.def | 15 +++++ target/hexagon/imported/mmvec/ext.idef | 62 ++++++++++++++++++++ 5 files changed, 119 insertions(+) diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h b/target/hexagon/mmvec/hvx_= ieee_fp.h index ad854b905d..21883c0fad 100644 --- a/target/hexagon/mmvec/hvx_ieee_fp.h +++ b/target/hexagon/mmvec/hvx_ieee_fp.h @@ -9,8 +9,11 @@ =20 #include "fpu/softfloat.h" =20 +#define FP32_DEF_NAN 0x7FFFFFFF + #define f16_to_f32(A) float16_to_float32((A), true, &env->hvx_fp_status) #define f32_to_f16(A) float32_to_float16((A), true, &env->hvx_fp_status) +#define bf_to_sf(A) bfloat16_to_float32(A, &env->hvx_fp_status) =20 float32 fp_mult_sf_hf(float16 a1, float16 a2, float_status *fp_status); float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, float16 a4, @@ -29,4 +32,38 @@ int16_t conv_h_hf(float16 a, float_status *fp_status); 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); =20 +/* IEEE BFloat instructions */ + +#define fp_mult_sf_bf(A, B) \ + float32_mul(bf_to_sf(A), bf_to_sf(B), &env->hvx_fp_status) + +#define fp_add_sf_bf(A, B) \ + float32_add(bf_to_sf(A), bf_to_sf(B), &env->hvx_fp_status) + +#define fp_sub_sf_bf(A, B) \ + float32_sub(bf_to_sf(A), bf_to_sf(B), &env->hvx_fp_status) + +#define fp_mult_sf_bf_acc(f1, f2, f3) \ + float32_muladd(bf_to_sf(f1), bf_to_sf(f2), f3, 0, &env->hvx_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(float32_min(bf_to_sf(A), bf_to_sf(B), &env->hvx_fp_status), \ + &env->hvx_fp_status); + +#define fp_max_bf(A, B) \ + sf_to_bf(float32_max(bf_to_sf(A), bf_to_sf(B), &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 31909303b5..ab991471b1 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]; float32 sf[MAX_VEC_SIZE_BYTES / 4]; float16 hf[MAX_VEC_SIZE_BYTES / 2]; + bfloat16 bf[MAX_VEC_SIZE_BYTES / 2]; } MMVector; =20 typedef union { 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 b10c5f3240..a762d7ca0d 100644 --- a/target/hexagon/imported/mmvec/ext.idef +++ b/target/hexagon/imported/mmvec/ext.idef @@ -3163,6 +3163,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 ")", \ @@ -3201,8 +3210,61 @@ 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]); + VxxV.v[1].sf[i] =3D fp_mult_sf_bf_acc(VuV.bf[2*i+1], VvV.bf[2*i+1], Vx= xV.v[1].sf[i]); + 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 Sat Apr 11 17:07:49 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=1775677371; cv=none; d=zohomail.com; s=zohoarc; b=gaistfO1qG/sDjoUKw5vsXpKRIZX2tqapj8x1Ajzq72m6Eq3zUknCwu5WkY77XPyC6xWbiSQ4EE6l7idxNe6OYWbUygV5mceuKqw5cOhz4JgjMRICsIyxKELIA9ZtMBNoD25VC4rVNZbWILm69MuzX+U6qmLAyBRu7MvV093Ii4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775677371; 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=a5NiGbmUpQcO29EqUJ23FkxXrZMuxAtUIFmjO8wofAHDXOZVwpa6xPKjGpM5LcmB8R5/azlP5+CxYRYbnrGdTgGImDn0MK9qjPV5LUTXzIsk3vudxGN5cbenQ+TMX0Ej+CbEciEoP428FkZCcpSi/LlCkwx6jjlIXDpYcGDUVW0= 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 (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775677371031353.5534854525431; Wed, 8 Apr 2026 12:42:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAYVr-0004uJ-5y; Wed, 08 Apr 2026 15:24:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAY5q-0006sU-CK for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:57:38 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAVu8-0006q1-Sa for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:26 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 638GDARl674176 for ; Wed, 8 Apr 2026 16:37:24 GMT Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddtbmr2hd-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:23 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-c76fe944e6fso145443a12.3 for ; Wed, 08 Apr 2026 09:37:23 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:21 -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=hDO46lWaFOaL9M4PcygI5AH/iF8 I2BK2ilz+W84oPyAIrQFmHRozsVKGDkxRYH6ZOiX2QjxCz3+IUyjjM0L5EhREFRl oAVt1CaOAYdIiVsCCI2guKmKCa4LjfUrjJTlo2n5sQLsNs3DZigUhxS8s02L7kKk rjynWdbSuMHJ6mYMOBg6M1AlI5//ANPt0nlebmHYrraf8qEzH+y/H+oejkroJbzc PEqur93DrYBxHPE5hjUDton/DYSxt3Ha7JgFEDPkipK3p4S2qzeBxCEkIje6gbQr EL2fcy5IepMi9SFttYez6n8uo9tBvy2ypWqmuF896bwuRbQXx0ckjRSg82g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666243; x=1776271043; 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=JRWahCDFX2uCLOaHNXlN5cXQZQndNAm4JCIWEKNVs8AnmB5w8iDJQV8+utc3W2OImi FvHUBPM20+ogKuFi0U1UL4S6H9OmEhTyVwoa2JhL9beielOelys2UrJXx3toWaPBg32c WkKaeo7hpx4CTmTYPQt8D/toes8Fz/8LQ42FAT0YUZhqxYF9KDU9zxN98un/eLQ/fgNj JpS0eVGQ1YJFIK1Fljdg0WosemC/TBEmH0LlNzSn2YgLQfY36K0gQog92/01Ezo36nG+ FUBq0YZFeY4JsVeotjS8CrldtyhtMNSvHiX5N6XqfGYb5gWsAYQxGcPLf5DvB4Hwy3Q8 hjFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666243; x=1776271043; 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=aYvu/admx9GwE3jBHRYi3eZxTr9nGLm6y7v5CXJYn3QCzxCuk1HCdKkCRDJ2NL2EMJ 4qwGBBR0hpcBbrTeLPBSrrDbKxQ5RBFJrPByy8LLoli/gnqPOFz53TD3EkACEzEUAqhp Hk0eqIX/A+CJkQ8jePMjz96FzQZDPmmg/bkXuWbIaVsjjJ8RKPQD7P8Nt/kzEWIahgxH 3pf9Hbe6Gox1GqIG2sYwscKE6VxQ5LIfgx5ZfWE/bS6MjJ9Lnxl8PmjvfOOcF/WYmaAt W4f3hyosl4QifCAYsWHFArsKs/bk2gMu5mvEqnj3SeRopF4ZwSkVkd5dIehUfdnQSVI3 XMfg== X-Gm-Message-State: AOJu0YyLaFhVJqthYIrJQubYTQhR0a7k81j7vf0en5XCzcubSfVZ54jN ZTlICJmXnOJa1qDlSZghwZ70ASfh/AJGHDZRc/Oya2n1uIi96DMGuTOLWEJAPqAZ2r0OF0PvO6M +GYzdeBReQfQq+sFDSpLCfDj5RXMx7J/dmnRPzw4fUbGkgeiFhd6lt0/7JhXLMty9Xv3G X-Gm-Gg: AeBDietK1bj1KObbq+vPx+eDu8c+fMe1nb4iro/K07Qg/pUH0fOXuO79OKy1Ahf2vAZ VhnZa1HI8o3emNgg+gK2GzNe30bDsdX/KH5lIzK8qEWJggDI4HMGiQSABA5OsjMicxPAQLROsoN BO5znjRxO1Qi1iBGF2NHLxeb97r7M0OICmk7+ilOKSgO38C62n5tY0mtjBLTW/w7l/qJFJWlnKd kmeQA8Yy2UFebaMC2t5K6k3TGstbAyEa/Vf+s9MlMxXDzKtfvqJBB+o1HigbGCUC1kwv+T3quHC 4LYoKXvv2UFZzUgWqdkvV6thEaJbpFRQHlXeaSS/BwctX0c/h7I/wVp44iMo/oK6Eaqm8FdIjEz Z73oJyyp8ykSFMXYZFkm1fn83NPYT36NAdZNVkEQ1DoyBkBF3jgXDlR5bQ7LN9pqX+GmLAtUcC7 rxrQB1kriR X-Received: by 2002:a05:7022:7a4:b0:127:33e0:ea40 with SMTP id a92af1059eb24-12c28bf1e52mr87633c88.15.1775666242576; Wed, 08 Apr 2026 09:37:22 -0700 (PDT) X-Received: by 2002:a05:7022:7a4:b0:127:33e0:ea40 with SMTP id a92af1059eb24-12c28bf1e52mr87612c88.15.1775666241818; Wed, 08 Apr 2026 09:37:21 -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 v3 12/16] tests/hexagon: add tests for v68 HVX IEEE float arithmetics Date: Wed, 8 Apr 2026 09:37:03 -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: 8wwda7i_YyO7-SIbJogFxYi7_14DYWhI X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfX5MHj9YN5Yai3 PRgp5d3zhsb5E9yQaG6H5VW8ZNAOjW1AVQE7kq8vTQ4/dZtgVRmQpUT3pIm3M7+Bm/6hqg6ucP3 lAS9RS+5VBXu0AhYQkVdHE5swvklHQSwDZ1q4Z7ArQZGKB3wbzTnnSPeUrdSMWddmrU3h9aU1YA d5U59Wb0ee4xRQBPdXcSDiTl9NyvYDCA8kkCsWXTZwikZ2kPktheW5PXnM9HyFMq2TLeylC9dWN C8/nB8hD/1og3nUs0BRw79UAUIoj/UE1wHfuYUyn+CScQV+OM/WYIrzCUudclZrwtLrOzzHciwm 74qamVyacT8vZ80uk72XWkRN/Wi5mryntEzm+6z3J8kqZZNbeRfXnG95uiRXrRjFgd3Nab3qAbw M7jfOnAbTEDqQeG2tsWIcVOO4XwQqXrh0aHilwHdBnNdeqFoL/5YKSj626V3tG0kYK0RCMPML7/ UpVmC0hobOb3eR0ogWA== X-Authority-Analysis: v=2.4 cv=YM2vDxGx c=1 sm=1 tr=0 ts=69d68443 cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=p626gilfWeCCYUnsPZkA:9 a=3WC7DwWrALyhR5TkjVHa:22 X-Proofpoint-ORIG-GUID: 8wwda7i_YyO7-SIbJogFxYi7_14DYWhI 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-08_05,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 adultscore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775677371930158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Taylor Simpson --- 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 Sat Apr 11 17:07:49 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=1775677274; cv=none; d=zohomail.com; s=zohoarc; b=ewNCyzMXFCI3NX4o9EBBa9Z8lXfTZrT9askoulCGSGoDxo67iVBmdyPnGz8l9zsC4NoLFlmdnmQHL1xlmCGjkMhU3snhqefr8V5ouT4g7DYC03JukUq7J7IUZMvVnni/t/CaCTJv+P4YgWcYFsCR3batdoNFkv/H+sSv2QyKyWw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775677274; 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=HmAgorYny0elDNv+/mkHRENWx5iKmei6u9WomRHSF7emj2isyywep+1nLJaPKkGsAGbBIk08DYVPqGjrQ/mtnyctZbh9PQ2m59AFB/YJiBExeU85zcc5fUYweTlkRxmArUPh8yBDMTJlh6MBQnckw5XbaWz4N6IUObBGkcLhpgc= 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 (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775677274067472.48662298657007; Wed, 8 Apr 2026 12:41:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAYcN-00062i-Pa; Wed, 08 Apr 2026 15:31:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAYAD-0000zg-CU for qemu-devel@nongnu.org; Wed, 08 Apr 2026 15:02:09 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAVu9-0006qB-MF for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:26 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 638GH5XV4049231 for ; Wed, 8 Apr 2026 16:37:25 GMT Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddtd70217-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:24 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-c70ea91bfe1so36514a12.1 for ; Wed, 08 Apr 2026 09:37:24 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:22 -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=F2TziBW5CqikxfFFlyEsXqDnoPz GqQaTbtop4BHDU4Jt4OND40X5NqcmrHvZN5gWRswsvrYU7uYjAmfHAueYoCapx5A E2xHZKWgpHrPuKGpGCWAlr2iFipdOLkFHR/Ck3UKVXCCvhFN5AmPifixq7JPW6l2 XPQZqHRB5BQta4LncfoWVMrRXA/sFJ6H/sIUXG9Rzwk8csVui3ua+oBh1RLm0nex /vjri0DdsRHVb8Sy8Fw9to75sKqF8ptfNcP4r+meYXyIme55qmNyK/svnMsVRsEU e2myGeCPAesH7PWlHMeBzob8niM11udvRHx67gIdvivKsTmc0c04k6c86xA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666244; x=1776271044; 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=FD76xUuv+j1GhOEzl1hi+qnjdhlz4DY+y7R+J7GtnV7Gs4WZuTnvCuUzOuOuCNgV74 0vsUfwz2nhaYSZleQTuBaKshF0/P0dfdGXP4SrH/+GvB57l4AEbGZLVsBNKCypnd1fyS MQ1iJjstKxkAhh5veeNQN+ULpoQXDVyFgZfc2fP3+5SplGcBvecI4You/M+vMh8xGzHG 4yXC3bxnaLUJTlfRJQsHMpGc6a7vR4XEpMKC7CfYYbNX2qCYrgYZ1Fr6ZE8yu7CAdV78 VBBySFvGW6ER6ju82stO3llHN11/NW0E79DP8X5JgHqpXS+Bx+kPvFV9BBx9Rh3uWn3E T5Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666244; x=1776271044; 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=hWwEV4PgbazcMPRJhl+0Gpfq/l1vKUxWM2maWKS1L8ppa50z5M2f+ExHe2DkIKqSJt 9F8GJ7K714E6I0xBHPa/cuL6zJH1k2ewj06LR30DVVajXsLVpjskXbhV92clZuWBlF7e ak+uIYqcjPoNsVUzsFxystLuDD5gWwvINXtw2/dkFRaUtJnNQTXBWfeXdO/mD5+XLfaC pRZ+gEr/eooQKceQIXAO5si8EEg/QTqKl/yIfwENVFYFjbmGOtMiYjz58uJu3px7YaEi cOskQS8QedRQzWcFjL5UGm0w+KPAFjVILMVRdFdH8/RND1HRM6dbC66XLu8S5aOXBvrX 1lbQ== X-Gm-Message-State: AOJu0YzxImyrx6gezyhLDNJaA0n3jK6hRL3uhrKjXq/D8E38kuPwavgc MwwgTocNIEDdKt/L6pueFFnEfD5YVsVLBnuyFcyi69Dne4911eZ331ZeZd6fh8YM9x/1pZhS/MF kSa/C3hgc/aZDYb1xdAAopppq9DSbCK3LUZ9z9etqce9MvhstpN6JKUtW5GfEeRZ/0NRO X-Gm-Gg: AeBDieu7Qn2C4MaxiWHftsQt90f/plNaAtCEj9olLe9eYjJUFK5qKecDg7bzGjxyCXK 9PGBCDWupyGYwTGTIs/x7iO0+CGFaZDN4qgBnRoNdH9zUzLBbjElWw0m3cyDhmE+wpUWXw27Pe9 Z5l5SCkwVFfBBw0XJZ6XcwLdXnu5GjvMYRnBLBdwKTKc4YQVlqGJ5QOscuJC+YMYPbvNqw1jVcY pUxb47t4HUt+UDKgu3RF+uBbHAxFhPsRAX6fIktiKRR0sbiANMCMhMj/mBwFegxbCKoTE0FXFLa Ja3O0WRqsN7jlEwpuP6a4XcNUvOKnm7sBmBKakOFRFy//kfCc2LNjrjDQOkmN+I6Mr9SQDQqjXb uvrAIb3RdoAjX25wYU79Ib2F95Z/ZdcfKDUFzhF4E7cBNvBdhIYYpvw6LAOD9Eq2FGJ1D2BsDi9 hlIVGgAPtz X-Received: by 2002:a05:7022:239b:b0:128:d494:a1ab with SMTP id a92af1059eb24-12bfb71138cmr10288981c88.15.1775666243568; Wed, 08 Apr 2026 09:37:23 -0700 (PDT) X-Received: by 2002:a05:7022:239b:b0:128:d494:a1ab with SMTP id a92af1059eb24-12bfb71138cmr10288953c88.15.1775666242716; Wed, 08 Apr 2026 09:37:22 -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 v3 13/16] tests/hexagon: add tests for v68 HVX IEEE float min/max Date: Wed, 8 Apr 2026 09:37:04 -0700 Message-Id: <5055daa72b6eb563e343a002f988d14e0e52ba72.1775665981.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=QoRuG1yd c=1 sm=1 tr=0 ts=69d68444 cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=gVZ7t9wPRZXE4v3XZ3MA:9 a=3WC7DwWrALyhR5TkjVHa:22 X-Proofpoint-ORIG-GUID: FoF6PtfrCDWBetk82QkX3Z6NTabTvVyq X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfX2q19AWoXyMwE vh0Q9CYejJg0lWmOvOhqm8JkfHP11sAAfiaWK2/nEEZocOnneFvvfcZ2AgYCplGEND1u6+bSVJI olUey+Xf8aB4YXZZmWjxcHx6t/iBGVV2JfYzM7ZBjRoHaz0PPuPphMzD5MgQx79IVigRkK8e+le 5eoSGU4iLkOpc0NznixUXW/sxFHl4F++xCQCTAI/9kbFoxn6fQTyx18lMUZzuG7X0Fb3mZkIJJu VGy49XMGsx02LK0Kb+pVXIcLR/K53OQcLNmpFVjLMPpNQE9/YORFK72q0dMSC7e6jqmbulMA1Eo jIKFz3gA/x7pzT0+HZHx1QTpYBDh45CefMEYcBAxJn5Jhm0X4JNcvab5PRY0FDgPl3JiFeAbqyR 20CgieLL12cWFaUlPsmANKTNte7ZYce/XIp2pKzE57IUQCwNd51YiIlR4OjNkuqe2oiJ3h4dpyh H6qD2dfSKKabNibZFxQ== X-Proofpoint-GUID: FoF6PtfrCDWBetk82QkX3Z6NTabTvVyq 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-08_05,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 priorityscore=1501 adultscore=0 malwarescore=0 phishscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775677275285158500 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 Sat Apr 11 17:07:49 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=1775677969; cv=none; d=zohomail.com; s=zohoarc; b=TkgPAdZvaXjk9avsKtGRslS6JkDSqwbOOgOto8hRrjsCQLfR9OVUzpTZZnouKcxp1vcDiLTm3DqK9YH/Uprh2114CWv846ZwnqdvCGmP78YAk4Bdogp6sTsJLIEMiuqCSCN2dLbAfu2mOo0sf2Zc6u82TdSRsguvfLb5oJ176kQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775677969; 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=f+u4pCLWkO5vj5fnxJDzIJ3/KIijJa0++Yi4qeo2GiNsHFSTNKrpI61UJkZRm1tclk6Z16DRtAhrOQoPWm64wZyigC+XPa6h+de/asbgD4Ai1zfigEZN5fpF7hrVAJbNrzlcHhfQVwwZpcYfpL3Mq3+XwUZeluUg5kbYFHCoq6A= 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 (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177567796990253.16734190037164; Wed, 8 Apr 2026 12:52:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAYUV-0001bO-9d; Wed, 08 Apr 2026 15:23:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAY4r-0006bA-QH for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:56:37 -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 1wAVuA-0006qR-SR for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:28 -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 638FrKDH1923183 for ; Wed, 8 Apr 2026 16:37:25 GMT Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddt28r5ar-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:25 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-c76c2bb3149so17171a12.1 for ; Wed, 08 Apr 2026 09:37:25 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:23 -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=IHoMd90ZSR2OOeXwHpz/z0aGhad HAHCXtJTbJXAAC2ydPZDB5xTerz3dIwF+I49g2IHANn15fOOFU9ajBDHFJxjIgVJ vp7r5bvZU9XbDd7tIz6KO36HfX/614NIJnfhOY0r/RGEHHPR1zV+eEa5gqEsQRta PSqSP+WylKFanyyRHgzyW6tPcxRL/GWR8G4PHx5mM63XaGzH+ZAIHiT8tSHoV7Hl EC71aq+ZQ6gHxV+wldeDCJfB7ONIVFhSzc3CGgszPZIfnMnE8dgbFR5tUjfdV8jU Hrxuf5L1XoYPtxHuV4VvgBVmI3Iqf0EGWTb5X8d0ycdEAtXJOmi2ne2L/ig== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666244; x=1776271044; 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=MySGHUZpoda5sHC0bgsiYHke75iR4h45dQW/BO+aNm+tZ5xdymCGt3pzlxhxbrvvd+ w5cav/fVxU3SNrgjDb76qDEWDWKbZnS7eMhdP4+HSR+jlHq+CM/7T5agqSVwaCY2OEk0 OYnrpRpqfOXjHeAQHk4DwLk3SRNHqScV4tbCUYNMJIKcb7SF49Gl6bDNT0Fu1Lvneuck PuBeZxsQO8pNletTULnX0Y6acNX9GWda/UOsRpVCoFnBfYEybRC9N8msAVRJO+xJiSv6 efWE3zrx5Al7k/WdGB8tollckNfkYFFwYsQFnuhodm0NsmVhJIi/oIpoz+2M5TM4vP8G ZCGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666244; x=1776271044; 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=G8V0D4FLv+1x7rPcV2VrA5MAey5V5ixu7opFEf8772VliZcxT1opZpf/N71WxdPxrJ 9RhrDGiP+kpK+3vqsfkY5d3xIMKS6ppnPiRLSijj/9ubrG5EezzDZ3kTCohlZGyQ5Ioz A7nyGNiHIQnalMet4oxL607QGOnC3GExROiuPYASZxmh0NoY3bBhu6Tn0iFEF1Lyxe5C UuAi/Yyo3MZPN6emeTPgTTg/VEVeF6SK+U7XHM/4z/SMx3DbD/nNI6s354RqZFRTsyC0 jk+u+ei/L2sq6SDMeBcysdOZuDV5oWbovcYKkrdw2ZqPlwkuiwnhI09qFY4XwOVbchO1 41QQ== X-Gm-Message-State: AOJu0Yy1H+K5DZ7jT0Fgl0lBny85SA/Qr8lDMGLHuNilU3/sg0mUXzpn vyYj6yNVI1iF2jM8mhY4pzRD52Wkgx/9MPlxq1XgBPDFiDrJLQ1Xm/Wmikaubq9hrNxMof6oAD9 cytCQH45URfEVjkChkewt845nPn7PXvRWqDM3uy2Li4ylMPTcBlbAIoWt5NnZ+XEkUHIi X-Gm-Gg: AeBDiesLRc1BKIx2z8iC8PxKjhIHXne1C01abHdjxu+/Vrwm0xIAxONiwObIC+N+A28 eSb5Whw7YI1H9xgykOaxlTmL612Hu/y9xSKES3aFbxJw6803WscUv7+uFztwMeuPjTJesOHTH6s Yqo6EhOBAMm/r0UhuXVHrqBWLjiri+1iXCEzDRhkaQVWn3wNi1zf+dZw5kjsJ9HZa9gkajCp7T0 pglRTYYwG8sSHRpX0AkMCm0j3thF7vB/OYbjqnZXuWTF+bG/362Bl6CckZdbRfX0dBJVqngxFvr K2xmN8nADhFjzPuiP0ZBcntONUE7vkbN+greY/M5mWh3U8Lj4Bwpe3AQPZZubXiSh7JYttMec0H 7gQOwqoEY+OL3BFH6xcYa3cskMSpjt4lsi71WSeuqRLxRle79u+w1mof9BMceKIvf7oqnf5+Sah qTvgQXH0w/ X-Received: by 2002:a05:7022:510:b0:12c:aae:7b43 with SMTP id a92af1059eb24-12c28c5e011mr40512c88.24.1775666244365; Wed, 08 Apr 2026 09:37:24 -0700 (PDT) X-Received: by 2002:a05:7022:510:b0:12c:aae:7b43 with SMTP id a92af1059eb24-12c28c5e011mr40476c88.24.1775666243722; Wed, 08 Apr 2026 09:37:23 -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 v3 14/16] tests/hexagon: add tests for v68 HVX IEEE float conversions Date: Wed, 8 Apr 2026 09:37:05 -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: bNY7jAJPMgVPLzNLJuVjfNd46g4iATUN X-Authority-Analysis: v=2.4 cv=fIIJG5ae c=1 sm=1 tr=0 ts=69d68445 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==: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=_Vgx9l1VpLgwpw_dHYaR:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfX2/YwsuvHktxg Mt14GiQ/jAQl3cbkDwi13ThGYDvBOw4izIwdhEEKEf8kpX7khzwDLfjT8ilAkvL/bDbDsVMZH6J CljQ0cVCpVEkFZasmxNR0RcZHh0XSfKpvK+mGa0N2f7m2voiii4l5w7S4ZdNJq94zFtRqJQWeae 8hVudK4dlcIRqN/oglnSYP2foui5z6ZkHNMnuxeHVxxNbnc7VWoU/1v+JR/O81/vIh9wRHxOTAm /St0ThojW7/hBtDpuq4q2eUYtcwwuINuY0NF7XyH397nkSCt7VWY4AvaDUBUUnen6F5uGrifj13 RvXZaCerFQZ+feKtoeSSCTglJezXb9fgjJSIwYL4btnFZIPUIL9a3zBXdvu7/KJxmlJZ/VbH3pu nSu32ImbP3sBvtZi2QFjWeAA0WlncqTunoQ1PVh8B9yYRufuZZhnF6rhAaka2MRJ4WgHPZ8JpJ+ TC1UfgNaJsAQSpbptKw== X-Proofpoint-GUID: bNY7jAJPMgVPLzNLJuVjfNd46g4iATUN 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-08_05,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 adultscore=0 bulkscore=0 malwarescore=0 phishscore=0 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 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: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775677971304154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Taylor Simpson --- 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 Sat Apr 11 17:07:49 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=1775676046; cv=none; d=zohomail.com; s=zohoarc; b=Uc3LTriAYvlFuo2dA64cZI/Hfwd9lmLrDyYQc3OzW/N/N0u+Sz78tlzN/7F+tLzTZ6KrNPfROU4926jw0LXs2PxQzYHKQPfByLow+sRcDIHCX9bXH8bJGu8nPvzum0VLJ2TZJlUIapB+8wcXZIqit7ko20t9YCNgRsDcVcQ3gQY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775676046; 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=IcvePTtTFKbQIMIQNHYHrCP7OgI+YIYiOiGFdYGjt7aTQXoAAl27CWS1QdczWJB6dv0MjwtB2maMEVNDLj2o4/faOyCgX+PAQaVEcBLgeAXXUkH5sr33nRJYJHLw0Dq+Nz+ZvQQTNaNaFlo+tkfpWYxWS+Ei9bGM8cj3EQMgoPQ= 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 (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775676046633491.6000074396038; Wed, 8 Apr 2026 12:20:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAYQo-0006GV-QX; Wed, 08 Apr 2026 15:19:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAY0E-0005Ed-QM for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:51:50 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAVuC-0006qt-4N for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:30 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 638GGZ884047338 for ; Wed, 8 Apr 2026 16:37:27 GMT Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddtd7021a-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:26 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-c76b69fb9d6so763223a12.1 for ; Wed, 08 Apr 2026 09:37:26 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:24 -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=CbqQrBuYRjrg1HrSSsYiWvvgHHY z69BU+w4pDwX00kM0YWs2ZFNFmrDbDqiLU3BR56cdFpH2zKKk9IltW3+/sQVLqcf gVpPHqvBl7USWrR+cbzmTQfhYcnmZqFUWlbJnvUSF2gvC1cCWjQxDMkLONb4CelH OwyIIIR+gmfxtbKzcIy2feYHH1NHMunCDzClrgY9LQmeS6itJig3HZ4/6N07VWch xPlxurtQNGPY7rUaQK6iXJeIjahGjCbcw3efFKLXAJkMbBUBAO7XJAb37/ZR65dZ +neq78QwYF7fNxLnGFZtFfMVKB/xoX6co77SGcN26CzCp2uXAuzFfwJKO0A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666246; x=1776271046; 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=MK1Ns8J5rw9s6ByUsmfBiWCVuQzFtwrYOF8u12DBQRCQBnV/z1KIOgBpIBXNRZ5tD6 8S3QJnGB4JeYgIMpyU6cflz6ZuMieBQJSh/0TTD3ouAv9Iu/XWNNxlnKe3z1IQzErDbt QC+ydcNPl/faerNVIU+AO637KnktmeVaHjeq8nNU7hJEfN1gauHMLEI7mf6CvJrfXka6 ri25BKyjqh2OMRxUT7Pl1ORv1IaIlJ3+gFrGAM4RWAs6WxpJJbwSZCqEuVqYJaMsG7yd c5LmpPhcQS3+FitXX9A/6K8GUQ9IYTKiBoA5inAmZ9HadMga9TWlrN0VnyJ2hYB4TqwB yckQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666246; x=1776271046; 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=SI/O5UsdzobnXsEMahr0hmxrH6EbETIcGZ6aHSIUFlNOoMJrZwOomEbXrnKmhnJuNg 8HVJwxxNtWz2jRlQ5PUfvJljsiULrjTLZAlxshDcNyupFbaHxw4UWEn42sVFEpJljjRC z1WQLzKeRyN3J6ikIlrUf3ErYCuaBvGFlFs1IIUxQcxgTe0pIjl7XK14kbRfioLZKqBO GMZNbWUIgdbzG4G3EhRYMLFOHxMBhSBOClkVj94ZoCe52VAhAcfNP84dVMoQv4A5UIXt ZoudkMIYWWKN7cW6g2eV6SRlIObHOLNuFbsEsaQsJeBETqo8WkwsjBfFF6tYzURxpb/F ztJA== X-Gm-Message-State: AOJu0YypoXR/mGbD5rFtQG2qGfgMPevoNa25tKV/ofZSUWZOH0mfvOMF Pb5aAft2Yh1UPbNaxv15lBJSm0ImxhXX3nLFGWTPa6rsW6xgWz3UMrSWC5tqzK5sgpv1XyPs4Mx eKQV8grajv7VYiLCz8MZYVdciPmRmRIViS6Z32pGDBpTpDJ1ZmdYwLLwUbbFJoOr5Jkl6 X-Gm-Gg: AeBDieuOJ6TH6Jsj0k2VohxPyGdrG5Bz/fcJ4GGPR4wwoGTUMDqMV/nwVP/FoiFpT70 vHYZg6KqdbSJtGKMnn+93Bb7+IfEtX1zVYDCZIg9AX/Jn4Fih+Ak1ui4iN1HqEFaA8feaX0P/44 Fp2EatKuwRb+32nmQHTPa/PFfx5lsBmwJ/WO4MRKx47fPiru4i5e2TzCyalBEWbu0jGJCpHY2W7 UARxfZQEhm5cyJ65AhrFke3gmBbJrhcohVOg0VAwVDSqvJt4ETNYWLremltKGkxGvEmDlQgdw8l Cjrh0lsuz8tjjhKf0ckDqUwTORzLCzeO5cTmL+wOlIcpvqMHVghdJGima8pcJVZDGwTCjw085+W WzLF6C9MH76nAobFwfZ3SqYIJkQt2DoXKC3Hj73f351GDCOS5S5axStFE3AZw6F+hxHQTK8apWM uL7/di66Hv X-Received: by 2002:a05:7022:4381:b0:12c:8eb:80b9 with SMTP id a92af1059eb24-12c28bfed17mr72315c88.6.1775666245423; Wed, 08 Apr 2026 09:37:25 -0700 (PDT) X-Received: by 2002:a05:7022:4381:b0:12c:8eb:80b9 with SMTP id a92af1059eb24-12c28bfed17mr72293c88.6.1775666244538; Wed, 08 Apr 2026 09:37:24 -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 v3 15/16] tests/hexagon: add tests for v68 HVX IEEE float comparisons Date: Wed, 8 Apr 2026 09:37:06 -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=QoRuG1yd c=1 sm=1 tr=0 ts=69d68446 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=g6BQdadCeQXt8ut-Y_AA:9 a=_Vgx9l1VpLgwpw_dHYaR:22 X-Proofpoint-ORIG-GUID: HCotoW17JhMe3q4YzU6BX9Utn6F7edHn X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfXwwiaAuk+trfL EbrGlf9ipqN3pG8thUKgFlYoNfYCvXSl8z9eTIltwcXTM/FNL9e3mYR6j2fiompuQE0KMypfRar 3frTdyx9AYLdgUqZ/WGJ4dSVN+377qsuJeGxGU4XKg7Ynso1WPcUc2NZjQG2O7WoqiEaQruhutw scNZcp0OMBmCe4GWVd1ivKSjdaSwK/bXtk3Rcmd3o9fYBfemwABtZEmUELESBZ76iRJrI7LXxHz khWGYVGklH1RL66lzTBiUuJgzst+5+hsv36kIgCyUqJpHyfMaEqhc5BQeXdYawBy0dNiyMDYCbd OqWSZ/4c2etVD8KZlJnzqiYS72C+83VmNL21iPKMDzPj4jmNEjc+uNrb4cGw97Elm+kMI2B3aBr +vHfqs+nd+5f3/jg8eKOOoMm4PJCmc/U5gG+0L4x7bqfep3iwpXxSbMCGvPTs/znUDIKiiStnb4 yNzEMq0H8+m47/MvIAA== X-Proofpoint-GUID: HCotoW17JhMe3q4YzU6BX9Utn6F7edHn 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-08_05,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 priorityscore=1501 adultscore=0 malwarescore=0 phishscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775676048571154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Taylor Simpson --- 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 Sat Apr 11 17:07:49 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=1775674192; cv=none; d=zohomail.com; s=zohoarc; b=ATvh3kwHo6fq7t/BSWDjHMp2tKdVjhnDqmP4e6a1mIojJNl4a3G+QetbBNafs3Q0AqkBp+ogTLCsG53jj2gdZi0de9xE+guv36M9scRe1SlAV2RJOpB94PxrCsktM+VSU0RjJmkusfl4BASkmm6aLXE+RsdTVk5WUNVej3u9QOM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775674192; 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=AtbTg75DeRDh6nHUuh5t89kHPWh43cfYAx/9su+MCfdh6L+aJzX3M+CCwCvEAQlrwN94+WMV6vtER3KiCgRZzXhFsBDzazyTwvNRxq1QlEUrHqABpejxPtAU1B62zzxFQNQWaQ03OhsNA9V+N9MII/rWu/BjG0bBMpQhAEV8xYI= 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 (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1775674192185346.6956996624873; Wed, 8 Apr 2026 11:49:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wAXx3-00062n-Id; Wed, 08 Apr 2026 14:48:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAXx1-0002mq-Oh for qemu-devel@nongnu.org; Wed, 08 Apr 2026 14:48:31 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wAVuC-0006qz-UE for qemu-devel@nongnu.org; Wed, 08 Apr 2026 12:37:30 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 638GC2Qq1072625 for ; Wed, 8 Apr 2026 16:37:28 GMT Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddtb382c4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 08 Apr 2026 16:37:27 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b0cf396c45so276215ad.1 for ; Wed, 08 Apr 2026 09:37:27 -0700 (PDT) Received: from hu-mathbern-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c1ff43d04sm4082006c88.4.2026.04.08.09.37.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2026 09:37:25 -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=Re+OKcOzbLd/RhMZ3AE5pWi8uTV 4Sz+TMaEPK7Sh51JyITNJORBjFKsyZ6ecXpP+qM53eXWGVNip+dmsqU9a+PEd/VK QNTjRfzMo1OX9X2TzsvtmtAdOq76lV1nbzBiFJp+9vPT5avYiEFztKhfXWpqDMtL c2Om+vgrs6T6DNqTq/O8XEG7WPBfgbxFTNBDNBVPxFkRdwX9zr8df7hvjI7qaNjA sQJWqoMgdn6XvfLqgyT4w1XTu13q7cQ+d8hTJZkrOhH871vUe8zmTzWZC/8UxMbC xxr47RDmWbnrmDIQY4+N0/xeTUDto/VgCPRpCIr7AzbZoSLtFoOIjmrwhcw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775666247; x=1776271047; 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=bm3xUdfDtw97inH6X2XLIFrFqp0UtGdg6eLJtE8y+7Ql8S8TjzjuLIQTG3gE/VZC9E FDDs44ZJC/6hrVpPm6zlUgfWCxAJaHzovT6jC8Mp+M+DdqdVcdGk8c/2eOuR93a9jgXu KnTN61ynJBeWEF/4R7wRUX8Db/JZ3uRayqa93fI1IVzvBSLkh0Eb6vFH7hJVed4aDjc9 0/QKAblHtuEPJ3MuYAoodCmc8HezzykjkWKxBTHtbLxqbScGxUlw+vVsfz9IId5svVRe m6S/IJn9SFXDkYTp4sNxKSKRrmXLq24ppSATBfe7eyYWjmqg+T2D1bUW4HCmLN8zhFZe +GIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775666247; x=1776271047; 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=dIUVUfi2lMqLF34OY76ABrYGj5DBpXWEuBxlB25+9Xz2kPuciE9vR21hkIcM7CisDZ /ziylEgKn0q1QcR9WXU6G3W0oiJFO3MonXpY8ee2IWqxphECl+EXj5xxpFy5AsmutgFP 7mMo/H/C04umDuInUDAVtYlqozUoq48CCQBn9V9jwqg/l7keriX1WLdPyU4M5It9xNqj C1fmww1WzOkiTtXauq2emjHoBGHpwcOco8n+ptXjNuplP1aauFUBVosgbd1rgOKY8Tif Cq1l91j2HvPbovBVKdVTVrQu5oF50jw8lzPto8VdLE57jGGkORJBy0/Exwyea41P4kko U0lw== X-Gm-Message-State: AOJu0YwiPsDUwGuqaFJLczH/fksZ3blslSOwhSn9+QCtZLKqvZ9EWyjS Ezs0mj735rki8NtqUFs9v4vZUBooyztlajAXo+Z0YHx8xxdx1/+fk4PwCdLBgQUFpqN4JnWrltK DFB+42S/lPc2nSOZz+m5paKW1hDZyhv6IXBEHXt6kqZ1cwVacG12uA6Cjem4fg2jvGSOw X-Gm-Gg: AeBDievDKEUBjY4rL1QHRVfEK3wNHGcRBiASp+TIDP0R8orH3mENRTrKU9LkQFlopCN HFN6os1mL/Q8sYWYSbZpLifdNzre0wef7KjZY+39x71jwtOaKjSWo5gQUHu4zDTMwVcPy5ZSTR5 tAJn06cNhJKZbY4A9eG/5KglsckQ5DtfJokl2R6+VH+8dqLL4R1hUeUKun9VIDvCGKU6Pm0AtPf dAekA4K3Ha7Lv16LEnh6DZ+3Kk/aKqSHcCGCLlVKtAXC/K9aHSX9iZoKykTs6wETTbGWz6blHFq vMlilQO4m2GNIgYqRoH6JZXxtj4SXl0Lo4vAhLfwM4gZHLY6it2pA36yNUe04rrjYyLG4lX6ZNS fpbDLee3FFGoyQAJSQtBLqPusEyufXdgqfG7oa1MZYjewWAgqQI5gb3hnbmu+Ka0QnkS+NHJMUx o4RE2JWOCU X-Received: by 2002:a05:7022:983:b0:128:d30f:c017 with SMTP id a92af1059eb24-12c28bac7c9mr111165c88.9.1775666246516; Wed, 08 Apr 2026 09:37:26 -0700 (PDT) X-Received: by 2002:a05:7022:983:b0:128:d30f:c017 with SMTP id a92af1059eb24-12c28bac7c9mr111135c88.9.1775666245627; Wed, 08 Apr 2026 09:37:25 -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 v3 16/16] tests/hexagon: add tests for HVX bfloat Date: Wed, 8 Apr 2026 09:37:07 -0700 Message-Id: <12d1c25d334b2b97d61b7d1d5b972a89ba235587.1775665981.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-Spam-Details-Enc: AW1haW4tMjYwNDA4MDE1NCBTYWx0ZWRfX+d/bVxmAjEzr 6R2ENKfr0wDHl7hYq05hHVA3UmwjtGmbhgKUQ5oSo94yUGJ9KVxKbpY1lyEklXuOY0gEAldH3La kwQkSOafMh7FveMPGfwT/eaxnpSi4e562Pjw7ZCtopNIMGzAYgVYBbFvS80MbL79hIXmaJJpLCD 0Pc/RKMzMWsgzgVPgWQBizvI0NOFYT6Ge9cCxsQh+urysOiTnFDEmQfyXU0rgyg7Mz+M4luufb1 cn69RvMjzOgNJaRj1d3I8n+7W3f8IzPo2qfMweHGunleyOYr/HyfmxgxyXCZl3UnVC6xgNzKFDz HKwup/Kf3vawY05wCNw7XKMrxSt6SbpoLuH1M3ImQnR6gNeW52fLWFNxEr1sxEECnUQmBeGUkZR 4X9alaL/5GVUbBF8AgJif952U5xKXIIccMDdm82dCIIyhRwqFeME82VuCgAtjixWNpcxva4fobt k/Io55bK8Ubeaj9F0fg== X-Authority-Analysis: v=2.4 cv=eKIjSnp1 c=1 sm=1 tr=0 ts=69d68447 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=5fiZ3uqFNM85zO-AtVUA:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-GUID: IQPQePKRhZrjKMUpxCYur3sk9guEHzJH X-Proofpoint-ORIG-GUID: IQPQePKRhZrjKMUpxCYur3sk9guEHzJH 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-08_05,2026-04-08_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 clxscore=1015 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604080154 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=matheus.bernardino@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1775674192324158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Matheus Tavares Bernardino Reviewed-by: Taylor Simpson --- 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