blob: 8c3c06c0444416dbc87e1ae0754e65fbca8c292f [file] [log] [blame]
[email protected]55508c42012-06-12 08:29:321// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]de8d26672008-09-25 22:08:442// 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]0bea7252011-08-05 15:34:0010#include "base/base_export.h"
[email protected]90509cb2011-03-25 18:46:3811
[email protected]de8d26672008-09-25 22:08:4412namespace base {
13
14// Query information about the processor.
[email protected]0bea7252011-08-05 15:34:0015class BASE_EXPORT CPU {
[email protected]de8d26672008-09-25 22:08:4416 public:
17 // Constructor
18 CPU();
19
[email protected]5016a9dd2013-02-02 01:10:0220 enum IntelMicroArchitecture {
21 PENTIUM,
22 SSE,
23 SSE2,
24 SSE3,
25 SSSE3,
26 SSE41,
27 SSE42,
28 AVX,
fbarchard0ce41ae2015-10-02 03:23:1929 AVX2,
[email protected]5016a9dd2013-02-02 01:10:0230 MAX_INTEL_MICRO_ARCHITECTURE
31 };
32
[email protected]de8d26672008-09-25 22:08:4433 // Accessors for CPU information.
34 const std::string& vendor_name() const { return cpu_vendor_; }
[email protected]5c8f89f692013-07-18 11:13:2835 int signature() const { return signature_; }
[email protected]de8d26672008-09-25 22:08:4436 int stepping() const { return stepping_; }
37 int model() const { return model_; }
38 int family() const { return family_; }
39 int type() const { return type_; }
40 int extended_model() const { return ext_model_; }
41 int extended_family() const { return ext_family_; }
[email protected]55508c42012-06-12 08:29:3242 bool has_mmx() const { return has_mmx_; }
43 bool has_sse() const { return has_sse_; }
44 bool has_sse2() const { return has_sse2_; }
45 bool has_sse3() const { return has_sse3_; }
46 bool has_ssse3() const { return has_ssse3_; }
47 bool has_sse41() const { return has_sse41_; }
48 bool has_sse42() const { return has_sse42_; }
[email protected]5016a9dd2013-02-02 01:10:0249 bool has_avx() const { return has_avx_; }
fbarchard0ce41ae2015-10-02 03:23:1950 bool has_avx2() const { return has_avx2_; }
[email protected]b54d16d2013-12-02 16:15:0351 bool has_aesni() const { return has_aesni_; }
[email protected]aa312812013-04-30 19:46:0552 bool has_non_stop_time_stamp_counter() const {
53 return has_non_stop_time_stamp_counter_;
54 }
[email protected]c37c1a8c2014-08-08 08:45:2455 // has_broken_neon is only valid on ARM chips. If true, it indicates that we
56 // believe that the NEON unit on the current CPU is flawed and cannot execute
57 // some code. See https://code.google.com/p/chromium/issues/detail?id=341598
58 bool has_broken_neon() const { return has_broken_neon_; }
59
[email protected]5016a9dd2013-02-02 01:10:0260 IntelMicroArchitecture GetIntelMicroArchitecture() const;
[email protected]595d1592012-10-04 21:05:2361 const std::string& cpu_brand() const { return cpu_brand_; }
[email protected]de8d26672008-09-25 22:08:4462
63 private:
64 // Query the processor for CPUID information.
65 void Initialize();
66
[email protected]5c8f89f692013-07-18 11:13:2867 int signature_; // raw form of type, family, model, and stepping
[email protected]de8d26672008-09-25 22:08:4468 int type_; // process type
69 int family_; // family of the processor
70 int model_; // model of processor
71 int stepping_; // processor revision number
72 int ext_model_;
73 int ext_family_;
[email protected]7e6d42b2011-02-16 18:51:5874 bool has_mmx_;
75 bool has_sse_;
76 bool has_sse2_;
77 bool has_sse3_;
78 bool has_ssse3_;
79 bool has_sse41_;
80 bool has_sse42_;
[email protected]5016a9dd2013-02-02 01:10:0281 bool has_avx_;
fbarchard0ce41ae2015-10-02 03:23:1982 bool has_avx2_;
[email protected]b54d16d2013-12-02 16:15:0383 bool has_aesni_;
[email protected]aa312812013-04-30 19:46:0584 bool has_non_stop_time_stamp_counter_;
[email protected]c37c1a8c2014-08-08 08:45:2485 bool has_broken_neon_;
[email protected]de8d26672008-09-25 22:08:4486 std::string cpu_vendor_;
[email protected]595d1592012-10-04 21:05:2387 std::string cpu_brand_;
[email protected]de8d26672008-09-25 22:08:4488};
89
90} // namespace base
91
92#endif // BASE_CPU_H_