videodsp: don't overread edges in vfix3 emu_edge.

Fixes trac ticket 3226. Also see Andreas' analysis in
https://bugs.debian.org/801745, which was very helpful.
(cherry picked from commit 52f84d82bd)
This commit is contained in:
Ronald S. Bultje 2015-10-23 11:11:53 -04:00 committed by Carl Eugen Hoyos
parent 18f36c70ec
commit d3af86c867
1 changed files with 11 additions and 4 deletions

View File

@ -185,8 +185,12 @@ hvar_fn
%elif (%2-%%off) == 2 %elif (%2-%%off) == 2
mov valw, [srcq+%2-2] mov valw, [srcq+%2-2]
%elifidn %1, body %elifidn %1, body
mov vald, [srcq+%2-3] mov valb, [srcq+%2-1]
%else sal vald, 16
mov valw, [srcq+%2-3]
%elifidn %1, bottom
movd mm %+ %%mmx_idx, [srcq+%2-4]
%else ; top
movd mm %+ %%mmx_idx, [srcq+%2-3] movd mm %+ %%mmx_idx, [srcq+%2-3]
%endif %endif
%endif ; (%2-%%off) >= 1 %endif ; (%2-%%off) >= 1
@ -242,12 +246,15 @@ hvar_fn
mov [dstq+%2-2], valw mov [dstq+%2-2], valw
%elifidn %1, body %elifidn %1, body
mov [dstq+%2-3], valw mov [dstq+%2-3], valw
shr vald, 16 sar vald, 16
mov [dstq+%2-1], valb mov [dstq+%2-1], valb
%else %else
movd vald, mm %+ %%mmx_idx movd vald, mm %+ %%mmx_idx
%ifidn %1, bottom
sar vald, 8
%endif
mov [dstq+%2-3], valw mov [dstq+%2-3], valw
shr vald, 16 sar vald, 16
mov [dstq+%2-1], valb mov [dstq+%2-1], valb
%endif %endif
%endif ; (%2-%%off) >= 1 %endif ; (%2-%%off) >= 1