115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/* 215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot Simple DirectMedia Layer 315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org> 415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot This software is provided 'as-is', without any express or implied 615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot warranty. In no event will the authors be held liable for any damages 715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot arising from the use of this software. 815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot Permission is granted to anyone to use this software for any purpose, 1015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot including commercial applications, and to alter it and redistribute it 1115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot freely, subject to the following restrictions: 1215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 1315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 1. The origin of this software must not be misrepresented; you must not 1415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot claim that you wrote the original software. If you use this software 1515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot in a product, an acknowledgment in the product documentation would be 1615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot appreciated but is not required. 1715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 2. Altered source versions must be plainly marked as such, and must not be 1815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot misrepresented as being the original software. 1915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 3. This notice may not be removed or altered from any source distribution. 2015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot*/ 2115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 2215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 2315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * \file SDL_cpuinfo.h 2415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * 2515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * CPU feature detection for SDL. 2615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 2715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 2815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#ifndef _SDL_cpuinfo_h 2915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#define _SDL_cpuinfo_h 3015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 3115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include "SDL_stdinc.h" 3215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 3315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/* Need to do this here because intrin.h has C++ code in it */ 3415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ 3515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64)) 3615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include <intrin.h> 3715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#ifndef _WIN64 3815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#define __MMX__ 3915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#define __3dNOW__ 4015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif 4115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#define __SSE__ 4215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#define __SSE2__ 4315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#elif defined(__MINGW64_VERSION_MAJOR) 4415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include <intrin.h> 4515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#else 4615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#ifdef __ALTIVEC__ 4715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#if HAVE_ALTIVEC_H && !defined(__APPLE_ALTIVEC__) 4815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include <altivec.h> 4915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#undef pixel 5015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif 5115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif 5215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#ifdef __MMX__ 5315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include <mmintrin.h> 5415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif 5515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#ifdef __3dNOW__ 5615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include <mm3dnow.h> 5715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif 5815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#ifdef __SSE__ 5915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include <xmmintrin.h> 6015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif 6115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#ifdef __SSE2__ 6215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include <emmintrin.h> 6315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif 6415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif 6515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 6615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include "begin_code.h" 6715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/* Set up for C function definitions, even when using C++ */ 6815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#ifdef __cplusplus 6915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern "C" { 7015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif 7115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 7215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/* This is a guess for the cacheline size used for padding. 7315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * Most x86 processors have a 64 byte cache line. 7415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * The 64-bit PowerPC processors have a 128 byte cache line. 7515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * We'll use the larger value to be generally safe. 7615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 7715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#define SDL_CACHELINE_SIZE 128 7815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 7915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 8015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns the number of CPU cores available. 8115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 8215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC int SDLCALL SDL_GetCPUCount(void); 8315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 8415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 8515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns the L1 cache line size of the CPU 8615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * 8715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This is useful for determining multi-threaded structure padding 8815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * or SIMD prefetch sizes. 8915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 9015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void); 9115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 9215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 9315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns true if the CPU has the RDTSC instruction. 9415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 9515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); 9615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 9715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 9815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns true if the CPU has AltiVec features. 9915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 10015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); 10115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 10215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 10315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns true if the CPU has MMX features. 10415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 10515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); 10615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 10715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 10815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns true if the CPU has 3DNow! features. 10915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 11015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); 11115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 11215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 11315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns true if the CPU has SSE features. 11415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 11515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); 11615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 11715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 11815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns true if the CPU has SSE2 features. 11915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 12015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); 12115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 12215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 12315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns true if the CPU has SSE3 features. 12415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 12515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void); 12615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 12715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 12815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns true if the CPU has SSE4.1 features. 12915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 13015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void); 13115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 13215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 13315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns true if the CPU has SSE4.2 features. 13415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 13515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); 13615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 13715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 13815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns true if the CPU has AVX features. 13915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 14015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void); 14115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 14215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/** 14315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot * This function returns the amount of RAM configured in the system, in MB. 14415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot */ 14515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotextern DECLSPEC int SDLCALL SDL_GetSystemRAM(void); 14615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 14715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 14815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/* Ends C function definitions when using C++ */ 14915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#ifdef __cplusplus 15015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot} 15115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif 15215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include "close_code.h" 15315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 15415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#endif /* _SDL_cpuinfo_h */ 15515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot 15615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/* vi: set ts=4 sw=4 expandtab: */ 157