⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mc_sse2.asm

📁 由bmp生成mpeg2 的I_frame 数据
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 偍栺懇
.586
.mmx
.xmm
.model flat
_TEXT64 segment page public use32 'CODE'
		align 16

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 摦偒曗彏乮width 16, Half/Half, 1st乯
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PUBLIC              C _prediction_w16_hh_1st_sse2@20
;      void __stdcall  prediction_w16_hh_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_hh_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]
;-------------------------------------------------------------------
; 壓弨旛
		movdqu     xmm0, [esi]
		pcmpeqw    xmm6, xmm6
		movdqu     xmm1, [esi]
		pxor       xmm7, xmm7
		movdqu     xmm2, [esi+1]
		psllw      xmm6, 1
		movdqu     xmm3, [esi+1]
		punpcklbw  xmm0, xmm7
		add        esi, eax
		punpckhbw  xmm1, xmm7
		shr        ecx, 1
		punpcklbw  xmm2, xmm7
		punpckhbw  xmm3, xmm7
;-------------------------------------------------------------------
; loop
prediction_w16_hh_1st_loop:
		dec        ecx
;-------------------------------------------------------------------
; core
		paddw      xmm0, xmm2
		movdqu     xmm4, [esi]
		paddw      xmm1, xmm3
		movdqu     xmm5, [esi]
		movdqu     xmm2, [esi+1]
		movdqu     xmm3, [esi+1]
		add        esi, eax
		punpcklbw  xmm4, xmm7
		psubw      xmm0, xmm6
		punpckhbw  xmm5, xmm7
		psubw      xmm1, xmm6
		punpcklbw  xmm2, xmm7
		paddw      xmm0, xmm4
		punpckhbw  xmm3, xmm7
		paddw      xmm1, xmm5
		paddw      xmm0, xmm2
		paddw      xmm1, xmm3
		psraw      xmm0, 2
		paddw      xmm4, xmm2
		psraw      xmm1, 2
		paddw      xmm5, xmm3
		packuswb   xmm0, xmm1
		movdqu     xmm2, [esi]
		movdqa     [edi], xmm0
		movdqu     xmm3, [esi]
		movdqu     xmm0, [esi+1]
		movdqu     xmm1, [esi+1]
		punpcklbw  xmm2, xmm7
		psubw      xmm4, xmm6
		punpckhbw  xmm3, xmm7
		psubw      xmm5, xmm6
		punpcklbw  xmm0, xmm7
		paddw      xmm4, xmm2
		punpckhbw  xmm1, xmm7
		paddw      xmm5, xmm3
		add        edi,  ebx
		paddw      xmm4, xmm0
		add        esi,  eax
		paddw      xmm5, xmm1
		psraw      xmm4, 2
		psraw      xmm5, 2
		packuswb   xmm4, xmm5
		movdqa     [edi], xmm4
		add        edi, ebx
;-------------------------------------------------------------------
; 儖乕僾廔抂僠僃僢僋
		test       ecx, ecx
		jnz        prediction_w16_hh_1st_loop
;-------------------------------------------------------------------
; 儗僕僗僞暅尦側偳屻巒枛
		pop        eax
		pop        ebx
		pop        ecx
		pop        edi
		pop        esi

		ret        20

_prediction_w16_hh_1st_sse2@20 ENDP
;-------------------------------------------------------------------
; 廔椆

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 摦偒曗彏乮width 16, Half/Half, 2nd乯
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PUBLIC              C _prediction_w16_hh_2nd_sse2@20
;      void __stdcall  prediction_w16_hh_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_hh_2nd_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]
;-------------------------------------------------------------------
; 壓弨旛
		movdqu     xmm0, [esi]
		pcmpeqw    xmm6, xmm6
		movdqu     xmm1, [esi]
		pxor       xmm7, xmm7
		movdqu     xmm2, [esi+1]
		psllw      xmm6, 1
		movdqu     xmm3, [esi+1]
		punpcklbw  xmm0, xmm7
		add        esi, eax
		punpckhbw  xmm1, xmm7
		shr        ecx, 1
		punpcklbw  xmm2, xmm7
		punpckhbw  xmm3, xmm7
