From nobody Fri Oct 23 22:16:17 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=1792693997; cv=none; d=zohomail.com; s=zohoarc; b=jh4jVux9d3u1eDxhAmtNwixZjOWVxrxIMIk0Zu+VytqrqFN4FIGvWpslF5YsMGpY2rQDqnNK4RHNB8pAbN5xBU1KOfaEM60GKAw7efwnxUZ6QfggxJb9CM8H0Lsns2lQmPA+NuMGGkDj0ZnlMf8Qsb4CuXJfbdkjZh5w1EyUd0E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792693997; h=Content-Type: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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2hxDtN+wsubeZBUd54UCnU0Jho0DVSwQCsLM3NWAX+A=; b=UFObwJBEKfWLQe5Sgodd5xnuPsLuRwScjeCna7a4+z9hIAWp7SVTJekgKvoKk/MHz6EY14XHC7ChLKYEEhkbTY2kkABmcywvOtof2yPfeDOPx/isPTu0szUaAXuo44Gk4W0uZZlPQYB9uMsDkmGn+M8o1MLSUrw/ApUXz2QReAM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792693997174218.89735534457031; Thu, 22 Oct 2026 11:33:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xJxac-0006E2-RP; Thu, 22 Oct 2026 14:32: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 1xJxa0-0006Az-4U for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:31:56 -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 1xJxZy-0002ck-GR for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:31:55 -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 69MHtmsI388899 for ; Thu, 22 Oct 2026 18:31:53 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hfewq42sf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 22 Oct 2026 18:31:53 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-3662e7a9299so401187eec.1 for ; Thu, 22 Oct 2026 11:31:52 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-369d8f8eaf9sm44962eec.16.2026.10.22.11.31.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 11:31:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 2hxDtN+wsubeZBUd54UCnU0Jho0DVSwQCsLM3NWAX+A=; b=bHFwr1ypWRpUDum5 69XogSyvxJx0SMnqs0HeL0vI2wfED9veUX5P6pQThJnoOlmScLqNNdo5tvI5kdjH 2ZqZ9RAk4g3xjFIMRf6b+Gwhc8GnuPaC/8dvO7WkEGCp/Medfo5n4lZ2GinPjswk EZ/WJQ7RTo4Ai4m1GGo+NQXBb4zmuR4X6qoz+MPjdD7tNJBQUEVKP5eTcqV4BSr5 4aNKu05XkwEbXIANhNylxHP7YFtKyxGb+5RFN7ExU8p4D3bDnZ/USg/UniE99O2I gw5UCf68TzsYUOPepEcyrBAhiOWe72fh4lyNIE4MAbRn8yekeNvy+ocxKvnHkD4S Qouhiw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1792693912; x=1793298712; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=2hxDtN+wsubeZBUd54UCnU0Jho0DVSwQCsLM3NWAX+A=; b=cYCQYzbH1kxit+gnzWAGxyTW1DK9WUSet9nU2pzMnPIpHqjfKkW6DC18Faki7NJZjn Euk14E1dC6kOQwHD0dOQ28UK/NEGGIpqNwge+Oz6jxwLKlD8nQytMruc1gesGCYnb+yB mcpLLZwu3nMAvqWWb9YyTWJnKatN6Dcl8oe/5OrQ0rcXuCKnpSJsJufWfx2+UtMW5h9P CT+DLXyk/6JFfFodQPtVyWBBqmvqLBsgWD/yf8O3oMsLHhvcoehvR7Y3iDtbA7msoC54 AADx96hlJxmET7ZR1EspUdlrRZTKlrulAZUulpHE8vYcgCKNkfKbLephk81TvBp/67gP TX8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792693912; x=1793298712; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=2hxDtN+wsubeZBUd54UCnU0Jho0DVSwQCsLM3NWAX+A=; b=tEJaoxcEvkusr7ooxVxlHy/wRv24Qq/SC8gp8QnwWMvCyM47xgGHWDhHMfwxTR6Vdj L2GajXs7M/giflfNqJQ6ioLjnRuKn0zVMLc25qToFTwVYPdsrv9CrMkmpqMcYLCAvWCl ikgvsQfCly0Vjm0UGM3JOnkJLuaL1xMMly5FaQLwo7Wy36XiroemM3MFnWQpiI0k76Po 1ns+p9jZ9ItylScJ9pim++B+GEPfc/pXKkK0fOJTjlmKZ0Kg6+6dN17h2z+qg/w6XzHu niUYU4sV1fHCgzuOhJxk7j4n8xDvCpFDCevWxNzu8o7tlvUVlDHZsRy3xBR8bPIzsPZ4 +f7g== X-Gm-Message-State: AFq9FYL2S/L40opVve5iX2Czk43uqgc1nMEJKLajZ/i/zXqew78Wk8/l 7LUE1ysdiRv5Q9KpPxQ9kshC094+f7GBzLgpLsP6bfiK3u54QHRMnU9iSes8OX9Fwf9kqAtaabq gyB+hUz1xh30u2JV3bKD2jkK1Y+uq9LxIf8dWkZnJAm2ZVG3QMyHk997OsW/u3tKO0w== X-Gm-Gg: AYBFou3eh0/1uvAoAoszfs4GMxhz6sQCVw81xo34zCxvYAjRRTfntSswQ6rkylgMJoH cGSoWnmMwHa/cwmI9EJSC+kSL1BC1e8HYlNQJ3L/ihj2RZTGWRZwPrWoAldqXO4DVs4ZO4Hb8hD /Kw9niuitO+2OmAj687xHYQlrJ+DEB5ADOIBNPgmTOSTEuiK8IkscDxaEORGGClC4+AVyLqHQbe 7LRs0Tv8dl9fZjelwBg8BNXn3L4ymPTtviVS9mtdOcxPYpDH+inWgKxZWJyaGXSZE7NBrnIhRep HFlmm3pn+GYy9oMTbFVi982TSTIXPbvgBfY+O35L4P9kpUMc7n1SLqBvRoQh+DwEck9LyM/vgtX 84ZYVKtKDX5mfUuRIu7VE5WHz0NoVBgbAN41AIrMXVUJxg5C+ X-Received: by 2002:a05:7300:d090:b0:369:4c3f:8a5 with SMTP id 5a478bee46e88-3694c3f09bfmr2782607eec.14.1792693911995; Thu, 22 Oct 2026 11:31:51 -0700 (PDT) X-Received: by 2002:a05:7300:d090:b0:369:4c3f:8a5 with SMTP id 5a478bee46e88-3694c3f09bfmr2782569eec.14.1792693911405; Thu, 22 Oct 2026 11:31:51 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: Brian Cain , Anton Johansson , Pierrick Bouvier , Helge Deller , Mohamed Mediouni , Alessandro Di Federico , Laurent Vivier , Marco Liebel Subject: [PATCH v4 01/11] target/hexagon: sort tag_rev_info entries by version Date: Thu, 22 Oct 2026 11:31:37 -0700 Message-Id: <20261022183147.1535585-2-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> References: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: KYsyJ20Xer7hBdKTE3kkC6TwyJLAdgLn X-Proofpoint-ORIG-GUID: KYsyJ20Xer7hBdKTE3kkC6TwyJLAdgLn X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX3lkpcHDnsVgu /F+C1RdOQTLoi+wI+SSBSJlK9f3bnaLTb1NacRWJiYz24i1kmc1TXQlHtNbw15cOmz7mTjSv7Nf pV310prN6VfcC4sCNVdXFWiGg31SwQ0= X-Authority-Analysis: v=2.4 cv=G4OJgNk5 c=1 sm=1 tr=0 ts=6ada5699 cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=XH382VzwAMdzo9DkozgA:9 a=QEXdDO2ut3YA:10 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfXw8fAP2r3gTAO WbqU3c/iWMZ0OjhuOKwzCP9AUQHEP0/hx/yKKc6u8Sq8ANsUPqsU05kYloatHEgg/N4KSFJZbGe HuTMGrMXY3ASUaZ/y+Meeh6AjROyDkcPVNTSn1Rse16xDNzTNNbczwIe1bavH5+MTbE7st3RZL6 KTU1gXF1QsPwrJjdzKBqp21UjtJX3wkSjqEeFh6WTpQ8XhU6KLM8ndoK8vFmAiAeBl5MCsMXExu UC9yBxPAdAeF5ZlGLaiumlyark0ic57yFJnKNSsAQB4vkJsCiCFYv4E4OJN0qPgXsUI63PTmrOd wlACDaqf3r2zauG+7Y3xMHkMOU7boxKMcqVAr+7XzgvOJ32FYQ1ZwE62zda14sO3qbO3aTVGBMT ra8q0mytfZaiJr2+t8FgxAOQD/7HrTiKvOrJ6n2pcbx6EupJzgzS/MGjTK2Bfq4mDO4SAS3jwF7 fSnUrMc3mZFMKNlTomw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.138,FMLib:17.12.100.49 definitions=2026-10-22_06,2026-10-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 adultscore=0 malwarescore=0 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610220073 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@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, 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: 1792693999562158500 The V79 QFloat entries were placed after the V81 entries. Move them before the V81 block, and group V6_vconv_bf_qf32 with the other V81 entries. No functional change. Reviewed-by: Pierrick Bouvier Reviewed-by: Marco Liebel Signed-off-by: Brian Cain --- target/hexagon/tag_rev_info.c.inc | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/target/hexagon/tag_rev_info.c.inc b/target/hexagon/tag_rev_inf= o.c.inc index 41ce3cb572f..b380a6b44ae 100644 --- a/target/hexagon/tag_rev_info.c.inc +++ b/target/hexagon/tag_rev_info.c.inc @@ -643,21 +643,6 @@ static const struct tag_rev_info tag_rev_info[XX_LAST_= OPCODE] =3D { [Y2_dcfetchbo_nt] =3D { .introduced =3D HEX_VER_V79, .removed =3D HEX_= VER_NONE }, [Y2_dczeroa_nt] =3D { .introduced =3D HEX_VER_V79, .removed =3D HEX_VE= R_NONE }, =20 - [Y2_tlbpp] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_NON= E }, - - [V6_valign4] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_N= ONE }, - [V6_veqhf] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_NON= E }, - [V6_veqhf_and] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER= _NONE }, - [V6_veqhf_or] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_= NONE }, - [V6_veqhf_xor] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER= _NONE }, - [V6_veqsf] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_NON= E }, - [V6_veqsf_and] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER= _NONE }, - [V6_veqsf_or] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_= NONE }, - [V6_veqsf_xor] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER= _NONE }, - [V6_vconv_h_hf_rnd] =3D { - .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_NONE - }, - [V6_get_qfext] =3D { .introduced =3D HEX_VER_V79, .removed =3D HEX_VER= _NONE }, [V6_get_qfext_oracc] =3D { .introduced =3D HEX_VER_V79, .removed =3D HEX_VER_NONE @@ -671,7 +656,6 @@ static const struct tag_rev_info tag_rev_info[XX_LAST_O= PCODE] =3D { .introduced =3D HEX_VER_V79, .removed =3D HEX_VER_NONE }, [V6_vabs_qf32_sf] =3D { .introduced =3D HEX_VER_V79, .removed =3D HEX_= VER_NONE }, - [V6_vconv_bf_qf32] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX= _VER_NONE }, [V6_vconv_qf16_hf] =3D { .introduced =3D HEX_VER_V79, .removed =3D HEX= _VER_NONE }, [V6_vconv_qf16_qf16] =3D { .introduced =3D HEX_VER_V79, .removed =3D HEX_VER_NONE @@ -698,6 +682,22 @@ static const struct tag_rev_info tag_rev_info[XX_LAST_= OPCODE] =3D { [V6_vneg_qf32_sf] =3D { .introduced =3D HEX_VER_V79, .removed =3D HEX_= VER_NONE }, [V6_vsub_hf_mix] =3D { .introduced =3D HEX_VER_V79, .removed =3D HEX_V= ER_NONE }, [V6_vsub_sf_mix] =3D { .introduced =3D HEX_VER_V79, .removed =3D HEX_V= ER_NONE }, + + [Y2_tlbpp] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_NON= E }, + + [V6_valign4] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_N= ONE }, + [V6_veqhf] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_NON= E }, + [V6_veqhf_and] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER= _NONE }, + [V6_veqhf_or] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_= NONE }, + [V6_veqhf_xor] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER= _NONE }, + [V6_veqsf] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_NON= E }, + [V6_veqsf_and] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER= _NONE }, + [V6_veqsf_or] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_= NONE }, + [V6_veqsf_xor] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER= _NONE }, + [V6_vconv_h_hf_rnd] =3D { + .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_NONE + }, + [V6_vconv_bf_qf32] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX= _VER_NONE }, }; =20 #endif /* HEXAGON_TAG_ARCH_TABLE_H */ --=20 2.34.1 From nobody Fri Oct 23 22:16:17 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=1792694073; cv=none; d=zohomail.com; s=zohoarc; b=XJR7VxQRBPbJgdh5qoHEIBMiMbm/1qtkY/sx2WtroTbEntSbfp6c46vaeNFfJgsfoKLWFu5/0ClkZMwIZqgU5Q0Vl6QMPYiTTljS7MtrtK3Z4dnM9yQEbCcAW81CjN+PmZPAu4j+pIxuo2ggzfaLu1IBtMzG0QMtf+ThVzmZ6KY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792694073; h=Content-Type: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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HH0OoexitI9I4wIBBsFHRBvPau94eWbdbLKDtFWOYtQ=; b=g8MMgXjmqOASRMrEDVvNKu7L1ACP17VinjSYYLWPqsQ3X8JCPPBT0zGbN80Zpv8U0qN1gO1/7fsOzl0KE+VMkjyW8OUYXvcaNX9Es3UP/kBWNgodZTTo35qQ3Q+je8DYcVBABPxG1EP2FEKk52SebZq54hMpY4G+MPRttp4LZwA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792694073461356.57434140760165; Thu, 22 Oct 2026 11:34:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xJxb1-0006HC-Fb; Thu, 22 Oct 2026 14:33:04 -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 1xJxa2-0006BH-Eq for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:31:58 -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 1xJxa0-0002cz-Ib for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:31:58 -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 69MHtSc0387583 for ; Thu, 22 Oct 2026 18:31:55 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hfewq42sq-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 22 Oct 2026 18:31:54 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-351788121cfso393814eec.0 for ; Thu, 22 Oct 2026 11:31:54 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-369d8f8eaf9sm44962eec.16.2026.10.22.11.31.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 11:31:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= HH0OoexitI9I4wIBBsFHRBvPau94eWbdbLKDtFWOYtQ=; b=fj1NBCnyAfvSYeoN Me8TPE8iU22cmedMdJH1oF/UnGQSPWzxAKgCpsqBYfoEbfmCYI0lvwPOF+iX6hkM 5t2TcNxPYHASAY1zHMXJ49lCMnlh66boV92LREh0VemS4kJD0LtMBniiOI4AB5P1 a51Wnp6bPHSuCE0n4fZKOUJa/QyFzrLk0O2HMbE2+ZUjZZgr6ohj9MXIX1qicWLU AK5jrz8nzu4Q2IRQ9qPLVY2e3qZcvyElGTqcLJ+uaVRheQGsNbBCANJn50oSfbfE rw1yyVwWaBLsE2KFZpXPFawReYeL7iRscwAwTBKrqFD4X1JwmB1zkKQLH94g5Tt8 LhzrAw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1792693914; x=1793298714; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=HH0OoexitI9I4wIBBsFHRBvPau94eWbdbLKDtFWOYtQ=; b=dZk5MOfqxRTNF+WThwWpIUgPrSgsVpn8w8w0XUnkJK6XeGHGMOiES8Fn4h7Xn/S20b s6u/iSI32tc9IYfYPfUfUtAp+SmcQ+e98VnRrZFhZj5VUOKp0JQy1blWRSKtltESlkaY Gm8zs8x5ES76gGxp1GaZcOZcXy6B400wUo+Mja3qlEuHJn0ysOe9U4X5CzCJqQqqQnHS 1bi/br9kRmRId33/89XDQVXzJgqjZePG9DLbF/VXVsUwRMQsJBY87zJU4qoRwz1+Gszq CaPtPTBdOuFJuSGMxFJdOhwgGDIDE0gdtJZ0KpglIGwRMgaLYXqUaJgT5vcrTPwhWr2F L6yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792693914; x=1793298714; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=HH0OoexitI9I4wIBBsFHRBvPau94eWbdbLKDtFWOYtQ=; b=qgiuOmTVpn1svbJQ60qrABr8/5jmru14vD8w7SpniBwCjNjZexd4DusCGgINBe6zDR f97nUusY0wXbgUaP4i2ZWerztX7nH1jVX6Up4AvLuleCTTp0URtI+9oBTaP1MkVwkbTo PzF3WFOnQFJW7vauZIPMcU2EiCTskcrevTtyyfqnt2vyr4czlpjoGYxd9vbIJGJWqGmk 7NSoaEleSxumjGLr37SBACWQXS5Q4LtwlCmJ6Xk//+63ek39LUoG9nKTh0e3uJwTBsVE Irpz9LbaauYEAzxAqZPUnrIXRxiP8jLRJnObZZLFuKWun+D4hB3g6/nr/r45pLk+6O2+ Ooeg== X-Gm-Message-State: AFq9FYKrDdnXAG4Yq4txEKBWf4ZDdG+5x4MQfRXRt7jz3QN4qpV/M9vg fJCygryVnqP4ggDmDMpVuL/RbgRwyAl5PlkDrGfrV/73wJUIq0vJfFTCaYGbtyZvvxm3N3uK3xk SUj/vEzRLSWdDehCAjGH+a4rrJsV3fAKbCcDFqy48KAcopWfAXa6jweAuKi8yVxPnwQ== X-Gm-Gg: AYBFou1uEPQDjNr2G1B0WZnKrVWYdn3J3fMe1qgzVEv1NREdW9XPrq9Oj+SWguvEfTI S9TM+VxF/VixH9j0Lc5pRARIvWHMoQ08EszzQ9v3c42PGqXe1zI6Fw9ct4I12Y85DEZAe8T1syh pNtn7gPN1RvZqkqb8KbXyD8PyGbPTPu9syyTq2W3e18SajhFdvI8p28sGvujAG9reyiPmn/7gTH v75nzYJZiNQPZTlMWhS7XSmPaqxjUGXf6PrZr7HArhz4zYG9l1H5nv08rBEOmXqVocxElOs1SDY DG1Be5NLVCm3CWI8Al5/0GWbZ3XOt4dcc6KUf/oFzvtRXb/VHVeosxP7phXZ3zrY31TFL5sE+QL wLHsxgqgAABt//1/iiKd6zjM6gJk3oJ9/U4J1zg6kFpGNZX3l X-Received: by 2002:a05:7301:9a8d:b0:35f:f0:8edf with SMTP id 5a478bee46e88-3674d84d2aamr6924551eec.13.1792693913869; Thu, 22 Oct 2026 11:31:53 -0700 (PDT) X-Received: by 2002:a05:7301:9a8d:b0:35f:f0:8edf with SMTP id 5a478bee46e88-3674d84d2aamr6924521eec.13.1792693913223; Thu, 22 Oct 2026 11:31:53 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: Brian Cain , Anton Johansson , Pierrick Bouvier , Helge Deller , Mohamed Mediouni , Alessandro Di Federico , Laurent Vivier , Marco Liebel Subject: [PATCH v4 02/11] Hexagon: add v85 CPU model Date: Thu, 22 Oct 2026 11:31:38 -0700 Message-Id: <20261022183147.1535585-3-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> References: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: A1WE6waRB4gm40xDIrQl5IsGD1vPnLmk X-Proofpoint-ORIG-GUID: A1WE6waRB4gm40xDIrQl5IsGD1vPnLmk X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX5H9SGaNdXCXT PLDOoAJOtxBAPiCHRdAxOorsVRgV8pg5eAXPvhwi/fJ6P0c9LOGrmeKWqYvVoMeMtLNljthe2/V ziQ+L9LezUhFkaP/ipd/d5PGyE5AVG4= X-Authority-Analysis: v=2.4 cv=G4OJgNk5 c=1 sm=1 tr=0 ts=6ada569a cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=6RDhHJMOdHl8aUYkYD8A:9 a=QEXdDO2ut3YA:10 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX97fC8utlRQIr B/zsFlz0xyeHvjp4yOfOwzTqKnQoNbUV9yUNSfrBY6n8qpbnTHg0Ea2OUamlulsEgVaVtF5PnfT B5k1FuXtp43upjjWPK33+/Id/BOEm5oalHQAVzIa07VgIZgGbEAYkwkJ9QpqRMgTMmKBAN1T+vC ytnXrMPjYMyG8rZ/GhQUzckMREsT2zJrixatV1TP9YcgQ1KLGr2WVbk9Kb+V+WBiDne20mbAbyo 8kYEyYZMd5bKJYbXCscWYzrmxFhk7aLCdj6A+IqJWcTe3mRHy0OozhBWjLHrGHoHWmMzxmz21Eb 4pcHWDnT2SBZ5Tbwo0ud2ZVXBRaiNirsWQIlGigETm7HyL+gmOvtOZCcpIeZJIBmqmo0PVUtQIs LslZbLH6IzkzBzcYbh//Ro9LCFqeVl00QPJ4sY/KuG0N/xw4LHKtVpCrbDc7tk3DUnWkpPv/HLV cccbKxEDvKUeubfK+Zw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.138,FMLib:17.12.100.49 definitions=2026-10-22_06,2026-10-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 adultscore=0 malwarescore=0 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610220073 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@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, 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: 1792694074417158500 Reviewed-by: Pierrick Bouvier Reviewed-by: Marco Liebel Signed-off-by: Brian Cain --- docs/system/hexagon/emulation.rst | 2 +- target/hexagon/cpu-qom.h | 4 ++++ linux-user/hexagon/elfload.c | 4 ++++ target/hexagon/cpu.c | 2 ++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/system/hexagon/emulation.rst b/docs/system/hexagon/emulat= ion.rst index 12385311aa4..fb57c77ae90 100644 --- a/docs/system/hexagon/emulation.rst +++ b/docs/system/hexagon/emulation.rst @@ -6,7 +6,7 @@ Hexagon CPU architecture support =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D =20 QEMU's TCG emulation includes support for v65, v66, v67, v68, v69, v71, v7= 3, -v75, v77, v79, v81. +v75, v77, v79, v81, v83, v85. It also has support for the following architecture extensions: =20 - HVX (Hexagon Vector eXtensions) diff --git a/target/hexagon/cpu-qom.h b/target/hexagon/cpu-qom.h index 2bfa4d5d0fc..d4c8413ded3 100644 --- a/target/hexagon/cpu-qom.h +++ b/target/hexagon/cpu-qom.h @@ -28,6 +28,8 @@ typedef enum { HEX_VER_V75 =3D 0x75, HEX_VER_V79 =3D 0x79, HEX_VER_V81 =3D 0x81, + HEX_VER_V83 =3D 0x83, + HEX_VER_V85 =3D 0x85, HEX_VER_ANY =3D 0xff, } HexagonVersion; =20 @@ -55,6 +57,8 @@ typedef struct { #define TYPE_HEXAGON_CPU_V75 HEXAGON_CPU_TYPE_NAME("v75") #define TYPE_HEXAGON_CPU_V79 HEXAGON_CPU_TYPE_NAME("v79") #define TYPE_HEXAGON_CPU_V81 HEXAGON_CPU_TYPE_NAME("v81") +#define TYPE_HEXAGON_CPU_V83 HEXAGON_CPU_TYPE_NAME("v83") +#define TYPE_HEXAGON_CPU_V85 HEXAGON_CPU_TYPE_NAME("v85") =20 OBJECT_DECLARE_CPU_TYPE(HexagonCPU, HexagonCPUClass, HEXAGON_CPU) =20 diff --git a/linux-user/hexagon/elfload.c b/linux-user/hexagon/elfload.c index 3a6ba4e1304..9f98ad8fb86 100644 --- a/linux-user/hexagon/elfload.c +++ b/linux-user/hexagon/elfload.c @@ -113,6 +113,10 @@ const char *get_elf_cpu_model(uint32_t eflags) return "v79"; case 0x81: return "v81"; + case 0x83: + return "v83"; + case 0x85: + return "v85"; } =20 err =3D snprintf(buf, sizeof(buf), "unknown (0x%x)", eflags); diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index f20d6de6f63..1e3df5d0d03 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -934,6 +934,8 @@ static const TypeInfo hexagon_cpu_type_infos[] =3D { DEFINE_CPU(TYPE_HEXAGON_CPU_V75, HEX_VER_V75), DEFINE_CPU(TYPE_HEXAGON_CPU_V79, HEX_VER_V79), DEFINE_CPU(TYPE_HEXAGON_CPU_V81, HEX_VER_V81), + DEFINE_CPU(TYPE_HEXAGON_CPU_V83, HEX_VER_V83), + DEFINE_CPU(TYPE_HEXAGON_CPU_V85, HEX_VER_V85), }; =20 DEFINE_TYPES(hexagon_cpu_type_infos) --=20 2.34.1 From nobody Fri Oct 23 22:16:17 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=1792694086; cv=none; d=zohomail.com; s=zohoarc; b=Cd40smS2SGha0apnMao9lFl/Tv3a24d2vx+jRar+0yf7TRMDfAXqoUSH7WD+qd+pWdlnosksNcBd+sifPMjzDiDBUIvsuSDmdsxjmxw51Qm+IfDbekgLXWRH8qxB7aOj3DzQyQT9RaFQKA7XJ4ZkN6v6Fb+1cjwc4NpHrr7or0w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792694086; h=Content-Type: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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Kg00cOBQnh7N6nKBceDjWzJVE82xWv+PwcMNpH29WyA=; b=CTwW3In177PXc0e0+kVZZUsaWcGmzRxx9mBNP2PUo4waGe0gm1+yAQR4Y8aIpzX9Fl3vWpB/hjwTC1brp89enkh9s03McExIQhGdhp5KMHVacUKnl75zDFLbIt6R7ejPDKX3JoauEXL2+gTRjR3drko6oWBte6hhdhlOGhf/kME= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792694086515869.1618847547649; Thu, 22 Oct 2026 11:34:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xJxbZ-0006WM-W2; Thu, 22 Oct 2026 14:33: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 1xJxa4-0006BU-8i for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:09 -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 1xJxa2-0002dK-5o for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:31:59 -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 69MIHeph1495663 for ; Thu, 22 Oct 2026 18:31:56 GMT Received: from mail-dy1-f198.google.com (mail-dy1-f198.google.com [74.125.82.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hfqmr81vy-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 22 Oct 2026 18:31:56 +0000 (GMT) Received: by mail-dy1-f198.google.com with SMTP id 5a478bee46e88-3510d0baf63so227872eec.1 for ; Thu, 22 Oct 2026 11:31:56 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-369d8f8eaf9sm44962eec.16.2026.10.22.11.31.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 11:31:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Kg00cOBQnh7N6nKBceDjWzJVE82xWv+PwcMNpH29WyA=; b=WGC3Llq+6QCOfn5H dADE9Ksbqjedq4Dq75HO57Fms0oGg+ezOBgw3nCGy+fyEHsw5vRcCe91F0Rz7nZP e8+vrP1o/TW8nzQpf3nQ7QrFJMjgp5mUvXTNJhs2sSVvpg61FtIFa0pssB76uOc/ MB/Yt0ob0/0sRUmnftJKS3b8ust2Yr0CayoCSNgf+JV599FWLpsllUPEJIx5/pvo FrIcNfmp1D0fiYcxsBaucKtaj3u/xz2CA9BjLIjCD/fFnuFVs2qoWSEya/L9bf35 DM+Q2WR4vkoYZXu0BM3mMPRM7AO2YCtu2GYRoIDI5IX1FSSEmA7J7iFZfIpTuEct iMkWnw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1792693916; x=1793298716; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Kg00cOBQnh7N6nKBceDjWzJVE82xWv+PwcMNpH29WyA=; b=jdq+BN0yvAbR4IN7L+umCRCN5j0mZd6M3hWVBv0pQ+cieQ2qKjfnUzZ9A8xPIBZlOt ChJYe6rP0KQZ129qXoKuSLNVdp/ZibIQmV5bl8p5GUBIs5scPX5OXdSjJEjDgwpFiIxL 0dXGg48ZV7Qca0wjkmPAcVxzZhAWxzkorCC2JqFScD26LrfIZC7Q6OKMwkcKnLFf/uKD BdWWraq6kBvEYX+0atXhCcZ/e2P7l6jxm5xCzRyumU7mVbWTV3B7C3wNDMjKY/R/zQwh 7yC3NDe7GbdrzIv05WcPzrQbkrq0jZR6AWuXA69RYlMVvjGlOgsb1HAKYkmvrueSaas1 CSbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792693916; x=1793298716; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Kg00cOBQnh7N6nKBceDjWzJVE82xWv+PwcMNpH29WyA=; b=ClFU7b0waymHCBHY8UZ6mwZcv7kAr02q2WSoGwB23qSszOFFFHIoKJVZKgiTK87XXx kQAqZoriF0bJbFzZJh/lkbqr0K5dH86xtSHCa9qQhsekfFhpWs7RyR8/t9RRMFlQdmo2 ZyhcBDTtZWpJpJ1KZfg6JuAjFD013HqAnjpACrpPeoHl1qL7JPKrYpREzkGlj3CAiiR5 nXIZcuAoT0/WVfC2re2Nw773evPy2B3pAWeZkVgm+jgiluSAMp8Omukr73DZqP/Xi4OU e5ihfMoc5CGYhDZPYC/vSXETBPKBmK4g/i56vR30zeyNFk3zF3+XKrIMJOF9R9lzpZSk YiWA== X-Gm-Message-State: AFq9FYKGOrs/yWtFbgACC+wXEHzkXJvRpFq6RXdeywCPPiU8lD3zvFV9 QWGYFfC4Shx9Zc8kG7yVJjFlHV2TleWnWSHlrSolP9vTFpmBlt+zc1hMnL4Ax7fpgZYzSBqkV0N ZVq66JhMoj75vJigvNBxYpkUe/KBPaPNoficwCzpPKMaAt7f2Jz4XmtsKfj1ZcQIufA== X-Gm-Gg: AYBFou0PYi/bV6vnd0ruYBSI1xDH0OaoKQ+8T3Be24n9E6DLGkSfRaL/WsE2hgywITC q4Xn2yxRbVIXKgpuHcREXOYa1VfV0ZMsTkwrM3idw76KhLBGFN7AWLKJAYbYSoqHttm4TO6eNzR XYXOvz0ygAU9ym0amTd5MCFR3S4dn9OvdP+ogDiMUoywa8cs47cVs/VBtnAVvJ0chx4nPRJxiKh JlWzQzQJktFkg0LieK0L3gom9te+myYNCUDIFzQX3bYo/T0TBVU3xpTDLBaFjrq+4c7AR/N10/6 8XUsYN4UnrpzgMkeSB+bIitLkg94HgARXwZ4XqTXC8gOKuMIbx6/OVsnU2mCOgjnBSc84EGXlSU /X9CwKEyO5DyNaKDAozwcP1LuGXCqwbaFiVGdOROIrqmgrCir X-Received: by 2002:a05:7300:3398:b0:35e:a225:3ba6 with SMTP id 5a478bee46e88-3674c531737mr7496849eec.13.1792693915866; Thu, 22 Oct 2026 11:31:55 -0700 (PDT) X-Received: by 2002:a05:7300:3398:b0:35e:a225:3ba6 with SMTP id 5a478bee46e88-3674c531737mr7496827eec.13.1792693915338; Thu, 22 Oct 2026 11:31:55 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: Brian Cain , Anton Johansson , Pierrick Bouvier , Helge Deller , Mohamed Mediouni , Alessandro Di Federico , Laurent Vivier , Marco Liebel Subject: [PATCH v4 03/11] hw/hexagon: add v85 machines Date: Thu, 22 Oct 2026 11:31:39 -0700 Message-Id: <20261022183147.1535585-4-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> References: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: KEskXH1RupcICcsdgd_v6aGg6CoaUJbu X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX9fUXwxTOvUsh ygrcSwRG+HhRp9E3NDkhItTC7reHrFKSVYeEcf2Dgk0KDjoPB6wNNJcLDY9VV5o/sjRW2SDDs5z W8H3nMh1ouDWGxGtnJmhGaFzwTmXDw4= X-Authority-Analysis: v=2.4 cv=VNZIDNPX c=1 sm=1 tr=0 ts=6ada569c cx=c_pps a=wEP8DlPgTf/vqF+yE6f9lg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=h1jwoGUY5UfOxo2v3TEA:9 a=QEXdDO2ut3YA:10 a=bBxd6f-gb0O0v-kibOvt:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX11rG4qU0XVTK MX4CY02uhx35uEN6Py5QyKACQDQ3j3GwQDhEMHlkGesqYZT7ZGG6Lfm3NKrmU/g41GTTujnvnPD 0Y97iDiyJ2SAKe7kfqrKHfvVhrFTXEft4k21hysjLboCn7ov55teyihL+eqXBU++jLA4Bv8UoMZ I8eQfwxhuwPSIidWKD2C8SIR4N0mrlklIb4BXvn62B4c7mFNh2Wbij8m68WuEmuJAMr0iyCrb6s FsMshk6rXTHrO7ZjH9ogUro+f7vGED/stPFElhcwyeFF1k4jpDL66//izJNRb/0rVSNqkIGkpIg FqLyUxxTZ19u7NfGDKw3Y9TpDLZtnLUmPlFq0nHPXgzEcQ8vuoeLGXmLMULcMwz56/Buhxfl2s9 PFEMG4WKNJKHeuZafkZg96JubxCZbwZAAvP+PuiR6P4w56zZKxAxwvjBVsDP19nJB/71oX2TaYs LxXQ1oiNmIcgRw3az/Q== X-Proofpoint-ORIG-GUID: KEskXH1RupcICcsdgd_v6aGg6CoaUJbu X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.138,FMLib:17.12.100.49 definitions=2026-10-22_06,2026-10-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 bulkscore=0 adultscore=0 phishscore=0 impostorscore=0 spamscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610220073 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@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, 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: 1792694088549158500 Reviewed-by: Pierrick Bouvier Reviewed-by: Marco Liebel Signed-off-by: Brian Cain --- include/hw/hexagon/hexagon.h | 6 ++-- hw/hexagon/machine_cfg_v85na_1.h.inc | 50 +++++++++++++++++++++++++++ hw/hexagon/machine_cfg_v85qa_1.h.inc | 51 ++++++++++++++++++++++++++++ hw/hexagon/hexagon_dsp.c | 48 +++++++++++++++++++++++++- 4 files changed, 152 insertions(+), 3 deletions(-) create mode 100644 hw/hexagon/machine_cfg_v85na_1.h.inc create mode 100644 hw/hexagon/machine_cfg_v85qa_1.h.inc diff --git a/include/hw/hexagon/hexagon.h b/include/hw/hexagon/hexagon.h index 9b5d33ffc3b..ffd9967330f 100644 --- a/include/hw/hexagon/hexagon.h +++ b/include/hw/hexagon/hexagon.h @@ -29,9 +29,11 @@ typedef enum { v73m_rev =3D 0xcc73, v81_rev =3D 0x8781, v81dgb_1_rev =3D 0xcc81, + v85qa_1_rev =3D 0x8185, + v85na_1_rev =3D 0x8085, } Rev_t; -#define HEXAGON_LATEST_REV v73 -#define HEXAGON_LATEST_REV_UPPER V73 +#define HEXAGON_LATEST_REV v85 +#define HEXAGON_LATEST_REV_UPPER V85 =20 /* * Config table address bases represent bits [35:16]. diff --git a/hw/hexagon/machine_cfg_v85na_1.h.inc b/hw/hexagon/machine_cfg_= v85na_1.h.inc new file mode 100644 index 00000000000..f0ea1be1039 --- /dev/null +++ b/hw/hexagon/machine_cfg_v85na_1.h.inc @@ -0,0 +1,50 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +static const struct hexagon_machine_config v85na_1 =3D { + .cfgbase =3D 0xd8180000, + .l2tcm_size =3D 0x00000000, + .l2vic_base =3D 0xfc910000, + .l2vic_size =3D 0x00001000, + .csr_base =3D 0xfc900000, + .qtmr_region =3D 0xfc921000, + .cfgtable =3D { + .l2tcm_base =3D 0x0000d800, + .subsystem_base =3D 0x00002000, + .etm_base =3D 0x0000d819, + .l2cfg_base =3D 0x0000d81a, + .reserved1 =3D 0x0000d81b, + .l1s0_base =3D 0x0000d900, + .fastl2vic_base =3D 0x0000d81e, + .jtlb_size_entries =3D 0x00000080, + .coproc_present =3D 0x0000001d, + .ext_contexts =3D 0x00000008, + .vtcm_base =3D 0x0000d900, + .vtcm_size_kb =3D 0x00003000, + .l2tag_size =3D 0x00000400, + .l2ecomem_size =3D 0x00000400, + .thread_enable_mask =3D 0x00000fff, + .l2line_size =3D 0x00000080, + .l2itcm_base =3D 0x0000d800, + .dma_version =3D 0x0000000c, + .hvx_vec_log_length =3D 0x00000007, + .coproc2_reg0 =3D 0x00000010, + .coproc2_reg1 =3D 0x00000008, + .coproc2_reg2 =3D 0x00000003, + .acd_preset =3D 0x00000001, + .mnd_preset =3D 0x00000001, + .l1d_size_kb =3D 0x00000040, + .l1i_size_kb =3D 0x00000040, + .l1d_write_policy =3D 0x00000002, + .vtcm_bank_width =3D 0x00000080, + .consistency_domain =3D 0x000000e0, + .capacity_domain =3D 0x00000080, + .axi3_lowaddr =3D 0x00004000, + .corecfg_present =3D 0x0000000d, + .coproc2_fp16_acc_exp =3D 0x00000003, + .AXIM_data_width =3D 0x00000100, + .l1d_ways =3D 0x00000008, + .l1i_ways =3D 0x00000004, + .l2way_num =3D 0x00000008, + .dma_jtlb_entries =3D 0x00000040, + }, +}; diff --git a/hw/hexagon/machine_cfg_v85qa_1.h.inc b/hw/hexagon/machine_cfg_= v85qa_1.h.inc new file mode 100644 index 00000000000..916a91ee291 --- /dev/null +++ b/hw/hexagon/machine_cfg_v85qa_1.h.inc @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +static const struct hexagon_machine_config v85qa_1 =3D { + .cfgbase =3D 0xd8180000, + .l2tcm_size =3D 0x00000000, + .l2vic_base =3D 0xfc910000, + .l2vic_size =3D 0x00001000, + .csr_base =3D 0xfc900000, + .qtmr_region =3D 0xfc921000, + .cfgtable =3D { + .l2tcm_base =3D 0x0000d800, + .subsystem_base =3D 0x0000fc90, + .etm_base =3D 0x0000d819, + .l2cfg_base =3D 0x0000d81a, + .reserved1 =3D 0x0000d81b, + .l1s0_base =3D 0x0000d900, + .fastl2vic_base =3D 0x0000d81e, + .jtlb_size_entries =3D 0x00000080, + .coproc_present =3D 0x0000001d, + .ext_contexts =3D 0x00000008, + .vtcm_base =3D 0x0000d900, + .vtcm_size_kb =3D 0x00004000, + .l2tag_size =3D 0x00000400, + .l2ecomem_size =3D 0x00000400, + .thread_enable_mask =3D 0x00000fff, + .eccreg_base =3D 0x0000d81f, + .l2line_size =3D 0x00000080, + .l2itcm_base =3D 0x0000d800, + .dma_version =3D 0x0000000c, + .hvx_vec_log_length =3D 0x00000007, + .coproc2_reg0 =3D 0x00000010, + .coproc2_reg1 =3D 0x00000008, + .coproc2_reg2 =3D 0x00000003, + .acd_preset =3D 0x00000001, + .mnd_preset =3D 0x00000001, + .l1d_size_kb =3D 0x00000040, + .l1i_size_kb =3D 0x00000040, + .l1d_write_policy =3D 0x00000002, + .vtcm_bank_width =3D 0x00000080, + .consistency_domain =3D 0x000000e0, + .capacity_domain =3D 0x00000080, + .axi3_lowaddr =3D 0x00004000, + .corecfg_present =3D 0x0000000d, + .coproc2_fp16_acc_exp =3D 0x00000003, + .AXIM_data_width =3D 0x00000100, + .l1d_ways =3D 0x00000008, + .l1i_ways =3D 0x00000004, + .l2way_num =3D 0x00000008, + .dma_jtlb_entries =3D 0x00000040, + }, +}; diff --git a/hw/hexagon/hexagon_dsp.c b/hw/hexagon/hexagon_dsp.c index 8824fe10a59..28b5cf39917 100644 --- a/hw/hexagon/hexagon_dsp.c +++ b/hw/hexagon/hexagon_dsp.c @@ -32,6 +32,8 @@ #include "machine_cfg_v68n_1024.h.inc" #include "machine_cfg_v81dgb_1.h.inc" #include "machine_cfg_v81qa_1.h.inc" +#include "machine_cfg_v85na_1.h.inc" +#include "machine_cfg_v85qa_1.h.inc" =20 #define TYPE_HEXAGON_DSP_MACHINE "hexagon-dsp-machine" OBJECT_DECLARE_SIMPLE_TYPE(HexagonDspMachineState, HEXAGON_DSP_MACHINE) @@ -227,7 +229,6 @@ static void v81qa_1_init(ObjectClass *oc, const void *d= ata) MachineClass *mc =3D MACHINE_CLASS(oc); =20 mc->desc =3D "Hexagon V81QA_1"; - mc->alias =3D "sim"; mc->init =3D v81qa_1_config_init; init_mc(mc); mc->default_cpu_type =3D TYPE_HEXAGON_CPU_V81; @@ -235,6 +236,41 @@ static void v81qa_1_init(ObjectClass *oc, const void *= data) mc->default_cpus =3D 12; } =20 +static void v85qa_1_config_init(MachineState *machine) +{ + hexagon_common_init(machine, v85qa_1_rev, &v85qa_1); +} + +static void v85qa_1_init(ObjectClass *oc, const void *data) +{ + MachineClass *mc =3D MACHINE_CLASS(oc); + + mc->desc =3D "Hexagon V85QA_1"; + mc->init =3D v85qa_1_config_init; + init_mc(mc); + mc->default_cpu_type =3D TYPE_HEXAGON_CPU_V85; + mc->max_cpus =3D 12; + mc->default_cpus =3D 12; +} + +static void v85na_1_config_init(MachineState *machine) +{ + hexagon_common_init(machine, v85na_1_rev, &v85na_1); +} + +static void v85na_1_init(ObjectClass *oc, const void *data) +{ + MachineClass *mc =3D MACHINE_CLASS(oc); + + mc->desc =3D "Hexagon V85NA_1"; + mc->alias =3D "sim"; + mc->init =3D v85na_1_config_init; + init_mc(mc); + mc->default_cpu_type =3D TYPE_HEXAGON_CPU_V85; + mc->max_cpus =3D 12; + mc->default_cpus =3D 12; +} + static const TypeInfo hexagon_machine_types[] =3D { { .name =3D TYPE_HEXAGON_COMMON_MACHINE, @@ -268,6 +304,16 @@ static const TypeInfo hexagon_machine_types[] =3D { .parent =3D TYPE_HEXAGON_DSP_MACHINE, .class_init =3D v81qa_1_init, }, + { + .name =3D MACHINE_TYPE_NAME("V85QA_1"), + .parent =3D TYPE_HEXAGON_DSP_MACHINE, + .class_init =3D v85qa_1_init, + }, + { + .name =3D MACHINE_TYPE_NAME("V85NA_1"), + .parent =3D TYPE_HEXAGON_DSP_MACHINE, + .class_init =3D v85na_1_init, + }, }; =20 DEFINE_TYPES(hexagon_machine_types) --=20 2.34.1 From nobody Fri Oct 23 22:16:17 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=1792694056; cv=none; d=zohomail.com; s=zohoarc; b=kxFKs+9DGOpONBWJLGQT/g6oLYylKa37Uyu1jp2DB2VwpJI/ybOQqxkJvyhCH/VEfR+4+cOSPwTi3vX+yw+5EbFpEYzt2HrjhDMDLTxgywG4f5P691vRU0EVLTFSXbrKTz3ueT3r+7VD2D9j+ZBPHDZqZgGXXLiFJ36IpW9t5zs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792694056; h=Content-Type: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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=mC8jl7vyVvYi+vhoijubMe1xPjMvd4/tlNPZMUbwGZ8=; b=hMdweZFVSb+sSxhtHfO5ppmjo3z8t6JsQUXbrXkyxR5Pf+cy+M0QMwzfJisLxPgYshQG/o14niWzg6RA+4c3Z0rufVMVWYZ+2J1WEX4j3CBQhe/ir8soF0IiCsqeeBazI0wo/CuWP1zUrt6SyEIFzBNMykm7+EiSRUcBUhYDhG4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792694056179598.1354832839035; Thu, 22 Oct 2026 11:34:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xJxbO-0006Rz-L7; Thu, 22 Oct 2026 14:33:24 -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 1xJxa6-0006Bn-Lf for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:11 -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 1xJxa3-0002dj-Nu for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:01 -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 69MHtVuE3078081 for ; Thu, 22 Oct 2026 18:31:58 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hf93amyy4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 22 Oct 2026 18:31:58 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-33c35f5ca6cso132209eec.1 for ; Thu, 22 Oct 2026 11:31:58 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-369d8f8eaf9sm44962eec.16.2026.10.22.11.31.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 11:31:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= mC8jl7vyVvYi+vhoijubMe1xPjMvd4/tlNPZMUbwGZ8=; b=kXvjEsymVXXcWbYx Wmhp8yf59CrJ8LiVlPolCl/nqcl3FuU1rfZTfO53/98lyxVSLSYEocX4N/LTXT6m 2KOJIVOBS0yp4JAyyeXM47Hw1RvPnue6Eju8eiqFkyzwXoeojhEVWvWf6Dsmxo2L euATxO36v7hyf+NzmINl153yBy8qp8uoClb9cArhUo5PBOqNTtQaDab5HPhA2L9d DGAWXot31DJPtdQtdChcmQDhvJaMV2tm+eEl9pmJvafexFJburXg5KyoS5B/a15E 6mc7oJZOICF/blrA4U8IikuFUiwNRfoQS3jtQz+hACUJ6IRTAA3GoMAojKHQVarr Wqe6Lw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1792693917; x=1793298717; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=mC8jl7vyVvYi+vhoijubMe1xPjMvd4/tlNPZMUbwGZ8=; b=TIez/ReKnxCmYF8wA69c+USTWOTy3zqggRonHEzs5xBLXApRz0z4CLuvFW+hV21xQp Tt1q0tmP8iioJNZl+wYS51S23POqyJaRLMgMoeG7cdSGpoaCre1YSzJdFaT/dr+FxQw5 cdXPSY5alz96ghtkidbbVoqbXhwfdH9C+MUsR9Q5zizCFfW45H2gyv+JyDEnSbqKfUqw 3aKSOKL25d+7HMgLK3+B+ee6mZgMLBxgEFkIuU5zZLlIdWXaBgNY54VVwkySC2UHJGP6 fuxxcTgVqN9NR/Egc/ly7xonUHF1qWPUJDTmshzF9ozHinQ0+WfjC6v6i5Sp9513Jr/m vW5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792693917; x=1793298717; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=mC8jl7vyVvYi+vhoijubMe1xPjMvd4/tlNPZMUbwGZ8=; b=ycAnhM0Su0ishzOOMgIHg8loPsIScBKB3ZO7flzN+SdAtkIR3qjcI0DfySbmSRpJk1 E0aoYnAXkkSs2nrQRUHeUuM2kRwntTfW6m1hIQq3mrBVogOs+2RDxxpJC9UReSQgYS4M ylrEO+os0md9eNGVudhFguZK9GQ5Zm9376ZCjTkSIIUjkx7JIta58+YlJ5wR313yYwFH qk7H7jTow42MBhX/dGl9ctEpreRJTE02yxXZgfh9XoaNNkOy9RmCTac5TDSiiuSqWYQ8 SJA+hq13lNHDxZN7PDVZS/fHb+rjLkKH8zVXfbzMk3U6JqY/pafLsUI97/DBAAbWQMwP S95w== X-Gm-Message-State: AFq9FYLvO6ZDjuVHzMYaaoQKb0GvFNUUoGOlHu9gsGSazJMAfTbF4nK5 Gp9s0sPLZ2F5LUz5q8rw37dBJCWZ79MGqOULahf8uThiM/MkMicN0U5SSx4AD7Hk6shIpv742Wo N0J4eRFIKhtIqKU6Bav/9Eur0QDJkM/Kv1A7+OhzaE1Twq+iU4pNkYIjCPpMs6fDdkg== X-Gm-Gg: AYBFou2juoqfShx4WcVPKMeKt6EklVyEP3zj3VijzdxhcCHgJpxwN1RdZk3sfJsj5Je I0U77UvRdYwJ7EVoQ+xvRD3/Bbl5Nhi+WG8VGWrsoJ7JOEEZ63vzMoLUAe+s4hbZub7KrpHFJ3r qfDD2gKgMefqwV64AA7a/1KOqDrRrNqNzWbLpeKkDGfw6C6nEmzhmiC41BsnABJgiIBXTuLTJA4 PlG6bV/a/W45Yc/fSz6IzyiwAk3GwYo+oPmqupIXyg+N1lvYAL6axLxCsjJghC3z6wxggbq2Exp dEV/ZpXsOkOZwGbavayCycI8s7HaW9k1qKDVbTlMNIdXCfMPoYu6QnLCb0xwVPIa5MgOajgQVhB q871KKJUXtMIBYevJlDjkbcvEqYNVMasCjGSIrYcsArsLkJzU X-Received: by 2002:a05:7301:6189:20b0:34c:d1f2:b552 with SMTP id 5a478bee46e88-369d90e3513mr5776eec.4.1792693917489; Thu, 22 Oct 2026 11:31:57 -0700 (PDT) X-Received: by 2002:a05:7301:6189:20b0:34c:d1f2:b552 with SMTP id 5a478bee46e88-369d90e3513mr5745eec.4.1792693916945; Thu, 22 Oct 2026 11:31:56 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: Brian Cain , Anton Johansson , Pierrick Bouvier , Helge Deller , Mohamed Mediouni , Alessandro Di Federico , Laurent Vivier , Marco Liebel Subject: [PATCH v4 04/11] linux-user/hexagon: report ISA HWCAP through v85 Date: Thu, 22 Oct 2026 11:31:40 -0700 Message-Id: <20261022183147.1535585-5-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> References: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfXxKa2tz63KJtR cJ9TP/tBw0u2r+QSjaosnj2ehiZ2jmcRQNKna5HflxTfdyz4g1m5XNOjqM/PvvgIHrlNYb4ORnX 8JdjX3dwEHZWZeN8wGXdERwKoo8OQ/jJsETogrNCma3n+0wsu/wClt4O6pvipMcGHjyKoHpCrOL vLjDl+xJcV58Q58N55yaHYRuDzxjf1vVrUpNy8bAk+qDb6I79bgyF0uxouDlTtX2TpIstzgrsHa SoVxf+Xu9npROLmJn0oykCDEUnCvqYePi9pBJq9xJqz7zpLmaub5SRTuUNPP5wvx46YRTBVWGb4 Ww5Agg+6AQ6MFmvGazNNiiyO9SFlOvPV95UrphDm1yeIYpg+pT04sz1Po+OfA4R90JRZhB/+799 z2uQw5bCTQqBrEY6aCVTeYA68S0AD2stwksFtH3tZZAuFgWFcShrbMKUHkz4985M5lvp1/r1yVs OtsKFPUh2OihD9quuXQ== X-Proofpoint-GUID: xYrPmADEFYGLZt67zCVV5Rz4LtduQzGW X-Authority-Analysis: v=2.4 cv=feg4WEQF c=1 sm=1 tr=0 ts=6ada569e cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=RcCyqxnK1iORyYYg75cA:9 a=QEXdDO2ut3YA:10 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-ORIG-GUID: xYrPmADEFYGLZt67zCVV5Rz4LtduQzGW X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfXw/jcNYM285/Q CWeyn6VZQm2LHgeJMBsSTWf4O3hXo3NhI+TyB1GXjeaOrpMq9EQ02qIdoy/GcIVEnDsyKfZVT7j KKok4viehJMZmncyyBJMpxpgkEsmuuk= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.138,FMLib:17.12.100.49 definitions=2026-10-22_06,2026-10-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 lowpriorityscore=0 impostorscore=0 bulkscore=0 suspectscore=0 spamscore=0 adultscore=0 priorityscore=1501 malwarescore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610220073 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@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, 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: 1792694058133158500 Reviewed-by: Pierrick Bouvier Reviewed-by: Marco Liebel Signed-off-by: Brian Cain --- linux-user/hexagon/target_elf.h | 2 ++ linux-user/hexagon/elfload.c | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/linux-user/hexagon/target_elf.h b/linux-user/hexagon/target_el= f.h index 90e5032d5aa..b1eb5ea5037 100644 --- a/linux-user/hexagon/target_elf.h +++ b/linux-user/hexagon/target_elf.h @@ -43,6 +43,8 @@ enum { HWCAP_HEXAGON_ISA_V77 =3D 16, HWCAP_HEXAGON_ISA_V79 =3D 17, HWCAP_HEXAGON_ISA_V81 =3D 18, + HWCAP_HEXAGON_ISA_V83 =3D 19, + HWCAP_HEXAGON_ISA_V85 =3D 20, HWCAP_HEXAGON_HVX =3D 1 << 7, HWCAP_HEXAGON_CABAC =3D 1 << 8, HWCAP_HEXAGON_HVX_LENGTH_128B =3D 1 << 9, diff --git a/linux-user/hexagon/elfload.c b/linux-user/hexagon/elfload.c index 9f98ad8fb86..db0bf299cc0 100644 --- a/linux-user/hexagon/elfload.c +++ b/linux-user/hexagon/elfload.c @@ -62,6 +62,12 @@ abi_ulong get_elf_hwcap(CPUState *cs) case HEX_VER_V81: hwcaps =3D HWCAP_HEXAGON_ISA_V81; break; + case HEX_VER_V83: + hwcaps =3D HWCAP_HEXAGON_ISA_V83; + break; + case HEX_VER_V85: + hwcaps =3D HWCAP_HEXAGON_ISA_V85; + break; default: return 0; } --=20 2.34.1 From nobody Fri Oct 23 22:16:18 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=1792693996; cv=none; d=zohomail.com; s=zohoarc; b=O6drc2PqNbT+BaJ/62B8F+KN/PffXqRVda6LMFeB1NufbbNVO159dl4gmthkHsqdx7PCJD16J+xBR5tYzPqXccV8OR3x+sPUTttmIyPfl/vQHA/4XVXZI5KSRjrNRZO0YpHwBUauJBYGqyVx2Kznj7R0OVRBBnLYTe0C0WitD0Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792693996; h=Content-Type: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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=R6x4Y7Qex46wUFa1M4NLecn+e7pUVoMuoPBrq82UYek=; b=AbO2u3VRVL3H2N2IQfi1hTdfqsHmjC1m1yygHTxdrFbx7bs14Q0+In41wh7Q5l+Nt7lTvWq5DuxEc6s+Gb//1L7xsydEQ0MNCmT5z34R77Bwhksz628qbhH8oUm1MwfIiRC/aMYJuG82AECfwtV+FfUf+BH9sY66P0VWMSI2j4c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792693996015340.59628943929954; Thu, 22 Oct 2026 11:33:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xJxai-0006Fs-T6; Thu, 22 Oct 2026 14:32:42 -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 1xJxa9-0006C0-50 for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:11 -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 1xJxa6-0002e9-Cv for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:04 -0400 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 69MIHg6E984239 for ; Thu, 22 Oct 2026 18:32:01 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hfqmj828v-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 22 Oct 2026 18:32:00 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-30c0d568830so225393eec.1 for ; Thu, 22 Oct 2026 11:32:00 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-369d8f8eaf9sm44962eec.16.2026.10.22.11.31.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 11:31:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= R6x4Y7Qex46wUFa1M4NLecn+e7pUVoMuoPBrq82UYek=; b=i1JJ5qxe91oS2v2A YG2wDe134f3jaTbsQK3PZ8zFhRegjVRZ/tetzinVp778cjgdDUNCTqwkZS78mHhh bjyQoJGvQsfitppkdS4wUQzbtijRTTKuKYWqCy+mxovt9tCTaBRPoI+AQ+yOKrGa 1R7l/XByE6bCniQ4lML3LjTTExH2zTIYj5RJ7nAjplta70yqPhIJOD01ialnLL3X i/+dhfyLfu0hyVbJ3P1rMe2kW8E8jXz4LxzL0KEa8HKiYhH5jZ6/Um8ri5F0gCCJ LlY9JoZTg6jC2jj218r4rE05nl59qD3+ZB0sOBHo07AOXST1GckvmWX5HEu6z0iY cDl4/g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1792693920; x=1793298720; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=R6x4Y7Qex46wUFa1M4NLecn+e7pUVoMuoPBrq82UYek=; b=LMgHw30kAW1dKDLFPehcPN9k6v4U+pcc5Xv7LBIhgLXrfFnbUBKzRRzI+wRoqVIFC5 /DhoQDtf/nSZ/3O6xeDxUoWRj53+ypRm86FIM2XiZTNJn1Zl1MPx/AlBBUztSz8e2MGg wKj8JrVBG2syi+ErY81ZNlbIsVUog5Y6fp8RRBvsM82kRSHfUEvc+iRFBt7DAWf2YISM 6YatSKMSAosU1rqiJPW07TKGk3JoZmXinqVXvhKitCzhhI/KK2vw/td+fzNQHGNoBTdf ple8E1XxGoQyWDUHzxHreqP2PqmrPk+gG8G4rCyP1geIV56XqBM3VoB7Li2Hl41GDN6M xE3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792693920; x=1793298720; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=R6x4Y7Qex46wUFa1M4NLecn+e7pUVoMuoPBrq82UYek=; b=lYlIXH9WXVuVRCug4dUDsrVP6vOJghzPD9Ol1O9qm68nMlN4vSxTDmLG1nEf5DDNWq aD237rluQ5A9lA4RwpY9j6gkqoqTZhCUmPR2u6GF19jzBSSccUWszEryX6y58RaaJXCi yUkghe5j1ExqPFgViiG53WJGEJ0HOtSmOJBnexHx730lc0v83VwJ9CTqVvE27GeUcBp0 K/ylbHZ+wtFxwfkUKxU15cZ1DDcWd7G+8Vmy6euYH4vqfNJlaGhSaPmN+fsh6tF7IdZs eU6jUxsWrgbZynB3CYz6y81sKp+5+jAjBAoMQCWXuwWMsX/IU0OmoNVE97L7+SIj3+yO CrNw== X-Gm-Message-State: AFq9FYIR0MqsqZAUuh5rnlODHYT9qP21hKWPMn69dkpr+6Tw/MUEF8LL jC69bDJxlPoecBH8UP43+rt75rFw5yvnd7EjGkot12fA2/73g4LNPKYYjyEiPOjwrybyYEJHYN4 yGW21l5dW1fgEnqQ/z+iEOVEhTXeYqOy9Cpk270IhIoifdXckarIPWgu5+TEWiBjE0Q== X-Gm-Gg: AYBFou2e+x/8yjRLT2cGZJ+n20kBUUH68Oaax/1ASimKoTTXHccPm7MmeiG2xjsBvVj 71ZpfUOb64QqQUaidkvLeZOIi1XMBUBKM7zH6dkbo3qJCO44PtyeXZssPX553xV97pJ22OWalc1 FVKo1HBJ/BpjQ4SIythulqQhxSCE2KYuCy6LkDu00Y1o6iul+/nZdJRtrybNpvvIhw3j2moyaEl mE/ZT8jicnroJvAVTepEUtkViu+2ACGtHyBn/38lUsaYUHTgoWmwZ57n2fWfPMDh3k6O65oW1D4 D7xhsZ1ZgUOQ4je1rZNGcJwyIja+eUsV1t0GJG8CSafn07KS5k11gXfS0ZfPrjjicHr7Y+JBsSX TqzUGIC9qMasCkKPcRjzGaOF4/IYx+4/671UX30wKoID/oh2V X-Received: by 2002:a05:7301:1606:b0:366:2893:7422 with SMTP id 5a478bee46e88-3674d453942mr8259634eec.22.1792693919654; Thu, 22 Oct 2026 11:31:59 -0700 (PDT) X-Received: by 2002:a05:7301:1606:b0:366:2893:7422 with SMTP id 5a478bee46e88-3674d453942mr8259593eec.22.1792693918819; Thu, 22 Oct 2026 11:31:58 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: Brian Cain , Anton Johansson , Pierrick Bouvier , Helge Deller , Mohamed Mediouni , Alessandro Di Federico , Laurent Vivier , Marco Liebel Subject: [PATCH v4 05/11] target/hexagon: add v85 scalar atomics Date: Thu, 22 Oct 2026 11:31:41 -0700 Message-Id: <20261022183147.1535585-6-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> References: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: lYzySLLxtx-ycjWwnK726ChGlowjlsuP X-Authority-Analysis: v=2.4 cv=cPR1IVeN c=1 sm=1 tr=0 ts=6ada56a1 cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=QWFhnZNPvVq_KlACrU4A:9 a=QEXdDO2ut3YA:10 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX0FI7v6QOtkke P+ra6xelYieAguSRG2/XgkJj6DaVtFL+hTEur3rfUdjoRCU9FRhA+uyvojtR7ZwWfuqhLrDcsbl yjCzQnPxf+R/ozmo/wtjG0BIh7EuDeM= X-Proofpoint-ORIG-GUID: lYzySLLxtx-ycjWwnK726ChGlowjlsuP X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX56MWRvbq03UI VnJCG3jvBMoalTn45uq7Q6Gor7JSeFX8/2nCXKvfFiZPeETsRKwzRWrAgbECyiqC1FOqP44kV+m DfAWdvEm4dl8tcR1Dkj67dxcaX/sEc4HmU0rX14tmu8bGjyDxQ5ef90wT2hiOA3ngKaVM0vR+Dy VxYeHwi6nsdwxD0QeL/s7XsCLXESOD6f+HCnKEOo4MB7vTe7Xc+YBMvW5ZiFFzXRLFdypfGQw// K09Sjgo1Gkp73K4Q6S9ZhY+Uw4m4S/yJA9zzpSmVqlfWyg1ZO2/njbNLxPuVGnD+VJFYqwZqINf mqOw9DPcO3s1b5Q6e+QPJhwNdcvH7FhPPqLhtsGjtzmWHhZ0TnQgUv7cbkcNW7zwgXTDlSeffOu NeywycyDA3hAL3Fvq7ZWOqNGU7TCi0tkgg4laQHJke275L0/Evqu+zuiSbWpG5aEHWtbK5dUFj5 PWhxna2omFA/+RlS8Vg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.138,FMLib:17.12.100.49 definitions=2026-10-22_06,2026-10-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 lowpriorityscore=0 bulkscore=0 spamscore=0 suspectscore=0 impostorscore=0 priorityscore=1501 malwarescore=0 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610220073 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@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, 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: 1792693999688158500 The scalar atomic instructions are able to perform a word or double-word read-modify-write atomically. Also add the v85 dcfetch_multi instruction, which prefetches multiple data cache lines. It is modelled as a no-op, as other dcfetch instructions are. Reviewed-by: Pierrick Bouvier Reviewed-by: Marco Liebel Signed-off-by: Brian Cain --- target/hexagon/gen_tcg.h | 27 +++++++++++++++++++++ target/hexagon/genptr.h | 11 +++++++++ target/hexagon/attribs_def.h.inc | 1 + target/hexagon/genptr.c | 32 +++++++++++++++++++++++++ target/hexagon/tag_rev_info.c.inc | 15 ++++++++++++ target/hexagon/gen_idef_parser_funcs.py | 2 ++ target/hexagon/imported/encode_pp.def | 15 +++++++++++- target/hexagon/imported/ldst.idef | 14 ++++++++++- target/hexagon/imported/macros.def | 10 ++++++++ target/hexagon/imported/system.idef | 1 + 10 files changed, 126 insertions(+), 2 deletions(-) diff --git a/target/hexagon/gen_tcg.h b/target/hexagon/gen_tcg.h index ed05f97efed..e972bb4e5b8 100644 --- a/target/hexagon/gen_tcg.h +++ b/target/hexagon/gen_tcg.h @@ -100,6 +100,28 @@ #define fGEN_TCG_L4_loadrd_ap(SHORTCODE) \ fGEN_TCG_LOAD_AP(RddV, 8, u) =20 +#define fGEN_TCG_ATOMIC4(OP) \ + do { \ + fEA_REG(RsV); \ + gen_atomic4(ctx, RdV, EA, RtV, OP); \ + } while (0) +#define fGEN_TCG_AM_addw_aq(SHORTCODE) fGEN_TCG_ATOMIC4(HEX_ATOMIC_ADD) +#define fGEN_TCG_AM_addw_rl(SHORTCODE) fGEN_TCG_ATOMIC4(HEX_ATOMIC_ADD) +#define fGEN_TCG_AM_andw_aq(SHORTCODE) fGEN_TCG_ATOMIC4(HEX_ATOMIC_AND) +#define fGEN_TCG_AM_andw_rl(SHORTCODE) fGEN_TCG_ATOMIC4(HEX_ATOMIC_AND) +#define fGEN_TCG_AM_orw_aq(SHORTCODE) fGEN_TCG_ATOMIC4(HEX_ATOMIC_OR) +#define fGEN_TCG_AM_orw_rl(SHORTCODE) fGEN_TCG_ATOMIC4(HEX_ATOMIC_OR) +#define fGEN_TCG_AM_xorw_aq(SHORTCODE) fGEN_TCG_ATOMIC4(HEX_ATOMIC_XOR) +#define fGEN_TCG_AM_xorw_rl(SHORTCODE) fGEN_TCG_ATOMIC4(HEX_ATOMIC_XOR) +#define fGEN_TCG_AM_swapw_aq(SHORTCODE) fGEN_TCG_ATOMIC4(HEX_ATOMIC_SWAP) +#define fGEN_TCG_AM_swapw_rl(SHORTCODE) fGEN_TCG_ATOMIC4(HEX_ATOMIC_SWAP) +#define fGEN_TCG_AM_swapd_aq(SHORTCODE) \ + do { \ + fEA_REG(RsV); \ + gen_atomic8(ctx, RddV, EA, RttV); \ + } while (0) +#define fGEN_TCG_AM_swapd_rl(SHORTCODE) fGEN_TCG_AM_swapd_aq(SHORTCODE) + #define fGEN_TCG_L2_loadrub_pci(SHORTCODE) SHORTCODE #define fGEN_TCG_L2_loadrb_pci(SHORTCODE) SHORTCODE #define fGEN_TCG_L2_loadruh_pci(SHORTCODE) SHORTCODE @@ -1377,6 +1399,11 @@ RsV =3D RsV; \ uiV =3D uiV; \ } while (0) +#define fGEN_TCG_Y4_dcfetch_multi(SHORTCODE) \ + do { \ + RsV =3D RsV; \ + RtV =3D RtV; \ + } while (0) =20 #define fGEN_TCG_L2_loadw_aq(SHORTCODE) SHORTCODE #define fGEN_TCG_L4_loadd_aq(SHORTCODE) SHORTCODE diff --git a/target/hexagon/genptr.h b/target/hexagon/genptr.h index 238ee089cba..7c0e90e93aa 100644 --- a/target/hexagon/genptr.h +++ b/target/hexagon/genptr.h @@ -58,6 +58,17 @@ TCGv gen_get_byte_i64(TCGv result, int N, TCGv_i64 src, = bool sign); TCGv gen_get_half(TCGv result, int N, TCGv src, bool sign); void gen_set_half(int N, TCGv result, TCGv src); void gen_set_half_i64(int N, TCGv_i64 result, TCGv src); +typedef enum { + HEX_ATOMIC_ADD, + HEX_ATOMIC_AND, + HEX_ATOMIC_OR, + HEX_ATOMIC_XOR, + HEX_ATOMIC_SWAP, +} HexAtomicOp; + +void gen_atomic4(DisasContext *ctx, TCGv dest, TCGv vaddr, TCGv src, + HexAtomicOp operation); +void gen_atomic8(DisasContext *ctx, TCGv_i64 dest, TCGv vaddr, TCGv_i64 sr= c); void probe_noshuf_load(TCGv va, int s, int mi); void gen_gvec_sabsdiff_var(unsigned vece, TCGv_ptr dbase, uint32_t dofs, TCGv_ptr abase, uint32_t aofs, diff --git a/target/hexagon/attribs_def.h.inc b/target/hexagon/attribs_def.= h.inc index 5a98ea33139..8deef8e4cfb 100644 --- a/target/hexagon/attribs_def.h.inc +++ b/target/hexagon/attribs_def.h.inc @@ -60,6 +60,7 @@ DEF_ATTRIB(COPBYADDRESS, "Cache operation by address", ""= , "") DEF_ATTRIB(COPBYIDX, "Cache operation by index", "", "") DEF_ATTRIB(RELEASE, "Releases a lock", "", "") DEF_ATTRIB(ACQUIRE, "Acquires a lock", "", "") +DEF_ATTRIB(ATOMIC, "Atomic memory instruction", "", "") =20 DEF_ATTRIB(RLS_INNER, "Store release inner visibility", "", "") DEF_ATTRIB(RLS_ALL_THREAD, "Store release among all threads", "", "") diff --git a/target/hexagon/genptr.c b/target/hexagon/genptr.c index 1a68d8c1b8d..58c31b05d57 100644 --- a/target/hexagon/genptr.c +++ b/target/hexagon/genptr.c @@ -698,6 +698,38 @@ static inline void gen_store_conditional8(DisasContext= *ctx, tcg_gen_movi_tl(hex_llsc_addr, ~0); } =20 +void gen_atomic4(DisasContext *ctx, TCGv dest, TCGv vaddr, TCGv src, + HexAtomicOp operation) +{ + MemOp memop =3D MO_LE | MO_32 | MO_ALIGN; + + switch (operation) { + case HEX_ATOMIC_ADD: + tcg_gen_atomic_fetch_add_tl(dest, vaddr, src, ctx->mem_idx, memop); + break; + case HEX_ATOMIC_AND: + tcg_gen_atomic_fetch_and_tl(dest, vaddr, src, ctx->mem_idx, memop); + break; + case HEX_ATOMIC_OR: + tcg_gen_atomic_fetch_or_tl(dest, vaddr, src, ctx->mem_idx, memop); + break; + case HEX_ATOMIC_XOR: + tcg_gen_atomic_fetch_xor_tl(dest, vaddr, src, ctx->mem_idx, memop); + break; + case HEX_ATOMIC_SWAP: + tcg_gen_atomic_xchg_tl(dest, vaddr, src, ctx->mem_idx, memop); + break; + default: + g_assert_not_reached(); + } +} + +void gen_atomic8(DisasContext *ctx, TCGv_i64 dest, TCGv vaddr, TCGv_i64 sr= c) +{ + tcg_gen_atomic_xchg_i64(dest, vaddr, src, ctx->mem_idx, + MO_LE | MO_64 | MO_ALIGN); +} + #ifndef CONFIG_HEXAGON_IDEF_PARSER static TCGv gen_slotval(DisasContext *ctx) { diff --git a/target/hexagon/tag_rev_info.c.inc b/target/hexagon/tag_rev_inf= o.c.inc index b380a6b44ae..a1b7b50cbf2 100644 --- a/target/hexagon/tag_rev_info.c.inc +++ b/target/hexagon/tag_rev_info.c.inc @@ -698,6 +698,21 @@ static const struct tag_rev_info tag_rev_info[XX_LAST_= OPCODE] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX_VER_NONE }, [V6_vconv_bf_qf32] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX= _VER_NONE }, + + [Y4_dcfetch_multi] =3D { .introduced =3D HEX_VER_V85, + .removed =3D HEX_VER_NONE }, + [AM_addw_aq] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_N= ONE }, + [AM_addw_rl] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_N= ONE }, + [AM_andw_aq] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_N= ONE }, + [AM_andw_rl] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_N= ONE }, + [AM_orw_aq] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_NO= NE }, + [AM_orw_rl] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_NO= NE }, + [AM_swapd_aq] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_= NONE }, + [AM_swapd_rl] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_= NONE }, + [AM_swapw_aq] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_= NONE }, + [AM_swapw_rl] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_= NONE }, + [AM_xorw_aq] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_N= ONE }, + [AM_xorw_rl] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_N= ONE }, }; =20 #endif /* HEXAGON_TAG_ARCH_TABLE_H */ diff --git a/target/hexagon/gen_idef_parser_funcs.py b/target/hexagon/gen_i= def_parser_funcs.py index 32bce9b0028..7151a4f6713 100644 --- a/target/hexagon/gen_idef_parser_funcs.py +++ b/target/hexagon/gen_idef_parser_funcs.py @@ -68,6 +68,8 @@ def main(): ## Skip the guest instructions if "A_GUEST" in hex_common.attribdict[tag]: continue + if "A_ATOMIC" in hex_common.attribdict[tag]: + continue ## Skip instructions that saturate in a ternary expression if tag in {"S2_asr_r_r_sat", "S2_asl_r_r_sat"}: continue diff --git a/target/hexagon/imported/encode_pp.def b/target/hexagon/importe= d/encode_pp.def index 4b307b97b30..c590ed4f959 100644 --- a/target/hexagon/imported/encode_pp.def +++ b/target/hexagon/imported/encode_pp.def @@ -406,7 +406,8 @@ DEF_ENC32(R6_release_at_vi, ICLASS_ST" 000 01 11ssss= s PP0ttttt --0011dd") DEF_ENC32(R6_release_st_vi, ICLASS_ST" 000 01 11sssss PP0ttttt --1011dd") =20 DEF_EXT_SPACE(EXTRACTW, ICLASS_LD" 001 0 000 iiiii PP0iiiii 001iiiii") -DEF_ENC32(Y2_dcfetchbo, ICLASS_LD" 010 0 000 sssss PP0--iii iiiiiiii") +DEF_ENC32(Y2_dcfetchbo, "10010100000sssssPP000iiiiiiiiiii") +DEF_ENC32(Y4_dcfetch_multi,"10010100000sssssPP001ttttt------") DEF_ENC32(Y2_dcfetchbo_nt,"10010100000sssssPP10-iiiiiiiiiii") =20 =20 @@ -1895,6 +1896,18 @@ SH_RRR_ENC(S2_cabacdecbin, "0001","11-","-","11= -","ddddd") /* implicit P0 w =20 =20 DEF_FIELDROW_DESC32(ICLASS_S3op" 0010 -------- PP------ --------","[#2] Rd= d=3D(Rss,Rtt,Pu)") +DEF_ENC32(AM_addw_aq, "10010000000sssssPP1ttttt001ddddd") +DEF_ENC32(AM_addw_rl, "10010000000sssssPP1ttttt010ddddd") +DEF_ENC32(AM_andw_aq, "10010000000sssssPP1ttttt101ddddd") +DEF_ENC32(AM_andw_rl, "10010000000sssssPP1ttttt110ddddd") +DEF_ENC32(AM_orw_aq, "10010000110sssssPP0ttttt001ddddd") +DEF_ENC32(AM_orw_rl, "10010000110sssssPP0ttttt010ddddd") +DEF_ENC32(AM_xorw_aq, "10010000110sssssPP0ttttt101ddddd") +DEF_ENC32(AM_xorw_rl, "10010000110sssssPP0ttttt110ddddd") +DEF_ENC32(AM_swapw_aq, "10010000110sssssPP1ttttt001ddddd") +DEF_ENC32(AM_swapw_rl, "10010000110sssssPP1ttttt010ddddd") +DEF_ENC32(AM_swapd_aq, "10010000110sssssPP1ttttt101ddddd") +DEF_ENC32(AM_swapd_rl, "10010000110sssssPP1ttttt110ddddd") SH_RRR_ENC(S2_valignrb, "0010","0--","-","-uu","ddddd") SH_RRR_ENC(S2_vsplicerb, "0010","100","-","-uu","ddddd") SH_RRR_ENC(A4_addp_c, "0010","110","-","-xx","ddddd") diff --git a/target/hexagon/imported/ldst.idef b/target/hexagon/imported/ld= st.idef index 7106a0c572c..48cda64e0b0 100644 --- a/target/hexagon/imported/ldst.idef +++ b/target/hexagon/imported/ldst.idef @@ -135,7 +135,6 @@ STD_ST_AMODES(storerhnew, "Nt8.new", "memh","Store Half= integer",ATTRIBS(A_REGWR =20 Q6INSN(S2_allocframe,"allocframe(Rx32,#u11:3):raw", ATTRIBS(A_REGWRSIZE_8B= ,A_MEMSIZE_8B,A_STORE,A_RESTRICT_SLOT0ONLY), "Allocate stack frame", { fEA_RI(RxV,-8); fSTORE(1,8,EA,fFRAME_SCRAMBLE((fCAST8_8u(fREAD_LR()) << = 32) | fCAST4_4u(fREAD_FP()))); fWRITE_FP(EA); fFRAMECHECK(EA-uiV,EA); RxV = =3D EA-uiV; }) - #define A_RETURN A_RESTRICT_COF_MAX1,A_RESTRICT_SLOT0ONLY,A_RESTRICT_NOSLO= T1_STORE,A_RET_TYPE,A_DEALLOCRET =20 /**** Load Acquire Store Release Instructions****/ @@ -156,6 +155,19 @@ Q6INSN(S4_stored_rl_at_vi,"memd_rl(Rs32):at=3DRtt32",A= TTRIBS(A_REGWRSIZE_8B,A_RELE Q6INSN(S2_storew_rl_st_vi,"memw_rl(Rs32):st=3DRt32",ATTRIBS(A_REGWRSIZE_4B= ,A_RELEASE,A_VTCM_ALLBANK_ACCESS,A_RLS_INNER,A_RLS_SAME_THREAD,A_RESTRICT_N= OPACKET,A_MEMSIZE_4B,A_STORE,A_RESTRICT_SLOT0ONLY),"Store Release Word", { = fEA_REG(RsV); fSTORE(1,4,EA,RtV); }) Q6INSN(S4_stored_rl_st_vi,"memd_rl(Rs32):st=3DRtt32",ATTRIBS(A_REGWRSIZE_8= B,A_RELEASE,A_VTCM_ALLBANK_ACCESS,A_RLS_INNER,A_RLS_SAME_THREAD,A_RESTRICT_= NOPACKET,A_MEMSIZE_8B,A_STORE,A_RESTRICT_SLOT0ONLY),"Store Release Double i= nteger", { fEA_REG(RsV); fSTORE(1,8,EA,RttV); }) =20 +Q6INSN(AM_addw_aq,"Rd32=3Datomw_add(Rs32,Rt32):aq",ATTRIBS(A_REGWRSIZE_4B,= A_MEMSIZE_4B,A_ATOMIC,A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOTE_AX= OK),"Atomic add word acquire",{ fEA_REG(RsV); fATOMIC_LDST(4,RdV,EA,RtV,0,*= EA+RtV); }) +Q6INSN(AM_addw_rl,"Rd32=3Datomw_add(Rs32,Rt32):rl",ATTRIBS(A_REGWRSIZE_4B,= A_MEMSIZE_4B,A_ATOMIC,A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOTE_AX= OK),"Atomic add word release",{ fEA_REG(RsV); fATOMIC_LDST(4,RdV,EA,RtV,0,*= EA+RtV); }) +Q6INSN(AM_andw_aq,"Rd32=3Datomw_and(Rs32,Rt32):aq",ATTRIBS(A_REGWRSIZE_4B,= A_MEMSIZE_4B,A_ATOMIC,A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOTE_AX= OK),"Atomic and word acquire",{ fEA_REG(RsV); fATOMIC_LDST(4,RdV,EA,RtV,1,*= EA&RtV); }) +Q6INSN(AM_andw_rl,"Rd32=3Datomw_and(Rs32,Rt32):rl",ATTRIBS(A_REGWRSIZE_4B,= A_MEMSIZE_4B,A_ATOMIC,A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOTE_AX= OK),"Atomic and word release",{ fEA_REG(RsV); fATOMIC_LDST(4,RdV,EA,RtV,1,*= EA&RtV); }) +Q6INSN(AM_orw_aq,"Rd32=3Datomw_or(Rs32,Rt32):aq",ATTRIBS(A_REGWRSIZE_4B,A_= MEMSIZE_4B,A_ATOMIC,A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOTE_AXOK= ),"Atomic or word acquire",{ fEA_REG(RsV); fATOMIC_LDST(4,RdV,EA,RtV,2,*EA|= RtV); }) +Q6INSN(AM_orw_rl,"Rd32=3Datomw_or(Rs32,Rt32):rl",ATTRIBS(A_REGWRSIZE_4B,A_= MEMSIZE_4B,A_ATOMIC,A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOTE_AXOK= ),"Atomic or word release",{ fEA_REG(RsV); fATOMIC_LDST(4,RdV,EA,RtV,2,*EA|= RtV); }) +Q6INSN(AM_xorw_aq,"Rd32=3Datomw_xor(Rs32,Rt32):aq",ATTRIBS(A_REGWRSIZE_4B,= A_MEMSIZE_4B,A_ATOMIC,A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOTE_AX= OK),"Atomic xor word acquire",{ fEA_REG(RsV); fATOMIC_LDST(4,RdV,EA,RtV,3,*= EA^RtV); }) +Q6INSN(AM_xorw_rl,"Rd32=3Datomw_xor(Rs32,Rt32):rl",ATTRIBS(A_REGWRSIZE_4B,= A_MEMSIZE_4B,A_ATOMIC,A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOTE_AX= OK),"Atomic xor word release",{ fEA_REG(RsV); fATOMIC_LDST(4,RdV,EA,RtV,3,*= EA^RtV); }) +Q6INSN(AM_swapw_aq,"Rd32=3Datomw_swap(Rs32,Rt32):aq",ATTRIBS(A_REGWRSIZE_4= B,A_MEMSIZE_4B,A_ATOMIC,A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOTE_= AXOK),"Atomic swap word acquire",{ fEA_REG(RsV); fATOMIC_LDST(4,RdV,EA,RtV,= 4,RtV); }) +Q6INSN(AM_swapw_rl,"Rd32=3Datomw_swap(Rs32,Rt32):rl",ATTRIBS(A_REGWRSIZE_4= B,A_MEMSIZE_4B,A_ATOMIC,A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOTE_= AXOK),"Atomic swap word release",{ fEA_REG(RsV); fATOMIC_LDST(4,RdV,EA,RtV,= 4,RtV); }) +Q6INSN(AM_swapd_aq,"Rdd32=3Datomd_swap(Rs32,Rtt32):aq",ATTRIBS(A_REGWRSIZE= _8B,A_MEMSIZE_8B,A_ATOMIC,A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOT= E_AXOK),"Atomic swap double word acquire",{ fEA_REG(RsV); fATOMIC_LDST(8,Rd= dV,EA,RttV,4,RttV); }) +Q6INSN(AM_swapd_rl,"Rdd32=3Datomd_swap(Rs32,Rtt32):rl",ATTRIBS(A_REGWRSIZE= _8B,A_MEMSIZE_8B,A_ATOMIC,A_RESTRICT_SLOT0ONLY,A_RESTRICT_PACKET_AXOK,A_NOT= E_AXOK),"Atomic swap double word release",{ fEA_REG(RsV); fATOMIC_LDST(8,Rd= dV,EA,RttV,4,RttV); }) + Q6INSN(L2_deallocframe,"Rdd32=3Ddeallocframe(Rs32):raw", ATTRIBS(A_REGWRSI= ZE_8B,A_MEMSIZE_8B,A_LOAD,A_DEALLOCFRAME), "Deallocate stack frame", { fHIDE(size8u_t tmp;) fEA_REG(RsV); fLOAD(1,8,u,EA,tmp); diff --git a/target/hexagon/imported/macros.def b/target/hexagon/imported/m= acros.def index 13eb13c71f7..ef9955a0212 100644 --- a/target/hexagon/imported/macros.def +++ b/target/hexagon/imported/macros.def @@ -1404,6 +1404,11 @@ DEF_MACRO(fLOAD_LOCKED, (A_LOAD,A_MEMLIKE) ) =20 +DEF_MACRO(fATOMIC_LDST, + { }, + (A_LOAD,A_STORE,A_MEMLIKE) +) + DEF_MACRO(fSTORE, { MEM_STORE##SIZE(thread,EA,SRC,insn); }, (A_STORE,A_MEMLIKE) @@ -1958,6 +1963,11 @@ DEF_MACRO(fDCFETCH, (A_MEMLIKE) ) =20 +DEF_MACRO(fDCFETCH_MULTI, + { }, + (A_MEMLIKE) +) + DEF_MACRO(fICINVA, /* */, (A_ICINVA) diff --git a/target/hexagon/imported/system.idef b/target/hexagon/imported/= system.idef index a58da8f8269..9c4897a2eee 100644 --- a/target/hexagon/imported/system.idef +++ b/target/hexagon/imported/system.idef @@ -241,6 +241,7 @@ Q6INSN(Y6_dmresume,"dmresume(Rs32)",ATTRIBS(A_NOTE_NOPA= CKET,A_RESTRICT_NOPACKET, =20 Q6INSN(Y2_dcfetchbo,"dcfetch(Rs32+#u11:3)",ATTRIBS(A_RESTRICT_PREFERSLOT0,= A_DCFETCH,A_RESTRICT_NOSLOT1_STORE),"Data Cache Prefetch",{fEA_RI(RsV,uiV);= fDCFETCH(EA);}) Q6INSN(Y2_dcfetchbo_nt,"dcfetch(Rs32+#u11:3):nt",ATTRIBS(A_NA_NT,A_RESTRIC= T_PREFERSLOT0,A_DCFETCH,A_RESTRICT_NOSLOT1_STORE),"Data Cache Prefetch",{fE= A_RI(RsV,uiV); fDCFETCH(EA);}) +Q6INSN(Y4_dcfetch_multi,"dcfetch_multi(Rs32,Rt32)",ATTRIBS(A_RESTRICT_PREF= ERSLOT0,A_DCFETCH,A_RESTRICT_NOSLOT1_STORE),"Data Cache Prefetch",{fEA_REG(= RsV); fDCFETCH_MULTI(EA,fEXTRACTU_BITS(RtV,10,0));}) Q6INSN(Y2_dckill,"dckill",ATTRIBS(A_PRIV,A_NOTE_PRIV,A_NOTE_NOPACKET,A_RES= TRICT_SLOT0ONLY,A_RESTRICT_NOPACKET,A_CACHEOP,A_DCFLUSHOP),"Data Cache Inva= lidate",{fDCKILL();}) =20 =20 --=20 2.34.1 From nobody Fri Oct 23 22:16:18 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=1792693997; cv=none; d=zohomail.com; s=zohoarc; b=a7Ig7qfB24CBxqpE/uhlozIqjhsPuWAtM8VinD2o3UrBzdR3dtdHQcE1hS19G1neKxoAZ/dpBseLJMSdZlMvP8PKEx3Xl/1mTcLq+SDsh96zA7cc2sScPZs8yUhM/ypjEUl4b9779f5QkUV+skCcn0T7PwDFJXonOk7UHkU5PIA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792693997; h=Content-Type: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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7tEwJ1DDQ4N4QCwYnpIBw2zS5gJkF+JQn9XA8UvwwJc=; b=I0a+jIc1arCXMyOSMrEMM5l4FyWdHz/pM+4eMRcqLZSFah4NncZlcT9+GRtd07u/+zRAzK6xjtU5fR5QhXrMnBvB1PVc2wOKKTbb81BAtMLhkKV3mRkIMURDeJtc6EmytB8xusH0GWWlK0jxYH7PIAOh2fZyojlmP5og756l3JY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792693997174197.48511196533855; Thu, 22 Oct 2026 11:33:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xJxav-0006GT-RB; Thu, 22 Oct 2026 14:32:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xJxaC-0006C5-1Q for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:15 -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 1xJxa7-0002eN-Pt for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:07 -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 69MIHI6r4086722 for ; Thu, 22 Oct 2026 18:32:02 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hfqmtr1ue-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 22 Oct 2026 18:32:02 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-35c5aef2a74so443142eec.0 for ; Thu, 22 Oct 2026 11:32:02 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-369d8f8eaf9sm44962eec.16.2026.10.22.11.31.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 11:31:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 7tEwJ1DDQ4N4QCwYnpIBw2zS5gJkF+JQn9XA8UvwwJc=; b=nMQ5D6UhxvBPKSUh 61jxQihNy5aeC7PDBFYC7Vgtj3JmYlrlmR0VRJLeRpxRKoDcdQs2cBfHxkYQbefy kx+12AObh+kniOcFieu+uKw55V52d4QkFO36HIyvGLa3b3dy6nXZJ60IhuCCsrsj ekxZhQVggtGQ9oqfI7wfJK0j6HPKT3RsVyOwTZuqw4OcgkQnAoiZCNh/sIuRuasx 3utnCAWAm1etQM2isrEhjUivSAD1E77jAZxH+Vfs0jndni3/lEhg0UcotPh+y4uV yQnddpnzc/y8w4jtwPS98KYam2GqGgNEiAFmAZ4m5h1FhGrZSTlYAzT6sU3ge6qt sp1YaA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1792693922; x=1793298722; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=7tEwJ1DDQ4N4QCwYnpIBw2zS5gJkF+JQn9XA8UvwwJc=; b=Z6xtg2jAjmIcqxsEKZDGMqcURDiNoOQYPFauNXoNKbny7NuWjt5HQ+akvKH7kr0yI5 Z1Bo77bJ4s8rysPyBt71v4627jJXOYJRSatzbiVSkkxmweU4r7EQh59OHpAZyJ2tAbl1 enGFVQfBkk6U+OPCOB7Qebb1rrXuuYeb1c+zj0adDb7D0qd7i/VMhCl/30afdQBBisuB SZqhyBwl0djO0tQ33Lk3m5XsDLJPT9xe24fc7ciahhAgRwctG2RaJl3aIjaVZC3QvrOa b6UXgOIRX9ZyWQg5RTiIcu3iXlBF2BkpnEsrqW81qny9OAoN9IM37HryXmy1JIH1B6c9 I0Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792693922; x=1793298722; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=7tEwJ1DDQ4N4QCwYnpIBw2zS5gJkF+JQn9XA8UvwwJc=; b=d3SFbOkxRh5mXvW0lnJLPJXTC2fSeWoppxemUgURZhKrCZn+u9HIdjESOXPlS1/f6b nLwy1OW70OawSHq0K51/tFitoABqprINCERDdlb+vpKb2GqHg/o1yAEJmTAKtSklf0X9 gIidkDYIjacZNPQ9TLuNl2PVmomSDu6eCKfwOMp8cZiiulj+DUgEtCftHD5ccTj7D6qU XSPnJ44Oz51qfWMpyumJjNj/poNdFO5DgIgIbMV2IlEwh8xwpfe8VBS/d4hj3uz/h6KR p8kSbqXgEOY/DG2pNLig1xJoGQQUhflycLaMYTEqLtOjcNttyPY56EBtKmI/asnVjnRy IQpQ== X-Gm-Message-State: AFq9FYJrZT8oScHmtiAs5RLvx0PakyCijOTNQtF2y/LSmWiWvEQOsWjP M/YE8ABzef3fx9FnNWl6cpihXWhk4XVS83Lu6KQnD80fcGy6b36nKgvsS4K3sUkLSMIuq7goOhW YKcDvovBfjhJe2cOV7ItUxGhQhU8TMtgtD/UFse5k5y+PrbR/m3BppQ9of4f5r2J9XQ== X-Gm-Gg: AYBFou2RMnZqiX8j3gHtj4QJ+Fxb/yO5ENUWYQoj4f9Lhct2Otz8Zgox9z5l2mg88la aDHDsOeB9gL66v3jjztL9YjXsHW5uBncwzGPD1fVWPYljrpp1uL+7LNCzd0BWtndzzSvRkoGRh6 qrK4Iwj93pQnr3Df570IHyuYsCbML9bI+NfiS250Gh6t5jaKz89td9ufJyt6gV2O2FLE81ZMw/S arimWA6ahFC+GuT/bY+ZOGTwdfCIPo0aFd+DZT3iOz3WByWtrnX2W5I/EZ/75tyK3KW1c+UikhO Ew+RvKRCEaLA/OS3wkbkAK++K5XJbQ2UmMuwqicW3CDXMhklyNXfn1nAITIRPKhlwDuCu75c6Y1 GLWgG0IphFXhGKvpAM0y8qGy0wWIKOnAPM9AFJRwURB8uyM2s X-Received: by 2002:a05:7300:c00b:10b0:369:21a:dcca with SMTP id 5a478bee46e88-369021ae1cdmr3397583eec.10.1792693921350; Thu, 22 Oct 2026 11:32:01 -0700 (PDT) X-Received: by 2002:a05:7300:c00b:10b0:369:21a:dcca with SMTP id 5a478bee46e88-369021ae1cdmr3397537eec.10.1792693920459; Thu, 22 Oct 2026 11:32:00 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: Brian Cain , Anton Johansson , Pierrick Bouvier , Helge Deller , Mohamed Mediouni , Alessandro Di Federico , Laurent Vivier , Marco Liebel Subject: [PATCH v4 06/11] target/hexagon: add v83 trap2 and vector stack instructions Date: Thu, 22 Oct 2026 11:31:42 -0700 Message-Id: <20261022183147.1535585-7-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> References: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=Gt3XaU1C c=1 sm=1 tr=0 ts=6ada56a2 cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=4mEk3vdVvNzrXqzLbLIA:9 a=QEXdDO2ut3YA:10 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-GUID: cT4F5sq9xRzavc5LmqzcGcSWnrT_arYi X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX+DQi3pkHaUb1 /cuQKxahSOMMCvAr0yPAPzRI+fHJKx5miblhDgw1aCNl1kTvW7C58zJlfpo7Axb2jA/LjI+IZVU gdSB8XnwqqwtTdFpTvaG9tpjVUfss65y1Ea5cOl+DNH+bY0W9/v7n6svqkl0F1BlcjPhtdZHRC9 YsvsKd5N6FmPw0sFDsMlPvz0YvHj7IASO/GQfS/LMiebASaLxEM8PS7qngViB9VyPzNCmqPhTYV i5DSfqMpVMPatXUn1lrx3/XnVpYTv8MktUQQb49zgLWLWukFQVaeAyu1vY4vFt4UfoSkA4v14Sp hUiqO3Ck8mu2UwzHD4vGmwON480Olhu5bZc4isFGxVRR9e6WxB9RsFjalGb45CBWCWKFTk8rQu5 XskWjCUriJkhWffKTQ9Pq0F56W4FAuvw0MLx+R+Kweqfrct3sEz05iCE5DO8zTnliwKA7rr+ytY iyyoLhahXMkDiBXamcQ== X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX3lSfL55PzH8r CIgAi/PM4Ph2r7SKVhf0CSbSRVVbWsXzVNzFxdax+huN9tUxDm0HJp0kLDGixmHGywMf1X3IoEk O2blMi3DxU03e61N54wnhUD8botgeqA= X-Proofpoint-ORIG-GUID: cT4F5sq9xRzavc5LmqzcGcSWnrT_arYi X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.138,FMLib:17.12.100.49 definitions=2026-10-22_06,2026-10-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 spamscore=0 suspectscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610220073 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@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, 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: 1792693999682158500 Add decode and translation for trap2 and the vallocframe and vdeallocframe instruction forms introduced with v83. Model vector stack overflow as a precise exception and report it to linux-user as SIGSEGV. Teach the IDEF parser about VSP and vector frame checks. Describe the vallocframe and vdeallocframe instruction semantics in system.idef, and move the vector stack overflow check into a shared TCG generator helper. Reviewed-by: Pierrick Bouvier Signed-off-by: Brian Cain Reviewed-by: Marco Liebel --- target/hexagon/cpu_bits.h | 2 + target/hexagon/gen_tcg.h | 51 +++++++++++++++++++++ target/hexagon/genptr.h | 1 + target/hexagon/hex_regs.h | 2 + target/hexagon/idef-parser/parser-helpers.h | 1 + target/hexagon/translate.h | 1 + linux-user/hexagon/cpu_loop.c | 5 ++ target/hexagon/cpu.c | 2 +- target/hexagon/decode.c | 1 + target/hexagon/genptr.c | 21 +++++++++ target/hexagon/hexswi.c | 25 +++++++++- target/hexagon/iclass.c | 1 + target/hexagon/idef-parser/parser-helpers.c | 14 ++++++ target/hexagon/translate.c | 2 +- target/hexagon/tag_rev_info.c.inc | 10 ++++ target/hexagon/gen_idef_parser_funcs.py | 2 +- target/hexagon/idef-parser/idef-parser.lex | 8 ++++ target/hexagon/idef-parser/idef-parser.y | 9 +++- target/hexagon/imported/encode_pp.def | 5 ++ target/hexagon/imported/system.idef | 8 ++++ 20 files changed, 166 insertions(+), 5 deletions(-) diff --git a/target/hexagon/cpu_bits.h b/target/hexagon/cpu_bits.h index a8fba4aa188..6a800525348 100644 --- a/target/hexagon/cpu_bits.h +++ b/target/hexagon/cpu_bits.h @@ -41,6 +41,7 @@ enum hex_event { HEX_EVENT_TLB_MISS_RW =3D 0x6, HEX_EVENT_TRAP0 =3D 0x8, HEX_EVENT_TRAP1 =3D 0x9, + HEX_EVENT_TRAP2 =3D 0xa, HEX_EVENT_FPTRAP =3D 0xb, HEX_EVENT_DEBUG =3D 0xc, HEX_EVENT_INT0 =3D 0x10, @@ -77,6 +78,7 @@ enum hex_cause { HEX_CAUSE_NO_COPROC2_ENABLE =3D 0x018, HEX_CAUSE_PRIV_USER_NO_GINSN =3D 0x01a, HEX_CAUSE_PRIV_USER_NO_SINSN =3D 0x01b, + HEX_CAUSE_VECTOR_STACK_OVERFLOW =3D 0x01c, HEX_CAUSE_REG_WRITE_CONFLICT =3D 0x01d, HEX_CAUSE_PC_NOT_ALIGNED =3D 0x01e, HEX_CAUSE_MISALIGNED_LOAD =3D 0x020, diff --git a/target/hexagon/gen_tcg.h b/target/hexagon/gen_tcg.h index e972bb4e5b8..690bf20e6b2 100644 --- a/target/hexagon/gen_tcg.h +++ b/target/hexagon/gen_tcg.h @@ -531,6 +531,57 @@ do { RsV =3D RsV; } while (0) #endif =20 +#ifdef CONFIG_USER_ONLY +#define fGEN_TCG_V2_CHECK_AND_WRITE_VSP(VSP) \ + do { \ + TCGLabel *write_vsp =3D gen_new_label(); \ + tcg_gen_brcond_tl(TCG_COND_GEU, VSP, \ + hex_gpr[HEX_REG_VFRAMELIMIT], write_vsp); \ + gen_precise_exception(HEX_CAUSE_VECTOR_STACK_OVERFLOW, ctx->pkt.pc= ); \ + gen_set_label(write_vsp); \ + tcg_gen_mov_tl(hex_gpr[HEX_REG_VSP], VSP); \ + } while (0) +#else +#define fGEN_TCG_V2_CHECK_AND_WRITE_VSP(VSP) \ + do { \ + TCGLabel *write_vsp =3D gen_new_label(); \ + TCGv mode =3D tcg_temp_new(); \ + tcg_gen_andi_tl(mode, hex_t_sreg[HEX_SREG_SSR], \ + 1 << reg_field_info[SSR_EX].offset); \ + tcg_gen_brcondi_tl(TCG_COND_NE, mode, 0, write_vsp); \ + tcg_gen_andi_tl(mode, hex_t_sreg[HEX_SREG_SSR], \ + 1 << reg_field_info[SSR_UM].offset); \ + tcg_gen_brcondi_tl(TCG_COND_EQ, mode, 0, write_vsp); \ + tcg_gen_brcond_tl(TCG_COND_GEU, VSP, \ + hex_gpr[HEX_REG_VFRAMELIMIT], write_vsp); \ + gen_precise_exception(HEX_CAUSE_VECTOR_STACK_OVERFLOW, ctx->pkt.pc= ); \ + gen_set_label(write_vsp); \ + tcg_gen_mov_tl(hex_gpr[HEX_REG_VSP], VSP); \ + } while (0) +#endif +#define fGEN_TCG_V2_vallocframe_imm(SHORTCODE) \ + do { \ + TCGv vsp =3D tcg_temp_new(); \ + tcg_gen_subi_tl(vsp, hex_gpr[HEX_REG_VSP], uiV << 11); \ + fGEN_TCG_V2_CHECK_AND_WRITE_VSP(vsp); \ + } while (0) +#define fGEN_TCG_V2_vallocframe_reg(SHORTCODE) \ + do { \ + TCGv size =3D tcg_temp_new(); \ + TCGv vsp =3D tcg_temp_new(); \ + tcg_gen_shli_tl(size, RsV, 11); \ + tcg_gen_sub_tl(vsp, hex_gpr[HEX_REG_VSP], size); \ + fGEN_TCG_V2_CHECK_AND_WRITE_VSP(vsp); \ + } while (0) +#define fGEN_TCG_V2_vdeallocframe_imm(SHORTCODE) \ + tcg_gen_addi_tl(hex_gpr[HEX_REG_VSP], hex_gpr[HEX_REG_VSP], uiV << 11) +#define fGEN_TCG_V2_vdeallocframe_reg(SHORTCODE) \ + do { \ + TCGv size =3D tcg_temp_new(); \ + tcg_gen_shli_tl(size, RsV, 11); \ + tcg_gen_add_tl(hex_gpr[HEX_REG_VSP], hex_gpr[HEX_REG_VSP], size); \ + } while (0) + /* * allocframe(#uiV) * RxV =3D=3D r29 diff --git a/target/hexagon/genptr.h b/target/hexagon/genptr.h index 7c0e90e93aa..270375251f8 100644 --- a/target/hexagon/genptr.h +++ b/target/hexagon/genptr.h @@ -69,6 +69,7 @@ typedef enum { void gen_atomic4(DisasContext *ctx, TCGv dest, TCGv vaddr, TCGv src, HexAtomicOp operation); void gen_atomic8(DisasContext *ctx, TCGv_i64 dest, TCGv vaddr, TCGv_i64 sr= c); +void gen_vframecheck(DisasContext *ctx, TCGv vsp); void probe_noshuf_load(TCGv va, int s, int mi); void gen_gvec_sabsdiff_var(unsigned vece, TCGv_ptr dbase, uint32_t dofs, TCGv_ptr abase, uint32_t aofs, diff --git a/target/hexagon/hex_regs.h b/target/hexagon/hex_regs.h index 1f6bf9f88a0..03feca477b6 100644 --- a/target/hexagon/hex_regs.h +++ b/target/hexagon/hex_regs.h @@ -77,6 +77,8 @@ enum { HEX_REG_QEMU_PKT_CNT =3D 52, HEX_REG_QEMU_INSN_CNT =3D 53, HEX_REG_QEMU_HVX_CNT =3D 54, + HEX_REG_VFRAMELIMIT =3D 60, + HEX_REG_VSP =3D 61, HEX_REG_UTIMERLO =3D 62, HEX_REG_UTIMERHI =3D 63, }; diff --git a/target/hexagon/idef-parser/parser-helpers.h b/target/hexagon/i= def-parser/parser-helpers.h index d3dfcec5690..0c9ddc0727e 100644 --- a/target/hexagon/idef-parser/parser-helpers.h +++ b/target/hexagon/idef-parser/parser-helpers.h @@ -296,6 +296,7 @@ void gen_cancel(Context *c, YYLTYPE *locp); void gen_load_cancel(Context *c, YYLTYPE *locp); =20 void gen_framecheck(Context *c, YYLTYPE *locp, HexValue *addr, HexValue *e= a); +void gen_vframecheck(Context *c, YYLTYPE *locp, HexValue *addr); =20 void gen_load(Context *c, YYLTYPE *locp, HexValue *size, HexSignedness signedness, HexValue *ea, HexValue *dst); diff --git a/target/hexagon/translate.h b/target/hexagon/translate.h index dc0c6b18bf1..47ca5e8ae01 100644 --- a/target/hexagon/translate.h +++ b/target/hexagon/translate.h @@ -364,6 +364,7 @@ extern TCGv_i64 hex_llsc_val_i64; extern TCGv hex_vstore_addr[VSTORES_MAX]; extern TCGv hex_vstore_size[VSTORES_MAX]; extern TCGv hex_vstore_pending[VSTORES_MAX]; +void gen_precise_exception(int cause, uint32_t pc); #ifdef CONFIG_USER_ONLY #define hex_hvx_ptr tcg_env #define HEX_HVX_OFFSET(member) offsetof(CPUHexagonState, hvx_ctx.member) diff --git a/linux-user/hexagon/cpu_loop.c b/linux-user/hexagon/cpu_loop.c index e6bb3b62a9f..22570a12648 100644 --- a/linux-user/hexagon/cpu_loop.c +++ b/linux-user/hexagon/cpu_loop.c @@ -48,6 +48,7 @@ void cpu_loop(CPUHexagonState *env) /* just indicate that signals should be handled asap */ break; case HEX_EVENT_TRAP0: + case HEX_EVENT_TRAP2: syscallnum =3D env->gpr[6]; env->gpr[HEX_REG_PC] +=3D 4; ret =3D do_syscall(env, @@ -73,6 +74,10 @@ void cpu_loop(CPUHexagonState *env) force_sig_fault(TARGET_SIGSEGV, TARGET_SEGV_MAPERR, env->gpr[HEX_REG_PC]); break; + case HEX_CAUSE_VECTOR_STACK_OVERFLOW: + force_sig_fault(TARGET_SIGSEGV, TARGET_SEGV_BNDERR, + env->gpr[HEX_REG_PC]); + break; case HEX_CAUSE_PRIV_USER_NO_GINSN: case HEX_CAUSE_PRIV_USER_NO_SINSN: case HEX_CAUSE_INVALID_PACKET: diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index 1e3df5d0d03..f4f733cc251 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -87,7 +87,7 @@ const char * const hexagon_regnames[TOTAL_PER_THREAD_REGS= ] =3D { "sa0", "lc0", "sa1", "lc1", "p3_0", "c5", "m0", "m1", "usr", "pc", "ugp", "gp", "cs0", "cs1", "c14", "c15", "c16", "c17", "c18", "c19", "pkt_cnt", "insn_cnt", "hvx_cnt", "c23", - "c24", "c25", "c26", "c27", "c28", "c29", "c30", "c31", + "c24", "c25", "c26", "c27", "vframelimit", "vsp", "c30", "c31", }; =20 #ifndef CONFIG_USER_ONLY diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c index 89e961331ff..a28bf9ce9fe 100644 --- a/target/hexagon/decode.c +++ b/target/hexagon/decode.c @@ -186,6 +186,7 @@ static bool decode_opcode_can_jump(int opcode) (GET_ATTRIB(opcode, A_CALL)) || (opcode =3D=3D J2_trap0) || (opcode =3D=3D J2_trap1) || + (opcode =3D=3D J2_trap2) || (opcode =3D=3D J2_rte) || (opcode =3D=3D J2_pause)) { /* Exception to A_JUMP attribute */ diff --git a/target/hexagon/genptr.c b/target/hexagon/genptr.c index 58c31b05d57..d234f994f46 100644 --- a/target/hexagon/genptr.c +++ b/target/hexagon/genptr.c @@ -730,6 +730,27 @@ void gen_atomic8(DisasContext *ctx, TCGv_i64 dest, TCG= v vaddr, TCGv_i64 src) MO_LE | MO_64 | MO_ALIGN); } =20 +void gen_vframecheck(DisasContext *ctx, TCGv vsp) +{ + TCGLabel *write_vsp =3D gen_new_label(); + +#ifndef CONFIG_USER_ONLY + TCGv mode =3D tcg_temp_new(); + + tcg_gen_andi_tl(mode, hex_t_sreg[HEX_SREG_SSR], + 1 << reg_field_info[SSR_EX].offset); + tcg_gen_brcondi_tl(TCG_COND_NE, mode, 0, write_vsp); + tcg_gen_andi_tl(mode, hex_t_sreg[HEX_SREG_SSR], + 1 << reg_field_info[SSR_UM].offset); + tcg_gen_brcondi_tl(TCG_COND_EQ, mode, 0, write_vsp); +#endif + tcg_gen_brcond_tl(TCG_COND_GEU, vsp, + hex_gpr[HEX_REG_VFRAMELIMIT], write_vsp); + gen_precise_exception(HEX_CAUSE_VECTOR_STACK_OVERFLOW, ctx->pkt.pc); + gen_set_label(write_vsp); + tcg_gen_mov_tl(hex_gpr[HEX_REG_VSP], vsp); +} + #ifndef CONFIG_HEXAGON_IDEF_PARSER static TCGv gen_slotval(DisasContext *ctx) { diff --git a/target/hexagon/hexswi.c b/target/hexagon/hexswi.c index e7362b56650..5783781195e 100644 --- a/target/hexagon/hexswi.c +++ b/target/hexagon/hexswi.c @@ -366,6 +366,10 @@ static void coredump(CPUHexagonState *env) fprintf(f, "0x%x, Stack limit check error", HEX_CAUSE_STACK_LIMIT); break; + case HEX_CAUSE_VECTOR_STACK_OVERFLOW: + fprintf(f, "0x%x, Vector stack overflow", + HEX_CAUSE_VECTOR_STACK_OVERFLOW); + break; case HEX_CAUSE_FPTRAP_CAUSE_BADFLOAT: fprintf(f, "0x%x, Floating-Point: Execution of Floating-Point " "instruction resulted in exception", @@ -743,6 +747,7 @@ static const char *event_name[] =3D { [HEX_EVENT_TLB_MISS_RW] =3D "HEX_EVENT_TLB_MISS_RW", [HEX_EVENT_TRAP0] =3D "HEX_EVENT_TRAP0", [HEX_EVENT_TRAP1] =3D "HEX_EVENT_TRAP1", + [HEX_EVENT_TRAP2] =3D "HEX_EVENT_TRAP2", [HEX_EVENT_FPTRAP] =3D "HEX_EVENT_FPTRAP", [HEX_EVENT_DEBUG] =3D "HEX_EVENT_DEBUG", [HEX_EVENT_INT0] =3D "HEX_EVENT_INT0", @@ -805,6 +810,11 @@ void hexagon_cpu_do_interrupt(CPUState *cs) set_addresses(env, 4, cs->exception_index); break; =20 + case HEX_EVENT_TRAP2: + hexagon_ssr_set_cause(env, env->cause_code); + set_addresses(env, 4, cs->exception_index); + break; + case HEX_EVENT_TLB_MISS_X: switch (env->cause_code) { case HEX_CAUSE_TLBMISSX_CAUSE_NORMAL: @@ -911,6 +921,7 @@ void hexagon_cpu_do_interrupt(CPUState *cs) case HEX_CAUSE_NO_COPROC_ENABLE: case HEX_CAUSE_NO_COPROC2_ENABLE: case HEX_CAUSE_UNSUPPORTED_HVX_64B: + case HEX_CAUSE_VECTOR_STACK_OVERFLOW: case HEX_CAUSE_REG_WRITE_CONFLICT: case HEX_CAUSE_VWCTRL_WINDOW_MISS: hexagon_ssr_set_cause(env, env->cause_code); @@ -991,7 +1002,19 @@ void register_trap_exception(CPUHexagonState *env, in= t traptype, int imm, { CPUState *cs =3D env_cpu(env); =20 - cs->exception_index =3D (traptype =3D=3D 0) ? HEX_EVENT_TRAP0 : HEX_EV= ENT_TRAP1; + switch (traptype) { + case 0: + cs->exception_index =3D HEX_EVENT_TRAP0; + break; + case 1: + cs->exception_index =3D HEX_EVENT_TRAP1; + break; + case 2: + cs->exception_index =3D HEX_EVENT_TRAP2; + break; + default: + g_assert_not_reached(); + } ASSERT_DIRECT_TO_GUEST_UNSET(env, cs->exception_index); =20 env->cause_code =3D imm; diff --git a/target/hexagon/iclass.c b/target/hexagon/iclass.c index c3f8523b27d..00b8108a8fb 100644 --- a/target/hexagon/iclass.c +++ b/target/hexagon/iclass.c @@ -50,6 +50,7 @@ SlotMask find_iclass_slots(Opcode opcode, int itype) } else if (GET_ATTRIB(opcode, A_RESTRICT_NOSLOT1)) { return SLOTS_0; } else if ((opcode =3D=3D J2_trap0) || + (opcode =3D=3D J2_trap2) || (opcode =3D=3D Y2_isync) || (opcode =3D=3D J2_pause)) { return SLOTS_2; diff --git a/target/hexagon/idef-parser/parser-helpers.c b/target/hexagon/i= def-parser/parser-helpers.c index 49cc11fddd8..104f935a21e 100644 --- a/target/hexagon/idef-parser/parser-helpers.c +++ b/target/hexagon/idef-parser/parser-helpers.c @@ -25,6 +25,7 @@ #include #include =20 +#include "hex_regs.h" #include "idef-parser.h" #include "parser-helpers.h" #include "idef-parser.tab.h" @@ -1313,6 +1314,11 @@ void gen_write_reg(Context *c, YYLTYPE *locp, HexVal= ue *reg, HexValue *value) yyassert(c, locp, reg->type =3D=3D REGISTER, "reg must be a register!"= ); value_m =3D gen_rvalue_truncate(c, locp, &value_m); value_m =3D rvalue_materialize(c, locp, &value_m); + if (reg->reg.id =3D=3D HEX_REG_VSP) { + OUT(c, locp, "tcg_gen_mov_tl(hex_gpr[HEX_REG_VSP], ", &value_m, + ");\n"); + return; + } OUT(c, locp, "tcg_gen_mov_tl(get_result_gpr(ctx, ", ®->reg.id, "), ", @@ -1740,6 +1746,14 @@ void gen_framecheck(Context *c, YYLTYPE *locp, HexVa= lue *addr, HexValue *ea) OUT(c, locp, "gen_framecheck(ctx, ", &addr_m, ", ", &ea_m, ");\n"); } =20 +void gen_vframecheck(Context *c, YYLTYPE *locp, HexValue *addr) +{ + HexValue addr_m =3D rvalue_materialize(c, locp, addr); + + addr_m =3D gen_rvalue_truncate(c, locp, &addr_m); + OUT(c, locp, "gen_vframecheck(ctx, ", &addr_m, ");\n"); +} + void gen_load(Context *c, YYLTYPE *locp, HexValue *width, HexSignedness signedness, HexValue *ea, HexValue *dst) { diff --git a/target/hexagon/translate.c b/target/hexagon/translate.c index 2c18f5eebff..6e7c2f32f41 100644 --- a/target/hexagon/translate.c +++ b/target/hexagon/translate.c @@ -136,7 +136,7 @@ intptr_t ctx_tmp_vreg_off(DisasContext *ctx, int regnum, return offset; } =20 -static void gen_precise_exception(int cause, uint32_t PC) +void gen_precise_exception(int cause, uint32_t PC) { tcg_gen_movi_i32(hex_cause_code, cause); gen_helper_hexagon_raise_exception(tcg_env, tcg_constant_i32(HEX_EVENT= _PRECISE), diff --git a/target/hexagon/tag_rev_info.c.inc b/target/hexagon/tag_rev_inf= o.c.inc index a1b7b50cbf2..c2d4886a846 100644 --- a/target/hexagon/tag_rev_info.c.inc +++ b/target/hexagon/tag_rev_info.c.inc @@ -699,6 +699,16 @@ static const struct tag_rev_info tag_rev_info[XX_LAST_= OPCODE] =3D { }, [V6_vconv_bf_qf32] =3D { .introduced =3D HEX_VER_V81, .removed =3D HEX= _VER_NONE }, =20 + [V2_vallocframe_imm] =3D { .introduced =3D HEX_VER_V83, + .removed =3D HEX_VER_NONE }, + [V2_vallocframe_reg] =3D { .introduced =3D HEX_VER_V83, + .removed =3D HEX_VER_NONE }, + [V2_vdeallocframe_imm] =3D { .introduced =3D HEX_VER_V83, + .removed =3D HEX_VER_NONE }, + [V2_vdeallocframe_reg] =3D { .introduced =3D HEX_VER_V83, + .removed =3D HEX_VER_NONE }, + [J2_trap2] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_NON= E }, + [Y4_dcfetch_multi] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_NONE }, [AM_addw_aq] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_N= ONE }, diff --git a/target/hexagon/gen_idef_parser_funcs.py b/target/hexagon/gen_i= def_parser_funcs.py index 7151a4f6713..9293be4c398 100644 --- a/target/hexagon/gen_idef_parser_funcs.py +++ b/target/hexagon/gen_idef_parser_funcs.py @@ -77,7 +77,7 @@ def main(): if tag in {"S4_vrcrotate_acc", "S4_vrcrotate"}: continue ## Skip trap instructions - if tag in {"J2_trap0", "J2_trap1"}: + if tag in {"J2_trap0", "J2_trap1", "J2_trap2"}: continue ## Skip 128-bit instructions if tag in {"A7_croundd_ri", "A7_croundd_rr"}: diff --git a/target/hexagon/idef-parser/idef-parser.lex b/target/hexagon/id= ef-parser/idef-parser.lex index cd5958ec904..c2fc10dccce 100644 --- a/target/hexagon/idef-parser/idef-parser.lex +++ b/target/hexagon/idef-parser/idef-parser.lex @@ -161,6 +161,7 @@ STRING_LIT \"(\\.|[^"\\])*\" "fFRAME_SCRAMBLE" | "fFRAME_UNSCRAMBLE" { return FSCR; } "fFRAMECHECK" { return FCHK; } +"fVFRAMECHECK" { return VFCHK; } "Constant_extended" { return CONSTEXT; } "fCL1_"{DIGIT} { return LOCNT; } "fbrev" { return BREV; } @@ -329,6 +330,13 @@ STRING_LIT \"(\\.|[^"\\])*\" yylval->rvalue.bit_width =3D 32; yylval->rvalue.signedness =3D UNSIGNED; return REG; } +"VSP" { yylval->rvalue.type =3D REGISTER; + yylval->rvalue.reg.type =3D GENERAL_PURPOSE; + yylval->rvalue.reg.id =3D HEX_REG_VSP; + yylval->rvalue.reg.bit_width =3D 32; + yylval->rvalue.bit_width =3D 32; + yylval->rvalue.signedness =3D UNSIGNED; + return REG; } "fREAD_FP()" | "FP" { yylval->rvalue.type =3D REGISTER; yylval->rvalue.reg.type =3D GENERAL_PURPOSE; diff --git a/target/hexagon/idef-parser/idef-parser.y b/target/hexagon/idef= -parser/idef-parser.y index 3cffafa5b76..b846cf24d01 100644 --- a/target/hexagon/idef-parser/idef-parser.y +++ b/target/hexagon/idef-parser/idef-parser.y @@ -51,7 +51,7 @@ =20 %token IN INAME VAR %token ABS CROUND ROUND CIRCADD COUNTONES INC DEC ANDA ORA XORA PLUSPLUS A= SL -%token ASR LSR EQ NEQ LTE GTE MIN MAX ANDL FOR ICIRC IF MUN FSCR FCHK SXT +%token ASR LSR EQ NEQ LTE GTE MIN MAX ANDL FOR ICIRC IF MUN FSCR FCHK VFCH= K SXT %token ZXT CONSTEXT LOCNT BREV SIGN LOAD STORE PC LPCFG %token LOAD_CANCEL STORE_CANCEL CANCEL IDENTITY ROTL INSBITS SETBITS EXTRA= NGE %token CAST4_8U FAIL CARRY_FROM_ADD ADDSAT64 LSBNEW @@ -398,6 +398,7 @@ assign_statement : lvalue '=3D' rvalue ; =20 control_statement : frame_check + | vframe_check | cancel_statement | if_statement | for_statement @@ -409,6 +410,12 @@ frame_check : FCHK '(' rvalue ',' rvalue ')' ';' } ; =20 +vframe_check : VFCHK '(' rvalue ',' rvalue ')' ';' + { + gen_vframecheck(c, &@1, &$3); + } + ; + cancel_statement : LOAD_CANCEL { gen_load_cancel(c, &@1); diff --git a/target/hexagon/imported/encode_pp.def b/target/hexagon/importe= d/encode_pp.def index c590ed4f959..ed1de09a40c 100644 --- a/target/hexagon/imported/encode_pp.def +++ b/target/hexagon/imported/encode_pp.def @@ -409,6 +409,11 @@ DEF_EXT_SPACE(EXTRACTW, ICLASS_LD" 001 0 000 iiiii P= P0iiiii 001iiiii") DEF_ENC32(Y2_dcfetchbo, "10010100000sssssPP000iiiiiiiiiii") DEF_ENC32(Y4_dcfetch_multi,"10010100000sssssPP001ttttt------") DEF_ENC32(Y2_dcfetchbo_nt,"10010100000sssssPP10-iiiiiiiiiii") +DEF_ENC32(V2_vallocframe_imm,"01100000100-----PP001----iiiiiii") +DEF_ENC32(V2_vallocframe_reg,"01100000100sssssPP010-----------") +DEF_ENC32(V2_vdeallocframe_imm,"01101010100-----PP001----iiiiiii") +DEF_ENC32(V2_vdeallocframe_reg,"01101001010sssssPP010-----------") +DEF_ENC32(J2_trap2,"0101010011------PP-iiiii---iii--") =20 =20 =20 diff --git a/target/hexagon/imported/system.idef b/target/hexagon/imported/= system.idef index 9c4897a2eee..80fa0cd5618 100644 --- a/target/hexagon/imported/system.idef +++ b/target/hexagon/imported/system.idef @@ -48,6 +48,9 @@ Q6INSN(J2_trap1,"trap1(Rx32,#u8)",ATTRIBS(A_COF,A_NOTE_NO= PACKET,A_RESTRICT_NOPAC fVIRTINSN_SPSWAP(uiV,RxV); }) =20 +Q6INSN(J2_trap2,"trap2(#u8)",ATTRIBS(A_COF,A_RESTRICT_NOPACKET), + "Trap to Operating System", { fTRAP(2,uiV); }) + Q6INSN(J2_pause,"pause(#u8)",ATTRIBS(A_COF,A_NOTE_NOPACKET,A_RESTRICT_NOPA= CKET), "Enter low-power state for #u8 cycles",{fPAUSE(uiV);}) =20 @@ -241,6 +244,11 @@ Q6INSN(Y6_dmresume,"dmresume(Rs32)",ATTRIBS(A_NOTE_NOP= ACKET,A_RESTRICT_NOPACKET, =20 Q6INSN(Y2_dcfetchbo,"dcfetch(Rs32+#u11:3)",ATTRIBS(A_RESTRICT_PREFERSLOT0,= A_DCFETCH,A_RESTRICT_NOSLOT1_STORE),"Data Cache Prefetch",{fEA_RI(RsV,uiV);= fDCFETCH(EA);}) Q6INSN(Y2_dcfetchbo_nt,"dcfetch(Rs32+#u11:3):nt",ATTRIBS(A_NA_NT,A_RESTRIC= T_PREFERSLOT0,A_DCFETCH,A_RESTRICT_NOSLOT1_STORE),"Data Cache Prefetch",{fE= A_RI(RsV,uiV); fDCFETCH(EA);}) + +Q6INSN(V2_vallocframe_imm,"vallocframe(#u7:0)",ATTRIBS(A_RESTRICT_NOPACKET= ),"Allocate vector stack frame",{ fVFRAMECHECK(VSP - (uiV << 11), VSP); }) +Q6INSN(V2_vallocframe_reg,"vallocframe(Rs32)",ATTRIBS(A_RESTRICT_NOPACKET)= ,"Allocate vector stack frame",{ fVFRAMECHECK(VSP - (RsV << 11), VSP); }) +Q6INSN(V2_vdeallocframe_imm,"vdeallocframe(#u7:0)",ATTRIBS(A_RESTRICT_NOPA= CKET),"Deallocate vector stack frame",{ VSP =3D VSP + (uiV << 11); }) +Q6INSN(V2_vdeallocframe_reg,"vdeallocframe(Rs32)",ATTRIBS(A_RESTRICT_NOPAC= KET),"Deallocate vector stack frame",{ VSP =3D VSP + (RsV << 11); }) Q6INSN(Y4_dcfetch_multi,"dcfetch_multi(Rs32,Rt32)",ATTRIBS(A_RESTRICT_PREF= ERSLOT0,A_DCFETCH,A_RESTRICT_NOSLOT1_STORE),"Data Cache Prefetch",{fEA_REG(= RsV); fDCFETCH_MULTI(EA,fEXTRACTU_BITS(RtV,10,0));}) Q6INSN(Y2_dckill,"dckill",ATTRIBS(A_PRIV,A_NOTE_PRIV,A_NOTE_NOPACKET,A_RES= TRICT_SLOT0ONLY,A_RESTRICT_NOPACKET,A_CACHEOP,A_DCFLUSHOP),"Data Cache Inva= lidate",{fDCKILL();}) =20 --=20 2.34.1 From nobody Fri Oct 23 22:16:18 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=1792694032; cv=none; d=zohomail.com; s=zohoarc; b=NdRNOpDgCzaZSNHkha7J746eFt4vgnXV+Lq2yWpNJiaVL2bA6fscK8xuk2S38MSHIPiPY8CHO1RuVf6T1XnC0iV5nCFovu5pUM5y0yWXm1fgITD0z0eRyy7+n1BAagJiBLEuAmxAqPCSfLeGE2q2YIf5MDN4Mg645eO+3IkRmyY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792694032; h=Content-Type: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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Vvu9zBmeiG5IdSolQTzttEOvEX3GYy/D7ZOye8S8kUw=; b=TvN/4I0v1fAam7hhz1zK8bSsMxWHvYyl9TxM2dEfQEOYwZECHMabbNBXa46uyhNzR+FoLzDedOh9CnMoeiG6RCxP+UjIhfei/dcDn9bWF4bInQ9q9GLy5Qo+/KKMI4fdRXdu7tHHAzsH5sK6K8cCrQc/YUdqekGZEtLHm6ivXRA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792694031579686.0587627020878; Thu, 22 Oct 2026 11:33:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xJxbY-0006W3-Ue; Thu, 22 Oct 2026 14:33: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 1xJxaB-0006C4-N4 for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:15 -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 1xJxa9-0002eb-VC for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:07 -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 69MHtTEG387600 for ; Thu, 22 Oct 2026 18:32:04 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hfewq42th-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 22 Oct 2026 18:32:04 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-3698bd5392cso31866eec.1 for ; Thu, 22 Oct 2026 11:32:04 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-369d8f8eaf9sm44962eec.16.2026.10.22.11.32.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 11:32:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Vvu9zBmeiG5IdSolQTzttEOvEX3GYy/D7ZOye8S8kUw=; b=mYWrnb5Iurscl1Ye 63M5pKoR8QVm+M4qYncRfu2ojP2b+j6lHx/GwE6JmKUhVOSnjtBnsZNUJvpZ08Ps tHAhiKNoXY4vux7bxlKUSCrR6qPEVS7NA+GtdxqZKOqXqLviwxSOdXoTT73KW/Uf +XdCz03TmFBNRktcfFkA75/UFY64meps2Fc6gy0FpIBwIVVNZvp8D41qjPUbKfWj wVlslfRmVrR2APwtIjl+ddMcNW5pnwQ8gaWqboaZZfOR4DrriKM8SVcDbw6SLo1A BSqgAAQVt0i7+ttuCQVU/m7sxT0JkFhlRCbyWAQdXk7E5n5uVGYnYZdUSob98kQG t3heag== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1792693923; x=1793298723; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Vvu9zBmeiG5IdSolQTzttEOvEX3GYy/D7ZOye8S8kUw=; b=fyBByM7W0I+ydNSU/0m6qkmxHNGijIIMtM3mxnUv1BjPeeYHrPGnwNBXqACpa+HL/6 ZuXLWjml8k3QROxN7CeQL5e+RKO2de/uW2FOAAilAC2b3+11jNaDmO9bZkjgTbMX/qz5 ArPwSs39VcX9QOVdC+4mMiB5nzRxpb+cTXLRlIqxj2DxWvZrdBDws9bTLu3DUtlEPD7O E9F+YZnJUf7logfZNnnAw94Uhdlll4HoaToMV3I+9VHCihzkR6q7EOYlPy6Tj1H8/8n6 7LmBs0oBcPWFqeVeNzuGRpF88KUyg/X3+nEghm3gnkntj4gIWl5XkW8kqB9DXjXcCnj7 sgnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792693923; x=1793298723; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Vvu9zBmeiG5IdSolQTzttEOvEX3GYy/D7ZOye8S8kUw=; b=BNN3a6/ee8vb5yXWeh4rglpyOp+HXSGKauc/CzQEhBd1uyXqLeFtJtQGHFEn1GYkDJ 3DjjTqkFh1hEs3EEofNRpPdUotlDmnKVlFuOU90iWnZxqQFh+J/Fx/8I+f1sKDFJutKY DtJ4cV5GqF1mSrdBAYdLRNTShfu0ypt1Bm2mKkiiZ2SasbUV1dlf41ACewY7clrh8ewr 7dSI0l77VElCqg/3rj3DfCxIi+7/x41sW3azKiYf+Pw2yADq6x8gWN7vMV2PUQSvFRFw FeM6Er9ZaD03ryKwfoe/6vtzVhUCdrxegpWqj6uBO4pQE59JBd8UhuJ1e/TUPTMeeGOZ uLTw== X-Gm-Message-State: AFq9FYIUUzlA0fFh/NKWiRlOIyQTxk4jBKC7l1uKfyF9jCaArEIzsVoX /o0JzSVtawVJWq2lUFl/WTEce5E2I1d+Fo8jTWl6pTWZbrwPRWEqAU1ak90dfavsnvadK8ELv1w 6LSWMk/6Dl0Jfn9c08SXNauOpqiD5B6SsC7J63Uf5VVbM/ejflCHekeQswr8H4tp7SQ== X-Gm-Gg: AYBFou1sdC12fcTIkszjocIuV83cy6E2Iqn8r7UaPLKh0a/D7lXLZgpFFLnJCvwXd/q MSEpnwA6k2UUBNmChZxFmXl3oUnpZ4RW3kw6sAEasX+QmmAnQ0YB07n4NBt3RHXDQTwL7yNJf8+ 0wWqV6WnrThgcgTaByU0EBxAUHOpCZsUQbK09SVjyEsxKXc2r3b7/EM0QhMCh/30Exs4De3mRJ7 RuW8r8AMP9/XAjfNnSGXkXpEvuUy6No38AnzJvV3fF+kPB7kz8hSy3zU/k60/NQYYtrtKtdlDBu +0R/aLbWTr2cSHjcCjML6Mym09EwT05vXHGdqT/B/+x/WDsQ7NReg2dSinoS3pJDVaaQtYai4fV jFjB6wSXoT2LZzvOhUrYR66DQxOrH4ZHRtoizUecAyfUgVtdq X-Received: by 2002:a05:7300:c00d:20b0:341:c383:9afb with SMTP id 5a478bee46e88-368b0d3cefcmr4267720eec.20.1792693923101; Thu, 22 Oct 2026 11:32:03 -0700 (PDT) X-Received: by 2002:a05:7300:c00d:20b0:341:c383:9afb with SMTP id 5a478bee46e88-368b0d3cefcmr4267697eec.20.1792693922540; Thu, 22 Oct 2026 11:32:02 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: Brian Cain , Anton Johansson , Pierrick Bouvier , Helge Deller , Mohamed Mediouni , Alessandro Di Federico , Laurent Vivier , Marco Liebel Subject: [PATCH v4 07/11] target/hexagon: reject reserved L4_loadw_phys encoding from v83 Date: Thu, 22 Oct 2026 11:31:43 -0700 Message-Id: <20261022183147.1535585-8-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> References: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: gwX3RCMGF5TY7i-j_2rYscuE9OcunII3 X-Proofpoint-ORIG-GUID: gwX3RCMGF5TY7i-j_2rYscuE9OcunII3 X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX889ciTe75+wy RPiEw1HLcfrE4vp/2WJB/TKo6VTT02ci1pKjIEYBItrvV2fkLBzSziFviMG08rIbbQxKMpSCfgT L8LgsoOlqs9lTCHMgTf+1QOSXpaMhU4= X-Authority-Analysis: v=2.4 cv=G4OJgNk5 c=1 sm=1 tr=0 ts=6ada56a4 cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=EkHQ-IOB5RTo-Ixd14sA:9 a=QEXdDO2ut3YA:10 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX8dAf5H7CnRQB wYZPj2wg2jGOW6QLlmesAzcD37RIYnVJmsWgN7DrL854c6QQHp5OaTVPuQE7cujYIL7pap1n8fz T8Q/cZeG+wBxowvwKk6pWZkrvgDIefYPErfaJn5SCUzf6+dfv0lP69JGuJ36qGoiIB+b0l6Q4XL CHU+596ihzWTdJTcTOUzeq+78XUGdH6bH3mKDwP6ggCUJHKlR7D79aK++ap0p6lCTttMlSQheDn alioOX85TTBewQ3KrGabvq8Ju87O4cSWUzT+cFVI2omKXplkIHhKrE5Jw6Ir1EGhiLJjpSnX7rC tX9uTC2RmwTEhdtasGajWUUzTSStKmaGYMPRipENt3AMBL8E3b3sWcEQwbnNoZGyTxJSArGpf75 iVF97YC7JSZq/7H6YFGyd8pZmdA8QQU6qnUbSfrLup8aoAFXeMvqH3zEIBBTvAX3PimngemJtMn af1lWMj0XD4zx1lINIA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.138,FMLib:17.12.100.49 definitions=2026-10-22_06,2026-10-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 adultscore=0 malwarescore=0 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610220073 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@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, 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: 1792694034001158500 Bit 7 of L4_loadw_phys is valid through v81 but reserved starting with v83. Decode it as a legacy don't-care bit, then reject it for v83 and later. Reviewed-by: Pierrick Bouvier Reviewed-by: Marco Liebel Signed-off-by: Brian Cain --- target/hexagon/decode.h | 2 ++ target/hexagon/decode.c | 19 +++++++++++++++++++ target/hexagon/printinsn.c | 3 ++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/target/hexagon/decode.h b/target/hexagon/decode.h index d4b049961ed..1e1e339b08a 100644 --- a/target/hexagon/decode.h +++ b/target/hexagon/decode.h @@ -31,5 +31,7 @@ int decode_packet(DisasContext *ctx, int max_words, const= uint32_t *words, Packet *pkt, bool disas_only); =20 bool opcode_supported(uint16_t opcode, const HexagonCPUDef *hex_def); +bool encoding_supported(uint16_t opcode, uint32_t encoding, + const HexagonCPUDef *hex_def); =20 #endif diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c index a28bf9ce9fe..35d741ce864 100644 --- a/target/hexagon/decode.c +++ b/target/hexagon/decode.c @@ -692,6 +692,22 @@ bool opcode_supported(uint16_t opcode, const HexagonCP= UDef *hex_def) return true; } =20 +/* + * Some encodings of an otherwise supported opcode are reserved on newer + * versions. HEX_VER_ANY (used when only disassembling) accepts everythin= g. + */ +bool encoding_supported(uint16_t opcode, uint32_t encoding, + const HexagonCPUDef *hex_def) +{ + /* Bit 7 of L4_loadw_phys became reserved in v83. */ + if (hex_def->hex_version !=3D HEX_VER_ANY && + hex_def->hex_version >=3D HEX_VER_V83 && + opcode =3D=3D L4_loadw_phys && (encoding & 0x80)) { + return false; + } + return true; +} + /* * decode_packet * Decodes packet with given words @@ -722,6 +738,9 @@ int decode_packet(DisasContext *ctx, int max_words, con= st uint32_t *words, /* Invalid instruction encoding */ return 0; } + if (!encoding_supported(insn->opcode, encoding32, ctx->hex_def)) { + return 0; + } /* * If we saw an extender, mark next word extended so immediate * decode works diff --git a/target/hexagon/printinsn.c b/target/hexagon/printinsn.c index 023ea12dba5..cdb9dcd7de9 100644 --- a/target/hexagon/printinsn.c +++ b/target/hexagon/printinsn.c @@ -171,7 +171,8 @@ void snprint_a_pkt_disas(GString *buf, Packet *pkt, uin= t32_t *words, } =20 g_string_append(buf, "\t"); - if (opcode_supported(pkt->insn[i].opcode, cfg->hex_def)) { + if (opcode_supported(pkt->insn[i].opcode, cfg->hex_def) && + encoding_supported(pkt->insn[i].opcode, words[i], cfg->hex_def= )) { snprintinsn(buf, &(pkt->insn[i])); } else { g_string_append(buf, ""); --=20 2.34.1 From nobody Fri Oct 23 22:16:18 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=1792694089; cv=none; d=zohomail.com; s=zohoarc; b=eTAD9pDkHpSVedlrXPYQN5qfuhwBiMFppXJrH8GCUgnwGCE83FftrdYKtylk42TI2TjJtk+7uzqxn1E8DYIi5skAEJqow6uUkzubm/Nzx/NlA+C32W6weGNGJ5E3ddkAUDudon9Nw53DkCRJY5LiXXha9NrJ9oz63ugs8bHHgPg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792694089; h=Content-Type: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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=EXMlL0CQEUWxaU5cW50xDxNN5MRk9w89xRLd3/Rde3M=; b=n9bbA65fgp9z/ZacuP+FAreY3BCEahM6jI4J9sGxzTfCIQbfAAxgaslWnv9f4NrNWzuckqQvQyCXxp5Pa7CEP0N5n9GqAmkyVzDWPPvlAG5qLv6G2iN4SwOnlmzuHvuvj4pCHvn9Qry4/15BWJrcKJv1s9FwWtznmJuusCv/84A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792694089039701.8183599622744; Thu, 22 Oct 2026 11:34:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xJxc6-00079c-JZ; Thu, 22 Oct 2026 14:34:08 -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 1xJxaD-0006CB-Rf for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:15 -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 1xJxaB-0002es-FA for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:08 -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 69MIHM0M3741970 for ; Thu, 22 Oct 2026 18:32:06 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hfqms01vd-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 22 Oct 2026 18:32:05 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-3510d0baf63so228140eec.1 for ; Thu, 22 Oct 2026 11:32:05 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-369d8f8eaf9sm44962eec.16.2026.10.22.11.32.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 11:32:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= EXMlL0CQEUWxaU5cW50xDxNN5MRk9w89xRLd3/Rde3M=; b=dZu73PnSigpG8Gn5 lghrKRmZawthZ8AhCzlZQCIEx2lip+Ix8q8LEaYcbTW4p3Pg9ZRsnm5BHskx/L1H vlZfkiBlL4mSBBTrqkI3Ku/LCDUdjbhDEzRSmq2vcIyIeEoY/XDlCQ5fhO2GP9gm FE5Obn6FhntTzmhRqY8RKbLWdwUzb8loJEAC3jdOG95thkmWyWGMyE+76SpghmMH +NtXziZ9dPXzVUQCebLxu6SQcovBtb7AFcHei8ZB2bz3lCj4JjXcxADvPdK69h25 /ZGRo9uowP6bruQ9KTqifkFXsUTiYfMFUi6n/2VVstypn8ahJaWR4SDDByYDGLs4 LQ25mQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1792693925; x=1793298725; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=EXMlL0CQEUWxaU5cW50xDxNN5MRk9w89xRLd3/Rde3M=; b=XqwP+stqQdKrvqSgq4NQnx/LKgHtw8z8ULdJnXCEijskBIcOwkwpc6keHJ1ZKvP+sN nLipzDe24FxAr4xFGKlEaCxzdNXRsTto3imjZnip6ecVOuV9vJSb0dCvb1YoyvTmkkS0 rr4rxhn3RdLX1WFo3/NJBQQKK0UCGwQsLyvpwre9rwA284wDVYJhya4pPpXAyFESXNKv T5271yS2OIayBSRigOrEN4PKSK23D5nxjtTQWjpCbGLclkeRFyOssu0Zn2r/C5iF7UvD SrngDVCT4WCwiNzEj/6CAhUmOjVVwHQLRnyGH0li4PdG3Yyb08wBE1LPsQVFMIxJRE80 ++Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792693925; x=1793298725; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=EXMlL0CQEUWxaU5cW50xDxNN5MRk9w89xRLd3/Rde3M=; b=Rg9aTGhi2kv5SmhomLgAPe9AOPgufE89mnlFCceLFjZQ3/OvG/DTi9MjCFVHiAAEAZ CwtfiieIXegQU3eLJKhrOeF6REqFGsY/IDyCy7x6pHW/Br7lVSkE1v3Jc4ZNPkMQZa8Y xxhZ0YpwRSXMz+iKmd6SqHscTv5nlRgkAt/qis/l/eTUpeKKr10qRGqVVhC6P+ytsFlu tVI/BsaSQu60Fu+HdW8YhhXgUWN6iTmkhEbnbEljnxq15RNtbR6sRrH8ZybJpquHr33R kGYlsFeTpwQYUOcRVDap//qUonvaV0wo+rCkPQv309aVT94d57kPQHIl9NAkbS65WC3Z Jp4Q== X-Gm-Message-State: AFq9FYJjIL2IVFI9qHO9n3/F+9qRvnNB0qjuWIvnufv/GKO3mRrQibHA EZImacUugzX57j2WPCfzIgMZka01wxhAN26UJxDgln38WBYeOHtHvynTAy9pvZK4APvFoFtmVSz jkvljz/osAkIw8a8GyAQZnnzN83bZ0k839gSwaZ30au6DDjVMcNF0H5c80KSmA5+5Iw== X-Gm-Gg: AYBFou2RnVlBP6SITv2JTi82CFS0MxDvBqjioMPQQZ/Qp6me5uSjaASDEL+E2OdSXCr uoONeZdYNXeyR5Zj4gxiIWl9EWDdjM6F4r6ijyXcnxwFhoyChGagGPg2APARWEjqZAH6fclrHQh ypirjkpUWl+7FUUiAor16mnmvRY3vRz8+aLFIbNP6LAOBAjkr2EL+L/rqGl04164K4lMJyIxwO7 ww7VYQSb7Kp/LjiFYZDYXZ0rfTOBO6nga1vmcequGoRZ5nv5VOyKqC3SYbv07ZJD4oPBQkkrQv+ Esdh3IdiulK4xNICJ4GOWXEFlCc2lCNq/SUZFEvQfJmWJG1dtcwJUFtmW4DqoQ4LLSUUJBFg8xm pCeqITKXQUPoFZN4D/JEELMz/wrUEMwBdpd80s1DbJokgsEDG X-Received: by 2002:a05:7300:ce89:b0:369:987f:d15e with SMTP id 5a478bee46e88-369d916df6cmr357eec.2.1792693924965; Thu, 22 Oct 2026 11:32:04 -0700 (PDT) X-Received: by 2002:a05:7300:ce89:b0:369:987f:d15e with SMTP id 5a478bee46e88-369d916df6cmr330eec.2.1792693924314; Thu, 22 Oct 2026 11:32:04 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: Brian Cain , Anton Johansson , Pierrick Bouvier , Helge Deller , Mohamed Mediouni , Alessandro Di Federico , Laurent Vivier , Marco Liebel Subject: [PATCH v4 08/11] target/hexagon: preserve callr target when Rs is LR Date: Thu, 22 Oct 2026 11:31:44 -0700 Message-Id: <20261022183147.1535585-9-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> References: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfXzHP00JBXJ5qw pWIFmr0+UMimGVvQWZE2jtrSC6OfJVVNuBqttaW1sumQO9yM9smlNNvVscUz4mhHuJHqYWcAUz3 HeYPA1R7H0njAo8Qm/1d/uqZ9x2bnVqJYPvgiNwQplkB7TS0Zzmw7Nd/SXNGKv/98TYV1TuYZ7I kxR5rWNu0I0OZYM3PbCw9zh1omu932JnhTkHa+lyhdOtRxJ2EoeVFf40c58YFm7hoqvzHGoYpOK ih2kAmG5IImCxM7xbSL2z1FWE4KWUxXuNIDreHTl81xPbdZMfFPPiTYkYbojj/Qp5r7ciT1Pj4O tU+jyjvKojenWmMoa8rVLG9zgIv8iA1K5GfXK3q6dDMqCh8j6sXH1Xkjf3cLbbQccHBgCnmAZTq qKvTKPFJxsQPCua9gj16+VE5g3RUUpfY6wdhRMF54E9Hs4S7V9MkgdiQo9R0heoKa3IJ1DdqXh0 gKDxnEWRFACeyWZp57A== X-Proofpoint-GUID: kxrVWmJ1hfWOvAJepg6Wt2n7zadvtr-I X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX4BYqCM/QRAbu 2JqYMP9/0eChuAw0X0YX/+CeBIdj/6xeSytMs47S4ihuZXvY5X9phvDI1vw0uqK+Cwa+msNcgCw ptQXAM3Yifv2gwiGG4xrCbhfqSLtH5I= X-Authority-Analysis: v=2.4 cv=UdbE26SN c=1 sm=1 tr=0 ts=6ada56a5 cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=Ml5uk3Oo-jtE3ATjI50A:9 a=QEXdDO2ut3YA:10 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-ORIG-GUID: kxrVWmJ1hfWOvAJepg6Wt2n7zadvtr-I X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.138,FMLib:17.12.100.49 definitions=2026-10-22_06,2026-10-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 bulkscore=0 clxscore=1015 adultscore=0 priorityscore=1501 suspectscore=0 lowpriorityscore=0 spamscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610220073 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@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, 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: 1792694090612158500 gen_callr wrote the link register before consuming the target, so "callr r31" jumped to the new return address instead of the old LR value. Copy the target to a temporary first. Reviewed-by: Pierrick Bouvier Reviewed-by: Marco Liebel Signed-off-by: Brian Cain --- target/hexagon/genptr.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/hexagon/genptr.c b/target/hexagon/genptr.c index d234f994f46..f1d0529d0c8 100644 --- a/target/hexagon/genptr.c +++ b/target/hexagon/genptr.c @@ -1059,6 +1059,8 @@ static void gen_call(DisasContext *ctx, int pc_off) static void gen_callr(DisasContext *ctx, TCGv new_pc) { TCGv lr =3D get_result_gpr(ctx, HEX_REG_LR); + + new_pc =3D gen_unalias_gpr_src(new_pc, lr); tcg_gen_movi_tl(lr, ctx->next_PC); gen_write_new_pc_addr(ctx, new_pc, TCG_COND_ALWAYS, NULL); } --=20 2.34.1 From nobody Fri Oct 23 22:16:18 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=1792694090; cv=none; d=zohomail.com; s=zohoarc; b=YFgk94KGcvkFCbsF/QLMAZTIheB5zXX1q3JLaZjKpe0F1peyOAUJMtKrl3Vf+QxZCQ58j9wD6rOs1Ep+2BmSyuUt+/artrNx7EhDl55R8lZS0J4Q6T1ykuGPime0OpHHzsfQpXL3x3LIRnSqn6Pu0u49Ym++w9jtfSSgsR1tnYY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792694090; h=Content-Type: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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=tfNAaKQFRc/2MiKYJ27ubBAWVgNncPx1pYZmfNBG+Gc=; b=mZ8IW+OSITfaCt+GAUIKuGLCSrreD+yO5HYwAkOIY5p2N24kqcpmXPsBKEkYyNsdMHmMd5re4zGwu2Hy+kXXQizN3ylzozg6XRAIuFk50Hh9V0VynKFYji5kCS6rP4PgXkMn8f0bVyKMvUxeMjAwlMbnFnDhGQdLWJtm3NnPES0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792694090419980.6840343784052; Thu, 22 Oct 2026 11:34:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xJxbO-0006PA-9f; Thu, 22 Oct 2026 14:33:22 -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 1xJxaL-0006Cj-B6 for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:21 -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 1xJxaD-0002fW-QW for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:16 -0400 Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 69MHtYbN409002 for ; Thu, 22 Oct 2026 18:32:08 GMT Received: from mail-dy1-f198.google.com (mail-dy1-f198.google.com [74.125.82.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hf93a519u-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 22 Oct 2026 18:32:08 +0000 (GMT) Received: by mail-dy1-f198.google.com with SMTP id 5a478bee46e88-36637676140so158386eec.0 for ; Thu, 22 Oct 2026 11:32:08 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-369d8f8eaf9sm44962eec.16.2026.10.22.11.32.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 11:32:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= tfNAaKQFRc/2MiKYJ27ubBAWVgNncPx1pYZmfNBG+Gc=; b=Mu3hOTM/2UVbTHGA GHW7MOYGmGj5I2tuOHF1Vqvut8ptOcr2cEckkrebWvj9uS1XdvfO2jMj6FYeflIt jllGSemgnaRS2ZNPeFJrbbePUMUrPIZhwyemTcLxTf0RNOadCbffJ3ntPuZ1GATm lHiwB6kZ0bC+wXNCPjFDsALNSemCB5E/b6WQh6hMgIPwdFTerK0d3p7I/Wa2q/5A RO/i9tGVkBq3fe2qgkbjcBT5hALASEJn0K7fPxhhsDdCEYYmyVYNvug6AXK1oZWd k8nwofgPnrJ02cfODNJrtAHbScnaHdF1G0o91xD2IBm/2KT5AkgI66anO6jSTmCf vQxubA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1792693928; x=1793298728; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=tfNAaKQFRc/2MiKYJ27ubBAWVgNncPx1pYZmfNBG+Gc=; b=eM33mYXZuckqsIhO+bra6wm/A7aBcSF8ywOzQNQth8zu9YTwa1qIO2hahLEQJJlfTN YMQcj0HokAtiv1aEgiqsYVPh6sc7LBBnz+iG0zenibD9vU12pOp9UARsy1NZjE6g8ZHu F1Bw1G+1NDzDWBfJT5g1YfkWJM+Es3QuXBKOeJpjxKlXM0iHXol98LyAntcxC6q2IBep w3oCNJHm5gr+PMzbP0RzljSKW3gbjpty+gWIM6ITPXbz7KMsi4mJHAv8bsur4nZo/Jnn nBA32bAoqP/5j9mliIl4Sqz2wXKfnfFldYo3JTkXTtnfDrFzOvQRrqznTCuvfE15Qxza 84sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792693928; x=1793298728; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=tfNAaKQFRc/2MiKYJ27ubBAWVgNncPx1pYZmfNBG+Gc=; b=HzXF45y3VdPhtzmczw1rY7gYgAD1GZZ2hV0Sbi3GqAyjiKEONQeYJXfuP6N/xAFM7s ivgI5h474jWQKfzzMuduB7I/CiPtvL2o+TjQ51V/sI+tfRqK9CWOOMvSMtbR/ZPK76yj vbeZ+WGvD1EgY7kD7HYYZEtNB9vW5mwUG0DVDvm/ophYjoxb3AlhoJGECY082lrWagW3 7lZ9PHH3EyUlG0lCCwft5fI1sXoh3mvJQ2eScLntnKf2tRQfJ8vwWztBgO4GPi6ymqQh URdNrqWoCZHrrCg3SvEAriVuTuYiqvQ4VvdlAr/BAUkBR/cLnAVN3rojgJw9jk++Rjt9 9NrA== X-Gm-Message-State: AFq9FYJHPydoqj924Bgu+bWkysNX5+FRZ6fx5p3GruJKoYswRBrF+7/L FK/s3+Je3z/j/WbWN0nw4btdIEhxrDBf4/HkaxgMcxelUCqPv5uUAPH2scS+RwUNHb/KCUBAxYy z1ryjOSQtQBO8QO3e0DJoBjPz3TlPvLypyGN8L2N7k7+oh/5wuw2jI0qgFgoMQCWrgA== X-Gm-Gg: AYBFou2OK/Pt/SvSheQh5qovPGWOm4IXyrELOgifEKAlGcEc1qkjbQfJ/dP4fI49tyk KqJUVw66/h8GSiqwrF1X8Ub3IPQ2v2ERWio2UUlZq66rueZ20dpvKUQtlE8VLtzKA2XTq24KGSQ pWeTsfsj2HnhbHisE8NE8jpfMt83TphYB+o6j5CNaTcnA/DcosAie6CZZlBnciUUBR0Hry8ZqOi Buigi2MWFaGWI0fyFfUDfkIwuWt/CD5JwsRqiRp6ZiSQs/c7k+cciYEwMIfaeZOVg4MYb3hqWHW fG2FhLbYQCBa/A1BPWbNXs4FfPIbBY2PoftV4LPAx7j2j3LM6UPJFJ9LitrQ9t0F3AI5jVzoKMI 01AL9EEQQD91sa7wf6goF4aaHHM01F4g4W2wDrMpL+aLiKciM X-Received: by 2002:a05:693c:6395:20b0:359:2f0b:aa89 with SMTP id 5a478bee46e88-3674d54cdbdmr7596405eec.10.1792693927254; Thu, 22 Oct 2026 11:32:07 -0700 (PDT) X-Received: by 2002:a05:693c:6395:20b0:359:2f0b:aa89 with SMTP id 5a478bee46e88-3674d54cdbdmr7596361eec.10.1792693926355; Thu, 22 Oct 2026 11:32:06 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: Brian Cain , Anton Johansson , Pierrick Bouvier , Helge Deller , Mohamed Mediouni , Alessandro Di Federico , Laurent Vivier , Marco Liebel Subject: [PATCH v4 09/11] target/hexagon: implement control flow integrity (CFI) Date: Thu, 22 Oct 2026 11:31:45 -0700 Message-Id: <20261022183147.1535585-10-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> References: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfXwYskDAgbC8Jx gWyYp5IqelTVt4N1hhLnNWt1fIemdhbPvPDnm1YziPRIPRJvYOOgmBf1RDWEaWWJ9mBiuN4q9BM U3Mo2drdU5vi9VR5v8M4j5koNm7daya23TnHkzIPV2U2Ef/IYftGf0tLdcvFnDoVsdaUgBwZ9d5 Zd5UEIhBsOuw1KVG9SScl0+JJnReXfzJifKqHE2Ht0KgEOlLgFTM1DkHz2BQdMQISvnCU3ZfJDY OWzFksnzDBzHRevcisSiLZaaBLWQ3klukORZr7TVu35sAr00YlkXbQw7s4+u6bIsoS6B81BTo2c X1XKczDNeSdmsjSB77u3B5/kQeS8FkNq4M4+DKtFhs/zpYrwqi63DTQf3m2W1ZmnvEgn/4LRMcF 4VBNgEjFRgwpNgRWhsLZXnONkqXKgtSCLh76rOE9bJJ0ZmIB0kPrftR+AJ1TbPY4o462MZRIW6X +JMBHaLHWTWwsvXKn0g== X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX2QWwS9PSoHT5 QawGSGcwWDCbbdJH9yO873GeN1WgoViEVgGsXxvKnpxkUkuS/nz8pWs9uTFS3xoogKLzkNNuq3V MU6Tfldxd1JP81jwI8hr+THtmRDBsnE= X-Proofpoint-GUID: zTn-UtgDESff_n9mlj2ND7Jmo8j3dVFP X-Authority-Analysis: v=2.4 cv=NaFzRGD4 c=1 sm=1 tr=0 ts=6ada56a8 cx=c_pps a=wEP8DlPgTf/vqF+yE6f9lg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=ifvkzheW7tGMkDe6i9UA:9 a=QEXdDO2ut3YA:10 a=bBxd6f-gb0O0v-kibOvt:22 X-Proofpoint-ORIG-GUID: zTn-UtgDESff_n9mlj2ND7Jmo8j3dVFP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.138,FMLib:17.12.100.49 definitions=2026-10-22_06,2026-10-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 impostorscore=0 suspectscore=0 malwarescore=0 spamscore=0 phishscore=0 priorityscore=1501 adultscore=0 clxscore=1015 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610220073 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.168.131; envelope-from=brian.cain@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, 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: 1792694090744158500 Implement v83 restricted indirect-control-flow instructions and validate their targets. Reviewed-by: Pierrick Bouvier Reviewed-by: Marco Liebel Signed-off-by: Brian Cain --- target/hexagon/cpu.h | 3 + target/hexagon/cpu_bits.h | 1 + target/hexagon/gen_tcg.h | 90 +++++++++++++++------- target/hexagon/gen_tcg_sys.h | 6 ++ target/hexagon/macros.h | 12 +++ target/hexagon/translate.h | 3 + target/hexagon/attribs_def.h.inc | 1 + target/hexagon/reg_fields_def.h.inc | 1 + linux-user/hexagon/cpu_loop.c | 9 +++ linux-user/hexagon/signal.c | 8 ++ target/hexagon/cpu.c | 6 ++ target/hexagon/genptr.c | 36 +++++++++ target/hexagon/hex_interrupts.c | 3 + target/hexagon/hexswi.c | 11 +++ target/hexagon/machine.c | 3 +- target/hexagon/translate.c | 59 ++++++++++++++ target/hexagon/tag_rev_info.c.inc | 20 +++++ target/hexagon/imported/alu.idef | 3 + target/hexagon/imported/branch.idef | 38 +++++++++ target/hexagon/imported/encode_pp.def | 18 ++++- target/hexagon/imported/encode_subinsn.def | 1 + target/hexagon/imported/ldst.idef | 2 + target/hexagon/imported/subinsns.idef | 2 + target/hexagon/imported/system.idef | 2 +- 24 files changed, 307 insertions(+), 31 deletions(-) diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h index c1a944920e8..b1a092eb42b 100644 --- a/target/hexagon/cpu.h +++ b/target/hexagon/cpu.h @@ -132,6 +132,9 @@ typedef struct CPUArchState { target_ulong gpr[TOTAL_PER_THREAD_REGS]; target_ulong pred[NUM_PREGS]; uint32_t cause_code; + uint32_t cfi_active; + uint32_t cfi_active_log; + uint32_t cfi_updated; =20 /* For comparing with LLDB on target - see adjust_stack_ptrs function = */ target_ulong last_pc_dumped; diff --git a/target/hexagon/cpu_bits.h b/target/hexagon/cpu_bits.h index 6a800525348..3104b497be7 100644 --- a/target/hexagon/cpu_bits.h +++ b/target/hexagon/cpu_bits.h @@ -72,6 +72,7 @@ enum hex_cause { HEX_CAUSE_TRAP1 =3D 0x009, HEX_CAUSE_FETCH_NO_XPAGE =3D 0x011, HEX_CAUSE_FETCH_NO_UPAGE =3D 0x012, + HEX_CAUSE_CFI_VIOLATION =3D 0x014, HEX_CAUSE_INVALID_PACKET =3D 0x015, HEX_CAUSE_INVALID_OPCODE =3D 0x015, /* alias: same cause as INVALID_PA= CKET */ HEX_CAUSE_NO_COPROC_ENABLE =3D 0x016, diff --git a/target/hexagon/gen_tcg.h b/target/hexagon/gen_tcg.h index 690bf20e6b2..05a7b775556 100644 --- a/target/hexagon/gen_tcg.h +++ b/target/hexagon/gen_tcg.h @@ -531,34 +531,8 @@ do { RsV =3D RsV; } while (0) #endif =20 -#ifdef CONFIG_USER_ONLY #define fGEN_TCG_V2_CHECK_AND_WRITE_VSP(VSP) \ - do { \ - TCGLabel *write_vsp =3D gen_new_label(); \ - tcg_gen_brcond_tl(TCG_COND_GEU, VSP, \ - hex_gpr[HEX_REG_VFRAMELIMIT], write_vsp); \ - gen_precise_exception(HEX_CAUSE_VECTOR_STACK_OVERFLOW, ctx->pkt.pc= ); \ - gen_set_label(write_vsp); \ - tcg_gen_mov_tl(hex_gpr[HEX_REG_VSP], VSP); \ - } while (0) -#else -#define fGEN_TCG_V2_CHECK_AND_WRITE_VSP(VSP) \ - do { \ - TCGLabel *write_vsp =3D gen_new_label(); \ - TCGv mode =3D tcg_temp_new(); \ - tcg_gen_andi_tl(mode, hex_t_sreg[HEX_SREG_SSR], \ - 1 << reg_field_info[SSR_EX].offset); \ - tcg_gen_brcondi_tl(TCG_COND_NE, mode, 0, write_vsp); \ - tcg_gen_andi_tl(mode, hex_t_sreg[HEX_SREG_SSR], \ - 1 << reg_field_info[SSR_UM].offset); \ - tcg_gen_brcondi_tl(TCG_COND_EQ, mode, 0, write_vsp); \ - tcg_gen_brcond_tl(TCG_COND_GEU, VSP, \ - hex_gpr[HEX_REG_VFRAMELIMIT], write_vsp); \ - gen_precise_exception(HEX_CAUSE_VECTOR_STACK_OVERFLOW, ctx->pkt.pc= ); \ - gen_set_label(write_vsp); \ - tcg_gen_mov_tl(hex_gpr[HEX_REG_VSP], VSP); \ - } while (0) -#endif + gen_vframecheck(ctx, VSP) #define fGEN_TCG_V2_vallocframe_imm(SHORTCODE) \ do { \ TCGv vsp =3D tcg_temp_new(); \ @@ -589,6 +563,9 @@ #define fGEN_TCG_S2_allocframe(SHORTCODE) \ gen_allocframe(ctx, RxV, uiV) =20 +#define fGEN_TCG_S2_allocframe_rb(SHORTCODE) \ + fGEN_TCG_S2_allocframe(SHORTCODE) + /* sub-instruction version (no RxV, so handle it manually) */ #define fGEN_TCG_SS2_allocframe(SHORTCODE) \ do { \ @@ -597,6 +574,9 @@ gen_allocframe(ctx, r29, uiV); \ } while (0) =20 +#define fGEN_TCG_SS2_allocframe_rb(SHORTCODE) \ + fGEN_TCG_SS2_allocframe(SHORTCODE) + /* * Rdd32 =3D deallocframe(Rs32):raw * RddV =3D=3D r31:30 @@ -777,6 +757,16 @@ gen_callr(ctx, RsV) #define fGEN_TCG_J2_callrh(SHORTCODE) \ gen_callr(ctx, RsV) +#define fGEN_TCG_J2_callr_rb(SHORTCODE) \ + do { \ + gen_callr(ctx, RsV); \ + gen_set_cfi(ctx); \ + } while (0) +#define fGEN_TCG_J2_callrh_rb(SHORTCODE) \ + do { \ + gen_callr(ctx, RsV); \ + gen_set_cfi(ctx); \ + } while (0) =20 #define fGEN_TCG_J2_callt(SHORTCODE) \ gen_cond_call(ctx, PuV, TCG_COND_TSTEQ, riV) @@ -786,6 +776,16 @@ gen_cond_callr(ctx, TCG_COND_TSTEQ, PuV, RsV) #define fGEN_TCG_J2_callrf(SHORTCODE) \ gen_cond_callr(ctx, TCG_COND_TSTNE, PuV, RsV) +#define fGEN_TCG_J2_callrt_rb(SHORTCODE) \ + do { \ + gen_cond_callr(ctx, TCG_COND_TSTEQ, PuV, RsV); \ + gen_cond_set_cfi(ctx, true, PuV, -1); \ + } while (0) +#define fGEN_TCG_J2_callrf_rb(SHORTCODE) \ + do { \ + gen_cond_callr(ctx, TCG_COND_TSTNE, PuV, RsV); \ + gen_cond_set_cfi(ctx, false, PuV, -1); \ + } while (0) =20 #define fGEN_TCG_J2_loop0r(SHORTCODE) \ gen_loop0r(ctx, RsV, riV) @@ -1006,6 +1006,39 @@ gen_jumpr(ctx, RsV) #define fGEN_TCG_J2_jumprh(SHORTCODE) \ gen_jumpr(ctx, RsV) +#define fGEN_TCG_J2_jumpr_rb(SHORTCODE) \ + do { \ + gen_jumpr(ctx, RsV); \ + gen_set_cfi_for_target(ctx, RsN); \ + } while (0) +#define fGEN_TCG_J2_jumprh_rb(SHORTCODE) \ + fGEN_TCG_J2_jumpr_rb(SHORTCODE) +#define fGEN_TCG_J2_jumprt_rb(SHORTCODE) \ + do { \ + gen_cond_jumpr(ctx, RsV, TCG_COND_TSTEQ, PuV); \ + gen_cond_set_cfi(ctx, true, PuV, RsN); \ + } while (0) +#define fGEN_TCG_J2_jumprf_rb(SHORTCODE) \ + do { \ + gen_cond_jumpr(ctx, RsV, TCG_COND_TSTNE, PuV); \ + gen_cond_set_cfi(ctx, false, PuV, RsN); \ + } while (0) +#define fGEN_TCG_J2_jumprtpt_rb(SHORTCODE) fGEN_TCG_J2_jumprt_rb(SHORTCODE) +#define fGEN_TCG_J2_jumprfpt_rb(SHORTCODE) fGEN_TCG_J2_jumprf_rb(SHORTCODE) +#define fGEN_TCG_J2_jumprtnew_rb(SHORTCODE) \ + do { \ + gen_cond_jumpr(ctx, RsV, TCG_COND_TSTEQ, PuN); \ + gen_cond_set_cfi(ctx, true, PuN, RsN); \ + } while (0) +#define fGEN_TCG_J2_jumprfnew_rb(SHORTCODE) \ + do { \ + gen_cond_jumpr(ctx, RsV, TCG_COND_TSTNE, PuN); \ + gen_cond_set_cfi(ctx, false, PuN, RsN); \ + } while (0) +#define fGEN_TCG_J2_jumprtnewpt_rb(SHORTCODE) \ + fGEN_TCG_J2_jumprtnew_rb(SHORTCODE) +#define fGEN_TCG_J2_jumprfnewpt_rb(SHORTCODE) \ + fGEN_TCG_J2_jumprfnew_rb(SHORTCODE) #define fGEN_TCG_J4_jumpseti(SHORTCODE) \ do { \ tcg_gen_movi_tl(RdV, UiV); \ @@ -1195,7 +1228,7 @@ RdV, tcg_constant_tl(0)); \ } while (0) =20 -#define fGEN_TCG_Y2_break(SHORTCODE) +#define fGEN_TCG_Y2_break(SHORTCODE) gen_reset_cfi(ctx) #define fGEN_TCG_J2_unpause(SHORTCODE) =20 #ifdef CONFIG_USER_ONLY @@ -1477,4 +1510,5 @@ #endif =20 #define fGEN_TCG_A2_nop(SHORTCODE) do { } while (0) +#define fGEN_TCG_A2_nop_rb(SHORTCODE) gen_reset_cfi(ctx) #define fGEN_TCG_SA1_setin1(SHORTCODE) tcg_gen_movi_tl(RdV, -1) diff --git a/target/hexagon/gen_tcg_sys.h b/target/hexagon/gen_tcg_sys.h index 3760b671adf..a76ac8ad391 100644 --- a/target/hexagon/gen_tcg_sys.h +++ b/target/hexagon/gen_tcg_sys.h @@ -131,11 +131,17 @@ */ #define fGEN_TCG_J2_rte(SHORTCODE) \ do { \ + TCGv_i32 cfi =3D tcg_temp_new_i32(); \ TCGv_i32 new_ssr =3D tcg_temp_new_i32(); \ + tcg_gen_extract_i32(cfi, hex_t_sreg[HEX_SREG_SSR], \ + reg_field_info[SSR_CFI].offset, 1); \ + fSET_CFI(cfi); \ tcg_gen_deposit_tl(new_ssr, hex_t_sreg[HEX_SREG_SSR], \ tcg_constant_tl(0), \ reg_field_info[SSR_EX].offset, \ reg_field_info[SSR_EX].width); \ + tcg_gen_deposit_tl(new_ssr, new_ssr, tcg_constant_tl(0), \ + reg_field_info[SSR_CFI].offset, 1); \ gen_log_sreg_write(ctx, HEX_SREG_SSR, new_ssr); \ gen_jumpr(ctx, hex_t_sreg[HEX_SREG_ELR]); \ } while (0) diff --git a/target/hexagon/macros.h b/target/hexagon/macros.h index a5b9c24c6bb..195bd6a0c9c 100644 --- a/target/hexagon/macros.h +++ b/target/hexagon/macros.h @@ -423,6 +423,18 @@ static inline TCGv gen_read_ireg(TCGv result, TCGv val= , int shift) #define fCAST8S_16S(A) (int128_exts64(A)) #define fCAST16S_8S(A) (int128_getlo(A)) =20 +#define fSET_CFI(CFI_VALUE) \ + do { \ + TCGLabel *skip_cfi_reset =3D gen_new_label(); \ + tcg_gen_movcond_i32(TCG_COND_NE, hex_cfi_active_log, hex_cfi_updat= ed, \ + tcg_constant_i32(1), tcg_constant_i32(0), \ + hex_cfi_active_log); \ + tcg_gen_movi_i32(hex_cfi_updated, 1); \ + tcg_gen_brcondi_i32(TCG_COND_EQ, CFI_VALUE, 0, skip_cfi_reset); \ + tcg_gen_movi_i32(hex_cfi_active_log, 1); \ + gen_set_label(skip_cfi_reset); \ + } while (0) + #ifdef QEMU_GENERATE #define fEA_RI(REG, IMM) tcg_gen_addi_tl(EA, REG, IMM) #define fEA_RRs(REG, REG2, SCALE) \ diff --git a/target/hexagon/translate.h b/target/hexagon/translate.h index 47ca5e8ae01..dc23d122ab0 100644 --- a/target/hexagon/translate.h +++ b/target/hexagon/translate.h @@ -364,6 +364,9 @@ extern TCGv_i64 hex_llsc_val_i64; extern TCGv hex_vstore_addr[VSTORES_MAX]; extern TCGv hex_vstore_size[VSTORES_MAX]; extern TCGv hex_vstore_pending[VSTORES_MAX]; +extern TCGv_i32 hex_cfi_active; +extern TCGv_i32 hex_cfi_active_log; +extern TCGv_i32 hex_cfi_updated; void gen_precise_exception(int cause, uint32_t pc); #ifdef CONFIG_USER_ONLY #define hex_hvx_ptr tcg_env diff --git a/target/hexagon/attribs_def.h.inc b/target/hexagon/attribs_def.= h.inc index 8deef8e4cfb..96ad1fd2f8e 100644 --- a/target/hexagon/attribs_def.h.inc +++ b/target/hexagon/attribs_def.h.inc @@ -200,6 +200,7 @@ DEF_ATTRIB(NOTE_SHIFT_RESOURCE, "Uses the HVX shift res= ource.", "", "") /* Restrictions to make note of */ DEF_ATTRIB(RESTRICT_NOSLOT1_STORE, "Packet must not have slot 1 store", ""= , "") DEF_ATTRIB(RESTRICT_LATEPRED, "Predicate can not be used as a .new.", "", = "") +DEF_ATTRIB(RESTRICT_TARGET, "Restricted branch target instruction", "", "") =20 /* HVX IEEE FP extension attributes */ DEF_ATTRIB(HVX_IEEE_FP, "HVX IEEE FP extension instruction", "", "") diff --git a/target/hexagon/reg_fields_def.h.inc b/target/hexagon/reg_field= s_def.h.inc index 553f6ffffbc..21babbbb982 100644 --- a/target/hexagon/reg_fields_def.h.inc +++ b/target/hexagon/reg_fields_def.h.inc @@ -95,6 +95,7 @@ DEF_REG_FIELD(SYSCFG_L2GCA, 31, 1) /* SSR fields */ DEF_REG_FIELD(SSR_CAUSE, 0, 8) DEF_REG_FIELD(SSR_ASID, 8, 7) +DEF_REG_FIELD(SSR_CFI, 15, 1) DEF_REG_FIELD(SSR_UM, 16, 1) DEF_REG_FIELD(SSR_EX, 17, 1) DEF_REG_FIELD(SSR_IE, 18, 1) diff --git a/linux-user/hexagon/cpu_loop.c b/linux-user/hexagon/cpu_loop.c index 22570a12648..32249f27b93 100644 --- a/linux-user/hexagon/cpu_loop.c +++ b/linux-user/hexagon/cpu_loop.c @@ -49,6 +49,9 @@ void cpu_loop(CPUHexagonState *env) break; case HEX_EVENT_TRAP0: case HEX_EVENT_TRAP2: + /* Exception entry ends any pending restricted-branch check. */ + env->cfi_active =3D 0; + env->cfi_updated =3D 0; syscallnum =3D env->gpr[6]; env->gpr[HEX_REG_PC] +=3D 4; ret =3D do_syscall(env, @@ -78,6 +81,12 @@ void cpu_loop(CPUHexagonState *env) force_sig_fault(TARGET_SIGSEGV, TARGET_SEGV_BNDERR, env->gpr[HEX_REG_PC]); break; + case HEX_CAUSE_CFI_VIOLATION: + env->cfi_active =3D 0; + env->cfi_updated =3D 0; + force_sig_fault(TARGET_SIGILL, TARGET_ILL_ILLOPC, + env->gpr[HEX_REG_PC]); + break; case HEX_CAUSE_PRIV_USER_NO_GINSN: case HEX_CAUSE_PRIV_USER_NO_SINSN: case HEX_CAUSE_INVALID_PACKET: diff --git a/linux-user/hexagon/signal.c b/linux-user/hexagon/signal.c index 183ecfaa19a..f8ba4a6b478 100644 --- a/linux-user/hexagon/signal.c +++ b/linux-user/hexagon/signal.c @@ -106,6 +106,10 @@ static void setup_sigcontext(struct target_sigcontext = *sc, CPUHexagonState *env) =20 __put_user(env->gpr[HEX_REG_CS0], &sc->sc_regs.cs0); __put_user(env->gpr[HEX_REG_CS1], &sc->sc_regs.cs1); + /* Preserve a pending restricted-branch landing pad across the signal.= */ + __put_user(env->cfi_active, &sc->sc_regs.pad1); + env->cfi_active =3D 0; + env->cfi_updated =3D 0; } =20 static void setup_ucontext(struct target_ucontext *uc, @@ -176,6 +180,7 @@ static void restore_sigcontext(CPUHexagonState *env, struct target_sigcontext *sc) { abi_ulong preds; + abi_ulong cfi; =20 for (int i =3D 0; i < 32; i++) { __get_user(env->gpr[HEX_REG_R00 + i], &sc->sc_regs.gpr[i]); @@ -199,6 +204,9 @@ static void restore_sigcontext(CPUHexagonState *env, =20 __get_user(env->gpr[HEX_REG_CS0], &sc->sc_regs.cs0); __get_user(env->gpr[HEX_REG_CS1], &sc->sc_regs.cs1); + __get_user(cfi, &sc->sc_regs.pad1); + env->cfi_active =3D cfi & 1; + env->cfi_updated =3D 0; } =20 static void restore_ucontext(CPUHexagonState *env, struct target_ucontext = *uc) diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index f4f733cc251..5a941899883 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -414,6 +414,9 @@ void hexagon_cpu_soft_reset(CPUHexagonState *env) =20 BQL_LOCK_GUARD(); env->llsc_addr =3D ~0; + env->cfi_active =3D 0; + env->cfi_active_log =3D 0; + env->cfi_updated =3D 0; env->t_sreg[HEX_SREG_SSR] =3D 0; hexagon_ssr_set_cause(env, HEX_CAUSE_RESET); =20 @@ -451,6 +454,9 @@ static void hexagon_cpu_reset_hold(Object *obj, ResetTy= pe type) set_float_default_nan_pattern(0b01111111, &env->hvx_fp_status); =20 env->llsc_addr =3D ~0; + env->cfi_active =3D 0; + env->cfi_active_log =3D 0; + env->cfi_updated =3D 0; #ifndef CONFIG_USER_ONLY memset(env->t_sreg, 0, sizeof(uint32_t) * NUM_SREGS); memset(env->greg, 0, sizeof(uint32_t) * NUM_GREGS); diff --git a/target/hexagon/genptr.c b/target/hexagon/genptr.c index f1d0529d0c8..7ef36e336fa 100644 --- a/target/hexagon/genptr.c +++ b/target/hexagon/genptr.c @@ -1085,6 +1085,42 @@ static void gen_cond_callr(DisasContext *ctx, gen_set_label(skip); } =20 +static void gen_set_cfi(DisasContext *ctx) +{ + fSET_CFI(tcg_constant_i32(1)); +} + +static void gen_reset_cfi(DisasContext *ctx) +{ + fSET_CFI(tcg_constant_i32(0)); +} + +/* Indirect transfers through LR are returns, which do not set the CFI sta= te */ +static void gen_set_cfi_for_target(DisasContext *ctx, int rs_num) +{ + if (rs_num =3D=3D HEX_REG_LR) { + gen_reset_cfi(ctx); + } else { + gen_set_cfi(ctx); + } +} + +/* + * Update the CFI state if the predicate (true if @sense, else false) hold= s. + * @rs_num is the jump target register, or -1 for calls. + */ +static void gen_cond_set_cfi(DisasContext *ctx, bool sense, TCGv pred, + int rs_num) +{ + TCGv lsb =3D tcg_temp_new(); + TCGLabel *skip =3D gen_new_label(); + + tcg_gen_andi_tl(lsb, pred, 1); + tcg_gen_brcondi_tl(sense ? TCG_COND_EQ : TCG_COND_NE, lsb, 0, skip); + gen_set_cfi_for_target(ctx, rs_num); + gen_set_label(skip); +} + #ifndef CONFIG_HEXAGON_IDEF_PARSER /* frame =3D ((LR << 32) | FP) ^ (FRAMEKEY << 32)) */ static TCGv_i64 gen_frame_scramble(void) diff --git a/target/hexagon/hex_interrupts.c b/target/hexagon/hex_interrupt= s.c index 03e1f28da9b..81e7d016c3d 100644 --- a/target/hexagon/hex_interrupts.c +++ b/target/hexagon/hex_interrupts.c @@ -48,6 +48,7 @@ static void set_ssr_ex_cause(CPUHexagonState *env, int ex= , uint32_t cause) old =3D env->t_sreg[HEX_SREG_SSR]; SET_SYSTEM_FIELD(env, HEX_SREG_SSR, SSR_EX, ex); SET_SYSTEM_FIELD(env, HEX_SREG_SSR, SSR_CAUSE, cause); + SET_SYSTEM_FIELD(env, HEX_SREG_SSR, SSR_CFI, env->cfi_active); new =3D env->t_sreg[HEX_SREG_SSR]; hexagon_modify_ssr(env, new, old); } @@ -373,6 +374,8 @@ static void hex_accept_int(CPUHexagonState *env, int in= t_num) env->threadId); =20 set_ssr_ex_cause(env, 1, HEX_CAUSE_INT0 | int_num); + env->cfi_active =3D 0; + env->cfi_updated =3D 0; set_elr(env, elr); env->gpr[HEX_REG_PC] =3D evb | (cs->exception_index << 2); } diff --git a/target/hexagon/hexswi.c b/target/hexagon/hexswi.c index 5783781195e..11472a9f1dd 100644 --- a/target/hexagon/hexswi.c +++ b/target/hexagon/hexswi.c @@ -786,7 +786,17 @@ void hexagon_cpu_do_interrupt(CPUState *cs) env->llsc_addr =3D ~0; =20 ssr =3D env->t_sreg[HEX_SREG_SSR]; + if (GET_SSR_FIELD(SSR_EX, ssr) =3D=3D 0) { + SET_SSR_FIELD(env, SSR_CFI, env->cfi_active); + } + env->cfi_active =3D 0; + env->cfi_updated =3D 0; + if (GET_SSR_FIELD(SSR_EX, ssr) =3D=3D 1) { + /* + * Double exception: keep the SSR.CFI value saved by the first + * exception, which a later rte would need to restore. + */ if (cpu->globalregs) { hexagon_globalreg_write(cpu->globalregs, HEX_SREG_DIAG, env->cause_code, env->threadId); @@ -891,6 +901,7 @@ void hexagon_cpu_do_interrupt(CPUState *cs) switch (env->cause_code) { case HEX_CAUSE_FETCH_NO_XPAGE: case HEX_CAUSE_FETCH_NO_UPAGE: + case HEX_CAUSE_CFI_VIOLATION: case HEX_CAUSE_PRIV_NO_READ: case HEX_CAUSE_PRIV_NO_UREAD: case HEX_CAUSE_PRIV_NO_WRITE: diff --git a/target/hexagon/machine.c b/target/hexagon/machine.c index 36fee33d333..6a41551d8fa 100644 --- a/target/hexagon/machine.c +++ b/target/hexagon/machine.c @@ -21,7 +21,7 @@ static int hexagon_cpu_post_load(void *opaque, int versio= n_id) =20 const VMStateDescription vmstate_hexagon_cpu =3D { .name =3D "cpu", - .version_id =3D 2, + .version_id =3D 3, .minimum_version_id =3D 2, .post_load =3D hexagon_cpu_post_load, .fields =3D (const VMStateField[]) { @@ -37,6 +37,7 @@ const VMStateDescription vmstate_hexagon_cpu =3D { VMSTATE_UINT32(env.cause_code, HexagonCPU), VMSTATE_UNUSED(sizeof(uint64_t)), VMSTATE_UINT32(env.imprecise_exception, HexagonCPU), + VMSTATE_UINT32_V(env.cfi_active, HexagonCPU, 3), =20 VMSTATE_END_OF_LIST() }, diff --git a/target/hexagon/translate.c b/target/hexagon/translate.c index 6e7c2f32f41..a0806bc4394 100644 --- a/target/hexagon/translate.c +++ b/target/hexagon/translate.c @@ -68,6 +68,9 @@ TCGv hex_imprecise_exception; TCGv hex_vstore_addr[VSTORES_MAX]; TCGv hex_vstore_size[VSTORES_MAX]; TCGv hex_vstore_pending[VSTORES_MAX]; +TCGv_i32 hex_cfi_active; +TCGv_i32 hex_cfi_active_log; +TCGv_i32 hex_cfi_updated; #ifndef CONFIG_USER_ONLY TCGv_ptr hex_hvx_ptr; #endif @@ -442,6 +445,45 @@ static void mark_implicit_reg_write(DisasContext *ctx,= int attrib, int rnum) } } =20 +static bool pkt_legal_cfi_target(const Packet *pkt) +{ + int i; + + for (i =3D 0; i < pkt->num_insns; i++) { + if (GET_ATTRIB(pkt->insn[i].opcode, A_RESTRICT_TARGET) || + pkt->insn[i].opcode =3D=3D Y2_break || + (pkt->insn[i].opcode =3D=3D J2_trap0 && + pkt->insn[i].immed[0] =3D=3D 0xdb)) { + return true; + } + } + return false; +} + +static void gen_cfi_check(DisasContext *ctx) +{ + TCGLabel *skip; + + if (ctx->hex_def->hex_version < HEX_VER_V83 || + pkt_legal_cfi_target(&ctx->pkt)) { + return; + } + + skip =3D gen_new_label(); + tcg_gen_brcondi_i32(TCG_COND_EQ, hex_cfi_active, 0, skip); + gen_precise_exception(HEX_CAUSE_CFI_VIOLATION, ctx->pkt.pc); + gen_set_label(skip); +} + +static void gen_cfi_target_update(DisasContext *ctx) +{ + if (ctx->hex_def->hex_version >=3D HEX_VER_V83 && + pkt_legal_cfi_target(&ctx->pkt)) { + tcg_gen_movi_i32(hex_cfi_active_log, 0); + tcg_gen_movi_i32(hex_cfi_updated, 1); + } +} + static void mark_implicit_usr_write(DisasContext *ctx, int attrib) { uint16_t opcode =3D ctx->insn->opcode; @@ -710,6 +752,9 @@ static void gen_start_packet(DisasContext *ctx) tcg_gen_movi_tl(hex_gpr[HEX_REG_PC], ctx->next_PC); } =20 + gen_cfi_target_update(ctx); + gen_cfi_check(ctx); + /* Preload the predicated registers into get_result_gpr(ctx, i) */ if (ctx->need_commit && !bitmap_empty(ctx->predicated_regs, TOTAL_PER_THREAD_REGS)) { @@ -1231,6 +1276,14 @@ static void gen_commit_packet(DisasContext *ctx) gen_helper_probe_pkt_scalar_store_s0(tcg_env, args_tcgv); } =20 + if (ctx->hex_def->hex_version >=3D HEX_VER_V83) { + /* A restricted branch commits before a faulting store in its pack= et. */ + tcg_gen_movcond_i32(TCG_COND_NE, hex_cfi_active, hex_cfi_updated, + tcg_constant_i32(0), hex_cfi_active_log, + hex_cfi_active); + tcg_gen_movi_i32(hex_cfi_updated, 0); + } + process_store_log(ctx); =20 gen_reg_writes(ctx); @@ -1468,6 +1521,12 @@ void hexagon_translate_init(void) } hex_new_value_usr =3D tcg_global_mem_new(tcg_env, offsetof(CPUHexagonState, new_value_usr), "new_value_usr"); + hex_cfi_active =3D tcg_global_mem_new_i32(tcg_env, + offsetof(CPUHexagonState, cfi_active), "cfi_active"); + hex_cfi_active_log =3D tcg_global_mem_new_i32(tcg_env, + offsetof(CPUHexagonState, cfi_active_log), "cfi_active_log"); + hex_cfi_updated =3D tcg_global_mem_new_i32(tcg_env, + offsetof(CPUHexagonState, cfi_updated), "cfi_updated"); =20 for (i =3D 0; i < NUM_PREGS; i++) { hex_pred[i] =3D tcg_global_mem_new(tcg_env, diff --git a/target/hexagon/tag_rev_info.c.inc b/target/hexagon/tag_rev_inf= o.c.inc index c2d4886a846..88958b334d8 100644 --- a/target/hexagon/tag_rev_info.c.inc +++ b/target/hexagon/tag_rev_info.c.inc @@ -707,6 +707,26 @@ static const struct tag_rev_info tag_rev_info[XX_LAST_= OPCODE] =3D { .removed =3D HEX_VER_NONE }, [V2_vdeallocframe_reg] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_NONE }, + [J2_callr_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_= NONE }, + [J2_callrh_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER= _NONE }, + [J2_callrt_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER= _NONE }, + [J2_callrf_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER= _NONE }, + [J2_jumpr_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_= NONE }, + [J2_jumprh_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER= _NONE }, + [J2_jumprt_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER= _NONE }, + [J2_jumprf_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER= _NONE }, + [J2_jumprtpt_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_V= ER_NONE }, + [J2_jumprfpt_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_V= ER_NONE }, + [J2_jumprtnew_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_= VER_NONE }, + [J2_jumprfnew_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_= VER_NONE }, + [J2_jumprtnewpt_rb] =3D { .introduced =3D HEX_VER_V83, + .removed =3D HEX_VER_NONE }, + [J2_jumprfnewpt_rb] =3D { .introduced =3D HEX_VER_V83, + .removed =3D HEX_VER_NONE }, + [S2_allocframe_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX= _VER_NONE }, + [SS2_allocframe_rb] =3D { .introduced =3D HEX_VER_V83, + .removed =3D HEX_VER_NONE }, + [A2_nop_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_NO= NE }, [J2_trap2] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_NON= E }, =20 [Y4_dcfetch_multi] =3D { .introduced =3D HEX_VER_V85, diff --git a/target/hexagon/imported/alu.idef b/target/hexagon/imported/alu= .idef index b8556769891..7c039ab018a 100644 --- a/target/hexagon/imported/alu.idef +++ b/target/hexagon/imported/alu.idef @@ -241,6 +241,9 @@ Q6INSN(A2_minup,"Rdd32=3Dminu(Rtt32,Rss32)",ATTRIBS(A_A= RCHV3), Q6INSN(A2_nop,"nop",ATTRIBS(A_IT_NOP), "Nop (32-bit encoding)", fHIDE( { } )) +Q6INSN(A2_nop_rb,"nop_rb",ATTRIBS(A_IT_NOP,A_RESTRICT_TARGET), +"Restricted branch nop target", + fHIDE( { } )) =20 =20 Q6INSN(A4_ext,"immext(#u26:6)",ATTRIBS(A_IT_EXTENDER), diff --git a/target/hexagon/imported/branch.idef b/target/hexagon/imported/= branch.idef index 93e2e375a5c..b943a41a3fc 100644 --- a/target/hexagon/imported/branch.idef +++ b/target/hexagon/imported/branch.idef @@ -37,6 +37,19 @@ Q6INSN(J2_jumpr,"jumpr Rs32",ATTRIBS(A_JINDIR), "indirec= t unconditional jump", Q6INSN(J2_jumprh,"jumprh Rs32",ATTRIBS(A_JINDIR, A_HINTED_COF), "indirect = unconditional jump", {fJUMPR(RsN,RsV,COF_TYPE_JUMPR);}) =20 +Q6INSN(J2_jumpr_rb,"jumpr_rb Rs32",ATTRIBS(A_JINDIR), + "restricted indirect unconditional jump", + {fJUMPR(RsN,RsV,COF_TYPE_JUMPR);}) +Q6INSN(J2_jumprh_rb,"jumprh_rb Rs32",ATTRIBS(A_JINDIR, A_HINTED_COF), + "restricted hinted indirect unconditional jump", + {fJUMPR(RsN,RsV,COF_TYPE_JUMPR);}) + +#define OLDCOND_JUMP_RB(TAG,OPER,OPER2,ATTRIB,DESCR,SEMANTICS) \ +Q6INSN(TAG##t_rb,"if (Pu4) "OPER":nt "OPER2,ATTRIB,DESCR,{fBRANCH_SPECULAT= E_STALL(fLSBOLD(PuV),,SPECULATE_NOT_TAKEN,12,0); if (fLSBOLD(PuV)) { SEMANT= ICS; }}) \ +Q6INSN(TAG##f_rb,"if (!Pu4) "OPER":nt "OPER2,ATTRIB,DESCR,{fBRANCH_SPECULA= TE_STALL(fLSBOLDNOT(PuV),,SPECULATE_NOT_TAKEN,12,0); if (fLSBOLDNOT(PuV)) {= SEMANTICS; }}) \ +Q6INSN(TAG##tpt_rb,"if (Pu4) "OPER":t "OPER2,ATTRIB,DESCR,{fBRANCH_SPECULA= TE_STALL(fLSBOLD(PuV),,SPECULATE_TAKEN,12,0); if (fLSBOLD(PuV)) { SEMANTICS= ; }}) \ +Q6INSN(TAG##fpt_rb,"if (!Pu4) "OPER":t "OPER2,ATTRIB,DESCR,{fBRANCH_SPECUL= ATE_STALL(fLSBOLDNOT(PuV),,SPECULATE_TAKEN,12,0); if (fLSBOLDNOT(PuV)) { SE= MANTICS; }}) + #define OLDCOND_JUMP(TAG,OPER,OPER2,ATTRIB,DESCR,SEMANTICS) \ Q6INSN(TAG##t,"if (Pu4) "OPER":nt "OPER2,ATTRIB,DESCR,{fBRANCH_SPECULATE_S= TALL(fLSBOLD(PuV),,SPECULATE_NOT_TAKEN,12,0); if (fLSBOLD(PuV)) { SEMANTICS= ; }}) \ Q6INSN(TAG##f,"if (!Pu4) "OPER":nt "OPER2,ATTRIB,DESCR,{fBRANCH_SPECULATE_= STALL(fLSBOLDNOT(PuV),,SPECULATE_NOT_TAKEN,12,0); if (fLSBOLDNOT(PuV)) { SE= MANTICS; }}) \ @@ -48,6 +61,9 @@ fIMMEXT(riV);fPCALIGN(riV); fBRANCH(fREAD_PC()+riV,COF_TY= PE_JUMP);) =20 OLDCOND_JUMP(J2_jumpr,"jumpr","Rs32",ATTRIBS(A_JINDIROLD),"indirect condit= ional jump", fJUMPR(RsN,RsV,COF_TYPE_JUMPR);) +OLDCOND_JUMP_RB(J2_jumpr,"jumpr_rb","Rs32",ATTRIBS(A_JINDIROLD), + "restricted indirect conditional jump", + fJUMPR(RsN,RsV,COF_TYPE_JUMPR);) =20 #define NEWCOND_JUMP(TAG,OPER,OPER2,ATTRIB,DESCR,SEMANTICS)\ Q6INSN(TAG##tnew,"if (Pu4.new) "OPER":nt "OPER2,ATTRIB,DESCR,{fBRANCH_SPEC= ULATE_STALL(fLSBNEW(PuN),, SPECULATE_NOT_TAKEN , 12,0)} {if(fLSBNEW(PuN)){S= EMANTICS;}})\ @@ -61,6 +77,17 @@ fIMMEXT(riV); fPCALIGN(riV); fBRANCH(fREAD_PC()+riV,COF_= TYPE_JUMPNEW);) NEWCOND_JUMP(J2_jumpr,"jumpr","Rs32",ATTRIBS(A_JINDIRNEW,A_ARCHV3),"indire= ct conditional jump", fJUMPR(RsN,RsV,COF_TYPE_JUMPR);) =20 +#define NEWCOND_JUMP_RB(TAG,OPER,OPER2,ATTRIB,DESCR,SEMANTICS) \ +Q6INSN(TAG##tnew_rb,"if (Pu4.new) "OPER":nt "OPER2,ATTRIB,DESCR,{fBRANCH_S= PECULATE_STALL(fLSBNEW(PuN),, SPECULATE_NOT_TAKEN , 12,0)} {if(fLSBNEW(PuN)= ){SEMANTICS;}}) \ +Q6INSN(TAG##fnew_rb,"if (!Pu4.new) "OPER":nt "OPER2,ATTRIB,DESCR,{fBRANCH_= SPECULATE_STALL(fLSBNEWNOT(PuN),, SPECULATE_NOT_TAKEN , 12,0)} {if(fLSBNEWN= OT(PuN)){SEMANTICS;}}) \ +Q6INSN(TAG##tnewpt_rb,"if (Pu4.new) "OPER":t "OPER2,ATTRIB,DESCR,{fBRANCH_= SPECULATE_STALL(fLSBNEW(PuN),, SPECULATE_TAKEN , 12,0)} {if(fLSBNEW(PuN)){S= EMANTICS;}}) \ +Q6INSN(TAG##fnewpt_rb,"if (!Pu4.new) "OPER":t "OPER2,ATTRIB,DESCR,{fBRANCH= _SPECULATE_STALL(fLSBNEWNOT(PuN),, SPECULATE_TAKEN , 12,0)} {if(fLSBNEWNOT(= PuN)){SEMANTICS;}}) + +NEWCOND_JUMP_RB(J2_jumpr,"jumpr_rb","Rs32", + ATTRIBS(A_JINDIRNEW,A_ARCHV3), + "restricted indirect conditional jump", + fJUMPR(RsN,RsV,COF_TYPE_JUMPR);) + =20 =20 Q6INSN(J4_hintjumpr,"hintjr(Rs32)",ATTRIBS(A_JINDIR),"hint indirect condit= ional jump", @@ -202,6 +229,17 @@ Q6INSN(J2_callrf,"if (!Pu4) callr Rs32",ATTRIBS(CINDIR= _STD),"indirect conditiona Q6INSN(J2_callrh,"callrh Rs32",ATTRIBS(CINDIR_STD, A_HINTED_COF), "hinted = indirect unconditional call", { fCALLR(RsV); }) =20 +Q6INSN(J2_callr_rb,"callr_rb Rs32",ATTRIBS(CINDIR_STD), + "restricted indirect unconditional call", { fCALLR(RsV); }) +Q6INSN(J2_callrh_rb,"callrh_rb Rs32",ATTRIBS(CINDIR_STD, A_HINTED_COF), + "restricted hinted indirect unconditional call", { fCALLR(RsV); }) +Q6INSN(J2_callrt_rb,"if (Pu4) callr_rb Rs32",ATTRIBS(CINDIR_STD), + "restricted indirect conditional call if true", + {if (fLSBOLD(PuV)) { fCALLR(RsV); }}) +Q6INSN(J2_callrf_rb,"if (!Pu4) callr_rb Rs32",ATTRIBS(CINDIR_STD), + "restricted indirect conditional call if false", + {if (fLSBOLDNOT(PuV)) { fCALLR(RsV); }}) + =20 =20 /*********************************************/ diff --git a/target/hexagon/imported/encode_pp.def b/target/hexagon/importe= d/encode_pp.def index ed1de09a40c..97af0fcb394 100644 --- a/target/hexagon/imported/encode_pp.def +++ b/target/hexagon/imported/encode_pp.def @@ -413,6 +413,20 @@ DEF_ENC32(V2_vallocframe_imm,"01100000100-----PP001---= -iiiiiii") DEF_ENC32(V2_vallocframe_reg,"01100000100sssssPP010-----------") DEF_ENC32(V2_vdeallocframe_imm,"01101010100-----PP001----iiiiiii") DEF_ENC32(V2_vdeallocframe_reg,"01101001010sssssPP010-----------") +DEF_ENC32(J2_callr_rb,"01010000001sssssPP--------------") +DEF_ENC32(J2_callrh_rb,"01010000010sssssPP--------------") +DEF_ENC32(J2_callrt_rb,"01010001100sssssPP----uu--------") +DEF_ENC32(J2_callrf_rb,"01010001101sssssPP----uu--------") +DEF_ENC32(J2_jumpr_rb,"01010010000sssssPP--------------") +DEF_ENC32(J2_jumprh_rb,"01010010010sssssPP--------------") +DEF_ENC32(J2_jumprt_rb,"01010011110sssssPP-00-uu--------") +DEF_ENC32(J2_jumprf_rb,"01010011111sssssPP-00-uu--------") +DEF_ENC32(J2_jumprtpt_rb,"01010011110sssssPP-10-uu--------") +DEF_ENC32(J2_jumprfpt_rb,"01010011111sssssPP-10-uu--------") +DEF_ENC32(J2_jumprtnew_rb,"01010011110sssssPP-01-uu--------") +DEF_ENC32(J2_jumprfnew_rb,"01010011111sssssPP-01-uu--------") +DEF_ENC32(J2_jumprtnewpt_rb,"01010011110sssssPP-11-uu--------") +DEF_ENC32(J2_jumprfnewpt_rb,"01010011111sssssPP-11-uu--------") DEF_ENC32(J2_trap2,"0101010011------PP-iiiii---iii--") =20 =20 @@ -514,6 +528,7 @@ DEF_ENC32(S2_pstorerdf_pi_nt,"10101010110xxxxxPP1ttttt0= iiii1vv") /* x bus/cache */ /* x store/cache */ DEF_ENC32(S2_allocframe, ICLASS_ST" 000 01 00xxxxx PP000iii iiiiiiii") +DEF_ENC32(S2_allocframe_rb,ICLASS_ST" 000 01 00xxxxx PP100iii iiiiiiii") DEF_ENC32(Y5_l2locka, ICLASS_ST" 000 01 11sssss PP1----- ------dd") DEF_ENC32(Y2_dczeroa, ICLASS_ST" 000 01 10sssss PP0----- --------") DEF_ENC32(Y2_dczeroa_nt,"10100000110sssssPP1-------------") @@ -1407,7 +1422,8 @@ DEF_ENC32(C2_cmoveif, ICLASS_ALU2op" 1110 1uu0iiii = PP0iiiii iiiddddd") =20 =20 DEF_FIELDROW_DESC32( ICLASS_ALU2op" 1111 -------- PP------ --------","[= #15] nop") -DEF_ENC32(A2_nop, ICLASS_ALU2op" 1111 -------- PP------ --------") +DEF_ENC32(A2_nop, ICLASS_ALU2op" 1111 0------- PP------ --------") +DEF_ENC32(A2_nop_rb, ICLASS_ALU2op" 1111 1------- PP------ --------") =20 =20 =20 diff --git a/target/hexagon/imported/encode_subinsn.def b/target/hexagon/im= ported/encode_subinsn.def index 742fb50efb6..4ff3e95a253 100644 --- a/target/hexagon/imported/encode_subinsn.def +++ b/target/hexagon/imported/encode_subinsn.def @@ -71,6 +71,7 @@ DEF_ENC_SUBINSN(SS2_storebi0, SUBINSN_S2, "100 10ssssi= iii") DEF_ENC_SUBINSN(SS2_storebi1, SUBINSN_S2, "100 11ssssiiii") =20 DEF_ENC_SUBINSN(SS2_allocframe, SUBINSN_S2, "111 0iiiii----") +DEF_ENC_SUBINSN(SS2_allocframe_rb,SUBINSN_S2, "111 1iiiii----") =20 =20 =20 diff --git a/target/hexagon/imported/ldst.idef b/target/hexagon/imported/ld= st.idef index 48cda64e0b0..1e176ccc464 100644 --- a/target/hexagon/imported/ldst.idef +++ b/target/hexagon/imported/ldst.idef @@ -135,6 +135,8 @@ STD_ST_AMODES(storerhnew, "Nt8.new", "memh","Store Half= integer",ATTRIBS(A_REGWR =20 Q6INSN(S2_allocframe,"allocframe(Rx32,#u11:3):raw", ATTRIBS(A_REGWRSIZE_8B= ,A_MEMSIZE_8B,A_STORE,A_RESTRICT_SLOT0ONLY), "Allocate stack frame", { fEA_RI(RxV,-8); fSTORE(1,8,EA,fFRAME_SCRAMBLE((fCAST8_8u(fREAD_LR()) << = 32) | fCAST4_4u(fREAD_FP()))); fWRITE_FP(EA); fFRAMECHECK(EA-uiV,EA); RxV = =3D EA-uiV; }) +Q6INSN(S2_allocframe_rb,"allocframe_rb(Rx32,#u11:3):raw", ATTRIBS(A_REGWRS= IZE_8B,A_MEMSIZE_8B,A_STORE,A_RESTRICT_SLOT0ONLY,A_RESTRICT_TARGET), "Alloc= ate stack frame", +{ fEA_RI(RxV,-8); fSTORE(1,8,EA,fFRAME_SCRAMBLE((fCAST8_8u(fREAD_LR()) << = 32) | fCAST4_4u(fREAD_FP()))); fWRITE_FP(EA); fFRAMECHECK(EA-uiV,EA); RxV = =3D EA-uiV; }) #define A_RETURN A_RESTRICT_COF_MAX1,A_RESTRICT_SLOT0ONLY,A_RESTRICT_NOSLO= T1_STORE,A_RET_TYPE,A_DEALLOCRET =20 /**** Load Acquire Store Release Instructions****/ diff --git a/target/hexagon/imported/subinsns.idef b/target/hexagon/importe= d/subinsns.idef index be0ae8779da..a4be385f588 100644 --- a/target/hexagon/imported/subinsns.idef +++ b/target/hexagon/imported/subinsns.idef @@ -147,3 +147,5 @@ Q6INSN(SS2_storebi1, "memb(Rs16+#u4:0)=3D#1", ATTRIBS= (A_MEMSIZE_1B,A_STORE,A_SUB =20 Q6INSN(SS2_allocframe,"allocframe(#u5:3)", ATTRIBS(A_REGWRSIZE_8B,A_SUBINS= N,A_MEMSIZE_8B,A_STORE,A_RESTRICT_SLOT0ONLY), "Allocate stack frame", { fEA_RI(fREAD_SP(),-8); fSTORE(1,8,EA,fFRAME_SCRAMBLE((fCAST8_8u(fREAD_L= R()) << 32) | fCAST4_4u(fREAD_FP()))); fWRITE_FP(EA); fFRAMECHECK(EA-uiV,EA= ); fWRITE_SP(EA-uiV); }) +Q6INSN(SS2_allocframe_rb,"allocframe_rb(#u5:3)", ATTRIBS(A_REGWRSIZE_8B,A_= SUBINSN,A_MEMSIZE_8B,A_STORE,A_RESTRICT_SLOT0ONLY,A_RESTRICT_TARGET), "Allo= cate stack frame", +{ fEA_RI(fREAD_SP(),-8); fSTORE(1,8,EA,fFRAME_SCRAMBLE((fCAST8_8u(fREAD_L= R()) << 32) | fCAST4_4u(fREAD_FP()))); fWRITE_FP(EA); fFRAMECHECK(EA-uiV,EA= ); fWRITE_SP(EA-uiV); }) diff --git a/target/hexagon/imported/system.idef b/target/hexagon/imported/= system.idef index 80fa0cd5618..f279c52b7d6 100644 --- a/target/hexagon/imported/system.idef +++ b/target/hexagon/imported/system.idef @@ -48,7 +48,7 @@ Q6INSN(J2_trap1,"trap1(Rx32,#u8)",ATTRIBS(A_COF,A_NOTE_NO= PACKET,A_RESTRICT_NOPAC fVIRTINSN_SPSWAP(uiV,RxV); }) =20 -Q6INSN(J2_trap2,"trap2(#u8)",ATTRIBS(A_COF,A_RESTRICT_NOPACKET), +Q6INSN(J2_trap2,"trap2(#u8)",ATTRIBS(A_COF,A_NOTE_NOPACKET,A_RESTRICT_NOPA= CKET), "Trap to Operating System", { fTRAP(2,uiV); }) =20 Q6INSN(J2_pause,"pause(#u8)",ATTRIBS(A_COF,A_NOTE_NOPACKET,A_RESTRICT_NOPA= CKET), --=20 2.34.1 From nobody Fri Oct 23 22:16:18 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=1792694086; cv=none; d=zohomail.com; s=zohoarc; b=dTkpSbMJuGQxEmVC8OE1nsSN+equ7giw/iJ8/B8rvT1i3dOXiYjHgI/gsTEWlQ6w7h1YnE9JPn2398vuPspCt/YWc0Im3cwli7dyG3RxZbqfEJykHwHcIAvmD/BY38wAA4fWq8oF9rgV0Atmk83hRuErXTeNLt+3GSOKw7aJ6Lw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792694086; h=Content-Type: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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=uit5z0E6yg8/sdtp7Ba0kFBvGZ/bc3wY88ZRb9+ZJhs=; b=nGPosnBpfVlsepqNkfGr8KlsEVy0jc8H2knV/khu3RzTXu5yX51djCRawSem4qP1++VCrL4XS3AD+XHdRQwoAphyEZHTMr5t8oY4DXalv4Ymj3fY2hzdwMk/bnhI4+Vj9Zb+qlvS+39Yw54kHwFh+xctpD/ZpOkeeFTDeCA6knA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792694086658638.4639886751816; Thu, 22 Oct 2026 11:34:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xJxc6-0007A9-Pn; Thu, 22 Oct 2026 14:34:08 -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 1xJxaW-0006EB-AR for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:34 -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 1xJxaL-0002gM-3d for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:20 -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 69MIHrGJ3581566 for ; Thu, 22 Oct 2026 18:32:14 GMT Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hfqmbg2ad-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 22 Oct 2026 18:32:14 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-3698bd5392cso32019eec.1 for ; Thu, 22 Oct 2026 11:32:14 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-369d8f8eaf9sm44962eec.16.2026.10.22.11.32.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 11:32:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= uit5z0E6yg8/sdtp7Ba0kFBvGZ/bc3wY88ZRb9+ZJhs=; b=LJ/ksyeaZynLJcmY mFjRpS6NY/JZrVUaz5h8WS+iddXN7iFXPLn9DQfEC0RWLU1yYxSSnueI+FQ0FoEM bGtR6wDprg/wjmXUEzLLenCn4YYSCEkNUXfC8oUw9PE8SunK0GbEVjGEyGCHtrdn WVuDj/bhnvye0yuIg9S1rn9eJ4fcFMu4PLUU/WOcSFM16BqzSSFnExav0GE4xEvi 9etemZDwDgZhkA/SsgUAZCrL9/I7peNBkBZm6xVj8d9MLJ1j6Z6sWc/KO8sIpYSI 8MeZCSO8Klm2X4MYNjudWpjm1UNFNPHytYa1h8HJ1nEArjc6Z3lnxosAq37o9dYH S9Oj1Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1792693933; x=1793298733; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=uit5z0E6yg8/sdtp7Ba0kFBvGZ/bc3wY88ZRb9+ZJhs=; b=am7/F/r57W/EOIcCZMqkN6ExIbRNPVLdqdOqj3LjRuouvn9d9cfwedW59RphCx27QA UHAtoCd0Yt68uuPWmo6Nwp7j+ZjKonx18w7ldXrhhXJc+1mjTN1vaCtHbeiI3uXucLOu KELN3DGACnRGyaDrvrKy45fBqhg+NxzYsGHSYdrjasGpbMZhww5/SafdnFiVkTLWBYYD 8Zsp/ZZStotiHCpaKnQ9PA5B9DiPUbPB3hhsJ+TT0qSUDHSq4EUDYldDB1XUx6Ll0xnD CR+eGRumchJhX4ZVtWa7qqBnGFiAvrPFkI1/KzMYiaWUnZdoE2sfBI5oja11BGliM9cQ WjzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792693933; x=1793298733; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=uit5z0E6yg8/sdtp7Ba0kFBvGZ/bc3wY88ZRb9+ZJhs=; b=uU4I0r/SB93WfgFyOuCquGU3EeON1zPd2zQCahVictvFrMHVr/UBSkpBPRyHF35SAD 3Hk6fZ4Zm08IAIXnunTQN7+hAAvvLpPCgwi0SxkwTABh4W5ILRZQ+W5+K97RnESy5OaL uhDWfmNpLjoOdLc4L60uEwW8lJ/IrDAwAvFLZwyJxgjyd1DNJrvqwq2rPJTsxtnEILiw 3nB+n8QrpperoKkLbWCef9stbeNOJbP1rZLlK4Q7sZwHJRnsTSpKe5Xxbt86VKv3ntlj 2CMMwXFVKcoQYvq3GhJuN8BzPmNyNwZ7nwm+YVNYKfxaVgH7dQgDlK2mFva85gmmHGng qsKw== X-Gm-Message-State: AFq9FYJdVtb6ZCaGZMEjfCtOtcKx80e59oiE9pvYcYlbtmfqXLcmI5Kh l0NPlMdbZSL7JWekDKwQz+0tG4SHme3JwHk4ChoiACs1i3dcKJ5Vo1lojRmt78y6OEu2jEvRWPI NKJo2Lwq31E9YnFQkXGOUtaSp2FZwS+ntvXrH0RrPWlY24pOSrQ7MiBeom/VPiPCAPg== X-Gm-Gg: AYBFou0yTFK+DhV1mHsXmasuJ8xDwmdOWkXIQhWRu/LOqWaqJeF+2qyBSe/65bw6UCk KNf0hn+Rkv1oZJaZhKS/cnVmRsmydCX/1Owzoj65LF7oE5f5q2wq7NeMJCMvBVigAhHMzz/Pkh4 CQupXdnHY3JuTCUa6Lw1kl34oUISVakhOUgitOQV+2Q9omOkpR5i6CHXDN3sBQSgQiJmOriIFiM Zy6sUYmg4EwdhvenGIRbmZtgoF4A6OgHB4IhsjbD78NVsfX8HWpkTUsysGjE4lTP6p9VuWgaF+D v4MDe6f6TGAf9eXCAVrU+Sd3G1yWmlCdSV4jC1gI2DjawZom+VKbgCDD0/AmUX5d7ECGVWPjuIL EiOntb2Fnp5JbcSElgrolUKHBM+BRUtnLBXhsDOXDlaj7qUVc X-Received: by 2002:a05:7300:c011:20b0:369:d13c:99f5 with SMTP id 5a478bee46e88-369d8f7708fmr34554eec.0.1792693933127; Thu, 22 Oct 2026 11:32:13 -0700 (PDT) X-Received: by 2002:a05:7300:c011:20b0:369:d13c:99f5 with SMTP id 5a478bee46e88-369d8f7708fmr34516eec.0.1792693932509; Thu, 22 Oct 2026 11:32:12 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: Brian Cain , Anton Johansson , Pierrick Bouvier , Helge Deller , Mohamed Mediouni , Alessandro Di Federico , Laurent Vivier , Marco Liebel Subject: [PATCH v4 10/11] target/hexagon: add vsf* instructions Date: Thu, 22 Oct 2026 11:31:46 -0700 Message-Id: <20261022183147.1535585-11-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> References: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX24TdJy/lih/y i9RXx59AYYH/abctvqOmYcCly6CMmKDKPjx+sqaXf8WXV+YhcEr1MBZ99VcVePLUYviUWFG4YNE wxf/IXUTSgRbask/b1sHnbouLsJ8pbo= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX7KBnTpO7TiPc TQPXSjaECcKlZKmI3knGCJOisILvvoOQ7c6G9BEhe4TvMyO3deRV68fYRcLa/L/PC4kHdMrqBKA WrrBt1Mt/aMdBkMyuwium9F1b+1RpqCUx/MjSvPMElIFs8s9Wx38jp+fkKGaKjr26qnQHl2Dqbw aNfZU9pBNaLe0IXw36C4yEWHpn8jaqF1+mAFuB5GEpgx59KbCI2t90eV2CDTQckK3Gwa7rvnoZ7 3oKFQJD0DDVDQFdbABV0at+MDdb4r/22TwDLkjZYCDXWZRqwsPc7ZGC2YYhFYfMvp0Dpdg2jPnx ipnYSXf+MutJgfLz6jzYmdt7FZriDequ91758560tNnnAeQ2Jc4Rte2W9FYSqA4FxrqzoSefbxQ 0yBN4pqD3D/HKPSts8wTCPvrdPz+MF2uoPoUGiRLaSdN3R6E4CjTi5qMggWRG7bbXSRrCEmL9/j RlhbaXGhlJ5tW/S/Gfw== X-Proofpoint-ORIG-GUID: clBWcLzrkc2OYFztm70GRyP1i23SvwaY X-Authority-Analysis: v=2.4 cv=Nt1E4MdJ c=1 sm=1 tr=0 ts=6ada56ae cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=kK6ScQCkh_OLZFRpznEA:9 a=QEXdDO2ut3YA:10 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-GUID: clBWcLzrkc2OYFztm70GRyP1i23SvwaY X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.138,FMLib:17.12.100.49 definitions=2026-10-22_06,2026-10-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 clxscore=1015 impostorscore=0 suspectscore=0 malwarescore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610220073 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@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, 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: 1792694088721158500 Implement the v83 two-lane scalar floating-point arithmetic instructions. Reviewed-by: Pierrick Bouvier Reviewed-by: Marco Liebel Signed-off-by: Brian Cain --- target/hexagon/gen_tcg.h | 10 ++++ target/hexagon/helper.h | 5 ++ target/hexagon/op_helper.c | 73 +++++++++++++++++++++++++++ target/hexagon/tag_rev_info.c.inc | 5 ++ target/hexagon/imported/encode_pp.def | 5 ++ target/hexagon/imported/float.idef | 49 ++++++++++++++++++ 6 files changed, 147 insertions(+) diff --git a/target/hexagon/gen_tcg.h b/target/hexagon/gen_tcg.h index 05a7b775556..d5b20112649 100644 --- a/target/hexagon/gen_tcg.h +++ b/target/hexagon/gen_tcg.h @@ -1367,6 +1367,16 @@ gen_helper_sfadd(RdV, tcg_env, RsV, RtV, pkt_need_commit) #define fGEN_TCG_F2_sfsub(SHORTCODE) \ gen_helper_sfsub(RdV, tcg_env, RsV, RtV, pkt_need_commit) +#define fGEN_TCG_F7_vsfadd(SHORTCODE) \ + gen_helper_vsfadd(RddV, tcg_env, RssV, RttV, pkt_need_commit) +#define fGEN_TCG_F7_vsfsub(SHORTCODE) \ + gen_helper_vsfsub(RddV, tcg_env, RssV, RttV, pkt_need_commit) +#define fGEN_TCG_F7_vsfmpy(SHORTCODE) \ + gen_helper_vsfmpy(RddV, tcg_env, RssV, RttV, pkt_need_commit) +#define fGEN_TCG_F7_vsffma(SHORTCODE) \ + gen_helper_vsffma(RxxV, tcg_env, RxxV, RssV, RttV, pkt_need_commit) +#define fGEN_TCG_F7_vsffms(SHORTCODE) \ + gen_helper_vsffms(RxxV, tcg_env, RxxV, RssV, RttV, pkt_need_commit) #define fGEN_TCG_F2_sfcmpeq(SHORTCODE) \ gen_helper_sfcmpeq(PdV, tcg_env, RsV, RtV, pkt_need_commit) #define fGEN_TCG_F2_sfcmpgt(SHORTCODE) \ diff --git a/target/hexagon/helper.h b/target/hexagon/helper.h index 28591417040..00b37f36309 100644 --- a/target/hexagon/helper.h +++ b/target/hexagon/helper.h @@ -60,6 +60,11 @@ DEF_HELPER_3(conv_df2ud_chop, i64, env, f64, i32) DEF_HELPER_3(conv_df2d_chop, s64, env, f64, i32) DEF_HELPER_4(sfadd, f32, env, f32, f32, i32) DEF_HELPER_4(sfsub, f32, env, f32, f32, i32) +DEF_HELPER_4(vsfadd, i64, env, i64, i64, i32) +DEF_HELPER_4(vsfsub, i64, env, i64, i64, i32) +DEF_HELPER_4(vsfmpy, i64, env, i64, i64, i32) +DEF_HELPER_5(vsffma, i64, env, i64, i64, i64, i32) +DEF_HELPER_5(vsffms, i64, env, i64, i64, i64, i32) DEF_HELPER_4(sfcmpeq, s32, env, f32, f32, i32) DEF_HELPER_4(sfcmpgt, s32, env, f32, f32, i32) DEF_HELPER_4(sfcmpge, s32, env, f32, f32, i32) diff --git a/target/hexagon/op_helper.c b/target/hexagon/op_helper.c index 9850dc07289..769f56e2422 100644 --- a/target/hexagon/op_helper.c +++ b/target/hexagon/op_helper.c @@ -926,6 +926,79 @@ float32 HELPER(sfsub)(CPUHexagonState *env, float32 Rs= V, float32 RtV, return RdV; } =20 +uint64_t HELPER(vsfadd)(CPUHexagonState *env, uint64_t RssV, uint64_t RttV, + uint32_t pkt_need_commit) +{ + uint64_t RddV; + float32 lo, hi; + + arch_fpop_start(env); + lo =3D float32_add(RssV, RttV, &env->fp_status); + hi =3D float32_add(RssV >> 32, RttV >> 32, &env->fp_status); + arch_fpop_end(env, pkt_need_commit); + RddV =3D lo | ((uint64_t)hi << 32); + return RddV; +} + +uint64_t HELPER(vsfsub)(CPUHexagonState *env, uint64_t RssV, uint64_t RttV, + uint32_t pkt_need_commit) +{ + uint64_t RddV; + float32 lo, hi; + + arch_fpop_start(env); + lo =3D float32_sub(RssV, RttV, &env->fp_status); + hi =3D float32_sub(RssV >> 32, RttV >> 32, &env->fp_status); + arch_fpop_end(env, pkt_need_commit); + RddV =3D lo | ((uint64_t)hi << 32); + return RddV; +} + +uint64_t HELPER(vsfmpy)(CPUHexagonState *env, uint64_t RssV, uint64_t RttV, + uint32_t pkt_need_commit) +{ + uint64_t RddV; + float32 lo, hi; + + arch_fpop_start(env); + lo =3D float32_mul(RssV, RttV, &env->fp_status); + hi =3D float32_mul(RssV >> 32, RttV >> 32, &env->fp_status); + arch_fpop_end(env, pkt_need_commit); + RddV =3D lo | ((uint64_t)hi << 32); + return RddV; +} + +uint64_t HELPER(vsffma)(CPUHexagonState *env, uint64_t RxxV, uint64_t RssV, + uint64_t RttV, uint32_t pkt_need_commit) +{ + uint64_t RddV; + float32 lo, hi; + + arch_fpop_start(env); + lo =3D float32_muladd(RssV, RttV, RxxV, 0, &env->fp_status); + hi =3D float32_muladd(RssV >> 32, RttV >> 32, RxxV >> 32, 0, + &env->fp_status); + arch_fpop_end(env, pkt_need_commit); + RddV =3D lo | ((uint64_t)hi << 32); + return RddV; +} + +uint64_t HELPER(vsffms)(CPUHexagonState *env, uint64_t RxxV, uint64_t RssV, + uint64_t RttV, uint32_t pkt_need_commit) +{ + uint64_t RddV; + float32 lo, hi; + + arch_fpop_start(env); + lo =3D float32_muladd(RssV, RttV, RxxV, float_muladd_negate_product, + &env->fp_status); + hi =3D float32_muladd(RssV >> 32, RttV >> 32, RxxV >> 32, + float_muladd_negate_product, &env->fp_status); + arch_fpop_end(env, pkt_need_commit); + RddV =3D lo | ((uint64_t)hi << 32); + return RddV; +} + int32_t HELPER(sfcmpeq)(CPUHexagonState *env, float32 RsV, float32 RtV, uint32_t pkt_need_commit) { diff --git a/target/hexagon/tag_rev_info.c.inc b/target/hexagon/tag_rev_inf= o.c.inc index 88958b334d8..da0b1a648cf 100644 --- a/target/hexagon/tag_rev_info.c.inc +++ b/target/hexagon/tag_rev_info.c.inc @@ -728,6 +728,11 @@ static const struct tag_rev_info tag_rev_info[XX_LAST_= OPCODE] =3D { .removed =3D HEX_VER_NONE }, [A2_nop_rb] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_NO= NE }, [J2_trap2] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_NON= E }, + [F7_vsfadd] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_NO= NE }, + [F7_vsfsub] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_NO= NE }, + [F7_vsfmpy] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_NO= NE }, + [F7_vsffma] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_NO= NE }, + [F7_vsffms] =3D { .introduced =3D HEX_VER_V83, .removed =3D HEX_VER_NO= NE }, =20 [Y4_dcfetch_multi] =3D { .introduced =3D HEX_VER_V85, .removed =3D HEX_VER_NONE }, diff --git a/target/hexagon/imported/encode_pp.def b/target/hexagon/importe= d/encode_pp.def index 97af0fcb394..1e632050eac 100644 --- a/target/hexagon/imported/encode_pp.def +++ b/target/hexagon/imported/encode_pp.def @@ -1200,9 +1200,14 @@ MPY_ENC(A6_vminub_RdP, "1010","ddddd","0","1",= "1","1","ee") DEF_FIELDROW_DESC32(ICLASS_M" 1011 -------- PP------ --------","[#11] Rese= rved") MPY_ENC(F2_sfadd, "1011","ddddd","0","0","0","0","00") MPY_ENC(F2_sfsub, "1011","ddddd","0","0","0","0","01") +DEF_ENC32(F7_vsfadd, "11101011000sssssPP0ttttt010ddddd") +DEF_ENC32(F7_vsfsub, "11101011000sssssPP0ttttt011ddddd") MPY_ENC(F2_sfmax, "1011","ddddd","0","0","0","1","00") MPY_ENC(F2_sfmin, "1011","ddddd","0","0","0","1","01") MPY_ENC(F2_sfmpy, "1011","ddddd","0","0","1","0","00") +DEF_ENC32(F7_vsfmpy, "11101011010sssssPP0ttttt001ddddd") +DEF_ENC32(F7_vsffma, "11101011010sssssPP0ttttt010xxxxx") +DEF_ENC32(F7_vsffms, "11101011010sssssPP0ttttt011xxxxx") MPY_ENC(F2_sffixupn, "1011","ddddd","0","0","1","1","00") MPY_ENC(F2_sffixupd, "1011","ddddd","0","0","1","1","01") MPY_ENC(F2_sfrecipa, "1011","ddddd","1","1","1","1","ee") diff --git a/target/hexagon/imported/float.idef b/target/hexagon/imported/f= loat.idef index 3e75bc46047..e61b7f580d2 100644 --- a/target/hexagon/imported/float.idef +++ b/target/hexagon/imported/float.idef @@ -51,6 +51,55 @@ Q6INSN(F2_sffms,"Rx32-=3Dsfmpy(Rs32,Rt32)",ATTRIBS(), "Floating-Point Fused Multiply Add", { RxV=3DfUNFLOAT(fFMAF(-fFLOAT(RsV),fFLOAT(RtV),fFLOAT(RxV))); }) =20 +Q6INSN(F7_vsfadd,"Rdd32=3Dvsfadd(Rss32,Rtt32)",ATTRIBS(), + "Vector Floating-Point Add", +{ + fSETWORD(0,RddV,fUNFLOAT(fFLOAT(fGETUWORD(0,RssV)) + + fFLOAT(fGETUWORD(0,RttV)))); + fSETWORD(1,RddV,fUNFLOAT(fFLOAT(fGETUWORD(1,RssV)) + + fFLOAT(fGETUWORD(1,RttV)))); +}) + +Q6INSN(F7_vsfsub,"Rdd32=3Dvsfsub(Rss32,Rtt32)",ATTRIBS(), + "Vector Floating-Point Subtract", +{ + fSETWORD(0,RddV,fUNFLOAT(fFLOAT(fGETUWORD(0,RssV)) - + fFLOAT(fGETUWORD(0,RttV)))); + fSETWORD(1,RddV,fUNFLOAT(fFLOAT(fGETUWORD(1,RssV)) - + fFLOAT(fGETUWORD(1,RttV)))); +}) + +Q6INSN(F7_vsfmpy,"Rdd32=3Dvsfmpy(Rss32,Rtt32)",ATTRIBS(), + "Vector Floating-Point Multiply", +{ + fSETWORD(0,RddV,fUNFLOAT(fSFMPY(fFLOAT(fGETUWORD(0,RssV)), + fFLOAT(fGETUWORD(0,RttV))))); + fSETWORD(1,RddV,fUNFLOAT(fSFMPY(fFLOAT(fGETUWORD(1,RssV)), + fFLOAT(fGETUWORD(1,RttV))))); +}) + +Q6INSN(F7_vsffma,"Rxx32+=3Dvsfmpy(Rss32,Rtt32)",ATTRIBS(), + "Vector Floating-Point Fused Multiply Add", +{ + fSETWORD(0,RxxV,fUNFLOAT(fFMAF(fFLOAT(fGETUWORD(0,RssV)), + fFLOAT(fGETUWORD(0,RttV)), + fFLOAT(fGETUWORD(0,RxxV))))); + fSETWORD(1,RxxV,fUNFLOAT(fFMAF(fFLOAT(fGETUWORD(1,RssV)), + fFLOAT(fGETUWORD(1,RttV)), + fFLOAT(fGETUWORD(1,RxxV))))); +}) + +Q6INSN(F7_vsffms,"Rxx32-=3Dvsfmpy(Rss32,Rtt32)",ATTRIBS(), + "Vector Floating-Point Fused Multiply Subtract", +{ + fSETWORD(0,RxxV,fUNFLOAT(fFMAF(-fFLOAT(fGETUWORD(0,RssV)), + fFLOAT(fGETUWORD(0,RttV)), + fFLOAT(fGETUWORD(0,RxxV))))); + fSETWORD(1,RxxV,fUNFLOAT(fFMAF(-fFLOAT(fGETUWORD(1,RssV)), + fFLOAT(fGETUWORD(1,RttV)), + fFLOAT(fGETUWORD(1,RxxV))))); +}) + Q6INSN(F2_sffma_lib,"Rx32+=3Dsfmpy(Rs32,Rt32):lib",ATTRIBS(), "Floating-Point Fused Multiply Add for Library Routines", { fFPSETROUND_NEAREST(); fHIDE(int infinp; int infminusinf; size4s_t tmp;) --=20 2.34.1 From nobody Fri Oct 23 22:16:18 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=1792693999; cv=none; d=zohomail.com; s=zohoarc; b=gKQvqx+CFP1YxB9lSBKMZW6as6xIzGcdH1qiNjYxRWwqnpaTlrStG6IXYs+AS4qR5ldArAE/ju5jg8lpwQKJFqCXIu5YfsuNZbZ5nHrHwgBF/xShOV+X38s6hLtDT7wHPzpfpujpXobdEP6Kleag738d3axIG1V92hqiNqnuEY0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792693999; h=Content-Type: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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ugNNrb4FTZOJqR966IWM0Svc0UDrSfX4GzmPr+m8gPk=; b=n4RhCay+4vBAadxbYQzYUhjsPLMDvDszY9Y2CMwFAScbG+YqaINgwgTM2+RMe/sD5IVTl8geD/PaDJPLGiSYs7x37glSC8Smo6SnEv8F7174QfZowM3Gs5udSWM6AEZjNo4e8YT2wV4zajsjXjc2o2SDLAFtDzw4kDf6tUgkzJI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792693999569162.22077571002944; Thu, 22 Oct 2026 11:33:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xJxat-0006GL-Vg; Thu, 22 Oct 2026 14:32:53 -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 1xJxaa-0006ES-8G for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:34 -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 1xJxaN-0002ge-0w for qemu-devel@nongnu.org; Thu, 22 Oct 2026 14:32:26 -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 69MHtVpn387692 for ; Thu, 22 Oct 2026 18:32:16 GMT Received: from mail-dy1-f199.google.com (mail-dy1-f199.google.com [74.125.82.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hfewq42us-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 22 Oct 2026 18:32:16 +0000 (GMT) Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-351788121cfso395005eec.0 for ; Thu, 22 Oct 2026 11:32:16 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-369d8f8eaf9sm44962eec.16.2026.10.22.11.32.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2026 11:32:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= ugNNrb4FTZOJqR966IWM0Svc0UDrSfX4GzmPr+m8gPk=; b=G8ZqaAoDCtPzxbxq 4EB85QEU/tsS2MGSrYtfHxDnpPXbbx+Ij3v7hpwMqBbRZOxv9Piw9q5BMqrN8fQw 7jF+3AD27945rd+k/1GvOIrbwFXIZW7AjVj77vk/eO5IhywDuOs4uZPC+VjYCjS1 T6jaoSxAKXAGKoowEPiZNJOvGZeWTHsTzVGIXK9okM91GKjWyJDH0+DTmb406MPt xkPojDT++RIxPfLuqVjyQifkNwEhzcwWqPEkkajFr3iEOmBhtNL+lCHMO9LNfWRb eEzxZvsDuWrdFGBTA5ZpEdyrObEEVpGifwlPvBkzE3u4tZBC1VH3mHuN73og3JJh E5Lv0A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1792693935; x=1793298735; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=ugNNrb4FTZOJqR966IWM0Svc0UDrSfX4GzmPr+m8gPk=; b=HhB6dEwxF4XkBXvNHOwv/1xyD5kbQtQAYWpQYaxo43Wzmu3D/i8+hudDmQbZTsFO1R ZVQe+256JOI0Ju4aVPawCbCTZMwwp0V/Yo09/BGbv1bCrvs71LhSUPADP55v6tSc4Tjl 9LsmJ19Z8zCkRQWJz3v8iHEDPfrbQouul/gE31mooqOK5C947+Pmk58jcbfe3d2UZskq nTRqEelYZ8mbgQp0nC+oOu+B+JzmPfLTSoouNmRnyE+y6EeJseoL6LWuq2Y4OH6HJA3a 4Dt+T9yC9rP9NS6ZXFMjy13ktqeDCyrvzOcewBghouka6hUAWKNt3ArBCuKt3b5gpC2C 0pQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792693935; x=1793298735; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ugNNrb4FTZOJqR966IWM0Svc0UDrSfX4GzmPr+m8gPk=; b=OMmkNfVXU53/vY7LyhEbsLSpy3tbCSngX1usG228RDOU/WFKbNwFvkbQN4qAk6dDeO rd2r7gUFknhb0ZKkV3zql1oh6CfisdV1xdV8Pxwc3IdQ6+30OtOhcTZ25MsY78OJ0kF1 tg7in0EsoUUmyb/zmYHTgE8xUKtqkPCGzRlX509JkvbiJrVZrKUeWLWnZmowuxx9i0cM hyZIKVvKygsnxEA2/NzRweJ/63SihYg3qcuxsZ7/38ZCNORmls6D1OGgkl0Wcoq7PhX2 TTCC1KS9SgKSj+oAOmGgM4a0HN6RI3YqXK+AJon7v9PtOKzfSlY3RQZRt+ptKVX+ngti RJOA== X-Gm-Message-State: AFq9FYJBjhTfTEL0UD/SPPVIv6PizloSO3d0fy2PHdlU4R0kYLbHeZK4 rZPiYX8bgHj3cANH+sL6sm4ns/+uu1tzFRYHgcA0TEBGRufHoFOIhtvg+kZKJ/p+9bfK76EnaiR CUEHQq+X3e/IllGfvh2CwqiJR3MEpWZCtoPXjR/49pkmf18PN9uyJwOnf8pmbJiwh9w== X-Gm-Gg: AYBFou1lNvrSJbnuSMBKiAqqWJFDInK7bj2EN2joGTrBKXP3RZSBgBfmI1gHwTV+nrq XdDIE1FWJvxRFqr0xuPZ3BpxFEi36aPywR44xAeMNVxXc6lIyNNDF81SIwLcuW9jobtRKDmhdUK tJzuOUaG/vjwgcicxdNm7dkXjbkJQ0YuXO7UjBjqO8NTL83ErXQFskmF6jc58+VEnN+ioaFpfha pt597cY5q3g5lOl2X5rFQKkESGGncSOVD8kyRbmfx+weH0urDgy3c8mPlTihIT4LlEbDWizniqp ye+h+ldMmssGXGC6yigRzCPeNJGm50OewrVmLAVh5d9zp1xQYrYGKmiug9doA3DSqQ5jXefQ7m3 BX+x/cK0pbpLvAAU3hmMv/so9uewYzByqItY9lR6F9wtZ2B8G X-Received: by 2002:a05:693c:8945:10b0:351:2958:1740 with SMTP id 5a478bee46e88-3674f1150camr7411761eec.37.1792693935065; Thu, 22 Oct 2026 11:32:15 -0700 (PDT) X-Received: by 2002:a05:693c:8945:10b0:351:2958:1740 with SMTP id 5a478bee46e88-3674f1150camr7411707eec.37.1792693934130; Thu, 22 Oct 2026 11:32:14 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: Brian Cain , Anton Johansson , Pierrick Bouvier , Helge Deller , Mohamed Mediouni , Alessandro Di Federico , Laurent Vivier , Marco Liebel Subject: [PATCH v4 11/11] tests/tcg/hexagon: add v85 scalar tests Date: Thu, 22 Oct 2026 11:31:47 -0700 Message-Id: <20261022183147.1535585-12-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> References: <20261022183147.1535585-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: jDj2By-WABVmVgYzECih45mzW4A86dEz X-Proofpoint-ORIG-GUID: jDj2By-WABVmVgYzECih45mzW4A86dEz X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfXzx842T2I7MlA fj8BF8Jw4AkbB2/Sfk2thUHM519DSx14YofdYZ+W1EEtfiw2wuKVNlx9SdWwVKd04ClAF7JiVQ7 Ya2lki1m/iDOMGh5Nb1RcQk+L61vgqU= X-Authority-Analysis: v=2.4 cv=G4OJgNk5 c=1 sm=1 tr=0 ts=6ada56b0 cx=c_pps a=cFYjgdjTJScbgFmBucgdfQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=IYYXI5WbSMvNeLMDhSYA:9 a=QEXdDO2ut3YA:10 a=scEy_gLbYbu1JhEsrz4S:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIyMDA3MyBTYWx0ZWRfX8KwchzQzhVYf CcftA/6hOqEDFkdZ7r6BqkoMB5XqJqTe4WXzKYc++B2sDu5QplSeSNaB/xh+K95MnYcT1rsJoV6 cQ4VVxx5sHw1G+ZJS/fHplpl+QQg4605Y8qIyq1m2hnPDP/9TOf0Z1YKfRVCkHm7y6xWjW/XGll Iz7+SmtoK4Ro3W3erbbiVmmc0venGh/a0xRVHitCaZJ4zrl+6+mBMdNJvnDvaVyd85JN4gg76zK 6aXI6ZNbduWrFrpDUpvHeYnuS7MEdOsEgl6Ds38+i60MhYY5pEILtxanPd+QSIUDPvhLN9B1x9u GbyPvkQv9/RgdFr0E8OAUej/+BcEs+k1NfMvi3qCjF5A8OsGFBeUKAK+n9wmYjPWA4f+5lPkYb8 XCWkbisXB1jonCf6K63QhnPDV0eqb9q2aRSj2tzDcgl6EjfulGP/t5YPyM7QdgtA/UCamDnTBzS 96JCpYFLPkPmsFEW/gw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.138,FMLib:17.12.100.49 definitions=2026-10-22_06,2026-10-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 adultscore=0 malwarescore=0 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610220073 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=brian.cain@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, 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: 1792694001222158500 Add tests for: vallocframe, atomics, trap2, CFI/restricted branches, and scalar fp instructions. New instructions not yet supported by the toolchain are manually encoded with .word directives. Reviewed-by: Pierrick Bouvier Signed-off-by: Brian Cain Reviewed-by: Marco Liebel --- tests/tcg/hexagon/cfi_tgts.h | 18 +++ tests/tcg/hexagon/atomics.c | 111 +++++++++++++++++ tests/tcg/hexagon/cfi_tlb.c | 99 +++++++++++++++ tests/tcg/hexagon/cfi_user.c | 73 +++++++++++ tests/tcg/hexagon/check_rev_gating.c | 10 ++ tests/tcg/hexagon/invalid-encoding.c | 20 +++ tests/tcg/hexagon/trap2.c | 34 +++++ tests/tcg/hexagon/v83_scalar_fp.c | 98 +++++++++++++++ tests/tcg/hexagon/vallocframe.c | 130 +++++++++++++++++++ tests/tcg/hexagon/cfi_tgts.S | 178 +++++++++++++++++++++++++++ tests/tcg/hexagon/meson.build | 24 +++- 11 files changed, 793 insertions(+), 2 deletions(-) create mode 100644 tests/tcg/hexagon/cfi_tgts.h create mode 100644 tests/tcg/hexagon/cfi_tlb.c create mode 100644 tests/tcg/hexagon/cfi_user.c create mode 100644 tests/tcg/hexagon/trap2.c create mode 100644 tests/tcg/hexagon/v83_scalar_fp.c create mode 100644 tests/tcg/hexagon/vallocframe.c create mode 100644 tests/tcg/hexagon/cfi_tgts.S diff --git a/tests/tcg/hexagon/cfi_tgts.h b/tests/tcg/hexagon/cfi_tgts.h new file mode 100644 index 00000000000..c1edc95d94a --- /dev/null +++ b/tests/tcg/hexagon/cfi_tgts.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef CFI_TGTS_H +#define CFI_TGTS_H + +#define CFI_TEST_CASES 13 + +void run_test_case(int valid, int test_case); +void run_callr_rb_lr_test(int valid); +void run_jumpr_rb_lr_test(void); +void run_jumpr_rb_nop_rb_test(void); +void run_trap0_target_test(void); +void run_allocframe_test(void); + +#endif diff --git a/tests/tcg/hexagon/atomics.c b/tests/tcg/hexagon/atomics.c index 5017ca003f1..c912170cd50 100644 --- a/tests/tcg/hexagon/atomics.c +++ b/tests/tcg/hexagon/atomics.c @@ -109,6 +109,43 @@ static inline int64_t atomic_dec64(int64_t *x) return old; } =20 +static uint32_t v85_atomic_inc(uint32_t *counter) +{ + uint32_t old_val; + + asm volatile("r0 =3D %0\n" + "r1 =3D %1\n" + "r2 =3D #1\n" + ".word 0x9001e220\n" /* r0 =3D atomw_add(r1,r2):aq */ + "%0 =3D r0\n" + : "=3Dr"(old_val) + : "r"(counter) + : "r0", "r1", "r2"); + return old_val; +} + +static uint64_t v85_atomic_swap64(uint64_t *addr, uint64_t val) +{ + asm volatile("r1:0 =3D %0\n" + "r2 =3D %1\n" + ".word 0x90c2e0a0\n" /* r1:0 =3D atomd_swap(r2,r1:0):aq */ + "%0 =3D r1:0\n" + : "+r"(val) + : "r"(addr) + : "r0", "r1", "r2"); + return val; +} + +static void v85_dcfetch_multi(const void *addr) +{ + asm volatile("r0 =3D %0\n" + "r1 =3D #0\n" + ".word 0x9400c840\n" /* dcfetch_multi(r0,r1) */ + : + : "r"(addr) + : "r0", "r1", "memory"); +} + #define LOOP_CNT 1000 volatile int32_t tick32 =3D 1; /* Using volatile because we are testing at= omics */ volatile int64_t tick64 =3D 1; /* Using volatile because we are testing at= omics */ @@ -159,10 +196,84 @@ void test_pthread(void) check64(tick64, 1); } =20 +static void test_v85_swap64(void) +{ +#define INITIAL_V1 0xffffffffffffffff +#define INITIAL_V2 0x1111111111111111 + + uint64_t v1 =3D INITIAL_V1; + uint64_t v2 =3D INITIAL_V2; + + v2 =3D v85_atomic_swap64(&v1, v2); + check64(v1, INITIAL_V2); + check64(v2, INITIAL_V1); + + v2 =3D v85_atomic_swap64(&v1, v2); + check64(v1, INITIAL_V1); + check64(v2, INITIAL_V2); + +#undef INITIAL_V1 +#undef INITIAL_V2 +} + +#define V85_ROUNDS 1000 +#define V85_THREADS 10 +static uint32_t v85_global_counter =3D 1; +static uint32_t v85_started_threads; + +static void *v85_counter_thread(void *arg) +{ + uint32_t previous; + + v85_atomic_inc(&v85_started_threads); + while (v85_started_threads !=3D V85_THREADS) { + asm volatile("pause(#0)"); + } + previous =3D 0; + for (int i =3D 0; i < V85_ROUNDS; i++) { + uint32_t current =3D v85_atomic_inc(&v85_global_counter); + + if (current <=3D previous) { + printf("ERROR: counter is not strictly growing. " + "Before: %" PRIu32 ", Now: %" PRIu32 "\n", + previous, current); + err =3D 1; + return arg; + } + previous =3D current; + } + return arg; +} + +static void test_v85_race(void) +{ + pthread_t tids[V85_THREADS]; + + for (int i =3D 0; i < V85_THREADS; i++) { + pthread_create(&tids[i], NULL, v85_counter_thread, NULL); + } + for (int i =3D 0; i < V85_THREADS; i++) { + pthread_join(tids[i], NULL); + } + check32(v85_global_counter, 1 + V85_THREADS * V85_ROUNDS); +} + +static void test_v85_inc32(void) +{ + uint32_t counter =3D UINT32_MAX; + + check32(v85_atomic_inc(&counter), UINT32_MAX); + check32(counter, 0); +} + int main(int argc, char **argv) { test_reservations(); test_pthread(); + v85_dcfetch_multi(&v85_global_counter); + test_v85_swap64(); + test_v85_race(); + test_v85_inc32(); puts(err ? "FAIL" : "PASS"); return err; } diff --git a/tests/tcg/hexagon/cfi_tlb.c b/tests/tcg/hexagon/cfi_tlb.c new file mode 100644 index 00000000000..1deb59756ce --- /dev/null +++ b/tests/tcg/hexagon/cfi_tlb.c @@ -0,0 +1,99 @@ +/* + * Test a restricted branch interrupted by a data TLB miss. + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include + +static sigjmp_buf cfi_jmp; +static volatile sig_atomic_t sigsegv_count; +static volatile sig_atomic_t sigill_count; +static void *target; + +static void *landing_pad(int valid_target) +{ + void *pad; + + asm volatile( + "p0 =3D cmp.eq(%[valid_target], #1)\n\t" + "if (p0) %[pad] =3D ##valid_cfi_tlb_target\n\t" + "if (!p0) %[pad] =3D ##invalid_cfi_tlb_target\n\t" + : [pad] "=3Dr"(pad) : [valid_target] "r"(valid_target) : "p0"); + return pad; +} + +static __attribute__((noinline)) void run_cfi_tlb_test(int valid_target) +{ + asm volatile( + "p0 =3D cmp.eq(%[valid_target], #1)\n\t" + "if (p0) r0 =3D ##valid_cfi_tlb_target\n\t" + "if (!p0) r0 =3D ##invalid_cfi_tlb_target\n\t" + "r1 =3D #0\n\t" + "r2 =3D #0\n\t" + ".word 0x52004000\n\t" /* { jumpr_rb r0 */ + ".word 0xa181c200\n\t" /* memw(r1 + #0) =3D r2 } */ + "valid_cfi_tlb_target:\n\t" + ".word 0x7f80c000\n\t" /* nop_rb */ + "jump 1f\n\t" + "invalid_cfi_tlb_target:\n\t" + "nop\n\t" + "1:\n\t" + : : [valid_target] "r"(valid_target) + : "r0", "r1", "r2", "p0", "memory"); +} + +static void handle_sigsegv(int sig, siginfo_t *info, void *context) +{ + ucontext_t *uc =3D context; + + assert(sig =3D=3D SIGSEGV); + sigsegv_count++; + uc->uc_mcontext.pc =3D (unsigned long)target; +} + +static void handle_sigill(int sig, siginfo_t *info, void *context) +{ + assert(sig =3D=3D SIGILL); + sigill_count++; + siglongjmp(cfi_jmp, 1); +} + +int main(void) +{ + struct sigaction action; + + action.sa_sigaction =3D handle_sigsegv; + sigemptyset(&action.sa_mask); + action.sa_flags =3D SA_SIGINFO; + assert(sigaction(SIGSEGV, &action, NULL) =3D=3D 0); + + action.sa_sigaction =3D handle_sigill; + sigemptyset(&action.sa_mask); + action.sa_flags =3D SA_SIGINFO; + assert(sigaction(SIGILL, &action, NULL) =3D=3D 0); + + target =3D landing_pad(1); + run_cfi_tlb_test(1); + assert(sigsegv_count =3D=3D 1); + assert(sigill_count =3D=3D 0); + + target =3D landing_pad(0); + if (sigsetjmp(cfi_jmp, 1) =3D=3D 0) { + run_cfi_tlb_test(0); + abort(); + } + assert(sigsegv_count =3D=3D 2); + assert(sigill_count =3D=3D 1); + + puts("PASS"); + return EXIT_SUCCESS; +} diff --git a/tests/tcg/hexagon/cfi_user.c b/tests/tcg/hexagon/cfi_user.c new file mode 100644 index 00000000000..deac763b5a0 --- /dev/null +++ b/tests/tcg/hexagon/cfi_user.c @@ -0,0 +1,73 @@ +/* + * Test v83 restricted indirect control-flow forms and restricted targets. + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include +#include + +#include "cfi_tgts.h" + +static sigjmp_buf cfi_jmp; +static volatile sig_atomic_t cfi_signal; + +static void handle_sigill(int sig, siginfo_t *info, void *context) +{ + assert(sig =3D=3D SIGILL); + cfi_signal =3D sig; + siglongjmp(cfi_jmp, 1); +} + +int main(void) +{ + struct sigaction action; + int i; + + action.sa_sigaction =3D handle_sigill; + sigemptyset(&action.sa_mask); + action.sa_flags =3D SA_SIGINFO; + assert(sigaction(SIGILL, &action, NULL) =3D=3D 0); + + for (i =3D 0; i < CFI_TEST_CASES; i++) { + run_test_case(1, i); + } + + for (i =3D 0; i < CFI_TEST_CASES; i++) { + cfi_signal =3D 0; + if (sigsetjmp(cfi_jmp, 1) =3D=3D 0) { + run_test_case(0, i); + abort(); + } + assert(cfi_signal =3D=3D SIGILL); + } + + run_jumpr_rb_lr_test(); + + cfi_signal =3D 0; + if (sigsetjmp(cfi_jmp, 1) =3D=3D 0) { + run_jumpr_rb_nop_rb_test(); + abort(); + } + assert(cfi_signal =3D=3D SIGILL); + + run_trap0_target_test(); + + run_callr_rb_lr_test(1); + + cfi_signal =3D 0; + if (sigsetjmp(cfi_jmp, 1) =3D=3D 0) { + run_callr_rb_lr_test(0); + abort(); + } + assert(cfi_signal =3D=3D SIGILL); + + run_allocframe_test(); + + puts("PASS"); + return EXIT_SUCCESS; +} diff --git a/tests/tcg/hexagon/check_rev_gating.c b/tests/tcg/hexagon/check= _rev_gating.c index ad22a93bdaf..3a5ed9c71ca 100644 --- a/tests/tcg/hexagon/check_rev_gating.c +++ b/tests/tcg/hexagon/check_rev_gating.c @@ -122,6 +122,13 @@ TRY_FUNC(v79_dczeroa_nt, TRY_FUNC(v79_dcfetchbo_nt, ".word 0x9402e000 /* dcfetch(r2+#0):nt */\n") =20 +TRY_FUNC(v83_callr_rb, + ".word 0x5020c000 /* callr_rb r0 */\n") +TRY_FUNC(v83_nop_rb, + ".word 0x7f80c000 /* nop_rb */\n") +TRY_FUNC(v83_vsfadd, + ".word 0xeb02c440 /* r1:0 =3D vsfadd(r3:2, r5:4) */\n") + TRY_FUNC(v79hvx_vmerge_qf, ".word 0x1f01e0e2 /* v2 =3D vmerge(v0.x, v1.w) */\n") =20 @@ -165,6 +172,9 @@ int main(void) assert(try_v79_pstorerif_pi_nt() =3D=3D SIGILL); assert(try_v79_dczeroa_nt() =3D=3D SIGILL); assert(try_v79_dcfetchbo_nt() =3D=3D SIGILL); + assert(try_v83_callr_rb() =3D=3D SIGILL); + assert(try_v83_nop_rb() =3D=3D SIGILL); + assert(try_v83_vsfadd() =3D=3D SIGILL); =20 assert(try_v79hvx_vmerge_qf() =3D=3D SIGILL); =20 diff --git a/tests/tcg/hexagon/invalid-encoding.c b/tests/tcg/hexagon/inval= id-encoding.c index 639d7f24959..4c85342c772 100644 --- a/tests/tcg/hexagon/invalid-encoding.c +++ b/tests/tcg/hexagon/invalid-encoding.c @@ -89,6 +89,25 @@ static int test_invalid_nonduplex(void) return sig; } =20 +/* L4_loadw_phys bit 7 was reserved beginning with v83. */ +static int test_v83_loadw_phys_reserved_bit(void) +{ + int sig; + + asm volatile( + "r0 =3D #0\n" + "r1 =3D ##1f\n" + "memw(%1) =3D r1\n" + ".word 0x9200e080\n" /* r0 =3D memw_phys(r0, r0), bit 7 =3D 1 */ + "1:\n" + "%0 =3D r0\n" + : "=3Dr"(sig) + : "r"(&resume_pc) + : "r0", "r1", "memory"); + + return sig; +} + int main() { struct sigaction act; @@ -100,6 +119,7 @@ int main() =20 assert(test_invalid_duplex() =3D=3D SIGILL); assert(test_invalid_nonduplex() =3D=3D SIGILL); + assert(test_v83_loadw_phys_reserved_bit() =3D=3D SIGILL); =20 puts("PASS"); return EXIT_SUCCESS; diff --git a/tests/tcg/hexagon/trap2.c b/tests/tcg/hexagon/trap2.c new file mode 100644 index 00000000000..8180d23ed04 --- /dev/null +++ b/tests/tcg/hexagon/trap2.c @@ -0,0 +1,34 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include + +uint32_t err; + +#include "hex_test.h" + +static int trap2_getpid(void) +{ + int pid; + + asm volatile("r6 =3D #172\n" /* __NR_getpid */ + ".word 0x54c0c004\n" /* trap2(#1) */ + "%0 =3D r0\n" + : "=3Dr"(pid) + : + : "r0", "r6"); + return pid; +} + +int main(void) +{ + if (trap2_getpid() <=3D 0) { + err++; + } + puts(err ? "FAIL" : "PASS"); + return err; +} diff --git a/tests/tcg/hexagon/v83_scalar_fp.c b/tests/tcg/hexagon/v83_scal= ar_fp.c new file mode 100644 index 00000000000..722491c1f62 --- /dev/null +++ b/tests/tcg/hexagon/v83_scalar_fp.c @@ -0,0 +1,98 @@ +/* + * Test the v83 scalar two-lane floating-point instructions. + * + * The assembler does not yet know these instructions, so use their encodi= ngs. + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include + +uint32_t err; + +#include "hex_test.h" + +static uint64_t vsfadd(uint64_t a, uint64_t b) +{ + uint64_t result; + + asm volatile("r3:2 =3D %1\n" + "r5:4 =3D %2\n" + ".word 0xeb02c440\n" /* r1:0 =3D vsfadd(r3:2, r5:4) */ + "%0 =3D r1:0\n" + : "=3Dr"(result) : "r"(a), "r"(b) : "r0", "r1", "r2", + "r3", "r4", "r5"); + return result; +} + +static uint64_t vsfsub(uint64_t a, uint64_t b) +{ + uint64_t result; + + asm volatile("r3:2 =3D %1\n" + "r5:4 =3D %2\n" + ".word 0xeb02c460\n" /* r1:0 =3D vsfsub(r3:2, r5:4) */ + "%0 =3D r1:0\n" + : "=3Dr"(result) : "r"(a), "r"(b) : "r0", "r1", "r2", + "r3", "r4", "r5"); + return result; +} + +static uint64_t vsfmpy(uint64_t a, uint64_t b) +{ + uint64_t result; + + asm volatile("r3:2 =3D %1\n" + "r5:4 =3D %2\n" + ".word 0xeb42c420\n" /* r1:0 =3D vsfmpy(r3:2, r5:4) */ + "%0 =3D r1:0\n" + : "=3Dr"(result) : "r"(a), "r"(b) : "r0", "r1", "r2", + "r3", "r4", "r5"); + return result; +} + +static uint64_t vsffma(uint64_t a, uint64_t b, uint64_t acc) +{ + uint64_t result; + + asm volatile("r1:0 =3D %3\n" + "r3:2 =3D %1\n" + "r5:4 =3D %2\n" + ".word 0xeb42c440\n" /* r1:0 +=3D vsfmpy(r3:2, r5:4) */ + "%0 =3D r1:0\n" + : "=3Dr"(result) : "r"(a), "r"(b), "r"(acc) : "r0", "r1", + "r2", "r3", "r4", "r5"); + return result; +} + +static uint64_t vsffms(uint64_t a, uint64_t b, uint64_t acc) +{ + uint64_t result; + + asm volatile("r1:0 =3D %3\n" + "r3:2 =3D %1\n" + "r5:4 =3D %2\n" + ".word 0xeb42c460\n" /* r1:0 -=3D vsfmpy(r3:2, r5:4) */ + "%0 =3D r1:0\n" + : "=3Dr"(result) : "r"(a), "r"(b), "r"(acc) : "r0", "r1", + "r2", "r3", "r4", "r5"); + return result; +} + +int main(void) +{ + uint64_t a =3D 0x400000003fc00000ULL; + uint64_t b =3D 0x4080000040000000ULL; + uint64_t acc =3D 0x40a000003f800000ULL; + + check64(vsfadd(a, b), 0x40c0000040600000ULL); + check64(vsfsub(a, b), 0xc0000000bf000000ULL); + check64(vsfmpy(a, b), 0x4100000040400000ULL); + check64(vsffma(a, b, acc), 0x4150000040800000ULL); + check64(vsffms(a, b, acc), 0xc0400000c0000000ULL); + + puts(err ? "FAIL" : "PASS"); + return err; +} diff --git a/tests/tcg/hexagon/vallocframe.c b/tests/tcg/hexagon/vallocfram= e.c new file mode 100644 index 00000000000..1edf54782bd --- /dev/null +++ b/tests/tcg/hexagon/vallocframe.c @@ -0,0 +1,130 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include + +uint32_t err; + +#include "hex_test.h" + +#define VSP_INITIAL_OFFSET (5 * 1024) +#define VALLOCFRAME_VALUE 2 +#define VSP_AFTER_VALLOCFRAME \ + (VSP_INITIAL_OFFSET - (VALLOCFRAME_VALUE * 2 * 1024)) + +#define VALLOCFRAME_IMM ".word 0x6080c802\n" /* vallocframe(#2) */ +#define VALLOCFRAME_REG ".word 0x6080d000\n" /* vallocframe(r0) */ +#define VDEALLOCFRAME_IMM ".word 0x6a80c802\n" /* vdeallocframe(#2) */ +#define VDEALLOCFRAME_REG ".word 0x6940d000\n" /* vdeallocframe(r0) */ + +static uint32_t read_vsp(void) +{ + uint32_t value; + + asm volatile(".word 0x6a1dc000\n" /* r0 =3D vsp */ + "%0 =3D r0\n" + : "=3Dr"(value) + : + : "r0"); + return value; +} + +static void write_vsp(uint32_t value) +{ + asm volatile("r0 =3D %0\n" + ".word 0x6220c01d\n" /* vsp =3D r0 */ + : + : "r"(value) + : "r0"); +} + +static void write_vframelimit(uint32_t value) +{ + asm volatile("r0 =3D %0\n" + ".word 0x6220c01c\n" /* vframelimit =3D r0 */ + : + : "r"(value) + : "r0"); +} + +static uint32_t __attribute__((noinline)) keep(uint32_t a, uint32_t b) +{ + write_vsp(b); + return a * 3; +} + +static sigjmp_buf overflow_jmp; +static int overflow_sig; +static int overflow_code; + +static void overflow_handler(int sig, siginfo_t *info, void *context) +{ + overflow_sig =3D sig; + overflow_code =3D info->si_code; + siglongjmp(overflow_jmp, 1); +} + +static void test_vallocframe_imm(void) +{ + write_vsp(VSP_INITIAL_OFFSET); + write_vframelimit(0); + asm volatile(VALLOCFRAME_IMM); + check32(VSP_AFTER_VALLOCFRAME, read_vsp()); + asm volatile(VDEALLOCFRAME_IMM); + check32(VSP_INITIAL_OFFSET, read_vsp()); +} + +static void test_vallocframe_reg(void) +{ + uint32_t value =3D VALLOCFRAME_VALUE; + + write_vsp(VSP_INITIAL_OFFSET); + write_vframelimit(0); + asm volatile("r0 =3D %0\n" VALLOCFRAME_REG : : "r"(value) : "r0"); + check32(VSP_AFTER_VALLOCFRAME, read_vsp()); + asm volatile("r0 =3D %0\n" VDEALLOCFRAME_REG : : "r"(value) : "r0"); + check32(VSP_INITIAL_OFFSET, read_vsp()); +} + +static void test_write_vsp_clobber(void) +{ + /* Prevent constant folding so a remains live across write_vsp(). */ + static volatile uint32_t x =3D 111, y =3D 222; + + check32(keep(x, y), 333); +} + +static void test_vallocframe_overflow(void) +{ + struct sigaction action =3D { + .sa_sigaction =3D overflow_handler, + .sa_flags =3D SA_SIGINFO, + }; + + sigemptyset(&action.sa_mask); + sigaction(SIGSEGV, &action, NULL); + if (sigsetjmp(overflow_jmp, 1) =3D=3D 0) { + write_vsp(VSP_INITIAL_OFFSET); + write_vframelimit(VSP_AFTER_VALLOCFRAME + 1); + asm volatile(VALLOCFRAME_IMM); + check32(1, 0); + } + check32(SIGSEGV, overflow_sig); + check32(SEGV_BNDERR, overflow_code); +} + +int main(void) +{ + test_write_vsp_clobber(); + test_vallocframe_imm(); + test_vallocframe_reg(); + test_vallocframe_overflow(); + puts(err ? "FAIL" : "PASS"); + return err; +} diff --git a/tests/tcg/hexagon/cfi_tgts.S b/tests/tcg/hexagon/cfi_tgts.S new file mode 100644 index 00000000000..21ede45f3b2 --- /dev/null +++ b/tests/tcg/hexagon/cfi_tgts.S @@ -0,0 +1,178 @@ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + + .text +valid_tgt: + .word 0x7f80c000 /* nop_rb */ + jumpr r2 + +invalid_tgt: + nop + jumpr r2 + +valid_call_tgt: + .word 0x7f80c000 /* nop_rb */ + jumpr r31 + +invalid_call_tgt: + nop + jumpr r31 + +.macro set_pred reg, id + r4 =3D \id + r3 =3D xor(\reg, r4) + p0 =3D !cmp.eq(r3, #0) +.endm + +.macro set_pred_in_packet reg, id + r4 =3D \id + r3 =3D xor(\reg, r4) + .word 0x75034010 /* { p0 =3D !cmp.eq(r3, #0) */ +.endm + +/* + * r0: nonzero for a valid target, zero for an invalid target + * r1: test case number + */ +.global run_test_case +run_test_case: + r5 =3D r31 + p1 =3D cmp.eq(r0, #1) + if (p1) r0 =3D #valid_tgt + if (!p1) r0 =3D #invalid_tgt + r2 =3D #return + + set_pred r1, #0 + .word 0x53e0c000 /* if (!p0) jumpr_rb:nt r0 */ + + set_pred r1, #1 + .word 0x53e0d000 /* if (!p0) jumpr_rb:t r0 */ + + set_pred_in_packet r1, #2 + .word 0x53e0c800 /* if (!p0.new) jumpr_rb:nt r0 } */ + + set_pred_in_packet r1, #3 + .word 0x53e0d800 /* if (!p0.new) jumpr_rb:t r0 } */ + + p0 =3D cmp.eq(r1, #4) + .word 0x53c0c000 /* if (p0) jumpr_rb:nt r0 */ + + p0 =3D cmp.eq(r1, #5) + .word 0x53c0d000 /* if (p0) jumpr_rb:t r0 */ + + .word 0x750140c0 /* { p0 =3D cmp.eq(r1, #6) */ + .word 0x53c0c800 /* if (p0.new) jumpr_rb:nt r0 } */ + + .word 0x750140e0 /* { p0 =3D cmp.eq(r1, #7) */ + .word 0x53c0d800 /* if (p0.new) jumpr_rb:t r0 } */ + + p0 =3D cmp.eq(r1, #9) + if (p0) jump callr_case + p0 =3D cmp.eq(r1, #10) + if (p0) jump callrh_case + p0 =3D cmp.eq(r1, #11) + if (p0) jump callrt_case + p0 =3D cmp.eq(r1, #12) + if (p0) jump callrf_case + + .word 0x5200c000 /* jumpr_rb r0 */ + +callr_case: + if (p1) r0 =3D #valid_call_tgt + if (!p1) r0 =3D #invalid_call_tgt + .word 0x5020c000 /* callr_rb r0 */ + jump return + +callrh_case: + if (p1) r0 =3D #valid_call_tgt + if (!p1) r0 =3D #invalid_call_tgt + .word 0x5040c000 /* callrh_rb r0 */ + jump return + +callrt_case: + if (p1) r0 =3D #valid_call_tgt + if (!p1) r0 =3D #invalid_call_tgt + p0 =3D cmp.eq(r0, r0) + .word 0x5180c000 /* if (p0) callr_rb r0 */ + jump return + +callrf_case: + if (p1) r0 =3D #valid_call_tgt + if (!p1) r0 =3D #invalid_call_tgt + p0 =3D cmp.eq(r0, #0) + .word 0x51a0c000 /* if (!p0) callr_rb r0 */ + jump return + +return: + jumpr r5 + +/* jumpr_rb r31 is a return, not a restricted branch. */ +.global run_jumpr_rb_lr_test +run_jumpr_rb_lr_test: + .word 0x521fc000 /* jumpr_rb r31 */ + +/* A target marker and restricted branch in the same packet. */ +.global run_jumpr_rb_nop_rb_test +run_jumpr_rb_nop_rb_test: + r0 =3D #1f + .word 0x7f804000 /* { nop_rb */ + .word 0x5200c000 /* jumpr_rb r0 } */ +1: + nop + +/* A trap0(#0xdb) landing pad: the syscall must not leave CFI armed. */ +.global run_trap0_target_test +run_trap0_target_test: + r5 =3D r31 + r6 =3D #172 /* __NR_getpid */ + r0 =3D #1f + .word 0x5200c000 /* jumpr_rb r0 */ +1: + trap0(#0xdb) + nop + jumpr r5 + +/* + * callr_rb r31 remains restricted: it must branch to a landing pad even + * though it overwrites r31 with its return address. + */ +.global run_callr_rb_lr_test +run_callr_rb_lr_test: + r2 =3D r31 + p0 =3D cmp.eq(r0, #1) + if (p0) r31 =3D #valid_callr_rb_lr_tgt + if (!p0) r31 =3D #invalid_callr_rb_lr_tgt + .word 0x503fc000 /* callr_rb r31 */ + jumpr r2 + +valid_callr_rb_lr_tgt: + .word 0x7f80c000 /* nop_rb */ + jumpr r31 + +invalid_callr_rb_lr_tgt: + nop + jumpr r31 + +/* + * Enter each restricted allocframe instruction with CFI active. The + * following ordinary instructions show that the restricted target reset i= t. + */ +.global run_allocframe_test +run_allocframe_test: + r0 =3D #allocframe_rb_reg + r2 =3D #allocframe_rb_duplex + .word 0x5200c000 /* jumpr_rb r0 */ + +allocframe_rb_reg: + .word 0xa09de000 /* allocframe_rb(r29, #0):raw */ + deallocframe + nop + jumpr r2 + +allocframe_rb_duplex: + .word 0x70003e00 /* r0 =3D r0; allocframe_rb(#0) */ + deallocframe + nop + jumpr r31 diff --git a/tests/tcg/hexagon/meson.build b/tests/tcg/hexagon/meson.build index a6ace4c77c2..d5fc803debb 100644 --- a/tests/tcg/hexagon/meson.build +++ b/tests/tcg/hexagon/meson.build @@ -25,8 +25,20 @@ foreach t: tcg_tests['multiarch-linux-user']['tests'] endforeach =20 tests +=3D { - 'atomics.c': {'cflags': cflags}, + # The cross assembler does not know v85; v85 instructions in atomics.c + # are encoded with .word directives. + 'atomics.c': {'cflags': cflags, 'qemu_args': ['-cpu', 'v85']}, 'brev.c': {'cflags': cflags}, + # The cross assembler does not know v83; cfi_tlb.c uses raw encodings. + 'cfi_tlb.c': { + 'cflags': cflags, + 'qemu_args': ['-cpu', 'v85'], + }, + # The cross assembler does not know v83; cfi_tgts.S uses raw encodings. + 'cfi_user.c': { + 'cflags': [cflags, files('cfi_tgts.S')], + 'qemu_args': ['-cpu', 'v85'], + }, # Compile for v66 so that the ELF selects a v66 CPU; the test then # exercises revision gating by executing a v68 .word instruction. 'check_rev_gating.c': { @@ -57,7 +69,7 @@ tests +=3D { 'cflags': [cflags, '-mhvx', '-Wno-gnu-folding-constant', files('hvx_histogram_row.S')] }, - 'invalid-encoding.c': {'cflags': cflags}, + 'invalid-encoding.c': {'cflags': cflags, 'qemu_args': ['-cpu', 'v85']}, 'invalid-slots.c': {'cflags': cflags}, 'icinva.c': {'cflags': cflags}, 'load_align.c': {'cflags': cflags}, @@ -106,6 +118,8 @@ tests +=3D { 'test_vpmpyh.S': {'cflags': asmflags}, 'test_vspliceb.S': {'cflags': asmflags}, 'test_vwhist.c': {'cflags': [cflags, '-mhvx']}, + # The cross assembler does not know trap2; the test uses its raw encodin= g. + 'trap2.c': {'cflags': cflags, 'qemu_args': ['-cpu', 'v85']}, 'unaligned_pc.c': {'cflags': cflags}, 'unaligned_data.c': {'cflags': cflags}, 'usr.c': { @@ -117,6 +131,12 @@ tests +=3D { 'v69_hvx.c': {'cflags': [cflags, '-mhvx', '-Wno-unused-function', '-mv69= ']}, 'v73_scalar.c': {'cflags': [cflags, '-Wno-unused-function', '-mv73']}, 'v79_scalar.c': {'cflags': [cflags, '-Wno-unused-function', '-mv79']}, + 'v83_scalar_fp.c': {'cflags': [cflags, '-mv67'], + 'qemu_args': ['-cpu', 'v85']}, + # The cross assembler does not know v83; the vallocframe instructions in + # this test are encoded with .word directives. + 'vallocframe.c': {'cflags': [cflags, '-mv67', '-O2'], + 'qemu_args': ['-cpu', 'v85']}, 'valid-slots.c': {'cflags': cflags}, 'vector_add_int.c': {'cflags': [cflags, '-mhvx', '-fvectorize']}, } --=20 2.34.1