From nobody Sat Nov 15 05:35:30 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1755260890; cv=none; d=zohomail.com; s=zohoarc; b=XtSecwo3UlDMFeZ5vKsF1lTVopYKoVdX5UuL6PAZAYGzwOsKMU9UfPyz2fCnyqA1RC4jiCjRQFy4DCpteUd17tU9c+280n00lgzQYiCrquZQJyZSE2LgQIqpZsBr4HUP+jAU/MTWlaqCtfT+7ZBbzP3YC9YzZ3C9FKHBppjvBpE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755260890; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=MkrjW09kols9H4CfSULpmG4eFAOBOauSMA2uXFjtwNI=; b=AnJDJh3PjursugHWJnu/WbC3L3x6k8tXShthJnf5ZZzGrMgoyfnCFg0H7KiA1bObAnhQHsfXXGtrPINE5R/t2JVA7snD2vKhfkcGRxsRFd9F9JNQCf8wUd9fLSp90nm5haw5YMMuE8frFHSnEcIwNApEffFASd9piy8+X4Trvxw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755260890398778.1813423672795; Fri, 15 Aug 2025 05:28:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umtWZ-00013s-OF; Fri, 15 Aug 2025 08:27:11 -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 1umtWU-00013Y-1E for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:06 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umtWS-0007X4-6X for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:05 -0400 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-76e2e613e90so1488748b3a.0 for ; Fri, 15 Aug 2025 05:27:03 -0700 (PDT) Received: from localhost.localdomain ([206.83.105.236]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-76e45292c86sm1053475b3a.48.2025.08.15.05.27.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 05:27:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1755260822; x=1755865622; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MkrjW09kols9H4CfSULpmG4eFAOBOauSMA2uXFjtwNI=; b=h4y+o1KMlNtu6eeqKNxeOs+GTex38z1UVFwD5Y49LVDMYg9YKWEyDED9Yn9TtTPSPm A+gIu+ETYH2zYhbORx331QZzEciHnRc21zR1K8LvfEvLrlhjw0k1Vs5L0SxDPcMmnBaN JB253j43HcEOGttLykyN9gL/K9oUrJBpKPz1NKvYIOqcC9GOBDr5LBVDmcdnRQJidcae 5PCkB4A3IjVmEfTq7876LVHHbiioyJLnNqwT2rruiMIOLCSDntdreTYcvlnUrsMhz5jD 8raGNpop0SXzcWsa2Z3J9K0upjG9zUU0ERt+w059IPExvcC1/v1fKuEmQedrIlOoik3j eevg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755260822; x=1755865622; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MkrjW09kols9H4CfSULpmG4eFAOBOauSMA2uXFjtwNI=; b=JxVpwjPi9+32PSUl9s931nSIo5gUbeJxegA/82c/EZiFUnaM6ct9Ja6kUDbMQd2yUA pXO1qkicer7cZNzOr5t9Lq2+bhzj4IOD87E8oiziUKuVFfT7HSyR4tBxxVQG3SWGtyEZ bjDZXCF5Eh4Gdx//OFjHx90zYr20V9clrumvxPoUPT84cNcAjDJV8VXfDYhrP6bx87A8 2gi7tHqRnJhxMDkDH2NgQLMuBw+IaZ7mxB3o61A7F2eQxGaugHaziBpunKyRF3YFUk+s az/6P+kTJrh1PYYSMg++LCCOJIjPVBiaxcvEQWPkp88/zoPdxeJLU7CZ19lLY2HL3vaI AGww== X-Gm-Message-State: AOJu0Yw5NOyT0amDnXgzJgLxlSyFnTTqXmAG636liDIFH05oUyYirVeI FRbnDRZnxQ6wGuERzr3GuBqAT7CzOsVkjBk0Oa595ZFivktH7HsEJshEcTuljy/PRGllPAxrrYi +fAG++hU= X-Gm-Gg: ASbGncssZdrHEM5FYf1UIEcnE73sf6wvmPqQSPlDc2jpOuQeVXqqV30khKra1Nb+e4j vOenFc9P9ipjlS8BscGLKy/Fz6B+KzRKFIB59T2JdjduN/vRfn25+N6/Vjecwh0rtN35PW54m8J Mw0aoyETl0YCwlCyi1STLdDQKTOooQbnZBBGaOmrbH+4owUg/4JiZzjUeihexhGz1HAfNuGFVva iCcO5T9Mr7Aq8xZdnWleOodYT11qigBuau66mqajDGfwFdhPYYqTQufiEYqed49D0GJmlCwG0zt S0CaCl/cdUrUSP/O6i8gg7aJS5WlDFtdTOH8qq0yAy7+QP9akNbc8cEZ4HQ9fIPqkdCwbk5PMDq wj0vdY4yzu2fJcL13O2H0puFPgHKk/uUp++Anhe9XMcYv18w= X-Google-Smtp-Source: AGHT+IEpEPSZcvvxeqUlhvtOkGlaDp2xlyN0zTcO+aR38Nj6tWc2Ot5uDBqhhrjpBo+vv+/uFnbvoQ== X-Received: by 2002:a05:6a00:4288:b0:76b:d7e7:f1de with SMTP id d2e1a72fcca58-76e4481c097mr2127214b3a.17.1755260822589; Fri, 15 Aug 2025 05:27:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org Subject: [PATCH 1/7] qemu/atomic: Finish renaming atomic128-cas.h headers Date: Fri, 15 Aug 2025 22:26:47 +1000 Message-ID: <20250815122653.701782-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250815122653.701782-1-richard.henderson@linaro.org> References: <20250815122653.701782-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1755260892130124100 Content-Type: text/plain; charset="utf-8" The aarch64 header was not renamed with the others, meaning it was skipped in favor of the generic version. Cc: qemu-stable@nongnu.org Fixes: 15606965400b ("qemu/atomic: Rename atomic128-cas.h headers using .h.= inc suffix") Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- .../include/aarch64/host/{atomic128-cas.h =3D> atomic128-cas.h.inc} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename host/include/aarch64/host/{atomic128-cas.h =3D> atomic128-cas.h.inc= } (100%) diff --git a/host/include/aarch64/host/atomic128-cas.h b/host/include/aarch= 64/host/atomic128-cas.h.inc similarity index 100% rename from host/include/aarch64/host/atomic128-cas.h rename to host/include/aarch64/host/atomic128-cas.h.inc --=20 2.43.0 From nobody Sat Nov 15 05:35:30 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1755260886; cv=none; d=zohomail.com; s=zohoarc; b=Gxsqx6INkChYZRxQElR7c53KntnZFdgtsXa2yOnbA1sBUBhcyG0NMo5ARhit5Sk6MBjDKM26XIi3pkYTG5M4z/qBjuDhio6ATMor7NtDHX3dKsvtmA9oQkYQY6XZMxIQzK8yDkO3d1YkPeNqrZJZOJENh53vV1ppsUxyQuVXwBM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755260886; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=53dqTOaIfUhQRIFaZNYuW0Bo9AiUeDNRZ/usdqG/HaQ=; b=P9KgHryVl8MXlQNvXFRO2xDsF/+Wus/WK3Gxy4s23VOjXFOpkm+BS0JgZS5Q/fKuNt7zQpMSSi4JS7RfDrujL38kFirFoSK/DF/DVN9NE8r6SAxvwycfvkHcb0jRkRfBcyEahQv7m3mdbv3RjdoLKzDlWKoN1EUuuuL4SdU4xuM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175526088686325.50270284570331; Fri, 15 Aug 2025 05:28:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umtWc-000153-ER; Fri, 15 Aug 2025 08:27:14 -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 1umtWX-00013q-7D for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:09 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umtWV-0007XP-DL for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:08 -0400 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-76e39ec6f30so1214958b3a.2 for ; Fri, 15 Aug 2025 05:27:06 -0700 (PDT) Received: from localhost.localdomain ([206.83.105.236]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-76e45292c86sm1053475b3a.48.2025.08.15.05.27.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 05:27:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1755260825; x=1755865625; darn=nongnu.org; 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=53dqTOaIfUhQRIFaZNYuW0Bo9AiUeDNRZ/usdqG/HaQ=; b=OjHMXFIRh2S+PJO4hoYxf9ylXKuECXgEiwtrvWJeCtzs8pK5A46F2dxtR1p6YSYFTM sqVdXXxzG0Lr+RorgtVMQUuZcUrSC1GDvWnUIMNUp0jrOTJ+OJNiWl4Doe3PtR6UPbn0 206V5cWuUMQFv2alumBxZWcTReY1uo6jTwgLl4Mdgecy/+IlNtl73myR6A90910tCfNR rY3Y7P9WrsIqanhx0Wl7Lm1ZTQUDcnLAUDMdpwNw3rv/q60LnQ8UiPaPrbx36pwyDPzA DMENRiUMvWbqILO8tG+jG+rIAArgVyhhjk3D4qEWa+FmjsNdi5bzOHBJir8KhxqTF7t0 Wrwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755260825; x=1755865625; 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=53dqTOaIfUhQRIFaZNYuW0Bo9AiUeDNRZ/usdqG/HaQ=; b=bDVRhjiCWRQpuxqFvHWx6Jty4/77HNFxQfSIOQp/yUu3dqg9xOJUCj1sPPx1P77WkG pdMMiSo7F0LdK4fytTQzLgAGhmJ+UWOND/eNxKpwd9/FNZ3pZLcKhxkpU/XWOnDIszRC r46rS9vCmWFMsN8YNoCtV6GQYEyfOlNunrZlo+7RdvocoUN1gtF+hMRclqUxc2i4EKds z56lLxSHDxN2/qnPCFl6sAXhgZQU/rXic/jotFXQMrAo6CDqIruHWeMIk0KuNQ3IdCmR yzV/JkdbFgCzd8AYr0MP8OfvLBXM6CRHtcqbUv78wrE1i7WfQ9Fdyl6UFofwRqP3+vNO hlsg== X-Gm-Message-State: AOJu0YwK68jrpfxVbI8OJZnLsj5IVwYkHLObDGanrXBgE4+nXDkUWWTX xv0JKYyHtfZXpyRjC8D7Ot69lI7kPKlM/jlpKuKfqaK1AVZ92hMLCRGbB1KFkZrAYnC1QEVCUcR V+vLpQ+U= X-Gm-Gg: ASbGncs8yc/2MGYmd6G4wiQQFs3QieFywFYU0xQkQpBhHBrCuh07P+g7h50RHrEmn5p fX0mSgAHL6rulTxJgOnj/tzWSebLFcfl2YODSiQDch9C03hJslEVYq7VPHPONB4FWcWaRgLvonk ki27EZyxPRFBnSjOngRPbR6+HSzDAch9bqpzSlRokXHnoZE/F050zw6oyX4jTof4hOQVP4FXHtp N+bdvkF0Mbl5MieC/8QdRgGL3x64jMiNPl4Q1PusLrosRIjvvprCmPNR5iejJ6SF49BHyBMi3TW +iNzoOexWVuSHFEZC+NTykTHMb8frH59Fd8RGDodDVDfgaYv0fml15IyzYdrWqpcawKVQ4eEWXD kzTskrN02+wr+A1tzOcymunvpzRsbg1xn9/QIH3fOCI0EzVM= X-Google-Smtp-Source: AGHT+IE68u2gdVFeLxcX8b7YLZODhCu+uuqY7fuOa0IA4VlKlEViMIWWhe2jBz9Gc4qXfcwp68T89w== X-Received: by 2002:a05:6a21:6d99:b0:23f:f729:2e60 with SMTP id adf61e73a8af0-240d2e9f1cemr3407384637.25.1755260824913; Fri, 15 Aug 2025 05:27:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 2/7] qemu/atomic: Add atomic16 primitives for xchg, fetch_and, fetch_or Date: Fri, 15 Aug 2025 22:26:48 +1000 Message-ID: <20250815122653.701782-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250815122653.701782-1-richard.henderson@linaro.org> References: <20250815122653.701782-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42a; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42a.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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1755260888881116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- host/include/aarch64/host/atomic128-cas.h.inc | 57 +++++++++++ host/include/generic/host/atomic128-cas.h.inc | 96 +++++++++++++++++++ 2 files changed, 153 insertions(+) diff --git a/host/include/aarch64/host/atomic128-cas.h.inc b/host/include/a= arch64/host/atomic128-cas.h.inc index 991da4ef54..aec27df182 100644 --- a/host/include/aarch64/host/atomic128-cas.h.inc +++ b/host/include/aarch64/host/atomic128-cas.h.inc @@ -38,6 +38,63 @@ static inline Int128 atomic16_cmpxchg(Int128 *ptr, Int12= 8 cmp, Int128 new) return int128_make128(oldl, oldh); } =20 +static inline Int128 atomic16_xchg(Int128 *ptr, Int128 new) +{ + uint64_t newl =3D int128_getlo(new), newh =3D int128_gethi(new); + uint64_t oldl, oldh; + uint32_t tmp; + + asm("0: ldaxp %[oldl], %[oldh], %[mem]\n\t" + "stlxp %w[tmp], %[newl], %[newh], %[mem]\n\t" + "cbnz %w[tmp], 0b" + : [mem] "+m"(*ptr), [tmp] "=3D&r"(tmp), + [oldl] "=3D&r"(oldl), [oldh] "=3D&r"(oldh) + : [newl] "r"(newl), [newh] "r"(newh) + : "memory"); + + return int128_make128(oldl, oldh); +} + +static inline Int128 atomic16_fetch_and(Int128 *ptr, Int128 new) +{ + uint64_t newl =3D int128_getlo(new), newh =3D int128_gethi(new); + uint64_t oldl, oldh, tmpl, tmph; + uint32_t tmp; + + asm("0: ldaxp %[oldl], %[oldh], %[mem]\n\t" + "and %[tmpl], %[oldl], %[newl]\n\t" + "and %[tmph], %[oldh], %[newh]\n\t" + "stlxp %w[tmp], %[tmpl], %[tmph], %[mem]\n\t" + "cbnz %w[tmp], 0b" + : [mem] "+m"(*ptr), [tmp] "=3D&r"(tmp), + [oldl] "=3D&r"(oldl), [oldh] "=3D&r"(oldh) + : [newl] "r"(newl), [newh] "r"(newh), + [tmpl] "r"(tmpl), [tmph] "r"(tmph) + : "memory"); + + return int128_make128(oldl, oldh); +} + +static inline Int128 atomic16_fetch_or(Int128 *ptr, Int128 new) +{ + uint64_t newl =3D int128_getlo(new), newh =3D int128_gethi(new); + uint64_t oldl, oldh, tmpl, tmph; + uint32_t tmp; + + asm("0: ldaxp %[oldl], %[oldh], %[mem]\n\t" + "orr %[tmpl], %[oldl], %[newl]\n\t" + "orr %[tmph], %[oldh], %[newh]\n\t" + "stlxp %w[tmp], %[tmpl], %[tmph], %[mem]\n\t" + "cbnz %w[tmp], 0b" + : [mem] "+m"(*ptr), [tmp] "=3D&r"(tmp), + [oldl] "=3D&r"(oldl), [oldh] "=3D&r"(oldh) + : [newl] "r"(newl), [newh] "r"(newh), + [tmpl] "r"(tmpl), [tmph] "r"(tmph) + : "memory"); + + return int128_make128(oldl, oldh); +} + # define CONFIG_CMPXCHG128 1 # define HAVE_CMPXCHG128 1 #endif diff --git a/host/include/generic/host/atomic128-cas.h.inc b/host/include/g= eneric/host/atomic128-cas.h.inc index 6b40cc2271..990162c56f 100644 --- a/host/include/generic/host/atomic128-cas.h.inc +++ b/host/include/generic/host/atomic128-cas.h.inc @@ -23,6 +23,51 @@ atomic16_cmpxchg(Int128 *ptr, Int128 cmp, Int128 new) r.i =3D qatomic_cmpxchg__nocheck(ptr_align, c.i, n.i); return r.s; } + +/* + * Since we're looping anyway, use weak compare and swap. + * If the host supports weak, this will eliminate a second loop hidden + * within the atomic operation itself; otherwise the weak parameter is + * ignored. + */ +static inline Int128 ATTRIBUTE_ATOMIC128_OPT +atomic16_xchg(Int128 *ptr, Int128 new) +{ + __int128_t *ptr_align =3D __builtin_assume_aligned(ptr, 16); + Int128 old =3D *ptr_align; + + while (!__atomic_compare_exchange_n(ptr_align, &old, new, true, + __ATOMIC_SEQ_CST, 0)) { + continue; + } + return old; +} + +static inline Int128 ATTRIBUTE_ATOMIC128_OPT +atomic16_fetch_and(Int128 *ptr, Int128 val) +{ + __int128_t *ptr_align =3D __builtin_assume_aligned(ptr, 16); + Int128 old =3D *ptr_align; + + while (!__atomic_compare_exchange_n(ptr_align, &old, old & val, true, + __ATOMIC_SEQ_CST, 0)) { + continue; + } + return old; +} + +static inline Int128 ATTRIBUTE_ATOMIC128_OPT +atomic16_fetch_or(Int128 *ptr, Int128 val) +{ + __int128_t *ptr_align =3D __builtin_assume_aligned(ptr, 16); + Int128 old =3D *ptr_align; + + while (!__atomic_compare_exchange_n(ptr_align, &old, old | val, true, + __ATOMIC_SEQ_CST, 0)) { + continue; + } + return old; +} # define HAVE_CMPXCHG128 1 #elif defined(CONFIG_CMPXCHG128) static inline Int128 ATTRIBUTE_ATOMIC128_OPT @@ -36,6 +81,57 @@ atomic16_cmpxchg(Int128 *ptr, Int128 cmp, Int128 new) r.i =3D __sync_val_compare_and_swap_16(ptr_align, c.i, n.i); return r.s; } + +static inline Int128 ATTRIBUTE_ATOMIC128_OPT +atomic16_xchg(Int128 *ptr, Int128 new) +{ + Int128Aligned *ptr_align =3D __builtin_assume_aligned(ptr, 16); + Int128Alias o, n; + + n.s =3D new; + o.s =3D *ptr_align; + while (1) { + __int128 c =3D __sync_val_compare_and_swap_16(ptr_align, o.i, n.i); + if (c =3D=3D o.i) { + return o.s; + } + o.i =3D c; + } +} + +static inline Int128 ATTRIBUTE_ATOMIC128_OPT +atomic16_fetch_and(Int128 *ptr, Int128 val) +{ + Int128Aligned *ptr_align =3D __builtin_assume_aligned(ptr, 16); + Int128Alias o, v; + + v.s =3D val; + o.s =3D *ptr_align; + while (1) { + __int128 c =3D __sync_val_compare_and_swap_16(ptr_align, o.i, o.i = & v.i); + if (c =3D=3D o.i) { + return o.s; + } + o.i =3D c; + } +} + +static inline Int128 ATTRIBUTE_ATOMIC128_OPT +atomic16_fetch_or(Int128 *ptr, Int128 val) +{ + Int128Aligned *ptr_align =3D __builtin_assume_aligned(ptr, 16); + Int128Alias o, v; + + v.s =3D val; + o.s =3D *ptr_align; + while (1) { + __int128 c =3D __sync_val_compare_and_swap_16(ptr_align, o.i, o.i = | v.i); + if (c =3D=3D o.i) { + return o.s; + } + o.i =3D c; + } +} # define HAVE_CMPXCHG128 1 #else /* Fallback definition that must be optimized away, or error. */ --=20 2.43.0 From nobody Sat Nov 15 05:35:30 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1755260886; cv=none; d=zohomail.com; s=zohoarc; b=aWhDQYvCO0Lz6YkfHoEaXscTer3e6ksiKW/kGW5a2bkBsaBteP9PRQDyNNBYU6DAjt3nIKYZL5JETkfP2AFJL28165Tgpzh9JRqjnu5piCwVontZqDLDRPossdcn28LLPKJprr4JshTR5bGR2H2jhrLlKxyjkrtT1sV8RhU32k8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755260886; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=87lrvQbpY4bv9joZLCnkKnHCeKplsEyfo+kz4OC+lZ8=; b=LHwDaSuWFVx51jhkfrgDX3Pf1B5KkIg3Ami7YM2R41c1R3W24z+tTzsAKxuEgI634fZJdkMpRXm++OSuh4iY5LaJEMs3Zl7qYPFHozRs/Ct7rdpw8XDftVBdil9hbOZE7dhwMInwgns+F+wkZ99dB1Nl8EMOB6KLWQeTEEy+Yq8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175526088606772.45407363790616; Fri, 15 Aug 2025 05:28:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umtWm-00015G-Bc; Fri, 15 Aug 2025 08:27:28 -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 1umtWY-00014P-Fu for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:11 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umtWW-0007Xq-Fy for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:10 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-76e2eb6ce24so1957267b3a.3 for ; Fri, 15 Aug 2025 05:27:08 -0700 (PDT) Received: from localhost.localdomain ([206.83.105.236]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-76e45292c86sm1053475b3a.48.2025.08.15.05.27.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 05:27:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1755260827; x=1755865627; darn=nongnu.org; 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=87lrvQbpY4bv9joZLCnkKnHCeKplsEyfo+kz4OC+lZ8=; b=KxzcjYMKlk31kzzjFnPnzp0mp0HbLKF1aUSO5wlAXncIthGH6+rBtmjfkTQm2GRTG8 UTnfb3GSLAUoJjuBb06g3F36KpOvlAIoUWRpQOd09mHzSc4/rNmuIMHoHqjqiWViX5h3 O5cXSS1l6h5OOKZhzcwzVuToWtpK81SJ4kKjC80CvDtjOwn7/hu7aphAMuenHPzFSZt8 IDVaZoR9QX9m3KRAH/5qjl59qvWCmc+dv8i7jZbYzHWlkXCldBAynbBUQ40zzV/tN83+ i3BItG3lSrEQOEarq6v3Q7PbxSjkQY62VJVh4wCKt/L+zocAIAuhVasV6dFwROY0+GbF 5icw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755260827; x=1755865627; 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=87lrvQbpY4bv9joZLCnkKnHCeKplsEyfo+kz4OC+lZ8=; b=I2WxXE+H9C8Kgh1EMgkLZdK5GeHLpxzcWw2DU07Lj0T9WmnUoP2ZaI7jx7l3fJwUy/ 5xz6v9b14HfjNPt65cAQZXzIrfUA2is7/WONpSKgJsPHH5dGAUaaRtqyL9VG2zb1C4FG ES0rfv2jRL0r+vr5Mfo+3YN9MPU9rnmi4CPPcJ+fl2AdQpRRil7bGX5iC9tdNxgWpaoA 7DyYFn2wJEY/dLkz5djoip5SnPQEG9QvOLP9Na6XabfKNDvanNNhXPQeqiCEQEWrLyrb oUKTHmD8vx1/3JT42gxnQq6LQtIv8kD+Vn8bhlls1fwv3DpkrtJcmlY3y7eQbCFNMm0N 2LmQ== X-Gm-Message-State: AOJu0YymrMQQA5JuYdlUECQOos4Q4E/0HLaIu9ke6f5UUMh/EKWQAt6J Ie6zVZIq0vLYYMmj567uWs8g4Dkgh8ESrDR+ExuarJfJPYWgzF3FP8Fi0C+rx17dloTHQzAtVcO WOQawfjQ= X-Gm-Gg: ASbGncs0BOorvMXkBMZM3AG/7wPvJRXNDEasouS3AP5RD9mOt+7nYpiTXnVhUK52s9g /p5mp4JSHgz3ZIJe8Yiuz9+YVe4cVMrJkABtpiG1Rm8qk22lm1jdF8UrMHlIjQpQxZGNJ/2q832 CaeWirzvCsO4H8NsLCRFgJOC4/aL8wFvIHwHkz2myokDiP0S0HQ8AIRfULc4xNkmJJ6pJbE6ChQ M7N/L6Z582HTJY77ygtmF3i69EopbHHeoiROoRcqkU9fWINsK03IGS0fefPpEUW4Z2eAix8f5k/ SkLUWeTx4iOFqLJmtxQb5jyKm0W1q9SCbLQmwKRocMtx1iDxqvxj9srKGxHo9k+jvMKbZvs5phZ 4wkZEjJYDBLV2mXVU5jjEbPRDroMUXeXYvEbd+4/hnKh/4y0= X-Google-Smtp-Source: AGHT+IFkfZarQyGhpWT4nrnG16vb6Yh04P01ib4eJV6rygPD+PKzQJXerGeZqShosxw9AOak8MGjeA== X-Received: by 2002:a05:6a00:3997:b0:76b:f1c0:224b with SMTP id d2e1a72fcca58-76e4485ae74mr2436132b3a.23.1755260827013; Fri, 15 Aug 2025 05:27:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 3/7] accel/tcg: Add cpu_atomic_*_mmu for 16-byte xchg, fetch_and, fetch_or Date: Fri, 15 Aug 2025 22:26:49 +1000 Message-ID: <20250815122653.701782-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250815122653.701782-1-richard.henderson@linaro.org> References: <20250815122653.701782-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1755260888864116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- accel/tcg/atomic_template.h | 80 +++++++++++++++++++++++++++-- include/accel/tcg/cpu-ldst-common.h | 13 +++-- 2 files changed, 86 insertions(+), 7 deletions(-) diff --git a/accel/tcg/atomic_template.h b/accel/tcg/atomic_template.h index 08a475c10c..ae5203b439 100644 --- a/accel/tcg/atomic_template.h +++ b/accel/tcg/atomic_template.h @@ -100,7 +100,6 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, vaddr = addr, return ret; } =20 -#if DATA_SIZE < 16 ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, vaddr addr, ABI_TYPE val, MemOpIdx oi, uintptr_t retaddr) { @@ -108,7 +107,11 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, vaddr ad= dr, ABI_TYPE val, DATA_SIZE, retaddr); DATA_TYPE ret; =20 +#if DATA_SIZE =3D=3D 16 + ret =3D atomic16_xchg(haddr, val); +#else ret =3D qatomic_xchg__nocheck(haddr, val); +#endif ATOMIC_MMU_CLEANUP; atomic_trace_rmw_post(env, addr, VALUE_LOW(ret), @@ -119,6 +122,39 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, vaddr ad= dr, ABI_TYPE val, return ret; } =20 +#if DATA_SIZE =3D=3D 16 +ABI_TYPE ATOMIC_NAME(fetch_and)(CPUArchState *env, vaddr addr, ABI_TYPE va= l, + MemOpIdx oi, uintptr_t retaddr) +{ + DATA_TYPE *haddr =3D atomic_mmu_lookup(env_cpu(env), addr, oi, + DATA_SIZE, retaddr); + DATA_TYPE ret =3D atomic16_fetch_and(haddr, val); + ATOMIC_MMU_CLEANUP; + atomic_trace_rmw_post(env, addr, + VALUE_LOW(ret), + VALUE_HIGH(ret), + VALUE_LOW(val), + VALUE_HIGH(val), + oi); + return ret; +} + +ABI_TYPE ATOMIC_NAME(fetch_or)(CPUArchState *env, vaddr addr, ABI_TYPE val, + MemOpIdx oi, uintptr_t retaddr) +{ + DATA_TYPE *haddr =3D atomic_mmu_lookup(env_cpu(env), addr, oi, + DATA_SIZE, retaddr); + DATA_TYPE ret =3D atomic16_fetch_or(haddr, val); + ATOMIC_MMU_CLEANUP; + atomic_trace_rmw_post(env, addr, + VALUE_LOW(ret), + VALUE_HIGH(ret), + VALUE_LOW(val), + VALUE_HIGH(val), + oi); + return ret; +} +#else #define GEN_ATOMIC_HELPER(X) \ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, vaddr addr, \ ABI_TYPE val, MemOpIdx oi, uintptr_t retaddr) \ @@ -188,7 +224,7 @@ GEN_ATOMIC_HELPER_FN(smax_fetch, MAX, SDATA_TYPE, new) GEN_ATOMIC_HELPER_FN(umax_fetch, MAX, DATA_TYPE, new) =20 #undef GEN_ATOMIC_HELPER_FN -#endif /* DATA SIZE < 16 */ +#endif /* DATA SIZE =3D=3D 16 */ =20 #undef END =20 @@ -225,7 +261,6 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, vaddr = addr, return BSWAP(ret); } =20 -#if DATA_SIZE < 16 ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, vaddr addr, ABI_TYPE val, MemOpIdx oi, uintptr_t retaddr) { @@ -233,7 +268,11 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, vaddr ad= dr, ABI_TYPE val, DATA_SIZE, retaddr); ABI_TYPE ret; =20 +#if DATA_SIZE =3D=3D 16 + ret =3D atomic16_xchg(haddr, BSWAP(val)); +#else ret =3D qatomic_xchg__nocheck(haddr, BSWAP(val)); +#endif ATOMIC_MMU_CLEANUP; atomic_trace_rmw_post(env, addr, VALUE_LOW(ret), @@ -244,6 +283,39 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, vaddr ad= dr, ABI_TYPE val, return BSWAP(ret); } =20 +#if DATA_SIZE =3D=3D 16 +ABI_TYPE ATOMIC_NAME(fetch_and)(CPUArchState *env, vaddr addr, ABI_TYPE va= l, + MemOpIdx oi, uintptr_t retaddr) +{ + DATA_TYPE *haddr =3D atomic_mmu_lookup(env_cpu(env), addr, oi, + DATA_SIZE, retaddr); + DATA_TYPE ret =3D atomic16_fetch_and(haddr, BSWAP(val)); + ATOMIC_MMU_CLEANUP; + atomic_trace_rmw_post(env, addr, + VALUE_LOW(ret), + VALUE_HIGH(ret), + VALUE_LOW(val), + VALUE_HIGH(val), + oi); + return BSWAP(ret); +} + +ABI_TYPE ATOMIC_NAME(fetch_or)(CPUArchState *env, vaddr addr, ABI_TYPE val, + MemOpIdx oi, uintptr_t retaddr) +{ + DATA_TYPE *haddr =3D atomic_mmu_lookup(env_cpu(env), addr, oi, + DATA_SIZE, retaddr); + DATA_TYPE ret =3D atomic16_fetch_or(haddr, BSWAP(val)); + ATOMIC_MMU_CLEANUP; + atomic_trace_rmw_post(env, addr, + VALUE_LOW(ret), + VALUE_HIGH(ret), + VALUE_LOW(val), + VALUE_HIGH(val), + oi); + return BSWAP(ret); +} +#else #define GEN_ATOMIC_HELPER(X) \ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, vaddr addr, \ ABI_TYPE val, MemOpIdx oi, uintptr_t retaddr) \ @@ -317,7 +389,7 @@ GEN_ATOMIC_HELPER_FN(add_fetch, ADD, DATA_TYPE, new) #undef ADD =20 #undef GEN_ATOMIC_HELPER_FN -#endif /* DATA_SIZE < 16 */ +#endif /* DATA_SIZE =3D=3D 16 */ =20 #undef END #endif /* DATA_SIZE > 1 */ diff --git a/include/accel/tcg/cpu-ldst-common.h b/include/accel/tcg/cpu-ld= st-common.h index 8bf17c2fab..17a3250ded 100644 --- a/include/accel/tcg/cpu-ldst-common.h +++ b/include/accel/tcg/cpu-ldst-common.h @@ -100,9 +100,6 @@ GEN_ATOMIC_HELPER_ALL(umax_fetch) =20 GEN_ATOMIC_HELPER_ALL(xchg) =20 -#undef GEN_ATOMIC_HELPER_ALL -#undef GEN_ATOMIC_HELPER - Int128 cpu_atomic_cmpxchgo_le_mmu(CPUArchState *env, vaddr addr, Int128 cmpv, Int128 newv, MemOpIdx oi, uintptr_t retaddr); @@ -110,6 +107,16 @@ Int128 cpu_atomic_cmpxchgo_be_mmu(CPUArchState *env, v= addr addr, Int128 cmpv, Int128 newv, MemOpIdx oi, uintptr_t retaddr); =20 +GEN_ATOMIC_HELPER(xchg, Int128, o_le) +GEN_ATOMIC_HELPER(xchg, Int128, o_be) +GEN_ATOMIC_HELPER(fetch_and, Int128, o_le) +GEN_ATOMIC_HELPER(fetch_and, Int128, o_be) +GEN_ATOMIC_HELPER(fetch_or, Int128, o_le) +GEN_ATOMIC_HELPER(fetch_or, Int128, o_be) + +#undef GEN_ATOMIC_HELPER_ALL +#undef GEN_ATOMIC_HELPER + uint8_t cpu_ldb_code_mmu(CPUArchState *env, vaddr addr, MemOpIdx oi, uintptr_t ra); uint16_t cpu_ldw_code_mmu(CPUArchState *env, vaddr addr, --=20 2.43.0 From nobody Sat Nov 15 05:35:30 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1755260942; cv=none; d=zohomail.com; s=zohoarc; b=UBgAgzegkc28lkxrAu25l3076gQfLNhjPtqVetKOtedAVw+3YBTy7G0v7XEzEBaDXwzOPp5npVLGAsJMt7vQE32UIDFC9xVIKdxuefjpYBuqrNH90NnAG373T6W6L+OucVcy9ej6k+8JivkJXGsnAL1ve+pNseoNMgtiO8mj5no= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755260942; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=5w644wms9WFSYbf1QHY/TtcSmOasC/VpbJfkdqChOlQ=; b=hcLxg3jmZg0ttkccR18qQ2ralnBFwzGSdjksOpIfTnw1qazPinwEIPnP8nlaRSPLJC/o/q6nySpuu31soPVIu9sKr+WlTn1wkdqVtMna5vpP4QvdMwwmnLC/4DRVly4BgekF2dDxMfHd+WBlQS89gw34vr5gUMWMT0aD2hCde6o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755260942981644.3495776516121; Fri, 15 Aug 2025 05:29:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umtWu-00017S-8r; Fri, 15 Aug 2025 08:27:33 -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 1umtWb-00014w-19 for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:13 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umtWY-0007Y6-VQ for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:12 -0400 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-76e2ea933b7so1830352b3a.1 for ; Fri, 15 Aug 2025 05:27:10 -0700 (PDT) Received: from localhost.localdomain ([206.83.105.236]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-76e45292c86sm1053475b3a.48.2025.08.15.05.27.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 05:27:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1755260829; x=1755865629; darn=nongnu.org; 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=5w644wms9WFSYbf1QHY/TtcSmOasC/VpbJfkdqChOlQ=; b=LR6+OwGabesJKMzpAHxFjBN1nRpE1pClDuU9BnlhCrhO4UBW55UwjOZnM6ZdEwjkiO CffrGV8iIm09yjg5wELcS529qpRJe/xnzZxQkNOaqKIQ0TtS2xd7ZUxJIoBVYR2hZry/ I+7fMnqPCE3MapiCWTdpmnorYq1f6B0sAG4tAM54pgPXmd0x+RsD4To/OgBoYYkwcZuM BJdDsJQdtDppmEVE5pe6wZqFVs5ZvVSex2usDHT+4raN4Dg3C3eW3yyOgtECkNTaoizC MVnCwpCUo15XeW8ycBWFzPWemrnjOKLMKGlpslgvpWMNiZXU4avHX6tG7wXIe09Bd22j 0c3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755260829; x=1755865629; 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=5w644wms9WFSYbf1QHY/TtcSmOasC/VpbJfkdqChOlQ=; b=mKq+TIHz+KBNdYwUNxTpT3Zpk575WfT1GsBjHv5WIh9V/O80bQULjBLn3k098W2cI/ +lSBwlQ7EN8Qjt0uexWwgJqh3NhPYTSBvRtdJbDPErgCpcdut/ltFk8mzUf3zji62BJZ TmWM+WnzNV6/AfwHIgqJizgbL9ZZRrwsvdRnHs2MryDkaLePZ0Zad86ORrf3lO+U7BHR /NG+NAW2mxe40mY0b6+r3SWl25s/RFOJXkT5U3gJfA9HFi/jYOEVIx1XX3lClQmuTU/i zPgtaZFJqxwbyrCsEU+rVg2lJtFjBzR6zvDwWvSOuKqvsHADlL9uA2Gt6BAV2UUwjDvN 2QUQ== X-Gm-Message-State: AOJu0YwduqeNU36VSXZZ8NeiTsN8f1U39/Mysu9WY+dJA9taY8C3bI0A SpYe4Cq+uTNbSm4atfd8E1S/A8OJrFaVDboGRMxbRi6ghzt8QVKf1eo5X7ziv3y8ha1m30qwrRy D8icO1Oo= X-Gm-Gg: ASbGncsgJrOmudXsvk1fzVJsz2afpE4GYzUKJnCrYpSZ1291LcW1iF5lv+r2A+hzh8j lBFPWWppl5wG+Ojf/f92hRGXphDKMirH6hOm0cNxoNK+Q4Elwu4Q7nYJbe1reKwFo+UPJKABB0p FgwqIo32xnm8pYJuYPzJdZe0pX3UzsIUmZz9yAEm2HAlddHq1zjb9eLWmzeM0erHwjI3UQ1jdzJ ayOaAKxjcw4hNzZ2tzZWNcRxRmeYeRn0NZK3m4wB6HEhrc8otCLDgyZek+Uo9icfEzirCMSujEa P1jwhQNW1K1y/Ls3YRgIRtGjnLX87iuX7vJi+owqrfzuH4Vu0ZFN8iUIm1H2hFyeZhC9x7Xx9nN 51gwcwUZfEFahkzgZkItieUjuytNU4kjdx6Z8I0oOwfGq6tg= X-Google-Smtp-Source: AGHT+IF3eKQgNVeuXF/G93HqpYKJKui2PvpKcwqSW+rFjYf67NNjcjqhYCUbkXTwsyzXSr2s8tKRdA== X-Received: by 2002:a05:6a20:9143:b0:240:177:e820 with SMTP id adf61e73a8af0-240d2934c15mr3276074637.13.1755260829229; Fri, 15 Aug 2025 05:27:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 4/7] tcg: Add tcg_gen_atomic_{xchg,fetch_and,fetch_or}_i128 Date: Fri, 15 Aug 2025 22:26:50 +1000 Message-ID: <20250815122653.701782-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250815122653.701782-1-richard.henderson@linaro.org> References: <20250815122653.701782-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1755260944852124100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- accel/tcg/tcg-runtime.h | 12 +++++ include/tcg/tcg-op-common.h | 7 +++ include/tcg/tcg-op.h | 3 ++ tcg/tcg-op-ldst.c | 97 +++++++++++++++++++++++++++++++++-- accel/tcg/atomic_common.c.inc | 9 ++++ 5 files changed, 125 insertions(+), 3 deletions(-) diff --git a/accel/tcg/tcg-runtime.h b/accel/tcg/tcg-runtime.h index c23b5e66c4..8436599b9f 100644 --- a/accel/tcg/tcg-runtime.h +++ b/accel/tcg/tcg-runtime.h @@ -63,6 +63,18 @@ DEF_HELPER_FLAGS_5(atomic_cmpxchgo_be, TCG_CALL_NO_WG, i128, env, i64, i128, i128, i32) DEF_HELPER_FLAGS_5(atomic_cmpxchgo_le, TCG_CALL_NO_WG, i128, env, i64, i128, i128, i32) +DEF_HELPER_FLAGS_4(atomic_xchgo_be, TCG_CALL_NO_WG, + i128, env, i64, i128, i32) +DEF_HELPER_FLAGS_4(atomic_xchgo_le, TCG_CALL_NO_WG, + i128, env, i64, i128, i32) +DEF_HELPER_FLAGS_4(atomic_fetch_ando_be, TCG_CALL_NO_WG, + i128, env, i64, i128, i32) +DEF_HELPER_FLAGS_4(atomic_fetch_ando_le, TCG_CALL_NO_WG, + i128, env, i64, i128, i32) +DEF_HELPER_FLAGS_4(atomic_fetch_oro_be, TCG_CALL_NO_WG, + i128, env, i64, i128, i32) +DEF_HELPER_FLAGS_4(atomic_fetch_oro_le, TCG_CALL_NO_WG, + i128, env, i64, i128, i32) #endif =20 DEF_HELPER_FLAGS_5(nonatomic_cmpxchgo, TCG_CALL_NO_WG, diff --git a/include/tcg/tcg-op-common.h b/include/tcg/tcg-op-common.h index e1071adebf..f752ef440b 100644 --- a/include/tcg/tcg-op-common.h +++ b/include/tcg/tcg-op-common.h @@ -344,6 +344,8 @@ void tcg_gen_atomic_xchg_i32_chk(TCGv_i32, TCGTemp *, T= CGv_i32, TCGArg, MemOp, TCGType); void tcg_gen_atomic_xchg_i64_chk(TCGv_i64, TCGTemp *, TCGv_i64, TCGArg, MemOp, TCGType); +void tcg_gen_atomic_xchg_i128_chk(TCGv_i128, TCGTemp *, TCGv_i128, + TCGArg, MemOp, TCGType); =20 void tcg_gen_atomic_fetch_add_i32_chk(TCGv_i32, TCGTemp *, TCGv_i32, TCGArg, MemOp, TCGType); @@ -411,6 +413,11 @@ void tcg_gen_atomic_umax_fetch_i32_chk(TCGv_i32, TCGTe= mp *, TCGv_i32, void tcg_gen_atomic_umax_fetch_i64_chk(TCGv_i64, TCGTemp *, TCGv_i64, TCGArg, MemOp, TCGType); =20 +void tcg_gen_atomic_fetch_and_i128_chk(TCGv_i128, TCGTemp *, TCGv_i128, + TCGArg, MemOp, TCGType); +void tcg_gen_atomic_fetch_or_i128_chk(TCGv_i128, TCGTemp *, TCGv_i128, + TCGArg, MemOp, TCGType); + /* Vector ops */ =20 void tcg_gen_mov_vec(TCGv_vec, TCGv_vec); diff --git a/include/tcg/tcg-op.h b/include/tcg/tcg-op.h index c912578fdd..232733cb71 100644 --- a/include/tcg/tcg-op.h +++ b/include/tcg/tcg-op.h @@ -134,13 +134,16 @@ DEF_ATOMIC3(tcg_gen_nonatomic_cmpxchg, i128) =20 DEF_ATOMIC2(tcg_gen_atomic_xchg, i32) DEF_ATOMIC2(tcg_gen_atomic_xchg, i64) +DEF_ATOMIC2(tcg_gen_atomic_xchg, i128) =20 DEF_ATOMIC2(tcg_gen_atomic_fetch_add, i32) DEF_ATOMIC2(tcg_gen_atomic_fetch_add, i64) DEF_ATOMIC2(tcg_gen_atomic_fetch_and, i32) DEF_ATOMIC2(tcg_gen_atomic_fetch_and, i64) +DEF_ATOMIC2(tcg_gen_atomic_fetch_and, i128) DEF_ATOMIC2(tcg_gen_atomic_fetch_or, i32) DEF_ATOMIC2(tcg_gen_atomic_fetch_or, i64) +DEF_ATOMIC2(tcg_gen_atomic_fetch_or, i128) DEF_ATOMIC2(tcg_gen_atomic_fetch_xor, i32) DEF_ATOMIC2(tcg_gen_atomic_fetch_xor, i64) DEF_ATOMIC2(tcg_gen_atomic_fetch_smin, i32) diff --git a/tcg/tcg-op-ldst.c b/tcg/tcg-op-ldst.c index 548496002d..67c15fd4d0 100644 --- a/tcg/tcg-op-ldst.c +++ b/tcg/tcg-op-ldst.c @@ -801,6 +801,8 @@ typedef void (*gen_atomic_op_i32)(TCGv_i32, TCGv_env, T= CGv_i64, TCGv_i32, TCGv_i32); typedef void (*gen_atomic_op_i64)(TCGv_i64, TCGv_env, TCGv_i64, TCGv_i64, TCGv_i32); +typedef void (*gen_atomic_op_i128)(TCGv_i128, TCGv_env, TCGv_i64, + TCGv_i128, TCGv_i32); =20 #ifdef CONFIG_ATOMIC64 # define WITH_ATOMIC64(X) X, @@ -1201,6 +1203,94 @@ static void do_atomic_op_i64(TCGv_i64 ret, TCGTemp *= addr, TCGv_i64 val, } } =20 +static void do_nonatomic_op_i128(TCGv_i128 ret, TCGTemp *addr, TCGv_i128 v= al, + TCGArg idx, MemOp memop, bool new_val, + void (*gen)(TCGv_i64, TCGv_i64, TCGv_i64)) +{ + TCGv_i128 t =3D tcg_temp_ebb_new_i128(); + TCGv_i128 r =3D tcg_temp_ebb_new_i128(); + + tcg_gen_qemu_ld_i128_int(r, addr, idx, memop); + gen(TCGV128_LOW(t), TCGV128_LOW(r), TCGV128_LOW(val)); + gen(TCGV128_HIGH(t), TCGV128_HIGH(r), TCGV128_HIGH(val)); + tcg_gen_qemu_st_i128_int(t, addr, idx, memop); + + tcg_gen_mov_i128(ret, r); + tcg_temp_free_i128(t); + tcg_temp_free_i128(r); +} + +static void do_atomic_op_i128(TCGv_i128 ret, TCGTemp *addr, TCGv_i128 val, + TCGArg idx, MemOp memop, void * const table[= ]) +{ + gen_atomic_op_i128 gen =3D table[memop & (MO_SIZE | MO_BSWAP)]; + + if (gen) { + MemOpIdx oi =3D make_memop_idx(memop & ~MO_SIGN, idx); + TCGv_i64 a64 =3D maybe_extend_addr64(addr); + gen(ret, tcg_env, a64, val, tcg_constant_i32(oi)); + maybe_free_addr64(a64); + return; + } + + gen_helper_exit_atomic(tcg_env); + /* Produce a result */ + tcg_gen_movi_i64(TCGV128_LOW(ret), 0); + tcg_gen_movi_i64(TCGV128_HIGH(ret), 0); +} + +#define GEN_ATOMIC_HELPER128(NAME, OP, NEW) \ +static void * const table_##NAME[(MO_SIZE | MO_BSWAP) + 1] =3D { \ + [MO_8] =3D gen_helper_atomic_##NAME##b, \ + [MO_16 | MO_LE] =3D gen_helper_atomic_##NAME##w_le, \ + [MO_16 | MO_BE] =3D gen_helper_atomic_##NAME##w_be, \ + [MO_32 | MO_LE] =3D gen_helper_atomic_##NAME##l_le, \ + [MO_32 | MO_BE] =3D gen_helper_atomic_##NAME##l_be, \ + WITH_ATOMIC64([MO_64 | MO_LE] =3D gen_helper_atomic_##NAME##q_le) \ + WITH_ATOMIC64([MO_64 | MO_BE] =3D gen_helper_atomic_##NAME##q_be) \ + WITH_ATOMIC128([MO_128 | MO_LE] =3D gen_helper_atomic_##NAME##o_le) \ + WITH_ATOMIC128([MO_128 | MO_BE] =3D gen_helper_atomic_##NAME##o_be) \ +}; \ +void tcg_gen_atomic_##NAME##_i32_chk(TCGv_i32 ret, TCGTemp *addr, \ + TCGv_i32 val, TCGArg idx, \ + MemOp memop, TCGType addr_type) \ +{ \ + tcg_debug_assert(addr_type =3D=3D tcg_ctx->addr_type); = \ + tcg_debug_assert((memop & MO_SIZE) <=3D MO_32); \ + if (tcg_ctx->gen_tb->cflags & CF_PARALLEL) { \ + do_atomic_op_i32(ret, addr, val, idx, memop, table_##NAME); \ + } else { \ + do_nonatomic_op_i32(ret, addr, val, idx, memop, NEW, \ + tcg_gen_##OP##_i32); \ + } \ +} \ +void tcg_gen_atomic_##NAME##_i64_chk(TCGv_i64 ret, TCGTemp *addr, \ + TCGv_i64 val, TCGArg idx, \ + MemOp memop, TCGType addr_type) \ +{ \ + tcg_debug_assert(addr_type =3D=3D tcg_ctx->addr_type); = \ + tcg_debug_assert((memop & MO_SIZE) <=3D MO_64); \ + if (tcg_ctx->gen_tb->cflags & CF_PARALLEL) { \ + do_atomic_op_i64(ret, addr, val, idx, memop, table_##NAME); \ + } else { \ + do_nonatomic_op_i64(ret, addr, val, idx, memop, NEW, \ + tcg_gen_##OP##_i64); \ + } \ +} \ +void tcg_gen_atomic_##NAME##_i128_chk(TCGv_i128 ret, TCGTemp *addr, \ + TCGv_i128 val, TCGArg idx, \ + MemOp memop, TCGType addr_type) \ +{ \ + tcg_debug_assert(addr_type =3D=3D tcg_ctx->addr_type); = \ + tcg_debug_assert((memop & MO_SIZE) =3D=3D MO_128); = \ + if (tcg_ctx->gen_tb->cflags & CF_PARALLEL) { \ + do_atomic_op_i128(ret, addr, val, idx, memop, table_##NAME); \ + } else { \ + do_nonatomic_op_i128(ret, addr, val, idx, memop, NEW, \ + tcg_gen_##OP##_i64); \ + } \ +} + #define GEN_ATOMIC_HELPER(NAME, OP, NEW) \ static void * const table_##NAME[(MO_SIZE | MO_BSWAP) + 1] =3D { \ [MO_8] =3D gen_helper_atomic_##NAME##b, \ @@ -1239,8 +1329,8 @@ void tcg_gen_atomic_##NAME##_i64_chk(TCGv_i64 ret, TC= GTemp *addr, \ } =20 GEN_ATOMIC_HELPER(fetch_add, add, 0) -GEN_ATOMIC_HELPER(fetch_and, and, 0) -GEN_ATOMIC_HELPER(fetch_or, or, 0) +GEN_ATOMIC_HELPER128(fetch_and, and, 0) +GEN_ATOMIC_HELPER128(fetch_or, or, 0) GEN_ATOMIC_HELPER(fetch_xor, xor, 0) GEN_ATOMIC_HELPER(fetch_smin, smin, 0) GEN_ATOMIC_HELPER(fetch_umin, umin, 0) @@ -1266,6 +1356,7 @@ static void tcg_gen_mov2_i64(TCGv_i64 r, TCGv_i64 a, = TCGv_i64 b) tcg_gen_mov_i64(r, b); } =20 -GEN_ATOMIC_HELPER(xchg, mov2, 0) +GEN_ATOMIC_HELPER128(xchg, mov2, 0) =20 #undef GEN_ATOMIC_HELPER +#undef GEN_ATOMIC_HELPER128 diff --git a/accel/tcg/atomic_common.c.inc b/accel/tcg/atomic_common.c.inc index 6056598c23..bca93a0ac4 100644 --- a/accel/tcg/atomic_common.c.inc +++ b/accel/tcg/atomic_common.c.inc @@ -122,5 +122,14 @@ GEN_ATOMIC_HELPERS(umax_fetch) =20 GEN_ATOMIC_HELPERS(xchg) =20 +#if HAVE_CMPXCHG128 +ATOMIC_HELPER(xchgo_be, Int128) +ATOMIC_HELPER(xchgo_le, Int128) +ATOMIC_HELPER(fetch_ando_be, Int128) +ATOMIC_HELPER(fetch_ando_le, Int128) +ATOMIC_HELPER(fetch_oro_be, Int128) +ATOMIC_HELPER(fetch_oro_le, Int128) +#endif + #undef ATOMIC_HELPER #undef GEN_ATOMIC_HELPERS --=20 2.43.0 From nobody Sat Nov 15 05:35:30 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1755260939; cv=none; d=zohomail.com; s=zohoarc; b=E6xbEXLT3u9JVRWmqsjDnfHs0YoXVp5Pi9QJBkxeUqdZIVsrEyCqpf9fuFLCDmWfmfM+i91kAp+t7uHVhldWl34ARdYgz5isJ5dfU8zRjeSl7D6eE5B3Iin4EMvu2+yA9G4SPAl2Yzq2+afzbDyVkql9Ss1Y7thcEJcTxGOQM2Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755260939; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=FXjkQXdB1cnyWfZEPDVzu1UrhqtJ/eTeah1TtiZRU90=; b=G82/KUssaKIdu/56yqhbgXGv5ksT8jHbID3LC95aKP6XY5mplr0xsnd0zCnITwBcFeGdW7ZAeY7YSWGNiH6fp9D3a/zfE9jkHf1LBOEaNHA6EarMuy0uuWY9WY37R6zPyy4KZf4ucHQXclWac09tDjnu2HLAToPJP8UAwuebed4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175526093941855.06463656946153; Fri, 15 Aug 2025 05:28:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umtWx-00018G-Jj; Fri, 15 Aug 2025 08:27:35 -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 1umtWd-00015H-R2 for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:16 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umtWb-0007YW-KW for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:15 -0400 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-76e39ec6e05so984832b3a.2 for ; Fri, 15 Aug 2025 05:27:13 -0700 (PDT) Received: from localhost.localdomain ([206.83.105.236]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-76e45292c86sm1053475b3a.48.2025.08.15.05.27.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 05:27:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1755260832; x=1755865632; darn=nongnu.org; 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=FXjkQXdB1cnyWfZEPDVzu1UrhqtJ/eTeah1TtiZRU90=; b=LMMghVizyXkvNyZwbawBZ53hWrR8FtZ3hEL5DbiueazekpY3NqUrTBA88Dbvta6INx xTgJa6dsh4dxkXJjuFqFCj92W3B9ejahcf97flKo6grWAxKSrZCN+cNwx8ES5xgI+NzH k6YKfqROBCUX+RQJITwNnTHg7GXwa90E8Kyn1VBVMbhIF6NDFybm9TPa1r6orbrsp/Yh wUBf74kMpc0okxdVkMDJ+LhXGGtxPitYGPXfzY4CaE11xIdJuVx3KjrStNXihBhKwvGq 6cEyt9Kue4U4+woxw2dMScJx/t+HN2eagfdYgql+LDy5bbtZf6tN9UxlNDI2q60DLXIC sDRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755260832; x=1755865632; 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=FXjkQXdB1cnyWfZEPDVzu1UrhqtJ/eTeah1TtiZRU90=; b=HivOkOXuG9XPaZkTRYjKHcFw5wRSqpDEraWoSNzwloBIFatDhpt5TEcjBJPipg2URk CjaoZNCaTjOUL0Dfvy3FZufe9ZzQP42skapifldsVt9bxknPgRe5+bgCxs9qolPXbpRu SUc33c4MrmnCat70NL/v8st+A6HoBk13jtYYoB16lreqB6yYwd+QuFuW1FJaqOTpgnxI kDGVXw8T8EkHrG7GFrVlQSCQ4nNkmYox7I9S8317XfXNvHc9isY29DeSmyAjuG6ouN6L +g7cefnMsVzv5NbGP83cLkIYPaOhZhD24MLVpnYwFsEK9KBEoe2lPry066j89I2KDF6Q BhwA== X-Gm-Message-State: AOJu0Yx1lXWFjnj9YRat4JYu4PhZqLbxTsHysN26w37OWNpVvk69A2nJ lNp+N8AAUTrdk5DnB6l9DRQEQYC5qUZwAg1JriBVRTZ4W6kvmIIZHYNAbciVX0n9pbKQBqYYQjV eI+/tS90= X-Gm-Gg: ASbGncvPdPtjZMDobNajWMpkXaJdY5iaHIPdAU5/hYSL1bVaWsDX7ZGEqin9pX8sbjU ye6KZWaVRS8E6kuE+FzQh4MsnXn4+baVJzq+Uc694tZo8h1sqxDY+YGTOGESPEsIqTpNeBGruv8 n9fHMrslNjdMviqVYmkAuW/B7PBSIk1LAAq+9KNEFRGr/KFy/UZEQd941ZkYGhKBWl8g92r/8Iq iDgd8tXD+385FKSvYch95BfQpk3Sir9inyAigV5SqbHhh1WqnyIWkpm3UsDmxK159Op725sJOOl waleckRaaDxFnpIJ0pzzw72g95KpQcMgDWHk46Ta4Gz8Abpz21a+bAj/zcZ7noz4Yd0q7kMZbLQ FATv0x7rfq8PpuIKIyTN6jKw9t7N5c8D/VJAZUBuv9W6vrkE= X-Google-Smtp-Source: AGHT+IHJlxynQAfzlFLMK7JnTwv38RazmkxXnPZakLvFfdjC1wafSR0T0XR/alMAfGA2+b/DeIfKYA== X-Received: by 2002:a05:6a00:b84:b0:76b:f063:a3cb with SMTP id d2e1a72fcca58-76e44818e50mr2591486b3a.19.1755260831797; Fri, 15 Aug 2025 05:27:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 5/7] target/arm: Rename isar_feature_aa64_atomics Date: Fri, 15 Aug 2025 22:26:51 +1000 Message-ID: <20250815122653.701782-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250815122653.701782-1-richard.henderson@linaro.org> References: <20250815122653.701782-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1755260942925124100 Content-Type: text/plain; charset="utf-8" This is FEAT_LSE -- rename the predicate to match. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- target/arm/cpu-features.h | 2 +- linux-user/elfload.c | 2 +- target/arm/tcg/translate-a64.c | 24 ++++++++++++------------ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h index 5876162428..e3d4c3d382 100644 --- a/target/arm/cpu-features.h +++ b/target/arm/cpu-features.h @@ -406,7 +406,7 @@ static inline bool isar_feature_aa64_crc32(const ARMISA= Registers *id) return FIELD_EX64_IDREG(id, ID_AA64ISAR0, CRC32) !=3D 0; } =20 -static inline bool isar_feature_aa64_atomics(const ARMISARegisters *id) +static inline bool isar_feature_aa64_lse(const ARMISARegisters *id) { return FIELD_EX64_IDREG(id, ID_AA64ISAR0, ATOMIC) !=3D 0; } diff --git a/linux-user/elfload.c b/linux-user/elfload.c index ea214105ff..9f36ec06a4 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -862,7 +862,7 @@ uint32_t get_elf_hwcap(void) GET_FEATURE_ID(aa64_sm3, ARM_HWCAP_A64_SM3); GET_FEATURE_ID(aa64_sm4, ARM_HWCAP_A64_SM4); GET_FEATURE_ID(aa64_fp16, ARM_HWCAP_A64_FPHP | ARM_HWCAP_A64_ASIMDHP); - GET_FEATURE_ID(aa64_atomics, ARM_HWCAP_A64_ATOMICS); + GET_FEATURE_ID(aa64_lse, ARM_HWCAP_A64_ATOMICS); GET_FEATURE_ID(aa64_lse2, ARM_HWCAP_A64_USCAT); GET_FEATURE_ID(aa64_rdm, ARM_HWCAP_A64_ASIMDRDM); GET_FEATURE_ID(aa64_dp, ARM_HWCAP_A64_ASIMDDP); diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index dbf47595db..d0639e29cf 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -3237,7 +3237,7 @@ static bool trans_LDXP(DisasContext *s, arg_stxr *a) =20 static bool trans_CASP(DisasContext *s, arg_CASP *a) { - if (!dc_isar_feature(aa64_atomics, s)) { + if (!dc_isar_feature(aa64_lse, s)) { return false; } if (((a->rt | a->rs) & 1) !=3D 0) { @@ -3250,7 +3250,7 @@ static bool trans_CASP(DisasContext *s, arg_CASP *a) =20 static bool trans_CAS(DisasContext *s, arg_CAS *a) { - if (!dc_isar_feature(aa64_atomics, s)) { + if (!dc_isar_feature(aa64_lse, s)) { return false; } gen_compare_and_swap(s, a->rs, a->rt, a->rn, a->sz); @@ -3743,15 +3743,15 @@ static bool do_atomic_ld(DisasContext *s, arg_atomi= c *a, AtomicThreeOpFn *fn, return true; } =20 -TRANS_FEAT(LDADD, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_add_= i64, 0, false) -TRANS_FEAT(LDCLR, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_and_= i64, 0, true) -TRANS_FEAT(LDEOR, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_xor_= i64, 0, false) -TRANS_FEAT(LDSET, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_or_i= 64, 0, false) -TRANS_FEAT(LDSMAX, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_sma= x_i64, MO_SIGN, false) -TRANS_FEAT(LDSMIN, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_smi= n_i64, MO_SIGN, false) -TRANS_FEAT(LDUMAX, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_uma= x_i64, 0, false) -TRANS_FEAT(LDUMIN, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_umi= n_i64, 0, false) -TRANS_FEAT(SWP, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_xchg_i64, 0,= false) +TRANS_FEAT(LDADD, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_add_i64,= 0, false) +TRANS_FEAT(LDCLR, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_and_i64,= 0, true) +TRANS_FEAT(LDEOR, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_xor_i64,= 0, false) +TRANS_FEAT(LDSET, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_or_i64, = 0, false) +TRANS_FEAT(LDSMAX, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_smax_i6= 4, MO_SIGN, false) +TRANS_FEAT(LDSMIN, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_smin_i6= 4, MO_SIGN, false) +TRANS_FEAT(LDUMAX, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_umax_i6= 4, 0, false) +TRANS_FEAT(LDUMIN, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_umin_i6= 4, 0, false) +TRANS_FEAT(SWP, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_xchg_i64, 0, fal= se) =20 static bool trans_LDAPR(DisasContext *s, arg_LDAPR *a) { @@ -3759,7 +3759,7 @@ static bool trans_LDAPR(DisasContext *s, arg_LDAPR *a) TCGv_i64 clean_addr; MemOp mop; =20 - if (!dc_isar_feature(aa64_atomics, s) || + if (!dc_isar_feature(aa64_lse, s) || !dc_isar_feature(aa64_rcpc_8_3, s)) { return false; } --=20 2.43.0 From nobody Sat Nov 15 05:35:30 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1755260943; cv=none; d=zohomail.com; s=zohoarc; b=E/m8HOwspnZ+sWsYU5NhVV19Br5n8NAf2AEZHBDcWan3eh0YjZJrAEoBiK66Y1uO57HJiUpUixjCAXCES4M07dzkm96RM9hLsmQGepQyduZ7kivp87pUCQYPNlP5uEdtIU6wdkFNsBpKZLpJ0yD1UCMJubQ3uzHh8ObQs4vrlVw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755260943; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=aOj+DAaeetKjJupolvA9t6VmPiMUrpueVj6erK/0Xn8=; b=TPWFfLtB2aCN61VfSFzpH8YtUtKpOp/PRt5ZTeDcavVFKUal3yvoEQMmlyd9UU3lNi8IJoxj3ijyw1EFvvGsR8aviHBSKjHyEBYceeoA2HbKN+Kjcj7X+ZW5Zoulep11wl4LacuHtdzN3VdSVpxgaa6jN3Hruw8YCXQ9azViMg8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175526094314944.79301854587436; Fri, 15 Aug 2025 05:29:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umtWu-00017R-8k; Fri, 15 Aug 2025 08:27:33 -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 1umtWi-00015i-5l for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:24 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umtWd-0007Yf-C9 for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:19 -0400 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-76e2e60433eso1537013b3a.0 for ; Fri, 15 Aug 2025 05:27:15 -0700 (PDT) Received: from localhost.localdomain ([206.83.105.236]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-76e45292c86sm1053475b3a.48.2025.08.15.05.27.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 05:27:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1755260834; x=1755865634; darn=nongnu.org; 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=aOj+DAaeetKjJupolvA9t6VmPiMUrpueVj6erK/0Xn8=; b=IUaarlGhjfwHe1Vzil/piSERzvNEbXwXB/QaPnC1xA187CN7NCQVYDRNeLi7VyssXw 7FP7knLmQAH4llJSClX/Dm9/cmkOEb5WObI1OyWEuAer4ke3G325N1PPe9T46jodPq1S fPuU0UJAVQLXdIPIU5IMwkro8ddjoGa2NgAPpD6za7p/2v8AZcCaQ2m1uQL6Z8r117jG psgIJs6LMA9CzsNWoWc3QVRV8Gr1k4Mufy8Z/oUtRh2C3f4tzKvkdpBF8Zzt+b+cLfKa WDmLuDwElYeCTgM4FZb3PxzSvoXyKMJt3q3NZNLnQ06BkHA6T5J4DaNDODHeL9zb9HbS gRkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755260834; x=1755865634; 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=aOj+DAaeetKjJupolvA9t6VmPiMUrpueVj6erK/0Xn8=; b=nThvQxFxKswVZoqf1YLKHEe3rI2FNyLSzshPziWCoti75BCLVUv+LtBA3jkRhhmzIx a0z8skMw/EKOOtSmmG/FgWNzN5dXJ0s4VjJQr6ZsgsDAhOG5WgD8oeXiCNIaacOIeyHu FZ7QCQWJPfafBtIOTV4vdLWRlkYoMBpxKqaUeK0ZImSBNwCfCCGJHJNov4AdP3n5i4+F 0tsrJ0HZC5VDfKyP5OHUbWbm5Ta1+g1FIAHSmHnw/qSoElx7XLSQPwbIiPZecYrkvS1q Ib+17y4Z+VOYq3xg3B0spSYCtj3cKEBceN5Nj7FpJepMH2szkW9v84kHQJPJDJOdnWtK MWWw== X-Gm-Message-State: AOJu0Yz4LyGW/O/YjGhFZRCC9iPFZB+Wx38scoRf4ShFIqCCUun5OUeZ yCQ1LBNKgqENbCltW6d+joj+ymuQmmSzdWASeRvWe1LHj4VM74F7ZjYAP5seBrFqAQNdIptJaUw /eDnC504= X-Gm-Gg: ASbGncsUMbFr3u7453cpurgxenidR6qTOAktQp/DaCzjXMRKfigYCLbgvlAUuODfkg/ d4CBXvxnjYDL0Hg0TScZkiAGyNJJ30F2KoYXgwvwtSG3LqIf6unKHahHJzj4ERvxtCmOLvvHfcb HXGoRxdbxuhT6mr6UfuwRtD4Fcae/i2QFKz+CwYr19lTldmTESrFU0JrE/GHCb1X8eH6p3yX+Tu mdhpESlnI3kUZVfytyZQdr0O6/StE9/j37mccM3mBfqZaWn9+52FjcpRFNzqqdmOFvUzcNG/iDn 3+p77BVmfmMMVgWhRB4hDY2O0WI2vIjtxSgJcUdCjttCDZIE3FhvFsQo1nZezEG4UULE46BQy/w 0N+IC2xb6DD9RtoLRb2909Os3I0tFUXTMxA2WmIH3Fl8qiEYQFSvHXkCdDQ== X-Google-Smtp-Source: AGHT+IGp3B1bVyBHwiVNJnZBhlua/dk1ppVDoBh7gVkc3CP6acBER4t9hJtXlARjwFKNY3poGgveTg== X-Received: by 2002:a05:6a20:3949:b0:234:4b39:182c with SMTP id adf61e73a8af0-240d2f214ebmr3762884637.38.1755260833923; Fri, 15 Aug 2025 05:27:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 6/7] target/arm: Implement FEAT_LSE128 Date: Fri, 15 Aug 2025 22:26:52 +1000 Message-ID: <20250815122653.701782-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250815122653.701782-1-richard.henderson@linaro.org> References: <20250815122653.701782-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42f; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1755260944778116600 Content-Type: text/plain; charset="utf-8" This feature contains the LDCLRP, LDSETP, and SWPP instructions. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- target/arm/cpu-features.h | 5 ++++ target/arm/tcg/translate-a64.c | 49 ++++++++++++++++++++++++++++++++++ target/arm/tcg/a64.decode | 7 +++++ 3 files changed, 61 insertions(+) diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h index e3d4c3d382..182b301c86 100644 --- a/target/arm/cpu-features.h +++ b/target/arm/cpu-features.h @@ -411,6 +411,11 @@ static inline bool isar_feature_aa64_lse(const ARMISAR= egisters *id) return FIELD_EX64_IDREG(id, ID_AA64ISAR0, ATOMIC) !=3D 0; } =20 +static inline bool isar_feature_aa64_lse128(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64ISAR0, ATOMIC) >=3D 3; +} + static inline bool isar_feature_aa64_rdm(const ARMISARegisters *id) { return FIELD_EX64_IDREG(id, ID_AA64ISAR0, RDM) !=3D 0; diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index d0639e29cf..976bf4df32 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -3753,6 +3753,55 @@ TRANS_FEAT(LDUMAX, aa64_lse, do_atomic_ld, a, tcg_ge= n_atomic_fetch_umax_i64, 0, TRANS_FEAT(LDUMIN, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_umin_i6= 4, 0, false) TRANS_FEAT(SWP, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_xchg_i64, 0, fal= se) =20 +typedef void Atomic128ThreeOpFn(TCGv_i128, TCGv_i64, TCGv_i128, TCGArg, Me= mOp); + +static bool do_atomic128_ld(DisasContext *s, arg_atomic128 *a, + Atomic128ThreeOpFn *fn, bool invert) +{ + MemOp mop; + int rlo, rhi; + TCGv_i64 clean_addr, tlo, thi; + TCGv_i128 t16; + + if (a->rt =3D=3D 31 || a->rt2 =3D=3D 31 || a->rt =3D=3D a->rt2) { + return false; + } + if (a->rn =3D=3D 31) { + gen_check_sp_alignment(s); + } + mop =3D check_atomic_align(s, a->rn, MO_128); + clean_addr =3D gen_mte_check1(s, cpu_reg_sp(s, a->rn), false, + a->rn !=3D 31, mop); + + rlo =3D (s->be_data =3D=3D MO_LE ? a->rt : a->rt2); + rhi =3D (s->be_data =3D=3D MO_LE ? a->rt2 : a->rt); + + tlo =3D read_cpu_reg(s, rlo, true); + thi =3D read_cpu_reg(s, rhi, true); + if (invert) { + tcg_gen_not_i64(tlo, tlo); + tcg_gen_not_i64(thi, thi); + } + /* + * The tcg atomic primitives are all full barriers. Therefore we + * can ignore the Acquire and Release bits of this instruction. + */ + t16 =3D tcg_temp_new_i128(); + tcg_gen_concat_i64_i128(t16, tlo, thi); + + fn(t16, clean_addr, t16, get_mem_index(s), mop); + + tcg_gen_extr_i128_i64(cpu_reg(s, rlo), cpu_reg(s, rhi), t16); + return true; +} + +TRANS_FEAT(LDCLRP, aa64_lse128, do_atomic128_ld, + a, tcg_gen_atomic_fetch_and_i128, true) +TRANS_FEAT(LDSETP, aa64_lse128, do_atomic128_ld, + a, tcg_gen_atomic_fetch_or_i128, false) +TRANS_FEAT(SWPP, aa64_lse128, do_atomic128_ld, + a, tcg_gen_atomic_xchg_i128, false) + static bool trans_LDAPR(DisasContext *s, arg_LDAPR *a) { bool iss_sf =3D ldst_iss_sf(a->sz, false, false); diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode index 8c798cde2b..70ed9610af 100644 --- a/target/arm/tcg/a64.decode +++ b/target/arm/tcg/a64.decode @@ -536,6 +536,13 @@ SWP .. 111 0 00 . . 1 ..... 1000 00 ..... = ..... @atomic =20 LDAPR sz:2 111 0 00 1 0 1 11111 1100 00 rn:5 rt:5 =20 +# Atomic 128-bit memory operations +&atomic128 rn rt rt2 a r +@atomic128 ........ a:1 r:1 . rt2:5 ...... rn:5 rt:5 &atomic128 +LDCLRP 00011001 . . 1 ..... 000100 ..... ..... @atomic128 +LDSETP 00011001 . . 1 ..... 001100 ..... ..... @atomic128 +SWPP 00011001 . . 1 ..... 100000 ..... ..... @atomic128 + # Load/store register (pointer authentication) =20 # LDRA immediate is 10 bits signed and scaled, but the bits aren't all con= tiguous --=20 2.43.0 From nobody Sat Nov 15 05:35:30 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1755260921; cv=none; d=zohomail.com; s=zohoarc; b=L6ctVGChymgD9i9Xl2Tq4qHv1OF6Omhqs1QeUK9AlpRSiIr6UgEiWfKhb1PE9gT8NbciC0Y+ed9LNdO67ny3hyA5Ok5B1kdj1pt+mx2b/gfP3nNfkuKbp8qHsArxTTU3PJvO4yjY2tuojbcbw1JAQkQS2BU1r6mdglJmomL3TzE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755260921; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=QLYyuHVparpPkh2Y2hgv/6oup4ZQ3R6Uz4weGDqzuYA=; b=iChvgquYiVolTtYdtoe/o9PXydCQfiEC+1kpGQzW4sVV7l1mLd0sNUDOyl+YF0nOIhIzfoklPx6lXQjZQlHsM+3mCCoUsGIkk6rhVcl3P6xnW6ELmSMc8V3y+8EeCbzeNNeZJhJFnK53ItrIGGSslP4nUIu0OjOnaY0n7SdoKgE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1755260921460384.46802543861645; Fri, 15 Aug 2025 05:28:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umtWz-00019B-1I; Fri, 15 Aug 2025 08:27:37 -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 1umtWj-00015n-Jp for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:24 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umtWg-0007ZA-Dy for qemu-devel@nongnu.org; Fri, 15 Aug 2025 08:27:21 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-76e39ec6f52so1499738b3a.1 for ; Fri, 15 Aug 2025 05:27:17 -0700 (PDT) Received: from localhost.localdomain ([206.83.105.236]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-76e45292c86sm1053475b3a.48.2025.08.15.05.27.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 05:27:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1755260836; x=1755865636; darn=nongnu.org; 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=QLYyuHVparpPkh2Y2hgv/6oup4ZQ3R6Uz4weGDqzuYA=; b=j4KX+tOpCEbxnUV/GvBOugpATStri6916V5lxezX6uCv2xfgAl5uO/+0fpxpr5SXw1 ewVkRlOl7vWyerECa253sVKABohHyECRGVnUcbKgTiAXM9UDEWRGaTxJfzn6bbMlM++Y HeTjHU2iWO5ynjt3BpkAZkVmjMnCr5p19+Nk6pd+dYoemgKIZVY2HeWMUR83aRBlRKmk NbbJdeQBJxsEIFXHxegNYKH9APvfxIWIWomL2xWb5sm1oXjWsE77OjTX083JXpSSg17k PZYA+MtVUuu3Lt54PE6Nk5cspFRHFHxKouFCkRaOYiV+HDT8QMnB+W2kBXsLtQcjpkZE 1kvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755260836; x=1755865636; 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=QLYyuHVparpPkh2Y2hgv/6oup4ZQ3R6Uz4weGDqzuYA=; b=E+xkEXhvDXGo0YYDoTXJmU0WvfAu0RQ3a7/jxWJwFUu6mgXJDVaeK8fcrXX4TpvMyw f7WcXaRJdl3wTkfaAy7CajDdP4bemP0QAWShCfGNhtD5ESittSREuD4T0rojLt7xMJr3 6SSm8ieM3F+Iy5EzxJ93mTX3E+h4Z8UlfWO9Fqtxg1cxG8xlXr0i3rSjXUMaDk9PJ8bm 5GYDFmLIZ9IqGYUKHi4aakDCMvm+qAEEba/pQdFiyohc/qMVPndBSYTa1Sqx6FmdAN5f LptcRtCX/SBIIhJ7hjLxwU5nq6q20UwJTfuHc8gyr7xylHdE5ywBtWxoVOWgquKSOXV1 zqJA== X-Gm-Message-State: AOJu0YxXn7WDy4UwkWAyeT9UGyEI4OhsHDTSWjRoWiKNZsHWy82B0GAk 7xcHHm5LgIWzGnN/jJUwOl/NkBPGvwEk8WlhMoLx6Lp8juFobjmniaeQkfyQ3fVaZMrLOa0ZV2A Qa9rMEPg= X-Gm-Gg: ASbGncvgb/OgzX1Rr/DJElevIn/nwe7MDn6HtkpNwYrSIzyrZKvSS8qZ2E7VMwL9KJT W9LD8JLeWZctOV4fEKCP1f0HsMyQ9rX/+OQVvJuS8iFjYXU53kKamS7+tlf9dz8nXDBGIxKrPfP esgILMMQfy5IVboV/EFMufFtnXySw2Q6IOffpZ0qBNpfgV5mVrZg96QK0jFwid1ozU6V232EgxQ ovdYU93QOSUt11v8aKQRRWe6jHpJnsVo5Yjm1THDVsg6vEb+RW/x6TrnW3W/EiBsJy4NfgltoJi T/JmGdpXO0i2XZNF5aMMeAy+/NYI+5mp5pEJDHCK69/BlRwbaG0v8b6nuNYJFj87EdsGiTe1Ci5 4zgX6mmgsfZ+ltow7bCaMsoqww/2PtqNZmWmlQjEzyMWppzzJgvJgNXp2dQ== X-Google-Smtp-Source: AGHT+IFk68NYNRFwYUGNDYOpMW9V9B9xkw97YN0Ur76Ui2lQbghLcnkIro4yhruNStmIa0bLurwswA== X-Received: by 2002:a05:6a20:3949:b0:23d:8af5:13b9 with SMTP id adf61e73a8af0-240d2debc97mr3076399637.2.1755260836513; Fri, 15 Aug 2025 05:27:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 7/7] target/arm: Enable FEAT_LSE128 for -cpu max Date: Fri, 15 Aug 2025 22:26:53 +1000 Message-ID: <20250815122653.701782-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250815122653.701782-1-richard.henderson@linaro.org> References: <20250815122653.701782-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1755260922323124100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- linux-user/elfload.c | 1 + target/arm/tcg/cpu64.c | 2 +- docs/system/arm/emulation.rst | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 9f36ec06a4..85f67d3d44 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -923,6 +923,7 @@ uint64_t get_elf_hwcap2(void) GET_FEATURE_ID(aa64_sme_b16b16, ARM_HWCAP2_A64_SME_B16B16); GET_FEATURE_ID(aa64_sme_f16f16, ARM_HWCAP2_A64_SME_F16F16); GET_FEATURE_ID(aa64_sve_b16b16, ARM_HWCAP2_A64_SVE_B16B16); + GET_FEATURE_ID(aa64_lse128, ARM_HWCAP2_A64_LSE128); =20 return hwcaps; } diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c index 35cddbafa4..370818d11b 100644 --- a/target/arm/tcg/cpu64.c +++ b/target/arm/tcg/cpu64.c @@ -1145,7 +1145,7 @@ void aarch64_max_tcg_initfn(Object *obj) t =3D FIELD_DP64(t, ID_AA64ISAR0, SHA1, 1); /* FEAT_SHA1 */ t =3D FIELD_DP64(t, ID_AA64ISAR0, SHA2, 2); /* FEAT_SHA512 */ t =3D FIELD_DP64(t, ID_AA64ISAR0, CRC32, 1); /* FEAT_CRC32 */ - t =3D FIELD_DP64(t, ID_AA64ISAR0, ATOMIC, 2); /* FEAT_LSE */ + t =3D FIELD_DP64(t, ID_AA64ISAR0, ATOMIC, 3); /* FEAT_LSE, FEAT_LSE1= 28 */ t =3D FIELD_DP64(t, ID_AA64ISAR0, RDM, 1); /* FEAT_RDM */ t =3D FIELD_DP64(t, ID_AA64ISAR0, SHA3, 1); /* FEAT_SHA3 */ t =3D FIELD_DP64(t, ID_AA64ISAR0, SM3, 1); /* FEAT_SM3 */ diff --git a/docs/system/arm/emulation.rst b/docs/system/arm/emulation.rst index 890dc6fee2..a5c0e61393 100644 --- a/docs/system/arm/emulation.rst +++ b/docs/system/arm/emulation.rst @@ -88,6 +88,7 @@ the following architecture extensions: - FEAT_LRCPC2 (Load-acquire RCpc instructions v2) - FEAT_LSE (Large System Extensions) - FEAT_LSE2 (Large System Extensions v2) +- FEAT_LSE128 (128-bit Atomics) - FEAT_LVA (Large Virtual Address space) - FEAT_MixedEnd (Mixed-endian support) - FEAT_MixedEndEL0 (Mixed-endian support at EL0) --=20 2.43.0