v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
cpu.h
Go to the documentation of this file.
1// Copyright 2006-2013 the V8 project authors. All rights reserved.
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 V8_BASE_CPU_H_
6#define V8_BASE_CPU_H_
7
8// This module contains the architecture-specific code. This make the rest of
9// the code less dependent on differences between different processor
10// architecture.
11// The classes have the same definition for all architectures. The
12// implementation for a particular architecture is put in cpu_<arch>.cc.
13// The build system then uses the implementation for the target architecture.
14//
15
17#include "src/base/macros.h"
18
19namespace v8 {
20namespace base {
21
22// ----------------------------------------------------------------------------
23// CPU
24//
25// Query information about the processor.
26//
27// This class also has static methods for the architecture specific functions.
28// Add methods here to cope with differences between the supported
29// architectures. For each architecture the file cpu_<arch>.cc contains the
30// implementation of these static functions.
31
32class V8_BASE_EXPORT CPU final {
33 public:
34 CPU();
35
36 // x86 CPUID information
37 const char* vendor() const { return vendor_; }
38 int stepping() const { return stepping_; }
39 int model() const { return model_; }
40 int ext_model() const { return ext_model_; }
41 int family() const { return family_; }
42 int ext_family() const { return ext_family_; }
43 int type() const { return type_; }
44
45 // arm implementer/part information
46 int implementer() const { return implementer_; }
47 static const int kArm = 0x41;
48 static const int kNvidia = 0x4e;
49 static const int kQualcomm = 0x51;
50 int architecture() const { return architecture_; }
51 int variant() const { return variant_; }
52 static const int kNvidiaDenver = 0x0;
53 int part() const { return part_; }
54
55 // ARM-specific part codes
56 static const int kArmCortexA5 = 0xc05;
57 static const int kArmCortexA7 = 0xc07;
58 static const int kArmCortexA8 = 0xc08;
59 static const int kArmCortexA9 = 0xc09;
60 static const int kArmCortexA12 = 0xc0c;
61 static const int kArmCortexA15 = 0xc0f;
62
63 // Denver-specific part code
64 static const int kNvidiaDenverV10 = 0x002;
65
66 // PPC-specific part codes
67 enum { kPPCPower8, kPPCPower9, kPPCPower10 };
68
69 // General features
70 bool has_fpu() const { return has_fpu_; }
71 int icache_line_size() const { return icache_line_size_; }
72 int dcache_line_size() const { return dcache_line_size_; }
73 static const int kUnknownCacheLineSize = 0;
74
75 // x86 features
76 bool has_cmov() const { return has_cmov_; }
77 bool has_sahf() const { return has_sahf_; }
78 bool has_mmx() const { return has_mmx_; }
79 bool has_sse() const { return has_sse_; }
80 bool has_sse2() const { return has_sse2_; }
81 bool has_sse3() const { return has_sse3_; }
82 bool has_ssse3() const { return has_ssse3_; }
83 bool has_sse41() const { return has_sse41_; }
84 bool has_sse42() const { return has_sse42_; }
85 bool has_osxsave() const { return has_osxsave_; }
86 bool has_avx() const { return has_avx_; }
87 bool has_avx2() const { return has_avx2_; }
88 bool has_avx_vnni() const { return has_avx_vnni_; }
89 bool has_avx_vnni_int8() const { return has_avx_vnni_int8_; }
90 bool has_fma3() const { return has_fma3_; }
91 bool has_f16c() const { return has_f16c_; }
92 bool has_bmi1() const { return has_bmi1_; }
93 bool has_bmi2() const { return has_bmi2_; }
94 bool has_lzcnt() const { return has_lzcnt_; }
95 bool has_popcnt() const { return has_popcnt_; }
96 bool is_atom() const { return is_atom_; }
97 bool has_intel_jcc_erratum() const { return has_intel_jcc_erratum_; }
98 bool has_cetss() const { return has_cetss_; }
100 return has_non_stop_time_stamp_counter_;
101 }
102 bool is_running_in_vm() const { return is_running_in_vm_; }
104 return num_virtual_address_bits_ != kUnknownNumVirtualAddressBits;
105 }
107 DCHECK(exposes_num_virtual_address_bits());
108 return num_virtual_address_bits_;
109 }
110 static const int kUnknownNumVirtualAddressBits = 0;
111
112 // arm features
113 bool has_idiva() const { return has_idiva_; }
114 bool has_neon() const { return has_neon_; }
115 bool has_thumb2() const { return has_thumb2_; }
116 bool has_vfp() const { return has_vfp_; }
117 bool has_vfp3() const { return has_vfp3_; }
118 bool has_vfp3_d32() const { return has_vfp3_d32_; }
119 bool has_jscvt() const { return has_jscvt_; }
120 bool has_dot_prod() const { return has_dot_prod_; }
121 bool has_lse() const { return has_lse_; }
122 bool has_mte() const { return has_mte_; }
123 bool has_sha3() const { return has_sha3_; }
124 bool has_pmull1q() const { return has_pmull1q_; }
125 bool has_fp16() const { return has_fp16_; }
126
127 // mips features
128 bool is_fp64_mode() const { return is_fp64_mode_; }
129 bool has_msa() const { return has_msa_; }
130
131 // riscv-specific part codes
132 bool has_rvv() const { return has_rvv_; }
133 bool has_zba() const { return has_zba_; }
134 bool has_zbb() const { return has_zbb_; }
135 bool has_zbs() const { return has_zbs_; }
136 enum class RV_MMU_MODE {
137 kRiscvSV39,
138 kRiscvSV48,
139 kRiscvSV57,
140 };
141 RV_MMU_MODE riscv_mmu() const { return riscv_mmu_; }
142
143 private:
144#if defined(V8_OS_STARBOARD)
145 bool StarboardDetectCPU();
146#endif
147 char vendor_[13];
153 int type_;
157 int part_;
207};
208
209} // namespace base
210} // namespace v8
211
212#endif // V8_BASE_CPU_H_
#define V8_BASE_EXPORT
Definition base-export.h:26
bool has_vfp() const
Definition cpu.h:116
bool has_sse2_
Definition cpu.h:166
bool has_jscvt_
Definition cpu.h:191
bool has_avx_vnni_
Definition cpu.h:177
int architecture() const
Definition cpu.h:50
int part() const
Definition cpu.h:53
const char * vendor() const
Definition cpu.h:37
bool has_intel_jcc_erratum_
Definition cpu.h:172
int part_
Definition cpu.h:157
bool has_sse_
Definition cpu.h:165
int architecture_
Definition cpu.h:155
bool has_fpu() const
Definition cpu.h:70
bool has_vfp3_d32_
Definition cpu.h:190
bool has_avx_vnni_int8_
Definition cpu.h:178
int num_virtual_address_bits() const
Definition cpu.h:106
bool has_intel_jcc_erratum() const
Definition cpu.h:97
bool has_pmull1q_
Definition cpu.h:196
bool has_neon() const
Definition cpu.h:114
bool has_osxsave_
Definition cpu.h:174
bool has_vfp3_
Definition cpu.h:189
bool is_running_in_vm() const
Definition cpu.h:102
bool has_lzcnt_
Definition cpu.h:183
int ext_model_
Definition cpu.h:150
bool has_sse42() const
Definition cpu.h:84
int type_
Definition cpu.h:153
bool exposes_num_virtual_address_bits() const
Definition cpu.h:103
int num_virtual_address_bits_
Definition cpu.h:160
int implementer() const
Definition cpu.h:46
bool has_fma3() const
Definition cpu.h:90
bool has_fp16_
Definition cpu.h:197
bool has_sahf() const
Definition cpu.h:77
bool has_sse() const
Definition cpu.h:79
int stepping_
Definition cpu.h:148
RV_MMU_MODE riscv_mmu() const
Definition cpu.h:141
bool has_f16c_
Definition cpu.h:180
int implementer_
Definition cpu.h:154
bool has_zba() const
Definition cpu.h:133
bool has_fma3_
Definition cpu.h:179
int icache_line_size_
Definition cpu.h:158
bool has_sha3() const
Definition cpu.h:123
bool has_vfp_
Definition cpu.h:188
bool has_lse_
Definition cpu.h:193
int dcache_line_size() const
Definition cpu.h:72
bool has_avx() const
Definition cpu.h:86
int family() const
Definition cpu.h:41
bool has_lzcnt() const
Definition cpu.h:94
bool is_running_in_vm_
Definition cpu.h:200
bool has_mte() const
Definition cpu.h:122
bool has_avx2_
Definition cpu.h:176
bool has_osxsave() const
Definition cpu.h:85
int icache_line_size() const
Definition cpu.h:71
bool has_ssse3() const
Definition cpu.h:82
bool has_sse42_
Definition cpu.h:170
bool has_rvv() const
Definition cpu.h:132
int ext_family_
Definition cpu.h:152
int family_
Definition cpu.h:151
bool is_atom() const
Definition cpu.h:96
bool has_bmi2_
Definition cpu.h:182
bool has_dot_prod_
Definition cpu.h:192
bool has_idiva() const
Definition cpu.h:113
bool has_mmx() const
Definition cpu.h:78
bool has_vfp3() const
Definition cpu.h:117
int dcache_line_size_
Definition cpu.h:159
bool has_msa_
Definition cpu.h:201
bool has_zbs() const
Definition cpu.h:135
bool has_mmx_
Definition cpu.h:164
bool has_avx2() const
Definition cpu.h:87
bool has_popcnt() const
Definition cpu.h:95
bool has_dot_prod() const
Definition cpu.h:120
bool has_non_stop_time_stamp_counter() const
Definition cpu.h:99
bool has_pmull1q() const
Definition cpu.h:124
bool has_idiva_
Definition cpu.h:185
bool has_neon_
Definition cpu.h:186
int stepping() const
Definition cpu.h:38
int variant() const
Definition cpu.h:51
bool has_zbs_
Definition cpu.h:206
bool has_sse3_
Definition cpu.h:167
bool has_zba_
Definition cpu.h:204
bool has_sha3_
Definition cpu.h:195
RV_MMU_MODE riscv_mmu_
Definition cpu.h:202
bool has_bmi1_
Definition cpu.h:181
int ext_family() const
Definition cpu.h:42
bool has_sse3() const
Definition cpu.h:81
bool is_fp64_mode() const
Definition cpu.h:128
bool has_sahf_
Definition cpu.h:163
bool is_atom_
Definition cpu.h:171
bool has_lse() const
Definition cpu.h:121
bool has_zbb() const
Definition cpu.h:134
bool has_bmi2() const
Definition cpu.h:93
bool has_fpu_
Definition cpu.h:161
bool has_avx_vnni_int8() const
Definition cpu.h:89
bool has_mte_
Definition cpu.h:194
int model_
Definition cpu.h:149
bool has_popcnt_
Definition cpu.h:184
bool has_cetss_
Definition cpu.h:173
bool has_rvv_
Definition cpu.h:203
bool has_avx_
Definition cpu.h:175
int model() const
Definition cpu.h:39
bool has_bmi1() const
Definition cpu.h:92
bool has_f16c() const
Definition cpu.h:91
bool has_non_stop_time_stamp_counter_
Definition cpu.h:199
bool has_thumb2_
Definition cpu.h:187
bool has_avx_vnni() const
Definition cpu.h:88
bool has_msa() const
Definition cpu.h:129
bool has_zbb_
Definition cpu.h:205
int ext_model() const
Definition cpu.h:40
bool has_fp16() const
Definition cpu.h:125
bool has_sse41() const
Definition cpu.h:83
bool has_sse41_
Definition cpu.h:169
bool is_fp64_mode_
Definition cpu.h:198
bool has_cetss() const
Definition cpu.h:98
bool has_ssse3_
Definition cpu.h:168
bool has_jscvt() const
Definition cpu.h:119
int type() const
Definition cpu.h:43
bool has_sse2() const
Definition cpu.h:80
bool has_cmov() const
Definition cpu.h:76
bool has_thumb2() const
Definition cpu.h:115
bool has_cmov_
Definition cpu.h:162
int variant_
Definition cpu.h:156
bool has_vfp3_d32() const
Definition cpu.h:118
const ObjectRef type_
digit_t ** part_
Definition mul-fft.cc:476
#define DCHECK(condition)
Definition logging.h:482