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_HasNEON (void)
 
int SDL_GetSystemRAM (void)
 

Detailed Description

CPU feature detection for SDL.

Definition in file SDL_cpuinfo.h.

Macro Definition Documentation

◆ SDL_CACHELINE_SIZE

#define SDL_CACHELINE_SIZE   128

Definition at line 92 of file SDL_cpuinfo.h.

Referenced by SDL_GetCPUCacheLineSize().

Function Documentation

◆ SDL_GetCPUCacheLineSize()

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 556 of file SDL_cpuinfo.c.

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

Referenced by SDL_GetSystemRAM().

557 {
558  const char *cpuType = SDL_GetCPUType();
559  int a, b, c, d;
560  (void) a; (void) b; (void) c; (void) d;
561  if (SDL_strcmp(cpuType, "GenuineIntel") == 0) {
562  cpuid(0x00000001, a, b, c, d);
563  return (((b >> 8) & 0xff) * 8);
564  } else if (SDL_strcmp(cpuType, "AuthenticAMD") == 0) {
565  cpuid(0x80000005, a, b, c, d);
566  return (c & 0xff);
567  } else {
568  /* Just make a guess here... */
569  return SDL_CACHELINE_SIZE;
570  }
571 }
static const char * SDL_GetCPUType(void)
Definition: SDL_cpuinfo.c:445
SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char const char SDL_SCANF_FORMAT_STRING const char return SDL_ThreadFunction const char void return Uint32 return Uint32 SDL_AssertionHandler void SDL_SpinLock SDL_atomic_t int int return SDL_atomic_t return void void void return void return int return SDL_AudioSpec SDL_AudioSpec return int int return return int SDL_RWops int SDL_AudioSpec Uint8 ** d
#define SDL_CACHELINE_SIZE
Definition: SDL_cpuinfo.h:92
const GLubyte * c
#define cpuid(func, a, b, c, d)
Definition: SDL_cpuinfo.c:242
SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char const char SDL_SCANF_FORMAT_STRING const char return SDL_ThreadFunction const char void return Uint32 return Uint32 void
#define SDL_strcmp
GLboolean GLboolean GLboolean GLboolean a
GLboolean GLboolean GLboolean b

◆ SDL_GetCPUCount()

int SDL_GetCPUCount ( void  )

This function returns the number of CPU cores available.

Definition at line 406 of file SDL_cpuinfo.c.

References NULL, and SDL_CPUCount.

Referenced by SDL_GetSystemRAM().

407 {
408  if (!SDL_CPUCount) {
409 #ifndef SDL_CPUINFO_DISABLED
410 #if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)
411  if (SDL_CPUCount <= 0) {
412  SDL_CPUCount = (int)sysconf(_SC_NPROCESSORS_ONLN);
413  }
414 #endif
415 #ifdef HAVE_SYSCTLBYNAME
416  if (SDL_CPUCount <= 0) {
417  size_t size = sizeof(SDL_CPUCount);
418  sysctlbyname("hw.ncpu", &SDL_CPUCount, &size, NULL, 0);
419  }
420 #endif
421 #ifdef __WIN32__
422  if (SDL_CPUCount <= 0) {
423  SYSTEM_INFO info;
424  GetSystemInfo(&info);
425  SDL_CPUCount = info.dwNumberOfProcessors;
426  }
427 #endif
428 #ifdef __OS2__
429  if (SDL_CPUCount <= 0) {
430  DosQuerySysInfo(QSV_NUMPROCESSORS, QSV_NUMPROCESSORS,
431  &SDL_CPUCount, sizeof(SDL_CPUCount) );
432  }
433 #endif
434 #endif
435  /* There has to be at least 1, right? :) */
436  if (SDL_CPUCount <= 0) {
437  SDL_CPUCount = 1;
438  }
439  }
440  return SDL_CPUCount;
441 }
GLsizeiptr size
#define NULL
Definition: begin_code.h:164
static int SDL_CPUCount
Definition: SDL_cpuinfo.c:403

◆ SDL_GetSystemRAM()

int SDL_GetSystemRAM ( void  )

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

