Index: benchmark/readyQ/cycle.cpp
===================================================================
--- benchmark/readyQ/cycle.cpp	(revision b374dbcdcbe91cf6b881e5c289e6fd6cbd0834d7)
+++ benchmark/readyQ/cycle.cpp	(revision 56ac3922b89c94c1e0fef81af50851a874dde080)
@@ -3,46 +3,4 @@
 #include <libfibre/fibre.h>
 
-class __attribute__((aligned(128))) bench_sem {
-	Fibre * volatile ptr = nullptr;
-public:
-	inline bool wait() {
-		static Fibre * const ready  = reinterpret_cast<Fibre * const>(1ull);
-		for(;;) {
-			Fibre * expected = this->ptr;
-			if(expected == ready) {
-				if(__atomic_compare_exchange_n(&this->ptr, &expected, nullptr, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
-					return false;
-				}
-			}
-			else {
-				/* paranoid */ assert( expected == nullptr );
-				if(__atomic_compare_exchange_n(&this->ptr, &expected, fibre_self(), false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
-					fibre_park();
-					return true;
-				}
-			}
-
-		}
-	}
-
-	inline bool post() {
-		static Fibre * const ready  = reinterpret_cast<Fibre * const>(1ull);
-		for(;;) {
-			Fibre * expected = this->ptr;
-			if(expected == ready) return false;
-			if(expected == nullptr) {
-				if(__atomic_compare_exchange_n(&this->ptr, &expected, ready, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
-					return false;
-				}
-			}
-			else {
-				if(__atomic_compare_exchange_n(&this->ptr, &expected, nullptr, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
-					fibre_unpark( expected );
-					return true;
-				}
-			}
-		}
-	}
-};
 struct Partner {
 	unsigned long long count  = 0;
Index: benchmark/readyQ/locality.cpp
===================================================================
--- benchmark/readyQ/locality.cpp	(revision b374dbcdcbe91cf6b881e5c289e6fd6cbd0834d7)
+++ benchmark/readyQ/locality.cpp	(revision 56ac3922b89c94c1e0fef81af50851a874dde080)
@@ -9,47 +9,4 @@
 	uint64_t dmigs = 0;
 	uint64_t gmigs = 0;
-};
-
-class __attribute__((aligned(128))) bench_sem {
-	Fibre * volatile ptr = nullptr;
-public:
-	inline bool wait() {
-		static Fibre * const ready  = reinterpret_cast<Fibre * const>(1ull);
-		for(;;) {
-			Fibre * expected = this->ptr;
-			if(expected == ready) {
-				if(__atomic_compare_exchange_n(&this->ptr, &expected, nullptr, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
-					return false;
-				}
-			}
-			else {
-				/* paranoid */ assert( expected == nullptr );
-				if(__atomic_compare_exchange_n(&this->ptr, &expected, fibre_self(), false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
-					fibre_park();
-					return true;
-				}
-			}
-
-		}
-	}
-
-	inline bool post() {
-		static Fibre * const ready  = reinterpret_cast<Fibre * const>(1ull);
-		for(;;) {
-			Fibre * expected = this->ptr;
-			if(expected == ready) return false;
-			if(expected == nullptr) {
-				if(__atomic_compare_exchange_n(&this->ptr, &expected, ready, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
-					return false;
-				}
-			}
-			else {
-				if(__atomic_compare_exchange_n(&this->ptr, &expected, nullptr, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
-					fibre_unpark( expected );
-					return true;
-				}
-			}
-		}
-	}
 };
 
Index: benchmark/readyQ/rq_bench.hpp
===================================================================
--- benchmark/readyQ/rq_bench.hpp	(revision b374dbcdcbe91cf6b881e5c289e6fd6cbd0834d7)
+++ benchmark/readyQ/rq_bench.hpp	(revision 56ac3922b89c94c1e0fef81af50851a874dde080)
@@ -6,4 +6,10 @@
 #include <time.h>										// timespec
 #include <sys/time.h>									// timeval
+
+typedef __uint128_t __lehmer64_state_t;
+static inline uint64_t __lehmer64( __lehmer64_state_t & state ) {
+	state *= 0xda942042e4dd58b5;
+	return state >> 64;
+}
 
 enum { TIMEGRAN = 1000000000LL };					// nanosecond granularity, except for timeval
@@ -75,4 +81,52 @@
 }
 
+class Fibre;
+int fibre_park();
+int fibre_unpark( Fibre * );
+Fibre * fibre_self();
+
+class __attribute__((aligned(128))) bench_sem {
+	Fibre * volatile ptr = nullptr;
+public:
+	inline bool wait() {
+		static Fibre * const ready  = reinterpret_cast<Fibre *>(1ull);
+		for(;;) {
+			Fibre * expected = this->ptr;
+			if(expected == ready) {
+				if(__atomic_compare_exchange_n(&this->ptr, &expected, nullptr, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
+					return false;
+				}
+			}
+			else {
+				/* paranoid */ assert( expected == nullptr );
+				if(__atomic_compare_exchange_n(&this->ptr, &expected, fibre_self(), false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
+					fibre_park();
+					return true;
+				}
+			}
+
+		}
+	}
+
+	inline bool post() {
+		static Fibre * const ready  = reinterpret_cast<Fibre *>(1ull);
+		for(;;) {
+			Fibre * expected = this->ptr;
+			if(expected == ready) return false;
+			if(expected == nullptr) {
+				if(__atomic_compare_exchange_n(&this->ptr, &expected, ready, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
+					return false;
+				}
+			}
+			else {
+				if(__atomic_compare_exchange_n(&this->ptr, &expected, nullptr, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) {
+					fibre_unpark( expected );
+					return true;
+				}
+			}
+		}
+	}
+};
+
 // ==========================================================================================
 #include <cstdlib>
@@ -188,5 +242,8 @@
 		this->help       = help;
 		this->variable   = reinterpret_cast<void*>(&variable);
-		this->parse_fun  = reinterpret_cast<bool (*)(const char *, void * )>(static_cast<bool (*)(const char *, T & )>(parse));
+		#pragma GCC diagnostic push
+		#pragma GCC diagnostic ignored "-Wcast-function-type"
+				this->parse_fun  = reinterpret_cast<bool (*)(const char *, void * )>(static_cast<bool (*)(const char *, T & )>(parse));
+		#pragma GCC diagnostic pop
 	}
 
@@ -197,5 +254,8 @@
 		this->help       = help;
 		this->variable   = reinterpret_cast<void*>(&variable);
-		this->parse_fun  = reinterpret_cast<bool (*)(const char *, void * )>(parse);
+		#pragma GCC diagnostic push
+		#pragma GCC diagnostic ignored "-Wcast-function-type"
+			this->parse_fun  = reinterpret_cast<bool (*)(const char *, void * )>(parse);
+		#pragma GCC diagnostic pop
 	}
 };
