Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2008 Dennis Smit
  4.  * All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the "Software"),
  8.  * to deal in the Software without restriction, including without limitation
  9.  * on the rights to use, copy, modify, merge, publish, distribute, sub
  10.  * license, and/or sell copies of the Software, and to permit persons to whom
  11.  * the Software is furnished to do so, subject to the following conditions:
  12.  *
  13.  * The above copyright notice and this permission notice (including the next
  14.  * paragraph) shall be included in all copies or substantial portions of the
  15.  * Software.
  16.  *
  17.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  18.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19.  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
  20.  * AUTHORS, COPYRIGHT HOLDERS, AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
  21.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  22.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  23.  * USE OR OTHER DEALINGS IN THE SOFTWARE.
  24.  *
  25.  ***************************************************************************/
  26.  
  27. /**
  28.  * @file
  29.  * CPU feature detection.
  30.  *
  31.  * @author Dennis Smit
  32.  * @author Based on the work of Eric Anholt <anholt@FreeBSD.org>
  33.  */
  34.  
  35. #ifndef _UTIL_CPU_DETECT_H
  36. #define _UTIL_CPU_DETECT_H
  37.  
  38.  
  39. #include "pipe/p_compiler.h"
  40. #include "pipe/p_config.h"
  41.  
  42.  
  43. #ifdef  __cplusplus
  44. extern "C" {
  45. #endif
  46.  
  47.  
  48. struct util_cpu_caps {
  49.    unsigned nr_cpus;
  50.  
  51.    /* Feature flags */
  52.    int x86_cpu_type;
  53.    unsigned cacheline;
  54.  
  55.    unsigned has_intel:1;
  56.    unsigned has_tsc:1;
  57.    unsigned has_mmx:1;
  58.    unsigned has_mmx2:1;
  59.    unsigned has_sse:1;
  60.    unsigned has_sse2:1;
  61.    unsigned has_sse3:1;
  62.    unsigned has_ssse3:1;
  63.    unsigned has_sse4_1:1;
  64.    unsigned has_sse4_2:1;
  65.    unsigned has_popcnt:1;
  66.    unsigned has_avx:1;
  67.    unsigned has_f16c:1;
  68.    unsigned has_3dnow:1;
  69.    unsigned has_3dnow_ext:1;
  70.    unsigned has_altivec:1;
  71. };
  72.  
  73. extern struct util_cpu_caps
  74. util_cpu_caps;
  75.  
  76. void util_cpu_detect(void);
  77.  
  78.  
  79. #ifdef  __cplusplus
  80. }
  81. #endif
  82.  
  83.  
  84. #endif /* _UTIL_CPU_DETECT_H */
  85.