From nobody Fri Aug 21 21:27:04 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=1787262751; cv=none; d=zohomail.com; s=zohoarc; b=MNk7nHJnKY6Ipq4eFaxQcb5wbgKQuivBvC8RG0rYLFgWk5QSkXMmG6GeNYm6Cio9xUlqXvopNFxVk+OlCjivqhTWRwbIEgFE1JDFQqVVBnxIo9FG90epE3X6v94zqiXksASJnNcnj78aZXPe0/DkIJEmdJKS8hA3Zi1+94kdbDw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787262751; 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=U7p8tUOyyN7+g3U3mfQoEwBikARjk5WLpPiJoq5uGvk=; b=SpvReSZGyWcuubGwLQ7Ymkd9bigVGwQoFupuUif0JXpk1mu/w8jJ8YkjmdLdDGnLsJ9BjKXmlSjpD8IBXjV+1j5jwMSb7E2O+6WSgrpovPYlDAR57rN9UcowSJhL5s9iblvQjY55T3OPtI1rX9YN+2NyroZSXjLcEMy3gclB+Mg= 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 1787262751532446.7008347350736; Thu, 20 Aug 2026 14:52:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wxAfY-0003Fx-Do; Thu, 20 Aug 2026 17:51:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wxAfW-0003FG-KB for qemu-devel@nongnu.org; Thu, 20 Aug 2026 17:51:26 -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 1wxAfT-0004MA-NS for qemu-devel@nongnu.org; Thu, 20 Aug 2026 17:51:26 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67KK7jOU065830 for ; Thu, 20 Aug 2026 21:51:22 GMT Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g5yg0k2bt-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 20 Aug 2026 21:51:22 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cfa4e4684bso8680235ad.2 for ; Thu, 20 Aug 2026 14:51:22 -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-327d6168e5bsm9226899eec.1.2026.08.20.14.51.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 14:51:20 -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= U7p8tUOyyN7+g3U3mfQoEwBikARjk5WLpPiJoq5uGvk=; b=ETzpf9loqoc0M45f MJcY4T+276iPsxfdikPFWeH8xX8VazMlSsqzisfFiWIGqWp+8kC5U+WzqT4PbRmu dR+8TFKIiayWeOwv79Z2Frvqy9UyLTASmgReIxhzO9ITVokKWGN1pcvzxYl4pS1L EWNgedcHrBVF+ha83SJjBrZtrprTKQxEOS6icxTBk/jxi/JUy5HYXf9kefDB6MKC cWgfdx8en7l+PapvUzwB+2+t5qKJSi9F7cUgXfBSj3GCOKPfT4ioGos46oVa1T61 GC20zQ3Kicb+Mw+/kvHlI6Dj2bvNbuMhj1giZEb3I471dm7Yr9yus6iERwQntwhw 9/dfIQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787262681; x=1787867481; 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=U7p8tUOyyN7+g3U3mfQoEwBikARjk5WLpPiJoq5uGvk=; b=NK8r9684FbEky3VH7Kll9qZ060d/akBjKP1+yj6ZojMDc8QThf9H459ba7UE07S4Jm gsBZABT7F9uLdqbcvb7FZ0Fj//pxS1IFhizRZyEfDPc+Xc5iz8nmSFq7Rhwdi6snJqJo 4wfIzlEWYUMqfRHCcev00HI8jR4ZWrygJ1xIlH1eguIbcvgW1ew30JdUZmDv1DCKaQ3y RzsUgDM3Koszmp6q54IEs6CLyzQTPlx0J1Rfk1OXFtwcf/0AGY78BKk1GkF7zCC8mJLJ 8dxQUmOLYjR2E4vzlt84lWxcliC/J0+p9GQjy4X7HICNvAOwWT4Jwl/qdKbMgswOM4s1 p2fA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787262681; x=1787867481; 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=U7p8tUOyyN7+g3U3mfQoEwBikARjk5WLpPiJoq5uGvk=; b=lreGj1DvIqKZUf+czMHWqX3BFNOXxRkqxZamg7oJXqMgdlUVhkbcv1wsh43Jg9grUQ 8V6uhtVjGnfHh4tx1hj06GvUwiZEBL7uRqrZCvxzpMfGUPKEwF7RcErAzAyuNvWLMWN+ vO04FL1vMhVQ0VykgezN3vuPd/2tmyuXCkWkHZIT7KKUYuxovcrPXgV+lluu7n9Z1aa9 YHjicJFSK6oVe7jG+qToy8hNOqoKy8I7aaAfBwaH1/bcUUA7BfbMwjsH/qfvMt/8K2nK 6Suc+j4E+RXoi0Z3LjDaUDBrE8LRM+mnlcLQjyl6UqCgq9xI4ApTNo9cxlLlJB9mes7z XBNQ== X-Gm-Message-State: AFuF++lUUnLWTU+UTWZNRdrcxl3acbd5HJhG//h45p8yaezhsVhOVohO lB9vzggD3KvVO9kA0AcjgnSm0DpsxIMe0mUPBzbyUlNyx4VrAStGKtbGVitPXSKWUO6mGH4OmAd 5DIaCe3xo7K7cqmTzmoFS0UniTKC4IUTQ58nmxH9bmTKnAcq6gJXRIFrcF+CWtJSsEw== X-Gm-Gg: AR+sD13atrsZCNonggJyYjpyNRVTWa6QqWtIVGwUV63c7crnZ1vS6fjiwrCeJdfxnfF ap/lEFuJ3wMnCO344I4iB0sKUR8XkpcgPeHv1xIZmNh0atiy6ge5ucrMiqBF8ooRnhbyYF2SgXO cA4qMDFbt7MRL+8cFCboptOeU2ZyOIRLUlv2YsuAZwAJ6bOcS2aiuN7E94B+c7bhcgE1j9XlsnI ztnPrqO9E/BwtwbMovHpr937+DWiNUKFfsqqZ9co4hzpz7a26RpapLin4sY2a24Or3lc04+N1nP 9uLRBf6MNe50AkMiJ2kIKekPg9cUxOS9hZLErnXkJ9sFa4XafIkaLziQFKidTliWbUTxey82f8Q jnL79u6WioFQaR981cTT7wRiho5VJpbg6QYQ6lh3u6gCf8Hs2 X-Received: by 2002:a17:902:e78e:b0:2d3:7887:7e7f with SMTP id d9443c01a7336-2d64b0c6fe8mr34010255ad.11.1787262681400; Thu, 20 Aug 2026 14:51:21 -0700 (PDT) X-Received: by 2002:a17:902:e78e:b0:2d3:7887:7e7f with SMTP id d9443c01a7336-2d64b0c6fe8mr34009275ad.11.1787262680931; Thu, 20 Aug 2026 14:51:20 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: matheus.bernardino@oss.qualcomm.com, Brian Cain , Pierrick Bouvier , Anton Johansson Subject: [PATCH v2 1/5] target/hexagon: fix HVX big-endian byte access Date: Thu, 20 Aug 2026 14:51:13 -0700 Message-Id: <20260820215117.1788954-2-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260820215117.1788954-1-brian.cain@oss.qualcomm.com> References: <20260820215117.1788954-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: Qx3iPpSkizHgh1hd5LLlnMYNkLFvhTK3 X-Proofpoint-ORIG-GUID: Qx3iPpSkizHgh1hd5LLlnMYNkLFvhTK3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODIwMDE2MiBTYWx0ZWRfX1j2DBeHEZJ1b jmWz3SmKEsq0wNDCET00mFbIVrBDbwcrdaq6KKMiGnnCQse1dYIuPARiUg2i6as2dOY/7NoKi9/ ZD43HUubGsfQq1UlMxrwLZq1EcOFESqBpDMjsQFT29Vtvp81c7KeHhhM8S8QUrp/dWNEGDJjfNt am7xHNAU7xKajk8eQ77MWmPssx3aqFLFWpON/0pN5VFHJCiSQj79jjKb9Wcypq1YjXGNQxlz1GL EF0/59S79LsCCDkBLW1vlebtRBX9XTniuJdSmZItitOW3stDmD3W+/ByELHo9q9Px+TI2yoDJWO SIUxYpm0AP9LPPy1jJQuYzAur/7cqIt8iDfYo1iD+Rxqz9MdNmJBIxIHP6E/L9n8TmZOV21ahws raRVjLi3fJwKT3PqKw2qS70xaKlGHIHAgHA09q/z88/KIop8fiiv529Ax2IMuo0oUavn5Fh+qqS 4gKmXGYLllpJnaF/Jsg== X-Proofpoint-Spam-Info: AW1haW4tMjYwODIwMDE2MiBTYWx0ZWRfX96esaWgczYoN 2y7z5UA9aarzTuM8vhwBms04uxOYjl4zc6zyil3h1UYPmW1VzDRuWfbzmsEZAF5nl9a1K/xMfuz fQnI7D0epfaf2esrACaM2Nw7xa17iak= X-Authority-Analysis: v=2.4 cv=JoXBas4C c=1 sm=1 tr=0 ts=6a8776da cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=vUhCv2GA6jJ6UuKgImsA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 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-20_02,2026-08-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 bulkscore=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 phishscore=0 adultscore=0 impostorscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608200162 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, 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: 1787262753019158500 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 Reviewed-by: Anton Johansson Signed-off-by: Brian Cain Reviewed-by: Matheus Tavares Bernardino --- target/hexagon/mmvec/macros.h | 23 +++++++++++++++-------- 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, 59 insertions(+), 21 deletions(-) diff --git a/target/hexagon/mmvec/macros.h b/target/hexagon/mmvec/macros.h index b36f833b1de..e85beed3387 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); \ + hexagon_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,8 @@ 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; \ + hexagon_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 +220,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; \ + hexagon_mmvec_set_byte(&env->vtcm_log.data, j + i, 0);= \ } \ dst +=3D inc; \ for (int j =3D 0; j < sizeof(TYPE); j++) { \ @@ -249,7 +254,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..662f9d1597e 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 +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 hexagon_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 hexagon_mmqreg_get_byte(const MMQReg *q, size_t inde= x) +{ + return extract32(q->uw[index / 4], (index % 4) * 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..544f101aa2d 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 (hexagon_mmqreg_get_byte(&env->QRegs[regnum], i) !=3D 0) { nonzero_found =3D true; break; } @@ -223,9 +226,11 @@ 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]); + hexagon_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", + hexagon_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..cd677d3393e 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; + hexagon_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 Fri Aug 21 21:27:04 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=1787262751; cv=none; d=zohomail.com; s=zohoarc; b=eWAqFoldyJkQQRmhUYnGpQF0XZCZsuT9RmNM9KDhZxYP0GiiMcBz+sEPJZTMsIEGK+4hmX5Ulmnd7+sFls7wn+5w1IPXpvBFt5QVkKqyoTbFVoKrAKwbVPEFMxL62zoG8no5j8C4Q/0P9l3eO3/BQSxFK3K3yEV1minsKzT7nf8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787262751; 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=TKGechPnxBQ3/7mSMz1smJ4UGynnUD45CKMZ6ekzwMU=; b=ahPhpl02rpQbDwI3hc4jkbkjqEBIb0sTHgpJqdRoEjiroOx7xhNcbZdpcXI/XIZI1LUtgWtICV1pTpsRvBn3+1rLEnLDgGXKT1wuvxDkiv5RZd9gJ3Ur+N8XBH2eivUtDQULlshGNfV6qaZd3aRet5FGE3dqa2mfdyCPC24ahMw= 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 1787262751583516.645987774108; Thu, 20 Aug 2026 14:52:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wxAfZ-0003G1-0b; Thu, 20 Aug 2026 17:51:29 -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 1wxAfX-0003FP-Oj for qemu-devel@nongnu.org; Thu, 20 Aug 2026 17:51:27 -0400 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wxAfW-0004Mt-1x for qemu-devel@nongnu.org; Thu, 20 Aug 2026 17:51:27 -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 67KK7mUo3491838 for ; Thu, 20 Aug 2026 21:51:24 GMT Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g5ytcb19v-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 20 Aug 2026 21:51:23 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cc12e8e22b7so744557a12.0 for ; Thu, 20 Aug 2026 14:51:23 -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-327d6168e5bsm9226899eec.1.2026.08.20.14.51.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 14:51:21 -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= TKGechPnxBQ3/7mSMz1smJ4UGynnUD45CKMZ6ekzwMU=; b=OkgZvMQSUWKm3kGU V2urOpCotXuksReS0emtZG+t58Wl2Z7VNqGIUqdjzgSYcSh+0KF3eOdxMiqERS4O Bii3bPhmPiT3mG+TuLn2nrQTYxZE3Ek4dkMeQdmsv33XWYzYTW+iF3HugdqYc11m shnwmA/gFHP0Lu5ufdU9jBX3GbhuSTIpFJMVpz/Ds3ZuH0CIuQ4Illa4Z4RQjgv8 Si8SAe0sQK5ssSeprDHPVKk7kM/8LqHNUXz6LRwFfUciOY85sYptHOBj7X4fjEjL 3C5c5NUZgsoxy5U+LXaOTKuZkMtP7Ttqm3EtXo09rVXTBKmvsy6gK5+XgS/GESCB CMw0NA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787262683; x=1787867483; 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=TKGechPnxBQ3/7mSMz1smJ4UGynnUD45CKMZ6ekzwMU=; b=MAA+17c9FaTMMFC2wGoL9Z18seRx6DtFITGHscdtKj47eXLRgV0gNgn2p6hl7shUiF O60Nxtdd5O8if5nrhz0F3Dp6rrdkU8ka7fhc1yHyDW3kTUun39nAan/nnbYcdNrzus4M kvwWUDxD4ZN2XvNHxnDpW9XLfPMZPQw/ruRe5rWNqhWmkmT6yVlLS8FM7M5Z2CcaRSgg H0IOTADq3fCoKHqBSRXE+Jjq+C7P/f0+Lr9+oZaq526ZWhfqiiKqgF72JJ+1+jxkcYz2 pBv67LibXanOGJSlJEqkBvLJEGVEpPaF+VqEKDXctpn2t60yGhQ0QBs9GMrXNCEhpzy6 uTAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787262683; x=1787867483; 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=TKGechPnxBQ3/7mSMz1smJ4UGynnUD45CKMZ6ekzwMU=; b=R8bVVOyQRZGYDdDXzW3ISfEClB9i226IZjMBTlIh0jTMYKB/PvDMuT58OXWzq1R4Ul lGTle+vJooNqq07bhLPCUQFBm41btMfVM7QxxQORjfL6JZxceXqMtHF4os+J4LckS+GX VXDCY4TmMbTwfoA9vSeKHEk3YpCXZ7r8c46EBFHCXG6f1PcTuKxZ1rSmU2u8RiF9DZMp f0fsmGZXdAWRdFjeA+w35dlqsKDsMFb82ZC2xDkTVLn6XyUK5iWuAVK3hRA5sCv/qvkn hii5nHKTvnBVKUhIGX5uUoMv5ypiIEMQZv52urgTofLvI3X0rIQk5MHlTZR+HzE3TP6A wPVQ== X-Gm-Message-State: AOJu0YzMcd6mbqsFoLSESkjJYhsun5DPmPofvBHn9ofK+xPFaFrm+qgF WcIxVVN17zeD0uZWtVodXBGmjyofdfcq9C1BF8EYcQrNZYPYMu5t5OLm8L2mHfoI51P843aCnzr Zzp5hmyYDRufRMOcVHD8C1uWgj6EaBWvXwKyEYy4gJEnl2goIQjYld3ONwk96d6sK6A== X-Gm-Gg: AR+sD10lsDqxKPHFSVpzRAWlOQawwWl+p4yx04Ek4Hj8EHMRN+8ahCXfmJT/CL6PIrC XiZSh6Ve3d5ABPtxZPTcacrZ6Qrs38cFQ+JZiaghxv6TB+E3TlPtkyzk9mhb2UjrD/bspDfwnwN 91lG/H3UwK4MWsJ5FKqAd1bzSlPsdqE90LpFESfai3Y9OEj5z8IrgJ02MQZGLKRZQReZmWmmZCp m6dkQUFxpkt87g49QBS+gJt6ZHXkFGarrVyg7Etx+uF2Jp5Or9KvhDsfQwfkyr5aRSTVZEfjEkh FevuQwj30OKLdTBDECKyT48Tb2uj5zorjywpbDUBx1nvUSN7e9YwrgBYQDXVSbagGArpSaxykAm dsT4eJ1d4j+eK/Kkr0MLYaihNdQw+YM6EnKWdvaopVHX5H4mf X-Received: by 2002:a05:6a21:a49:b0:3c3:88a5:83e4 with SMTP id adf61e73a8af0-3cd2ffbf358mr2916196637.10.1787262683398; Thu, 20 Aug 2026 14:51:23 -0700 (PDT) X-Received: by 2002:a05:6a21:a49:b0:3c3:88a5:83e4 with SMTP id adf61e73a8af0-3cd2ffbf358mr2916123637.10.1787262682982; Thu, 20 Aug 2026 14:51:22 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: matheus.bernardino@oss.qualcomm.com, Brian Cain , Pierrick Bouvier Subject: [PATCH v2 2/5] target/hexagon: fix HVX scatter/gather region-length check Date: Thu, 20 Aug 2026 14:51:14 -0700 Message-Id: <20260820215117.1788954-3-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260820215117.1788954-1-brian.cain@oss.qualcomm.com> References: <20260820215117.1788954-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=OqZ/DS/t c=1 sm=1 tr=0 ts=6a8776dc cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==: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=dpjYNSh0uHncNrtL9ygA:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODIwMDE2MyBTYWx0ZWRfX44gZeUcAgLRQ 4/VJCXEoSvplO06R9HCfifGsLCZ4UhpuqzOaPm1XFJh6sIEpYhUDG/hxj5rEbeIzfk3Aw40wnBd adVE8gUkdM/sIFPXZthHymJO9mQD73hztXrqS/ApBcM+A3SctZANFYsZKf5/JQQCUdlAKD7JS9U EFse0UCAjzf4NSDZSScapBv8HGdEvEZLBweTMfPV1I5i8J4qFBQ6AvcpvMKuSRRlfuckQHvgd/Y B0LElvH2VLlILUe6neeJzCut+4ZOtSLhdfVzP5CflameGgq9rpQI2qIPO6++2Je03VlxLFihXeM znuKjFOlonhuknHwxrtT3eJea9UxsFCoewJIhPAG/FDac+fKU/IjpAjezpzACVpoOtgrskFnN4/ 4imIQ+Y9Z8sCcw6a6JX4dZF/9QyE/18WescF3OaX8yfm/doKg5QNmTur9JU8SfgD5KS9XOOYzwZ hFBu93EdOHWpffj5JQA== X-Proofpoint-ORIG-GUID: 2t5xQAzf9ownW-PjrN9-PIC40BMEsFh0 X-Proofpoint-GUID: 2t5xQAzf9ownW-PjrN9-PIC40BMEsFh0 X-Proofpoint-Spam-Info: AW1haW4tMjYwODIwMDE2MyBTYWx0ZWRfX4mGX+QrWPulJ trU56NOVAFBZh+k3z109Mv5TP66YfWuosPewkFCYj9nGdw4IjCyyuehBynurZ16b5hCr340eqez gJziLT7Rubb60yt8QBv5yYjhs62xeYg= 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-20_02,2026-08-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 spamscore=0 malwarescore=0 clxscore=1015 adultscore=0 bulkscore=0 suspectscore=0 lowpriorityscore=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-2608200163 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: 1787262752681158500 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. Only load bytes for gather lanes that are kept. A dropped or predicate-false lane must not access memory and raise an exception. Signed-off-by: Brian Cain Reviewed-by: Matheus Tavares Bernardino --- target/hexagon/mmvec/macros.h | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/target/hexagon/mmvec/macros.h b/target/hexagon/mmvec/macros.h index e85beed3387..858afd995d9 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,15 +170,18 @@ 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; \ - uint8_t B; \ - B =3D cpu_ldub_data_ra(env, EA + i0, ra); \ - hexagon_mmvec_set_byte(&env->tmp_VRegs[0], \ - ELEMENT_SIZE * IDX + i0, B); \ + uint8_t B =3D 0; \ + \ + log_byte =3D in_region && QVAL; \ + if (log_byte) { \ + B =3D cpu_ldub_data_ra(env, va + i0, ra); \ + hexagon_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) @@ -250,10 +253,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 Fri Aug 21 21:27:04 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=1787262740; cv=none; d=zohomail.com; s=zohoarc; b=e6j/VQL+nPywlUXDd8c3W+brHX1RLA7XGDXxq8q18gy8yv0KH8NygbGlKrHc05OeRsctPZcYYD7mlqujxQZnqTaAmnul9anK3nMhoeNL8MmzCl0FCs7eWYj5xZ0FhviO2MWPL4Lfwcw+DdhJY4tlr/TCbvEgJW3FHk1U/6CGHt0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787262740; 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=76K5JaxcCaUW/aCr7s9nYRUR/tEisUjCuZr/p4Km2no=; b=eA5lXfe9rAaNRmAIB1W5y6IV4MD28klU2UXjCTNwXoweN7HDQEunzmnErNRFw53r4lQxzLBVHfmfKOdTMYAq5uMA5dkblFcfb47Ot0uZq0I/KDAT23NW/mqFauJ7RIsdCd8BcZWxHCFs9R6PAPyunzF2QAkjWm1cz3IJnX3IrA4= 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 178726274084378.30874176377358; Thu, 20 Aug 2026 14:52:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wxAfa-0003GM-Gi; Thu, 20 Aug 2026 17:51:30 -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 1wxAfY-0003FZ-3M for qemu-devel@nongnu.org; Thu, 20 Aug 2026 17:51:28 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wxAfW-0004Nb-9s for qemu-devel@nongnu.org; Thu, 20 Aug 2026 17:51:27 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67KK7jOV065830 for ; Thu, 20 Aug 2026 21:51:25 GMT Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g5yg0k2c1-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 20 Aug 2026 21:51:25 +0000 (GMT) Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-39512608fb1so609068a91.1 for ; Thu, 20 Aug 2026 14:51:25 -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-327d6168e5bsm9226899eec.1.2026.08.20.14.51.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 14:51:23 -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= 76K5JaxcCaUW/aCr7s9nYRUR/tEisUjCuZr/p4Km2no=; b=Rt8JLLHqCTqNSs/6 nVwdebnbCgecL+uPR1NckdxHpGboy4v6Gfyrb0rrhP1+uXCMg6n6IGeoEcdN7y7B B4GCVh+d3j3WlZEmTGW3vQS1bSy2p1nOtEgtSLjFmfahYp9e0kG4yV2/fO+m64VN wKeAm1ccdxyk1NUcV7NavMutids8R0ZhzN6xicMxHhybtG4hwx8/LQECwzZvUB/I 91dgH62AU72t8lGb/OcD+bqwjS+xWjMukBm4fEBvYpmJRLV0nkY3i8UafXAASR8r C6yebzhMm2Dh9xtU7fcHU/mGjbDQHfSEcfcrQ7JfjC/kgTe8nS6r/OPdqDU0kB0O CR5vjg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787262684; x=1787867484; 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=76K5JaxcCaUW/aCr7s9nYRUR/tEisUjCuZr/p4Km2no=; b=Ev6ltKKaxfuIuzsjlME1A0s6va2+l8SOe5hsBDcXpGgzm1kGYs5k2buENN7yF9VKgr IOm5bnB4/sSqyFRyHY+ZAzURj1oMWeY8fGd03iOvzfOkrVSVj6UOSmv/+0iIIeU4evs2 +4jvgDztK9OtQUyFS6DeDoDIfM6NSjsPkyVYwm55tzB6Rna46GmDvMmTKCVLSSSQ3YZ6 zEpAwUD3a8lA6qtpUJ9xfkLk+rNq1YknagQ+21C6BwmOYE14iQfxqVMiawNQNxdojiYD iYmF3ZRXYinP1M6XA+aDs5Vo4kjckPAjbT/eWAOdASszVvMTx9ngBh4SNGhMXJ9evFue Qa3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787262684; x=1787867484; 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=76K5JaxcCaUW/aCr7s9nYRUR/tEisUjCuZr/p4Km2no=; b=LvvYz5XbIZyk+NrBs6DRbRv4dzrwnZi0JYoS6EFO4EWX7lgqq0djmRfTr8jZSbmFvb WdpmWwow6wf6TV/FpGqYba51sOw8V3cPcN2r0crH9rEmShLJuz7e5tCaaLdZa7zAtnXJ 5cxsDaP45sijgIjbOZ4GqdU5Z9fwp/Sw5rVddRARCWK2CeA+TFb2ElcgBrl0Vd00zxrL MUKkaqV+CLuV3cje6WNT28UjKixM8Gr6zpQmFgC3bP2QpNLksAPy1PSQuCuD+QEC02Sk RQkUFqxoL11OF5oUpaneem1kGtkkPAEjlg/hWcbIYW4IZbFiMBtfjJF2oS0+BKwY8BZY gDTw== X-Gm-Message-State: AFuF++lUixKhWnUgWwegsnLuK4fG8libvJ5q7qgpgmniEnQj+22I8Y7R HrtTqxRvn/T8Cl85IvlREOCdsNepPA9WGYkSAsLkYdrXDWdTyE/xN70HDFILa400pmWvsH0WhOs Nf7Lh08hQjRqFKNeNQuGYYRnqJyGc9MkEyjraifIH1L113WBoU7m9UFr3bbEx6xRUog== X-Gm-Gg: AR+sD103l6/AijexjCQ0QzOjveqq/4iPxHqMJYFnw8WIfJbMoBr3Bbul90Mt/ClslAb Xqh6PCOUmmFxjXzMpLKo+I3rPYFVBm0tec/g2MJCapadsD8pw+Pe9y7cQWhjULq6Y2ZarAEWZzT 0cu6HL001DEWzaWFztKZ82y8l5bq27o+5yKHKy+Wtbvw4cHUPcOZG1KSf5LRnMPdCkoG/zmX2Ox fCbVejLyxUFlAjVhePmenv4rrx1wXewns41GtT6YJyo+QkUah7U7WfvzdBwq6X2pvC8U6gqVNzt utEjhHMRBJKf6SW3ft9SMOwrmZz/lC7WNgIUypoDAy6iRAVHSjmMZ+Hngw4wxF4GUMVlZWVvETk T+M9TC5rF1LWFx6ymUQdnrc0chZ4ZmkljsaY1F+IEGbmFRsrp X-Received: by 2002:a17:902:ec8a:b0:2d6:3c1a:85e0 with SMTP id d9443c01a7336-2d64b185640mr29124445ad.14.1787262684440; Thu, 20 Aug 2026 14:51:24 -0700 (PDT) X-Received: by 2002:a17:902:ec8a:b0:2d6:3c1a:85e0 with SMTP id d9443c01a7336-2d64b185640mr29123905ad.14.1787262684013; Thu, 20 Aug 2026 14:51:24 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: matheus.bernardino@oss.qualcomm.com, Brian Cain , Pierrick Bouvier Subject: [PATCH v2 3/5] tests/tcg/hexagon: add vgather/vscatter region-length tests Date: Thu, 20 Aug 2026 14:51:15 -0700 Message-Id: <20260820215117.1788954-4-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260820215117.1788954-1-brian.cain@oss.qualcomm.com> References: <20260820215117.1788954-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: IU-xxq6duuJxolUVSI9IU-yO9_mi25QM X-Proofpoint-ORIG-GUID: IU-xxq6duuJxolUVSI9IU-yO9_mi25QM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODIwMDE2MiBTYWx0ZWRfX2PDF7vdO9Yid en8t1SVCAgv5cChMI4M3971NS6ZH6RB1xg8LSf4W7fBTjvwK+Q7hGjIV7n/6NQsl+5URsEGwRAd YXY9V3tMxjuI9AW0Ok3I8V3c0J2xXwa/qqcaWAlsm35wSHj/L1gZdBJ+a3ZSaX6skZlkhJPlLY8 aGFcB9D8VnBSUWYnhQH9py8tS3N9lqzpZx/UP3JnO1yHv1jKB6n4OOzs+jrYzE2pD3KOR1G72cd HJRCSmiuBVXIUt1ZKaLjWCW4pYyxgp33e63vxBN4c2lBJx3Pe7RHzN91nwuiRxtEj+qNbvB4wd4 9lWTvfa01cLElgWQZJLP0JTeRFgec1b4M8C6OTPlHG3ncihT8aOnhkI5axC+PfVSB10hOVJyB0f ibw0aw10EQpOTUsnuJpIpapYxlM2uKn8MngrB7WZBL7PiQQhCfrEqW/b3SSs1WWSSCQ9ot5lQXp UPBM+TSM/BDYlRCIW6A== X-Proofpoint-Spam-Info: AW1haW4tMjYwODIwMDE2MiBTYWx0ZWRfX+I3F8aG8ED6G tkIzVOxYC7gda33liqh34nm1V22k+84/2MUeqixrAVSxVUx0aXYcUFib0jkdik6jxYrdiVNhRF8 oegiAWw434uU69QfV2hjSC5JZQqmGLA= X-Authority-Analysis: v=2.4 cv=JoXBas4C c=1 sm=1 tr=0 ts=6a8776dd cx=c_pps a=RP+M6JBNLl+fLTcSJhASfg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=0wXhRAlk9XZiN57P8QAA:9 a=QEXdDO2ut3YA:10 a=iS9zxrgQBfv6-_F4QbHw:22 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-20_02,2026-08-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 bulkscore=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 phishscore=0 adultscore=0 impostorscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608200162 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, 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: 1787262742725158500 Cover the case where an offset lies beyond the region length: it must be dropped rather than read/written. Place one dropped gather offset on a PROT_NONE page to verify that the instruction does not access memory for that lane. Signed-off-by: Brian Cain --- tests/tcg/hexagon/scatter_gather.c | 138 ++++++++++++++++++++++++++++- 1 file changed, 137 insertions(+), 1 deletion(-) diff --git a/tests/tcg/hexagon/scatter_gather.c b/tests/tcg/hexagon/scatter= _gather.c index bf8b5e03172..9b38b537af0 100644 --- a/tests/tcg/hexagon/scatter_gather.c +++ b/tests/tcg/hexagon/scatter_gather.c @@ -31,7 +31,11 @@ #include #include #include +#include #include +#include +#include +#include =20 typedef long HVX_Vector __attribute__((__vector_size__(128))) __attribute__((aligned(128))); @@ -85,6 +89,24 @@ 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 +#define GATHER_LEN_TEST_PAGE_SIZE 4096 +static unsigned char *gather_len_test_src; +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 +118,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 +877,112 @@ 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) +{ + unsigned char *mapping; + + mapping =3D mmap(NULL, 2 * GATHER_LEN_TEST_PAGE_SIZE, + PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + assert(mapping !=3D MAP_FAILED); + assert(mprotect(mapping + GATHER_LEN_TEST_PAGE_SIZE, + GATHER_LEN_TEST_PAGE_SIZE, PROT_NONE) =3D=3D 0); + gather_len_test_src =3D mapping + GATHER_LEN_TEST_PAGE_SIZE - 256; + + 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 256; + 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 +1163,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 From nobody Fri Aug 21 21:27:04 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=1787262740; cv=none; d=zohomail.com; s=zohoarc; b=UcFLtvVynQGCBM1H2+yt0wwOoP2R9LVhdVEKs7u34K/srOZ7JvngRkGvBXaEifoE0SiiHy2KguXMJujaIM2oNNS2E2nQrbLQyo+8iOjU3y4SpjzcFDmMah2bne/x8G7FemE0MWKQTfx1CeEuJ/SCm6lxqBXoeHGiAA8Uu4QJNHw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787262740; 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=tsSYe+63k6J5OlhEmdCWlt5jcQA5iUqgvN/87sBseE8=; b=ADy2afEdGtn0Ak9zUddZ6n3qv1OFcdziRBOmUMr7XhWfRGCG+su5ebLXUmXB4gCOAvCBPSlq70KcllZiWeEPm1/2grM8IqQEzKkmCApK4LKUXXMvvETCW45PTBN92NejN5chR4HsT/rilj7ULX1I7z991/bIFmvzROWh24pbx2Q= 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 1787262740398402.6715524600859; Thu, 20 Aug 2026 14:52:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wxAfb-0003Gs-Td; Thu, 20 Aug 2026 17:51:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wxAfa-0003GY-PK for qemu-devel@nongnu.org; Thu, 20 Aug 2026 17:51:30 -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 1wxAfZ-0004P4-4k for qemu-devel@nongnu.org; Thu, 20 Aug 2026 17:51:30 -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 67KK7Zuk4012740 for ; Thu, 20 Aug 2026 21:51:28 GMT Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g5x29kfbx-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 20 Aug 2026 21:51:27 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cfc52ddc55so5239535ad.3 for ; Thu, 20 Aug 2026 14:51:27 -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-327d6168e5bsm9226899eec.1.2026.08.20.14.51.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 14:51:24 -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= tsSYe+63k6J5OlhEmdCWlt5jcQA5iUqgvN/87sBseE8=; b=Yn3hQXhWq0tHVEEe qqYaTfT5G/ngHQgVpNL7zyjSD31hIlGAc/1hn4gn1sBUjs/GPDNZGiS/QFcoOx/T L36JdPkR8fZj9CC4IQzAraCGRa7CyNNLJoMYffg421Apfu4m3zBuqv969XC41zt2 T4XdXIatlswwSCJiClVmIDdjN9IyB3pqwdiFAk4Ms+BHjc4CpcfEFQusRZw5ISqk pIQGMpo9DZWppNk4/OWxvhLf/9Y1iq8rREEzIVi//ID3x1lyI4LCFak0NPv868n8 kDR8auNn06j4xDDJSaStYDtzUVkIaOCYFhJ14hUt6TCl5KRexgGNAgCSlhfBRiP/ c2AZwQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787262687; x=1787867487; 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=tsSYe+63k6J5OlhEmdCWlt5jcQA5iUqgvN/87sBseE8=; b=Eab1r9X1fNunYW4EEjyUsqD/D6Nr3QMxGopNSawpp0yqGdC+9Ca2LVdIQSnVukofXZ 6AqCETsQsTnkkQTcdUSw5ticwT5YrK+bLabGBCqPnUc359pWehDgmGHgNF4QV/rLUBsf DMt2lNU2VGWmAA9gMoPzY2cVRsRIIXNJYwFi/Jap8byQpJVUda8ozeBul8boE3Zxndyc Pi/vqdtQLcjE+5g5ndSEjn2E1vYxaNSR1SUT7Wi+CgAC8s8iN8Zo5MuLjxX4+/O9cFyX BmsOdSGCs8OzK2BUB4AnYuqKzMZlOqwH4b60sTTbB4cXtG9Up71reE81W+5DA/VtYubI YEDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787262687; x=1787867487; 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=tsSYe+63k6J5OlhEmdCWlt5jcQA5iUqgvN/87sBseE8=; b=b7AMIWIKppnfb0oF+xRTZxqJS9eBvCFDAnjenDLNDgnXyPHMLe2ZvC8WTRJM9Np7ks c5Xgyi6+QnEEeCwYKpIW/MgSwVU4fHa/PNHbPu5QEXSDCdxhnXWochAkbAMttiVKV5qr TVolbN61P8GKqxhdeKJjwS/GIQh3CL7+d9XNpsbwaurLxHpU83/KVUGrnvM5OgLiTgaO ixaXguhxnqjYJ6e4ePZF3Li6hFs/6KckHhueiCwNIq+EA3xZAUCQDCcu/MDj9uhmea8y 2036pr4wswUh3HImdakuBSqJlF/yW/Fe698QRGaAXWiTFzWhWyZiOeOhKqNGC2GQvVQ0 V/fw== X-Gm-Message-State: AFuF++mgkqAsab24zYXvfwHS4ojx1MtsHUY/t7lRpILYP4ynSsZMA4Ci kZB5s9arwZLmCr1Pz74PxzqKGEOQjSTCnNHS5yLaP1EweCD0SKNq01ODFik59rsfISbl6E5MmJO 3T3yAvi0mOH5A8eSuMpkeBB1uPj/O0piXyFGEWU4jbqajqRnbeZUR9WzhglrerEb83Q== X-Gm-Gg: AR+sD12/QY4+ZVxbtrJtJuCFDFWIYlEuOi2RWaSvCQfo8ul3Iez7vpRhl3SNpoMuOPx OZxyq/XJuMaF87KWq9gxmnOKZpgwt611Pn7zGJHleprU+d7xL3LzibCd4Dr5LpAVCoPIx/AaUkN snHFPkQDLXcjmcouuX2cfkGp8JSl/tNazkiYk5cfUXF1GqEZ4nXUHQBJHfiFJSXtNSbuWDt5nkQ wUojnDj4UHPvEMV5ou/VvEwhe038hS/XDosWwGXOlwTnGKerYH/bQUNWZftlHDyibsF8Ko1PHiV 1dB3bDYgn7+B84a4dozoP/HVSE3KtpY6BBvpl/LNBNgN8hMHl4pH4MuhujeYu7/Br5MscAlvlES zTCcTBF8H0r14+CtxlvthNCSsM+sKtI3Q6oJiQPM+EyGFR+8L X-Received: by 2002:a17:903:1206:b0:2c8:f34c:82c0 with SMTP id d9443c01a7336-2d64ada70b5mr28324845ad.2.1787262687034; Thu, 20 Aug 2026 14:51:27 -0700 (PDT) X-Received: by 2002:a17:903:1206:b0:2c8:f34c:82c0 with SMTP id d9443c01a7336-2d64ada70b5mr28324305ad.2.1787262686566; Thu, 20 Aug 2026 14:51:26 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: matheus.bernardino@oss.qualcomm.com, Brian Cain , Pierrick Bouvier Subject: [PATCH v2 4/5] target/hexagon: fix HVX predicate save size for histogram ops Date: Thu, 20 Aug 2026 14:51:16 -0700 Message-Id: <20260820215117.1788954-5-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260820215117.1788954-1-brian.cain@oss.qualcomm.com> References: <20260820215117.1788954-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: mhbBpmjGmGtWWp2wTdYd2ZC-8e0bFbly X-Authority-Analysis: v=2.4 cv=V8BNF+ni c=1 sm=1 tr=0 ts=6a8776df cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=Zn1cBpzFra9RJKnzaXUA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODIwMDE2MyBTYWx0ZWRfX29s39R3stAJI 2vugFP0I0wM+K9oMRCxEMjnMwAfL3bfae2vhAVy9CrzTkp37kppb/muu+y9dUBQHrW8aaZY0ROf qYB9H2VNQk1iWZu+mCWusqrIPriitW6xy5+97xRpoAjeZIO/Knpeyz62pNbV29TaeIM8GPhkt4q X1TBfAraTmbv3x1UtrLHT9+B1DfltP+bf7xbj5ni0acYySz8fLbUqxQ32y8aQcx1tvS2CzsBhRd JHbCu9PqKId1T/ibmg0LsCxaVsnoP9DEfsP0erIv8Oe2d/ytji0E9wwx8fRr8U+Erhy3Ku9iZXf lOM4ATuSbn0VMVLWxRsOGh0lAdgAPPfwtk9LMbY/vvVg6jKZxj19G+UN+zqt+esQYdZQT+FetCn U5JkmWJy6fQGX1xbXIR7h4vvUfnhVXeFNNjnJIjvLZuoQ5EdRTr+gHcLbnrPWYe4cLG/rqbWXuQ y5nHUAli/OmD5IJjoPg== X-Proofpoint-Spam-Info: AW1haW4tMjYwODIwMDE2MyBTYWx0ZWRfX9i+Q6igtmc9d j9ztsbRnKlSphZRIWANSc3Mom2ENxS4JotaQpeRndDfU1iI8bgGpnXwshZ0ay/xGB2iVnJhS4A+ +Cseif61PXTKC6DHG1Cot48TXovtr3U= X-Proofpoint-GUID: mhbBpmjGmGtWWp2wTdYd2ZC-8e0bFbly 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-20_02,2026-08-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 clxscore=1015 bulkscore=0 adultscore=0 lowpriorityscore=0 phishscore=0 spamscore=0 suspectscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608200163 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: 1787262741277158500 The masked histogram instructions save the predicate operand to the qtmp temporary with a gvec move sized sizeof(MMVector). Both source and destination are MMQReg, which is eight times smaller, so the move read 112 bytes past the predicate register and wrote them over the fields following qtmp in CPUHexagonState, that is vstore[0]. Use the size of the registers actually being copied. Signed-off-by: Brian Cain Reviewed-by: Matheus Tavares Bernardino --- target/hexagon/gen_tcg_hvx.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/target/hexagon/gen_tcg_hvx.h b/target/hexagon/gen_tcg_hvx.h index 2a342cdee69..d3f2cc7bc62 100644 --- a/target/hexagon/gen_tcg_hvx.h +++ b/target/hexagon/gen_tcg_hvx.h @@ -50,7 +50,7 @@ static inline void assert_vhist_tmp(DisasContext *ctx) if (ctx->pre_commit) { \ intptr_t dstoff =3D offsetof(CPUHexagonState, qtmp); \ tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \ - sizeof(MMVector), sizeof(MMVector)); \ + sizeof(MMQReg), sizeof(MMQReg)); \ } else { \ assert_vhist_tmp(ctx); \ gen_helper_vhistq(tcg_env); \ @@ -66,7 +66,7 @@ static inline void assert_vhist_tmp(DisasContext *ctx) if (ctx->pre_commit) { \ intptr_t dstoff =3D offsetof(CPUHexagonState, qtmp); \ tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \ - sizeof(MMVector), sizeof(MMVector)); \ + sizeof(MMQReg), sizeof(MMQReg)); \ } else { \ assert_vhist_tmp(ctx); \ gen_helper_vwhist256q(tcg_env); \ @@ -82,7 +82,7 @@ static inline void assert_vhist_tmp(DisasContext *ctx) if (ctx->pre_commit) { \ intptr_t dstoff =3D offsetof(CPUHexagonState, qtmp); \ tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \ - sizeof(MMVector), sizeof(MMVector)); \ + sizeof(MMQReg), sizeof(MMQReg)); \ } else { \ assert_vhist_tmp(ctx); \ gen_helper_vwhist256q_sat(tcg_env); \ @@ -98,7 +98,7 @@ static inline void assert_vhist_tmp(DisasContext *ctx) if (ctx->pre_commit) { \ intptr_t dstoff =3D offsetof(CPUHexagonState, qtmp); \ tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \ - sizeof(MMVector), sizeof(MMVector)); \ + sizeof(MMQReg), sizeof(MMQReg)); \ } else { \ assert_vhist_tmp(ctx); \ gen_helper_vwhist128q(tcg_env); \ @@ -115,7 +115,7 @@ static inline void assert_vhist_tmp(DisasContext *ctx) if (ctx->pre_commit) { \ intptr_t dstoff =3D offsetof(CPUHexagonState, qtmp); \ tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \ - sizeof(MMVector), sizeof(MMVector)); \ + sizeof(MMQReg), sizeof(MMQReg)); \ } else { \ TCGv tcgv_uiV =3D tcg_constant_tl(uiV); \ assert_vhist_tmp(ctx); \ --=20 2.34.1 From nobody Fri Aug 21 21:27:04 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=1787262740; cv=none; d=zohomail.com; s=zohoarc; b=DGpLkgn531xc7fhCE5TzxkufwXmEkxC03E3XIPGpEh79PKnmqjBwDgJIA5y3GwvCK0Ub7ilCl+f/ZS3CxKzqVf2aETfKIZT3Ay7RR57thUrgtAeJy6vZfhG+6ylnCPmtKat4o+blTdGyUpbc7xAt/c1tefY01DJipsFOTOWYS/A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787262740; 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=VRaZktLH6FSYAnvGOw4//fv/Pl+ly6gy7uH+narcn0w=; b=WPtLgZLZf3si/57urUKPIgkkAH9psVg/1drtb419xe251+MHnMbhQWVAUV50gouJBxVK3sgJJBP/YiQVucLe4CVK4Kgf5hVyDTXq5HNohkHSZtpvfJq2EClCBsW1WGdxdlYy/VM9AAmthsgPo05PuXR/PXABUUcHDz6MXlLFyII= 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 1787262740489216.3716140977259; Thu, 20 Aug 2026 14:52:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wxAfd-0003HR-Qb; Thu, 20 Aug 2026 17:51:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wxAfc-0003Gt-0I for qemu-devel@nongnu.org; Thu, 20 Aug 2026 17:51:32 -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 1wxAfa-0004PQ-4A for qemu-devel@nongnu.org; Thu, 20 Aug 2026 17:51:31 -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 67KK7pl03941376 for ; Thu, 20 Aug 2026 21:51:29 GMT Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g5vh7uv3g-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 20 Aug 2026 21:51:28 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cc15155cde2so294806a12.2 for ; Thu, 20 Aug 2026 14:51:28 -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-327d6168e5bsm9226899eec.1.2026.08.20.14.51.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 14:51:26 -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= VRaZktLH6FSYAnvGOw4//fv/Pl+ly6gy7uH+narcn0w=; b=Biw64PIFd0H9m5hB O7LlZJBlKtbCe+WnC1GucGvTrLIwRzAmpL3Vx+4iMCNFH8JtF7NhyOF9b8VkYV/E rrtTTercKTzMrjQuVABGf+bqoWW+dzxUG6R7oRgi3Kab+kOY8dj+C+F5nWt9ss6C tsVT7tJZ1/ShxFyy5uClI0011JqDJMW2TX/q6BjzjejHP/D0N06gGxdphaqH4nmR 7wPMvqrBdvoRkCVvyRQ2mhJmvco29UXPC7yXyVhBBPLXHfBtwZa4TMFqFFjn96nV //zM3k5WZ5I2iaGvXEQu76l/q8NSS8Ol9LKuStcG7EOGlKohOp/ytGflK3430N8d bZaStQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787262688; x=1787867488; 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=VRaZktLH6FSYAnvGOw4//fv/Pl+ly6gy7uH+narcn0w=; b=KEuFHxJzM4y2IO/WIJfDy1e77zZphl7OqP1S474C3TO06WjFi3k85dUzj1EIAvdFzG kHu16VrtOYF4XRpAYXhLvGxy+A0g3HI0wAxjmJ/ve904Nb1xlQ6Iq1C7Eio2lysxLr2x mKr9Jcz18rvyie5zy8MEWcEJBRc8NJQQMHFzVaL48ibfxaS661RdPk5uZiAIEBYXGbLw swQbrbK7lGKUFa4LQzyA6FQbEccC5W8J71KJ9QgO2tjHM/KV36NiTl7WPPo7+jH9gUU5 tEWKgo8CJVLOzHPhjhMul9d+nSIED0HQe6aYP3W6gkdE4n819e84Q2qBCzFetL2GHNUC KIqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787262688; x=1787867488; 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=VRaZktLH6FSYAnvGOw4//fv/Pl+ly6gy7uH+narcn0w=; b=LLyB9lxISBgg0vYbcXELvd4oXrj0n1P6Abxb0rW54KP9WY56EreSp0T1oyvYs1+O9t 2g7YsAPfK0O/1dkBBORNruMWRPOBjxdT7FcKv2T5dyVTbUtOogV3vQQSDDGBIp8jxyHw ltBnYqr8ulLqe6WRmKPtiuV/MvDveRGrmidUoScdZ8gAczmABwSvhvnOVMAiLVOnyFlr MtWqK+YsL+DC4Hy8O66RpH/vBmXjVMP0mGGoDOkc29VZZsEaN7Hbhc54Mq4lIJUyo7FV jGlNncEAn7sPtGMpLxwXWQJRek/ogUaG/4Gx4usrFSJeq8/uHXx4lM8KpqhtUz5K1bPL ZLNg== X-Gm-Message-State: AOJu0Yy5KVmIwxTrbhGBxEdS0VP3DLH++tfEnRPD9VWplt3sPCJsDN7m em7G13896OwOy8jcHFqA1M3aQFVPKmKCxznCHvq3jkBjlWVW/vja08l78AiasU1XoS2bcbm6suH xlJ16GdwTyy/9kOTPP424dxZxB8g6ame3GpecRl4ch8ZFy/YI0W9lKgvmZsQg1PSR/g== X-Gm-Gg: AR+sD10LulYB64M9ADHH/FaZjSxDEetQhq8uU4jVKhQgIIyec+Q3NA8t7/zPHdjIbls wfB7XmjH71SzfrOdgqsKudQ/zEuClcko5ij02atKhoCFtEAgKTEfPatO/UV+WBlhiV22RyaaDSe aWCh9rzC6uxr0iKDq5CViNwADjDAOUz8V/wJIdukOXjW23xZviym/s7FwGTKdvpuGIJ3QsX09Ch UiNRaS9sFpcyXYu3LkHcXAhAZJEpBju6CUBGNNGOjHiJgR3YhT6RlpQMqJl+GFNdedVPa7Z6L8q LcfRZOIhZelqKCG6mYhRKHulbdqCNZ3vIv9WeOzd6OTqvWEHLL0PUfQHT4RZjfcySQ6pSXO1nxF BZ3nuqRp8dGfFJCVvlNIoe+NI0NOt0CmW6choRaSgkI7gW6MQ X-Received: by 2002:a05:6a21:6001:b0:3cc:fb7d:a9ab with SMTP id adf61e73a8af0-3cd2fd8e99emr3094125637.2.1787262688165; Thu, 20 Aug 2026 14:51:28 -0700 (PDT) X-Received: by 2002:a05:6a21:6001:b0:3cc:fb7d:a9ab with SMTP id adf61e73a8af0-3cd2fd8e99emr3094064637.2.1787262687755; Thu, 20 Aug 2026 14:51:27 -0700 (PDT) From: Brian Cain To: qemu-devel@nongnu.org Cc: matheus.bernardino@oss.qualcomm.com, Brian Cain , Pierrick Bouvier Subject: [PATCH v2 5/5] tests/tcg/hexagon: check the two HVX predicate build paths agree Date: Thu, 20 Aug 2026 14:51:17 -0700 Message-Id: <20260820215117.1788954-6-brian.cain@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260820215117.1788954-1-brian.cain@oss.qualcomm.com> References: <20260820215117.1788954-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: AW1haW4tMjYwODIwMDE2MyBTYWx0ZWRfX86wavVP2X6s1 4Rt+eXxRyHor3JKI5cIId8OufzSCC+EqgsBAQZdPDv+EmFZ5mA/969e89qg+XpAg5iMOhfmbcKE WnGqWa1ZhKCm/PxkKA7CmVnipoulUCCi6RdR/y+xQUwXdedFr7qTk8bw7wDmmX7DVMhnRyu6gcw 0KetVGBU2vd9G55oO8aUW+K51KiRqtjFCOnMfoj2FfC3cCkQ+42J5DZ8HjYMlWBSNZNSkjI0Rm+ Xh4RJYBENMIvfbDHKACjJiumiupMTclBttIWq+D7e8pFpZGXVzy0wJ99LZVi0kTnfYwAbgbCVqy k6NPQdpVTKM3bZSWHue2WlNGOEzXjv9lari+O2vkZa4cIFEFYBSp3d1pfAoPXb+3T3YiNzSrFNF AdSM5+/qZ5x2ACrVV5ywXvw15Im2PuWibTblEE8rcDpDynu1kpGXe4TL1iNiS5bUeUfvco9W0X+ jdS+/BLIwT+cCcLXmUA== X-Proofpoint-ORIG-GUID: WtdSgLPJNYUQTxvXI0MmItbPLTyFZxHK X-Authority-Analysis: v=2.4 cv=Y7fIdBeN c=1 sm=1 tr=0 ts=6a8776e0 cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=jjHI2IJ3bfbFesgfRcwA:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwODIwMDE2MyBTYWx0ZWRfX2yzsP85L8bbo lbdgroFMVWgqnkPs4XzfU3jiTHovN9MHwY65DKKmGYGj6vgvE0n3hQx1f2g/aLYPIszq6zHLDQW VLK89R7Nq7NnkRa0L6KvwsmNSOORFSU= X-Proofpoint-GUID: WtdSgLPJNYUQTxvXI0MmItbPLTyFZxHK 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-20_02,2026-08-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 bulkscore=0 clxscore=1015 malwarescore=0 impostorscore=0 lowpriorityscore=0 spamscore=0 adultscore=0 phishscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608200163 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: 1787262742674158500 A Q reg can be built by a vector compare or by vand(Vu, Rt), and those reach the predicate register through independent code paths. Check that both select the same byte lanes, so a byte-order mistake in either one is caught. The input alternates every eight lanes: a flatter pattern stays unchanged when predicate bytes are permuted and hides the bug. Signed-off-by: Brian Cain --- tests/tcg/hexagon/hvx_misc.c | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tests/tcg/hexagon/hvx_misc.c b/tests/tcg/hexagon/hvx_misc.c index 32a3661a86f..225666137c9 100644 --- a/tests/tcg/hexagon/hvx_misc.c +++ b/tests/tcg/hexagon/hvx_misc.c @@ -181,6 +181,50 @@ static void test_store_unaligned(void) check_output_w(__LINE__, 2); } =20 +/* + * A Q register can be built either by a vector compare or by vand(Vu, Rt). + * Those are two independent code paths onto the same predicate-register + * layout, so cross-check that they select exactly the same byte lanes. + * A byte-order mistake in either one shows up here as a mismatch. + * + * The input pattern has to vary across 8-lane blocks, otherwise a predica= te + * whose bytes are permuted still selects the same lanes and the mismatch = is + * invisible. + */ +static void test_qreg_alias(void) +{ + HVX_Vector *pcmp =3D (HVX_Vector *)&output[0]; + HVX_Vector *pand =3D (HVX_Vector *)&output[1]; + HVX_Vector input; + HVX_Vector ones; + HVX_VectorPred qcmp; + HVX_VectorPred qand; + + for (int i =3D 0; i < BUFSIZE; i++) { + /* + * Build 0/1 per byte, alternating every 8 lanes, so that "!=3D 0"= and + * "low bit set" describe the same lanes. Then form one predicate + * with a compare and the other with vand(Vu, Rt), store 0xff thro= ugh + * each, and require the two result vectors to be identical. + */ + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES; j++) { + expect[0].ub[j] =3D ((j >> 3) + i) & 1; + } + memcpy(&input, &expect[0], sizeof(MMVector)); + memset(output, 0, 2 * sizeof(MMVector)); + + ones =3D Q6_V_vsplat_R(0xffffffff); + qcmp =3D Q6_Q_vcmp_gt_VubVub(input, Q6_V_vzero()); + qand =3D Q6_Q_vand_VR(input, 0x01010101); + Q6_vmem_QRIV(qcmp, pcmp, ones); + Q6_vmem_QRIV(qand, pand, ones); + + for (int j =3D 0; j < MAX_VEC_SIZE_BYTES; j++) { + check(__LINE__, i, j, output[0].ub[j], output[1].ub[j]); + } + } +} + static void test_masked_store(bool invert) { void *p0 =3D buffer0; @@ -579,6 +623,7 @@ int main() test_store_unaligned(); test_masked_store(false); test_masked_store(true); + test_qreg_alias(); test_new_value_store(); test_max_temps(); =20 --=20 2.34.1