Definition at line 697 of file SDL_cpuinfo.c.

References main, NULL, SDL_GetCPUCacheLineSize(), SDL_GetCPUCount(), SDL_GetCPUType(), SDL_Has3DNow(), SDL_HasAltiVec(), SDL_HasAVX(), SDL_HasAVX2(), SDL_HasMMX(), SDL_HasNEON(), SDL_HasRDTSC(), SDL_HasSSE(), SDL_HasSSE2(), SDL_HasSSE3(), SDL_HasSSE41(), SDL_HasSSE42(), and SDL_SystemRAM.

698 {
699  if (!SDL_SystemRAM) {
700 #ifndef SDL_CPUINFO_DISABLED
701 #if defined(HAVE_SYSCONF) && defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE)
702  if (SDL_SystemRAM <= 0) {
703  SDL_SystemRAM = (int)((Sint64)sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE) / (1024*1024));
704  }
705 #endif
706 #ifdef HAVE_SYSCTLBYNAME
707  if (SDL_SystemRAM <= 0) {
708 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
709 #ifdef HW_REALMEM
710  int mib[2] = {CTL_HW, HW_REALMEM};
711 #else
712  /* might only report up to 2 GiB */
713  int mib[2] = {CTL_HW, HW_PHYSMEM};
714 #endif /* HW_REALMEM */
715 #else
716  int mib[2] = {CTL_HW, HW_MEMSIZE};
717 #endif /* __FreeBSD__ || __FreeBSD_kernel__ */
718  Uint64 memsize = 0;
719  size_t len = sizeof(memsize);
720 
721  if (sysctl(mib, 2, &memsize, &len, NULL, 0) == 0) {
722  SDL_SystemRAM = (int)(memsize / (1024*1024));
723  }
724  }
725 #endif
726 #ifdef __WIN32__
727  if (SDL_SystemRAM <= 0) {
728  MEMORYSTATUSEX stat;
729  stat.dwLength = sizeof(stat);
730  if (GlobalMemoryStatusEx(&stat)) {
731  SDL_SystemRAM = (int)(stat.ullTotalPhys / (1024 * 1024));
732  }
733  }
734 #endif
735 #ifdef __OS2__
736  if (SDL_SystemRAM <= 0) {
737  Uint32 sysram = 0;
738  DosQuerySysInfo(QSV_TOTPHYSMEM, QSV_TOTPHYSMEM, &sysram, 4);
739  SDL_SystemRAM = (int) (sysram / 0x100000U);
740  }
741 #endif
742 #endif
743  }
744  return SDL_SystemRAM;
745 }
uint32_t Uint32
Definition: SDL_stdinc.h:181
static int SDL_SystemRAM
Definition: SDL_cpuinfo.c:694
uint64_t Uint64
Definition: SDL_stdinc.h:194
GLenum GLsizei len
#define NULL
Definition: begin_code.h:164
int64_t Sint64
Definition: SDL_stdinc.h:188

◆ SDL_Has3DNow()

SDL_bool SDL_Has3DNow ( void  )

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

Definition at line 641 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_3DNOW.

Referenced by SDL_GetSystemRAM().

642 {
644 }
#define CPU_FEATURE_AVAILABLE(f)
Definition: SDL_cpuinfo.c:621
#define CPU_HAS_3DNOW
Definition: SDL_cpuinfo.c:82

◆ SDL_HasAltiVec()

SDL_bool SDL_HasAltiVec ( void  )

This function returns true if the CPU has AltiVec features.

Definition at line 629 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_ALTIVEC.

Referenced by SDL_GetSystemRAM().

630 {
632 }
#define CPU_HAS_ALTIVEC
Definition: SDL_cpuinfo.c:80
#define CPU_FEATURE_AVAILABLE(f)
Definition: SDL_cpuinfo.c:621

◆ SDL_HasAVX()

SDL_bool SDL_HasAVX ( void  )

This function returns true if the CPU has AVX features.

Definition at line 677 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_AVX.

Referenced by SDL_GetSystemRAM().

