From patchwork Sun Jun 11 16:00:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 691381 Delivered-To: patch@linaro.org Received: by 2002:a5d:4d8a:0:0:0:0:0 with SMTP id b10csp1693903wru; Sun, 11 Jun 2023 09:04:28 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7EDH62dZgJh/GwunlJWC+N9e6X2FnQIlgAnM0jwDrPh8K0KENDO7NSVi47v6AACoJ8ZijX X-Received: by 2002:a67:eb8e:0:b0:43b:27e7:47e1 with SMTP id e14-20020a67eb8e000000b0043b27e747e1mr1823748vso.31.1686499468152; Sun, 11 Jun 2023 09:04:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686499468; cv=none; d=google.com; s=arc-20160816; b=DaYpCyn1RjXJz6zp/+4di587qxa7EwtmS6JocneKEg+fMXHQFHH1h0pGPIJcYACoiC 5dQEQ6AzmlCEKYEjTARAbf/z3pW3r5h+AT0D87R8ndPNe6t8D287lTplki/sRBVTOKPU 1+FOD/ZkeMROCaU2dDfR0sQZDvvr1VmTx4binNG+fuooCfDSb+jPajrVUi9DFrJOV76W WToaG+cNqBmadDX+ab11qZ/4QDM8Jq8AZxwLA71HjNp191qUqBkOZ5ldvmmMOq0Kl5VN 8/gHhw06kg6ogcG5/HJ3V+jDfkNu/1eSFYAovO6qiI36LIta4DQ5lkvVpdHwfLkNu0wa w6xQ== 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=QYoLjQUBzDtsQLiewQeHZyMx2G0pXSiMumiEHL4MRBM=; b=NoSnX0ZK1u7Jaf2wnigCyc0UKjQaeYtZsaSqUUuXpR1ZRUvmSjhQpQnkMja80Tx3+q A6jw1m5QRNdsskSB5fkBraqchMDVRjc/FfpHopHDxaOc64VCnuySmjxvBQXiQYTIBjR0 KMrMIZ4UpoKzb11H3Mw4ZL+BP+SFyt6RmV11BPgnYWhh0Vm2cMWQNLiNrvFT5j+9dyBs dhyCdN8PG0JBYh05WY+CcRuvyPnkHEpOC5CM95vZk4XmUFJb30r/fvubbsZ9iNs/Jjbl W3h72lpnxEzjHYHyei3wEenIBpFdBun0M7YpSBWLA/a/32hLT6ExmTb1BzL+t84u2Ujw dCIw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=mcCaaGOR; 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 bl8-20020a056102508800b0043b49c27283si505978vsb.385.2023.06.11.09.04.28 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 11 Jun 2023 09:04:28 -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=mcCaaGOR; 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] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q8NVc-0006Sv-7O; Sun, 11 Jun 2023 12:01:40 -0400 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 1q8NUg-0005pe-CJ for qemu-devel@nongnu.org; Sun, 11 Jun 2023 12:00:49 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q8NUc-0000R5-6x for qemu-devel@nongnu.org; Sun, 11 Jun 2023 12:00:41 -0400 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-3f7fcdc7f7fso22690945e9.0 for ; Sun, 11 Jun 2023 09:00:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1686499234; x=1689091234; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=QYoLjQUBzDtsQLiewQeHZyMx2G0pXSiMumiEHL4MRBM=; b=mcCaaGORXLo8u5KAwAVL5dLyFA6eMej5XUaOFzf6IxmKNQOB5DKtc3BgaYWNqz8k1G 02Yb44mXos0nErkqy7h9llSFN2L9nxPLOIeNGdvedR7748a6Tpn+Ie2RjsNqBkNuUxT3 Oa0JVh8SlpFjzVFD0OthX2Ek2ZgPuDqlRZgO/1oyfJGJ/jl0YNmMdhHsngA6Yo3sTRcs QxQDP7u1Ai/fjrXeIrEFLuwodnvFI4voNWMYax/F3CEnaUsAm1010AHoHLEST6i5st2i EqX33OSdOZczgw1hTfkmB0Cm6LsGnB6MDKIGwLVlRDO2ukn9CxLvS0H3oJudPxinbg33 D1JQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686499234; x=1689091234; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QYoLjQUBzDtsQLiewQeHZyMx2G0pXSiMumiEHL4MRBM=; b=Cw9i3GubXQR405CZ61Wg3Y/KejbyQMMQnIoPryv/g0TPtDY4C0UUZdq7ZcZNuC5WhM /CEdkoudF+FUAFJO5P8wKLM57gXbvKZ4AmavGKtY/YSoha8HHu1kC/aG6Hb3Y//vjFGf yUi10aftqjpAz23ItrM5aBnCRxoZ0Hl+wI+F2dKZvPXKddjpfX4hsqQbOiT1wtfJRycC 0ldC7LARrXEY+NErcc2sA5L+ByTZ4VXC4XSbuiYzXDrDaffKoLllVhjt34Zs7Igi41HS NIhHFEKUNePgB2DMzwFBvz//ArIXgnnu0jCNV2O8Xwe+v6eSIj7FJHfH93iORbtWY9BV dwQg== X-Gm-Message-State: AC+VfDyJ2rb/lqogQO/ncboCM8M0lJS+ZuivHeZO6XCsW19D8p2RfXFB FR9o0BYRjADpevDE70M+mj9s20Zt86BQQbDzDzI= X-Received: by 2002:a5d:5265:0:b0:30f:b0de:f100 with SMTP id l5-20020a5d5265000000b0030fb0def100mr3240746wrc.23.1686499234418; Sun, 11 Jun 2023 09:00:34 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id m9-20020a056000008900b0030ae499da59sm9923022wrx.111.2023.06.11.09.00.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 11 Jun 2023 09:00:34 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 01/23] target/arm: Fix return value from LDSMIN/LDSMAX 8/16 bit atomics Date: Sun, 11 Jun 2023 17:00:10 +0100 Message-Id: <20230611160032.274823-2-peter.maydell@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230611160032.274823-1-peter.maydell@linaro.org> References: <20230611160032.274823-1-peter.maydell@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::32a; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32a.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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 The atomic memory operations are supposed to return the old memory data value in the destination register. This value is not sign-extended, even if the operation is the signed minimum or maximum. (In the pseudocode for the instructions the returned data value is passed to ZeroExtend() to create the value in the register.) We got this wrong because we were doing a 32-to-64 zero extend on the result for 8 and 16 bit data values, rather than the correct amount of zero extension. Fix the bug by using ext8u and ext16u for the MO_8 and MO_16 data sizes rather than ext32u. Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson Message-id: 20230602155223.2040685-2-peter.maydell@linaro.org --- target/arm/tcg/translate-a64.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index aa93f37e216..246e3c15145 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -3545,8 +3545,22 @@ static void disas_ldst_atomic(DisasContext *s, uint32_t insn, */ fn(tcg_rt, clean_addr, tcg_rs, get_mem_index(s), mop); - if ((mop & MO_SIGN) && size != MO_64) { - tcg_gen_ext32u_i64(tcg_rt, tcg_rt); + if (mop & MO_SIGN) { + switch (size) { + case MO_8: + tcg_gen_ext8u_i64(tcg_rt, tcg_rt); + break; + case MO_16: + tcg_gen_ext16u_i64(tcg_rt, tcg_rt); + break; + case MO_32: + tcg_gen_ext32u_i64(tcg_rt, tcg_rt); + break; + case MO_64: + break; + default: + g_assert_not_reached(); + } } }