x86/vf_limiter: make limiter functions work on x86_32

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer 2017-07-08 11:33:54 -03:00
parent 6f205a42d7
commit 5688fd77b5
2 changed files with 14 additions and 18 deletions

View File

@ -20,23 +20,21 @@
%include "libavutil/x86/x86util.asm" %include "libavutil/x86/x86util.asm"
%if ARCH_X86_64
SECTION_RODATA
pb_0: times 16 db 0
SECTION .text SECTION .text
INIT_XMM sse2 INIT_XMM sse2
cglobal limiter_8bit, 8, 9, 3, src, dst, slinesize, dlinesize, w, h, min, max, x cglobal limiter_8bit, 6, 7, 3, src, dst, slinesize, dlinesize, w, h, x
movsxdifnidn wq, wd movsxdifnidn wq, wd
add srcq, wq add srcq, wq
add dstq, wq add dstq, wq
neg wq neg wq
SPLATB_REG m1, min, [pb_0] movd m1, r6m
SPLATB_REG m2, max, [pb_0] punpcklbw m1, m1
SPLATW m1, m1
movd m2, r7m
punpcklbw m2, m2
SPLATW m2, m2
.nextrow: .nextrow:
mov xq, wq mov xq, wq
@ -51,18 +49,18 @@ cglobal limiter_8bit, 8, 9, 3, src, dst, slinesize, dlinesize, w, h, min, max, x
add dstq, dlinesizeq add dstq, dlinesizeq
sub hd, 1 sub hd, 1
jg .nextrow jg .nextrow
ret RET
INIT_XMM sse4 INIT_XMM sse4
cglobal limiter_16bit, 8, 9, 3, src, dst, slinesize, dlinesize, w, h, min, max, x cglobal limiter_16bit, 6, 7, 3, src, dst, slinesize, dlinesize, w, h, x
shl wd, 1 shl wd, 1
add srcq, wq add srcq, wq
add dstq, wq add dstq, wq
neg wq neg wq
movd m1, mind movd m1, r6m
SPLATW m1, m1 SPLATW m1, m1
movd m2, maxd movd m2, r7m
SPLATW m2, m2 SPLATW m2, m2
.nextrow: .nextrow:
mov xq, wq mov xq, wq
@ -79,6 +77,4 @@ cglobal limiter_16bit, 8, 9, 3, src, dst, slinesize, dlinesize, w, h, min, max,
add dstq, dlinesizeq add dstq, dlinesizeq
sub hd, 1 sub hd, 1
jg .nextrow jg .nextrow
ret RET
%endif

View File

@ -31,12 +31,12 @@ void ff_limiter_init_x86(LimiterDSPContext *dsp, int bpp)
{ {
int cpu_flags = av_get_cpu_flags(); int cpu_flags = av_get_cpu_flags();
if (ARCH_X86_64 && EXTERNAL_SSE2(cpu_flags)) { if (EXTERNAL_SSE2(cpu_flags)) {
if (bpp <= 8) { if (bpp <= 8) {
dsp->limiter = ff_limiter_8bit_sse2; dsp->limiter = ff_limiter_8bit_sse2;
} }
} }
if (ARCH_X86_64 && EXTERNAL_SSE4(cpu_flags)) { if (EXTERNAL_SSE4(cpu_flags)) {
if (bpp > 8) { if (bpp > 8) {
dsp->limiter = ff_limiter_16bit_sse4; dsp->limiter = ff_limiter_16bit_sse4;
} }