include/SDL_cpuinfo.h
author Sam Lantinga <slouken@libsdl.org>
Fri, 11 Feb 2011 23:02:35 -0800
changeset 5263 e1122f31fec5
parent 5262 b530ef003506
child 5389 24903690f48a
permissions -rw-r--r--
Fixed SSE4 detection, and split it into SSE 4.1 and 4.2
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 1997-2011 Sam Lantinga
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Lesser General Public
     7     License as published by the Free Software Foundation; either
     8     version 2.1 of the License, or (at your option) any later version.
     9 
    10     This library is distributed in the hope that it will be useful,
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13     Lesser General Public License for more details.
    14 
    15     You should have received a copy of the GNU Lesser General Public
    16     License along with this library; if not, write to the Free Software
    17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    18 
    19     Sam Lantinga
    20     slouken@libsdl.org
    21 */
    22 
    23 /**
    24  *  \file SDL_cpuinfo.h
    25  *  
    26  *  CPU feature detection for SDL.
    27  */
    28 
    29 #ifndef _SDL_cpuinfo_h
    30 #define _SDL_cpuinfo_h
    31 
    32 #include "SDL_stdinc.h"
    33 
    34 #include "begin_code.h"
    35 /* Set up for C function definitions, even when using C++ */
    36 #ifdef __cplusplus
    37 /* *INDENT-OFF* */
    38 extern "C" {
    39 /* *INDENT-ON* */
    40 #endif
    41 
    42 /* This is a guess for the cacheline size used for padding.
    43  * Most x86 processors have a 64 byte cache line.
    44  * The 64-bit PowerPC processors have a 128 byte cache line.
    45  * We'll use the larger value to be generally safe.
    46  */
    47 #define SDL_CACHELINE_SIZE  128
    48 
    49 /**
    50  *  This function returns the number of CPU cores available.
    51  */
    52 extern DECLSPEC int SDLCALL SDL_GetCPUCount(void);
    53 
    54 /**
    55  *  This function returns the L1 cache line size of the CPU
    56  *
    57  *  This is useful for determining multi-threaded structure padding
    58  *  or SIMD prefetch sizes.
    59  */
    60 extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void);
    61 
    62 /**
    63  *  This function returns true if the CPU has the RDTSC instruction.
    64  */
    65 extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void);
    66 
    67 /**
    68  *  This function returns true if the CPU has MMX features.
    69  */
    70 extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void);
    71 
    72 /**
    73  *  This function returns true if the CPU has SSE features.
    74  */
    75 extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void);
    76 
    77 /**
    78  *  This function returns true if the CPU has SSE2 features.
    79  */
    80 extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void);
    81 
    82 /**
    83  *  This function returns true if the CPU has SSE3 features.
    84  */
    85 extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void);
    86 
    87 /**
    88  *  This function returns true if the CPU has SSE4.1 features.
    89  */
    90 extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void);
    91 
    92 /**
    93  *  This function returns true if the CPU has SSE4.2 features.
    94  */
    95 extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void);
    96 
    97 
    98 /* Ends C function definitions when using C++ */
    99 #ifdef __cplusplus
   100 /* *INDENT-OFF* */
   101 }
   102 /* *INDENT-ON* */
   103 #endif
   104 #include "close_code.h"
   105 
   106 #endif /* _SDL_cpuinfo_h */
   107 
   108 /* vi: set ts=4 sw=4 expandtab: */