SDL  2.0
SDL_cpuinfo.h File Reference
#include "SDL_stdinc.h"
#include <immintrin.h>
#include "begin_code.h"
#include "close_code.h"
+ Include dependency graph for SDL_cpuinfo.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define SDL_CACHELINE_SIZE   128

Functions

int SDL_GetCPUCount (void)
int SDL_GetCPUCacheLineSize (void)
SDL_bool SDL_HasRDTSC (void)
SDL_bool SDL_HasAltiVec (void)
SDL_bool SDL_HasMMX (void)
SDL_bool SDL_Has3DNow (void)
SDL_bool SDL_HasSSE (void)
SDL_bool SDL_HasSSE2 (void)
SDL_bool SDL_HasSSE3 (void)
SDL_bool SDL_HasSSE41 (void)
SDL_bool SDL_HasSSE42 (void)
SDL_bool SDL_HasAVX (void)
SDL_bool SDL_HasAVX2 (void)
SDL_bool SDL_HasAVX512F (void)
SDL_bool SDL_HasNEON (void)
int SDL_GetSystemRAM (void)

Detailed Description

CPU feature detection for SDL.

Definition in file SDL_cpuinfo.h.

Macro Definition Documentation

#define SDL_CACHELINE_SIZE   128

Definition at line 95 of file SDL_cpuinfo.h.

Referenced by SDL_GetCPUCacheLineSize().

Function Documentation

int SDL_GetCPUCacheLineSize ( void  )

This function returns the L1 cache line size of the CPU

This is useful for determining multi-threaded structure padding or SIMD prefetch sizes.

Definition at line 573 of file SDL_cpuinfo.c.

References cpuid, d, SDL_CACHELINE_SIZE, SDL_GetCPUType(), SDL_strcmp, and void.

{
const char *cpuType = SDL_GetCPUType();
int a, b, c, d;
(void) a; (void) b; (void) c; (void) d;
if (SDL_strcmp(cpuType, "GenuineIntel") == 0) {
cpuid(0x00000001, a, b, c, d);
return (((b >> 8) & 0xff) * 8);
} else if (SDL_strcmp(cpuType, "AuthenticAMD") == 0) {
cpuid(0x80000005, a, b, c, d);
return (c & 0xff);
} else {
/* Just make a guess here... */
}
}
int SDL_GetCPUCount ( void  )

This function returns the number of CPU cores available.

Definition at line 423 of file SDL_cpuinfo.c.

References NULL, and SDL_CPUCount.

{
if (!SDL_CPUCount) {
#ifndef SDL_CPUINFO_DISABLED
#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)
if (SDL_CPUCount <= 0) {
SDL_CPUCount = (int)sysconf(_SC_NPROCESSORS_ONLN);
}
#endif
#ifdef HAVE_SYSCTLBYNAME
if (SDL_CPUCount <= 0) {
size_t size = sizeof(SDL_CPUCount);
sysctlbyname("hw.ncpu", &SDL_CPUCount, &size, NULL, 0);
}
#endif
#ifdef __WIN32__
if (SDL_CPUCount <= 0) {
SYSTEM_INFO info;
GetSystemInfo(&info);
SDL_CPUCount = info.dwNumberOfProcessors;
}
#endif
#ifdef __OS2__
if (SDL_CPUCount <= 0) {
DosQuerySysInfo(QSV_NUMPROCESSORS, QSV_NUMPROCESSORS,
}
#endif
#endif
/* There has to be at least 1, right? :) */
if (SDL_CPUCount <= 0) {
}
}
return SDL_CPUCount;
}
int SDL_GetSystemRAM ( void  )

This function returns the amount of RAM configured in the system, in MB.

Definition at line 737 of file SDL_cpuinfo.c.

References NULL, and SDL_SystemRAM.

{
if (!SDL_SystemRAM) {
#ifndef SDL_CPUINFO_DISABLED
#if defined(HAVE_SYSCONF) && defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE)
if (SDL_SystemRAM <= 0) {
SDL_SystemRAM = (int)((Sint64)sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE) / (1024*1024));
}
#endif
#ifdef HAVE_SYSCTLBYNAME
if (SDL_SystemRAM <= 0) {
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
#ifdef HW_REALMEM
int mib[2] = {CTL_HW, HW_REALMEM};
#else
/* might only report up to 2 GiB */
int mib[2] = {CTL_HW, HW_PHYSMEM};
#endif /* HW_REALMEM */
#else
int mib[2] = {CTL_HW, HW_MEMSIZE};
#endif /* __FreeBSD__ || __FreeBSD_kernel__ */
Uint64 memsize = 0;
size_t len = sizeof(memsize);
if (sysctl(mib, 2, &memsize, &len, NULL, 0) == 0) {
SDL_SystemRAM = (int)(memsize / (1024*1024));
}
}
#endif
#ifdef __WIN32__
if (SDL_SystemRAM <= 0) {
MEMORYSTATUSEX stat;
stat.dwLength = sizeof(stat);
if (GlobalMemoryStatusEx(&stat)) {
SDL_SystemRAM = (int)(stat.ullTotalPhys / (1024 * 1024));
}
}
#endif
#ifdef __OS2__
if (SDL_SystemRAM <= 0) {
Uint32 sysram = 0;
DosQuerySysInfo(QSV_TOTPHYSMEM, QSV_TOTPHYSMEM, &sysram, 4);
SDL_SystemRAM = (int) (sysram / 0x100000U);
}
#endif
#endif
}
return SDL_SystemRAM;
}
SDL_bool SDL_Has3DNow ( void  )

This function returns true if the CPU has 3DNow! features.

Definition at line 675 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_3DNOW.

SDL_bool SDL_HasAltiVec ( void  )

This function returns true if the CPU has AltiVec features.

Definition at line 663 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_ALTIVEC.

SDL_bool SDL_HasAVX ( void  )

This function returns true if the CPU has AVX features.

Definition at line 711 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_AVX.

SDL_bool SDL_HasAVX2 ( void  )

This function returns true if the CPU has AVX2 features.

Definition at line 717 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_AVX2.

SDL_bool SDL_HasAVX512F ( void  )

This function returns true if the CPU has AVX-512F (foundation) features.

Definition at line 723 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_AVX512F.

SDL_bool SDL_HasMMX ( void  )

This function returns true if the CPU has MMX features.

Definition at line 669 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_MMX.

SDL_bool SDL_HasNEON ( void  )

This function returns true if the CPU has NEON (ARM SIMD) features.

Definition at line 729 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_NEON.

SDL_bool SDL_HasRDTSC ( void  )

This function returns true if the CPU has the RDTSC instruction.

Definition at line 657 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_RDTSC.

SDL_bool SDL_HasSSE ( void  )

This function returns true if the CPU has SSE features.

Definition at line 681 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_SSE.

SDL_bool SDL_HasSSE2 ( void  )

This function returns true if the CPU has SSE2 features.

Definition at line 687 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_SSE2.

SDL_bool SDL_HasSSE3 ( void  )

This function returns true if the CPU has SSE3 features.

Definition at line 693 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_SSE3.

SDL_bool SDL_HasSSE41 ( void  )

This function returns true if the CPU has SSE4.1 features.

Definition at line 699 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_SSE41.

SDL_bool SDL_HasSSE42 ( void  )

This function returns true if the CPU has SSE4.2 features.

Definition at line 705 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_SSE42.