cpu.asm
上传用户:sunbaby
上传日期:2013-05-31
资源大小:242k
文件大小:3k
源码类别:

mpeg/mp3

开发平台:

Visual C++

  1. ;/*****************************************************************************
  2. ; *
  3. ; *  T264 AVC CODEC
  4. ; *
  5. ; *  Copyright(C) 2004-2005 llcc <lcgate1@yahoo.com.cn>
  6. ; *               2004-2005 visionany <visionany@yahoo.com.cn>
  7. ; *
  8. ; *  This program is free software ; you can redistribute it and/or modify
  9. ; *  it under the terms of the GNU General Public License as published by
  10. ; *  the Free Software Foundation ; either version 2 of the License, or
  11. ; *  (at your option) any later version.
  12. ; *
  13. ; *  This program is distributed in the hope that it will be useful,
  14. ; *  but WITHOUT ANY WARRANTY ; without even the implied warranty of
  15. ; *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. ; *  GNU General Public License for more details.
  17. ; *
  18. ; *  You should have received a copy of the GNU General Public License
  19. ; *  along with this program ; if not, write to the Free Software
  20. ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  21. ; *
  22. ; ****************************************************************************/
  23. bits 32
  24. ; ideal from xvid
  25. ; modify by Thomascatlee@163.com
  26. ; for GCC
  27. %macro cglobal 1
  28. %ifdef NOPREFIX
  29. global %1
  30. %else
  31. global _%1
  32. %define %1 _%1
  33. %endif
  34. %endmacro
  35. ; from xvid
  36. %macro  CHECK_FEATURE         3
  37.   mov ecx, %1
  38.   and ecx, edx
  39.   neg ecx
  40.   sbb ecx, ecx
  41.   and ecx, %2
  42.   or %3, ecx
  43. %endmacro
  44. %define T264_CPU_MMX     0x10
  45. %define T264_CPU_SSE     0x1000
  46. %define T264_CPU_SSE2    0x10000
  47. %define CPUID_MMX               0x00800000
  48. %define CPUID_SSE               0x02000000
  49. %define CPUID_SSE2              0x04000000
  50. section .data
  51. align 16
  52. section .text
  53. ;======================================================
  54. ;
  55. ; int32_t
  56. ; T264_detect_cpu();
  57. ;
  58. ;======================================================
  59. align 16
  60. cglobal T264_detect_cpu
  61. T264_detect_cpu
  62.     
  63.     push ebx
  64.     push ebp
  65.     pushfd
  66.     xor ebp, ebp
  67.     ; cpuid support ?    
  68.     pushfd
  69.     pop eax
  70.     xor eax, 0x200000
  71.     mov ecx, eax
  72.     push eax
  73.     popfd
  74.     pushfd
  75.     pop eax
  76.     popfd
  77.     cmp eax, ecx
  78.     jnz .quit
  79.     
  80.     ; cpuid
  81.     mov eax ,1
  82.     cpuid
  83.     
  84.     ; MMX support ?
  85.     CHECK_FEATURE CPUID_MMX, T264_CPU_MMX, ebp
  86.     ; SSE support ?
  87.     CHECK_FEATURE CPUID_SSE, T264_CPU_SSE, ebp
  88.     ; SSE2 support?
  89.     CHECK_FEATURE CPUID_SSE2, T264_CPU_SSE2, ebp
  90.     
  91. .quit
  92.     mov eax, ebp
  93.     pop ebp
  94.     pop ebx
  95.     ret
  96. ;======================================================
  97. ;
  98. ; void
  99. ; T264_emms_mmx();
  100. ;
  101. ;======================================================
  102. cglobal T264_emms_mmx
  103. T264_emms_mmx
  104.     
  105.     emms
  106.     ret