|
|
|
@ -27,6 +27,22 @@ |
|
|
|
|
|
|
|
|
|
#if HAVE_YASM |
|
|
|
|
|
|
|
|
|
#define fpel_func(avg, sz, opt) \ |
|
|
|
|
void ff_##avg##sz##_##opt(uint8_t *dst, ptrdiff_t dst_stride, \
|
|
|
|
|
const uint8_t *src, ptrdiff_t src_stride, \
|
|
|
|
|
int h, int mx, int my) |
|
|
|
|
fpel_func(put, 4, mmx); |
|
|
|
|
fpel_func(put, 8, mmx); |
|
|
|
|
fpel_func(put, 16, sse); |
|
|
|
|
fpel_func(put, 32, sse); |
|
|
|
|
fpel_func(put, 64, sse); |
|
|
|
|
fpel_func(avg, 4, sse); |
|
|
|
|
fpel_func(avg, 8, sse); |
|
|
|
|
fpel_func(avg, 16, sse2); |
|
|
|
|
fpel_func(avg, 32, sse2); |
|
|
|
|
fpel_func(avg, 64, sse2); |
|
|
|
|
#undef fpel_func |
|
|
|
|
|
|
|
|
|
#define mc_func(avg, sz, dir, opt) \ |
|
|
|
|
void ff_##avg##_8tap_1d_##dir##_##sz##_##opt(uint8_t *dst, ptrdiff_t dst_stride, \
|
|
|
|
|
const uint8_t *src, ptrdiff_t src_stride, \
|
|
|
|
@ -141,6 +157,13 @@ av_cold void ff_vp9dsp_init_x86(VP9DSPContext *dsp) |
|
|
|
|
#if HAVE_YASM |
|
|
|
|
int cpu_flags = av_get_cpu_flags(); |
|
|
|
|
|
|
|
|
|
#define init_fpel(idx1, idx2, sz, type, opt) \ |
|
|
|
|
dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][0][0] = \
|
|
|
|
|
dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][0][0] = \
|
|
|
|
|
dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][0][0] = \
|
|
|
|
|
dsp->mc[idx1][FILTER_BILINEAR ][idx2][0][0] = ff_##type##sz##_##opt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define init_subpel1(idx1, idx2, idxh, idxv, sz, dir, type, opt) \ |
|
|
|
|
dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][idxh][idxv] = type##_8tap_smooth_##sz##dir##_##opt; \
|
|
|
|
|
dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][idxh][idxv] = type##_8tap_regular_##sz##dir##_##opt; \
|
|
|
|
@ -158,11 +181,31 @@ av_cold void ff_vp9dsp_init_x86(VP9DSPContext *dsp) |
|
|
|
|
init_subpel2(idx, 0, 1, v, type, opt); \
|
|
|
|
|
init_subpel2(idx, 1, 0, h, type, opt) |
|
|
|
|
|
|
|
|
|
if (cpu_flags & AV_CPU_FLAG_MMX) { |
|
|
|
|
init_fpel(4, 0, 4, put, mmx); |
|
|
|
|
init_fpel(3, 0, 8, put, mmx); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (cpu_flags & AV_CPU_FLAG_SSE) { |
|
|
|
|
init_fpel(2, 0, 16, put, sse); |
|
|
|
|
init_fpel(1, 0, 32, put, sse); |
|
|
|
|
init_fpel(0, 0, 64, put, sse); |
|
|
|
|
init_fpel(4, 1, 4, avg, sse); |
|
|
|
|
init_fpel(3, 1, 8, avg, sse); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (cpu_flags & AV_CPU_FLAG_SSE2) { |
|
|
|
|
init_fpel(2, 1, 16, avg, sse2); |
|
|
|
|
init_fpel(1, 1, 32, avg, sse2); |
|
|
|
|
init_fpel(0, 1, 64, avg, sse2); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (cpu_flags & AV_CPU_FLAG_SSSE3) { |
|
|
|
|
init_subpel3(0, put, ssse3); |
|
|
|
|
init_subpel3(1, avg, ssse3); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#undef init_fpel |
|
|
|
|
#undef init_subpel1 |
|
|
|
|
#undef init_subpel2 |
|
|
|
|
#undef init_subpel3 |
|
|
|
|