md5: optimize second round by using 4-operation form of G()
authorGiorgio Vazzana <mywing81@gmail.com>
Sat, 18 May 2013 11:53:52 +0000 (13:53 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 20 May 2013 02:27:34 +0000 (04:27 +0200)
commitd0a34aeedff187873e1b42e0902d9dfbba08a1f4
treeff7decbc6941a6e51dc4f7f99e6f00b82b703f1a
parentb7be8ea92a4b23de5d622097ba451c4b266e6563
md5: optimize second round by using 4-operation form of G()

4-operation form is preferred over 3-operation because it breaks a long
dependency chain, thus allowing a superscalar processor to execute more
operations in parallel.
The idea was taken from: http://www.zorinaq.com/papers/md5-amd64.html

AMD Athlon(tm) II X3 450 Processor, x86_64

$ for i in $(seq 1 4); do ./avutil_md5_test2; done
size: 1048576  runs: 1024  time:    5.821 +- 0.019
size: 1048576  runs: 1024  time:    5.822 +- 0.019
size: 1048576  runs: 1024  time:    5.841 +- 0.018
size: 1048576  runs: 1024  time:    5.821 +- 0.018

$ for i in $(seq 1 4); do ./avutil_md5_test2; done
size: 1048576  runs: 1024  time:    5.646 +- 0.019
size: 1048576  runs: 1024  time:    5.646 +- 0.018
size: 1048576  runs: 1024  time:    5.642 +- 0.019
size: 1048576  runs: 1024  time:    5.641 +- 0.019

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavutil/md5.c