From nobody Sat Jan 17 04:10:13 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dtNY21HFbz6PKZR for ; Sat, 17 Jan 2026 04:10:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dtNY15y2jz3WPF for ; Sat, 17 Jan 2026 04:10:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1768623013; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Tp0b271CUPCeXS/cgVQqWYpncw2oZJ3bqNCb0g+Szcg=; b=MXzWGs0XtUNFGDuKxfx2wpecBDCFqQvTkGUfSPOjluf0vBRCb4jaxYVH4+kqQqSyYD7NR+ BCUr8e1avL6t7AQ+NlYTwIu+21/C43IREGDcqxbkCuN7fiDCYrBOFkyBsQfmIEwp8IWtxR axC8z+IMa/cmjXIdivStslT0PYsPyQ7QdtEx3ZGXheEDHFmPx/I/zXJmJNBqWYM5O1Hg0x p4ftznX3KUwC/r2Thyjdo7d+dqa1v57u73FZOLafRE7BSyJ90S1b1OEPYUtFWJ/gFHqb+w Tlp+pPJLBoyVJNdUl/IM+6L8WScEhCyjMOTclPBLBBv68ARCsIfbYfjro4orPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1768623013; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Tp0b271CUPCeXS/cgVQqWYpncw2oZJ3bqNCb0g+Szcg=; b=IHDq4J+JGAuzzmI1qUgTkvdv8tvHJxb6/ZeZ5qoWO8mCcnNl12jRI2DiA7zjVDv7LEsWYb ciMoYE9tbgFoAmI/FjOITlKS684KmIl3WvnRkP70gpP37MX6NBHuEAAMLQlDZz3jrzHnBl 593cFqqN2TgJVEpJjZtc5zZq2RFx5ekb0tIm5o8s1CAM5fj+aDyd9ZS43Wwd378YoQLkle 5r7hGB/YQFX9BTBVW2CqwJRTtVoKw3yJrTQ8h9LXUfm4a6l1qSYxxEfyBZAYi8bUwMEDtI 5zC116eQt1krxWr5TmAVyF4MuK2rP9o7zJw2bYSey5SbnmoAh5aYdGYGZQPzUw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1768623013; a=rsa-sha256; cv=none; b=vUozR4jTviGIZMA8buxlw1xDX+gqBuIo08tHOY75iGqmVHMT/fPs/blgGsIz9tK301VX3l TPmcAzA8y44oQLjXzC6zoyNIFjMzBNAbwEU5vE2rDEzl6aTCBzXAkWkyl0ZqBT2HSOVcyb dabA3KaqKINmGmVKgtGYGp2Dok1LRMPrYx77gwrmsWpcxatlrQeo4j4432oqUw8kaasxEm zM2SRv+YOgB8kmqIPeHIEjtdP+mM9silZ1Rx4Mo6RN5L21r4lzVzhHdT5NOfI07tO0EMYG 1Npq8ZXJBQiTvbP+ogiWf2Kp1ipcPgYSl/suUlQQpcc9hfd0rFEfJdq57q43mw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dtNY159vlzkVc for ; Sat, 17 Jan 2026 04:10:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 303ff by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 17 Jan 2026 04:10:13 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Justin Hibbits Subject: git: cd22fd0549c9 - main - powerpc: Add ISA 2.06 sub-word atomic set/clear List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhibbits X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: cd22fd0549c9a65b8806fd013f98be89c34c44f7 Auto-Submitted: auto-generated Date: Sat, 17 Jan 2026 04:10:13 +0000 Message-Id: <696b0ba5.303ff.7c151de6@gitrepo.freebsd.org> The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=cd22fd0549c9a65b8806fd013f98be89c34c44f7 commit cd22fd0549c9a65b8806fd013f98be89c34c44f7 Author: Justin Hibbits AuthorDate: 2025-09-22 14:35:59 +0000 Commit: Justin Hibbits CommitDate: 2026-01-17 04:10:02 +0000 powerpc: Add ISA 2.06 sub-word atomic set/clear Add atomic_set/clear_short/char for doing 8-bit and 16-bit operations more efficiently on "newer" architectures (POWER7 and later). Piggybacks on b31abc95eb. --- sys/powerpc/include/atomic.h | 82 ++++++++++++++++++++++++++++++-------------- 1 file changed, 56 insertions(+), 26 deletions(-) diff --git a/sys/powerpc/include/atomic.h b/sys/powerpc/include/atomic.h index b2d7549e5bd0..60fb678e6b41 100644 --- a/sys/powerpc/include/atomic.h +++ b/sys/powerpc/include/atomic.h @@ -165,6 +165,28 @@ _ATOMIC_ADD(long) * { *p &= ~v; } */ +#ifdef ISA_206_ATOMICS +#define __atomic_clear_char(p, v, t) \ + __asm __volatile( \ + "1: lbarx %0, 0, %2\n" \ + " andc %0, %0, %3\n" \ + " stbcx. %0, 0, %2\n" \ + " bne- 1b\n" \ + : "=&r" (t), "=m" (*p) \ + : "r" (p), "r" (v), "m" (*p) \ + : "cr0", "memory") \ + /* __atomic_clear_short */ +#define __atomic_clear_short(p, v, t) \ + __asm __volatile( \ + "1: lharx %0, 0, %2\n" \ + " andc %0, %0, %3\n" \ + " sthcx. %0, 0, %2\n" \ + " bne- 1b\n" \ + : "=&r" (t), "=m" (*p) \ + : "r" (p), "r" (v), "m" (*p) \ + : "cr0", "memory") \ + /* __atomic_clear_short */ +#endif #define __atomic_clear_int(p, v, t) \ __asm __volatile( \ "1: lwarx %0, 0, %2\n" \ @@ -222,6 +244,11 @@ _ATOMIC_ADD(long) } \ /* _ATOMIC_CLEAR */ +#ifdef ISA_206_ATOMICS +_ATOMIC_CLEAR(char) +_ATOMIC_CLEAR(short) +#endif + _ATOMIC_CLEAR(int) _ATOMIC_CLEAR(long) @@ -265,6 +292,28 @@ _ATOMIC_CLEAR(long) * atomic_set(p, v) * { *p |= v; } */ +#ifdef ISA_206_ATOMICS +#define __atomic_set_char(p, v, t) \ + __asm __volatile( \ + "1: lbarx %0, 0, %2\n" \ + " or %0, %3, %0\n" \ + " stbcx. %0, 0, %2\n" \ + " bne- 1b\n" \ + : "=&r" (t), "=m" (*p) \ + : "r" (p), "r" (v), "m" (*p) \ + : "cr0", "memory") \ + /* __atomic_set_char */ +#define __atomic_set_short(p, v, t) \ + __asm __volatile( \ + "1: lharx %0, 0, %2\n" \ + " or %0, %3, %0\n" \ + " sthcx. %0, 0, %2\n" \ + " bne- 1b\n" \ + : "=&r" (t), "=m" (*p) \ + : "r" (p), "r" (v), "m" (*p) \ + : "cr0", "memory") \ + /* __atomic_set_short */ +#endif #define __atomic_set_int(p, v, t) \ __asm __volatile( \ @@ -323,6 +372,11 @@ _ATOMIC_CLEAR(long) } \ /* _ATOMIC_SET */ +#ifdef ISA_206_ATOMICS +_ATOMIC_SET(char) +_ATOMIC_SET(short) +#endif + _ATOMIC_SET(int) _ATOMIC_SET(long) @@ -1140,34 +1194,10 @@ atomic_thread_fence_seq_cst(void) #define atomic_set_short atomic_set_16 #define atomic_clear_short atomic_clear_16 #else - -static __inline void -atomic_set_short(volatile u_short *p, u_short bit) -{ - u_short v; - - v = atomic_load_short(p); - for (;;) { - if (atomic_fcmpset_16(p, &v, v | bit)) - break; - } -} - -static __inline void -atomic_clear_short(volatile u_short *p, u_short bit) -{ - u_short v; - - v = atomic_load_short(p); - for (;;) { - if (atomic_fcmpset_16(p, &v, v & ~bit)) - break; - } -} - +#define atomic_set_8 atomic_set_char +#define atomic_clear_8 atomic_clear_char #define atomic_set_16 atomic_set_short #define atomic_clear_16 atomic_clear_short - #endif /* ISA_206_ATOMICS */ /* These need sys/_atomic_subword.h on non-ISA-2.06-atomic platforms. */