SSSE3/SSE4 9-way fully merged i4x4 analysis (sad/satd_x9)
authorLoren Merritt <pengvado@akuvian.org>
Mon, 15 Aug 2011 18:18:55 +0000 (18:18 +0000)
committerFiona Glaser <fiona@x264.com>
Wed, 21 Sep 2011 16:54:41 +0000 (09:54 -0700)
commit3d82e875d06b9d1e15ca2baa16b1bd9640500972
tree892c2ec13f2e33240b9d33c3cce7a2869b4c0aca
parente184ff26233198932d9b77aa7feed6a49095f136
SSSE3/SSE4 9-way fully merged i4x4 analysis (sad/satd_x9)

i4x4 analysis cycles (per partition):
penryn   sandybridge
184-> 75  157-> 54  preset=superfast (sad)
281->165  225->124  preset=faster    (satd with early termination)
332->165  263->124  preset=medium
379->165  297->124  preset=slower    (satd without early termination)

This is the first code in x264 that intentionally produces different behavior
on different cpus: satd_x9 is implemented only on ssse3+ and checks all intra
directions, whereas the old code (on fast presets) may early terminate after
checking only some of them. There is no systematic difference on slow presets,
though they still occasionally disagree about tiebreaks.

For ease of debugging, add an option "--cpu-independent" to disable satd_x9
and any analogous future code.
12 files changed:
common/common.c
common/osdep.h
common/pixel.c
common/pixel.h
common/x86/const-a.asm
common/x86/pixel-a.asm
common/x86/pixel.h
encoder/analyse.c
encoder/encoder.c
tools/checkasm.c
x264.c
x264.h