diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2013-07-17 20:58:33 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2013-07-17 21:02:02 +0100 |
commit | 6c8b15d321044d4a81cb187cc5e1ac094eb82367 (patch) | |
tree | 111530b131ae9ec6fa87d96a1a0deb241bf6b583 | |
parent | 08cacc265da8c1213d8bf1107168e37d38a3641d (diff) |
sna: Wrap cpuid.h
More our ifdef out of line from the main code into a header file, where
we can also apply a little bit of synatic sugar.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/Makefile.am | 1 | ||||
-rw-r--r-- | src/sna/kgem.c | 15 | ||||
-rw-r--r-- | src/sna/sna_cpu.c | 20 | ||||
-rw-r--r-- | src/sna/sna_cpuid.h | 86 |
4 files changed, 92 insertions, 30 deletions
diff --git a/src/sna/Makefile.am b/src/sna/Makefile.am index 56ad9365..aebbfc21 100644 --- a/src/sna/Makefile.am +++ b/src/sna/Makefile.am @@ -49,6 +49,7 @@ libsna_la_SOURCES = \ sna_blt.c \ sna_composite.c \ sna_cpu.c \ + sna_cpuid.h \ sna_damage.c \ sna_damage.h \ sna_display.c \ diff --git a/src/sna/kgem.c b/src/sna/kgem.c index 8c692659..2a8dddcd 100644 --- a/src/sna/kgem.c +++ b/src/sna/kgem.c @@ -50,6 +50,8 @@ #include <sys/sysinfo.h> #endif +#include "sna_cpuid.h" + static struct kgem_bo * search_linear_cache(struct kgem *kgem, unsigned int num_pages, unsigned flags); @@ -696,9 +698,6 @@ total_ram_size(void) return 0; } -#if HAS_GCC(4, 4) /* for __cpuid_count() */ -#include <cpuid.h> - static unsigned cpu_cache_size__cpuid4(void) { @@ -720,7 +719,7 @@ cpu_cache_size__cpuid4(void) unsigned int llc_size = 0; int cnt = 0; - if (__get_cpuid_max(false, 0) < 4) + if (__get_cpuid_max(BASIC_CPUID, NULL) < 4) return 0; do { @@ -742,14 +741,6 @@ cpu_cache_size__cpuid4(void) return llc_size; } -#else -static unsigned -cpu_cache_size__cpuid4(void) -{ - return 0; -} -#endif - static unsigned cpu_cache_size(void) { diff --git a/src/sna/sna_cpu.c b/src/sna/sna_cpu.c index c96b21f0..23e6bcc0 100644 --- a/src/sna/sna_cpu.c +++ b/src/sna/sna_cpu.c @@ -30,14 +30,7 @@ #endif #include "sna.h" - -#if HAS_GCC(4, 4) - -#include <cpuid.h> - -#ifndef bit_AVX2 -#define bit_AVX2 (1<<5) -#endif +#include "sna_cpuid.h" #define xgetbv(index,eax,edx) \ __asm__ ("xgetbv" : "=a"(eax), "=d"(edx) : "c" (index)) @@ -46,7 +39,7 @@ unsigned sna_cpu_detect(void) { - unsigned max = __get_cpuid_max(false, 0); + unsigned max = __get_cpuid_max(BASIC_CPUID, NULL); unsigned int eax, ebx, ecx, edx; unsigned features = 0; unsigned extra = 0; @@ -94,15 +87,6 @@ unsigned sna_cpu_detect(void) return features; } -#else - -unsigned sna_cpu_detect(void) -{ - return 0; -} - -#endif - char *sna_cpu_features_to_string(unsigned features, char *line) { char *ret = line; diff --git a/src/sna/sna_cpuid.h b/src/sna/sna_cpuid.h new file mode 100644 index 00000000..5a82c893 --- /dev/null +++ b/src/sna/sna_cpuid.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Authors: + * Chris Wilson <chris@chris-wilson.co.uk> + * + */ + +/* Small wrapper around compiler specific implementation details of cpuid */ + +#ifndef SNA_CPUID_H +#define SNA_CPUID_H + +#include "compiler.h" + +#if HAS_GCC(4, 4) /* for __cpuid_count() */ +#include <cpuid.h> +#else +#define __get_cpuid_max(x, y) 0 +#define __cpuid(level, a, b, c, d) +#define __cpuid_count(level, count, a, b, c, d) +#endif + +#define BASIC_CPUID 0x0 +#define EXTENDED_CPUID 0x80000000 + +#ifndef bit_MMX +#define bit_MMX (1 << 23) +#endif + +#ifndef bit_SSE +#define bit_SSE (1 << 25) +#endif + +#ifndef bit_SSE2 +#define bit_SSE2 (1 << 26) +#endif + +#ifndef bit_SSE3 +#define bit_SSE3 (1 << 0) +#endif + +#ifndef bit_SSSE3 +#define bit_SSSE3 (1 << 9) +#endif + +#ifndef bit_SSE4_1 +#define bit_SSE4_1 (1 << 19) +#endif + +#ifndef bit_SSE4_2 +#define bit_SSE4_2 (1 << 20) +#endif + +#ifndef bit_OSXSAVE +#define bit_OSXSAVE (1 << 27) +#endif + +#ifndef bit_AVX +#define bit_AVX (1 << 28) +#endif + +#ifndef bit_AVX2 +#define bit_AVX2 (1<<5) +#endif + +#endif /* SNA_CPUID_H */ |