From patchwork Fri Sep 6 11:12:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Tokarev X-Patchwork-Id: 825936 Delivered-To: patch@linaro.org Received: by 2002:adf:a345:0:b0:367:895a:4699 with SMTP id d5csp746098wrb; Fri, 6 Sep 2024 04:19:32 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUY3kCen04Yv5V8fP/UbK/zpvtI8vExwJJy5u8f38YnB4ZTTgiivjTw1aMGwGvLRSecQ63C8g==@linaro.org X-Google-Smtp-Source: AGHT+IHooJZm6RZEHeZbqF3dLEXXKh8nBnLUWCALHjxG1XMfqbdBM2WzHlFQFEI/G87b+Iqv8vBq X-Received: by 2002:a05:620a:17a7:b0:79d:55f0:d092 with SMTP id af79cd13be357-7a997326ef2mr285838185a.8.1725621572322; Fri, 06 Sep 2024 04:19:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725621572; cv=none; d=google.com; s=arc-20240605; b=S2wk7GX2XEjAwqbBPrvXtNacOsg1gyctrbzpfmbFYUtBrNc6oFqwYlDoDjopEkApCg bK++3xz+pNKcO+mlK/aq/XweCCWsiav6oYTSSmlJlIGD9H7tlD0prI5h0AwFh+zg0tz0 Bqxjc4ieqvptp0AoW9GYRK8v8Tn8HJX6cQLftWr6JjVkx6Pu8fyENbD/qZ8sedcm4IOc k2YzqYaXnZSKc3f6CL3LPWgl00LYEl8wDDJUAsUogYZeuf4pLMZTQDcULebsM0FN+kMl BVOPlILsi9WElFkT3xMSEWzTScfrdtF/Sk0XtJtTmsIqzZqRb07pMcyhXrrus/SApbLF o1NA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=n27VxaASKisTka2Xg9LM+6ajDouYxMxIIcJz3kE/bt0=; fh=xJ1URYKcMN3TM0/XAv5v+aCN+5tIbzAdcfBx5UNgoLw=; b=DqkYruf1+FvPZ3Y6vSfeyiy6OzmQCcnc1rq+PqvflEaJA2JmHHWw9+frAkTP5/zmgM AGhKDlWvGvWAS6e5SLG0VJPA+BSU/prilXfUBSJk/nHCed15epREOruzEfYBAMdDUnGU lKDofbQT/xz6a/XmiGaukvEhjiiFGeNNWsQRK9pbSXQsJ8gKer+6hfDOzzzQgqWopKge ki1FushKKvoby9eE6hx4wnkPzZTBssFxZxu/zYKYmJFBZqKbRRFm4ixRGf6fHwvsxrcH jLeMrr5uT/tuAYnMdwxyJos+Aimh9mO9KGbDGSBBduk7n/V+9NYw181MPrHHbmB3Zwul +ZfA==; dara=google.com 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 af79cd13be357-7a9a1068db3si5776385a.287.2024.09.06.04.19.32 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 06 Sep 2024 04:19:32 -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; 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 1smWxY-0007pt-53; Fri, 06 Sep 2024 07:17:00 -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 1smWwF-0001yL-2s; Fri, 06 Sep 2024 07:15:45 -0400 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 1smWwB-0007zB-KJ; Fri, 06 Sep 2024 07:15:38 -0400 Received: from tsrv.corpit.ru (tsrv.tls.msk.ru [192.168.177.2]) by isrv.corpit.ru (Postfix) with ESMTP id 3700E8C489; Fri, 6 Sep 2024 14:12:08 +0300 (MSK) Received: from tls.msk.ru (mjt.wg.tls.msk.ru [192.168.177.130]) by tsrv.corpit.ru (Postfix) with SMTP id 43F501336F3; Fri, 6 Sep 2024 14:13:26 +0300 (MSK) Received: (nullmailer pid 353621 invoked by uid 1000); Fri, 06 Sep 2024 11:13:24 -0000 From: Michael Tokarev To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org, Peter Maydell , Richard Henderson , Michael Tokarev Subject: [Stable-9.0.3 25/69] target/arm: Don't assert for 128-bit tile accesses when SVL is 128 Date: Fri, 6 Sep 2024 14:12:34 +0300 Message-Id: <20240906111324.353230-25-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 For an instruction which accesses a 128-bit element tile when the SVL is also 128 (for example MOV z0.Q, p0/M, ZA0H.Q[w0,0]), we will assert in get_tile_rowcol(): qemu-system-aarch64: ../../tcg/tcg-op.c:926: tcg_gen_deposit_z_i32: Assertion `len > 0' failed. This happens because we calculate len = ctz32(streaming_vec_reg_size(s)) - esz;$ but if the SVL and the element size are the same len is 0, and the deposit operation asserts. In this case the ZA storage contains exactly one 128 bit element ZA tile, and the horizontal or vertical slice is just that tile. This means that regardless of the index value in the Ws register, we always access that tile. (In pseudocode terms, we calculate (index + offset) MOD 1, which is 0.) Special case the len == 0 case to avoid hitting the assertion in tcg_gen_deposit_z_i32(). Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson Message-id: 20240722172957.1041231-2-peter.maydell@linaro.org (cherry picked from commit 56f1c0db928aae0b83fd91c89ddb226b137e2b21) Signed-off-by: Michael Tokarev diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 185a8a917b..a50a419af2 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -49,7 +49,15 @@ static TCGv_ptr get_tile_rowcol(DisasContext *s, int esz, int rs, /* Prepare a power-of-two modulo via extraction of @len bits. */ len = ctz32(streaming_vec_reg_size(s)) - esz; - if (vertical) { + if (!len) { + /* + * SVL is 128 and the element size is 128. There is exactly + * one 128x128 tile in the ZA storage, and so we calculate + * (Rs + imm) MOD 1, which is always 0. We need to special case + * this because TCG doesn't allow deposit ops with len 0. + */ + tcg_gen_movi_i32(tmp, 0); + } else if (vertical) { /* * Compute the byte offset of the index within the tile: * (index % (svl / size)) * size