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