cpu-a.asm
上传用户:lctgjx
上传日期:2022-06-04
资源大小:8887k
文件大小:4k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. ;*****************************************************************************
  2. ;* cpu-a.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. ;*          Jason Garrett-Glaser <darkshikari@gmail.com>
  9. ;*
  10. ;* This program is free software; you can redistribute it and/or modify
  11. ;* it under the terms of the GNU General Public License as published by
  12. ;* the Free Software Foundation; either version 2 of the License, or
  13. ;* (at your option) any later version.
  14. ;*
  15. ;* This program is distributed in the hope that it will be useful,
  16. ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18. ;* GNU General Public License for more details.
  19. ;*
  20. ;* You should have received a copy of the GNU General Public License
  21. ;* along with this program; if not, write to the Free Software
  22. ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
  23. ;*****************************************************************************
  24. %include "x86inc.asm"
  25. SECTION .text
  26. %ifdef ARCH_X86_64
  27. ;-----------------------------------------------------------------------------
  28. ; int x264_cpu_cpuid( int op, int *eax, int *ebx, int *ecx, int *edx )
  29. ;-----------------------------------------------------------------------------
  30. cglobal x264_cpu_cpuid, 5,7
  31.     push    rbx
  32.     mov     r11,   r1
  33.     mov     r10,   r2
  34.     movifnidn r9,  r3
  35.     movifnidn r8,  r4
  36.     mov     eax,   r0d
  37.     cpuid
  38.     mov     [r11], eax
  39.     mov     [r10], ebx
  40.     mov     [r9],  ecx
  41.     mov     [r8],  edx
  42.     pop     rbx
  43.     RET
  44. %else
  45. ;-----------------------------------------------------------------------------
  46. ; int x264_cpu_cpuid_test( void )
  47. ; return 0 if unsupported
  48. ;-----------------------------------------------------------------------------
  49. cglobal x264_cpu_cpuid_test
  50.     pushfd
  51.     push    ebx
  52.     push    ebp
  53.     push    esi
  54.     push    edi
  55.     pushfd
  56.     pop     eax
  57.     mov     ebx, eax
  58.     xor     eax, 0x200000
  59.     push    eax
  60.     popfd
  61.     pushfd
  62.     pop     eax
  63.     xor     eax, ebx
  64.     pop     edi
  65.     pop     esi
  66.     pop     ebp
  67.     pop     ebx
  68.     popfd
  69.     ret
  70. ;-----------------------------------------------------------------------------
  71. ; int x264_cpu_cpuid( int op, int *eax, int *ebx, int *ecx, int *edx )
  72. ;-----------------------------------------------------------------------------
  73. cglobal x264_cpu_cpuid, 0,6
  74.     mov     eax,    r0m
  75.     cpuid
  76.     mov     esi,    r1m
  77.     mov     [esi],  eax
  78.     mov     esi,    r2m
  79.     mov     [esi],  ebx
  80.     mov     esi,    r3m
  81.     mov     [esi],  ecx
  82.     mov     esi,    r4m
  83.     mov     [esi],  edx
  84.     RET
  85. ;-----------------------------------------------------------------------------
  86. ; void x264_stack_align( void (*func)(void*), void *arg );
  87. ;-----------------------------------------------------------------------------
  88. cglobal x264_stack_align
  89.     push ebp
  90.     mov  ebp, esp
  91.     sub  esp, 8
  92.     and  esp, ~15
  93.     mov  ecx, [ebp+8]
  94.     mov  edx, [ebp+12]
  95.     mov  [esp], edx
  96.     mov  edx, [ebp+16]
  97.     mov  [esp+4], edx
  98.     call ecx
  99.     leave
  100.     ret
  101. %endif
  102. ;-----------------------------------------------------------------------------
  103. ; void x264_emms( void )
  104. ;-----------------------------------------------------------------------------
  105. cglobal x264_emms
  106.     emms
  107.     ret
  108. ;-----------------------------------------------------------------------------
  109. ; void x264_cpu_mask_misalign_sse(void)
  110. ;-----------------------------------------------------------------------------
  111. cglobal x264_cpu_mask_misalign_sse
  112.     sub   rsp, 4
  113.     stmxcsr [rsp]
  114.     or dword [rsp], 1<<17
  115.     ldmxcsr [rsp]
  116.     add   rsp, 4
  117.     ret