Age | Commit message (Collapse) | Author |
|
When compiling with asm enabled there's no point in compiling
C versions of DSP functions that have asm implementations using
instruction sets that the compiler can unconditionally use.
E.g. when compiling with -mssse3 we can remove the C version
of all functions with SSSE3 implementations.
This is accomplished using the compiler's dead code elimination
functionality.
Can be configured using the new 'trim_dsp' meson option, which
by default is enabled when compiling in release mode.
|
|
|
|
|
|
|
|
Split the 5x5, 3x3, and mix cases into separate functions.
Shrink some tables.
Move some scalar calculations out of the DSP function.
Make Wiener and SGR share the same function prototype to
eliminate a branch in lr_stripe().
|
|
The previous implementation did two separate passes in the horizontal
and vertical directions, with the intermediate values being stored
in a buffer on the stack. This caused bad cache thrashing.
By interleaving the horizontal and vertical passes in combination
with a ring buffer for storing only a few rows at a time the
performance is improved by a significant amount.
Also split the function into 7-tap and 5-tap versions. The latter is
faster and fairly common (always for chroma, sometimes for luma).
|
|
Combine horizontal and vertical filter pointers into a single parameter
when calling the wiener DSP function.
Eliminate the +128 filter coefficient handling where possible.
|
|
Makes C code more alike ASM
|
|
|
|
This allows using completely different codepaths for 10 and 12 bpc,
or just adding SIMD functions for either of them.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The relative speedup compared to C code is around 4.2 for a Cortex A53
and 5.1 for a Snapdragon 835 (compared to GCC's autovectorized code),
6-7x compared to GCC's output without autovectorization, and ~8x
compared to clang's output (which doesn't seem to try to vectorize
this function).
|
|
Apparently this can happen for bitdepth > 8. I haven't seen it
happen for bitdepth==8. Fixes #161.
|
|
|
|
- remove unused entry from tables.h;
- use non-sized types for scalar values;
- reduce size of intermediate tables from int32 to int16.
|
|
Since n equals either 25 or 9, the dav1d_sgr_one_by_x table can be
replaced with a ternary operation.
|
|
Fix #96
|