Fix dr memory VP8 encode/decode errors
This patch fixed errors reported in Issue 746: "dr memory VP8 encode errors" and Issue 745: "dr memory VP8 decode errors". The "UNINITIALIZED READ" errors were fixed in x86 assembly code. The list of files fixed is vp8_intra_pred_uv_tm_sse2 vp8_intra_pred_uv_tm_ssse3 vp8_intra_pred_uv_ho_mmx2 vp8_intra_pred_uv_ho_ssse3 vp8_intra_pred_y_tm_sse2 vp8_intra_pred_y_tm_ssse3 vp8_intra_pred_y_ho_sse2 Change-Id: Ib6df7bf1d442077fe534edfd90e50ad16fadacdd
This commit is contained in:
parent
a439f5af5f
commit
1893122e34
@ -365,6 +365,7 @@ sym(vp8_intra_pred_uv_tm_%1):
|
|||||||
GET_GOT rbx
|
GET_GOT rbx
|
||||||
push rsi
|
push rsi
|
||||||
push rdi
|
push rdi
|
||||||
|
push rbx
|
||||||
; end prolog
|
; end prolog
|
||||||
|
|
||||||
; read top row
|
; read top row
|
||||||
@ -395,8 +396,11 @@ sym(vp8_intra_pred_uv_tm_%1):
|
|||||||
movsxd rcx, dword ptr arg(1) ;dst_stride
|
movsxd rcx, dword ptr arg(1) ;dst_stride
|
||||||
|
|
||||||
.vp8_intra_pred_uv_tm_%1_loop:
|
.vp8_intra_pred_uv_tm_%1_loop:
|
||||||
movd xmm3, [rsi]
|
mov bl, [rsi]
|
||||||
movd xmm5, [rsi+rax]
|
movd xmm3, ebx
|
||||||
|
|
||||||
|
mov bl, [rsi+rax]
|
||||||
|
movd xmm5, ebx
|
||||||
%ifidn %1, sse2
|
%ifidn %1, sse2
|
||||||
punpcklbw xmm3, xmm0
|
punpcklbw xmm3, xmm0
|
||||||
punpcklbw xmm5, xmm0
|
punpcklbw xmm5, xmm0
|
||||||
@ -419,6 +423,7 @@ sym(vp8_intra_pred_uv_tm_%1):
|
|||||||
jnz .vp8_intra_pred_uv_tm_%1_loop
|
jnz .vp8_intra_pred_uv_tm_%1_loop
|
||||||
|
|
||||||
; begin epilog
|
; begin epilog
|
||||||
|
pop rbx
|
||||||
pop rdi
|
pop rdi
|
||||||
pop rsi
|
pop rsi
|
||||||
RESTORE_GOT
|
RESTORE_GOT
|
||||||
@ -486,10 +491,8 @@ sym(vp8_intra_pred_uv_ho_%1):
|
|||||||
SHADOW_ARGS_TO_STACK 5
|
SHADOW_ARGS_TO_STACK 5
|
||||||
push rsi
|
push rsi
|
||||||
push rdi
|
push rdi
|
||||||
%ifidn %1, ssse3
|
|
||||||
%ifndef GET_GOT_SAVE_ARG
|
|
||||||
push rbx
|
push rbx
|
||||||
%endif
|
%ifidn %1, ssse3
|
||||||
GET_GOT rbx
|
GET_GOT rbx
|
||||||
%endif
|
%endif
|
||||||
; end prolog
|
; end prolog
|
||||||
@ -507,13 +510,16 @@ sym(vp8_intra_pred_uv_ho_%1):
|
|||||||
%ifidn %1, ssse3
|
%ifidn %1, ssse3
|
||||||
lea rdx, [rcx*3]
|
lea rdx, [rcx*3]
|
||||||
movdqa xmm2, [GLOBAL(dc_00001111)]
|
movdqa xmm2, [GLOBAL(dc_00001111)]
|
||||||
lea rbx, [rax*3]
|
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%ifidn %1, mmx2
|
%ifidn %1, mmx2
|
||||||
.vp8_intra_pred_uv_ho_%1_loop:
|
.vp8_intra_pred_uv_ho_%1_loop:
|
||||||
movd mm0, [rsi]
|
mov bl, [rsi]
|
||||||
movd mm1, [rsi+rax]
|
movd mm0, ebx
|
||||||
|
|
||||||
|
mov bl, [rsi+rax]
|
||||||
|
movd mm1, ebx
|
||||||
|
|
||||||
punpcklbw mm0, mm0
|
punpcklbw mm0, mm0
|
||||||
punpcklbw mm1, mm1
|
punpcklbw mm1, mm1
|
||||||
pshufw mm0, mm0, 0x0
|
pshufw mm0, mm0, 0x0
|
||||||
@ -525,10 +531,19 @@ sym(vp8_intra_pred_uv_ho_%1):
|
|||||||
dec edx
|
dec edx
|
||||||
jnz .vp8_intra_pred_uv_ho_%1_loop
|
jnz .vp8_intra_pred_uv_ho_%1_loop
|
||||||
%else
|
%else
|
||||||
movd xmm0, [rsi]
|
mov bl, [rsi]
|
||||||
movd xmm3, [rsi+rax]
|
movd xmm0, ebx
|
||||||
movd xmm1, [rsi+rax*2]
|
|
||||||
movd xmm4, [rsi+rbx]
|
mov bl, [rsi+rax]
|
||||||
|
movd xmm3, ebx
|
||||||
|
|
||||||
|
mov bl, [rsi+rax*2]
|
||||||
|
movd xmm1, ebx
|
||||||
|
|
||||||
|
lea rbx, [rax*3]
|
||||||
|
mov bl, [rsi+rbx]
|
||||||
|
movd xmm4, ebx
|
||||||
|
|
||||||
punpcklbw xmm0, xmm3
|
punpcklbw xmm0, xmm3
|
||||||
punpcklbw xmm1, xmm4
|
punpcklbw xmm1, xmm4
|
||||||
pshufb xmm0, xmm2
|
pshufb xmm0, xmm2
|
||||||
@ -539,10 +554,20 @@ sym(vp8_intra_pred_uv_ho_%1):
|
|||||||
movhps [rdi+rdx], xmm1
|
movhps [rdi+rdx], xmm1
|
||||||
lea rsi, [rsi+rax*4]
|
lea rsi, [rsi+rax*4]
|
||||||
lea rdi, [rdi+rcx*4]
|
lea rdi, [rdi+rcx*4]
|
||||||
movd xmm0, [rsi]
|
|
||||||
movd xmm3, [rsi+rax]
|
mov bl, [rsi]
|
||||||
movd xmm1, [rsi+rax*2]
|
movd xmm0, ebx
|
||||||
movd xmm4, [rsi+rbx]
|
|
||||||
|
mov bl, [rsi+rax]
|
||||||
|
movd xmm3, ebx
|
||||||
|
|
||||||
|
mov bl, [rsi+rax*2]
|
||||||
|
movd xmm1, ebx
|
||||||
|
|
||||||
|
lea rbx, [rax*3]
|
||||||
|
mov bl, [rsi+rbx]
|
||||||
|
movd xmm4, ebx
|
||||||
|
|
||||||
punpcklbw xmm0, xmm3
|
punpcklbw xmm0, xmm3
|
||||||
punpcklbw xmm1, xmm4
|
punpcklbw xmm1, xmm4
|
||||||
pshufb xmm0, xmm2
|
pshufb xmm0, xmm2
|
||||||
@ -556,10 +581,8 @@ sym(vp8_intra_pred_uv_ho_%1):
|
|||||||
; begin epilog
|
; begin epilog
|
||||||
%ifidn %1, ssse3
|
%ifidn %1, ssse3
|
||||||
RESTORE_GOT
|
RESTORE_GOT
|
||||||
%ifndef GET_GOT_SAVE_ARG
|
%endif
|
||||||
pop rbx
|
pop rbx
|
||||||
%endif
|
|
||||||
%endif
|
|
||||||
pop rdi
|
pop rdi
|
||||||
pop rsi
|
pop rsi
|
||||||
UNSHADOW_ARGS
|
UNSHADOW_ARGS
|
||||||
@ -893,6 +916,7 @@ sym(vp8_intra_pred_y_tm_%1):
|
|||||||
SAVE_XMM 7
|
SAVE_XMM 7
|
||||||
push rsi
|
push rsi
|
||||||
push rdi
|
push rdi
|
||||||
|
push rbx
|
||||||
GET_GOT rbx
|
GET_GOT rbx
|
||||||
; end prolog
|
; end prolog
|
||||||
|
|
||||||
@ -926,8 +950,11 @@ sym(vp8_intra_pred_y_tm_%1):
|
|||||||
mov rdi, arg(0) ;dst;
|
mov rdi, arg(0) ;dst;
|
||||||
movsxd rcx, dword ptr arg(1) ;dst_stride
|
movsxd rcx, dword ptr arg(1) ;dst_stride
|
||||||
vp8_intra_pred_y_tm_%1_loop:
|
vp8_intra_pred_y_tm_%1_loop:
|
||||||
movd xmm4, [rsi]
|
mov bl, [rsi]
|
||||||
movd xmm5, [rsi+rax]
|
movd xmm4, ebx
|
||||||
|
|
||||||
|
mov bl, [rsi+rax]
|
||||||
|
movd xmm5, ebx
|
||||||
%ifidn %1, sse2
|
%ifidn %1, sse2
|
||||||
punpcklbw xmm4, xmm0
|
punpcklbw xmm4, xmm0
|
||||||
punpcklbw xmm5, xmm0
|
punpcklbw xmm5, xmm0
|
||||||
@ -956,6 +983,7 @@ vp8_intra_pred_y_tm_%1_loop:
|
|||||||
|
|
||||||
; begin epilog
|
; begin epilog
|
||||||
RESTORE_GOT
|
RESTORE_GOT
|
||||||
|
pop rbx
|
||||||
pop rdi
|
pop rdi
|
||||||
pop rsi
|
pop rsi
|
||||||
RESTORE_XMM
|
RESTORE_XMM
|
||||||
@ -1029,6 +1057,7 @@ sym(vp8_intra_pred_y_ho_sse2):
|
|||||||
SHADOW_ARGS_TO_STACK 5
|
SHADOW_ARGS_TO_STACK 5
|
||||||
push rsi
|
push rsi
|
||||||
push rdi
|
push rdi
|
||||||
|
push rbx
|
||||||
; end prolog
|
; end prolog
|
||||||
|
|
||||||
;arg(2) not used
|
;arg(2) not used
|
||||||
@ -1041,8 +1070,11 @@ sym(vp8_intra_pred_y_ho_sse2):
|
|||||||
movsxd rcx, dword ptr arg(1) ;dst_stride
|
movsxd rcx, dword ptr arg(1) ;dst_stride
|
||||||
|
|
||||||
vp8_intra_pred_y_ho_sse2_loop:
|
vp8_intra_pred_y_ho_sse2_loop:
|
||||||
movd xmm0, [rsi]
|
mov bl, [rsi]
|
||||||
movd xmm1, [rsi+rax]
|
movd xmm0, ebx
|
||||||
|
mov bl, [rsi+rax]
|
||||||
|
movd xmm1, ebx
|
||||||
|
|
||||||
; FIXME use pshufb for ssse3 version
|
; FIXME use pshufb for ssse3 version
|
||||||
punpcklbw xmm0, xmm0
|
punpcklbw xmm0, xmm0
|
||||||
punpcklbw xmm1, xmm1
|
punpcklbw xmm1, xmm1
|
||||||
@ -1058,6 +1090,7 @@ vp8_intra_pred_y_ho_sse2_loop:
|
|||||||
jnz vp8_intra_pred_y_ho_sse2_loop
|
jnz vp8_intra_pred_y_ho_sse2_loop
|
||||||
|
|
||||||
; begin epilog
|
; begin epilog
|
||||||
|
pop rbx
|
||||||
pop rdi
|
pop rdi
|
||||||
pop rsi
|
pop rsi
|
||||||
UNSHADOW_ARGS
|
UNSHADOW_ARGS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user