;-------------------------------------------------------------------
; loop
prediction_w16_hh_2nd_loop:
		dec        ecx
;-------------------------------------------------------------------
; core
		paddw      xmm0, xmm2
		movdqu     xmm4, [esi]
		paddw      xmm1, xmm3
		movdqu     xmm5, [esi]
		movdqu     xmm2, [esi+1]
		movdqu     xmm3, [esi+1]
		add        esi, eax
		punpcklbw  xmm4, xmm7
		psubw      xmm0, xmm6
		punpckhbw  xmm5, xmm7
		psubw      xmm1, xmm6
		punpcklbw  xmm2, xmm7
		paddw      xmm0, xmm4
		punpckhbw  xmm3, xmm7
		paddw      xmm1, xmm5
		paddw      xmm0, xmm2
		paddw      xmm1, xmm3
		psraw      xmm0, 2
		paddw      xmm4, xmm2
		psraw      xmm1, 2
		paddw      xmm5, xmm3
		packuswb   xmm0, xmm1
		movdqu     xmm2, [esi]
		pavgb      xmm0, [edi]
		movdqu     xmm3, [esi]
		movdqa     [edi], xmm0
		movdqu     xmm0, [esi+1]
		movdqu     xmm1, [esi+1]
		punpcklbw  xmm2, xmm7
		psubw      xmm4, xmm6
		punpckhbw  xmm3, xmm7
		psubw      xmm5, xmm6
		punpcklbw  xmm0, xmm7
		paddw      xmm4, xmm2
		punpckhbw  xmm1, xmm7
		paddw      xmm5, xmm3
		add        edi,  ebx
		paddw      xmm4, xmm0
		add        esi,  eax
		paddw      xmm5, xmm1
		psraw      xmm4, 2
		psraw      xmm5, 2
		packuswb   xmm4, xmm5
		pavgb      xmm4, [edi]
		movdqa     [edi], xmm4
		add        edi, ebx
;-------------------------------------------------------------------
; 儖乕僾廔抂僠僃僢僋
		test       ecx, ecx
		jnz        prediction_w16_hh_2nd_loop
;-------------------------------------------------------------------
; 儗僕僗僞暅尦側偳屻巒枛
		pop        eax
		pop        ebx
		pop        ecx
		pop        edi
		pop        esi

		ret        20

_prediction_w16_hh_2nd_sse2@20 ENDP
;-------------------------------------------------------------------
; 廔椆

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 摦偒曗彏乮width 16, Full/Half, 1st乯悈暯 Full, 悅捈 Half
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PUBLIC              C _prediction_w16_fh_1st_sse2@20
;      void __stdcall  prediction_w16_fh_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_fh_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, 3
;-------------------------------------------------------------------
; loop
prediction_w16_fh_1st_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]
		add        esi, eax
		movdqu     xmm5, [esi]
		add        esi, eax
		pavgb      xmm0, xmm1
		movdqu     xmm6, [esi]
		pavgb      xmm1, xmm2
		add        esi, eax
		pavgb      xmm2, xmm3
		movdqu     xmm7, [esi]
		pavgb      xmm3, xmm4
		add        esi, eax
		pavgb      xmm4, xmm5
		movdqa     [edi], xmm0
		movdqu     xmm0, [esi]
		pavgb      xmm5, xmm6
		add        edi, ebx
		pavgb      xmm6, xmm7
		movdqa     [edi], xmm1
		pavgb      xmm7, xmm0
		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_fh_1st_loop
;-------------------------------------------------------------------
; 儗僕僗僞暅尦側偳屻巒枛
		pop        eax
		pop        ebx
		pop        ecx
		pop        edi
		pop        esi

		ret        20

_prediction_w16_fh_1st_sse2@20 ENDP
;-------------------------------------------------------------------
; 廔椆


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 摦偒曗彏乮width 16, Full/Half, 2nd乯悈暯 Full, 悅捈 Half
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PUBLIC              C _prediction_w16_fh_2nd_sse2@20
;      void __stdcall  prediction_w16_fh_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_fh_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]
;-------------------------------------------------------------------
; 壓弨旛

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -