1;***************************************************************************** 2;* Copyright (C) 2005-2010 x264 project 3;* 4;* Authors: Loren Merritt <lorenm@u.washington.edu> 5;* Fiona Glaser <fiona@x264.com> 6;* 7;* This file is part of FFmpeg. 8;* 9;* FFmpeg is free software; you can redistribute it and/or 10;* modify it under the terms of the GNU Lesser General Public 11;* License as published by the Free Software Foundation; either 12;* version 2.1 of the License, or (at your option) any later version. 13;* 14;* FFmpeg 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 GNU 17;* Lesser General Public License for more details. 18;* 19;* You should have received a copy of the GNU Lesser General Public 20;* License along with FFmpeg; if not, write to the Free Software 21;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22;****************************************************************************** 23 24%include "x86util.asm" 25 26SECTION .text 27 28;----------------------------------------------------------------------------- 29; void ff_cpu_cpuid(int index, int *eax, int *ebx, int *ecx, int *edx) 30;----------------------------------------------------------------------------- 31cglobal cpu_cpuid, 5,7 32 push rbx 33 push r4 34 push r3 35 push r2 36 push r1 37 mov eax, r0d 38 xor ecx, ecx 39 cpuid 40 pop r4 41 mov [r4], eax 42 pop r4 43 mov [r4], ebx 44 pop r4 45 mov [r4], ecx 46 pop r4 47 mov [r4], edx 48 pop rbx 49 RET 50 51;----------------------------------------------------------------------------- 52; void ff_cpu_xgetbv(int op, int *eax, int *edx) 53;----------------------------------------------------------------------------- 54cglobal cpu_xgetbv, 3,7 55 push r2 56 push r1 57 mov ecx, r0d 58 xgetbv 59 pop r4 60 mov [r4], eax 61 pop r4 62 mov [r4], edx 63 RET 64 65%if ARCH_X86_64 == 0 66;----------------------------------------------------------------------------- 67; int ff_cpu_cpuid_test(void) 68; return 0 if unsupported 69;----------------------------------------------------------------------------- 70cglobal cpu_cpuid_test 71 pushfd 72 push ebx 73 push ebp 74 push esi 75 push edi 76 pushfd 77 pop eax 78 mov ebx, eax 79 xor eax, 0x200000 80 push eax 81 popfd 82 pushfd 83 pop eax 84 xor eax, ebx 85 pop edi 86 pop esi 87 pop ebp 88 pop ebx 89 popfd 90 ret 91%endif 92