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