[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 654, Sun Nov 17 00:51:11 2002 UTC revision 1519, Sat Jul 24 11:46:08 2004 UTC
# Line 1  Line 1 
1  ;/******************************************************************************  ;/****************************************************************************
2  ; *  ; *
3  ; *  Copyright (C) 2001 - Michael Militzer <isibaar@xvid.org>  ; *  XVID MPEG-4 VIDEO CODEC
4    ; *  - CPUID check processors capabilities -
5  ; *  ; *
6  ; *  This file is part of XviD, a free MPEG-4 video encoder/decoder  ; *  Copyright (C) 2001 Michael Militzer <isibaar@xvid.org>
7  ; *  ; *
8  ; *  XviD is free software; you can redistribute it and/or modify it  ; *  This program is free software ; you can redistribute it and/or modify
9  ; *  under the terms of the GNU General Public License as published by  ; *  it under the terms of the GNU General Public License as published by
10  ; *  the Free Software Foundation; either version 2 of the License, or  ; *  the Free Software Foundation; either version 2 of the License, or
11  ; *  (at your option) any later version.  ; *  (at your option) any later version.
12  ; *  ; *
# Line 18  Line 19 
19  ; *  along with this program; if not, write to the Free Software  ; *  along with this program; if not, write to the Free Software
20  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21  ; *  ; *
22  ; *  Under section 8 of the GNU General Public License, the copyright  ; * $Id: cpuid.asm,v 1.7 2004-07-24 11:46:08 edgomez Exp $
 ; *  holders of XVID explicitly forbid distribution in the following  
 ; *  countries:  
 ; *  
 ; *    - Japan  
 ; *    - United States of America  
 ; *  
 ; *  Linking XviD statically or dynamically with other modules is making a  
 ; *  combined work based on XviD.  Thus, the terms and conditions of the  
 ; *  GNU General Public License cover the whole combination.  
 ; *  
 ; *  As a special exception, the copyright holders of XviD give you  
 ; *  permission to link XviD with independent modules that communicate with  
 ; *  XviD solely through the VFW1.1 and DShow interfaces, regardless of the  
 ; *  license terms of these independent modules, and to copy and distribute  
 ; *  the resulting combined work under terms of your choice, provided that  
 ; *  every copy of the combined work is accompanied by a complete copy of  
 ; *  the source code of XviD (the version of XviD used to produce the  
 ; *  combined work), being distributed under the terms of the GNU General  
 ; *  Public License plus this exception.  An independent module is a module  
 ; *  which is not derived from or based on XviD.  
 ; *  
 ; *  Note that people who make modified versions of XviD are not obligated  
 ; *  to grant this special exception for their modified versions; it is  
 ; *  their choice whether to do so.  The GNU General Public License gives  
 ; *  permission to release a modified version without this exception; this  
 ; *  exception also makes it possible to release a modified version which  
 ; *  carries forward this exception.  
23  ; *  ; *
24  ; * $Id: cpuid.asm,v 1.3 2002-11-17 00:51:11 edgomez Exp $  ; ***************************************************************************/
 ; ******************************************************************************/  
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 61  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    ALIGN 32
64  %macro cglobal 1  %ifdef FORMAT_COFF
65          %ifdef PREFIX  SECTION .rodata
                 global _%1  
                 %define %1 _%1  
66          %else          %else
67                  global %1  SECTION .rodata align=16
68          %endif          %endif
 %endmacro  
   
 ALIGN 32  
69    
70  section .data  vendorAMD:
71                    db "AuthenticAMD"
72    
73  vendorAMD       db "AuthenticAMD"  ;=============================================================================
74    ; Macros
75    ;=============================================================================
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    
# Line 108  Line 99 
99          push edi          push edi
100          push ebp          push ebp
101    
102      sub esp, 12             ; Stack space for vendor name
103    
104          xor ebp,ebp          xor ebp,ebp
105    
106          ; CPUID command ?          ; CPUID command ?
# Line 127  Line 120 
120          ; get vendor string, used later          ; get vendor string, used later
121      xor     eax, eax      xor     eax, eax
122      cpuid      cpuid
123      mov     [esp-12], ebx       ; vendor string    mov [esp], ebx       ; vendor string
124      mov     [esp-12+4], edx    mov [esp+4], edx
125      mov     [esp-12+8], ecx    mov [esp+8], ecx
126      test    eax, eax      test    eax, eax
127    
128      jz      near .cpu_quit      jz      near .cpu_quit
# Line 160  Line 153 
153    
154          ; AMD cpu ?          ; AMD cpu ?
155      lea     esi, [vendorAMD]      lea     esi, [vendorAMD]
156      lea     edi, [esp-12]    lea edi, [esp]
157      mov     ecx, 12      mov     ecx, 12
158      cld      cld
159      repe    cmpsb      repe    cmpsb
# Line 179  Line 172 
172    
173          mov eax, ebp          mov eax, ebp
174    
175      add esp, 12
176    
177          pop ebp          pop ebp
178          pop edi          pop edi
179          pop esi          pop esi
# Line 186  Line 181 
181    
182          ret          ret
183    
   
   
184  ; sse/sse2 operating support detection routines  ; sse/sse2 operating support detection routines
185  ; these will trigger an invalid instruction signal if not supported.  ; these will trigger an invalid instruction signal if not supported.
186    ALIGN 16
187  cglobal sse_os_trigger  cglobal sse_os_trigger
 align 16  
188  sse_os_trigger:  sse_os_trigger:
189          xorps xmm0, xmm0          xorps xmm0, xmm0
190          ret          ret
191    
192    
193    ALIGN 16
194  cglobal sse2_os_trigger  cglobal sse2_os_trigger
 align 16  
195  sse2_os_trigger:  sse2_os_trigger:
196          xorpd xmm0, xmm0          xorpd xmm0, xmm0
197          ret          ret
198    
199    
200    ; enter/exit mmx state
201    ALIGN 16
202    cglobal emms_mmx
203    emms_mmx:
204      emms
205      ret
206    
207    ; faster enter/exit mmx state
208    ALIGN 16
209    cglobal emms_3dn
210    emms_3dn:
211      femms
212      ret

Legend:
Removed from v.654  
changed lines
  Added in v.1519

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