OFILES = main.o $(CORE_OFILES) regression1.o regression2.o regression3.o \
         tag_check.o multiorder.o idr-test.o iteration_check.o benchmark.o
 
-ifdef BENCHMARK
-       CFLAGS += -DBENCHMARK=1
+ifndef SHIFT
+       SHIFT=3
 endif
 
-targets: $(TARGETS)
+targets: mapshift $(TARGETS)
 
 main:  $(OFILES)
        $(CC) $(CFLAGS) $(LDFLAGS) $^ -o main
        $(CC) $(CFLAGS) $(LDFLAGS) $^ -o multiorder
 
 clean:
-       $(RM) $(TARGETS) *.o radix-tree.c idr.c
+       $(RM) $(TARGETS) *.o radix-tree.c idr.c generated/map-shift.h
 
 vpath %.c ../../lib
 
-$(OFILES): *.h */*.h \
+$(OFILES): *.h */*.h generated/map-shift.h \
        ../../include/linux/*.h \
        ../../include/asm/*.h \
        ../../../include/linux/radix-tree.h \
 
 idr.c: ../../../lib/idr.c
        sed -e 's/^static //' -e 's/__always_inline //' -e 's/inline //' < $< > $@
+
+.PHONY: mapshift
+
+mapshift:
+       @if ! grep -qw $(SHIFT) generated/map-shift.h; then             \
+               echo "#define RADIX_TREE_MAP_SHIFT $(SHIFT)" >          \
+                               generated/map-shift.h;                  \
+       fi
 
 #ifndef _TEST_RADIX_TREE_H
 #define _TEST_RADIX_TREE_H
+
+#include "generated/map-shift.h"
 #include "../../../../include/linux/radix-tree.h"
 
 extern int kmalloc_verbose;