• Roland Scheidegger's avatar
    h264: assembly version of get_cabac for x86_64 with PIC (v4) · a812b599
    Roland Scheidegger authored
    This adds a hand-optimized assembly version for get_cabac much like the
    existing one, but it works if the table offsets are RIP-relative.
    Compared to the non-RIP-relative version this adds 2 lea instructions
    and it needs one extra register.
    There is a surprisingly large performance improvement over the c version (more
    so than the generated assembly seems to suggest) just in get_cabac, I measured
    roughly 40% faster for get_cabac on a K8. However, overall the difference is
    not that big, I measured roughly 5% on a test clip on a K8 and a Core2.
    Hopefully it still compiles on x86 32bit...
    v2: incorporated feedback from Loren Merritt to avoid rip-relative movs
    for every table, and got rid of unnecessary @GOTPCREL.
    v3: apply similar fixes to the the decode_significance functions, and use
    same macro arguments for non-pic case.
    v4: prettify inline asm arguments, add a non-fast-cmov version (as I expect
    the c code to be faster otherwise since both cmov and sbb suck hard on a
    Prescott, even can't construct the mask with a 64bit shift as that's just as
    terrible - it's quite difficult to find usable instructions on that chip...).
    This is tested to work but not on a P4, in theory it _should_ be fast there.
    Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
    a812b599
Name
Last commit
Last update
doc Loading commit data...
ffpresets Loading commit data...
libavcodec Loading commit data...
libavdevice Loading commit data...
libavfilter Loading commit data...
libavformat Loading commit data...
libavutil Loading commit data...
libpostproc Loading commit data...
libswresample Loading commit data...
libswscale Loading commit data...
mt-work Loading commit data...
presets Loading commit data...
tests Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
COPYING.GPLv2 Loading commit data...
COPYING.GPLv3 Loading commit data...
COPYING.LGPLv2.1 Loading commit data...
COPYING.LGPLv3 Loading commit data...
CREDITS Loading commit data...
Changelog Loading commit data...
Doxyfile Loading commit data...
INSTALL Loading commit data...
LICENSE Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
README Loading commit data...
RELEASE Loading commit data...
arch.mak Loading commit data...
cmdutils.c Loading commit data...
cmdutils.h Loading commit data...
cmdutils_common_opts.h Loading commit data...
common.mak Loading commit data...
configure Loading commit data...
ffmpeg.c Loading commit data...
ffplay.c Loading commit data...
ffprobe.c Loading commit data...
ffserver.c Loading commit data...
library.mak Loading commit data...
version.sh Loading commit data...