cbp_mmx.asm
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:4k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. ;/**************************************************************************
  2. ; *
  3. ; * XVID MPEG-4 VIDEO CODEC
  4. ; * mmx cbp calc
  5. ; *
  6. ; * This program is an implementation of a part of one or more MPEG-4
  7. ; * Video tools as specified in ISO/IEC 14496-2 standard.  Those intending
  8. ; * to use this software module in hardware or software products are
  9. ; * advised that its use may infringe existing patents or copyrights, and
  10. ; * any such use would be at such party's own risk.  The original
  11. ; * developer of this software module and his/her company, and subsequent
  12. ; * editors and their companies, will have no liability for use of this
  13. ; * software or modifications or derivatives thereof.
  14. ; *
  15. ; * This program is free software; you can redistribute it and/or modify
  16. ; * it under the terms of the GNU General Public License as published by
  17. ; * the Free Software Foundation; either version 2 of the License, or
  18. ; * (at your option) any later version.
  19. ; *
  20. ; * This program is distributed in the hope that it will be useful,
  21. ; * but WITHOUT ANY WARRANTY; without even the implied warranty of
  22. ; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23. ; * GNU General Public License for more details.
  24. ; *
  25. ; * You should have received a copy of the GNU General Public License
  26. ; * along with this program; if not, write to the Free Software
  27. ; * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  28. ; *
  29. ; *************************************************************************/
  30. ;/**************************************************************************
  31. ; *
  32. ; * History:
  33. ; *
  34. ; *     22.03.2002      0.01          ; Min Chen <chenm001@163.com>
  35. ; *                                   ; use 386 cpu's 'BTS' to replace 'cbp |= 1 << (edx-1)'
  36. ; * 24.11.2001 inital version; (c)2001 peter ross <pross@cs.rmit.edu.au>
  37. ; *
  38. ; *************************************************************************/
  39. bits 32
  40. section .data
  41. %macro cglobal 1
  42. %ifdef PREFIX
  43. global _%1
  44. %define %1 _%1
  45. %else
  46. global %1
  47. %endif
  48. %endmacro
  49. ignore_dc dw 0, -1, -1, -1
  50. section .text
  51. ;===========================================================================
  52. ;
  53. ; uint32_t calc_cbp_mmx(const int16_t coeff[6][64]);
  54. ;
  55. ;===========================================================================
  56. align 16
  57. cglobal calc_cbp_mmx
  58. calc_cbp_mmx
  59. push ebx
  60. push ecx
  61. push edx
  62. push esi
  63.                 mov     esi, [esp + 16 + 4]              ; coeff
  64. movq mm7, [ignore_dc]
  65. xor eax, eax ; cbp = 0
  66. mov edx, 6
  67. .loop
  68.                 movq mm0, [esi]
  69. pand mm0, mm7
  70.                 movq mm1, [esi+8]
  71.                 por     mm0, [esi+16]
  72.                 por     mm1, [esi+24]
  73.                 por     mm0, [esi+32]
  74.                 por     mm1, [esi+40]
  75.                 por     mm0, [esi+48]
  76.                 por     mm1, [esi+56]
  77.                 por     mm0, [esi+64]
  78.                 por     mm1, [esi+72]
  79.                 por     mm0, [esi+80]
  80.                 por     mm1, [esi+88]
  81.                 por     mm0, [esi+96]
  82.                 por     mm1, [esi+104]
  83.                 por     mm0, [esi+112]
  84.                 por     mm1, [esi+120]
  85.                 por     mm0, mm1
  86.                 movq    mm1, mm0
  87.                 psrlq   mm1, 32
  88.                 por     mm0, mm1
  89. movd    ebx, mm0
  90. add esi, 128
  91. or ebx, ebx
  92. jz .iterate
  93. ; cbp |= 1 << (edx-1)
  94.                                 ; Change by Chenm001 <chenm001@163.com>
  95.                                 ;mov             ecx, edx
  96.                                 ;dec             ecx
  97.                                 ;mov             ebx, 1
  98.                                 ;shl             ebx, cl
  99.                                 ;or              eax, ebx
  100.                                 lea             ebx,[edx-1]
  101.                                 bts             eax,ebx
  102. .iterate dec edx
  103. jnz .loop
  104. pop esi
  105. pop edx
  106. pop ecx
  107. pop ebx
  108. ret