diff options
author | Roland Scheidegger <rscheidegger_lists@hispeed.ch> | 2012-04-20 02:10:57 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-04-21 00:27:06 +0200 |
commit | a812b599b504b39a8021827da89d5e23fb361cc9 (patch) | |
tree | 34b3f8ce41b8cdca8df4f3b84682731b09c94f34 /libavcodec/diracdec.c | |
parent | 3194ab78a6c4ea0a4c60c91c4d0ea34028ca408f (diff) | |
download | ffmpeg-a812b599b504b39a8021827da89d5e23fb361cc9.tar.gz |
h264: assembly version of get_cabac for x86_64 with PIC (v4)
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: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/diracdec.c')
0 files changed, 0 insertions, 0 deletions