Imported Debian version 2.4.3~trusty1
[deb_ffmpeg.git] / ffmpeg / libavutil / x86 / cpuid.asm
CommitLineData
2ba45a60
DM
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