Index: benchmark/schedext/cfa1.c
===================================================================
--- benchmark/schedext/cfa1.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ benchmark/schedext/cfa1.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,44 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+monitor M {};
+M m1;
+
+void __attribute__((noinline)) call( M & mutex a1 ) {}
+
+int  __attribute__((noinline)) wait( M & mutex a1 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			waitfor(call, a1);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	T t;
+	return wait(m1);
+}
Index: benchmark/schedext/cfa2.c
===================================================================
--- benchmark/schedext/cfa2.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ benchmark/schedext/cfa2.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,44 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+monitor M {};
+M m1, m2;
+
+void __attribute__((noinline)) call( M & mutex a1, M & mutex a2 ) {}
+
+int  __attribute__((noinline)) wait( M & mutex a1, M & mutex a2 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			waitfor(call, a1, a2);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1, m2); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	T t;
+	return wait(m1, m2);
+}
Index: benchmark/schedext/cfa4.c
===================================================================
--- benchmark/schedext/cfa4.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ benchmark/schedext/cfa4.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,44 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+monitor M {};
+M m1, m2, m3, m4;
+
+void __attribute__((noinline)) call( M & mutex a1, M & mutex a2, M & mutex a3, M & mutex a4 ) {}
+
+int  __attribute__((noinline)) wait( M & mutex a1, M & mutex a2, M & mutex a3, M & mutex a4 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			waitfor(call, a1, a2, a3, a4);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1, m2, m3, m4); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	T t;
+	return wait(m1, m2, m3, m4);
+}
Index: benchmark/schedext/upp.cc
===================================================================
--- benchmark/schedext/upp.cc	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ benchmark/schedext/upp.cc	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,43 @@
+#include <cstdio>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+_Monitor M {
+public:
+	void __attribute__((noinline)) call() {}
+
+	int __attribute__((noinline)) wait() {
+		go = 1;
+		BENCH(
+			for (size_t i = 0; i < n; i++) {
+				_Accept(call);
+			},
+			result
+		)
+
+		printf("%llu\n", result);
+		go = 0;
+		return 0;
+	}
+};
+
+M m;
+
+_Task T {
+	void main() {
+		while(go == 0) { yield(); }
+		while(go == 1) { m.call(); }
+
+	}
+};
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	T t;
+	return m.wait();
+}
