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

📄 reconmmx.s

📁 ac3的解码程序
💻 S
📖 第 1 页 / 共 2 页
字号:
;-------------------------------------------------------------------------


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 + -