echo Testing software...
clang -I. -g -O2 -o sha256 sha256c.c md5.c sha256hl.c
./sha256 -x >/dev/null && for i in `jot 5 1 5`; do  ./sha256 -t | grep Time | awk '{ print $3 }'; done > soft.times
echo Testing 2 unrolled loops...
clang -I. -g -O2 -o sha256 sha256c.partial.c md5.c sha256hl.c -DSHA256_LOOPS=2
./sha256 -x >/dev/null && for i in `jot 5 1 5`; do  ./sha256 -t | grep Time | awk '{ print $3 }'; done > soft.l2.times
echo Testing 4 unrolled loops...
clang -I. -g -O2 -o sha256 sha256c.partial.c md5.c sha256hl.c -DSHA256_LOOPS=4
./sha256 -x >/dev/null && for i in `jot 5 1 5`; do  ./sha256 -t | grep Time | awk '{ print $3 }'; done > soft.l4.times
echo Testing 8 unrolled loops...
clang -I. -g -O2 -o sha256 sha256c.partial.c md5.c sha256hl.c -DSHA256_LOOPS=8
./sha256 -x >/dev/null && for i in `jot 5 1 5`; do  ./sha256 -t | grep Time | awk '{ print $3 }'; done > soft.l8.times
echo Testing 16 unrolled loops...
clang -I. -g -O2 -o sha256 sha256c.partial.c md5.c sha256hl.c -DSHA256_LOOPS=16
./sha256 -x >/dev/null && for i in `jot 5 1 5`; do  ./sha256 -t | grep Time | awk '{ print $3 }'; done > soft.l16.times
echo Testing 32 unrolled loops...
clang -I. -g -O2 -o sha256 sha256c.partial.c md5.c sha256hl.c -DSHA256_LOOPS=32
./sha256 -x >/dev/null && for i in `jot 5 1 5`; do  ./sha256 -t | grep Time | awk '{ print $3 }'; done > soft.l32.times
echo Testing kernel software...
clang -I. -g -O2 -o sha256 sha2kern.c md5.c
./sha256 -x >/dev/null && for i in `jot 5 1 5`; do  ./sha256 -t | grep Time | awk '{ print $3 }'; done > kernsoft.times
echo Testing kernel unrolled software...
clang -DSHA2_UNROLL_TRANSFORM -I. -g -O2 -o sha256 sha2kern.c md5.c
./sha256 -x >/dev/null && for i in `jot 5 1 5`; do  ./sha256 -t | grep Time | awk '{ print $3 }'; done > kernsoftunr.times
echo Testing AVX...
clang -I. -g -DAVX -mavx -msse4 -O2 -o sha256 sha256c.c md5.c sha256hl.c sha256_avx1.o
./sha256 -x >/dev/null && for i in `jot 5 1 5`; do  ./sha256 -t | grep Time | awk '{ print $3 }'; done > avx.times
echo Testing SSE4...
clang -I. -g -DAVX -Dsha256_avx=sha256_sse4 -msse4 -O2 -o sha256 sha256c.c md5.c sha256hl.c sha256_sse4.o
./sha256 -x >/dev/null && for i in `jot 5 1 5`; do  ./sha256 -t | grep Time | awk '{ print $3 }'; done > sse4.times
echo Testing AVX2 RORX8...
clang -I. -g -DAVX -Dsha256_avx=sha256_rorx_x8ms -mavx -mavx2 -msse4 -O2 -o sha256 sha256c.c md5.c sha256hl.c sha256_avx2_rorx8.o
./sha256 -x >/dev/null && for i in `jot 5 1 5`; do  ./sha256 -t | grep Time | awk '{ print $3 }'; done > avx2r8.times
echo Testing AVX2 RORX2...
clang -I. -g -DAVX -Dsha256_avx=sha256_rorx -mavx -mavx2 -msse4 -O2 -o sha256 sha256c.c md5.c sha256hl.c sha256_avx2_rorx2.o
./sha256 -x >/dev/null && for i in `jot 5 1 5`; do  ./sha256 -t | grep Time | awk '{ print $3 }'; done > avx2r2.times
grep -A 10 ^CPU: /var/run/dmesg.boot > cpu.info

cat cpu.info
ministat soft.times avx.times sse4.times avx2r2.times avx2r8.times kernsoft.times
