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

📄 cbp_mmx.asm

📁 这是一个压缩解压包,用C语言进行编程的,里面有详细的源代码.
💻 ASM
字号:
;/****************************************************************************; *; *  XVID MPEG-4 VIDEO CODEC; *  - MMX CBP computation -; *; *  Copyright (C) 2005      Carlo Bramini <carlo.bramix@libero.it>; *                2001-2003 Peter Ross <pross@xvid.org>; *                2002-2003 Pascal Massimino <skal@planet-d.net>; *; *  This program is free software ; you can redistribute it and/or modify; *  it under the terms of the GNU General Public License as published by; *  the Free Software Foundation ; either version 2 of the License, or; *  (at your option) any later version.; *; *  This program is distributed in the hope that it will be useful,; *  but WITHOUT ANY WARRANTY ; without even the implied warranty of; *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the; *  GNU General Public License for more details.; *; *  You should have received a copy of the GNU General Public License; *  along with this program ; if not, write to the Free Software; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA; *; * $Id: cbp_mmx.asm,v 1.14 2005/09/24 03:10:37 suxen_drol Exp $; *; ***************************************************************************/BITS 32;=============================================================================; Macros;=============================================================================%macro cglobal 1	%ifdef PREFIX		%ifdef MARK_FUNCS			global _%1:function %1.endfunc-%1			%define %1 _%1:function %1.endfunc-%1		%else			global _%1			%define %1 _%1		%endif	%else		%ifdef MARK_FUNCS			global %1:function %1.endfunc-%1		%else			global %1		%endif	%endif%endmacro;=============================================================================; Local data;=============================================================================%ifdef FORMAT_COFFSECTION .rodata%elseSECTION .rodata align=16%endifALIGN 16mult_mask:  db 0x10,0x20,0x04,0x08,0x01,0x02,0x00,0x00ignore_dc:  dw 0, -1, -1, -1;=============================================================================; Code;=============================================================================SECTION .textcglobal calc_cbp_mmx;-----------------------------------------------------------------------------; uint32_t calc_cbp_mmx(const int16_t coeff[6][64]);;-----------------------------------------------------------------------------%macro      MAKE_LOAD         1  por mm0, [eax-128*1+%1*8]  por mm1, [eax+128*0+%1*8]  por mm2, [eax+128*1+%1*8]  por mm3, [eax+128*2+%1*8]  por mm4, [eax+128*3+%1*8]  por mm5, [eax+128*4+%1*8]%endmacroALIGN 16calc_cbp_mmx:  mov eax, [esp + 4]            ; coeff  movq mm7, [ignore_dc]  pxor mm6, mm6                ; used only for comparing  movq mm0, [eax+128*0]  movq mm1, [eax+128*1]  movq mm2, [eax+128*2]  movq mm3, [eax+128*3]  movq mm4, [eax+128*4]  movq mm5, [eax+128*5]  add eax, 8+128  pand mm0, mm7  pand mm1, mm7  pand mm2, mm7  pand mm3, mm7  pand mm4, mm7  pand mm5, mm7  MAKE_LOAD 0  MAKE_LOAD 1  MAKE_LOAD 2  MAKE_LOAD 3  MAKE_LOAD 4  MAKE_LOAD 5  MAKE_LOAD 6  MAKE_LOAD 7  MAKE_LOAD 8  MAKE_LOAD 9  MAKE_LOAD 10  MAKE_LOAD 11  MAKE_LOAD 12  MAKE_LOAD 13  MAKE_LOAD 14  movq mm7, [mult_mask]  packssdw mm0, mm1  packssdw mm2, mm3  packssdw mm4, mm5  packssdw mm0, mm2  packssdw mm4, mm6  pcmpeqw mm0, mm6  pcmpeqw mm4, mm6  pcmpeqw mm0, mm6  pcmpeqw mm4, mm6  psrlw mm0, 15  psrlw mm4, 15  packuswb mm0, mm4  pmaddwd mm0, mm7  movq mm1, mm0  psrlq mm1, 32  paddusb mm0, mm1  movd eax, mm0  shr eax, 8  and eax, 0x3F  ret.endfunc

⌨️ 快捷键说明

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