From patchwork Sun Jan 28 17:50:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Tokarev X-Patchwork-Id: 767242 Delivered-To: patch@linaro.org Received: by 2002:adf:ee41:0:b0:33a:e5bd:fedd with SMTP id w1csp559325wro; Sun, 28 Jan 2024 09:54:49 -0800 (PST) X-Google-Smtp-Source: AGHT+IGrD1rKANnoYGK/anuGhHB0A1L1mlf/OJEnqFTsbsR1qZ03xjVL+oZcTK4aizgawEVvJgw5 X-Received: by 2002:a05:620a:c0b:b0:783:4f59:666f with SMTP id l11-20020a05620a0c0b00b007834f59666fmr3346100qki.14.1706464489683; Sun, 28 Jan 2024 09:54:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1706464489; cv=none; d=google.com; s=arc-20160816; b=GgDhYYLPj1djdq84d2oF/Hur2jJxkztNOvfdn+9DIryfnngHWh0T1C+fEqTGi1ql/I T1OMTls3frwPSDCxjXoykKpBwAvGpimTLOJOlGDM7KWWTpnEQp/iB3BZ5wtySH1A7Oj1 A9+CwprDTScJ9XI3JcUymFMj4kMda0p0XQtkDwVBPZYtMvWR+8Jk2c5GnIAS7jVmHocR YERak87rVLR/+FDSruMcjiTXPRUX/6s+w6rAOXfIw5y6qKmGiJsR0HGaDrEyaJKLo46c ckzVT34rqP4M5CKHLoISrEcMvjojLERNFpXD8/BuZw6gvY6l8LK7jrQR8uHlnzGwt+Nm n+eA== 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:cc:to :from; bh=f5cEzJi0TCodXxdxYk1ac8NKV3QE4Se8e6Zk7UhVEQY=; fh=xJ1URYKcMN3TM0/XAv5v+aCN+5tIbzAdcfBx5UNgoLw=; b=Rts9YyKYgHCzS7COiepYURW7MRW9BMcgISImelj+/89Vkorm0D6nKLQZElsJMEGWeR 8Tdkr84P+Y4L7ff7K8nRCL5nDPcSB82clW3l+1YQHejXSexDOl5CW+B/5OkkG2RBczNk YPx8uTqBjmnFuzOnaItoVUW954HIm51BV1VU4GzCYsZHk3NqFbujb/DI1vGv9Z1hd2vC 6szFjM7Z5myvQ0v4/y9x2PSA607TQfQJGXObrDYo+gJ1lNjV0TfKS6jHGJxsTOq/JVmL I78aY/HpwVRdzV4QlPhcGb0S//t9i8dhJGA4URyDAucEXngzP+439PLxUg2T9v/ca+q5 Xl/g== ARC-Authentication-Results: i=1; mx.google.com; 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" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id e24-20020a05620a209800b0078309bb963asi3596836qka.304.2024.01.28.09.54.49 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 28 Jan 2024 09:54:49 -0800 (PST) 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; 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" Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rU9KQ-0008Lq-SK; Sun, 28 Jan 2024 12:52:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rU9K2-0005FL-Gq; Sun, 28 Jan 2024 12:51:58 -0500 Received: from isrv.corpit.ru ([86.62.121.231]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rU9Jz-0001Am-S5; Sun, 28 Jan 2024 12:51:58 -0500 Received: from tsrv.corpit.ru (tsrv.tls.msk.ru [192.168.177.2]) by isrv.corpit.ru (Postfix) with ESMTP id D389448113; Sun, 28 Jan 2024 20:51:35 +0300 (MSK) Received: from tls.msk.ru (mjt.wg.tls.msk.ru [192.168.177.130]) by tsrv.corpit.ru (Postfix) with SMTP id 81BCD6D52F; Sun, 28 Jan 2024 20:50:44 +0300 (MSK) Received: (nullmailer pid 812449 invoked by uid 1000); Sun, 28 Jan 2024 17:50:35 -0000 From: Michael Tokarev To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org, Peter Maydell , Richard Henderson , Michael Tokarev Subject: [Stable-8.2.1 70/71] target/arm: Fix A64 scalar SQSHRN and SQRSHRN Date: Sun, 28 Jan 2024 20:50:33 +0300 Message-Id: <20240128175035.812352-16-mjt@tls.msk.ru> X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Received-SPF: pass client-ip=86.62.121.231; envelope-from=mjt@tls.msk.ru; helo=isrv.corpit.ru X-Spam_score_int: -68 X-Spam_score: -6.9 X-Spam_bar: ------ X-Spam_report: (-6.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org From: Peter Maydell In commit 1b7bc9b5c8bf374dd we changed handle_vec_simd_sqshrn() so that instead of starting with a 0 value and depositing in each new element from the narrowing operation, it instead started with the raw result of the narrowing operation of the first element. This is fine in the vector case, because the deposit operations for the second and subsequent elements will always overwrite any higher bits that might have been in the first element's result value in tcg_rd. However in the scalar case we only go through this loop once. The effect is that for a signed narrowing operation, if the result is negative then we will now return a value where the bits above the first element are incorrectly 1 (because the narrowfn returns a sign-extended result, not one that is truncated to the element size). Fix this by using an extract operation to get exactly the correct bits of the output of the narrowfn for element 1, instead of a plain move. Cc: qemu-stable@nongnu.org Fixes: 1b7bc9b5c8bf374dd3 ("target/arm: Avoid tcg_const_ptr in handle_vec_simd_sqshrn") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2089 Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson Message-id: 20240123153416.877308-1-peter.maydell@linaro.org (cherry picked from commit 6fffc8378562c7fea6290c430b4f653f830a4c1a) Signed-off-by: Michael Tokarev diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index a2e49c39f9..f2d05c589c 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -8221,7 +8221,7 @@ static void handle_vec_simd_sqshrn(DisasContext *s, bool is_scalar, bool is_q, narrowfn(tcg_rd_narrowed, tcg_env, tcg_rd); tcg_gen_extu_i32_i64(tcg_rd, tcg_rd_narrowed); if (i == 0) { - tcg_gen_mov_i64(tcg_final, tcg_rd); + tcg_gen_extract_i64(tcg_final, tcg_rd, 0, esize); } else { tcg_gen_deposit_i64(tcg_final, tcg_final, tcg_rd, esize * i, esize); }