Index: benchmark/Makefile.am
===================================================================
--- benchmark/Makefile.am	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ benchmark/Makefile.am	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -20,4 +20,5 @@
 include $(top_srcdir)/src/cfa.make
 
+UPPCC = u++
 UPPCOMPILE = $(UPPCC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_UPPFLAGS) $(UPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_CFLAGS) $(CFLAGS)
 
@@ -26,11 +27,21 @@
 AM_UPPFLAGS = -quiet -nodebug -multi
 
-TOOLSDIR = ${abs_top_srcdir}/tools/
-REPEAT   = ${TOOLSDIR}repeat
-STATS    = ${TOOLSDIR}stat.py
+TOOLSDIR = ${abs_top_builddir}/tools/
+REPEAT   = ${abs_top_builddir}/tools/repeat
+STATS    = ${abs_top_srcdir}/tools/stat.py
 repeats  = 30
 skipcompile = no
 TIME_FORMAT = "%E"
 PRINT_FORMAT = %20s: #Comments needed for spacing
+
+EXTRA_PROGRAMS = dummy # build but do not install
+
+dummy_SOURCES = dummyC.c dummyCXX.cpp
+
+dummyC.c:
+	@echo "int main() { return 0; }" > ${@}
+
+dummyCXX.cpp:
+	@echo "int main() { return 0; }" > ${@}
 
 .NOTPARALLEL:
@@ -59,5 +70,5 @@
 
 ${REPEAT} :
-	@+make -C ${TOOLSDIR} repeat
+	@+make -C ${abs_top_builddir}/tools repeat
 
 ## =========================================================================================================
@@ -100,11 +111,11 @@
 ## =========================================================================================================
 loop$(EXEEXT):
-	$(COMPILE) -DBENCH_N=5000000000 loop.c
+	$(COMPILE) -DBENCH_N=5000000000 $(srcdir)/loop.c
 
 function$(EXEEXT):
-	$(COMPILE) -DBENCH_N=5000000000 function.c
+	$(COMPILE) -DBENCH_N=5000000000 $(srcdir)/function.c
 
 fetch_add$(EXEEXT):
-	$(COMPILE) -DBENCH_N=500000000  fetch_add.c
+	$(COMPILE) -DBENCH_N=500000000  $(srcdir)/fetch_add.c
 
 ## =========================================================================================================
@@ -141,11 +152,11 @@
 
 ctxswitch-cfa_coroutine$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/cfa_cor.c
