[svn] / trunk / xvidcore / src / utils / x86_asm / cpuid.asm Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/utils/x86_asm/cpuid.asm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3, Fri Mar 8 02:46:11 2002 UTC revision 1382, Mon Mar 22 22:36:25 2004 UTC
# Line 1  Line 1 
1  ;/******************************************************************************  ;/****************************************************************************
2  ; *                                                                            *  ; *
3  ; *  This file is part of XviD, a free MPEG-4 video encoder/decoder            *  ; *  XVID MPEG-4 VIDEO CODEC
4  ; *                                                                            *  ; *  - CPUID check processors capabilities -
5  ; *  XviD is an implementation of a part of one or more MPEG-4 Video tools     *  ; *
6  ; *  as specified in ISO/IEC 14496-2 standard.  Those intending to use this    *  ; *  Copyright (C) 2001 Michael Militzer <isibaar@xvid.org>
7  ; *  software module in hardware or software products are advised that its     *  ; *
8  ; *  use may infringe existing patents or copyrights, and any such use         *  ; *  This program is free software ; you can redistribute it and/or modify
9  ; *  would be at such party's own risk.  The original developer of this        *  ; *  it under the terms of the GNU General Public License as published by
10  ; *  software module and his/her company, and subsequent editors and their     *  ; *  the Free Software Foundation ; either version 2 of the License, or
11  ; *  companies, will have no liability for use of this software or             *  ; *  (at your option) any later version.
12  ; *  modifications or derivatives thereof.                                     *  ; *
13  ; *                                                                            *  ; *  This program is distributed in the hope that it will be useful,
14  ; *  XviD is free software; you can redistribute it and/or modify it           *  ; *  but WITHOUT ANY WARRANTY ; without even the implied warranty of
15  ; *  under the terms of the GNU General Public License as published by         *  ; *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  ; *  the Free Software Foundation; either version 2 of the License, or         *  ; *  GNU General Public License for more details.
17  ; *  (at your option) any later version.                                       *  ; *
18  ; *                                                                            *  ; *  You should have received a copy of the GNU General Public License
19  ; *  XviD is distributed in the hope that it will be useful, but               *  ; *  along with this program ; if not, write to the Free Software
20  ; *  WITHOUT ANY WARRANTY; without even the implied warranty of                *  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21  ; *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *  ; *
22  ; *  GNU General Public License for more details.                              *  ; * $Id: cpuid.asm,v 1.5 2004-03-22 22:36:24 edgomez Exp $
23  ; *                                                                            *  ; *
24  ; *  You should have received a copy of the GNU General Public License         *  ; ***************************************************************************/
 ; *  along with this program; if not, write to the Free Software               *  
 ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  *  
 ; *                                                                            *  
 ; ******************************************************************************/  
 ;  
 ;/******************************************************************************  
 ; *                                                                            *  
 ; *  cpuid.asm, check cpu features                                             *  
 ; *                                                                            *  
 ; *  Copyright (C) 2001 - Michael Militzer <isibaar@xvid.org>,                 *  
 ; *                                                                            *  
 ; *  For more information visit the XviD homepage: http://www.xvid.org         *  
 ; *                                                                            *  
 ; ******************************************************************************/  
 ;  
 ;/******************************************************************************  
 ; *                                                                            *  
 ; *  Revision history:                                                         *  
 ; *                                                                            *  
 ; *  17.12.2001 initial version  (Isibaar)                                     *  
 ; *                                                                            *  
 ; ******************************************************************************/  
25    
26  bits 32  BITS 32
27    
28    %macro cglobal 1
29            %ifdef PREFIX
30                    global _%1
31                    %define %1 _%1
32            %else
33                    global %1
34            %endif
35    %endmacro
36    
37    ;=============================================================================
38    ; Constants
39    ;=============================================================================
40    
41  %define CPUID_TSC                               0x00000010  %define CPUID_TSC                               0x00000010
42  %define CPUID_MMX                               0x00800000  %define CPUID_MMX                               0x00800000
# Line 56  Line 47 
47  %define EXT_CPUID_AMD_3DNOWEXT  0x40000000  %define EXT_CPUID_AMD_3DNOWEXT  0x40000000
48  %define EXT_CPUID_AMD_MMXEXT    0x00400000  %define EXT_CPUID_AMD_MMXEXT    0x00400000
49    
50  %define XVID_CPU_MMX                    0x00000001  ;;; NB: Make sure these defines match the ones defined in xvid.h
51  %define XVID_CPU_MMXEXT                 0x00000002  %define XVID_CPU_MMX      (1<< 0)
52  %define XVID_CPU_SSE            0x00000004  %define XVID_CPU_MMXEXT   (1<< 1)
53  %define XVID_CPU_SSE2                   0x00000008  %define XVID_CPU_SSE      (1<< 2)
54  %define XVID_CPU_3DNOW          0x00000010  %define XVID_CPU_SSE2     (1<< 3)
55  %define XVID_CPU_3DNOWEXT               0x00000020  %define XVID_CPU_3DNOW    (1<< 4)
56  %define XVID_CPU_TSC            0x00000040  %define XVID_CPU_3DNOWEXT (1<< 5)
57    %define XVID_CPU_TSC      (1<< 6)
58    
59    ;=============================================================================
60    ; Read only data
61    ;=============================================================================
62    
63  %macro cglobal 1  ALIGN 32
64          %ifdef PREFIX  %ifdef FORMAT_COFF
65                  global _%1  SECTION .rodata data
                 %define %1 _%1  
66          %else          %else
67                  global %1  SECTION .rodata data align=16
68          %endif          %endif
 %endmacro  
   
 ALIGN 32  
