opnsense-ports/textproc/zorba/files/patch-src-util_atomic_int.h
Franco Fichtner 8cb1a96ede ports: pull in a snapshot of the FreeBSD ports tree
Taken from:	https://github.com/freebsd/freebsd-ports.git
Commit id:	5070672073b68be364139bc6b3a89100bd17d331
2014-11-09 14:03:21 +01:00

138 lines
4.3 KiB
C++

--- src/util/atomic_int.h.orig 2011-09-15 10:09:31.000000000 +0200
+++ src/util/atomic_int.h 2011-09-15 11:15:19.000000000 +0200
@@ -27,7 +27,10 @@
// Test first for and prefer gcc's atomic operations over all others since
// they're an order of magnitude faster.
//
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+# include <sys/types.h>
+# include <machine/atomic.h>
+#elif defined( __GNUC__ )
# if __GNUC__ * 100 + __GNUC_MINOR__ >= 402
# include <ext/atomicity.h>
# else
@@ -40,9 +43,6 @@
# endif
#elif defined( __APPLE__ )
# include <libkern/OSAtomic.h>
-#elif defined( __FreeBSD__ )
-# include <sys/types.h>
-# include <machine/atomic.h>
#elif defined( __NetBSD__ )
# include <sys/atomic.h>
#elif defined( __SOLARIS__ )
@@ -66,12 +66,12 @@
*/
class atomic_int {
public:
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+ typedef int value_type;
+#elif defined( __GNUC__ )
typedef _Atomic_word value_type;
#elif defined( __APPLE__ ) || defined( __NetBSD__ ) || defined( __SOLARIS__ )
typedef int32_t value_type;
-#elif defined( __FreeBSD__ )
- typedef int value_type;
#elif defined( _WIN32 )
typedef LONG value_type;
#endif
@@ -172,7 +172,7 @@
value_type load_impl() const {
#if defined( __FreeBSD__ )
- return atomic_load_acq_int( &value_ );
+ return atomic_load_acq_int( (volatile u_int *)&value_ );
#else
value_type const temp = *(value_type volatile*)&value_;
# if defined( __GNUC__ )
@@ -192,7 +192,7 @@
void store_impl( value_type n ) {
#if defined( __FreeBSD__ )
- atomic_store_rel_int( &value_, n );
+ atomic_store_rel_int( (volatile u_int *)&value_, n );
#elif defined( _WIN32 )
InterlockedExchange( &value_, n );
#else
@@ -210,12 +210,12 @@
}
value_type add( value_type n ) {
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+ return atomic_fetchadd_int( (volatile u_int*)&value_, n ) + n;
+#elif defined( __GNUC__ )
return GNU_EXCHANGE_AND_ADD( &value_, n ) + n;
#elif defined( __APPLE__ )
return OSAtomicAdd32( n, &value_ );
-#elif defined( __FreeBSD__ )
- return atomic_fetchadd_int( &value_, n ) + n;
#elif defined( __NetBSD__ )
return (value_type)atomic_add_32_nv( (uint32_t*)&value_, n );
#elif defined( __SOLARIS__ )
@@ -226,12 +226,12 @@
}
value_type pre_dec() {
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+ return atomic_fetchadd_int( (volatile u_int *)&value_, -1 ) - 1;
+#elif defined( __GNUC__ )
return GNU_EXCHANGE_AND_ADD( &value_, -1 ) - 1;
#elif defined( __APPLE__ )
return OSAtomicDecrement32( &value_ );
-#elif defined( __FreeBSD__ )
- return atomic_fetchadd_int( &value_, -1 ) - 1;
#elif defined( __NetBSD__ )
return (value_type)atomic_add_int_nv( (uint32_t*)&value_, -1 );
#elif defined( __SOLARIS__ )
@@ -242,12 +242,12 @@
}
value_type pre_inc() {
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+ return atomic_fetchadd_int( (volatile u_int *)&value_, 1 ) + 1;
+#elif defined( __GNUC__ )
return GNU_EXCHANGE_AND_ADD( &value_, 1 ) + 1;
#elif defined( __APPLE__ )
return OSAtomicIncrement32( &value_ );
-#elif defined( __FreeBSD__ )
- return atomic_fetchadd_int( &value_, 1 ) + 1;
#elif defined( __NetBSD__ )
return (value_type)atomic_add_int_nv( (uint32_t*)&value_, 1 );
#elif defined( __SOLARIS__ )
@@ -258,12 +258,12 @@
}
value_type post_dec() {
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+ return atomic_fetchadd_int( (volatile u_int *)&value_, -1 );
+#elif defined( __GNUC__ )
return GNU_EXCHANGE_AND_ADD( &value_, -1 );
#elif defined( __APPLE__ )
return OSAtomicDecrement32( &value_ ) + 1;
-#elif defined( __FreeBSD__ )
- return atomic_fetchadd_int( &value_, -1 );
#elif defined( __NetBSD__ )
return (value_type)atomic_add_int_nv( (uint32_t*)&value_, -1 ) + 1;
#elif defined( __SOLARIS__ )
@@ -274,12 +274,12 @@
}
value_type post_inc() {
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+ return atomic_fetchadd_int( (volatile u_int *)&value_, 1 );
+#elif defined( __GNUC__ )
return GNU_EXCHANGE_AND_ADD( &value_, 1 );
#elif defined( __APPLE__ )
return OSAtomicIncrement32( &value_ ) - 1;
-#elif defined( __FreeBSD__ )
- return atomic_fetchadd_int( &value_, 1 );
#elif defined( __NetBSD__ )
return (value_type)atomic_add_int_nv( (uint32_t*)&value_, 1 ) - 1;
#elif defined( __SOLARIS__ )