From nobody Sun Jul 26 14:10:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1781156294; cv=none; d=zohomail.com; s=zohoarc; b=K+i6limb04g54aCtvoE9+8wcHd1wyssSZD1d/p3v/yDzxTisTfeslqgqPCAua/i7TC20NvO1XeCyMtHf+5ga4He8sRC+VhDubc2WFuDyTWEjKmoiQbZhLe/G9QZ0UrzvYPgIXX23b0AUIdc7HrZrh5dqrfzAnUesnkjySjcYgiA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781156294; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=93NO5nTkqSLKhLHTshorCnrOXtq4w0A1wRQSw+4IeFU=; b=QNiEC3FQoSsL4VfpJIdx4XqmIF0v7jE2DEjltQiznMxjOOwpI52o4Dy+VvaI3pL5z7c31vknNOsn7gbI3vVk92kB9nYgaU9ugj6BN8xRVXPYta+ueiOGcHWkOIEzSmYXn/7zGF0nDYLMNZDs3Kyh9qF2GO20ecOKSEHsR4ZK+9o= 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 178115629448036.970814208118895; Wed, 10 Jun 2026 22:38:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXXz7-0007lb-Ge; Thu, 11 Jun 2026 01:29:45 -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 1wXXz6-0007ku-38 for qemu-devel@nongnu.org; Thu, 11 Jun 2026 01:29:44 -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 1wXXz4-0000qR-0c for qemu-devel@nongnu.org; Thu, 11 Jun 2026 01:29:43 -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 65B5GOQW3835120 for ; Thu, 11 Jun 2026 05:29:30 GMT Received: from mail-dy1-f197.google.com (mail-dy1-f197.google.com [74.125.82.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eqe6ths6g-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 11 Jun 2026 05:29:30 +0000 (GMT) Received: by mail-dy1-f197.google.com with SMTP id 5a478bee46e88-307fd7138b1so984969eec.0 for ; Wed, 10 Jun 2026 22:29:30 -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-30806e8a402sm880475eec.17.2026.06.10.22.29.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 22:29:28 -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= 93NO5nTkqSLKhLHTshorCnrOXtq4w0A1wRQSw+4IeFU=; b=R6zFhYoEja8T7/Sl GUZuqndhamZqvROIigeEO5Ta721FdNf43pH30xiNTW1RpWJ0Dg8ZUrYXGm3G/4n3 A6zCeBTJLsKZyrR9aNItuZnw1FVIufC9dGBAXY16IoQEbtIpkLqrWK5VANOp1Ud1 jY4WQDHgOfbp23UtYvRshN83uwAWOhMCF8IKMtyUcG1ecBmp/xHL0tLQLI7PM43b m6bqx8HFYB8GfmFrlZkRaajZHKmNUX8zh8Myilo9+t3zzcJcvqtNpAFSAYt0LyzX T1QbioHUOQBhcUA5qa3WjWYp5hU1eaNpG8SqsIqEFwOq5RzOxmWimxROYI5UYyHQ FIQV+Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1781155770; x=1781760570; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=93NO5nTkqSLKhLHTshorCnrOXtq4w0A1wRQSw+4IeFU=; b=U/28gjodOdNca2XoGstUf1JsCN3bV4OON2VvTlTYmOfMXJCM5qDvNzPkx2qgfrQffX 0gTfa1cwJuEu5b2zpLkbziYqOw78qe/FbF2wNiaLhtUQr7e8R/I2TjjRFPYnGYf1fCvn FMxY8NlGI7qyMMTqgJIUivmr1Qt/QsNQj3R0uhUcfIdLBau7NuidnuG/6QUAzaZFzq+z nRMrt1r2vIWcArhEs2ee5ZdcN09G6fseYc0lxJbp6xJIarNLSRIdvX7vu6LcbkhSgFiR hxkEiQ2mBdftiCHMzMQV5NF4IK1eAizMZVINhhzDBZQsjMp090w1gOyKUMQW4AC0Pwn3 XXiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781155770; x=1781760570; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=93NO5nTkqSLKhLHTshorCnrOXtq4w0A1wRQSw+4IeFU=; b=Hh0RPlh/MRkPccDnCKKJ5scgvBs8MASN7ZGP02Cp0EzXfjBFLjJEVEeIgIOKCM7aVl WCIy7EnRjV/YWbELl1E9+RnE50Y2LcyMDdIvWGdYVkL/9z5jK6rOeI9YB+xBq2Dawqp7 Lu3rRcqbPH8jlzsU2pDlrBZQbkPS/H5i4tSR+Te4eMsS6SEwULzLYkkgJZfh5WToMf9E hTDlbGb89dBo+h0x+mx/y3OsnZSlO3V/S9Vz3RZfwqg+t4unHsRfHQnaLe3fGaGOZsMP llttN3fsGdN/ABslDCC2cwoaf7vU4bq/QD8p5cR3c8P9/wbDrh8InX8nDerg+gdvWG9D E+wQ== X-Gm-Message-State: AOJu0Yyo1mCevFXwiyFVYBepl5PSoiHNoTG1gIKFFl3UxOaUA9vGc/55 HVmz+Qzahi+Oo+rSL0npr9Fzve4E2VN7WJF/N6PsGBbaATPLXynnsDwC36wjMrrVaNMI3EX3t/B NxxuJF0VEhz1zL2AK4I5OyW+pCXaSU/XD/GD2lHhgD65JWaS1MZlbAlqRsBjb88Wovw== X-Gm-Gg: Acq92OEzv/YF2nUNSd5yznlYAq+66FRiFCX9dpY4vwLGWRkac4fPjFXOEnMjZ0qEjVE ZJAnZ/G+hcVnowVuSYYVrs3hlZbYBBwR5x9/UcOT2iu5ONDghwsbIzfenC3ExAQYPGdwBVmV0+U l2j6Kw6P5FFK9/ZKdG4Epb1w8eIi+tphZkm13Fc29cQ50WeZ8LZiUC3YeDbBTb+c3AmnaAT/wnS YYcmHKyhLunrEiz1AUoddruY+GrG6KjVRwrIwSJBFBkExxavzqzIYJAFWZTSRc5RUrnZ5caHpuK GartztGl5UHbMLIa8jHi42DDtJaXwxJ1Xr+2b0f1XmnaDnA5uWL2HTD1HopHQvC0QwC4WxPlMaK APamM0tYsFL/+47TiiHgkPLGONHH6kJ1/wnahFNAZHHE5OrKNxfeL7X1VLsdu5plIeVKDd4+Y55 Vf+kVV X-Received: by 2002:a05:7300:3204:b0:2ea:e93a:ff9b with SMTP id 5a478bee46e88-3080463b951mr1124947eec.13.1781155769887; Wed, 10 Jun 2026 22:29:29 -0700 (PDT) X-Received: by 2002:a05:7300:3204:b0:2ea:e93a:ff9b with SMTP id 5a478bee46e88-3080463b951mr1124930eec.13.1781155769352; Wed, 10 Jun 2026 22:29:29 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: brian.cain@oss.qualcomm.com, matheus.bernardino@oss.qualcomm.com, pierrick.bouvier@oss.qualcomm.com, ltaylorsimpson@gmail.com, philmd@mailo.org, philmd@oss.qualcomm.com, Brian Cain Subject: [PATCH v8] target/hexagon: Add handlers for guest/sysreg r/w Date: Wed, 10 Jun 2026 22:28:37 -0700 Message-Id: <20260611052857.3911981-17-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260611052857.3911981-1-brian.cain@oss.qualcomm.com> References: <20260611052857.3911981-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: AW1haW4tMjYwNjExMDA1MSBTYWx0ZWRfXxefBDpDCsISx z31qq9pawNsn9bWERwci9oyuGx6uTAnQ1dW7VoXwdFieJsdHmjugJ30P2seCd9V11C0qBQhmb4A uWp9CS/T0uKqKgAxBarwWJVBJuPmj5tpnopQaE7O1Jsv+aRBqq2N4FDxSOwbIMAlgHNMus071dB wjbkm5xoHSfS03MKdCg34FgmdMj8gqpBHUYkf6aCoB2LzM+gUzZqTLMky5+ZTinT3TkdTualciV IbuDxAEqAdCIgksO0npwwpeoxlPmb0f6PWnAU3lRIAqxJM4mVIBr8CD3OsLR+MMhwPEr0c4cAkR qCBf07AJMGrXeN5XzsTsMbxB4FlpIIcvXSnwRtAObHtnhhxr/bhUYKJNV+XoN4DTNNrObd7LkrY BDX2CJca80PXJOh5IXA+WH3xWW3etTXTPopNko4Hv6rMfTXi2BzPe+CD3UimDYkOAcseCABi2A/ Wf/J6DAY/TglXiuHeUw== X-Proofpoint-Spam-Info: AW1haW4tMjYwNjExMDA1MSBTYWx0ZWRfX5JrI4nqFvACr 9oww32d5F5N5kwCX7vl8r1F78zPA6MS/t6wIYSdW1xy9VXzmWHR361pnQnuXzM9dEnXpBj9SPkW N0UXjl4oEX8rasFFm6+/ps/Jb0LuoWE= X-Authority-Analysis: v=2.4 cv=AaiB2XXG c=1 sm=1 tr=0 ts=6a2a47ba cx=c_pps a=Uww141gWH0fZj/3QKPojxA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=FelO9ux0wxsA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=COk6AnOGAAAA:8 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=YS0KV4ZxTOLzYV__0jkA:9 a=QEXdDO2ut3YA:10 a=PxkB5W3o20Ba91AHUih5:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-ORIG-GUID: bcV7jyKSBUD-uhze3XuLahFrvEb0Mf1S X-Proofpoint-GUID: bcV7jyKSBUD-uhze3XuLahFrvEb0Mf1S X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-06-11_01,2026-06-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 impostorscore=0 priorityscore=1501 bulkscore=0 clxscore=1015 adultscore=0 suspectscore=0 lowpriorityscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606040000 definitions=main-2606110051 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, RCVD_IN_MSPIKE_H2=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1781156294939158500 From: Brian Cain This commit provides handlers to generate TCG for guest and system register reads and writes. They will be leveraged by a future commit. Reviewed-by: Taylor Simpson Signed-off-by: Brian Cain --- target/hexagon/genptr.c | 151 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/target/hexagon/genptr.c b/target/hexagon/genptr.c index 5d5adace4b3..8f191f80619 100644 --- a/target/hexagon/genptr.c +++ b/target/hexagon/genptr.c @@ -23,6 +23,7 @@ #include "exec/helper-gen.h" #include "insn.h" #include "opcodes.h" +#include "sys_macros.h" #include "translate.h" #define QEMU_GENERATE /* Used internally by macros.h */ #include "macros.h" @@ -120,6 +121,156 @@ TCGv get_result_pred(DisasContext *ctx, int pnum) } } =20 +#ifndef CONFIG_USER_ONLY +G_GNUC_UNUSED +static bool greg_writable(int rnum, bool pair) +{ + if (pair) { + if (rnum < HEX_GREG_G3) { + return true; + } + qemu_log_mask(LOG_UNIMP, + "Warning: ignoring write to guest register pair G%d:%d\n", + rnum + 1, rnum); + } else { + if (rnum <=3D HEX_GREG_G3) { + return true; + } + qemu_log_mask(LOG_UNIMP, + "Warning: ignoring write to guest register G%d\n", rnum); + } + return false; +} + +G_GNUC_UNUSED +static void check_greg_impl(int rnum, bool pair) +{ + if (pair && (!greg_implemented(rnum) || !greg_implemented(rnum + 1))) { + qemu_log_mask(LOG_UNIMP, + "Warning: guest register pair G%d:%d is unimplemented or " + "reserved. Read will yield 0.\n", + rnum + 1, rnum); + } else if (!pair && !greg_implemented(rnum)) { + qemu_log_mask(LOG_UNIMP, + "Warning: guest register G%d is unimplemented or reserved." + " Read will yield 0.\n", rnum); + } +} + +G_GNUC_UNUSED +static inline void gen_log_greg_write(DisasContext *ctx, int rnum, TCGv_i3= 2 val) +{ + tcg_gen_mov_i32(ctx->greg_new_value[rnum], val); +} + +G_GNUC_UNUSED +static void gen_log_greg_write_pair(DisasContext *ctx, int rnum, TCGv_i64 = val) +{ + TCGv_i32 val32 =3D tcg_temp_new_i32(); + + /* Low word */ + tcg_gen_extrl_i64_i32(val32, val); + gen_log_greg_write(ctx, rnum, val32); + + /* High word */ + tcg_gen_extrh_i64_i32(val32, val); + gen_log_greg_write(ctx, rnum + 1, val32); +} + +static const uint32_t sreg_immut_masks[NUM_SREGS] =3D { + [HEX_SREG_STID] =3D 0xff00ff00, + [HEX_SREG_ELR] =3D 0x00000003, + [HEX_SREG_SSR] =3D 0x00008000, + [HEX_SREG_CCR] =3D 0x10e0ff24, + [HEX_SREG_HTID] =3D IMMUTABLE, + [HEX_SREG_IMASK] =3D 0xffff0000, + [HEX_SREG_GEVB] =3D 0x000000ff, +}; + +G_GNUC_UNUSED +static void gen_log_sreg_write(DisasContext *ctx, int rnum, TCGv_i32 val) +{ + const uint32_t reg_mask =3D sreg_immut_masks[rnum]; + + if (reg_mask !=3D IMMUTABLE) { + if (rnum < HEX_SREG_GLB_START) { + gen_masked_reg_write(val, hex_t_sreg[rnum], reg_mask); + if (ctx->need_commit || rnum =3D=3D HEX_SREG_SSR) { + tcg_gen_mov_i32(ctx->t_sreg_new_value[rnum], val); + } else { + tcg_gen_mov_i32(hex_t_sreg[rnum], val); + } + } else { + gen_helper_sreg_write_masked(tcg_env, tcg_constant_i32(rnum), = val); + } + } +} + +G_GNUC_UNUSED +static void gen_log_sreg_write_pair(DisasContext *ctx, int rnum, TCGv_i64 = val) +{ + TCGv_i32 val32 =3D tcg_temp_new_i32(); + + /* Low word */ + tcg_gen_extrl_i64_i32(val32, val); + gen_log_sreg_write(ctx, rnum, val32); + + /* High word */ + tcg_gen_extrh_i64_i32(val32, val); + gen_log_sreg_write(ctx, rnum + 1, val32); +} + +G_GNUC_UNUSED +static void gen_read_sreg(TCGv_i32 dst, int reg_num) +{ + if (reg_num >=3D HEX_SREG_GLB_START || reg_num =3D=3D HEX_SREG_BADVA) { + gen_helper_sreg_read(dst, tcg_env, tcg_constant_i32(reg_num)); + } else { + tcg_gen_mov_i32(dst, hex_t_sreg[reg_num]); + } +} + +G_GNUC_UNUSED +static void gen_read_sreg_pair(TCGv_i64 dst, int reg_num) +{ + if (reg_num < HEX_SREG_GLB_START) { + if (reg_num + 1 =3D=3D HEX_SREG_BADVA) { + TCGv_i32 badva =3D tcg_temp_new_i32(); + gen_helper_sreg_read(badva, tcg_env, + tcg_constant_i32(HEX_SREG_BADVA)); + tcg_gen_concat_i32_i64(dst, hex_t_sreg[reg_num], badva); + } else { + tcg_gen_concat_i32_i64(dst, hex_t_sreg[reg_num], + hex_t_sreg[reg_num + 1]); + } + } else { + gen_helper_sreg_read_pair(dst, tcg_env, tcg_constant_i32(reg_num)); + } +} + +G_GNUC_UNUSED +static void gen_read_greg(TCGv_i32 dst, int reg_num) +{ + if (reg_num <=3D HEX_GREG_G3) { + tcg_gen_mov_i32(dst, hex_greg[reg_num]); + } else { + gen_helper_greg_read(dst, tcg_env, tcg_constant_i32(reg_num)); + } +} + +G_GNUC_UNUSED +static void gen_read_greg_pair(TCGv_i64 dst, int reg_num) +{ + if (reg_num =3D=3D HEX_GREG_G0 || reg_num =3D=3D HEX_GREG_G2) { + tcg_gen_concat_i32_i64(dst, hex_greg[reg_num], + hex_greg[reg_num + 1]); + } else { + gen_helper_greg_read_pair(dst, tcg_env, tcg_constant_i32(reg_num)); + } +} +#endif + + void gen_pred_write(DisasContext *ctx, int pnum, TCGv val) { TCGv pred =3D get_result_pred(ctx, pnum); --=20 2.34.1