CC=clang -Wall -Os
CCRETPOL=clang -Wall -Os -mretpoline

all: dispatch dispatch-retpol
	@ for i in "dispatch 0 6" "dispatch 2 6" "dispatch-retpol 0 6" "dispatch-retpol 2 6" "dispatch-retpol 1 0" "dispatch-retpol 1 1" "dispatch-retpol 1 2" "dispatch-retpol 1 3" "dispatch-retpol 1 4" "dispatch-retpol 1 5" "dispatch-retpol 1 6"; do perf stat -e cycles ./$$i 2>&1 | awk -v d="$$i" '/cycles/ {printf("%5.2f %s\n",$$1/100000000.0,d);}'; done
	@ for i in 0 1 2 3 4 5 6 7; do perf stat -e cycles ./dispatch-retpol 4 $$i 2>&1 | awk -v d="dispatch-retpol 4 $$i" '/cycles/ {printf("%5.2f %s\n",$$1/100000000.0,d);}'; done 
	@ for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72; do perf stat -e cycles ./dispatch-retpol 3 $$i 2>&1 | awk -v d="dispatch-retpol 3 $$i" '/cycles/ {printf("%5.2f %s\n",$$1/100000000.0,d);}'; done 

dispatch: main.o dispatch.o  dis-btree.o 
	$(CC) main.o dispatch.o dis-btree.o -o $@

dispatch-retpol: main-retpol.o dispatch-retpol.o  dis-btree.o 
	$(CCRETPOL) main-retpol.o dispatch-retpol.o  dis-btree.o -o $@

main.o: main.c
	$(CC) -c $<

dispatch.o: dispatch.c
	$(CC) -c $<

dis-btree.o: dis-btree.s
	$(CC) -c $<

main-retpol.o: main.c
	$(CCRETPOL) -c $< -o $@

dispatch-retpol.o: dispatch.c
	$(CCRETPOL) -c $< -o $@

