Mercurial > sdl-ios-xcode
annotate src/cpuinfo/SDL_cpuinfo.c @ 4170:092c0bc69155 SDL-1.2
Fixed bug #618
Description From Tim Angus 2008-08-30 12:23:56 (-) [reply]
As we all know SDL 1.2 doesn't handle dead keys well since one key press
potentially equals two (or more) characters. For example, on many layouts,
keying <backquote>,<space> results in <no character>,<backquote><space>. Since
the unicode member of the SDL_keysym struct only has room for one character,
only one can be returned.
On Linux, the first character is returned. On Windows however, unless the exact
number of characters generated by the keypress is 1, nothing is returned. The
following patch addresses this inconsistency.
Updated patch which includes a further fix to the handling of the numpad when
numlock is on. This further fix is courtesy Amanieu d'Antras.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 13 Apr 2009 08:42:09 +0000 |
parents | a1b03ba2fcd0 |
children | 0a9a29fc00c2 |
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 |
4159 | 3 Copyright (C) 1997-2009 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 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1229
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
739
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 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1229
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
739
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 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1229
diff
changeset
|
13 Lesser General Public License for more details. |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1229
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1229
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1229
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
739
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 */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
22 #include "SDL_config.h" |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 /* 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
|
25 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
26 #include "SDL.h" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
27 #include "SDL_cpuinfo.h" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
28 |
1590
96d8c3fec479
Don't detect Altivec on MacOS X Intel
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
29 #if defined(__MACOSX__) && defined(__ppc__) |
1487
dc6b59e925a2
Cleaning up warnings on MacOS X
Sam Lantinga <slouken@libsdl.org>
parents:
1442
diff
changeset
|
30 #include <sys/sysctl.h> /* For AltiVec check */ |
dc6b59e925a2
Cleaning up warnings on MacOS X
Sam Lantinga <slouken@libsdl.org>
parents:
1442
diff
changeset
|
31 #elif SDL_ALTIVEC_BLITTERS && HAVE_SETJMP |
793
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 |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
36 #define CPU_HAS_RDTSC 0x00000001 |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
37 #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
|
38 #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
|
39 #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
|
40 #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
|
41 #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
|
42 #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
|
43 #define CPU_HAS_ALTIVEC 0x00000100 |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
44 |
1487
dc6b59e925a2
Cleaning up warnings on MacOS X
Sam Lantinga <slouken@libsdl.org>
parents:
1442
diff
changeset
|
45 #if SDL_ALTIVEC_BLITTERS && HAVE_SETJMP && !__MACOSX__ |
793
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
46 /* 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
|
47 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
|
48 */ |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
49 static jmp_buf jmpbuf; |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
50 static void illegal_instruction(int sig) |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
51 { |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
52 longjmp(jmpbuf, 1); |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
53 } |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
54 #endif /* HAVE_SETJMP */ |
793
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
55 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
56 static __inline__ int CPU_haveCPUID(void) |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
57 { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
58 int has_CPUID = 0; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
59 #if defined(__GNUC__) && defined(i386) |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
60 __asm__ ( |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
61 " pushfl # Get original EFLAGS \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
62 " popl %%eax \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
63 " movl %%eax,%%ecx \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
64 " 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
|
65 " 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
|
66 " popfl # Replace current EFLAGS value \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
67 " pushfl # Get new EFLAGS \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
68 " 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
|
69 " 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
|
70 " jz 1f # Processor=80486 \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
71 " 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
|
72 "1: \n" |
784
a2dde6aff60e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
778
diff
changeset
|
73 : "=m" (has_CPUID) |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
74 : |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
75 : "%eax", "%ecx" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
76 ); |
881
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
77 #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
|
78 /* 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
|
79 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
|
80 __asm__ ( |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
81 " pushfq # Get original EFLAGS \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
82 " popq %%rax \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
83 " movq %%rax,%%rcx \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
84 " 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
|
85 " 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
|
86 " 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
|
87 " pushfq # Get new EFLAGS \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
88 " 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
|
89 " 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
|
90 " jz 1f # Processor=80486 \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
91 " 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
|
92 "1: \n" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
93 : "=m" (has_CPUID) |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
94 : |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
95 : "%rax", "%rcx" |
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
96 ); |
1442
e3242177fe4a
Updated OS/2 build, yay!
Sam Lantinga <slouken@libsdl.org>
parents:
1426
diff
changeset
|
97 #elif (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__) |
749
06cdd106d61c
Updated Visual C++ support
Sam Lantinga <slouken@libsdl.org>
parents:
747
diff
changeset
|
98 __asm { |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
99 pushfd ; Get original EFLAGS |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
100 pop eax |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
101 mov ecx, eax |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
102 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
|
103 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
|
104 popfd ; Replace current EFLAGS value |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
105 pushfd ; Get new EFLAGS |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
106 pop eax ; Store new EFLAGS in EAX |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
107 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
|
108 jz done ; Processor=80486 |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
109 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
|
110 done: |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
111 } |
1864
7bea26ad3130
I think this fixes bug #244
Sam Lantinga <slouken@libsdl.org>
parents:
1590
diff
changeset
|
112 #elif defined(__sun) && defined(__i386) |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
113 __asm ( |
1229
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
114 " pushfl \n" |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
115 " popl %eax \n" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
116 " movl %eax,%ecx \n" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
117 " xorl $0x200000,%eax \n" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
118 " pushl %eax \n" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
119 " popfl \n" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
120 " pushfl \n" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
121 " popl %eax \n" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
122 " xorl %ecx,%eax \n" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
123 " jz 1f \n" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
124 " movl $1,-8(%ebp) \n" |
1229
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
125 "1: \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
126 ); |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
127 #elif defined(__sun) && defined(__amd64) |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
128 __asm ( |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
129 " pushfq \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
130 " popq %rax \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
131 " movq %rax,%rcx \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
132 " xorl $0x200000,%eax \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
133 " pushq %rax \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
134 " popfq \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
135 " pushfq \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
136 " popq %rax \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
137 " xorl %ecx,%eax \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
138 " jz 1f \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
139 " movl $1,-8(%rbp) \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
140 "1: \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
141 ); |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
142 #endif |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
143 return has_CPUID; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
144 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
145 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
146 static __inline__ int CPU_getCPUIDFeatures(void) |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
147 { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
148 int features = 0; |
881
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
149 #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
|
150 __asm__ ( |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
151 " movl %%ebx,%%edi\n" |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
152 " 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
|
153 " cpuid # Get and save vendor ID \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
154 " 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
|
155 " 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
|
156 " xorl %%eax,%%eax \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
157 " incl %%eax \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
158 " cpuid # Get family/model/stepping/features\n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
159 " movl %%edx,%0 \n" |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
160 "1: \n" |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
161 " movl %%edi,%%ebx\n" |
784
a2dde6aff60e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
778
diff
changeset
|
162 : "=m" (features) |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
163 : |
887
b4b64bb88f2f
Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
881
diff
changeset
|
164 : "%eax", "%ecx", "%edx", "%edi" |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
165 ); |
1442
e3242177fe4a
Updated OS/2 build, yay!
Sam Lantinga <slouken@libsdl.org>
parents:
1426
diff
changeset
|
166 #elif (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__) |
749
06cdd106d61c
Updated Visual C++ support
Sam Lantinga <slouken@libsdl.org>
parents:
747
diff
changeset
|
167 __asm { |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
168 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
|
169 cpuid ; Get and save vendor ID |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
170 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
|
171 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
|
172 xor eax, eax |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
173 inc eax |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
174 cpuid ; Get family/model/stepping/features |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
175 mov features, edx |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
176 done: |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
177 } |
1864
7bea26ad3130
I think this fixes bug #244
Sam Lantinga <slouken@libsdl.org>
parents:
1590
diff
changeset
|
178 #elif defined(__sun) && (defined(__i386) || defined(__amd64)) |
1229
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
179 __asm( |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
180 " movl %ebx,%edi\n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
181 " xorl %eax,%eax \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
182 " cpuid \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
183 " cmpl $1,%eax \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
184 " jl 1f \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
185 " xorl %eax,%eax \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
186 " incl %eax \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
187 " cpuid \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
188 #ifdef __i386 |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
189 " movl %edx,-8(%ebp) \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
190 #else |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
191 " movl %edx,-8(%rbp) \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
192 #endif |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
193 "1: \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
194 " movl %edi,%ebx\n" ); |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
195 #endif |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
196 return features; |
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 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
199 static __inline__ int CPU_getCPUIDFeaturesExt(void) |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
200 { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
201 int features = 0; |
881
9eb85a211abd
Date: Tue, 30 Mar 2004 18:18:13 -0600
Sam Lantinga <slouken@libsdl.org>
parents:
804
diff
changeset
|
202 #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
|
203 __asm__ ( |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
204 " 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
|
205 " 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
|
206 " 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
|
207 " cmpl $0x80000001,%%eax \n" |
787
07760c8854d1
Date: Sat, 24 Jan 2004 14:49:58 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
786
diff
changeset
|
208 " 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
|
209 " 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
|
210 " 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
|
211 " 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
|
212 "1: \n" |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
213 " 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
|
214 : "=m" (features) |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
215 : |
887
b4b64bb88f2f
Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
881
diff
changeset
|
216 : "%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
|
217 ); |
1442
e3242177fe4a
Updated OS/2 build, yay!
Sam Lantinga <slouken@libsdl.org>
parents:
1426
diff
changeset
|
218 #elif (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__) |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
219 __asm { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
220 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
|
221 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
|
222 cmp eax,80000001h |
787
07760c8854d1
Date: Sat, 24 Jan 2004 14:49:58 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
786
diff
changeset
|
223 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
|
224 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
|
225 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
|
226 mov features,edx |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
227 done: |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
228 } |
1229
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
229 #elif defined(__sun) && ( defined(__i386) || defined(__amd64) ) |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
230 __asm ( |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
231 " movl %ebx,%edi\n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
232 " movl $0x80000000,%eax \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
233 " cpuid \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
234 " cmpl $0x80000001,%eax \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
235 " jl 1f \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
236 " movl $0x80000001,%eax \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
237 " cpuid \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
238 #ifdef __i386 |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
239 " movl %edx,-8(%ebp) \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
240 #else |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
241 " movl %edx,-8(%rbp) \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
242 #endif |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
243 "1: \n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
244 " movl %edi,%ebx\n" |
1430f5fe092a
Patch from Michael Bonfils to add CPUID support for x86 Solaris.
Ryan C. Gordon <icculus@icculus.org>
parents:
1198
diff
changeset
|
245 ); |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
246 #endif |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
247 return features; |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
248 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
249 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
250 static __inline__ int CPU_haveRDTSC(void) |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
251 { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
252 if ( CPU_haveCPUID() ) { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
253 return (CPU_getCPUIDFeatures() & 0x00000010); |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
254 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
255 return 0; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
256 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
258 static __inline__ int CPU_haveMMX(void) |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
259 { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
260 if ( CPU_haveCPUID() ) { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
261 return (CPU_getCPUIDFeatures() & 0x00800000); |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
262 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
263 return 0; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
264 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
265 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
266 static __inline__ int CPU_haveMMXExt(void) |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
267 { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
268 if ( CPU_haveCPUID() ) { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
269 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
|
270 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
271 return 0; |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
272 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
273 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
274 static __inline__ int CPU_have3DNow(void) |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
275 { |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
276 if ( CPU_haveCPUID() ) { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
277 return (CPU_getCPUIDFeaturesExt() & 0x80000000); |
747
da36f59485da
Check for CPUID before checking for 3DNow!
Sam Lantinga <slouken@libsdl.org>
parents:
745
diff
changeset
|
278 } |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
279 return 0; |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
280 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
281 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
282 static __inline__ int CPU_have3DNowExt(void) |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
283 { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
284 if ( CPU_haveCPUID() ) { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
285 return (CPU_getCPUIDFeaturesExt() & 0x40000000); |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
286 } |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
287 return 0; |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
288 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
289 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
290 static __inline__ int CPU_haveSSE(void) |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
291 { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
292 if ( CPU_haveCPUID() ) { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
293 return (CPU_getCPUIDFeatures() & 0x02000000); |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
294 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
295 return 0; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
296 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
298 static __inline__ int CPU_haveSSE2(void) |
785
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
299 { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
300 if ( CPU_haveCPUID() ) { |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
301 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
|
302 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
303 return 0; |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
304 } |
ca06a994f03c
Fixed bugs in CPU feature detection and added extended feature detection
Sam Lantinga <slouken@libsdl.org>
parents:
784
diff
changeset
|
305 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
306 static __inline__ int CPU_haveAltiVec(void) |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
307 { |
796
dec19b813b04
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
795
diff
changeset
|
308 volatile int altivec = 0; |
1590
96d8c3fec479
Don't detect Altivec on MacOS X Intel
Sam Lantinga <slouken@libsdl.org>
parents:
1487
diff
changeset
|
309 #if defined(__MACOSX__) && defined(__ppc__) |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
310 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
|
311 int hasVectorUnit = 0; |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
312 size_t length = sizeof(hasVectorUnit); |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
313 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
|
314 if( 0 == error ) |
793
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
315 altivec = (hasVectorUnit != 0); |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
316 #elif SDL_ALTIVEC_BLITTERS && HAVE_SETJMP |
793
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
317 void (*handler)(int sig); |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
318 handler = signal(SIGILL, illegal_instruction); |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
319 if ( setjmp(jmpbuf) == 0 ) { |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
320 asm volatile ("mtspr 256, %0\n\t" |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
321 "vand %%v0, %%v0, %%v0" |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
322 : |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
323 : "r" (-1)); |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
324 altivec = 1; |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
325 } |
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
326 signal(SIGILL, handler); |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
327 #endif |
793
c20f08c4f437
Altivec detection on non-MacOS X systems
Sam Lantinga <slouken@libsdl.org>
parents:
787
diff
changeset
|
328 return altivec; |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
329 } |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
330 |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 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
|
332 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
333 static Uint32 SDL_GetCPUFeatures(void) |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 if ( SDL_CPUFeatures == 0xFFFFFFFF ) { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
336 SDL_CPUFeatures = 0; |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
337 if ( CPU_haveRDTSC() ) { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
338 SDL_CPUFeatures |= CPU_HAS_RDTSC; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
339 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
340 if ( CPU_haveMMX() ) { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 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
|
342 } |
786
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
343 if ( CPU_haveMMXExt() ) { |
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
344 SDL_CPUFeatures |= CPU_HAS_MMXEXT; |
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
345 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
346 if ( CPU_have3DNow() ) { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 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
|
348 } |
786
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
349 if ( CPU_have3DNowExt() ) { |
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
350 SDL_CPUFeatures |= CPU_HAS_3DNOWEXT; |
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
351 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 if ( CPU_haveSSE() ) { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 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
|
354 } |
786
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
355 if ( CPU_haveSSE2() ) { |
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
356 SDL_CPUFeatures |= CPU_HAS_SSE2; |
e1e0a0a94570
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
785
diff
changeset
|
357 } |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
358 if ( CPU_haveAltiVec() ) { |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
359 SDL_CPUFeatures |= CPU_HAS_ALTIVEC; |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
360 } |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
361 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
362 return SDL_CPUFeatures; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
363 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
364 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
365 SDL_bool SDL_HasRDTSC(void) |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
366 { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
367 if ( SDL_GetCPUFeatures() & CPU_HAS_RDTSC ) { |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
368 return SDL_TRUE; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
369 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
370 return SDL_FALSE; |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
371 } |
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
372 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
373 SDL_bool SDL_HasMMX(void) |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
374 { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
375 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
|
376 return SDL_TRUE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
377 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
378 return SDL_FALSE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
379 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
380 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
381 SDL_bool SDL_HasMMXExt(void) |
804
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
382 { |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
383 if ( SDL_GetCPUFeatures() & CPU_HAS_MMXEXT ) { |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
384 return SDL_TRUE; |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
385 } |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
386 return SDL_FALSE; |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
387 } |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
388 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
389 SDL_bool SDL_Has3DNow(void) |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
390 { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
391 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
|
392 return SDL_TRUE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
393 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
394 return SDL_FALSE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
395 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
396 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
397 SDL_bool SDL_Has3DNowExt(void) |
804
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
398 { |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
399 if ( SDL_GetCPUFeatures() & CPU_HAS_3DNOWEXT ) { |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
400 return SDL_TRUE; |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
401 } |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
402 return SDL_FALSE; |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
403 } |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
404 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
405 SDL_bool SDL_HasSSE(void) |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
406 { |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
407 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
|
408 return SDL_TRUE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
409 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
410 return SDL_FALSE; |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
411 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
412 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
413 SDL_bool SDL_HasSSE2(void) |
804
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
414 { |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
415 if ( SDL_GetCPUFeatures() & CPU_HAS_SSE2 ) { |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
416 return SDL_TRUE; |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
417 } |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
418 return SDL_FALSE; |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
419 } |
b2fda076b02e
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
796
diff
changeset
|
420 |
1426
ef9a9064bff2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
421 SDL_bool SDL_HasAltiVec(void) |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
422 { |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
423 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
|
424 return SDL_TRUE; |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
425 } |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
426 return SDL_FALSE; |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
427 } |
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
428 |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
429 #ifdef TEST_MAIN |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
430 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
431 #include <stdio.h> |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
432 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
433 int main() |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
434 { |
778
8ac3f46f9d09
Date: Tue, 6 Jan 2004 12:42:19 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
435 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
|
436 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
|
437 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
|
438 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
|
439 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
|
440 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
|
441 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
|
442 printf("AltiVec: %d\n", SDL_HasAltiVec()); |
745
71ee03909f42
Greatly simplified the SDL CPU info code
Sam Lantinga <slouken@libsdl.org>
parents:
739
diff
changeset
|
443 return 0; |
739
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
444 } |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
445 |
22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
446 #endif /* TEST_MAIN */ |