Mercurial > sdl-ios-xcode
annotate src/cpuinfo/SDL_cpuinfo.c @ 1192:54aa9aa32327
To: sdl@libsdl.org
From: Christian Walther <cwalther@gmx.ch>
Date: Fri, 18 Nov 2005 23:39:02 +0100
Subject: [SDL] Mouse position bugs on Mac OS X
The attached patch fixes a few bugs in SDL related to the mouse position
in windowed mode on Mac OS X, reproduced using the attached minimal test
program - at least here on 10.3.9, with SDL CVS from today. Could anyone
test whether the bugs exist and are fixed by the patch on 10.2 and 10.4?
1. When using OpenGL, the vertical mouse positions obtained through
events or SDL_GetMouseState() are off by one.
2. When using OpenGL, SDL_WarpMouse() inverts the y coordinate.
3. Clicks on the topmost pixel row of the window are not recognized.
1 and 2 do not occur in non-OpenGL mode, while 3 does. All three only
occur in windowed mode, not in fullscreen.
The cause for 1 and 3 is that in Cocoa, "the location of the mouse"
seems to be defined as "the location of the top left corner of the mouse
pointer's hot pixel" (this is not documented, it's just what I found out
here), which together with the fact that Cocoa's usual y coordinates
start at the bottom and increase upwards means that the y coordinate of
the mouse runs from 1 to h, not from 0 to h-1, in a window of height h.
If it does work on 10.2 and 10.4 (I'll try to test it as soon as I can,
but at the moment all I have at hand is 10.3.9), can this be applied to
the CVS?
-Christian
To: sdl@libsdl.org
From: Christian Walther <cwalther@gmx.ch>
Date: Mon, 28 Nov 2005 10:41:51 +0100
Subject: [SDL] Re: Mouse position bugs on Mac OS X
I wrote:
> I'll try to test it as soon as I can, but at the moment all I have at hand is 10.3.9
So, here are the results of my tests (with patched and unpatched
frameworks compiled with Xcode 1.5 (gcc 3.3) on 10.3.9):
On 10.1.5, my test program doesn't run because of "Undefined symbols:
SDL undefined reference to _CGMainDisplayID expected to be defined in
Carbon". I guess not supporting 10.1 was a deliberate decision then and
that's OK with me.
On 10.2.8, 10.3.9, and 10.4.0, the bugs exist as described in my
original post and are fixed by my patch. That is, there is no difference
between pre/post 10.3 and the patched version works correctly in all
combinations of GL/non-GL and windowed/fullscreen.
I therefore recommend the patch for inclusion.
-Christian
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Mon, 28 Nov 2005 13:58:26 +0000 |
parents | 51a8702d8ecd |
children | b616ac4f39d1 |
rev | line source |
---|---|
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
769
b8d311d90021
Updated copyright information for 2004 (Happy New Year!)
Sam Lantinga <slouken@libsdl.org>
parents:
749
diff
changeset
|
3 Copyright (C) 1997-2004 Sam Lantinga |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Library General Public |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2 of the License, or (at your option) any later version. |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Library General Public License for more details. |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Library General Public |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 #ifdef SAVE_RCSID |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 static char rcsid = |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 "@(#) $Id$"; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 #endif |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 /* CPU feature detection for SDL */ |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 |
793
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
30 #ifdef unix /* FIXME: Better setjmp detection? */ |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
31 #define USE_SETJMP |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
32 #include <signal.h> |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
33 #include <setjmp.h> |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
34 #endif |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
35 |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 #include "SDL.h" |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
37 #include "SDL_cpuinfo.h" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
38 |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
39 #ifdef MACOSX |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
40 #include <sys/sysctl.h> /* For AltiVec check */ |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
41 #endif |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
42 |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
43 #define CPU_HAS_RDTSC 0x00000001 |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
44 #define CPU_HAS_MMX 0x00000002 |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
45 #define CPU_HAS_MMXEXT 0x00000004 |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
46 #define CPU_HAS_3DNOW 0x00000010 |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
47 #define CPU_HAS_3DNOWEXT 0x00000020 |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
48 #define CPU_HAS_SSE 0x00000040 |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
49 #define CPU_HAS_SSE2 0x00000080 |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
50 #define CPU_HAS_ALTIVEC 0x00000100 |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
51 |
793
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
52 #ifdef USE_SETJMP |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
53 /* This is the brute force way of detecting instruction sets... |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
54 the idea is borrowed from the libmpeg2 library - thanks! |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
55 */ |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
56 static jmp_buf jmpbuf; |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
57 static void illegal_instruction(int sig) |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
58 { |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
59 longjmp(jmpbuf, 1); |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
60 } |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
61 #endif // USE_SETJMP |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
62 |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
63 static __inline__ int CPU_haveCPUID() |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
64 { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
65 int has_CPUID = 0; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
66 #if defined(__GNUC__) && defined(i386) |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
67 __asm__ ( |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
68 " pushfl # Get original EFLAGS \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
69 " popl %%eax \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
70 " movl %%eax,%%ecx \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
71 " xorl $0x200000,%%eax # Flip ID bit in EFLAGS \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
72 " pushl %%eax # Save new EFLAGS value on stack \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
73 " popfl # Replace current EFLAGS value \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
74 " pushfl # Get new EFLAGS \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
75 " popl %%eax # Store new EFLAGS in EAX \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
76 " xorl %%ecx,%%eax # Can not toggle ID bit, \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
77 " jz 1f # Processor=80486 \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
78 " movl $1,%0 # We have CPUID support \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
79 "1: \n" |
784
a2dde6aff60e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
778
diff
changeset
|
80 : "=m" (has_CPUID) |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
81 : |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
82 : "%eax", "%ecx" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
83 ); |
881
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
84 #elif defined(__GNUC__) && defined(__x86_64__) |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
85 /* Technically, if this is being compiled under __x86_64__ then it has |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
86 CPUid by definition. But it's nice to be able to prove it. :) */ |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
87 __asm__ ( |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
88 " pushfq # Get original EFLAGS \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
89 " popq %%rax \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
90 " movq %%rax,%%rcx \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
91 " xorl $0x200000,%%eax # Flip ID bit in EFLAGS \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
92 " pushq %%rax # Save new EFLAGS value on stack \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
93 " popfq # Replace current EFLAGS value \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
94 " pushfq # Get new EFLAGS \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
95 " popq %%rax # Store new EFLAGS in EAX \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
96 " xorl %%ecx,%%eax # Can not toggle ID bit, \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
97 " jz 1f # Processor=80486 \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
98 " movl $1,%0 # We have CPUID support \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
99 "1: \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
100 : "=m" (has_CPUID) |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
101 : |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
102 : "%rax", "%rcx" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
103 ); |
1152
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
887
diff
changeset
|
104 #elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_X86_)) |
749
06cdd106d61c
Updated Visual C++ support
Sam Lantinga <slouken@libsdl.org>
parents:
747
diff
changeset
|
105 __asm { |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
106 pushfd ; Get original EFLAGS |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
107 pop eax |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
108 mov ecx, eax |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
109 xor eax, 200000h ; Flip ID bit in EFLAGS |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
110 push eax ; Save new EFLAGS value on stack |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
111 popfd ; Replace current EFLAGS value |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
112 pushfd ; Get new EFLAGS |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
113 pop eax ; Store new EFLAGS in EAX |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
114 xor eax, ecx ; Can not toggle ID bit, |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
115 jz done ; Processor=80486 |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
116 mov has_CPUID,1 ; We have CPUID support |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
117 done: |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
118 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
119 #endif |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
120 return has_CPUID; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
121 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
123 static __inline__ int CPU_getCPUIDFeatures() |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
124 { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
125 int features = 0; |
881
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
126 #if defined(__GNUC__) && ( defined(i386) || defined(__x86_64__) ) |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
127 __asm__ ( |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
128 " movl %%ebx,%%edi\n" |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
129 " xorl %%eax,%%eax # Set up for CPUID instruction \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
130 " cpuid # Get and save vendor ID \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
131 " cmpl $1,%%eax # Make sure 1 is valid input for CPUID\n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
132 " jl 1f # We dont have the CPUID instruction\n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
133 " xorl %%eax,%%eax \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
134 " incl %%eax \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
135 " cpuid # Get family/model/stepping/features\n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
136 " movl %%edx,%0 \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
137 "1: \n" |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
138 " movl %%edi,%%ebx\n" |
784
a2dde6aff60e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
778
diff
changeset
|
139 : "=m" (features) |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
140 : |
887
b4b64bb88f2f
Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
881
diff
changeset
|
141 : "%eax", "%ecx", "%edx", "%edi" |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
142 ); |
1152
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
887
diff
changeset
|
143 #elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_X86_)) |
749
06cdd106d61c
Updated Visual C++ support
Sam Lantinga <slouken@libsdl.org>
parents:
747
diff
changeset
|
144 __asm { |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
145 xor eax, eax ; Set up for CPUID instruction |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
146 cpuid ; Get and save vendor ID |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
147 cmp eax, 1 ; Make sure 1 is valid input for CPUID |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
148 jl done ; We dont have the CPUID instruction |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
149 xor eax, eax |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
150 inc eax |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
151 cpuid ; Get family/model/stepping/features |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
152 mov features, edx |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
153 done: |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
154 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
155 #endif |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
156 return features; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
157 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
158 |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
159 static __inline__ int CPU_getCPUIDFeaturesExt() |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
160 { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
161 int features = 0; |
881
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
162 #if defined(__GNUC__) && (defined(i386) || defined (__x86_64__) ) |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
163 __asm__ ( |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
164 " movl %%ebx,%%edi\n" |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
165 " movl $0x80000000,%%eax # Query for extended functions \n" |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
166 " cpuid # Get extended function limit \n" |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
167 " cmpl $0x80000001,%%eax \n" |
787
07760c8854d1
Date: Sat, 24 Jan 2004 14:49:58 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
786
diff
changeset
|
168 " jl 1f # Nope, we dont have function 800000001h\n" |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
169 " movl $0x80000001,%%eax # Setup extended function 800000001h\n" |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
170 " cpuid # and get the information \n" |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
171 " movl %%edx,%0 \n" |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
172 "1: \n" |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
173 " movl %%edi,%%ebx\n" |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
174 : "=m" (features) |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
175 : |
887
b4b64bb88f2f
Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
881
diff
changeset
|
176 : "%eax", "%ecx", "%edx", "%edi" |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
177 ); |
1152
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
887
diff
changeset
|
178 #elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_X86_)) |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
179 __asm { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
180 mov eax,80000000h ; Query for extended functions |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
181 cpuid ; Get extended function limit |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
182 cmp eax,80000001h |
787
07760c8854d1
Date: Sat, 24 Jan 2004 14:49:58 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
786
diff
changeset
|
183 jl done ; Nope, we dont have function 800000001h |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
184 mov eax,80000001h ; Setup extended function 800000001h |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
185 cpuid ; and get the information |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
186 mov features,edx |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
187 done: |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
188 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
189 #endif |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
190 return features; |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
191 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
192 |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
193 static __inline__ int CPU_haveRDTSC() |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
194 { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
195 if ( CPU_haveCPUID() ) { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
196 return (CPU_getCPUIDFeatures() & 0x00000010); |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
197 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
198 return 0; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
199 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
200 |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
201 static __inline__ int CPU_haveMMX() |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
202 { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
203 if ( CPU_haveCPUID() ) { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
204 return (CPU_getCPUIDFeatures() & 0x00800000); |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
205 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
206 return 0; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
207 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
208 |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
209 static __inline__ int CPU_haveMMXExt() |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
210 { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
211 if ( CPU_haveCPUID() ) { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
212 return (CPU_getCPUIDFeaturesExt() & 0x00400000); |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
213 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
214 return 0; |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
215 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
216 |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
217 static __inline__ int CPU_have3DNow() |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
218 { |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
219 if ( CPU_haveCPUID() ) { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
220 return (CPU_getCPUIDFeaturesExt() & 0x80000000); |
747
da36f59485da
Check for CPUID before checking for 3DNow!
Sam Lantinga <slouken@libsdl.org>
parents:
745
diff
changeset
|
221 } |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
222 return 0; |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
223 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
224 |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
225 static __inline__ int CPU_have3DNowExt() |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
226 { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
227 if ( CPU_haveCPUID() ) { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
228 return (CPU_getCPUIDFeaturesExt() & 0x40000000); |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
229 } |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
230 return 0; |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
231 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
232 |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
233 static __inline__ int CPU_haveSSE() |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
234 { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
235 if ( CPU_haveCPUID() ) { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
236 return (CPU_getCPUIDFeatures() & 0x02000000); |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
237 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
238 return 0; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
239 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
241 static __inline__ int CPU_haveSSE2() |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
242 { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
243 if ( CPU_haveCPUID() ) { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
244 return (CPU_getCPUIDFeatures() & 0x04000000); |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
245 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
246 return 0; |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
247 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
248 |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
249 static __inline__ int CPU_haveAltiVec() |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
250 { |
796
dec19b813b04
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
795
diff
changeset
|
251 volatile int altivec = 0; |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
252 #ifdef MACOSX |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
253 int selectors[2] = { CTL_HW, HW_VECTORUNIT }; |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
254 int hasVectorUnit = 0; |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
255 size_t length = sizeof(hasVectorUnit); |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
256 int error = sysctl(selectors, 2, &hasVectorUnit, &length, NULL, 0); |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
257 if( 0 == error ) |
793
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
258 altivec = (hasVectorUnit != 0); |
795
275708f2e838
Check for altivec assembly support before trying to use it. :)
Sam Lantinga <slouken@libsdl.org>
parents:
793
diff
changeset
|
259 #elif defined(USE_SETJMP) && defined(GCC_ALTIVEC) |
793
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
260 void (*handler)(int sig); |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
261 handler = signal(SIGILL, illegal_instruction); |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
262 if ( setjmp(jmpbuf) == 0 ) { |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
263 asm volatile ("mtspr 256, %0\n\t" |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
264 "vand %%v0, %%v0, %%v0" |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
265 : |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
266 : "r" (-1)); |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
267 altivec = 1; |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
268 } |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
269 signal(SIGILL, handler); |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
270 #endif |
793
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
271 return altivec; |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
272 } |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
273 |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
274 static Uint32 SDL_CPUFeatures = 0xFFFFFFFF; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 static Uint32 SDL_GetCPUFeatures() |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 if ( SDL_CPUFeatures == 0xFFFFFFFF ) { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 SDL_CPUFeatures = 0; |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
280 if ( CPU_haveRDTSC() ) { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
281 SDL_CPUFeatures |= CPU_HAS_RDTSC; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
282 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 if ( CPU_haveMMX() ) { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 SDL_CPUFeatures |= CPU_HAS_MMX; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
285 } |
786
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
286 if ( CPU_haveMMXExt() ) { |
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
287 SDL_CPUFeatures |= CPU_HAS_MMXEXT; |
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
288 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 if ( CPU_have3DNow() ) { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 SDL_CPUFeatures |= CPU_HAS_3DNOW; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 } |
786
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
292 if ( CPU_have3DNowExt() ) { |
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
293 SDL_CPUFeatures |= CPU_HAS_3DNOWEXT; |
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
294 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
295 if ( CPU_haveSSE() ) { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 SDL_CPUFeatures |= CPU_HAS_SSE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 } |
786
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
298 if ( CPU_haveSSE2() ) { |
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
299 SDL_CPUFeatures |= CPU_HAS_SSE2; |
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
300 } |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
301 if ( CPU_haveAltiVec() ) { |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
302 SDL_CPUFeatures |= CPU_HAS_ALTIVEC; |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
303 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 return SDL_CPUFeatures; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
308 SDL_bool SDL_HasRDTSC() |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
309 { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
310 if ( SDL_GetCPUFeatures() & CPU_HAS_RDTSC ) { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
311 return SDL_TRUE; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
312 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
313 return SDL_FALSE; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
314 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
315 |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 SDL_bool SDL_HasMMX() |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 if ( SDL_GetCPUFeatures() & CPU_HAS_MMX ) { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 return SDL_TRUE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 return SDL_FALSE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 |
804
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
324 SDL_bool SDL_HasMMXExt() |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
325 { |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
326 if ( SDL_GetCPUFeatures() & CPU_HAS_MMXEXT ) { |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
327 return SDL_TRUE; |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
328 } |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
329 return SDL_FALSE; |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
330 } |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
331 |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 SDL_bool SDL_Has3DNow() |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
333 { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 if ( SDL_GetCPUFeatures() & CPU_HAS_3DNOW ) { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 return SDL_TRUE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
336 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
337 return SDL_FALSE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
338 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 |
804
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
340 SDL_bool SDL_Has3DNowExt() |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
341 { |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
342 if ( SDL_GetCPUFeatures() & CPU_HAS_3DNOWEXT ) { |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
343 return SDL_TRUE; |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
344 } |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
345 return SDL_FALSE; |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
346 } |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
347 |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 SDL_bool SDL_HasSSE() |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
350 if ( SDL_GetCPUFeatures() & CPU_HAS_SSE ) { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
351 return SDL_TRUE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 return SDL_FALSE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
354 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
355 |
804
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
356 SDL_bool SDL_HasSSE2() |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
357 { |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
358 if ( SDL_GetCPUFeatures() & CPU_HAS_SSE2 ) { |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
359 return SDL_TRUE; |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
360 } |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
361 return SDL_FALSE; |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
362 } |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
363 |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
364 SDL_bool SDL_HasAltiVec() |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
365 { |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
366 if ( SDL_GetCPUFeatures() & CPU_HAS_ALTIVEC ) { |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
367 return SDL_TRUE; |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
368 } |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
369 return SDL_FALSE; |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
370 } |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
371 |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
372 #ifdef TEST_MAIN |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
373 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
374 #include <stdio.h> |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
375 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
376 int main() |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
377 { |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
378 printf("RDTSC: %d\n", SDL_HasRDTSC()); |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
379 printf("MMX: %d\n", SDL_HasMMX()); |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
380 printf("MMXExt: %d\n", SDL_HasMMXExt()); |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
381 printf("3DNow: %d\n", SDL_Has3DNow()); |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
382 printf("3DNowExt: %d\n", SDL_Has3DNowExt()); |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
383 printf("SSE: %d\n", SDL_HasSSE()); |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
384 printf("SSE2: %d\n", SDL_HasSSE2()); |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
385 printf("AltiVec: %d\n", SDL_HasAltiVec()); |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
386 return 0; |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
387 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
388 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
389 #endif /* TEST_MAIN */ |