Index: tests/zombies/string-perf/Makefile
===================================================================
--- tests/zombies/string-perf/Makefile	(revision 4d0eb1cc12137b66f31427f1f5dad58df3bae128)
+++ tests/zombies/string-perf/Makefile	(revision 97d58dca469f687e58f035bd4fc46d354069f72a)
@@ -24,39 +24,22 @@
 all : $(PERFPROGS)
 
-perfexp-cfa-hl-pta-share : prog.cfa $(LIBCFA)
-	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_HL_SHARE -DOP_PLUS_THEN_ASSIGN
+# upper-case conversion function
+define uc
+$(shell echo $(1) | tr  '[:lower:]' '[:upper:]')
+endef
 
-perfexp-cfa-hl-peq-share : prog.cfa $(LIBCFA)
-	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_HL_SHARE -DOP_PLUSEQ
+perfexp-cfa-%: APILEVEL=$(call uc,$(word 3,$(subst -, ,$@)))
+perfexp-cfa-%: OPERATION=$(call uc,$(word 4,$(subst -, ,$@)))
+perfexp-cfa-%: SHARING=$(call uc,$(word 5,$(subst -, ,$@)))
+perfexp-cfa-%: prog.cfa $(LIBCFA)
+	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_$(APILEVEL)_$(SHARING) -DOP_$(OPERATION)
 
-perfexp-cfa-ll-pta-share : prog.cfa $(LIBCFA)
-	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_LL_SHARE -DOP_PLUS_THEN_ASSIGN
+perfexp-stl-%: OPERATION=$(call uc,$(word 3,$(subst -, ,$@)))
+perfexp-stl-%: prog.cfa
+	$(CXX) -xc++ $(PERFFLAGS_CXX) $< -o $@ -DIMPL_STL -DOP_$(OPERATION)
 
-perfexp-cfa-ll-peq-share : prog.cfa $(LIBCFA)
-	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_LL_SHARE -DOP_PLUSEQ
-
-perfexp-cfa-hl-pta-noshare : prog.cfa $(LIBCFA)
-	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_HL_NOSHARE -DOP_PLUS_THEN_ASSIGN
-
-perfexp-cfa-hl-peq-noshare : prog.cfa $(LIBCFA)
-	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_HL_NOSHARE -DOP_PLUSEQ
-
-perfexp-cfa-ll-pta-noshare : prog.cfa $(LIBCFA)
-	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_LL_NOSHARE -DOP_PLUS_THEN_ASSIGN
-
-perfexp-cfa-ll-peq-noshare : prog.cfa $(LIBCFA)
-	$(CFA) $(PERFFLAGS_CFA) $< -o $@ -DIMPL_CFA_LL_NOSHARE -DOP_PLUSEQ
-
-perfexp-stl-pta : prog.cfa
-	$(CXX) -xc++ $(PERFFLAGS_CXX) $< -o $@ -DIMPL_STL -DOP_PLUS_THEN_ASSIGN
-
-perfexp-stl-peq : prog.cfa
-	$(CXX) -xc++ $(PERFFLAGS_CXX) $< -o $@ -DIMPL_STL -DOP_PLUSEQ
-
-perfexp-buhr94-pta.o : prog.cfa
-	$(CXX) -xc++ -c $(PERFFLAGS_CXX) $< -o $@ -DIMPL_BUHR94 -DOP_PLUS_THEN_ASSIGN
-
-perfexp-buhr94-peq.o : prog.cfa
-	$(CXX) -xc++ -c $(PERFFLAGS_CXX) $< -o $@ -DIMPL_BUHR94 -DOP_PLUSEQ
+perfexp-buhr94-%.o: OPERATION=$(call uc,$(word 3,$(subst -, ,$(basename $@))))
+perfexp-buhr94-%.o: prog.cfa
+	$(CXX) -xc++ -c $(PERFFLAGS_CXX) $< -o $@ -DIMPL_BUHR94 -DOP_$(OPERATION)
 
 buhr94-string.o:
@@ -66,8 +49,5 @@
 	$(CXX) -xc++ -c $(PERFFLAGS_CXX) ~/usys1/sm/string/StringSharing/src/VbyteSM.cc -o $@
 
-perfexp-buhr94-pta : perfexp-buhr94-pta.o buhr94-string.o buhr94-VbyteSM.o
-	$(CXX) $(PERFFLAGS_CXX) $^ -o $@
-
-perfexp-buhr94-peq : perfexp-buhr94-peq.o buhr94-string.o buhr94-VbyteSM.o
+perfexp-buhr94-% : perfexp-buhr94-%.o buhr94-string.o buhr94-VbyteSM.o
 	$(CXX) $(PERFFLAGS_CXX) $^ -o $@
 