69    
70  section .data  vendorAMD:
71                    db "AuthenticAMD"
72    
73  features        dd 0  ;=============================================================================
74    ; Macros
75  vendor          dd 0,0,0  ;=============================================================================
 vendorAMD       db "AuthenticAMD"  
76    
77  %macro  CHECK_FEATURE         3  %macro  CHECK_FEATURE         3
   
78      mov     ecx, %1      mov     ecx, %1
79      and     ecx, edx      and     ecx, edx
80      neg     ecx      neg     ecx
81      sbb     ecx, ecx      sbb     ecx, ecx
82      and     ecx, %2      and     ecx, %2
83      or      [%3], ecx    or %3, ecx
   
84  %endmacro  %endmacro
85    
86  section .text  ;=============================================================================
87    ; Code
88    ;=============================================================================
89    
90    SECTION .text
91    
92  ; int check_cpu_feature(void)  ; int check_cpu_feature(void)
93    
94  cglobal check_cpu_features  cglobal check_cpu_features
95  check_cpu_features:  check_cpu_features:
96    
97          pushad    push ebx
98          pushfd    push esi
99      push edi
100      push ebp
101    
102      xor ebp, ebp
103    
104          ; CPUID command ?          ; CPUID command ?
105      pushfd
106          pop             eax          pop             eax
107          mov             ecx, eax          mov             ecx, eax
108          xor             eax, 0x200000          xor             eax, 0x200000
# Line 120  Line 118 
118          ; get vendor string, used later          ; get vendor string, used later
119      xor     eax, eax      xor     eax, eax
120      cpuid      cpuid
121      mov     [vendor], ebx       ; vendor string    mov [esp-12], ebx       ; vendor string
122      mov     [vendor+4], edx    mov [esp-12+4], edx
123      mov     [vendor+8], ecx    mov [esp-12+8], ecx
124      test    eax, eax      test    eax, eax
125    
126      jz      near .cpu_quit      jz      near .cpu_quit
# Line 130  Line 128 
128      mov     eax, 1      mov     eax, 1
129      cpuid      cpuid
130    
   
131      ; RDTSC command ?      ; RDTSC command ?
132          CHECK_FEATURE CPUID_TSC, XVID_CPU_TSC, features    CHECK_FEATURE CPUID_TSC, XVID_CPU_TSC, ebp
133    
134      ; MMX support ?      ; MMX support ?
135          CHECK_FEATURE CPUID_MMX, XVID_CPU_MMX, features    CHECK_FEATURE CPUID_MMX, XVID_CPU_MMX, ebp
136    
137      ; SSE support ?      ; SSE support ?
138          CHECK_FEATURE CPUID_SSE, (XVID_CPU_MMXEXT+XVID_CPU_SSE), features    CHECK_FEATURE CPUID_SSE, (XVID_CPU_MMXEXT|XVID_CPU_SSE), ebp
139    
140          ; SSE2 support?          ; SSE2 support?
141          CHECK_FEATURE CPUID_SSE2, XVID_CPU_SSE2, features    CHECK_FEATURE CPUID_SSE2, XVID_CPU_SSE2, ebp
   
142    
143          ; extended functions?          ; extended functions?
144      mov     eax, 0x80000000      mov     eax, 0x80000000
# Line 153  Line 149 
149      mov     eax, 0x80000001      mov     eax, 0x80000001
150      cpuid      cpuid
151    
     ; 3DNow! support ?  
         CHECK_FEATURE EXT_CPUID_3DNOW, XVID_CPU_3DNOW, features  
   
152          ; AMD cpu ?          ; AMD cpu ?
153      lea     esi, [vendorAMD]      lea     esi, [vendorAMD]
154      lea     edi, [vendor]    lea edi, [esp-12]
155      mov     ecx, 12      mov     ecx, 12
156      cld      cld
157      repe    cmpsb      repe    cmpsb
158      jnz     .cpu_quit      jnz     .cpu_quit
159    
160      ; 3DNow! support ?
161      CHECK_FEATURE EXT_CPUID_3DNOW, XVID_CPU_3DNOW, ebp
162    
163          ; 3DNOW extended ?          ; 3DNOW extended ?
164          CHECK_FEATURE EXT_CPUID_AMD_3DNOWEXT, XVID_CPU_3DNOWEXT, features    CHECK_FEATURE EXT_CPUID_AMD_3DNOWEXT, XVID_CPU_3DNOWEXT, ebp
165    
166          ; extended MMX ?          ; extended MMX ?
167          CHECK_FEATURE EXT_CPUID_AMD_MMXEXT, XVID_CPU_MMXEXT, features    CHECK_FEATURE EXT_CPUID_AMD_MMXEXT, XVID_CPU_MMXEXT, ebp
168    
169  .cpu_quit:  .cpu_quit:
170    
171          popad    mov eax, ebp
172    
173          mov eax, [features]    pop ebp
174      pop edi
175      pop esi
176      pop ebx
177    
178      ret
179    
180    ; sse/sse2 operating support detection routines
181    ; these will trigger an invalid instruction signal if not supported.
182    ALIGN 16
183    cglobal sse_os_trigger
184    sse_os_trigger:
185      xorps xmm0, xmm0
186      ret
187    
188    
189    ALIGN 16
190    cglobal sse2_os_trigger
191    sse2_os_trigger:
192      xorpd xmm0, xmm0
193      ret
194    
195    
196    ; enter/exit mmx state
197    ALIGN 16
198    cglobal emms_mmx
199    emms_mmx:
200      emms
201      ret
202    
203    ; faster enter/exit mmx state
204    ALIGN 16
205    cglobal emms_3dn
206    emms_3dn:
207      femms
208          ret          ret

Legend:
Removed from v.3  
changed lines
  Added in v.1382

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4