mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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>
This commit is contained in:
parent
b7be8ea92a
commit
d0a34aeedf
@ -84,7 +84,7 @@ static const uint32_t T[64] = { // T[i]= fabs(sin(i+1)<<32)
|
|||||||
\
|
\
|
||||||
if (i < 32) { \
|
if (i < 32) { \
|
||||||
if (i < 16) a += (d ^ (b & (c ^ d))) + X[ i & 15]; \
|
if (i < 16) a += (d ^ (b & (c ^ d))) + X[ i & 15]; \
|
||||||
else a += (c ^ (d & (c ^ b))) + X[(1 + 5*i) & 15]; \
|
else a += ((d & b) | (~d & c))+ X[(1 + 5*i) & 15]; \
|
||||||
} else { \
|
} else { \
|
||||||
if (i < 48) a += (b ^ c ^ d) + X[(5 + 3*i) & 15]; \
|
if (i < 48) a += (b ^ c ^ d) + X[(5 + 3*i) & 15]; \
|
||||||
else a += (c ^ (b | ~d)) + X[( 7*i) & 15]; \
|
else a += (c ^ (b | ~d)) + X[( 7*i) & 15]; \
|
||||||
|
Loading…
Reference in New Issue
Block a user