/* 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 int main() { printf("MMX: %d\n", SDL_HasMMX()); printf("3DNow: %d\n", SDL_Has3DNow()); printf("SSE: %d\n", SDL_HasSSE()); } #endif /* TEST_MAIN */