📄 mc_sse2.asm
字号:
shr ecx, 3
mov edx, edi
;-------------------------------------------------------------------
; loop
prediction_w16_fh_2nd_loop:
dec ecx
;-------------------------------------------------------------------
; core
movdqu xmm0, [esi]
add esi, eax
movdqu xmm1, [esi]
add esi, eax
movdqu xmm2, [esi]
add esi, eax
movdqu xmm3, [esi]
add esi, eax
movdqu xmm4, [esi]
pavgb xmm0, xmm1
add esi, eax
movdqu xmm5, [esi]
pavgb xmm1, xmm2
add esi, eax
movdqu xmm6, [esi]
pavgb xmm2, xmm3
add esi, eax
movdqu xmm7, [esi]
pavgb xmm3, xmm4
add esi, eax
pavgb xmm0, [edx]
add edx, ebx
pavgb xmm4, xmm5
movdqa [edi], xmm0
movdqu xmm0, [esi]
add edi, ebx
pavgb xmm1, [edx]
add edx, ebx
pavgb xmm5, xmm6
movdqa [edi], xmm1
add edi, ebx
pavgb xmm2, [edx]
add edx, ebx
pavgb xmm6, xmm7
movdqa [edi], xmm2
add edi, ebx
pavgb xmm3, [edx]
add edx, ebx
pavgb xmm7, xmm0
movdqa [edi], xmm3
add edi, ebx
pavgb xmm4, [edx]
add edx, ebx
pavgb xmm5, [edx]
add edx, ebx
pavgb xmm6, [edx]
add edx, ebx
pavgb xmm7, [edx]
add edx, ebx
movdqa [edi], xmm4
add edi, ebx
movdqa [edi], xmm5
add edi, ebx
movdqa [edi], xmm6
add edi, ebx
movdqa [edi], xmm7
add edi, ebx
;-------------------------------------------------------------------
; 儖乕僾廔抂僠僃僢僋
test ecx, ecx
jnz prediction_w16_fh_2nd_loop
;-------------------------------------------------------------------
; 儗僕僗僞暅尦側偳屻巒枛
pop eax
pop ebx
pop ecx
pop edx
pop edi
pop esi
ret 20
_prediction_w16_fh_2nd_sse2@20 ENDP
;-------------------------------------------------------------------
; 廔椆
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 摦偒曗彏乮width 16, Half/Full, 1st乯悈暯 Half, 悅捈 Full
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PUBLIC C _prediction_w16_hf_1st_sse2@20
; void __stdcall prediction_w16_hf_1st_sse2(
; [esp+ 4] unsigned char *in,
; [esp+ 8] unsigned char *out,
; [esp+12] int in_step,
; [esp+16] int out_step,
; [esp+20] int height
; )
_prediction_w16_hf_1st_sse2@20 PROC
;-------------------------------------------------------------------
; 巊梡偡傞儗僕僗僞
; esi - 擖椡
; edi - 弌椡
; ecx - 儖乕僾僇僂儞僞
; eax - 擖椡僗僥僢僾
; ebx - 弌椡僗僥僢僾
;-------------------------------------------------------------------
; 儗僕僗僞偺戅旔
push esi
push edi
push ecx
push ebx
push eax
;-------------------------------------------------------------------
; 堷悢偐傜僨乕僞傪庴偗庢偭偰偍偔
mov esi, [esp+20+ 4]
mov edi, [esp+20+ 8]
mov eax, [esp+20+12]
mov ebx, [esp+20+16]
mov ecx, [esp+20+20]
;-------------------------------------------------------------------
; 壓弨旛
shr ecx, 2
;-------------------------------------------------------------------
; loop
prediction_w16_hf_1st_loop:
dec ecx
;-------------------------------------------------------------------
; core
movdqu xmm0, [esi]
movdqu xmm1, [esi+1]
add esi, eax
movdqu xmm2, [esi]
movdqu xmm3, [esi+1]
add esi, eax
pavgb xmm0, xmm1
movdqu xmm4, [esi]
movdqu xmm5, [esi+1]
add esi, eax
pavgb xmm2, xmm3
movdqu xmm6, [esi]
movdqu xmm7, [esi+1]
add esi, eax
pavgb xmm4, xmm5
movdqa [edi], xmm0
add edi, ebx
pavgb xmm6, xmm7
movdqa [edi], xmm2
add edi, ebx
movdqa [edi], xmm4
add edi, ebx
movdqa [edi], xmm6
add edi, ebx
;-------------------------------------------------------------------
; 儖乕僾廔抂僠僃僢僋
test ecx, ecx
jnz prediction_w16_hf_1st_loop
;-------------------------------------------------------------------
; 儗僕僗僞暅尦側偳屻巒枛
pop eax
pop ebx
pop ecx
pop edi
pop esi
ret 20
_prediction_w16_hf_1st_sse2@20 ENDP
;-------------------------------------------------------------------
; 廔椆
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 摦偒曗彏乮width 16, Half/Full, 2nd乯悈暯 Half, 悅捈 Full
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PUBLIC C _prediction_w16_hf_2nd_sse2@20
; void __stdcall prediction_w16_hf_2nd_sse2(
; [esp+ 4] unsigned char *in,
; [esp+ 8] unsigned char *out,
; [esp+12] int in_step,
; [esp+16] int out_step,
; [esp+20] int height
; )
_prediction_w16_hf_2nd_sse2@20 PROC
;-------------------------------------------------------------------
; 巊梡偡傞儗僕僗僞
; esi - 擖椡
; edi - 弌椡
; ecx - 儖乕僾僇僂儞僞
; eax - 擖椡僗僥僢僾
; ebx - 弌椡僗僥僢僾
;-------------------------------------------------------------------
; 儗僕僗僞偺戅旔
push esi
push edi
push edx
push ecx
push ebx
push eax
;-------------------------------------------------------------------
; 堷悢偐傜僨乕僞傪庴偗庢偭偰偍偔
mov esi, [esp+24+ 4]
mov edi, [esp+24+ 8]
mov eax, [esp+24+12]
mov ebx, [esp+24+16]
mov ecx, [esp+24+20]
;-------------------------------------------------------------------
; 壓弨旛
shr ecx, 2
mov edx, edi
;-------------------------------------------------------------------
; loop
prediction_w16_hf_2nd_loop:
dec ecx
;-------------------------------------------------------------------
; core
movdqu xmm0, [esi]
movdqu xmm1, [esi+1]
add esi, eax
movdqu xmm2, [esi]
movdqu xmm3, [esi+1]
add esi, eax
movdqu xmm4, [esi]
movdqu xmm5, [esi+1]
pavgb xmm0, xmm1
add esi, eax
movdqu xmm6, [esi]
movdqu xmm7, [esi+1]
pavgb xmm2, xmm3
add esi, eax
pavgb xmm0, [edx]
add edx, ebx
pavgb xmm4, xmm5
movdqa [edi], xmm0
add edi, ebx
pavgb xmm2, [edx]
add edx, ebx
pavgb xmm6, xmm7
movdqa [edi], xmm2
add edi, ebx
pavgb xmm4, [edx]
add edx, ebx
pavgb xmm6, [edx]
add edx, ebx
movdqa [edi], xmm4
add edi, ebx
movdqa [edi], xmm6
add edi, ebx
;-------------------------------------------------------------------
; 儖乕僾廔抂僠僃僢僋
test ecx, ecx
jnz prediction_w16_hf_2nd_loop
;-------------------------------------------------------------------
; 儗僕僗僞暅尦側偳屻巒枛
pop eax
pop ebx
pop ecx
pop edx
pop edi
pop esi
ret 20
_prediction_w16_hf_2nd_sse2@20 ENDP
;-------------------------------------------------------------------
; 廔椆
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 摦偒曗彏乮width 16, Full/Full, 2nd乯悈暯 Full, 悅捈 Full
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 婎杮曽恓
; 16 bit 惛搙偱 4 暲楍墘嶼
;-------------------------------------------------------------------
PUBLIC C _prediction_w16_ff_2nd_sse2@20
; void __stdcall prediction_w16_ff_2nd_sse2(
; [esp+ 4] unsigned char *in,
; [esp+ 8] unsigned char *out,
; [esp+12] int in_step,
; [esp+16] int out_step,
; [esp+20] int height
; )
_prediction_w16_ff_2nd_sse2@20 PROC
;-------------------------------------------------------------------
; 巊梡偡傞儗僕僗僞
; esi - 擖椡
; edi - 弌椡
; ecx - 儖乕僾僇僂儞僞
; eax - 擖椡僗僥僢僾
; ebx - 弌椡僗僥僢僾
;-------------------------------------------------------------------
; 儗僕僗僞偺戅旔
push esi
push edi
push edx
push ecx
push ebx
push eax
;-------------------------------------------------------------------
; 堷悢偐傜僨乕僞傪庴偗庢偭偰偍偔
mov esi, [esp+24+ 4]
mov edi, [esp+24+ 8]
mov eax, [esp+24+12]
mov ebx, [esp+24+16]
mov ecx, [esp+24+20]
;-------------------------------------------------------------------
; 壓弨旛
shr ecx, 3
mov edx, edi
;-------------------------------------------------------------------
; loop
prediction_w16_ff_2nd_loop:
dec ecx
;-------------------------------------------------------------------
; core
movdqu xmm0, [esi]
add esi, eax
movdqu xmm1, [esi]
add esi, eax
movdqu xmm2, [esi]
add esi, eax
movdqu xmm3, [esi]
add esi, eax
pavgb xmm0, [edx]
add edx, ebx
movdqu xmm4, [esi]
add esi, eax
pavgb xmm1, [edx]
add edx, ebx
movdqu xmm5, [esi]
add esi, eax
pavgb xmm2, [edx]
add edx, ebx
movdqu xmm6, [esi]
add esi, eax
pavgb xmm3, [edx]
add edx, ebx
movdqu xmm7, [esi]
add esi, eax
pavgb xmm4, [edx]
add edx, ebx
pavgb xmm5, [edx]
add edx, ebx
pavgb xmm6, [edx]
add edx, ebx
pavgb xmm7, [edx]
add edx, ebx
movdqa [edi], xmm0
add edi, ebx
movdqa [edi], xmm1
add edi, ebx
movdqa [edi], xmm2
add edi, ebx
movdqa [edi], xmm3
add edi, ebx
movdqa [edi], xmm4
add edi, ebx
movdqa [edi], xmm5
add edi, ebx
movdqa [edi], xmm6
add edi, ebx
movdqa [edi], xmm7
add edi, ebx
;-------------------------------------------------------------------
; 儖乕僾廔抂僠僃僢僋
test ecx, ecx
jnz prediction_w16_ff_2nd_loop
;-------------------------------------------------------------------
; 儗僕僗僞暅尦側偳屻巒枛
pop eax
pop ebx
pop ecx
pop edx
pop edi
pop esi
ret 20
_prediction_w16_ff_2nd_sse2@20 ENDP
;-------------------------------------------------------------------
; 廔椆
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -