📄 mmxpred.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 + -