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

Audio

开发平台:

Visual C++

  1. ;*****************************************************************************
  2. ;* cpu-32.asm: h264 encoder library
  3. ;*****************************************************************************
  4. ;* Copyright (C) 2003-2008 x264 project
  5. ;*
  6. ;* Authors: Laurent Aimar <fenrir@via.ecp.fr>
  7. ;*          Loren Merritt <lorenm@u.washington.edu>
  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., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
  22. ;*****************************************************************************
  23. %include "x86inc.asm"
  24. SECTION .text
  25. ;-----------------------------------------------------------------------------
  26. ; int x264_cpu_cpuid_test( void )
  27. ; return 0 if unsupported
  28. ;-----------------------------------------------------------------------------
  29. cglobal x264_cpu_cpuid_test
  30.     pushfd
  31.     push    ebx
  32.     push    ebp
  33.     push    esi
  34.     push    edi
  35.     pushfd
  36.     pop     eax
  37.     mov     ebx, eax
  38.     xor     eax, 0x200000
  39.     push    eax
  40.     popfd
  41.     pushfd
  42.     pop     eax
  43.     xor     eax, ebx
  44.     pop     edi
  45.     pop     esi
  46.     pop     ebp
  47.     pop     ebx
  48.     popfd
  49.     ret
  50. ;-----------------------------------------------------------------------------
  51. ; int x264_cpu_cpuid( int op, int *eax, int *ebx, int *ecx, int *edx )
  52. ;-----------------------------------------------------------------------------
  53. cglobal x264_cpu_cpuid, 0,6
  54.     mov     eax,    r0m
  55.     cpuid
  56.     mov     esi,    r1m
  57.     mov     [esi],  eax
  58.     mov     esi,    r2m
  59.     mov     [esi],  ebx
  60.     mov     esi,    r3m
  61.     mov     [esi],  ecx
  62.     mov     esi,    r4m
  63.     mov     [esi],  edx
  64.     RET
  65. ;-----------------------------------------------------------------------------
  66. ; void x264_emms( void )
  67. ;-----------------------------------------------------------------------------
  68. cglobal x264_emms
  69.     emms
  70.     ret
  71. ;-----------------------------------------------------------------------------
  72. ; void x264_stack_align( void (*func)(void*), void *arg );
  73. ;-----------------------------------------------------------------------------
  74. cglobal x264_stack_align
  75.     push ebp
  76.     mov  ebp, esp
  77.     sub  esp, 4
  78.     and  esp, ~15
  79.     mov  ecx, [ebp+8]
  80.     mov  edx, [ebp+12]
  81.     mov  [esp], edx
  82.     call ecx
  83.     leave
  84.     ret