From nobody Mon Sep 28 00:51:54 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=1787181068; cv=none; d=zohomail.com; s=zohoarc; b=PrJU0xup5ueEws3GSNQ9kkyY1Yv1suejD46vI9xjwrNGzIKP7NvbmH9Of5oT+KDH+XNKe/bAxW/Lk2KGZ8POEvoeoxnIBg3M9WABZ/nEp4xid/TXaLi45Y4KhGb9otG/X7Ggz9WTAHMMn7h/klf8mccuei+VyJE59XxIaT/WFzw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787181068; 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=mcc965iljy71R3qS40B+xAULSJDa6xr2p2EC+iSIeIM=; b=cjkiWpPRR50i35oxibIRJ6gMMjpvXM4MmCeXDoN43mUQrNDtvC2TSzCuFiAqSp4l0+LLtq050Q0JUH91OPK3sFP03UYReUlFZFn4rCpvOgJPQDvdJWdOsMPQET5mZ5ws8QDLCSBev+M1or6+8P7Y3SwruVRpfauzYP1B3wiz/V8= 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 1787181068854560.5522453535624; Wed, 19 Aug 2026 16:11:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwpPy-0007y5-FE; Wed, 19 Aug 2026 19:09:58 -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 1wwpPt-0007x8-AT for qemu-devel@nongnu.org; Wed, 19 Aug 2026 19:09:54 -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 1wwpPq-0000WE-4S for qemu-devel@nongnu.org; Wed, 19 Aug 2026 19:09:52 -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 67JL7hng1987330 for ; Wed, 19 Aug 2026 23:09:48 GMT Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g5esj2087-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 19 Aug 2026 23:09:47 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38e6d253330so450371a91.1 for ; Wed, 19 Aug 2026 16:09:47 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1416ae143edsm18988944c88.10.2026.08.19.16.09.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 16:09:42 -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= mcc965iljy71R3qS40B+xAULSJDa6xr2p2EC+iSIeIM=; b=AhTOdX00e8ECxBRY yrTneHbDniZ3IGwP2aG80DFgLWqvTmhAveVL1K91b2O8vYs/d2er6Ipdej5E5K9s jpOqwOF2pguLkWzXzT+NarlNvTSvCRc1uTcORde6tbHhEdeIhJeeWzvnllh5YboO gZ/h7W7kxOj0tsI9TVHZUHprNBbkVoXoJwwQxgrSlbfrZzDxUggVwJPGDpOvKHIC cG5motut89gIp+ftILv0jqxb0DfXmTntZKuqD+Q5mzjxIRC5khxUPQ7MkBq70lYV QiN7J/I66z9sESZCRSRl54qQCza4jCRi5u9oyXchjoI7DcIVD83oXFvkryfH/UqK HUJUBg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787180987; x=1787785787; 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=mcc965iljy71R3qS40B+xAULSJDa6xr2p2EC+iSIeIM=; b=XvLF55dIhATAUHJi1oENVJL9qbiFQVkXlDrXN2x4bZupfUVl/NbzhcwIoH/hZv50/d RnB8LkUddPz3tn+VmW7PEBTDG/CTUmx9I4Wn8qPwcJt2t08U4InI/JWdT3BzJ2JObTUZ E1q0v/Kul2YaJfxjXMw9BPxt9Xi6J4IUSrTThzJIJM4eWzMWLLkKw1CBSPLA8dMAGAkG SYsTVr0AZ/CaCuolAnE02Y5LeRWAZ12wtm53aWwEfQKP2jmbkwDWPaerrje0K3e1oEGb JM1ylH7r4GvSNUIRqsry5Tt8xjWAMu6BxdkcR+tVl8dFQ1JRAbbZl6ngmZ5wUxjvBPi7 o0+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787180987; x=1787785787; 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=mcc965iljy71R3qS40B+xAULSJDa6xr2p2EC+iSIeIM=; b=TnsbhhvhpqbjVZlCu7KB5d15iso4VfhELRJKSv2jp5m1fCqgkImQKjB5SO+02on7+c fAf+jEobJ2juHHoOVXQX+Gw0uXgXKQUILQy+sEI3CiUKPql/ICtB0W41tZ4S5Gx2PXGr GKjfULUdtsxKmuRFJiQ3d3rBBwBmvwikUM3zz8bH+ZhwFLUTURYhlEFBIdCIDsne7sG0 JXZcMWWWVAia8AGO+pJoT3u96Ti7wXf0aCYG6W02KX3TxgPLXvGl+LyvG4uiNAhp3nUU Tept7mYnI0pWLRIKUB9ueGXhTkGeTzgIbsybthJuQm/kESzj4d3t9xJjFJdQAIg3WQD3 Hn8w== X-Gm-Message-State: AFuF++l4SkBJ2dl3BCoD0ZQvc/T9Dw5HYhMjUCqb9R9QX0N0L42HsHZT duzbSjyM/8chJGrPRGA4EtNT+hevMVKu1VU1t+Z+LKuXEtJQBZ0xrXUtSkog5OBDxgJ+G7gZ6Vg D8hkTvgOG2veluReRNDhCfpnW9WVMhexYfaNUDv7baNdq9o/lQmBv8cueyeSyx6gRSA== X-Gm-Gg: AR+sD12lbafszt3+g2JGEbu2hp1dhTpY44fAiDQK5QRtf6RQc09ToBzrINDuwRg0leY uP6wsErDi7WwRlmeVD5HkH778y2nYqF/UqSVXP6SRo0eehPhdq6OikdDGuxkSTCoi5CO7M1wKBo XYdU1Y08do/8hwkN8pLYjwcghxagwS+l94Nmg1OgN3r6VPDi92xq1reBQIIL6AGSmrWV9EnklNx ZOSzd2Y/UEbIsRU9xmhET6KnlRePFUEN+QWI3YtJcOFR0UDI5psxFtWigD2qGmWiE2E0EskBzTo IJhdmoEN/swRpA6j4Sstz7n9aFWJvA+g5vDz0D9w3zsgTSbyK+7UAlYRC/oTkwG6Mi1v5eQhK1a AgAVkhqp6LFX+Hm+jzAg+zLyMynFnBv4ZB0EuRoeJ3AeewDuA X-Received: by 2002:a17:90b:38c8:b0:37f:e5b1:ec4b with SMTP id 98e67ed59e1d1-395a04b80eamr2910512a91.5.1787180986834; Wed, 19 Aug 2026 16:09:46 -0700 (PDT) X-Received: by 2002:a17:90b:38c8:b0:37f:e5b1:ec4b with SMTP id 98e67ed59e1d1-395a04b80eamr2910450a91.5.1787180986286; Wed, 19 Aug 2026 16:09:46 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: matheus.bernardino@oss.qualcomm.com, Pierrick Bouvier , Brian Cain , Anton Johansson Subject: [PATCH 1/3] target/hexagon: fix HVX big-endian byte access Date: Wed, 19 Aug 2026 16:09:37 -0700 Message-Id: <20260819230939.466856-2-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260819230939.466856-1-brian.cain@oss.qualcomm.com> References: <20260819230939.466856-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: p6k7QaRA_Htf1uIglLDJeVAwOk90NUD0 X-Authority-Analysis: v=2.4 cv=EaL4hvmC c=1 sm=1 tr=0 ts=6a8637bb cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=McwceA_1xBa0zvON-48A:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE5MDE3NyBTYWx0ZWRfX1Y/yWXzXKNMh OWCaNwQaIl9xd0UmeDsUA/ER705iAmM9noVjB5JzfjA0w2qS48A1Pgz+YfG/U5aTU7GBb8koz9i u2yBA2jW8bFvb6Wj9qHKpnP9q6P9qlaSptBxHvxw6m19FVCVrialbkCjQUN3agd4U8xmeNLeWTj U1g6cLtbOV4VX2h2SgbPBgfQOJhtnAl5iKsvHySUZfKFCxnUiHR+L7L2AK4zrXcDTN2SCyoC/En B9Le8is9HPBdKg5cp7SMeau867K4mzyzr6o5QDH0gMmOIhw28OEa6vYbrkCQfHvbWxRiGauv+OG XqDP7wsAJm9B1NdTpynRRYRWfqWEnzs7zd06WXiSDbKzUA0WZpiusLuYPihkDrBXb5TXXjLUdWj OibeJaxcCynEIgj3UtEpBndenMPeGYOgoK1k2e/sgO7AfxSqVwegjA4ojB9CTZZhgAuQK43PAm8 BN1dYpmJnf92nF+dPkg== X-Proofpoint-Spam-Info: AW1haW4tMjYwODE5MDE3NyBTYWx0ZWRfX+dRBH/S9PtiQ G+rlFM8nmpwLAJiPu9W1H0fS2j4f1LuS6FlS6NJCprAg1hJ2uVOwRbR6mGXqj9JdNBDamF9c+5f 1aYYk4V3Zu1WzXNfY0e8ZX+JSkBspH4= X-Proofpoint-ORIG-GUID: p6k7QaRA_Htf1uIglLDJeVAwOk90NUD0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-19_06,2026-08-19_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 malwarescore=0 adultscore=0 suspectscore=0 spamscore=0 phishscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608190177 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: 1787181070405158500 Keep HVX lanes host-native while converting byte indexes at memory and helper boundaries. Also place vector comparison predicate bytes according to host word order. Suggested-by: Anton Johansson Signed-off-by: Brian Cain Reviewed-by: Anton Johansson --- target/hexagon/mmvec/macros.h | 22 ++++++++++++++-------- target/hexagon/mmvec/mmvec.h | 18 ++++++++++++++++++ target/hexagon/cpu.c | 17 ++++++++++------- target/hexagon/genptr.c | 3 ++- target/hexagon/mmvec/system_ext_mmvec.c | 2 +- target/hexagon/op_helper.c | 17 ++++++++++++----- 6 files changed, 57 insertions(+), 22 deletions(-) diff --git a/target/hexagon/mmvec/macros.h b/target/hexagon/mmvec/macros.h index b36f833b1de..0ed35720eea 100644 --- a/target/hexagon/mmvec/macros.h +++ b/target/hexagon/mmvec/macros.h @@ -53,7 +53,7 @@ =20 #define LOG_VTCM_BYTE(VA, MASK, VAL, IDX) \ do { \ - env->vtcm_log.data.ub[IDX] =3D (VAL); \ + mmvec_set_byte(&env->vtcm_log.data, IDX, VAL); \ if (MASK) { \ set_bit((IDX), env->vtcm_log.mask); \ } else { \ @@ -133,7 +133,8 @@ target_ulong va_high =3D EA + LEN; \ for (int i0 =3D 0; i0 < 4; i0++) { \ log_byte =3D (va + i0) <=3D va_high; \ - LOG_VTCM_BYTE(va + i0, log_byte, INC. ub[4 * IDX + i0], \ + LOG_VTCM_BYTE(va + i0, log_byte, \ + hexagon_mmvec_get_byte(&(INC), 4 * IDX + i0), \ 4 * IDX + i0); \ } \ } while (0) @@ -144,7 +145,8 @@ target_ulong va_high =3D EA + LEN; \ for (int i0 =3D 0; i0 < 2; i0++) { \ log_byte =3D (va + i0) <=3D va_high; \ - LOG_VTCM_BYTE(va + i0, log_byte, INC.ub[2 * IDX + i0], \ + LOG_VTCM_BYTE(va + i0, log_byte, \ + hexagon_mmvec_get_byte(&(INC), 2 * IDX + i0), \ 2 * IDX + i0); \ } \ } while (0) @@ -157,7 +159,8 @@ target_ulong va_high =3D EA + LEN; \ for (int i0 =3D 0; i0 < 2; i0++) { \ log_byte =3D (va + i0) <=3D va_high; \ - LOG_VTCM_BYTE(va + i0, log_byte, INC.ub[2 * IDX + i0], \ + LOG_VTCM_BYTE(va + i0, log_byte, \ + hexagon_mmvec_get_byte(&(INC), 2 * IDX + i0), \ 2 * IDX + i0); \ } \ } while (0) @@ -174,7 +177,7 @@ log_byte =3D ((va + i0) <=3D va_high) && QVAL; \ uint8_t B; \ B =3D cpu_ldub_data_ra(env, EA + i0, ra); \ - env->tmp_VRegs[0].ub[ELEMENT_SIZE * IDX + i0] =3D B; \ + mmvec_set_byte(&env->tmp_VRegs[0], ELEMENT_SIZE * IDX + i0, B)= ; \ LOG_VTCM_BYTE(va + i0, log_byte, B, ELEMENT_SIZE * IDX + i0); \ } \ } while (0) @@ -216,9 +219,10 @@ uint8_t val; \ val =3D cpu_ldub_data_ra(env, env->vtcm_log.va[i + j],= ra); \ dst |=3D val << (8 * j); \ - inc |=3D env->vtcm_log.data.ub[j + i] << (8 * j); \ + inc |=3D hexagon_mmvec_get_byte(&env->vtcm_log.data, j= + i) \ + << (8 * j); \ clear_bit(j + i, env->vtcm_log.mask); \ - env->vtcm_log.data.ub[j + i] =3D 0; \ + mmvec_set_byte(&env->vtcm_log.data, j + i, 0); \ } \ dst +=3D inc; \ for (int j =3D 0; j < sizeof(TYPE); j++) { \ @@ -249,7 +253,9 @@ int log_byte =3D 0; \ for (i0 =3D 0; i0 < ELEM_SIZE; i0++) { \ log_byte =3D ((va + i0) <=3D va_high) && QVAL; \ - LOG_VTCM_BYTE(va + i0, log_byte, IN.ub[ELEM_SIZE * IDX + i0], \ + LOG_VTCM_BYTE(va + i0, log_byte, \ + hexagon_mmvec_get_byte(&(IN), \ + ELEM_SIZE * IDX + i0),= \ ELEM_SIZE * IDX + i0); \ } \ } while (0) diff --git a/target/hexagon/mmvec/mmvec.h b/target/hexagon/mmvec/mmvec.h index 8e72f2f6ae7..a8a777812b9 100644 --- a/target/hexagon/mmvec/mmvec.h +++ b/target/hexagon/mmvec/mmvec.h @@ -20,6 +20,7 @@ =20 #include "exec/target_long.h" #include "qemu/bitmap.h" +#include "qemu/bitops.h" =20 #define MAX_VEC_SIZE_LOGBYTES 7 #define MAX_VEC_SIZE_BYTES (1 << MAX_VEC_SIZE_LOGBYTES) @@ -69,6 +70,23 @@ typedef union { int8_t b[MAX_VEC_SIZE_BYTES / 1 / 8]; } MMQReg; =20 +/* Map architectural byte indexes over host-native HVX lanes. */ +static inline uint8_t hexagon_mmvec_get_byte(const MMVector *v, size_t ind= ex) +{ + return extract64(v->ud[index / 8], (index % 8) * 8, 8); +} + +static inline void mmvec_set_byte(MMVector *v, size_t index, uint8_t value) +{ + v->ud[index / 8] =3D deposit64(v->ud[index / 8], (index % 8) * 8, 8, + value); +} + +static inline uint8_t mmqreg_get_byte(const MMQReg *q, size_t index) +{ + return extract64(q->ud[index / 8], (index % 8) * 8, 8); +} + typedef struct { MMVector data; DECLARE_BITMAP(mask, MAX_VEC_SIZE_BYTES); diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index 7067e5b70f7..8d83700db24 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -182,7 +182,7 @@ static void print_vreg(FILE *f, CPUHexagonState *env, i= nt regnum, if (skip_if_zero) { bool nonzero_found =3D false; for (int i =3D 0; i < MAX_VEC_SIZE_BYTES; i++) { - if (env->VRegs[regnum].ub[i] !=3D 0) { + if (hexagon_mmvec_get_byte(&env->VRegs[regnum], i) !=3D 0) { nonzero_found =3D true; break; } @@ -193,9 +193,12 @@ static void print_vreg(FILE *f, CPUHexagonState *env, = int regnum, } =20 qemu_fprintf(f, " v%d =3D ( ", regnum); - qemu_fprintf(f, "0x%02x", env->VRegs[regnum].ub[MAX_VEC_SIZE_BYTES - 1= ]); + qemu_fprintf(f, "0x%02x", + hexagon_mmvec_get_byte(&env->VRegs[regnum], + MAX_VEC_SIZE_BYTES - 1)); for (int i =3D MAX_VEC_SIZE_BYTES - 2; i >=3D 0; i--) { - qemu_fprintf(f, ", 0x%02x", env->VRegs[regnum].ub[i]); + qemu_fprintf(f, ", 0x%02x", + hexagon_mmvec_get_byte(&env->VRegs[regnum], i)); } qemu_fprintf(f, " )\n"); } @@ -211,7 +214,7 @@ static void print_qreg(FILE *f, CPUHexagonState *env, i= nt regnum, if (skip_if_zero) { bool nonzero_found =3D false; for (int i =3D 0; i < MAX_VEC_SIZE_BYTES / 8; i++) { - if (env->QRegs[regnum].ub[i] !=3D 0) { + if (mmqreg_get_byte(&env->QRegs[regnum], i) !=3D 0) { nonzero_found =3D true; break; } @@ -222,10 +225,10 @@ static void print_qreg(FILE *f, CPUHexagonState *env,= int regnum, } =20 qemu_fprintf(f, " q%d =3D ( ", regnum); - qemu_fprintf(f, "0x%02x", - env->QRegs[regnum].ub[MAX_VEC_SIZE_BYTES / 8 - 1]); + qemu_fprintf(f, "0x%02x", mmqreg_get_byte(&env->QRegs[regnum], + MAX_VEC_SIZE_BYTES / 8 - 1)); for (int i =3D MAX_VEC_SIZE_BYTES / 8 - 2; i >=3D 0; i--) { - qemu_fprintf(f, ", 0x%02x", env->QRegs[regnum].ub[i]); + qemu_fprintf(f, ", 0x%02x", mmqreg_get_byte(&env->QRegs[regnum], i= )); } qemu_fprintf(f, " )\n"); } diff --git a/target/hexagon/genptr.c b/target/hexagon/genptr.c index 2a98b13b714..5de8fe43f0b 100644 --- a/target/hexagon/genptr.c +++ b/target/hexagon/genptr.c @@ -1528,7 +1528,8 @@ static void vec_to_qvec(size_t size, intptr_t dstoff,= intptr_t srcoff) tcg_gen_deposit_i64(mask, mask, bits, j, size); } =20 - tcg_gen_st8_i64(mask, tcg_env, dstoff + i); + tcg_gen_st8_i64(mask, tcg_env, + dstoff + (i ^ (HOST_BIG_ENDIAN ? 3 : 0))); } } =20 diff --git a/target/hexagon/mmvec/system_ext_mmvec.c b/target/hexagon/mmvec= /system_ext_mmvec.c index 8351f2cc01b..081cadd814a 100644 --- a/target/hexagon/mmvec/system_ext_mmvec.c +++ b/target/hexagon/mmvec/system_ext_mmvec.c @@ -26,7 +26,7 @@ void mem_gather_store(CPUHexagonState *env, target_ulong = vaddr, int slot) env->vstore_pending[slot] =3D 1; env->vstore[slot].va =3D vaddr; env->vstore[slot].size =3D size; - memcpy(&env->vstore[slot].data.ub[0], &env->tmp_VRegs[0], size); + memcpy(&env->vstore[slot].data, &env->tmp_VRegs[0], size); =20 /* On a gather store, overwrite the store mask to emulate dropped gath= ers */ bitmap_copy(env->vstore[slot].mask, env->vtcm_log.mask, size); diff --git a/target/hexagon/op_helper.c b/target/hexagon/op_helper.c index 23894ff3d28..33b0efd9e43 100644 --- a/target/hexagon/op_helper.c +++ b/target/hexagon/op_helper.c @@ -146,7 +146,10 @@ void HELPER(commit_hvx_stores)(CPUHexagonState *env) int size =3D env->vstore[i].size; for (int j =3D 0; j < size; j++) { if (test_bit(j, env->vstore[i].mask)) { - cpu_stb_data_ra(env, va + j, env->vstore[i].data.ub[j]= , ra); + cpu_stb_data_ra(env, va + j, + hexagon_mmvec_get_byte(&env->vstore[i]= .data, + j), + ra); } } } @@ -169,9 +172,11 @@ void HELPER(commit_hvx_stores)(CPUHexagonState *env) for (int i =3D 0; i < sizeof(MMVector); i++) { if (test_bit(i, env->vtcm_log.mask)) { cpu_stb_data_ra(env, env->vtcm_log.va[i], - env->vtcm_log.data.ub[i], ra); + hexagon_mmvec_get_byte(&env->vtcm_log= .data, + i), + ra); clear_bit(i, env->vtcm_log.mask); - env->vtcm_log.data.ub[i] =3D 0; + mmvec_set_byte(&env->vtcm_log.data, i, 0); } =20 } @@ -1370,7 +1375,8 @@ void HELPER(vhist)(CPUHexagonState *env) =20 for (int lane =3D 0; lane < 8; lane++) { for (int i =3D 0; i < sizeof(MMVector) / 8; ++i) { - unsigned char value =3D input->ub[(sizeof(MMVector) / 8) * lan= e + i]; + unsigned char value =3D hexagon_mmvec_get_byte(input, + (sizeof(MMVector) / 8) * lane + i); unsigned char regno =3D value >> 3; unsigned char element =3D value & 7; =20 @@ -1385,7 +1391,8 @@ void HELPER(vhistq)(CPUHexagonState *env) =20 for (int lane =3D 0; lane < 8; lane++) { for (int i =3D 0; i < sizeof(MMVector) / 8; ++i) { - unsigned char value =3D input->ub[(sizeof(MMVector) / 8) * lan= e + i]; + unsigned char value =3D hexagon_mmvec_get_byte(input, + (sizeof(MMVector) / 8) * lane + i); unsigned char regno =3D value >> 3; unsigned char element =3D value & 7; =20 --=20 2.34.1 From nobody Mon Sep 28 00:51:54 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=1787181069; cv=none; d=zohomail.com; s=zohoarc; b=ZbhTyIambytzCASbf4BPj/CE2aPltlAyALtD/ZVK7Eaf5fi9bf9rY6kdkOLVJdh2d9Ks+W3JUH8+b2My87jheKRizBxrv8bhUHtaqZDd9bugg60uLrxFi2j3Co948S2Saj7In5ocoXhRz8R0F0JNfQTSVX2P0OsHp2XiWHlZroY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787181069; 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=OB/rBM+QhR7yev6pFNMN2+0uP+uZL4qKHe20nsqrzso=; b=NTpy4ndufoiU4WJvTseL9N1zms+KJk52uipaWON9/ykTFzhByylkEV6mnxBAQ2KEKVuSI8yTpR82+tk5SMay9vd1MKl+6X5Sy0+9b0mMmZAYtXuijKG4Cv55xwJablPmSJhKUcV2X+OKmF9fgzmWFcukUruEOZsFaw1TfJh/Jh4= 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 1787181069288502.18611517681325; Wed, 19 Aug 2026 16:11:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwpPy-0007xi-1N; Wed, 19 Aug 2026 19:09:58 -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 1wwpPs-0007x6-9q for qemu-devel@nongnu.org; Wed, 19 Aug 2026 19:09:54 -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 1wwpPq-0000We-Os for qemu-devel@nongnu.org; Wed, 19 Aug 2026 19:09:52 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67JL7jYt1457426 for ; Wed, 19 Aug 2026 23:09:49 GMT Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g5es4a0bc-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 19 Aug 2026 23:09:49 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-38e475f83a2so2972796a91.1 for ; Wed, 19 Aug 2026 16:09:49 -0700 (PDT) Received: from hu-bcain-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1416ae143edsm18988944c88.10.2026.08.19.16.09.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 16:09:46 -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= OB/rBM+QhR7yev6pFNMN2+0uP+uZL4qKHe20nsqrzso=; b=TNru0BgaN2jH/evr 1a1tqUdKP9V16f/7iFXuCRCO72WaEuQlS/bxI0Xop3ibmMI8Mm+WorcT/5rEfp7G mu5nvdmhxHXJHeNdyRQPQG0xkIfVAlWZMWHH7prL+dQcTtjACD7ziDJ/akpcSHxG wr3WLSNDN4eSbANmC8JOk1+zT738i2KF1T5YnUmF21wdIxCiwTBodVttrW3IOg6U ole5zd2l2NOefX+BACELocFAx6ECPXuWtZ7M1fQMHvsRI77dY4gxoDvXnUypvgLw Ijyefw6Y/9EWsnbV3exl3DlMx37U+MI5wuEq6GDE45IVpe+YY7pkztOm4bhPc7VB vVgHqA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787180989; x=1787785789; 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=OB/rBM+QhR7yev6pFNMN2+0uP+uZL4qKHe20nsqrzso=; b=QPU2Oy/IxO6eQ+QmS6YlyY3Vigw+ijs/d4nVAnig0hi8bdNNxiKMH6Ivc16f8PC5ar t4XgLuGBW2Zm9mMrhYPeFRyfzXPxaI2tJFCacyQdTB0H5SLXm+jzD3j5o+X++3MUs5Cy b9jwl27XNFNxgodqk+DNjA8oXEgI6ATHxGyc/KSIIz5MXJkd5lJLAL+HXYcqb8kVsga+ Lcvu9rYyJUhIa6xdUYjQj1pejotH4SsvbXb+mHI3RNtI3aijMVBcMsZ0ky4TUAoPQG+P PxTnXpnwrf3YzdNvp/RzdIRQmeYoKvJMGECIzTUbGdbBP95n5ZIpmojC2Q+TwYq/x2+H 2K+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787180989; x=1787785789; 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=OB/rBM+QhR7yev6pFNMN2+0uP+uZL4qKHe20nsqrzso=; b=ekyTy4wkdRdMafPZf7PEwd4uLWJG6SqmERkyMQwZR4kc93CZg1IrfNQhRkCj1GenlW sfYxxU+Xhj0PN36n60Ue6mXCj4yoQjjhgg/fyf4gvUvZQ8G+5XIdK7GANGjUjBpRXRgE vTFtc8y9jzvc8LLaoGoLdC0Z8zP4mPSGnp+stN5YZhKnnEwKfAz+O9cNNU2Bo4WblIe3 e0YD+wYYxJdnDU3pS1ExBZjZ3m6QsW3jOdcDLSOxokqiuT4QFJbC1eznpmuIqjf0/Ls/ beEGJAi81k5H0+f4r0y7IQj7XTbq4UwszHFHzBUeokV1N0J7rfMfkgQKxK1T16JhzkPb XJnQ== X-Gm-Message-State: AFuF++l77z5BmvHfAedabRwGAOkVpwM3HFtk9UnzR5yqNMQYMJnJeRkC HtfsJF1AjyVizPvOCNx1YsGPsB9GINFowHA/HBH6ziolaEUmvhhwYZLEBPhG2aLkObRdmiPwJl+ 9UshI2dTVGrdOv9awqn8f4/LRexBAFRr9LXhusPsUqxAoZ5aQ1h7IB+T42J2wVupUTw== X-Gm-Gg: AR+sD12XsIytn66iVleh7vTjuShR2VGxVJWm2yc+mtjCAzrBaqVadaXp+G1d8vkeH7i 89+iz2FqnFdmNXB6C+IMQNmrqCw+EoJ7TlHOmnEP9QdvBRLKJWZ1/AhaR7x7AKjHo87AZnqqJTy Rr2gW5ZaCMarJYLf47L2aPNkUsjFk7reGOyCo8fknSHYti2Yax7ln5XK9Fx7FleJbcFR0YzWd0K 0G4PKHesCYBeAlZrvkS2kZSi3RNqaaMf8RYDA8R7+ime86BHaSbfZ+sS9V4ehWrPa2vn9Ztlg++ dMN88QSyh4k6Lbaze7Qtz0Wy2/enWjFmOCQvm9/iuLQ7hMOXmp0hOypqufiwcBq6M9MItUp9k+q JoDn4gwkUk46fAL5omV7iyByr1w7U4d0WHbZhzN7aSNN1W0tm X-Received: by 2002:a17:90b:1e4a:b0:37f:c97a:939f with SMTP id 98e67ed59e1d1-39580ace5fcmr14459200a91.7.1787180988827; Wed, 19 Aug 2026 16:09:48 -0700 (PDT) X-Received: by 2002:a17:90b:1e4a:b0:37f:c97a:939f with SMTP id 98e67ed59e1d1-39580ace5fcmr14459129a91.7.1787180988231; Wed, 19 Aug 2026 16:09:48 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: matheus.bernardino@oss.qualcomm.com, Pierrick Bouvier , Brian Cain Subject: [PATCH 2/3] target/hexagon: fix HVX scatter/gather region-length check Date: Wed, 19 Aug 2026 16:09:38 -0700 Message-Id: <20260819230939.466856-3-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260819230939.466856-1-brian.cain@oss.qualcomm.com> References: <20260819230939.466856-1-brian.cain@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: NJObgYfyDd1tIznC-zGaiKoUU9QvSNKZ X-Authority-Analysis: v=2.4 cv=PZXPQChd c=1 sm=1 tr=0 ts=6a8637bd cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=Qw7tgrHAXXgfsE_xu_kA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE5MDE3NyBTYWx0ZWRfXx+Cm+cWxV28T NQUJdbDMhrpg8UkH9TL0Ef3XlCjJL43kGSMcSrG8obV56w2qfEWGQHUQ09tt5Ur2XxM0PkCpn4F yn3O0FpTaq78TC6J+A3r6l52drUySFw= X-Proofpoint-GUID: NJObgYfyDd1tIznC-zGaiKoUU9QvSNKZ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE5MDE3NyBTYWx0ZWRfX1/QtwlTNE3cX 7eg+3axGbIo5/H3cKO4T57tvfpEq4bSSLBdabi4VhNb3NtlOcNJ0PCoEG/FzSultchSkYcLw9N9 /1Halv+7SZzUN0pXD6WK6dAW77TOkTzGhV2Xb8e6xWyUugEAB2EX/c2qiQgBHH6DSvlagkiYKsW rddHcGtfDxL+E13PwiIF2+638zldbOpVj39SmW0GIJfGaNwjT9LcTRBuRPz5PhkL8YV7v+5BV/Z xzQlA+smAgWyCoL0ySqegKo+P00SHdf/f5KhelhWj/QQIT+iHn7zdQ+fBvMAicIkTqbrcbeBZG3 bZcp9ln7qlrDYmoYoIqFf0772nUUyEF0uUSodlYZrL81GPZmxTrgw0UAIDzeZ1GuGPcW82+vE0U 1LTk8bb2WeIa4DmZluzLR6I66lwrnLtqkullNe4Ve3eqakC0Y2fqyJ3DphtnD2jRbODgO3yH3p0 ZAuphSzbLpkccvBjWZg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-19_06,2026-08-19_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 phishscore=0 spamscore=0 lowpriorityscore=0 suspectscore=0 impostorscore=0 clxscore=1015 malwarescore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608190177 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: 1787181070383158500 The region-length bounds check compared (EA + i0) <=3D (EA + LEN), which reduces to i0 <=3D LEN and never actually depends on the region base. This let vgather/vscatter keep elements whose offset was beyond the declared region instead of dropping them. Compare the offset to the region length directly instead. Signed-off-by: Brian Cain --- target/hexagon/mmvec/macros.h | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/target/hexagon/mmvec/macros.h b/target/hexagon/mmvec/macros.h index 0ed35720eea..7ee6f5e62fb 100644 --- a/target/hexagon/mmvec/macros.h +++ b/target/hexagon/mmvec/macros.h @@ -130,9 +130,9 @@ do { \ int log_byte =3D 0; \ target_ulong va =3D EA; \ - target_ulong va_high =3D EA + LEN; \ + int in_region =3D (OFFSET) <=3D (LEN); \ for (int i0 =3D 0; i0 < 4; i0++) { \ - log_byte =3D (va + i0) <=3D va_high; \ + log_byte =3D in_region; \ LOG_VTCM_BYTE(va + i0, log_byte, \ hexagon_mmvec_get_byte(&(INC), 4 * IDX + i0), \ 4 * IDX + i0); \ @@ -142,9 +142,9 @@ do { \ int log_byte =3D 0; \ target_ulong va =3D EA; \ - target_ulong va_high =3D EA + LEN; \ + int in_region =3D (OFFSET) <=3D (LEN); \ for (int i0 =3D 0; i0 < 2; i0++) { \ - log_byte =3D (va + i0) <=3D va_high; \ + log_byte =3D in_region; \ LOG_VTCM_BYTE(va + i0, log_byte, \ hexagon_mmvec_get_byte(&(INC), 2 * IDX + i0), \ 2 * IDX + i0); \ @@ -156,9 +156,9 @@ do { \ int log_byte =3D 0; \ target_ulong va =3D EA; \ - target_ulong va_high =3D EA + LEN; \ + int in_region =3D (OFFSET) <=3D (LEN); \ for (int i0 =3D 0; i0 < 2; i0++) { \ - log_byte =3D (va + i0) <=3D va_high; \ + log_byte =3D in_region; \ LOG_VTCM_BYTE(va + i0, log_byte, \ hexagon_mmvec_get_byte(&(INC), 2 * IDX + i0), \ 2 * IDX + i0); \ @@ -170,11 +170,11 @@ do { \ int i0; \ target_ulong va =3D EA; \ - target_ulong va_high =3D EA + LEN; \ uintptr_t ra =3D GETPC(); \ int log_byte =3D 0; \ + int in_region =3D (OFFSET) <=3D (LEN); \ for (i0 =3D 0; i0 < ELEMENT_SIZE; i0++) { \ - log_byte =3D ((va + i0) <=3D va_high) && QVAL; \ + log_byte =3D in_region && QVAL; \ uint8_t B; \ B =3D cpu_ldub_data_ra(env, EA + i0, ra); \ mmvec_set_byte(&env->tmp_VRegs[0], ELEMENT_SIZE * IDX + i0, B)= ; \ @@ -249,10 +249,10 @@ do { \ int i0; \ target_ulong va =3D EA; \ - target_ulong va_high =3D EA + LEN; \ int log_byte =3D 0; \ + int in_region =3D (OFFSET) <=3D (LEN); \ for (i0 =3D 0; i0 < ELEM_SIZE; i0++) { \ - log_byte =3D ((va + i0) <=3D va_high) && QVAL; \ + log_byte =3D in_region && QVAL; \ LOG_VTCM_BYTE(va + i0, log_byte, \ hexagon_mmvec_get_byte(&(IN), \ ELEM_SIZE * IDX + i0),= \ --=20 2.34.1 From nobody Mon Sep 28 00:51:54 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=1787181056; cv=none; d=zohomail.com; s=zohoarc; b=EkQPKAWj7t+YPBit1chlI22b3EyKmHga0eI7LTMjfGIc0LVtBjnxZLiM+BlN9G1PAinwnglOfm25PMX5qegiUSWcPvGOJsILpaKFNapFj1uKNOW9xlYEMB+Kh635/jHUbCxtSJeVwDdaTH+6Wnhai9D4mJg6inNFZIh/azU4Hw4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787181056; 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=u0MDzsu37HwMlNOabZHkxAH8FuiQLLAO3y/cteXl/Fo=; b=cCHyfVooLwPMfuXwv2MXnLOpMiRg/Qkkm2g6fK6CCU4yXCCIq3DPwF5DkNcox9rzJP9C/thuT6+F74b4gZg8uXk5ETFrbDW1xMnn3xezntM1hlVt1bOsxQNagjWUs9twD8AkSXUIlWGS7sW/iM1eEOJjR0XctNpaTi8NPRZ27gs= 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 1787181056620967.3429865870247; Wed, 19 Aug 2026 16:10:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwpPy-0007yZ-TY; Wed, 19 Aug 2026 19:09:58 -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 1wwpPw-0007xW-EC for qemu-devel@nongnu.org; Wed, 19 Aug 2026 19:09:56 -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 1wwpPu-0000XK-I3 for qemu-devel@nongnu.org; Wed, 19 Aug 2026 19:09:56 -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 67JL87M1491168 for ; Wed, 19 Aug 2026 23:09:52 GMT Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g5ervj227-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 19 Aug 2026 23:09:52 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38e6d253330so450436a91.1 for ; Wed, 19 Aug 2026 16:09: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 a92af1059eb24-1416ae143edsm18988944c88.10.2026.08.19.16.09.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 16:09:49 -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= u0MDzsu37HwMlNOabZHkxAH8FuiQLLAO3y/cteXl/Fo=; b=TkN7Rf8HYaV7T1Y7 wIuk7lpJRBX47u9FmPVTk2Bh3ePQOpLJzilNld0gP/juU+sdlD+dFAiFnVY+POzT 7cXEqsqwZf+k2mqYwHeaBwwrFp0Ddlp1ddsW6CQHzxHMXxZffErNhwuSmJVdxbm/ fAo9tryvTR3qMEzYa0HjAe1WELKtNZvKGpZeKbi5f5+Et2MtkPKy9oy3CGVY5FP2 +HMouR1S1Iwgwr9GS/iV0uTVCmHR6Ow4PTd5scetQg4INgUn7aNhjvBoAAvD8UTO cvBdNlk0raG9GYfs7gj1LVOxUdPQCIdqljBI4TemevV9x84PFUdstCA14wb++5FX jqhSJw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787180992; x=1787785792; 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=u0MDzsu37HwMlNOabZHkxAH8FuiQLLAO3y/cteXl/Fo=; b=jqsXbBf5WfERUC+xtse0DJahlqTPXlmD9sEvrEEK/KIWjl1G78jv3PcWI5u9QXJ8hI cKLkwjxJEI5Pv46OqDoZjBHdgXCqTnC8+k+ZlccqdOJb+f/lYO6SXqfLYMmbL1qvja5E LMw1COzaRrEDvI6CEXliLxH4BPiXnO+GrGVoAAsFLpQupjNdiAS+mPs8eqPBgT3TRENv l5aLv5VGxocx21PgBubwtVvw/4xSsocyVynbYpxEiVudlM6bANTM8+llZ+WFaztUdnZd qT70e1Q32tFSVGbhTVMkEHM0jTSzdqBgQzgWmDCnvECkm89P2WUczTWMid6//iGwmLY0 7d1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787180992; x=1787785792; 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=u0MDzsu37HwMlNOabZHkxAH8FuiQLLAO3y/cteXl/Fo=; b=edUpevp2aNDbUJvg5n4C2pGF7OnLKapGy/VnH1zl/nQe7eLVXe45z3MjAG38eR0KD1 gTDy6ynhFNUnndfwGNQeF0KoVGKCxtPh83VJCR3kzQroAuOZt2RNfyaaATQwBXB43sQA AsMS9JK9sAMompItG3x1qjmVbFm34DqDGv2Utrr3A0wdR5mvN00GWfzEiqpEDFx5neYo MSlViNawxnAJee1Yu2zTLsucbkUIeP0G84RELrgvHdX4GF2iljjbS/9dAQ1VwppapLT5 UjWcD7v8uVOXcvhzPwXkRHgOyZbilOdk8h+z7rVNot+N58EJa+ORM2BzO+A3hvyxVU1z GIgg== X-Gm-Message-State: AFuF++md1TF3XXg4iLbl0rsqMyxxZIQxQLL52flrxJwO5T/az8wPSqiK Tt4l4Ed+at1tEFsqSOcG11FMCX62tJf9hO3b4HH9dKKTahA5iqOa8jML+58a/DJBQXbxGilbQ1i jofQ0qmWvIlTxPNyOS0uYrXP5wy/yaZKmf1rS7gIjDdp7+C7bZ7lfCMvPlHz+NPn+vg== X-Gm-Gg: AR+sD13imxX3d1VrCW1SCfvP2u50U5hy96hGDxhbO38fhYC0JuLvxZEI3mtBXZWpFhu cgW6Y8PUdbh+Pv6le2xZhdJHqm8JYUC1JSkgJc67fvK0/vvqnLgSXjcieXm+hvrDZ1a9MUdk5Wf jlbmwDPG6iow+FJeRQF/nnCp9B3qbaS+J1McUMdVrU9V04gJSndCPcYy5mG4T4tAIrsKYwY2iA2 QrSQJuML58zZ5NjMqB+GfWpelFiseN25+tKS3jNZMxfr4zpm5UfKdfIHiFdAm5YtI8G7ug9TViw FVUHi6a4XBnf3me+x0d/IoAYknDH8aq8PmVsHL18Gd1O4eiXZq4A/yDRdagNfkehElPQfNGp3Qc 3jZvLLCt+/Hl1TtzT0MYQguokG08gzMY6BFD44qQ005fdMvJ9 X-Received: by 2002:a17:90b:524a:b0:380:86d8:8162 with SMTP id 98e67ed59e1d1-395a07022b9mr2842704a91.18.1787180991859; Wed, 19 Aug 2026 16:09:51 -0700 (PDT) X-Received: by 2002:a17:90b:524a:b0:380:86d8:8162 with SMTP id 98e67ed59e1d1-395a07022b9mr2842619a91.18.1787180991297; Wed, 19 Aug 2026 16:09:51 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: matheus.bernardino@oss.qualcomm.com, Pierrick Bouvier , Brian Cain Subject: [PATCH 3/3] tests/tcg/hexagon: add vgather/vscatter region-length tests Date: Wed, 19 Aug 2026 16:09:39 -0700 Message-Id: <20260819230939.466856-4-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260819230939.466856-1-brian.cain@oss.qualcomm.com> References: <20260819230939.466856-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: 3vPd0h9qHtemZ2Z2qqHhXgn0pQDzFQCE X-Authority-Analysis: v=2.4 cv=VZ3H+lp9 c=1 sm=1 tr=0 ts=6a8637c0 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=0wXhRAlk9XZiN57P8QAA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE5MDE3NyBTYWx0ZWRfX5si68GR8dpO+ wA+3bPo+J8Hq3SvvaVXQqDydK+A/JrpmdYiONgAZazqgkcnrZ21YOBzMUAWhWLbMCsulHHZDXQF hPBAH3Yvn4yYTtQi/W2FK0sipyOZ5m2P8Ro2SR9J/5s8JD58gtiUE7STYdkwdsW9CL3poxFwcSs 9DM2rsHqOjVJSqPhhslZC3sraE/gt8LUWI7Y5vptbA0TPJVR3cuQb5fXENBR/0ezxJrXyI9prdF FoYcGh9tjiSDUWd/PJpIkrNtQZwh9meDVvJ78Eh4NQQbXS6XsOTV/XOrAgJ//dwo+zarOe2e7I0 3DBGbfAvmN8TzI6FcS4T6f2RW7bgyn3mqGqupjnwpTeukdvwLZHMgNh1yKu8d8cNbHc+dxXAoDS z/cmP5W1vbF82XCxkC0NrWPMsPO3gttnu5YNXvTEy/p4fFv+/gz+WG8O3OcPIEJIbZYES8kNNRX Vs3bTHGUgK2R0LV6PQg== X-Proofpoint-ORIG-GUID: 3vPd0h9qHtemZ2Z2qqHhXgn0pQDzFQCE X-Proofpoint-Spam-Info: AW1haW4tMjYwODE5MDE3NyBTYWx0ZWRfX0FHda5QIJu47 BxkOIsO8NqitMMzh0X7WACDsQoUaA4Peod7Meg8xHJ7U7BCQYVichjOH2QZuWqO+cLtiHutxEUQ ywAx6Yugm4KVexAuaH+pScuerRvO+TM= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-19_06,2026-08-19_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 spamscore=0 adultscore=0 clxscore=1015 lowpriorityscore=0 phishscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608190177 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: 1787181059161158500 Cover the case where an offset lies beyond the region length: it must be dropped rather than read/written. Signed-off-by: Brian Cain --- tests/tcg/hexagon/scatter_gather.c | 125 ++++++++++++++++++++++++++++- 1 file changed, 124 insertions(+), 1 deletion(-) diff --git a/tests/tcg/hexagon/scatter_gather.c b/tests/tcg/hexagon/scatter= _gather.c index bf8b5e03172..e1c4df0e64a 100644 --- a/tests/tcg/hexagon/scatter_gather.c +++ b/tests/tcg/hexagon/scatter_gather.c @@ -32,6 +32,8 @@ #include #include #include +#include +#include =20 typedef long HVX_Vector __attribute__((__vector_size__(128))) __attribute__((aligned(128))); @@ -85,6 +87,23 @@ unsigned int word_predicates[MATRIX_SIZE] __attribute_= _((aligned(128))); /* make this big enough for all the operations */ const size_t region_len =3D sizeof(vtcm); =20 +/* Mu (region length - 1); offset is kept iff offset <=3D Mu */ +#define GATHER_LEN_TEST_MU 127 +static unsigned char gather_len_test_src[256] __attribute__((aligned(128))= ); +static unsigned char gather_len_test_dst[128] __attribute__((aligned(128))= ); +static unsigned char gather_len_test_dst_ref[128]; +static unsigned short gather_len_test_offsets[MATRIX_SIZE] + __attribute__((aligned(128))); + +/* offsets are unique so a dropped write can't be masked by another lane */ +#define SCATTER_LEN_TEST_MU 127 +static unsigned short scatter_len_test_dst[128] __attribute__((aligned(128= ))); +static unsigned short scatter_len_test_dst_ref[128]; +static unsigned short scatter_len_test_offsets[MATRIX_SIZE] + __attribute__((aligned(128))); +static unsigned short scatter_len_test_values[MATRIX_SIZE] + __attribute__((aligned(128))); + /* optionally add sync instructions */ #define SYNC_VECTOR 1 =20 @@ -96,7 +115,7 @@ static void sync_scatter(void *addr) * synchronization. Normally the dummy load would be deferred as * long as possible to minimize stalls. */ - asm volatile("vmem(%0 + #0):scatter_release\n" : : "r"(addr)); + asm volatile("vmem(%[addr] + #0):scatter_release\n" : : [addr] "r"(add= r)); /* use volatile to force the load */ volatile HVX_Vector vDummy =3D *(HVX_Vector *)addr; vDummy =3D vDummy; #endif @@ -855,6 +874,102 @@ void check_gather_16_32_masked(void) MATRIX_SIZE * sizeof(unsigned short)); } =20 +/* vgather must drop elements whose offset is beyond the region */ +void create_gather_region_len_test(void) +{ + for (int i =3D 0; i < 256; i++) { + gather_len_test_src[i] =3D (unsigned char)(13 + 7 * i); + } + memset(gather_len_test_offsets, 0, sizeof(gather_len_test_offsets)); + gather_len_test_offsets[0] =3D 0; + gather_len_test_offsets[1] =3D GATHER_LEN_TEST_MU - 1; + gather_len_test_offsets[2] =3D GATHER_LEN_TEST_MU; + gather_len_test_offsets[3] =3D GATHER_LEN_TEST_MU + 1; + gather_len_test_offsets[4] =3D GATHER_LEN_TEST_MU + 73; + memset(gather_len_test_dst, FILL_CHAR, sizeof(gather_len_test_dst)); +} + +/* gather with a region shorter than the source buffer, using HVX */ +void vector_gather_region_len(void) +{ + HVX_Vector voff =3D *(HVX_Vector *)gather_len_test_offsets; + + Q6_vgather_ARMVh((HVX_Vector *)gather_len_test_dst, + (int)(uintptr_t)gather_len_test_src, + GATHER_LEN_TEST_MU, voff); + + sync_gather(gather_len_test_dst); +} + +/* gather with a region shorter than the source buffer, using C */ +void scalar_gather_region_len(unsigned char *dst) +{ + for (int i =3D 0; i < MATRIX_SIZE; i++) { + unsigned short off =3D gather_len_test_offsets[i]; + if (off <=3D GATHER_LEN_TEST_MU) { + dst[2 * i] =3D gather_len_test_src[off]; + dst[2 * i + 1] =3D gather_len_test_src[off + 1]; + } + } +} + +void check_gather_region_len(void) +{ + memset(gather_len_test_dst_ref, FILL_CHAR, + sizeof(gather_len_test_dst_ref)); + scalar_gather_region_len(gather_len_test_dst_ref); + check_buffer(__func__, gather_len_test_dst, gather_len_test_dst_ref, + sizeof(gather_len_test_dst_ref)); +} + +/* vscatter must drop elements whose offset is beyond the region */ +void create_scatter_region_len_test(void) +{ + memset(scatter_len_test_offsets, 0, sizeof(scatter_len_test_offsets)); + scatter_len_test_offsets[0] =3D 0; + scatter_len_test_offsets[1] =3D SCATTER_LEN_TEST_MU - 3; + scatter_len_test_offsets[2] =3D SCATTER_LEN_TEST_MU - 1; + scatter_len_test_offsets[3] =3D SCATTER_LEN_TEST_MU + 1; + scatter_len_test_offsets[4] =3D SCATTER_LEN_TEST_MU + 73; + + for (int i =3D 0; i < MATRIX_SIZE; i++) { + scatter_len_test_values[i] =3D 0x4100 + i; + } + memset(scatter_len_test_dst, FILL_CHAR, sizeof(scatter_len_test_dst)); +} + +/* scatter with a region shorter than the destination buffer, using HVX */ +void vector_scatter_region_len(void) +{ + HVX_Vector voff =3D *(HVX_Vector *)scatter_len_test_offsets; + HVX_Vector vval =3D *(HVX_Vector *)scatter_len_test_values; + + Q6_vscatter_RMVhV((int)(uintptr_t)scatter_len_test_dst, + SCATTER_LEN_TEST_MU, voff, vval); + + sync_scatter(scatter_len_test_dst); +} + +/* scatter with a region shorter than the destination buffer, using C */ +void scalar_scatter_region_len(unsigned short *dst) +{ + for (int i =3D 0; i < MATRIX_SIZE; i++) { + unsigned short off =3D scatter_len_test_offsets[i]; + if (off <=3D SCATTER_LEN_TEST_MU) { + dst[off / 2] =3D scatter_len_test_values[i]; + } + } +} + +void check_scatter_region_len(void) +{ + memset(scatter_len_test_dst_ref, FILL_CHAR, + sizeof(scatter_len_test_dst_ref)); + scalar_scatter_region_len(scatter_len_test_dst_ref); + check_buffer(__func__, scatter_len_test_dst, scatter_len_test_dst_ref, + sizeof(scatter_len_test_dst_ref)); +} + /* print scatter16 buffer */ void print_scatter16_buffer(void) { @@ -1035,6 +1150,14 @@ int main() print_scatter16_32_buffer(); check_scatter_16_32_masked(); =20 + create_gather_region_len_test(); + vector_gather_region_len(); + check_gather_region_len(); + + create_scatter_region_len_test(); + vector_scatter_region_len(); + check_scatter_region_len(); + puts(err ? "FAIL" : "PASS"); return err; } --=20 2.34.1