blob: 2c6caeafdd01e04e41a7703a86cb350d1eec915c [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.
Thiago Farinaba7d2a422017-06-17 00:18:4915class BASE_EXPORT CPU final {
[email protected]de8d26672008-09-25 22:08:4416 public:
[email protected]de8d26672008-09-25 22:08:4417 CPU();
18
[email protected]5016a9dd2013-02-02 01:10:0219 enum IntelMicroArchitecture {
20 PENTIUM,
21 SSE,
22 SSE2,
23 SSE3,
24 SSSE3,
25 SSE41,
26 SSE42,
27 AVX,
fbarchard0ce41ae2015-10-02 03:23:1928 AVX2,
[email protected]5016a9dd2013-02-02 01:10:0229 MAX_INTEL_MICRO_ARCHITECTURE
30 };
31
[email protected]de8d26672008-09-25 22:08:4432 // Accessors for CPU information.
33 const std::string& vendor_name() const { return cpu_vendor_; }
[email protected]5c8f89f692013-07-18 11:13:2834 int signature() const { return signature_; }
[email protected]de8d26672008-09-25 22:08:4435 int stepping() const { return stepping_; }
36 int model() const { return model_; }
37 int family() const { return family_; }
38 int type() const { return type_; }
39 int extended_model() const { return ext_model_; }
40 int extended_family() const { return ext_family_; }
[email protected]55508c42012-06-12 08:29:3241 bool has_mmx() const { return has_mmx_; }
42 bool has_sse() const { return has_sse_; }
43 bool has_sse2() const { return has_sse2_; }
44 bool has_sse3() const { return has_sse3_; }
45 bool has_ssse3() const { return has_ssse3_; }
46 bool has_sse41() const { return has_sse41_; }
47 bool has_sse42() const { return has_sse42_; }
ilevyb7d2f4082016-10-30 20:46:5748 bool has_popcnt() const { return has_popcnt_; }
[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
[email protected]5016a9dd2013-02-02 01:10:0256 IntelMicroArchitecture GetIntelMicroArchitecture() const;
[email protected]595d1592012-10-04 21:05:2357 const std::string& cpu_brand() const { return cpu_brand_; }
[email protected]de8d26672008-09-25 22:08:4458
59 private:
60 // Query the processor for CPUID information.
61 void Initialize();
62
[email protected]5c8f89f692013-07-18 11:13:2863 int signature_; // raw form of type, family, model, and stepping
[email protected]de8d26672008-09-25 22:08:4464 int type_; // process type
65 int family_; // family of the processor
66 int model_; // model of processor
67 int stepping_; // processor revision number
68 int ext_model_;
69 int ext_family_;
[email protected]7e6d42b2011-02-16 18:51:5870 bool has_mmx_;
71 bool has_sse_;
72 bool has_sse2_;
73 bool has_sse3_;
74 bool has_ssse3_;
75 bool has_sse41_;
76 bool has_sse42_;
ilevyb7d2f4082016-10-30 20:46:5777 bool has_popcnt_;
[email protected]5016a9dd2013-02-02 01:10:0278 bool has_avx_;
fbarchard0ce41ae2015-10-02 03:23:1979 bool has_avx2_;
[email protected]b54d16d2013-12-02 16:15:0380 bool has_aesni_;
[email protected]aa312812013-04-30 19:46:0581 bool has_non_stop_time_stamp_counter_;
[email protected]de8d26672008-09-25 22:08:4482 std::string cpu_vendor_;
[email protected]595d1592012-10-04 21:05:2383 std::string cpu_brand_;
[email protected]de8d26672008-09-25 22:08:4484};
85
86} // namespace base
87
88#endif // BASE_CPU_H_