Mercurial > sdl-ios-xcode
diff src/cpuinfo/SDL_cpuinfo.c @ 739:22dbf364c017
Added SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE() in SDL_cpuinfo.h
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 18 Nov 2003 01:27:06 +0000 |
parents | |
children | 71ee03909f42 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cpuinfo/SDL_cpuinfo.c Tue Nov 18 01:27:06 2003 +0000 @@ -0,0 +1,96 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifdef SAVE_RCSID +static char rcsid = + "@(#) $Id$"; +#endif + +/* CPU feature detection for SDL */ + +#include "SDL.h" +//#include "SDL_cpuinfo.h" + +#define CPU_HAS_MMX 0x00000001 +#define CPU_HAS_3DNOW 0x00000002 +#define CPU_HAS_SSE 0x00000004 + +/* These functions come from SciTech's PM library */ +extern int CPU_haveMMX(); +extern int CPU_have3DNow(); +extern int CPU_haveSSE(); + +static Uint32 SDL_CPUFeatures = 0xFFFFFFFF; + +static Uint32 SDL_GetCPUFeatures() +{ + if ( SDL_CPUFeatures == 0xFFFFFFFF ) { + SDL_CPUFeatures = 0; + if ( CPU_haveMMX() ) { + SDL_CPUFeatures |= CPU_HAS_MMX; + } + if ( CPU_have3DNow() ) { + SDL_CPUFeatures |= CPU_HAS_3DNOW; + } + if ( CPU_haveSSE() ) { + SDL_CPUFeatures |= CPU_HAS_SSE; + } + } + return SDL_CPUFeatures; +} + +SDL_bool SDL_HasMMX() +{ + if ( SDL_GetCPUFeatures() & CPU_HAS_MMX ) { + return SDL_TRUE; + } + return SDL_FALSE; +} + +SDL_bool SDL_Has3DNow() +{ + if ( SDL_GetCPUFeatures() & CPU_HAS_3DNOW ) { + return SDL_TRUE; + } + return SDL_FALSE; +} + +SDL_bool SDL_HasSSE() +{ + if ( SDL_GetCPUFeatures() & CPU_HAS_SSE ) { + return SDL_TRUE; + } + return SDL_FALSE; +} + +#ifdef TEST_MAIN + +#include <stdio.h> + +int main() +{ + printf("MMX: %d\n", SDL_HasMMX()); + printf("3DNow: %d\n", SDL_Has3DNow()); + printf("SSE: %d\n", SDL_HasSSE()); +} + +#endif /* TEST_MAIN */