| ;***************************************************************************** | |
| ;* Copyright (C) 2005-2010 x264 project | |
| ;* | |
| ;* Authors: Loren Merritt <lorenm@u.washington.edu> | |
| ;* Fiona Glaser <fiona@x264.com> | |
| ;* | |
| ;* This file is part of FFmpeg. | |
| ;* | |
| ;* FFmpeg is free software; you can redistribute it and/or | |
| ;* modify it under the terms of the GNU Lesser General Public | |
| ;* License as published by the Free Software Foundation; either | |
| ;* version 2.1 of the License, or (at your option) any later version. | |
| ;* | |
| ;* FFmpeg is distributed in the hope that it will be useful, | |
| ;* but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| ;* Lesser General Public License for more details. | |
| ;* | |
| ;* You should have received a copy of the GNU Lesser General Public | |
| ;* License along with FFmpeg; if not, write to the Free Software | |
| ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
| ;****************************************************************************** | |
| "libavutil/x86/x86util.asm" | |
| .text | |
| ;----------------------------------------------------------------------------- | |
| ; void ff_cpu_cpuid(int index, int *eax, int *ebx, int *ecx, int *edx) | |
| ;----------------------------------------------------------------------------- | |
| cglobal cpu_cpuid, 5,7 | |
| push rbx | |
| push r4 | |
| push r3 | |
| push r2 | |
| push r1 | |
| mov eax, r0d | |
| xor ecx, ecx | |
| cpuid | |
| pop r4 | |
| mov [r4], eax | |
| pop r4 | |
| mov [r4], ebx | |
| pop r4 | |
| mov [r4], ecx | |
| pop r4 | |
| mov [r4], edx | |
| pop rbx | |
| RET | |
| ;----------------------------------------------------------------------------- | |
| ; void ff_cpu_xgetbv(int op, int *eax, int *edx) | |
| ;----------------------------------------------------------------------------- | |
| cglobal cpu_xgetbv, 3,7 | |
| push r2 | |
| push r1 | |
| mov ecx, r0d | |
| xgetbv | |
| pop r4 | |
| mov [r4], eax | |
| pop r4 | |
| mov [r4], edx | |
| RET | |
| ARCH_X86_64 == 0 | |
| ;----------------------------------------------------------------------------- | |
| ; int ff_cpu_cpuid_test(void) | |
| ; return 0 if unsupported | |
| ;----------------------------------------------------------------------------- | |
| cglobal cpu_cpuid_test | |
| pushfd | |
| push ebx | |
| push ebp | |
| push esi | |
| push edi | |
| pushfd | |
| pop eax | |
| mov ebx, eax | |
| xor eax, 0x200000 | |
| push eax | |
| popfd | |
| pushfd | |
| pop eax | |
| xor eax, ebx | |
| pop edi | |
| pop esi | |
| pop ebp | |
| pop ebx | |
| popfd | |
| ret | |