678 {
680 }
#define CPU_HAS_AVX
Definition: SDL_cpuinfo.c:88
#define CPU_FEATURE_AVAILABLE(f)
Definition: SDL_cpuinfo.c:621

◆ SDL_HasAVX2()

SDL_bool SDL_HasAVX2 ( void  )

This function returns true if the CPU has AVX2 features.

Definition at line 683 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_AVX2.

Referenced by SDL_GetSystemRAM().

684 {
686 }
#define CPU_FEATURE_AVAILABLE(f)
Definition: SDL_cpuinfo.c:621
#define CPU_HAS_AVX2
Definition: SDL_cpuinfo.c:89

◆ SDL_HasMMX()

SDL_bool SDL_HasMMX ( void  )

This function returns true if the CPU has MMX features.

Definition at line 635 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_MMX.

Referenced by SDL_GetSystemRAM().

636 {
638 }
#define CPU_FEATURE_AVAILABLE(f)
Definition: SDL_cpuinfo.c:621
#define CPU_HAS_MMX
Definition: SDL_cpuinfo.c:81

◆ SDL_HasNEON()

SDL_bool SDL_HasNEON ( void  )

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

Definition at line 689 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_NEON.

Referenced by SDL_GetSystemRAM().

690 {
692 }
#define CPU_FEATURE_AVAILABLE(f)
Definition: SDL_cpuinfo.c:621
#define CPU_HAS_NEON
Definition: SDL_cpuinfo.c:90

◆ SDL_HasRDTSC()

SDL_bool SDL_HasRDTSC ( void  )

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

Definition at line 623 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_RDTSC.

Referenced by SDL_GetSystemRAM().

624 {
626 }
#define CPU_HAS_RDTSC
Definition: SDL_cpuinfo.c:79
#define CPU_FEATURE_AVAILABLE(f)
Definition: SDL_cpuinfo.c:621

◆ SDL_HasSSE()

SDL_bool SDL_HasSSE ( void  )

This function returns true if the CPU has SSE features.

Definition at line 647 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_SSE.

Referenced by SDL_GetSystemRAM().

648 {
650 }
#define CPU_FEATURE_AVAILABLE(f)
Definition: SDL_cpuinfo.c:621
#define CPU_HAS_SSE
Definition: SDL_cpuinfo.c:83

◆ SDL_HasSSE2()

SDL_bool SDL_HasSSE2 ( void  )

This function returns true if the CPU has SSE2 features.

Definition at line 653 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_SSE2.

Referenced by SDL_GetSystemRAM().

654 {
656 }
#define CPU_HAS_SSE2
Definition: SDL_cpuinfo.c:84
#define CPU_FEATURE_AVAILABLE(f)
Definition: SDL_cpuinfo.c:621

◆ SDL_HasSSE3()

SDL_bool SDL_HasSSE3 ( void  )

This function returns true if the CPU has SSE3 features.

Definition at line 659 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_SSE3.

Referenced by SDL_GetSystemRAM().

660 {
662 }
#define CPU_HAS_SSE3
Definition: SDL_cpuinfo.c:85
#define CPU_FEATURE_AVAILABLE(f)
Definition: SDL_cpuinfo.c:621

◆ SDL_HasSSE41()

SDL_bool SDL_HasSSE41 ( void  )

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

Definition at line 665 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_SSE41.

Referenced by SDL_GetSystemRAM().

666 {
668 }
#define CPU_HAS_SSE41
Definition: SDL_cpuinfo.c:86
#define CPU_FEATURE_AVAILABLE(f)
Definition: SDL_cpuinfo.c:621

◆ SDL_HasSSE42()

SDL_bool SDL_HasSSE42 ( void  )

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

Definition at line 671 of file SDL_cpuinfo.c.

References CPU_FEATURE_AVAILABLE, and CPU_HAS_SSE42.

Referenced by SDL_GetSystemRAM().

672 {
674 }
#define CPU_FEATURE_AVAILABLE(f)
Definition: SDL_cpuinfo.c:621
#define CPU_HAS_SSE42
Definition: SDL_cpuinfo.c:87