From owner-svn-src-projects@FreeBSD.ORG Sat Mar 23 20:43:28 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id B12D1C67; Sat, 23 Mar 2013 20:43:28 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id A3B466F9; Sat, 23 Mar 2013 20:43:28 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2NKhSCo077262; Sat, 23 Mar 2013 20:43:28 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2NKhS2x077261; Sat, 23 Mar 2013 20:43:28 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201303232043.r2NKhS2x077261@svn.freebsd.org> From: Konstantin Belousov Date: Sat, 23 Mar 2013 20:43:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248662 - projects/counters/sys/powerpc/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 23 Mar 2013 20:43:28 -0000 Author: kib Date: Sat Mar 23 20:43:28 2013 New Revision: 248662 URL: http://svnweb.freebsd.org/changeset/base/248662 Log: Implement counter_u64_inc() on powerpc64 AIM using ll/sc. Modified: projects/counters/sys/powerpc/include/counter.h Modified: projects/counters/sys/powerpc/include/counter.h ============================================================================== --- projects/counters/sys/powerpc/include/counter.h Sat Mar 23 20:43:26 2013 (r248661) +++ projects/counters/sys/powerpc/include/counter.h Sat Mar 23 20:43:28 2013 (r248662) @@ -31,6 +31,34 @@ #include +#if defined(AIM) && defined(__powerpc64__) + +static inline void +counter_u64_inc(counter_u64_t c, uint64_t inc) +{ + uint64_t ccpu, old; + + __asm __volatile("\n" + "1:\n\t" + "mfsprg %0, 0\n\t" + "ldarx %1, %0, %2\n\t" + "add %1, %1, %3\n\t" + "stdcx. %1, %0, %2\n\t" + "bne- 1b" + : "=&b" (ccpu), "=&r" (old) + : "r" ((char *)c - (char *)&__pcpu[0]), "r" (inc) + : "cc", "memory"); +} + +static inline void +counter_u64_dec(counter_u64_t c, uint64_t dec) +{ + + counter_u64_inc(c, -dec); +} + +#else /* !AIM || !64bit */ + static inline void counter_u64_inc(counter_u64_t c, uint64_t inc) { @@ -49,4 +77,6 @@ counter_u64_dec(counter_u64_t c, uint64_ critical_exit(); } +#endif /* AIM 64bit */ + #endif /* ! __MACHINE_COUNTER_H__ */