?? reconmmx.s
字號:
;-------------------------------------------------------------------------
ADD_1: dd 01010101h, 01010101h
MASK_AND: dd 7f7f7f7fh, 7f7f7f7fh
PLUS_384: dd 01800180h, 01800180h
PLUS_128: dd 00800080h, 00800080h
%assign LocalFrameSize 0
%assign RegisterStorageSize 16
; Arguments:
%assign source LocalFrameSize + RegisterStorageSize + 4
%assign dest LocalFrameSize + RegisterStorageSize + 8
%assign lx2 LocalFrameSize + RegisterStorageSize + 12
%assign h LocalFrameSize + RegisterStorageSize + 16
; Locals (on local stack frame)
; extern void C rec_mmx (
; unsigned char *source,
; unsigned char *dest,
; int lx2,
; int h
;
; The local variables are on the stack,
;
global rec
global recc
global reca
global recac
global recv
global recvc
global recva
global recvac
global rech
global rechc
global add_block_mmx
global set_block_mmx
align 16
rec:
push esi
push edi
push ecx
push ebx
; sub esp, LocalFrameSize
mov esi, [esp+source]
mov edi, [esp+dest]
mov ecx, [esp+h]
mov ebx, [esp+lx2]
.rec1:
movq mm0,[esi]
movq mm1,[esi+8]
movq [edi],mm0
add esi,ebx
movq [edi+8],mm1
add edi,ebx
dec ecx
jnz .rec1
emms
; add esp, LocalFrameSize
pop ebx
pop ecx
pop edi
pop esi
ret
align 16
recc:
push esi
push edi
push ecx
push ebx
; sub esp, LocalFrameSize
mov esi, [esp+source]
mov edi, [esp+dest]
mov ecx, [esp+h]
mov ebx, [esp+lx2]
.recc1:
movq mm0,[esi]
movq [edi],mm0
add edi,ebx
add esi,ebx
dec ecx
jnz .recc1
emms
; add esp, LocalFrameSize
pop ebx
pop ecx
pop edi
pop esi
ret
align 16
reca:
push esi
push edi
push ecx
push ebx
; sub esp, LocalFrameSize
mov esi, [esp+source]
mov edi, [esp+dest]
mov ecx, [esp+h]
mov ebx, [esp+lx2]
movq mm5, [MASK_AND]
movq mm6, [ADD_1]
.reca1:
movq mm0,[esi]
movq mm1,[edi]
movq mm2,[esi+8]
movq mm3,[edi+8]
psrlw mm0,1
psrlw mm1,1
psrlw mm2,1
psrlw mm3,1
pand mm0,mm5
pand mm1,mm5
pand mm2,mm5
pand mm3,mm5
paddusb mm0,mm1
paddusb mm2,mm3
paddusb mm0,mm6
paddusb mm2,mm6
movq [edi],mm0
add esi,ebx
movq [edi+8],mm2
add edi,ebx
dec ecx
jnz .reca1
emms
; add esp, LocalFrameSize
pop ebx
pop ecx
pop edi
pop esi
ret
align 16
recac:
push esi
push edi
push ecx
push ebx
; sub esp, LocalFrameSize
mov esi, [esp+source]
mov edi, [esp+dest]
mov ecx, [esp+h]
mov ebx, [esp+lx2]
movq mm5, [MASK_AND]
movq mm6, [ADD_1]
.recac1:
movq mm0,[esi]
movq mm1,[edi]
psrlw mm0,1
psrlw mm1,1
pand mm0,mm5
pand mm1,mm5
paddusb mm0,mm1
paddusb mm0,mm6
movq [edi],mm0
add edi,ebx
add esi,ebx
dec ecx
jnz .recac1
emms
; add esp, LocalFrameSize
pop ebx
pop ecx
pop edi
pop esi
ret
align 16
rech:
push esi
push edi
push ecx
push ebx
mov esi, [esp+source]
mov edi, [esp+dest]
mov ecx, [esp+h]
mov ebx, [esp+lx2]
movq mm5, [MASK_AND]
movq mm6, [ADD_1]
.rech1:
movq mm0,[esi]
movq mm1,[esi+1]
movq mm2,[esi+8]
movq mm3,[esi+9]
psrlw mm0,1
psrlw mm1,1
psrlw mm2,1
psrlw mm3,1
pand mm0,mm5
pand mm1,mm5
pand mm2,mm5
pand mm3,mm5
paddusb mm0,mm1
paddusb mm2,mm3
paddusb mm0,mm6
paddusb mm2,mm6
movq [edi],mm0
add esi,ebx
movq [edi+8],mm2
add edi,ebx
dec ecx
jnz .rech1
emms
pop ebx
pop ecx
pop edi
pop esi
ret
align 16
rechc:
push esi
push edi
push ecx
push ebx
; sub esp, LocalFrameSize
mov esi, [esp+source]
mov edi, [esp+dest]
mov ecx, [esp+h]
mov ebx, [esp+lx2]
movq mm5, [MASK_AND]
movq mm6, [ADD_1]
.rechc1:
movq mm0,[esi]
movq mm1,[esi+1]
psrlw mm0,1
psrlw mm1,1
pand mm0,mm5
pand mm1,mm5
paddusb mm0,mm1
paddusb mm0,mm6
movq [edi],mm0
add edi,ebx
add esi,ebx
dec ecx
jnz .rechc1
emms
; add esp, LocalFrameSize
pop ebx
pop ecx
pop edi
pop esi
ret
%assign RegisterStorageSize 20
%assign source LocalFrameSize + RegisterStorageSize + 4
%assign dest LocalFrameSize + RegisterStorageSize + 8
%assign lx LocalFrameSize + RegisterStorageSize + 12
%assign lx2 LocalFrameSize + RegisterStorageSize + 16
%assign h LocalFrameSize + RegisterStorageSize + 20
align 16
recv:
push esi
push edi
push ecx
push ebx
push edx
mov esi, [esp+source]
mov edi, [esp+dest]
mov ecx, [esp+h]
mov ebx, [esp+lx2]
mov edx, [esp+lx]
movq mm5, [MASK_AND]
movq mm6, [ADD_1]
.recv1:
movq mm0,[esi]
movq mm1,[esi+edx]
movq mm2,[esi+8]
movq mm3,[esi+edx+8]
psrlw mm0,1
psrlw mm1,1
psrlw mm2,1
psrlw mm3,1
pand mm0,mm5
pand mm1,mm5
pand mm2,mm5
pand mm3,mm5
paddusb mm0,mm1
paddusb mm2,mm3
paddusb mm0,mm6
paddusb mm2,mm6
movq [edi],mm0
add esi,ebx
movq [edi+8],mm2
add edi,ebx
dec ecx
jnz .recv1
emms
pop edx
pop ebx
pop ecx
pop edi
pop esi
ret
align 16
recvc:
push esi
push edi
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -