From owner-svn-src-stable-9@FreeBSD.ORG Wed Aug 21 19:02:35 2013 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 1D338CA5; Wed, 21 Aug 2013 19:02:35 +0000 (UTC) (envelope-from tijl@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 09EE12280; Wed, 21 Aug 2013 19:02:35 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r7LJ2YpS027046; Wed, 21 Aug 2013 19:02:34 GMT (envelope-from tijl@svn.freebsd.org) Received: (from tijl@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r7LJ2YwC027044; Wed, 21 Aug 2013 19:02:34 GMT (envelope-from tijl@svn.freebsd.org) Message-Id: <201308211902.r7LJ2YwC027044@svn.freebsd.org> From: Tijl Coosemans Date: Wed, 21 Aug 2013 19:02:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r254606 - in stable/9: include sys/sys X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Aug 2013 19:02:35 -0000 Author: tijl Date: Wed Aug 21 19:02:34 2013 New Revision: 254606 URL: http://svnweb.freebsd.org/changeset/base/254606 Log: MFC r241077: - Simplify the implementation of atomic_compare_exchange_strong_explicit. - Evaluate the memory order argument in atomic_fetch_*_explicit macros. - Implement atomic_store_explicit using atomic_exchange_explicit instead of a plain assignment. MFC r241190: Define clang feature test macro __has_extension. It's used in stdatomic.h. MFC r254497: Change the return type of the fallback implementation of the atomic_compare_exchange_* macros in stdatomic.h to _Bool. Modified: stable/9/include/stdatomic.h stable/9/sys/sys/cdefs.h Directory Properties: stable/9/include/ (props changed) stable/9/sys/ (props changed) stable/9/sys/sys/ (props changed) Modified: stable/9/include/stdatomic.h ============================================================================== --- stable/9/include/stdatomic.h Wed Aug 21 18:12:04 2013 (r254605) +++ stable/9/include/stdatomic.h Wed Aug 21 19:02:34 2013 (r254606) @@ -234,19 +234,12 @@ typedef _Atomic(__uintmax_t) atomic_uin #else #define atomic_compare_exchange_strong_explicit(object, expected, \ desired, success, failure) __extension__ ({ \ - __typeof__((object)->__val) __v; \ - __typeof__(expected) __e; \ - _Bool __r; \ - __e = (expected); \ - (void)(success); \ - (void)(failure); \ - __v = __sync_val_compare_and_swap(&(object)->__val, \ - *__e, (desired)); \ - __r = (*__e == __v); \ - *__e = __v; \ - __r; \ + __typeof__(expected) __ep = (expected); \ + __typeof__(*__ep) __e = *__ep; \ + (void)(success); (void)(failure); \ + (_Bool)((*__ep = __sync_val_compare_and_swap(&(object)->__val, \ + __e, desired)) == __e); \ }) - #define atomic_compare_exchange_weak_explicit(object, expected, \ desired, success, failure) \ atomic_compare_exchange_strong_explicit(object, expected, \ @@ -271,25 +264,19 @@ __extension__ ({ \ }) #endif #define atomic_fetch_add_explicit(object, operand, order) \ - __sync_fetch_and_add(&(object)->__val, operand) + ((void)(order), __sync_fetch_and_add(&(object)->__val, operand)) #define atomic_fetch_and_explicit(object, operand, order) \ - __sync_fetch_and_and(&(object)->__val, operand) + ((void)(order), __sync_fetch_and_and(&(object)->__val, operand)) #define atomic_fetch_or_explicit(object, operand, order) \ - __sync_fetch_and_or(&(object)->__val, operand) + ((void)(order), __sync_fetch_and_or(&(object)->__val, operand)) #define atomic_fetch_sub_explicit(object, operand, order) \ - __sync_fetch_and_sub(&(object)->__val, operand) + ((void)(order), __sync_fetch_and_sub(&(object)->__val, operand)) #define atomic_fetch_xor_explicit(object, operand, order) \ - __sync_fetch_and_xor(&(object)->__val, operand) + ((void)(order), __sync_fetch_and_xor(&(object)->__val, operand)) #define atomic_load_explicit(object, order) \ - __sync_fetch_and_add(&(object)->__val, 0) -#define atomic_store_explicit(object, desired, order) __extension__ ({ \ - __typeof__(object) __o = (object); \ - __typeof__(desired) __d = (desired); \ - (void)(order); \ - __sync_synchronize(); \ - __o->__val = __d; \ - __sync_synchronize(); \ -}) + ((void)(order), __sync_fetch_and_add(&(object)->__val, 0)) +#define atomic_store_explicit(object, desired, order) \ + ((void)atomic_exchange_explicit(object, desired, order)) #endif /* Modified: stable/9/sys/sys/cdefs.h ============================================================================== --- stable/9/sys/sys/cdefs.h Wed Aug 21 18:12:04 2013 (r254605) +++ stable/9/sys/sys/cdefs.h Wed Aug 21 19:02:34 2013 (r254606) @@ -676,6 +676,9 @@ #endif #endif +#ifndef __has_extension +#define __has_extension __has_feature +#endif #ifndef __has_feature #define __has_feature(x) 0 #endif