+	@$(CFACOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/cfa_cor.cfa
 
 ctxswitch-cfa_thread$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/cfa_thrd.c
+	@$(CFACOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/cfa_thrd.cfa
 
 ctxswitch-cfa_thread2$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/cfa_thrd2.c
+	@$(CFACOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/cfa_thrd2.cfa
 
 ctxswitch-upp_coroutine$(EXEEXT):
@@ -159,7 +170,7 @@
 
 ctxswitch-java_thread$(EXEEXT):
-	@javac $(srcdir)/ctxswitch/JavaThread.java
+	@javac -d . $(srcdir)/ctxswitch/JavaThread.java
 	@echo "#!/bin/sh" > a.out
-	@echo "cd ctxswitch && java JavaThread" >> a.out
+	@echo "java JavaThread" >> a.out
 	@chmod a+x a.out
 
@@ -183,16 +194,16 @@
 
 mutex-cfa1$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=5000000  $(srcdir)/mutex/cfa1.c
+	@$(CFACOMPILE) -DBENCH_N=5000000  $(srcdir)/mutex/cfa1.cfa
 
 mutex-cfa2$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=5000000  $(srcdir)/mutex/cfa2.c
+	@$(CFACOMPILE) -DBENCH_N=5000000  $(srcdir)/mutex/cfa2.cfa
 
 mutex-cfa4$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=5000000  $(srcdir)/mutex/cfa4.c
+	@$(CFACOMPILE) -DBENCH_N=5000000  $(srcdir)/mutex/cfa4.cfa
 
 mutex-java_thread$(EXEEXT):
-	@javac $(srcdir)/mutex/JavaThread.java
+	@javac -d . $(srcdir)/mutex/JavaThread.java
 	@echo "#!/bin/sh" > a.out
-	@echo "cd mutex && java JavaThread" >> a.out
+	@echo "java JavaThread" >> a.out
 	@chmod a+x a.out
 
@@ -213,16 +224,16 @@
 
 signal-cfa1$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedint/cfa1.c
+	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedint/cfa1.cfa
 
 signal-cfa2$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedint/cfa2.c
+	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedint/cfa2.cfa
 
 signal-cfa4$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedint/cfa4.c
+	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedint/cfa4.cfa
 
 signal-java_thread$(EXEEXT):
-	@javac $(srcdir)/schedint/JavaThread.java
+	@javac -d . $(srcdir)/schedint/JavaThread.java
 	@echo "#!/bin/sh" > a.out
-	@echo "cd schedint && java JavaThread" >> a.out
+	@echo "java JavaThread" >> a.out
 	@chmod a+x a.out
 
@@ -239,11 +250,11 @@
 
 waitfor-cfa1$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedext/cfa1.c
+	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedext/cfa1.cfa
 
 waitfor-cfa2$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedext/cfa2.c
+	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedext/cfa2.cfa
 
 waitfor-cfa4$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedext/cfa4.c
+	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedext/cfa4.cfa
 
 ## =========================================================================================================
@@ -259,11 +270,11 @@
 
 creation-cfa_coroutine$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=10000000 $(srcdir)/creation/cfa_cor.c
+	@$(CFACOMPILE) -DBENCH_N=10000000 $(srcdir)/creation/cfa_cor.cfa
 
 creation-cfa_coroutine_eager$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=10000000 $(srcdir)/creation/cfa_cor.c
+	@$(CFACOMPILE) -DBENCH_N=10000000 $(srcdir)/creation/cfa_cor.cfa -DEAGER
 
 creation-cfa_thread$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=10000000 $(srcdir)/creation/cfa_thrd.c
+	@$(CFACOMPILE) -DBENCH_N=10000000 $(srcdir)/creation/cfa_thrd.cfa
 
 creation-upp_coroutine$(EXEEXT):
@@ -280,7 +291,7 @@
 
 creation-java_thread$(EXEEXT):
-	@javac $(srcdir)/creation/JavaThread.java
+	@javac -d . $(srcdir)/creation/JavaThread.java
 	@echo "#!/bin/sh" > a.out
-	@echo "cd creation && java JavaThread" >> a.out
+	@echo "java JavaThread" >> a.out
 	@chmod a+x a.out
 
@@ -301,5 +312,5 @@
 
 compile-array$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/array.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/array.cfa
 
 compile-attributes$(EXEEXT):
@@ -307,22 +318,22 @@
 
 compile-empty$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(srcdir)/compile/empty.c
+	@$(CFACOMPILE) -fsyntax-only -w $(srcdir)/compile/empty.cfa
 
 compile-expression$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/expression.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/expression.cfa
 
 compile-io$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/io1.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/io1.cfa
 
 compile-monitor$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/concurrent/monitor.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/concurrent/monitor.cfa
 
 compile-operators$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/operators.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/operators.cfa
 
 compile-thread$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/concurrent/thread.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/concurrent/thread.cfa
 
 compile-typeof$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/typeof.c
-
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/typeof.cfa
+
Index: benchmark/Makefile.in
===================================================================
--- benchmark/Makefile.in	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ benchmark/Makefile.in	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -92,4 +92,5 @@
 build_triplet = @build@
 host_triplet = @host@
+EXTRA_PROGRAMS = dummy$(EXEEXT)
 noinst_PROGRAMS =
 @WITH_LIBFIBRE_TRUE@am__append_1 = \
@@ -109,4 +110,7 @@
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
+am_dummy_OBJECTS = dummyC.$(OBJEXT) dummyCXX.$(OBJEXT)
+dummy_OBJECTS = $(am_dummy_OBJECTS)
+dummy_LDADD = $(LDADD)
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -121,6 +125,35 @@
 am__v_at_0 = @
 am__v_at_1 = 
-SOURCES =
-DIST_SOURCES =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/automake/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+SOURCES = $(dummy_SOURCES)
+DIST_SOURCES = $(dummy_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -129,6 +162,24 @@
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/src/cfa.make \
-	compile
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp \
+	$(top_srcdir)/src/cfa.make compile
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
@@ -271,15 +322,17 @@
 
 # applies to both programs
+UPPCC = u++
 UPPCOMPILE = $(UPPCC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_UPPFLAGS) $(UPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_CFLAGS) $(CFLAGS)
 AM_CFLAGS = -O2 -Wall -I$(srcdir) -lrt -pthread
 AM_CFAFLAGS = -quiet -in-tree -nodebug
 AM_UPPFLAGS = -quiet -nodebug -multi
-TOOLSDIR = ${abs_top_srcdir}/tools/
-REPEAT = ${TOOLSDIR}repeat
-STATS = ${TOOLSDIR}stat.py
+TOOLSDIR = ${abs_top_builddir}/tools/
+REPEAT = ${abs_top_builddir}/tools/repeat
+STATS = ${abs_top_srcdir}/tools/stat.py
 repeats = 30
 skipcompile = no
 TIME_FORMAT = "%E"
 PRINT_FORMAT = %20s: #Comments needed for spacing
+dummy_SOURCES = dummyC.c dummyCXX.cpp
 CTXSWITCH_DEPEND = loop.run function.run fetch_add.run \
 	ctxswitch-pthread.run ctxswitch-cfa_coroutine.run \
@@ -292,5 +345,5 @@
 
 .SUFFIXES:
-.SUFFIXES: .cfa .lo .o
+.SUFFIXES: .c .cfa .cpp .lo .o .obj
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/src/cfa.make $(am__configure_deps)
 	@for dep in $?; do \
@@ -326,10 +379,101 @@
 clean-noinstPROGRAMS:
 	-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
-tags TAGS:
-
-ctags CTAGS:
-
-cscope cscopelist:
-
+
+dummy$(EXEEXT): $(dummy_OBJECTS) $(dummy_DEPENDENCIES) $(EXTRA_dummy_DEPENDENCIES) 
+	@rm -f dummy$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(dummy_OBJECTS) $(dummy_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummyC.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummyCXX.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.o:
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
@@ -402,6 +546,8 @@
 
 distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-distclean-am: clean-am distclean-generic
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
 
 dvi: dvi-am
@@ -446,4 +592,5 @@
 
 maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -451,5 +598,5 @@
 mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-generic
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
 
 pdf: pdf-am
@@ -465,14 +612,15 @@
 .MAKE: install-am install-strip
 
-.PHONY: all all-am check check-am clean clean-generic \
-	clean-noinstPROGRAMS cscopelist-am ctags-am distclean \
-	distclean-generic distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \
+	distclean-compile distclean-generic distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
 	uninstall-am
 
@@ -489,4 +637,10 @@
 	$(LTCFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
 	$(am__mv) $$depbase.Tpo $$depbase.Plo
+
+dummyC.c:
+	@echo "int main() { return 0; }" > ${@}
+
+dummyCXX.cpp:
+	@echo "int main() { return 0; }" > ${@}
 
 .NOTPARALLEL:
@@ -513,5 +667,5 @@
 
 ${REPEAT} :
-	@+make -C ${TOOLSDIR} repeat
+	@+make -C ${abs_top_builddir}/tools repeat
 
 jenkins$(EXEEXT):
@@ -551,11 +705,11 @@
 
 loop$(EXEEXT):
-	$(COMPILE) -DBENCH_N=5000000000 loop.c
+	$(COMPILE) -DBENCH_N=5000000000 $(srcdir)/loop.c
 
 function$(EXEEXT):
-	$(COMPILE) -DBENCH_N=5000000000 function.c
+	$(COMPILE) -DBENCH_N=5000000000 $(srcdir)/function.c
 
 fetch_add$(EXEEXT):
-	$(COMPILE) -DBENCH_N=500000000  fetch_add.c
+	$(COMPILE) -DBENCH_N=500000000  $(srcdir)/fetch_add.c
 
 @WITH_LIBFIBRE_TRUE@ctxswitch-kos_fibre$(EXEEXT):
@@ -571,11 +725,11 @@
 
 ctxswitch-cfa_coroutine$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/cfa_cor.c
+	@$(CFACOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/cfa_cor.cfa
 
 ctxswitch-cfa_thread$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/cfa_thrd.c
+	@$(CFACOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/cfa_thrd.cfa
 
 ctxswitch-cfa_thread2$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/cfa_thrd2.c
+	@$(CFACOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/cfa_thrd2.cfa
 
 ctxswitch-upp_coroutine$(EXEEXT):
@@ -589,7 +743,7 @@
 
 ctxswitch-java_thread$(EXEEXT):
-	@javac $(srcdir)/ctxswitch/JavaThread.java
+	@javac -d . $(srcdir)/ctxswitch/JavaThread.java
 	@echo "#!/bin/sh" > a.out
-	@echo "cd ctxswitch && java JavaThread" >> a.out
+	@echo "java JavaThread" >> a.out
 	@chmod a+x a.out
 
@@ -612,16 +766,16 @@
 
 mutex-cfa1$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=5000000  $(srcdir)/mutex/cfa1.c
+	@$(CFACOMPILE) -DBENCH_N=5000000  $(srcdir)/mutex/cfa1.cfa
 
 mutex-cfa2$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=5000000  $(srcdir)/mutex/cfa2.c
+	@$(CFACOMPILE) -DBENCH_N=5000000  $(srcdir)/mutex/cfa2.cfa
 
 mutex-cfa4$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=5000000  $(srcdir)/mutex/cfa4.c
+	@$(CFACOMPILE) -DBENCH_N=5000000  $(srcdir)/mutex/cfa4.cfa
 
 mutex-java_thread$(EXEEXT):
-	@javac $(srcdir)/mutex/JavaThread.java
+	@javac -d . $(srcdir)/mutex/JavaThread.java
 	@echo "#!/bin/sh" > a.out
-	@echo "cd mutex && java JavaThread" >> a.out
+	@echo "java JavaThread" >> a.out
 	@chmod a+x a.out
 
@@ -641,16 +795,16 @@
 
 signal-cfa1$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedint/cfa1.c
+	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedint/cfa1.cfa
 
 signal-cfa2$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedint/cfa2.c
+	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedint/cfa2.cfa
 
 signal-cfa4$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedint/cfa4.c
+	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedint/cfa4.cfa
 
 signal-java_thread$(EXEEXT):
-	@javac $(srcdir)/schedint/JavaThread.java
+	@javac -d . $(srcdir)/schedint/JavaThread.java
 	@echo "#!/bin/sh" > a.out
-	@echo "cd schedint && java JavaThread" >> a.out
+	@echo "java JavaThread" >> a.out
 	@chmod a+x a.out
 
@@ -665,11 +819,11 @@
 
 waitfor-cfa1$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedext/cfa1.c
+	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedext/cfa1.cfa
 
 waitfor-cfa2$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedext/cfa2.c
+	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedext/cfa2.cfa
 
 waitfor-cfa4$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedext/cfa4.c
+	@$(CFACOMPILE) -DBENCH_N=500000  $(srcdir)/schedext/cfa4.cfa
 
 creation$(EXEEXT) :\
@@ -684,11 +838,11 @@
 
 creation-cfa_coroutine$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=10000000 $(srcdir)/creation/cfa_cor.c
+	@$(CFACOMPILE) -DBENCH_N=10000000 $(srcdir)/creation/cfa_cor.cfa
 
 creation-cfa_coroutine_eager$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=10000000 $(srcdir)/creation/cfa_cor.c
+	@$(CFACOMPILE) -DBENCH_N=10000000 $(srcdir)/creation/cfa_cor.cfa -DEAGER
 
 creation-cfa_thread$(EXEEXT):
-	@$(CFACOMPILE) -DBENCH_N=10000000 $(srcdir)/creation/cfa_thrd.c
+	@$(CFACOMPILE) -DBENCH_N=10000000 $(srcdir)/creation/cfa_thrd.cfa
 
 creation-upp_coroutine$(EXEEXT):
@@ -705,7 +859,7 @@
 
 creation-java_thread$(EXEEXT):
-	@javac $(srcdir)/creation/JavaThread.java
+	@javac -d . $(srcdir)/creation/JavaThread.java
 	@echo "#!/bin/sh" > a.out
-	@echo "cd creation && java JavaThread" >> a.out
+	@echo "java JavaThread" >> a.out
 	@chmod a+x a.out
 
@@ -721,29 +875,29 @@
 
 compile-array$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/array.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/array.cfa
 
 compile-attributes$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/attributes.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/attributes.cfa
 
 compile-empty$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(srcdir)/compile/empty.c
+	@$(CFACOMPILE) -fsyntax-only -w $(srcdir)/compile/empty.cfa
 
 compile-expression$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/expression.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/expression.cfa
 
 compile-io$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/io1.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/io1.cfa
 
 compile-monitor$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/concurrent/monitor.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/concurrent/monitor.cfa
 
 compile-operators$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/operators.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/operators.cfa
 
 compile-thread$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/concurrent/thread.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/concurrent/thread.cfa
 
 compile-typeof$(EXEEXT):
-	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/typeof.c
+	@$(CFACOMPILE) -fsyntax-only -w $(testdir)/typeof.cfa
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
Index: benchmark/compile/empty.c
===================================================================
--- benchmark/compile/empty.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,3 +1,0 @@
-int main() {
-	return 0;
-}
Index: benchmark/compile/empty.cfa
===================================================================
--- benchmark/compile/empty.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/compile/empty.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,3 @@
+int main() {
+	return 0;
+}
Index: benchmark/creation/cfa_cor.c
===================================================================
--- benchmark/creation/cfa_cor.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,23 +1,0 @@
-#include <stdio.h>
-#include <coroutine.hfa>
-
-#include "bench.h"
-
-coroutine MyCoroutine {};
-void ?{} (MyCoroutine & this) {
-#ifdef EAGER
-	prime(this);
-#endif
-}
-void main(MyCoroutine & this) {}
-
-int main(int argc, char* argv[]) {
-	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			MyCoroutine m;
-		},
-		result
-	)
-
-	printf("%llu\n", result);
-}
Index: benchmark/creation/cfa_cor.cfa
===================================================================
--- benchmark/creation/cfa_cor.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/creation/cfa_cor.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <coroutine.hfa>
+
+#include "bench.h"
+
+coroutine MyCoroutine {};
+void ?{} (MyCoroutine & this) {
+#ifdef EAGER
+	prime(this);
+#endif
+}
+void main(MyCoroutine & this) {}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			MyCoroutine m;
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: benchmark/creation/cfa_thrd.c
===================================================================
--- benchmark/creation/cfa_thrd.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,18 +1,0 @@
-#include <stdio.h>
-#include <thread.hfa>
-
-#include "bench.h"
-
-thread MyThread {};
-void main(MyThread & this) {}
-
-int main(int argc, char* argv[]) {
-	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			MyThread m;
-		},
-		result
-	)
-
-	printf("%llu\n", result);
-}
Index: benchmark/creation/cfa_thrd.cfa
===================================================================
--- benchmark/creation/cfa_thrd.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/creation/cfa_thrd.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <thread.hfa>
+
+#include "bench.h"
+
+thread MyThread {};
+void main(MyThread & this) {}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			MyThread m;
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: benchmark/ctxswitch/cfa_cor.c
===================================================================
--- benchmark/ctxswitch/cfa_cor.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,30 +1,0 @@
-#include <stdio.h>
-#include <kernel.hfa>
-#include <thread.hfa>
-
-#include "bench.h"
-
-coroutine GreatSuspender {};
-
-void ?{}( GreatSuspender & this ) {
-	prime(this);
-}
-
-void main( GreatSuspender & this ) {
-	while( true ) {
-		suspend();
-	}
-}
-
-int main(int argc, char* argv[]) {
-	GreatSuspender s;
-
-	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			resume( s );
-		},
-		result
-	)
-
-	printf("%llu\n", result);
-}
Index: benchmark/ctxswitch/cfa_cor.cfa
===================================================================
--- benchmark/ctxswitch/cfa_cor.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/ctxswitch/cfa_cor.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <kernel.hfa>
+#include <thread.hfa>
+
+#include "bench.h"
+
+coroutine GreatSuspender {};
+
+void ?{}( GreatSuspender & this ) {
+	prime(this);
+}
+
+void main( GreatSuspender & this ) {
+	while( true ) {
+		suspend();
+	}
+}
+
+int main(int argc, char* argv[]) {
+	GreatSuspender s;
+
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			resume( s );
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: benchmark/ctxswitch/cfa_thrd.c
===================================================================
--- benchmark/ctxswitch/cfa_thrd.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,15 +1,0 @@
-#include <stdio.h>
-#include <thread.hfa>
-
-#include "bench.h"
-
-int main(int argc, char* argv[]) {
-	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			yield();
-		},
-		result
-	)
-
-	printf("%llu\n", result);
-}
Index: benchmark/ctxswitch/cfa_thrd.cfa
===================================================================
--- benchmark/ctxswitch/cfa_thrd.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/ctxswitch/cfa_thrd.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include <thread.hfa>
+
+#include "bench.h"
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			yield();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: benchmark/ctxswitch/cfa_thrd2.c
===================================================================
--- benchmark/ctxswitch/cfa_thrd2.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,28 +1,0 @@
-#include <stdio.h>
-#include <thread.hfa>
-
-#include "bench.h"
-
-volatile bool done = false;
-
-thread Fibre {};
-
-void main(Fibre & this) {
-	while(!done) {
-		yield();
-	}
-}
-
-int main(int argc, char* argv[]) {
-	Fibre f1;
-  	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			yield();
-		},
-		result
-	)
-
-	printf("%llu\n", result);
-	done = true;
-	return 0;
-}
Index: benchmark/ctxswitch/cfa_thrd2.cfa
===================================================================
--- benchmark/ctxswitch/cfa_thrd2.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/ctxswitch/cfa_thrd2.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <thread.hfa>
+
+#include "bench.h"
+
+volatile bool done = false;
+
+thread Fibre {};
+
+void main(Fibre & this) {
+	while(!done) {
+		yield();
+	}
+}
+
+int main(int argc, char* argv[]) {
+	Fibre f1;
+  	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			yield();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	done = true;
+	return 0;
+}
Index: benchmark/mutex/cfa1.c
===================================================================
--- benchmark/mutex/cfa1.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,19 +1,0 @@
-#include <monitor.hfa>
-#include <stdio.h>
-
-#include "bench.h"
-
-monitor M {};
-void __attribute__((noinline)) call( M & mutex m ) {}
-
-int main(int argc, char* argv[]) {
-	M m;
-	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			call(m);
-		},
-		result
-	)
-
-	printf("%llu\n", result);
-}
Index: benchmark/mutex/cfa1.cfa
===================================================================
--- benchmark/mutex/cfa1.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/mutex/cfa1.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,19 @@
+#include <monitor.hfa>
+#include <stdio.h>
+
+#include "bench.h"
+
+monitor M {};
+void __attribute__((noinline)) call( M & mutex m ) {}
+
+int main(int argc, char* argv[]) {
+	M m;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			call(m);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: benchmark/mutex/cfa2.c
===================================================================
--- benchmark/mutex/cfa2.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,19 +1,0 @@
-#include <monitor.hfa>
-#include <stdio.h>
-
-#include "bench.h"
-
-monitor M {};
-void __attribute__((noinline)) call( M & mutex m1, M & mutex m2 ) {}
-
-int main(int argc, char* argv[]) {
-	M m1, m2;
-	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			call(m1, m2);
-		},
-		result
-	)
-
-	printf("%llu\n", result);
-}
Index: benchmark/mutex/cfa2.cfa
===================================================================
--- benchmark/mutex/cfa2.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/mutex/cfa2.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,19 @@
+#include <monitor.hfa>
+#include <stdio.h>
+
+#include "bench.h"
+
+monitor M {};
+void __attribute__((noinline)) call( M & mutex m1, M & mutex m2 ) {}
+
+int main(int argc, char* argv[]) {
+	M m1, m2;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			call(m1, m2);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: benchmark/mutex/cfa4.c
===================================================================
--- benchmark/mutex/cfa4.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,20 +1,0 @@
-#include <monitor.hfa>
-#include <stdio.h>
-
-#include "bench.h"
-
-
-monitor M {};
-void __attribute__((noinline)) call( M & mutex m1, M & mutex m2, M & mutex m3, M & mutex m4 ) {}
-
-int main(int argc, char* argv[]) {
-	M m1, m2, m3, m4;
-	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			call(m1, m2, m3, m4);
-		},
-		result
-	)
-
-	printf("%llu\n", result);
-}
Index: benchmark/mutex/cfa4.cfa
===================================================================
--- benchmark/mutex/cfa4.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/mutex/cfa4.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,20 @@
+#include <monitor.hfa>
+#include <stdio.h>
+
+#include "bench.h"
+
+
+monitor M {};
+void __attribute__((noinline)) call( M & mutex m1, M & mutex m2, M & mutex m3, M & mutex m4 ) {}
+
+int main(int argc, char* argv[]) {
+	M m1, m2, m3, m4;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			call(m1, m2, m3, m4);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: benchmark/schedext/cfa1.c
===================================================================
--- benchmark/schedext/cfa1.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#include <kernel.hfa>
-#include <monitor.hfa>
-#include <thread.hfa>
-#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/cfa1.cfa
===================================================================
--- benchmark/schedext/cfa1.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/schedext/cfa1.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,44 @@
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <thread.hfa>
+#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 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#include <kernel.hfa>
-#include <monitor.hfa>
-#include <thread.hfa>
-#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/cfa2.cfa
===================================================================
--- benchmark/schedext/cfa2.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/schedext/cfa2.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,44 @@
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <thread.hfa>
+#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 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#include <kernel.hfa>
-#include <monitor.hfa>
-#include <thread.hfa>
-#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/cfa4.cfa
===================================================================
--- benchmark/schedext/cfa4.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/schedext/cfa4.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,44 @@
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <thread.hfa>
+#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/schedint/cfa1.c
===================================================================
--- benchmark/schedint/cfa1.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,47 +1,0 @@
-#include <kernel.hfa>
-#include <monitor.hfa>
-#include <thread.hfa>
-#include <stdio.h>
-
-#include "bench.h"
-
-int argc;
-char** argv;
-volatile int go = 0;
-
-condition c;
-monitor M {};
-M m1;
-
-void __attribute__((noinline)) call( M & mutex a1 ) {
-	signal(c);
-}
-
-int  __attribute__((noinline)) wait( M & mutex a1 ) {
-	go = 1;
-	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			wait(c);
-		},
-		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/schedint/cfa1.cfa
===================================================================
--- benchmark/schedint/cfa1.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/schedint/cfa1.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,47 @@
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <thread.hfa>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+condition c;
+monitor M {};
+M m1;
+
+void __attribute__((noinline)) call( M & mutex a1 ) {
+	signal(c);
+}
+
+int  __attribute__((noinline)) wait( M & mutex a1 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			wait(c);
+		},
+		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/schedint/cfa2.c
===================================================================
--- benchmark/schedint/cfa2.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,47 +1,0 @@
-#include <kernel.hfa>
-#include <monitor.hfa>
-#include <thread.hfa>
-#include <stdio.h>
-
-#include "bench.h"
-
-int argc;
-char** argv;
-volatile int go = 0;
-
-condition c;
-monitor M {};
-M m1, m2;
-
-void __attribute__((noinline)) call( M & mutex a1, M & mutex a2 ) {
-	signal(c);
-}
-
-int  __attribute__((noinline)) wait( M & mutex a1, M & mutex a2 ) {
-	go = 1;
-	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			wait(c);
-		},
-		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/schedint/cfa2.cfa
===================================================================
--- benchmark/schedint/cfa2.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/schedint/cfa2.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,47 @@
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <thread.hfa>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+condition c;
+monitor M {};
+M m1, m2;
+
+void __attribute__((noinline)) call( M & mutex a1, M & mutex a2 ) {
+	signal(c);
+}
+
+int  __attribute__((noinline)) wait( M & mutex a1, M & mutex a2 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			wait(c);
+		},
+		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/schedint/cfa4.c
===================================================================
--- benchmark/schedint/cfa4.c	(revision 90cfc16965ecfd0c0315f8af5521ed1006e6ca4e)
+++ 	(revision )
@@ -1,47 +1,0 @@
-#include <kernel.hfa>
-#include <monitor.hfa>
-#include <thread.hfa>
-#include <stdio.h>
-
-#include "bench.h"
-
-int argc;
-char** argv;
-volatile int go = 0;
-
-condition c;
-monitor M {};
-M m1, m2, m3, m4;
-
-void __attribute__((noinline)) call( M & mutex a1, M & mutex a2, M & mutex a3, M & mutex a4 ) {
-	signal(c);
-}
-
-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++) {
-			wait(c);
-		},
-		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/schedint/cfa4.cfa
===================================================================
--- benchmark/schedint/cfa4.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
+++ benchmark/schedint/cfa4.cfa	(revision 5e49e477912c55f01edbd8c838b63e99a80722bd)
@@ -0,0 +1,47 @@
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <thread.hfa>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+condition c;
+monitor M {};
+M m1, m2, m3, m4;
+
+void __attribute__((noinline)) call( M & mutex a1, M & mutex a2, M & mutex a3, M & mutex a4 ) {
+	signal(c);
+}
+
+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++) {
+			wait(c);
+		},
+		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);
+}
