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 $@
 
Index: tests/zombies/string-perf/prog.cfa
===================================================================
--- tests/zombies/string-perf/prog.cfa	(revision 4d0eb1cc12137b66f31427f1f5dad58df3bae128)
+++ tests/zombies/string-perf/prog.cfa	(revision 97d58dca469f687e58f035bd4fc46d354069f72a)
@@ -111,5 +111,5 @@
         string_res x = "starter";
         string_res y;
-      #if defined OP_PLUS_THEN_ASSIGN
+      #if defined OP_PTA
         string_res z;
       #endif
@@ -129,11 +129,11 @@
               MAYBE( PRINT(y) )
               char *toAppend = corpus[i % corpuslen]; // ? corpus[rand() % corpuslen]
-              #if defined OP_PLUS_THEN_ASSIGN && defined IMPL_CFA_LL
+              #if defined OP_PTA && defined IMPL_CFA_LL
                  z = y;
                  z += toAppend;
                  y = z;
-              #elif defined OP_PLUS_THEN_ASSIGN
+              #elif defined OP_PTA
                  y = y + toAppend;
-              #elif defined OP_PLUSEQ
+              #elif defined OP_PEQ
                  y += toAppend;
               #endif
