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

📄 mc_mmx.asm

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


adjust_1 dq 00001000100010001h
adjust_2 dq 00002000200020002h
adjust_3 dq 00003000300030003h
adjust_6 dq 00006000600060006h

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 摦偒曗彏乮width 16, Half/Half, 1st乯
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 婎杮曽恓
; 16bit 惛搙偱係暲楍寁嶼
; 僉儍僢僔儏偵僸僢僩偡傞敜偩偐傜丄俀夞儊儌儕偐傜撉傫偱傕廩暘懍偄丠
; 
;-------------------------------------------------------------------
PUBLIC              C _prediction_w16_hh_1st_mmx@20
;      void __stdcall  prediction_w16_hh_1st_mmx(
; [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_mmx@20 PROC
;-------------------------------------------------------------------
; 巊梡偡傞儗僕僗僞
; esi - 擖椡
; edi - 弌椡
; ecx - 儖乕僾僇僂儞僞
; eax - 擖椡僗僥僢僾
; ebx - 弌椡僗僥僢僾
;-------------------------------------------------------------------
; 巊梡偡傞儘乕僇儖曄悢
; 側偟
;-------------------------------------------------------------------
; 梡搑屌掕 MMX 儗僕僗僞
; mm7 - 0
;-------------------------------------------------------------------
; 儗僕僗僞偺戅旔
		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]
;-------------------------------------------------------------------
; 學悢嶌惉
		pxor       mm7, mm7
		movq       mm6, adjust_2
;-------------------------------------------------------------------
; loop
prediction_w16_hh_1st_loop:
		dec        ecx
;-------------------------------------------------------------------
; core
		movd       mm0, [esi]
		movd       mm1, [esi+4]
		movd       mm2, [esi+eax]
		movd       mm3, [esi+eax+4]
		movq       mm4, mm0
		movq       mm5, mm2
		punpckldq  mm4, mm1
		punpckldq  mm5, mm3
		psrlq      mm4, 8
		psrlq      mm5, 8
		punpcklbw  mm0, mm7
		punpcklbw  mm2, mm7
		punpcklbw  mm4, mm7
		punpcklbw  mm5, mm7
		paddw      mm0, mm2
		paddw      mm0, mm4
		paddw      mm0, mm5
		paddw      mm0, mm6
		psrlw      mm0, 2
		packuswb   mm0, mm7
		movd       [edi], mm0
; 0 - 3 finish
		movd       mm0, [esi+8]
		movd       mm2, [esi+eax+8]
		movq       mm4, mm1
		movq       mm5, mm3
		punpckldq  mm4, mm0
		punpckldq  mm5, mm2
		psrlq      mm4, 8
		psrlq      mm5, 8
		punpcklbw  mm1, mm7
		punpcklbw  mm3, mm7
		punpcklbw  mm4, mm7
		punpcklbw  mm5, mm7
		paddw      mm1, mm3
		paddw      mm1, mm4
		paddw      mm1, mm5
		paddw      mm1, mm6
		psrlw      mm1, 2
		packuswb   mm1, mm7
		movd       [edi+4], mm1
; 4 - 7 finish
		movd       mm1, [esi+12]
		movd       mm3, [esi+eax+12]
		movq       mm4, mm0
		movq       mm5, mm2
		punpckldq  mm4, mm1
		punpckldq  mm5, mm3
		psrlq      mm4, 8
		psrlq      mm5, 8
		punpcklbw  mm0, mm7
		punpcklbw  mm2, mm7
		punpcklbw  mm4, mm7
		punpcklbw  mm5, mm7
		paddw      mm0, mm2
		paddw      mm0, mm4
		paddw      mm0, mm5
		paddw      mm0, mm6
		psrlw      mm0, 2
		packuswb   mm0, mm7
		movd       [edi+8], mm0
; 8 - 11 finish
		movd       mm0, [esi+16]
		movd       mm2, [esi+eax+16]
		psllq      mm0, 32
		psllq      mm2, 32
		por        mm0, mm1
		por        mm2, mm3
		psrlq      mm0, 8
		psrlq      mm2, 8
		punpcklbw  mm0, mm7
		punpcklbw  mm1, mm7
		punpcklbw  mm2, mm7
		punpcklbw  mm3, mm7
		paddw      mm0, mm1
		paddw      mm0, mm2
		paddw      mm0, mm3
		paddw      mm0, mm6
		psrlw      mm0, 2
		packuswb   mm0, mm7
		movd       [edi+12], mm0
; 12 - 15 finish
		lea        edi, [edi+ebx]
		lea        esi, [esi+eax]
;-------------------------------------------------------------------
; 儖乕僾廔抂僠僃僢僋
		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_mmx@20 ENDP
;-------------------------------------------------------------------
; 廔椆



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 摦偒曗彏乮width 16, Half/Half, 2nd乯
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 婎杮曽恓
; 16bit 惛搙偱係暲楍寁嶼
; 僉儍僢僔儏偵僸僢僩偡傞敜偩偐傜丄俀夞儊儌儕偐傜撉傫偱傕廩暘懍偄丠
; 
;-------------------------------------------------------------------
PUBLIC              C _prediction_w16_hh_2nd_mmx@20
;      void __stdcall  prediction_w16_hh_2nd_mmx(
; [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_mmx@20 PROC
;-------------------------------------------------------------------
; 巊梡偡傞儗僕僗僞
; esi - 擖椡
; edi - 弌椡
; ecx - 儖乕僾僇僂儞僞
; eax - 擖椡僗僥僢僾
; ebx - 弌椡僗僥僢僾
;-------------------------------------------------------------------
; 巊梡偡傞儘乕僇儖曄悢
; 側偟
;-------------------------------------------------------------------
; 梡搑屌掕 MMX 儗僕僗僞
; mm7 - 0
;-------------------------------------------------------------------
; 儗僕僗僞偺戅旔
		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]
;-------------------------------------------------------------------
; 學悢嶌惉
		pxor       mm7, mm7
;-------------------------------------------------------------------
; loop
prediction_w16_hh_2nd_loop:
		dec        ecx
;-------------------------------------------------------------------
; core
		movd       mm0, [esi]
		movd       mm1, [esi+4]
		movd       mm2, [esi+eax]
		movd       mm3, [esi+eax+4]
		movd       mm6, [edi]
		movq       mm4, mm1
		movq       mm5, mm3
		psllq      mm4, 32
		psllq      mm5, 32
		por        mm4, mm0
		por        mm5, mm2
		psrlq      mm4, 8
		psrlq      mm5, 8
		punpcklbw  mm0, mm7
		punpcklbw  mm2, mm7
		punpcklbw  mm4, mm7
		punpcklbw  mm5, mm7
		punpcklbw  mm6, mm7
		paddw      mm0, mm2
		paddw      mm0, mm4
		paddw      mm0, mm5
		paddw      mm0, adjust_6
		psrlw      mm0, 2
		paddw      mm0, mm6
		psrlw      mm0, 1
		packuswb   mm0, mm7
		movd       [edi], mm0
; 0 - 3 finish
		movd       mm0, [esi+8]
		movd       mm2, [esi+eax+8]
		movd       mm6, [edi+4]
		movq       mm4, mm0
		movq       mm5, mm2
		psllq      mm4, 32
		psllq      mm5, 32
		por        mm4, mm1
		por        mm5, mm3
		psrlq      mm4, 8
		psrlq      mm5, 8
		punpcklbw  mm1, mm7
		punpcklbw  mm3, mm7
		punpcklbw  mm4, mm7
		punpcklbw  mm5, mm7
		punpcklbw  mm6, mm7
		paddw      mm1, mm3
		paddw      mm1, mm4
		paddw      mm1, mm5
		paddw      mm1, adjust_6
		psrlw      mm1, 2
		paddw      mm1, mm6
		psrlw      mm1, 1
		packuswb   mm1, mm7
		movd       [edi+4], mm1
; 4 - 7 finish
		movd       mm1, [esi+12]
		movd       mm3, [esi+eax+12]
		movd       mm6, [edi+8]
		movq       mm4, mm1
		movq       mm5, mm3
		psllq      mm4, 32
		psllq      mm5, 32
		por        mm4, mm0
		por        mm5, mm2
		psrlq      mm4, 8
		psrlq      mm5, 8
		punpcklbw  mm0, mm7
		punpcklbw  mm2, mm7
		punpcklbw  mm4, mm7
		punpcklbw  mm5, mm7
		punpcklbw  mm6, mm7
		paddw      mm0, mm2
		paddw      mm0, mm4
		paddw      mm0, mm5
		paddw      mm0, adjust_6
		psrlw      mm0, 2
		paddw      mm0, mm6
		psrlw      mm0, 1
		packuswb   mm0, mm7
		movd       [edi+8], mm0
; 8 - 11 finish
		movd       mm0, [esi+16]
		movd       mm2, [esi+eax+16]
		movd       mm6, [edi+12]
		psllq      mm0, 32
		psllq      mm2, 32
		por        mm0, mm1
		por        mm2, mm3
		psrlq      mm0, 8
		psrlq      mm2, 8
		punpcklbw  mm0, mm7
		punpcklbw  mm1, mm7
		punpcklbw  mm2, mm7
		punpcklbw  mm3, mm7
		punpcklbw  mm6, mm7
		paddw      mm0, mm1
		paddw      mm0, mm2
		paddw      mm0, mm3
		paddw      mm0, adjust_6
		psrlw      mm0, 2
		paddw      mm0, mm6
		psrlw      mm0, 1
		packuswb   mm0, mm7
		movd       [edi+12], mm0
; 12 - 15 finish
		lea        edi, [edi+ebx]
		lea        esi, [esi+eax]
;-------------------------------------------------------------------
; 儖乕僾廔抂僠僃僢僋
		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_mmx@20 ENDP
;-------------------------------------------------------------------
; 廔椆



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 摦偒曗彏乮width 16, Full/Half, 1st乯悈暯 Full, 悅捈 Half
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 婎杮曽恓
; 16bit 惛搙偱係暲楍寁嶼
;-------------------------------------------------------------------
PUBLIC              C _prediction_w16_fh_1st_mmx@20
;      void __stdcall  prediction_w16_fh_1st_mmx(
; [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_mmx@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, 1
		pxor       mm7, mm7
		movd       mm0, [esi]
		movd       mm1, [esi+4]
		movd       mm2, [esi+8]
		movd       mm3, [esi+12]
		lea        esi, [esi+eax]
		punpcklbw  mm0, mm7
		punpcklbw  mm1, mm7
		punpcklbw  mm2, mm7
		punpcklbw  mm3, mm7
;-------------------------------------------------------------------
; loop
prediction_w16_fh_1st_loop:
		dec        ecx
;-------------------------------------------------------------------
; core
		movd       mm4, [esi]
		movd       mm5, [esi+4]
		punpcklbw  mm4, mm7
		punpcklbw  mm5, mm7
		paddw      mm0, mm4
		paddw      mm1, mm5
		paddw      mm0, adjust_1
		paddw      mm1, adjust_1
		psrlw      mm0, 1
		psrlw      mm1, 1
		packuswb   mm0, mm1
		movq       [edi], mm0

		pxor       mm1, mm1

		movd       mm6, [esi+8]
		movd       mm7, [esi+12]
		punpcklbw  mm6, mm1
		punpcklbw  mm7, mm1
		paddw      mm2, mm6
		paddw      mm3, mm7
		paddw      mm2, adjust_1
		paddw      mm3, adjust_1
		psrlw      mm2, 1
		psrlw      mm3, 1
		packuswb   mm2, mm3
		movq       [edi+8], mm2

		pxor       mm3, mm3

		lea        esi, [esi+eax] 
		lea        edi, [edi+ebx]

		movd       mm0, [esi]
		movd       mm1, [esi+4]
		punpcklbw  mm0, mm3
		punpcklbw  mm1, mm3
		paddw      mm4, mm0
		paddw      mm5, mm1
		paddw      mm4, adjust_1
		paddw      mm5, adjust_1
		psrlw      mm4, 1
		psrlw      mm5, 1
		packuswb   mm4, mm5
		movq       [edi], mm4

		pxor       mm5, mm5

		movd       mm2, [esi+8]
		movd       mm3, [esi+12]
		punpcklbw  mm2, mm5
		punpcklbw  mm3, mm5
		paddw      mm6, mm2
		paddw      mm7, mm3
		paddw      mm6, adjust_1
		paddw      mm7, adjust_1
		psrlw      mm6, 1
		psrlw      mm7, 1
		packuswb   mm6, mm7
		movq       [edi+8], mm6

		pxor       mm7, mm7

		lea        esi, [esi+eax]
		lea        edi, [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_mmx@20 ENDP
;-------------------------------------------------------------------
; 廔椆



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 摦偒曗彏乮width 16, Full/Half, 2nd乯悈暯 Full, 悅捈 Half
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 婎杮曽恓
; 16bit 惛搙偱係暲楍寁嶼
;-------------------------------------------------------------------
PUBLIC              C _prediction_w16_fh_2nd_mmx@20
;      void __stdcall  prediction_w16_fh_2nd_mmx(
; [esp+ 4] unsigned char *in,
; [esp+ 8] unsigned char *out,
; [esp+12] int            in_step,
; [esp+16] int            out_step,
; [esp+20] int            height

⌨️ 快捷键说明

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