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

📄 mmxpred.asm

📁 这是G.723和G.729的音频编解码的源代码
💻 ASM
字号:
.nolist
INCLUDE iammx.inc                   ; IAMMX Emulator Macros
.list

.586p
.model FLAT

.data

.const 

.code

COMMENT ^
	 void MMXPredMB(
		short *Data,
		BYTE *Select,
		BYTE *Source,
		int pixel);
^

MMXPredMB PROC NEAR C USES ESI EDI EAX ECX EDX,
            Data: PTR SWORD,Select:PTR BYTE,Source:PTR BYTE,
			pixel:DWORD

		mov		esi,	Select
		mov		edi,	Data
		mov		edx,	Source
		mov		eax,	pixel
		mov		ecx,	16
		pxor	mm7,	mm7

LINE:
		movq	mm0,	[esi]

		movq	mm1,	[edx]
		movq	mm2,	mm0

		movq	mm3,	mm1
		punpcklbw mm0,	mm7

		movq	mm4,	[esi+8]
		punpckhbw mm2,	mm7

		movq	mm5,	[edx+8]
		punpcklbw mm1,	mm7

		punpckhbw mm3,	mm7
		psubsw	mm0,	mm1

		psubsw	mm2,	mm3
		movq	mm1,	mm4

		movq	mm3,	mm5
		add		esi,	eax

		movq	[edi],	mm0
		punpcklbw mm4,	mm7

		movq	[edi+8],mm2
		punpckhbw mm1,	mm7

		add		edx,	16
		punpcklbw mm5,	mm7

		punpckhbw mm3,	mm7
		psubsw	mm4,	mm5

		psubsw	mm1,	mm3

		movq	[edi+16],	mm4
		movq	[edi+24],mm1

		add		edi,	32

		dec		ecx
		jnz		LINE

		emms
		ret
MMXPredMB ENDP


COMMENT ^
	 void MMXPredBlock(
		short *Data,
		BYTE *Select,
		BYTE *Source,
		int pixel);
^

MMXPredBlock PROC NEAR C USES ESI EDI EAX EBX EDX,
            Data: PTR SWORD,Select:PTR BYTE,Source:PTR BYTE,
			pixel:DWORD

		mov		esi,	Select
		mov		edi,	Data
		mov		edx,	Source
		mov		eax,	pixel



		movq	mm0,	[esi]
		pxor	mm7,	mm7

		movq	mm1,	[edx]
		movq	mm2,	mm0

		movq	mm3,	mm1
		punpcklbw mm0,	mm7

		mov		ebx,	eax
		punpckhbw mm2,	mm7

		add		ebx,	eax
		punpcklbw mm1,	mm7

		add		ebx,	eax
		punpckhbw mm3,	mm7

		movq	mm4,	[esi+eax]
		psubsw	mm0,	mm1
		movq	mm5,	[edx+8]
		psubsw	mm2,	mm3

		movq	mm1,	mm4
		movq	mm3,	mm5

		movq	[edi],	mm0
		punpcklbw mm4,	mm7
		movq	[edi+8],mm2
		punpckhbw mm1,	mm7

		movq	mm0,	[esi+2*eax]
		punpcklbw mm5,	mm7

		add		esi,	ebx
		punpckhbw mm3,	mm7

		movq	mm6,	[edx+16]
		psubsw	mm4,	mm5

		movq	mm2,	mm0
		psubsw	mm1,	mm3

		movq	mm3,	mm6
		punpcklbw mm0,	mm7

		movq	[edi+16],	mm4
		punpckhbw mm2,	mm7
		movq	[edi+24],mm1
		punpcklbw mm6,	mm7

		movq	mm4,	[esi]
		punpckhbw mm3,	mm7

		movq	mm5,	[edx+24]
		psubsw	mm0,	mm6

		movq	mm1,	mm4
		psubsw	mm2,	mm3

		movq	mm3,	mm5
		punpcklbw mm4,	mm7

		movq	[edi+32],	mm0
		punpckhbw mm1,	mm7
		movq	[edi+40],mm2
		punpcklbw mm5,	mm7

		movq	mm0,	[esi+eax]
		punpckhbw mm3,	mm7

		movq	mm6,	[edx+32]
		psubsw	mm4,	mm5

		movq	mm2,	mm0
		psubsw	mm1,	mm3

		movq	mm3,	mm6
		punpcklbw mm0,	mm7

		movq	[edi+48],	mm4
		punpckhbw mm2,	mm7
		movq	[edi+56],mm1
		punpcklbw mm6,	mm7

		movq	mm4,	[esi+2*eax]
		punpckhbw mm3,	mm7

		add		esi,	ebx
		psubsw	mm0,	mm6

		movq	mm5,	[edx+40]
		psubsw	mm2,	mm3

		movq	mm1,	mm4
		movq	mm3,	mm5

		movq	[edi+64],	mm0
		punpcklbw mm4,	mm7
		movq	[edi+72],mm2
		punpckhbw mm1,	mm7

		movq	mm0,	[esi]
		punpcklbw mm5,	mm7
		movq	mm6,	[edx+48]
		punpckhbw mm3,	mm7

		movq	mm2,	mm0
		psubsw	mm4,	mm5

		punpcklbw mm0,	mm7
		psubsw	mm1,	mm3

		movq	mm3,	mm6
		punpckhbw mm2,	mm7

		movq	[edi+80],	mm4
		punpcklbw mm6,	mm7
		movq	[edi+88],mm1
		punpckhbw mm3,	mm7

		movq	mm4,	[esi+eax]
		psubsw	mm0,	mm6
		movq	mm5,	[edx+56]
		psubsw	mm2,	mm3

		movq	mm1,	mm4
		movq	mm3,	mm5

		movq	[edi+96],	mm0
		punpcklbw mm4,	mm7
		movq	[edi+104],mm2
		punpcklbw mm5,	mm7

		punpckhbw mm1,	mm7
		psubsw	mm4,	mm5
		punpckhbw mm3,	mm7
		psubsw	mm1,	mm3

		movq	[edi+112],	mm4
		movq	[edi+120],mm1

		emms
		ret
