[email protected] | 55508c4 | 2012-06-12 08:29:32 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
[email protected] | de8d2667 | 2008-09-25 22:08:44 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
4 | |||||
5 | #ifndef BASE_CPU_H_ | ||||
6 | #define BASE_CPU_H_ | ||||
7 | |||||
8 | #include <string> | ||||
9 | |||||
[email protected] | 0bea725 | 2011-08-05 15:34:00 | [diff] [blame] | 10 | #include "base/base_export.h" |
[email protected] | 90509cb | 2011-03-25 18:46:38 | [diff] [blame] | 11 | |
[email protected] | de8d2667 | 2008-09-25 22:08:44 | [diff] [blame] | 12 | namespace base { |
13 | |||||
14 | // Query information about the processor. | ||||
[email protected] | 0bea725 | 2011-08-05 15:34:00 | [diff] [blame] | 15 | class BASE_EXPORT CPU { |
[email protected] | de8d2667 | 2008-09-25 22:08:44 | [diff] [blame] | 16 | public: |
17 | // Constructor | ||||
18 | CPU(); | ||||
19 | |||||
[email protected] | 5016a9dd | 2013-02-02 01:10:02 | [diff] [blame^] | 20 | enum IntelMicroArchitecture { |
21 | PENTIUM, | ||||
22 | SSE, | ||||
23 | SSE2, | ||||
24 | SSE3, | ||||
25 | SSSE3, | ||||
26 | SSE41, | ||||
27 | SSE42, | ||||
28 | AVX, | ||||
29 | MAX_INTEL_MICRO_ARCHITECTURE | ||||
30 | }; | ||||
31 | |||||
[email protected] | de8d2667 | 2008-09-25 22:08:44 | [diff] [blame] | 32 | // Accessors for CPU information. |
33 | const std::string& vendor_name() const { return cpu_vendor_; } | ||||
34 | int stepping() const { return stepping_; } | ||||
35 | int model() const { return model_; } | ||||
36 | int family() const { return family_; } | ||||
37 | int type() const { return type_; } | ||||
38 | int extended_model() const { return ext_model_; } | ||||
39 | int extended_family() const { return ext_family_; } | ||||
[email protected] | 55508c4 | 2012-06-12 08:29:32 | [diff] [blame] | 40 | bool has_mmx() const { return has_mmx_; } |
41 | bool has_sse() const { return has_sse_; } | ||||
42 | bool has_sse2() const { return has_sse2_; } | ||||
43 | bool has_sse3() const { return has_sse3_; } | ||||
44 | bool has_ssse3() const { return has_ssse3_; } | ||||
45 | bool has_sse41() const { return has_sse41_; } | ||||
46 | bool has_sse42() const { return has_sse42_; } | ||||
[email protected] | 5016a9dd | 2013-02-02 01:10:02 | [diff] [blame^] | 47 | bool has_avx() const { return has_avx_; } |
48 | IntelMicroArchitecture GetIntelMicroArchitecture() const; | ||||
[email protected] | 595d159 | 2012-10-04 21:05:23 | [diff] [blame] | 49 | const std::string& cpu_brand() const { return cpu_brand_; } |
[email protected] | de8d2667 | 2008-09-25 22:08:44 | [diff] [blame] | 50 | |
51 | private: | ||||
52 | // Query the processor for CPUID information. | ||||
53 | void Initialize(); | ||||
54 | |||||
55 | int type_; // process type | ||||
56 | int family_; // family of the processor | ||||
57 | int model_; // model of processor | ||||
58 | int stepping_; // processor revision number | ||||
59 | int ext_model_; | ||||
60 | int ext_family_; | ||||
[email protected] | 7e6d42b | 2011-02-16 18:51:58 | [diff] [blame] | 61 | bool has_mmx_; |
62 | bool has_sse_; | ||||
63 | bool has_sse2_; | ||||
64 | bool has_sse3_; | ||||
65 | bool has_ssse3_; | ||||
66 | bool has_sse41_; | ||||
67 | bool has_sse42_; | ||||
[email protected] | 5016a9dd | 2013-02-02 01:10:02 | [diff] [blame^] | 68 | bool has_avx_; |
[email protected] | de8d2667 | 2008-09-25 22:08:44 | [diff] [blame] | 69 | std::string cpu_vendor_; |
[email protected] | 595d159 | 2012-10-04 21:05:23 | [diff] [blame] | 70 | std::string cpu_brand_; |
[email protected] | de8d2667 | 2008-09-25 22:08:44 | [diff] [blame] | 71 | }; |
72 | |||||
73 | } // namespace base | ||||
74 | |||||
75 | #endif // BASE_CPU_H_ |