cpu-a.asm
上传用户:hjq518
上传日期:2021-12-09
资源大小:5084k
文件大小:3k
源码类别:

Audio

开发平台:

Visual C++

  1. ;*****************************************************************************
  2. ;* cpu.asm: h264 encoder library
  3. ;*****************************************************************************
  4. ;* Copyright (C) 2003 x264 project
  5. ;* $Id: cpu.asm,v 1.1 2004/06/03 19:27:07 fenrir Exp $
  6. ;*
  7. ;* Authors: Laurent Aimar <fenrir@via.ecp.fr>
  8. ;*
  9. ;* This program is free software; you can redistribute it and/or modify
  10. ;* it under the terms of the GNU General Public License as published by
  11. ;* the Free Software Foundation; either version 2 of the License, or
  12. ;* (at your option) any later version.
  13. ;*
  14. ;* This program is distributed in the hope that it will be useful,
  15. ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. ;* GNU General Public License for more details.
  18. ;*
  19. ;* You should have received a copy of the GNU General Public License
  20. ;* along with this program; if not, write to the Free Software
  21. ;* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  22. ;*****************************************************************************
  23. BITS 64
  24. ;=============================================================================
  25. ; Macros and other preprocessor constants
  26. ;=============================================================================
  27. %include "amd64inc.asm"
  28. ;=============================================================================
  29. ; Code
  30. ;=============================================================================
  31. SECTION .text
  32. cglobal x264_cpu_cpuid_test
  33. cglobal x264_cpu_cpuid
  34. cglobal x264_emms
  35. ALIGN 16
  36. ;-----------------------------------------------------------------------------
  37. ;   int x264_cpu_cpuid_test( void ) return 0 if unsupported
  38. ;-----------------------------------------------------------------------------
  39. x264_cpu_cpuid_test:
  40.     firstpush rbx
  41.     pushreg  rbx
  42.     push     rbp
  43.     pushreg  rbp
  44.     mov      rbp, rsp
  45.     setframe rbp, 0
  46.     endprolog
  47.     pushfq
  48.     pop     rax
  49.     mov     ebx, eax
  50.     xor     eax, 0x200000
  51.     push    rax
  52.     
  53.     popfq
  54.     pushfq
  55.     pop     rax
  56.     xor     eax, ebx
  57.     
  58.     lea     rsp, [rbp]
  59.     pop     rbp
  60.     pop     rbx
  61.     ret
  62.     endfunc
  63. ALIGN 16
  64. ;-----------------------------------------------------------------------------
  65. ;   int x264_cpu_cpuid( int op, int *eax, int *ebx, int *ecx, int *edx )
  66. ;-----------------------------------------------------------------------------
  67. x264_cpu_cpuid:
  68.     firstpush rbx
  69.     pushreg   rbx
  70.     endprolog
  71.     
  72.     mov     r10,   parm4q
  73.     mov     r11,   parm3q
  74.     mov     r9,    parm2q
  75. %ifdef WIN64
  76.     mov     r8,    [rsp+40+8]
  77. %endif    
  78.     
  79.     mov     eax,   parm1d
  80.     cpuid
  81.     mov     [r9],  eax
  82.     mov     [r11], ebx
  83.     mov     [r10], ecx
  84.     mov     [r8],  edx
  85.     pop     rbx
  86.     ret
  87.     endfunc
  88. ALIGN 16
  89. ;-----------------------------------------------------------------------------
  90. ;   void x264_emms( void )
  91. ;-----------------------------------------------------------------------------
  92. x264_emms:
  93.     emms
  94.     ret