MMXPredBlock ENDP




COMMENT ^
	 void MMXPredAPBlock(
		short *Data,
		BYTE *Select,
		BYTE *Source,
		int pixel);
^

MMXPredAPBlock PROC NEAR C USES ESI EDI EAX EBX EDX,
            Data: PTR SWORD,Select:PTR BYTE,Source:PTR BYTE,
			pixel:DWORD

		mov		esi,	Select
		mov		edi,	Data
		mov		edx,	Source
		mov		eax,	pixel



		movq	mm0,	[esi]
		pxor	mm7,	mm7

		movq	mm1,	[edx]
		movq	mm2,	mm0

		movq	mm3,	mm1
		punpcklbw mm0,	mm7

		mov		ebx,	eax
		punpckhbw mm2,	mm7

		add		ebx,	eax
		punpcklbw mm1,	mm7

		add		ebx,	eax
		punpckhbw mm3,	mm7

		movq	mm4,	[esi+eax]
		psubsw	mm0,	mm1
		movq	mm5,	[edx+8]
		psubsw	mm2,	mm3

		movq	mm1,	mm4
		movq	mm3,	mm5

		movq	[edi],	mm0
		punpcklbw mm4,	mm7
		movq	[edi+8],mm2
		punpckhbw mm1,	mm7

		movq	mm0,	[esi+2*eax]
		punpcklbw mm5,	mm7

		add		esi,	ebx
		punpckhbw mm3,	mm7

		movq	mm6,	[edx+16]
		psubsw	mm4,	mm5

		movq	mm2,	mm0
		psubsw	mm1,	mm3

		movq	mm3,	mm6
		punpcklbw mm0,	mm7

		movq	[edi+32],	mm4
		punpckhbw mm2,	mm7
		movq	[edi+40],mm1
		punpcklbw mm6,	mm7

		movq	mm4,	[esi]
		punpckhbw mm3,	mm7

		movq	mm5,	[edx+24]
		psubsw	mm0,	mm6

		movq	mm1,	mm4
		psubsw	mm2,	mm3

		movq	mm3,	mm5
		punpcklbw mm4,	mm7

		movq	[edi+64],	mm0
		punpckhbw mm1,	mm7
		movq	[edi+72],mm2
		punpcklbw mm5,	mm7

		movq	mm0,	[esi+eax]
		punpckhbw mm3,	mm7

		movq	mm6,	[edx+32]
		psubsw	mm4,	mm5

		movq	mm2,	mm0
		psubsw	mm1,	mm3

		movq	mm3,	mm6
		punpcklbw mm0,	mm7

		movq	[edi+96],	mm4
		punpckhbw mm2,	mm7
		movq	[edi+104],mm1
		punpcklbw mm6,	mm7

		movq	mm4,	[esi+2*eax]
		punpckhbw mm3,	mm7

		add		esi,	ebx
		psubsw	mm0,	mm6

		movq	mm5,	[edx+40]
		psubsw	mm2,	mm3

		movq	mm1,	mm4
		movq	mm3,	mm5

		movq	[edi+128],	mm0
		punpcklbw mm4,	mm7
		movq	[edi+136],mm2
		punpckhbw mm1,	mm7

		movq	mm0,	[esi]
		punpcklbw mm5,	mm7
		movq	mm6,	[edx+48]
		punpckhbw mm3,	mm7

		movq	mm2,	mm0
		psubsw	mm4,	mm5

		punpcklbw mm0,	mm7
		psubsw	mm1,	mm3

		movq	mm3,	mm6
		punpckhbw mm2,	mm7

		movq	[edi+160],	mm4
		punpcklbw mm6,	mm7
		movq	[edi+168],mm1
		punpckhbw mm3,	mm7

		movq	mm4,	[esi+eax]
		psubsw	mm0,	mm6
		movq	mm5,	[edx+56]
		psubsw	mm2,	mm3

		movq	mm1,	mm4
		movq	mm3,	mm5

		movq	[edi+192],	mm0
		punpcklbw mm4,	mm7
		movq	[edi+200],mm2
		punpcklbw mm5,	mm7

		punpckhbw mm1,	mm7
		psubsw	mm4,	mm5
		punpckhbw mm3,	mm7
		psubsw	mm1,	mm3

		movq	[edi+224],	mm4
		movq	[edi+232],mm1

		emms
		ret
MMXPredAPBlock ENDP
		
END

⌨️ 快捷键说明

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