From patchwork Mon Jun 28 13:58:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 467987 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp4011496jao; Mon, 28 Jun 2021 07:00:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwFFjGeyPw0KbIYbkSwkPaxKEPRinK2yZ5pxLUqhboycyYbsgx6wp9hlbAaZ0zJpFxIKk3/ X-Received: by 2002:a92:dc48:: with SMTP id x8mr19080890ilq.213.1624888821883; Mon, 28 Jun 2021 07:00:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624888821; cv=none; d=google.com; s=arc-20160816; b=n1Zo27m+szDBDWTRPZSSEYJUl5DaoMgX6s5Sx+JRDxKb67S0sRAm0B1nxdhfwj4oeH 2t5I9gNaMZvUygHbE0OCIOZWIUfn4oZ9kmMeUauJiQzcs3FHceWSDmXswOVPVW6Tdv3N Rv4Vci+vWbnQvt8GzHyljWEF+sgKaPVqbjTupEQgm2fi+ag2RjbcefvnWf2OX/Z757fP c8DBqV5SvaLi8eTMly6kRVGdC0tDR9atkICjs/1UmANy8ezXwVw+jLfFJfM2qpdy4T+M 6KaBvd1nyTMMznnPGXysRl885qZXPZn6q+4qI9aPSLnn81KKfEAGzUjCgC0Bh2pZ4uj8 iAvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=UtewGl0K+eTZVJgD9VxEV2gHGwexdZngsmOi5Ju2Gis=; b=S7njBsuJ4Jdoi1auUmZsJMULEJCTDxDavf0Hdy3S+RpguYlDwamaaPLR5SH+Ueh74e nB5HX7LifqyTdolB03gxdjXCCnyzjQA8ENYrQ0Be46nwMYcs2xKQimvhidkF173/Fvfw SBRikJF7TA247aiAuy+Z9SO1XbAvO3c8hmMOxVLIftFucxp79C3XYrM2Oa5WmsTE/L1n kBxH0QbgnBItzvBmUMFMCvy/HW5qpc8BKJV9ttwx8XFbXNDam2yDmodTyDZh4b1XHhEi GrVxXgrjVyRyMAebFk6/KHl+rRcP+iVcvz69ynj1KFKwYhckNt/T7Ig9qkT05QUKtL1P QkTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=fGwRW3zy; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id i8si2813963iow.77.2021.06.28.07.00.21 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 28 Jun 2021 07:00:21 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=fGwRW3zy; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:50572 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lxroD-0002mQ-5E for patch@linaro.org; Mon, 28 Jun 2021 10:00:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48590) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lxrme-0002hS-LL for qemu-devel@nongnu.org; Mon, 28 Jun 2021 09:58:44 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:44606) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lxrmZ-0005zq-Na for qemu-devel@nongnu.org; Mon, 28 Jun 2021 09:58:44 -0400 Received: by mail-wr1-x42f.google.com with SMTP id u11so21376162wrw.11 for ; Mon, 28 Jun 2021 06:58:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=UtewGl0K+eTZVJgD9VxEV2gHGwexdZngsmOi5Ju2Gis=; b=fGwRW3zy44IjsK6sXnWBbTZ82bAIFLIV+QKEu+9xufiAl+7uZX4m8Y1mXNKjLWhA7E Ue8d5CMrIqFyOAtSSiPDFCmdhKhLcdGgAq0pL1k4dNPO95FNLMfW2y2JkvTOLp02tk7u 2JKfHxxhlWw8nPonv8M723e10ka1ipW4nUvRb34VY2BGK+hWmWA9GtqcTbDt19b5EETt OEcUbNm40I8HVUCteo+0XQhjrI3UjkL+whv7nHBeQZPUveYxaYBr6VsE2UBByX1tDCs2 A2SZSFRlR7lwC5n/scRfIdY8+rkriAOaVi4BUBGfgvzol7HaLsuBL7Mv11V+9IbxBCYa g/3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UtewGl0K+eTZVJgD9VxEV2gHGwexdZngsmOi5Ju2Gis=; b=gFvCRaLExFWXNCdFsBGfGc+VGZz6SbwEGG/7DL2zgptO4P7q8dARuXvJJr9UsyuE4a lC6mFLoq8MhBh0vit20rZON9qhc0zGfo2yhnneQiy/a4WBJpwtY32NHiRDKtBHuVjNPJ vTrSDBIps4VxNsHizy5Tzi8Hr/eJ0YrYgxxv0meWsiOj2jL5xorhZcuyxEOvOWQFYUKI p+vk7OF745ezP83H9+g/IqPHddCopLb2dqOcpooRHx7Uxt56Df6ZCi3IhTuA6jVmEvCs jTWtwAoZcn2hPki+HxTiweABk7A4+8jtvIcRN9iOLFhpBqMJqjSKEAljTzgeBiMDPY2U 7pSA== X-Gm-Message-State: AOAM533SEDQobzjbe3hALB/I4eIlEuUESqV6pZrjASxeZaZHRBWBs7rk 7Q0/WN/zGknjvE6Y3tesery6QrPJCm9nZoB1 X-Received: by 2002:adf:f84a:: with SMTP id d10mr26653006wrq.34.1624888718277; Mon, 28 Jun 2021 06:58:38 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id d12sm12047627wri.77.2021.06.28.06.58.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Jun 2021 06:58:38 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 01/18] target/arm: Fix MVE widening/narrowing VLDR/VSTR offset calculation Date: Mon, 28 Jun 2021 14:58:18 +0100 Message-Id: <20210628135835.6690-2-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210628135835.6690-1-peter.maydell@linaro.org> References: <20210628135835.6690-1-peter.maydell@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::42f; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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_NONE=-0.0001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" In do_ldst(), the calculation of the offset needs to be based on the size of the memory access, not the size of the elements in the vector. This meant we were getting it wrong for the widening and narrowing variants of the various VLDR and VSTR insns. Signed-off-by: Peter Maydell --- target/arm/translate-mve.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/target/arm/translate-mve.c b/target/arm/translate-mve.c index 67462bdf27d..e9a5442a724 100644 --- a/target/arm/translate-mve.c +++ b/target/arm/translate-mve.c @@ -120,7 +120,8 @@ static bool mve_skip_first_beat(DisasContext *s) } } -static bool do_ldst(DisasContext *s, arg_VLDR_VSTR *a, MVEGenLdStFn *fn) +static bool do_ldst(DisasContext *s, arg_VLDR_VSTR *a, MVEGenLdStFn *fn, + unsigned msize) { TCGv_i32 addr; uint32_t offset; @@ -141,7 +142,7 @@ static bool do_ldst(DisasContext *s, arg_VLDR_VSTR *a, MVEGenLdStFn *fn) return true; } - offset = a->imm << a->size; + offset = a->imm << msize; if (!a->a) { offset = -offset; } @@ -178,22 +179,22 @@ static bool trans_VLDR_VSTR(DisasContext *s, arg_VLDR_VSTR *a) { gen_helper_mve_vstrw, gen_helper_mve_vldrw }, { NULL, NULL } }; - return do_ldst(s, a, ldstfns[a->size][a->l]); + return do_ldst(s, a, ldstfns[a->size][a->l], a->size); } -#define DO_VLDST_WIDE_NARROW(OP, SLD, ULD, ST) \ +#define DO_VLDST_WIDE_NARROW(OP, SLD, ULD, ST, MSIZE) \ static bool trans_##OP(DisasContext *s, arg_VLDR_VSTR *a) \ { \ static MVEGenLdStFn * const ldstfns[2][2] = { \ { gen_helper_mve_##ST, gen_helper_mve_##SLD }, \ { NULL, gen_helper_mve_##ULD }, \ }; \ - return do_ldst(s, a, ldstfns[a->u][a->l]); \ + return do_ldst(s, a, ldstfns[a->u][a->l], MSIZE); \ } -DO_VLDST_WIDE_NARROW(VLDSTB_H, vldrb_sh, vldrb_uh, vstrb_h) -DO_VLDST_WIDE_NARROW(VLDSTB_W, vldrb_sw, vldrb_uw, vstrb_w) -DO_VLDST_WIDE_NARROW(VLDSTH_W, vldrh_sw, vldrh_uw, vstrh_w) +DO_VLDST_WIDE_NARROW(VLDSTB_H, vldrb_sh, vldrb_uh, vstrb_h, MO_8) +DO_VLDST_WIDE_NARROW(VLDSTB_W, vldrb_sw, vldrb_uw, vstrb_w, MO_8) +DO_VLDST_WIDE_NARROW(VLDSTH_W, vldrh_sw, vldrh_uw, vstrh_w, MO_16) static bool trans_VDUP(DisasContext *s, arg_VDUP *a) {