From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B6789C4338F for ; Thu, 29 Jul 2021 11:26:09 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6D7F160527 for ; Thu, 29 Jul 2021 11:26:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 6D7F160527 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=nongnu.org Received: from localhost ([::1]:49556 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m94Ay-0004Xi-KA for qemu-devel@archiver.kernel.org; Thu, 29 Jul 2021 07:26:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39704) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m940d-0000D1-Mk for qemu-devel@nongnu.org; Thu, 29 Jul 2021 07:15:27 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]:39881) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m940W-0000y3-95 for qemu-devel@nongnu.org; Thu, 29 Jul 2021 07:15:27 -0400 Received: by mail-wr1-x42f.google.com with SMTP id b11so1107200wrx.6 for ; Thu, 29 Jul 2021 04:15:19 -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=AdQbpZh4Nsn4ZEWXMN8/5MXfv9l4tGOGQ949NSeXfXg=; b=leis0gb/ZagYqBhoF55uD2lsIcnPdessnkG1zNgwKzmkH+5NePet1CdV0o8JWIkN/+ m2B7xWgpsjV2DurZkQCsNA7Bp0nqWhS4JS01xZXTqZChLxGA4xwGhijOD75x/fGigxkA yOqw8BmqA8hT/rotU7L2IBbtP4ognFNezVRT+UUOeW5Zpql2tuIiavjryyckkvCseSN2 Xkv8l6yx1IyE+fNWN652Bdpf6dwpuJ8aAd1NT8hZWNS5JVvdkANZw0oWdUUD71yAHXg1 hjtAtg4Uj3ivDoOrMcNabeI0XfLjZYlF2+Tnbx40yQs0ZE26xNIudcCFiTPN3DsmXayQ eQdA== 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=AdQbpZh4Nsn4ZEWXMN8/5MXfv9l4tGOGQ949NSeXfXg=; b=CzGgwHKwzXXB1XbYdcAb58Ad+apcS1/3fmqnl881Ifytp4aW22PMVyABVU8ndqCkvy osax3jWZk8UMp7qJ3BIN92WuSqTkm7JwVKC+Yk2zfuzMv/SmRW6Fm3t4xyiApuNuwVnV LH9bO2ONmzwMpEjcHD6RpINFM3iwV8/FKPu5+K3CDcYI47y8I55PLESrHvWFXNOhj4Vm dvdqQsMcOABHtVuCPW5imv9/dmReI3DoxfvERAt6v9iCT8H0c36K9ACG/GWQ4MxxP+uf FkzTFm20/2fVUt2nmyu3xxJQS5YodUe1OUvbnp21imM54G16NbnhaHwH8wINKG/ZOL1k HXxA== X-Gm-Message-State: AOAM532lzXngNHBjAf/sDrmbqSIXjP/4KkNO/Umx1cabbI7b4hZ4g3J+ iPb8Ynow8rbgMf5qf9cDE42jqA== X-Google-Smtp-Source: ABdhPJxxQE+HWqL6XKvd1+d1FHZjVC7sKN03FkZYpAUJ9IGA74nzYXzW9IqngL5PbA6b5BoJ+Mzc4A== X-Received: by 2002:a5d:61c8:: with SMTP id q8mr4188401wrv.151.1627557318849; Thu, 29 Jul 2021 04:15:18 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id j140sm3037829wmj.37.2021.07.29.04.15.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Jul 2021 04:15:18 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH for-6.2 05/53] target/arm: Fix mask handling for MVE narrowing operations Date: Thu, 29 Jul 2021 12:14:24 +0100 Message-Id: <20210729111512.16541-6-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210729111512.16541-1-peter.maydell@linaro.org> References: <20210729111512.16541-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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=unavailable 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" In the MVE helpers for the narrowing operations (DO_VSHRN and DO_VSHRN_SAT) we were using the wrong bits of the predicate mask for the 'top' versions of the insn. This is because the loop works over the double-sized input elements and shifts the predicate mask by that many bits each time, but when we write out the half-sized output we must look at the mask bits for whichever half of the element we are writing to. Correct this by shifting the whole mask right by ESIZE bits for the 'top' insns. This allows us also to simplify the saturation bit checking (where we had noticed that we needed to look at a different mask bit for the 'top' insn.) Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/mve_helper.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/target/arm/mve_helper.c b/target/arm/mve_helper.c index 82151b06200..847ef5156ad 100644 --- a/target/arm/mve_helper.c +++ b/target/arm/mve_helper.c @@ -1358,6 +1358,7 @@ DO_VSHLL_ALL(vshllt, true) TYPE *d = vd; \ uint16_t mask = mve_element_mask(env); \ unsigned le; \ + mask >>= ESIZE * TOP; \ for (le = 0; le < 16 / LESIZE; le++, mask >>= LESIZE) { \ TYPE r = FN(m[H##LESIZE(le)], shift); \ mergemask(&d[H##ESIZE(le * 2 + TOP)], r, mask); \ @@ -1419,11 +1420,12 @@ static inline int32_t do_sat_bhs(int64_t val, int64_t min, int64_t max, uint16_t mask = mve_element_mask(env); \ bool qc = false; \ unsigned le; \ + mask >>= ESIZE * TOP; \ for (le = 0; le < 16 / LESIZE; le++, mask >>= LESIZE) { \ bool sat = false; \ TYPE r = FN(m[H##LESIZE(le)], shift, &sat); \ mergemask(&d[H##ESIZE(le * 2 + TOP)], r, mask); \ - qc |= sat && (mask & 1 << (TOP * ESIZE)); \ + qc |= sat & mask & 1; \ } \ if (qc) { \ env->vfp.qc[0] = qc; \ -- 2.20.1