[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 1794, Fri Nov 14 15:43:28 2008 UTC revision 1795, Wed Nov 26 01:04:34 2008 UTC
# Line 3  Line 3 
3  ; *  XVID MPEG-4 VIDEO CODEC  ; *  XVID MPEG-4 VIDEO CODEC
4  ; *  - CPUID check processors capabilities -  ; *  - CPUID check processors capabilities -
5  ; *  ; *
6  ; *  Copyright (C) 2001 Michael Militzer <isibaar@xvid.org>  ; *  Copyright (C) 2001-2008 Michael Militzer <michael@xvid.org>
7  ; *  ; *
8  ; *  This program is free software ; you can redistribute it and/or modify  ; *  This program is free software ; you can redistribute it and/or modify
9  ; *  it 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
# Line 19  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  ; * $Id: cpuid.asm,v 1.14 2008-11-14 15:43:28 Isibaar Exp $  ; * $Id: cpuid.asm,v 1.15 2008-11-26 01:04:34 Isibaar Exp $
23  ; *  ; *
24  ; ***************************************************************************/  ; ***************************************************************************/
25    
26  BITS 32  %include "nasm.inc"
   
 %macro cglobal 1  
         %ifdef PREFIX  
                 %ifdef MARK_FUNCS  
                         global _%1:function %1.endfunc-%1  
                         %define %1 _%1:function %1.endfunc-%1  
                         %define ENDFUNC .endfunc  
                 %else  
                         global _%1  
                         %define %1 _%1  
                         %define ENDFUNC  
                 %endif  
         %else  
                 %ifdef MARK_FUNCS  
                         global %1:function %1.endfunc-%1  
                         %define ENDFUNC .endfunc  
                 %else  
                         global %1  
                         %define ENDFUNC  
                 %endif  
         %endif  
 %endmacro  
27    
28  ;=============================================================================  ;=============================================================================
29  ; Constants  ; Constants
# Line 77  Line 55 
55  ; Read only data  ; Read only data
56  ;=============================================================================  ;=============================================================================
57    
58  ALIGN 32  ALIGN SECTION_ALIGN
59  %ifdef FORMAT_COFF  
60  SECTION .rodata  DATA
 %else  
 SECTION .rodata align=16  
 %endif  
61    
62  vendorAMD:  vendorAMD:
63                  db "AuthenticAMD"                  db "AuthenticAMD"
# Line 104  Line 79 
79  ; Code  ; Code
80  ;=============================================================================  ;=============================================================================
81    
82  SECTION .text  %ifdef ARCH_IS_X86_64
83    %define XVID_PUSHFD pushfq
84    %define XVID_POPFD  popfq
85    %else
86    %define XVID_PUSHFD pushfd
87    %define XVID_POPFD  popfd
88    %endif
89    
90    SECTION .rotext align=SECTION_ALIGN
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    push ebx    push _EBX
98    push esi    push _ESI
99    push edi    push _EDI
100    push ebp    push _EBP
101    
102    sub esp, 12             ; Stack space for vendor name    sub _ESP, 12             ; Stack space for vendor name
103    
104    xor ebp, ebp    xor ebp, ebp
105    
106          ; CPUID command ?          ; CPUID command ?
107    pushfd    XVID_PUSHFD
108    pop eax    pop _EAX
109    mov ecx, eax    mov ecx, eax
110    xor eax, 0x200000    xor eax, 0x200000
111    push eax    push _EAX
112    popfd    XVID_POPFD
113    pushfd    XVID_PUSHFD
114    pop eax    pop _EAX
115    cmp eax, ecx    cmp eax, ecx
116    
117    jz near .cpu_quit             ; no CPUID command -> exit    jz near .cpu_quit             ; no CPUID command -> exit
118    
   
119          ; get vendor string, used later          ; get vendor string, used later
120    xor eax, eax    xor eax, eax
121    cpuid    cpuid
122    mov [esp], ebx       ; vendor string    mov [_ESP], ebx        ; vendor string
123    mov [esp+4], edx    mov [_ESP+4], edx
124    mov [esp+8], ecx    mov [_ESP+8], ecx
125    test eax, eax    test eax, eax
126    
127    jz near .cpu_quit    jz near .cpu_quit
# Line 175  Line 157 
157    cpuid    cpuid
158    
159   ; AMD cpu ?   ; AMD cpu ?
160    lea esi, [vendorAMD]    lea _ESI, [vendorAMD]
161    lea edi, [esp]    lea _EDI, [_ESP]
162    mov ecx, 12    mov ecx, 12
163    cld    cld
164    repe cmpsb    repe cmpsb
# Line 195  Line 177 
177    
178    mov eax, ebp    mov eax, ebp
179    
180    add esp, 12    add _ESP, 12
181    
182    pop ebp    pop _EBP
183    pop edi    pop _EDI
184    pop esi    pop _ESI
185    pop ebx    pop _EBX
186    
187    ret    ret
188  ENDFUNC  ENDFUNC
189    
190  ; sse/sse2 operating support detection routines  ; sse/sse2 operating support detection routines
191  ; these will trigger an invalid instruction signal if not supported.  ; these will trigger an invalid instruction signal if not supported.
192  ALIGN 16  ALIGN SECTION_ALIGN
193  cglobal sse_os_trigger  cglobal sse_os_trigger
194  sse_os_trigger:  sse_os_trigger:
195    xorps xmm0, xmm0    xorps xmm0, xmm0
# Line 215  Line 197 
197  ENDFUNC  ENDFUNC
198    
199    
200  ALIGN 16  ALIGN SECTION_ALIGN
201  cglobal sse2_os_trigger  cglobal sse2_os_trigger
202  sse2_os_trigger:  sse2_os_trigger:
203    xorpd xmm0, xmm0    xorpd xmm0, xmm0
# Line 224  Line 206 
206    
207    
208  ; enter/exit mmx state  ; enter/exit mmx state
209  ALIGN 16  ALIGN SECTION_ALIGN
210  cglobal emms_mmx  cglobal emms_mmx
211  emms_mmx:  emms_mmx:
212    emms    emms
# Line 232  Line 214 
214  ENDFUNC  ENDFUNC
215    
216  ; faster enter/exit mmx state  ; faster enter/exit mmx state
217  ALIGN 16  ALIGN SECTION_ALIGN
218  cglobal emms_3dn  cglobal emms_3dn
219  emms_3dn:  emms_3dn:
220    femms    femms

Legend:
Removed from v.1794  
changed lines
  Added in v.1795

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