Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/hotspot/cpu/x86/globals_x86.hpp
41144 views
1
/*
2
* Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
25
#ifndef CPU_X86_GLOBALS_X86_HPP
26
#define CPU_X86_GLOBALS_X86_HPP
27
28
#include "utilities/globalDefinitions.hpp"
29
#include "utilities/macros.hpp"
30
31
// Sets the default values for platform dependent flags used by the runtime system.
32
// (see globals.hpp)
33
34
define_pd_global(bool, ImplicitNullChecks, true); // Generate code for implicit null checks
35
define_pd_global(bool, TrapBasedNullChecks, false); // Not needed on x86.
36
define_pd_global(bool, UncommonNullCast, true); // Uncommon-trap NULLs passed to check cast
37
38
define_pd_global(uintx, CodeCacheSegmentSize, 64 COMPILER1_AND_COMPILER2_PRESENT(+64)); // Tiered compilation has large code-entry alignment.
39
// See 4827828 for this change. There is no globals_core_i486.hpp. I can't
40
// assign a different value for C2 without touching a number of files. Use
41
// #ifdef to minimize the change as it's late in Mantis. -- FIXME.
42
// c1 doesn't have this problem because the fix to 4858033 assures us
43
// the the vep is aligned at CodeEntryAlignment whereas c2 only aligns
44
// the uep and the vep doesn't get real alignment but just slops on by
45
// only assured that the entry instruction meets the 5 byte size requirement.
46
#if COMPILER2_OR_JVMCI
47
define_pd_global(intx, CodeEntryAlignment, 32);
48
#else
49
define_pd_global(intx, CodeEntryAlignment, 16);
50
#endif // COMPILER2_OR_JVMCI
51
define_pd_global(intx, OptoLoopAlignment, 16);
52
define_pd_global(intx, InlineFrequencyCount, 100);
53
define_pd_global(intx, InlineSmallCode, 1000);
54
55
#define DEFAULT_STACK_YELLOW_PAGES (NOT_WINDOWS(2) WINDOWS_ONLY(3))
56
#define DEFAULT_STACK_RED_PAGES (1)
57
#define DEFAULT_STACK_RESERVED_PAGES (NOT_WINDOWS(1) WINDOWS_ONLY(0))
58
59
#define MIN_STACK_YELLOW_PAGES DEFAULT_STACK_YELLOW_PAGES
60
#define MIN_STACK_RED_PAGES DEFAULT_STACK_RED_PAGES
61
#define MIN_STACK_RESERVED_PAGES (0)
62
63
#ifdef _LP64
64
// Java_java_net_SocketOutputStream_socketWrite0() uses a 64k buffer on the
65
// stack if compiled for unix and LP64. To pass stack overflow tests we need
66
// 20 shadow pages.
67
#define DEFAULT_STACK_SHADOW_PAGES (NOT_WIN64(20) WIN64_ONLY(7) DEBUG_ONLY(+2))
68
// For those clients that do not use write socket, we allow
69
// the min range value to be below that of the default
70
#define MIN_STACK_SHADOW_PAGES (NOT_WIN64(10) WIN64_ONLY(7) DEBUG_ONLY(+2))
71
#else
72
#define DEFAULT_STACK_SHADOW_PAGES (4 DEBUG_ONLY(+5))
73
#define MIN_STACK_SHADOW_PAGES DEFAULT_STACK_SHADOW_PAGES
74
#endif // _LP64
75
76
define_pd_global(intx, StackYellowPages, DEFAULT_STACK_YELLOW_PAGES);
77
define_pd_global(intx, StackRedPages, DEFAULT_STACK_RED_PAGES);
78
define_pd_global(intx, StackShadowPages, DEFAULT_STACK_SHADOW_PAGES);
79
define_pd_global(intx, StackReservedPages, DEFAULT_STACK_RESERVED_PAGES);
80
81
define_pd_global(bool, RewriteBytecodes, true);
82
define_pd_global(bool, RewriteFrequentPairs, true);
83
84
define_pd_global(uintx, TypeProfileLevel, 111);
85
86
define_pd_global(bool, CompactStrings, true);
87
88
define_pd_global(bool, PreserveFramePointer, false);
89
90
define_pd_global(intx, InitArrayShortSize, 8*BytesPerLong);
91
92
#define ARCH_FLAGS(develop, \
93
product, \
94
notproduct, \
95
range, \
96
constraint) \
97
\
98
develop(bool, IEEEPrecision, true, \
99
"Enables IEEE precision (for INTEL only)") \
100
\
101
product(bool, UseStoreImmI16, true, \
102
"Use store immediate 16-bits value instruction on x86") \
103
\
104
product(intx, UseSSE, 99, \
105
"Highest supported SSE instructions set on x86/x64") \
106
range(0, 99) \
107
\
108
product(intx, UseAVX, 3, \
109
"Highest supported AVX instructions set on x86/x64") \
110
range(0, 99) \
111
\
112
product(bool, UseCLMUL, false, \
113
"Control whether CLMUL instructions can be used on x86/x64") \
114
\
115
product(bool, UseIncDec, true, DIAGNOSTIC, \
116
"Use INC, DEC instructions on x86") \
117
\
118
product(bool, UseNewLongLShift, false, \
119
"Use optimized bitwise shift left") \
120
\
121
product(bool, UseAddressNop, false, \
122
"Use '0F 1F [addr]' NOP instructions on x86 cpus") \
123
\
124
product(bool, UseXmmLoadAndClearUpper, true, \
125
"Load low part of XMM register and clear upper part") \
126
\
127
product(bool, UseXmmRegToRegMoveAll, false, \
128
"Copy all XMM register bits when moving value between registers") \
129
\
130
product(bool, UseXmmI2D, false, \
131
"Use SSE2 CVTDQ2PD instruction to convert Integer to Double") \
132
\
133
product(bool, UseXmmI2F, false, \
134
"Use SSE2 CVTDQ2PS instruction to convert Integer to Float") \
135
\
136
product(bool, UseUnalignedLoadStores, false, \
137
"Use SSE2 MOVDQU instruction for Arraycopy") \
138
\
139
product(bool, UseXMMForObjInit, false, \
140
"Use XMM/YMM MOVDQU instruction for Object Initialization") \
141
\
142
product(bool, UseFastStosb, false, \
143
"Use fast-string operation for zeroing: rep stosb") \
144
\
145
/* Use Restricted Transactional Memory for lock eliding */ \
146
product(bool, UseRTMLocking, false, \
147
"Enable RTM lock eliding for inflated locks in compiled code") \
148
\
149
product(bool, UseRTMForStackLocks, false, EXPERIMENTAL, \
150
"Enable RTM lock eliding for stack locks in compiled code") \
151
\
152
product(bool, UseRTMDeopt, false, \
153
"Perform deopt and recompilation based on RTM abort ratio") \
154
\
155
product(int, RTMRetryCount, 5, \
156
"Number of RTM retries on lock abort or busy") \
157
range(0, max_jint) \
158
\
159
product(int, RTMSpinLoopCount, 100, EXPERIMENTAL, \
160
"Spin count for lock to become free before RTM retry") \
161
range(0, max_jint) \
162
\
163
product(int, RTMAbortThreshold, 1000, EXPERIMENTAL, \
164
"Calculate abort ratio after this number of aborts") \
165
range(0, max_jint) \
166
\
167
product(int, RTMLockingThreshold, 10000, EXPERIMENTAL, \
168
"Lock count at which to do RTM lock eliding without " \
169
"abort ratio calculation") \
170
range(0, max_jint) \
171
\
172
product(int, RTMAbortRatio, 50, EXPERIMENTAL, \
173
"Lock abort ratio at which to stop use RTM lock eliding") \
174
range(0, 100) /* natural range */ \
175
\
176
product(int, RTMTotalCountIncrRate, 64, EXPERIMENTAL, \
177
"Increment total RTM attempted lock count once every n times") \
178
range(1, max_jint) \
179
constraint(RTMTotalCountIncrRateConstraintFunc,AfterErgo) \
180
\
181
product(intx, RTMLockingCalculationDelay, 0, EXPERIMENTAL, \
182
"Number of milliseconds to wait before start calculating aborts " \
183
"for RTM locking") \
184
\
185
product(bool, UseRTMXendForLockBusy, true, EXPERIMENTAL, \
186
"Use RTM Xend instead of Xabort when lock busy") \
187
\
188
/* assembler */ \
189
product(bool, UseCountLeadingZerosInstruction, false, \
190
"Use count leading zeros instruction") \
191
\
192
product(bool, UseCountTrailingZerosInstruction, false, \
193
"Use count trailing zeros instruction") \
194
\
195
product(bool, UseSSE42Intrinsics, false, \
196
"SSE4.2 versions of intrinsics") \
197
\
198
product(bool, UseBMI1Instructions, false, \
199
"Use BMI1 instructions") \
200
\
201
product(bool, UseBMI2Instructions, false, \
202
"Use BMI2 instructions") \
203
\
204
product(bool, UseLibmIntrinsic, true, DIAGNOSTIC, \
205
"Use Libm Intrinsics") \
206
\
207
/* Minimum array size in bytes to use AVX512 intrinsics */ \
208
/* for copy, inflate and fill which don't bail out early based on any */ \
209
/* condition. When this value is set to zero compare operations like */ \
210
/* compare, vectorizedMismatch, compress can also use AVX512 intrinsics.*/\
211
product(int, AVX3Threshold, 4096, DIAGNOSTIC, \
212
"Minimum array size in bytes to use AVX512 intrinsics" \
213
"for copy, inflate and fill. When this value is set as zero" \
214
"compare operations can also use AVX512 intrinsics.") \
215
range(0, max_jint) \
216
constraint(AVX3ThresholdConstraintFunc,AfterErgo) \
217
\
218
product(bool, IntelJccErratumMitigation, true, DIAGNOSTIC, \
219
"Turn off JVM mitigations related to Intel micro code " \
220
"mitigations for the Intel JCC erratum")
221
222
// end of ARCH_FLAGS
223
224
#endif // CPU_X86_GLOBALS_X86_HPP
225
226