1/*
2 * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
3 * Copyright (c) 2015, Red Hat Inc. All rights reserved.
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 *
6 * This code is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 only, as
8 * published by the Free Software Foundation.
9 *
10 * This code is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13 * version 2 for more details (a copy is included in the LICENSE file that
14 * accompanied this code).
15 *
16 * You should have received a copy of the GNU General Public License version
17 * 2 along with this work; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 *
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
23 *
24 */
25
26#ifndef CPU_AARCH64_VM_GLOBALS_AARCH64_HPP
27#define CPU_AARCH64_VM_GLOBALS_AARCH64_HPP
28
29#include "utilities/globalDefinitions.hpp"
30#include "utilities/macros.hpp"
31
32// Sets the default values for platform dependent flags used by the runtime system.
33// (see globals.hpp)
34
35define_pd_global(bool, ShareVtableStubs,         true);
36define_pd_global(bool, NeedsDeoptSuspend,        false); // only register window machines need this
37
38define_pd_global(bool, ImplicitNullChecks,       true);  // Generate code for implicit null checks
39define_pd_global(bool, TrapBasedNullChecks,  false);
40define_pd_global(bool, UncommonNullCast,         true);  // Uncommon-trap NULLs past to check cast
41
42define_pd_global(uintx, CodeCacheSegmentSize,    64 TIERED_ONLY(+64)); // Tiered compilation has large code-entry alignment.
43define_pd_global(intx, CodeEntryAlignment,       64);
44define_pd_global(intx, OptoLoopAlignment,        16);
45define_pd_global(intx, InlineFrequencyCount,     100);
46
47#define DEFAULT_STACK_YELLOW_PAGES (2)
48#define DEFAULT_STACK_RED_PAGES (1)
49// Java_java_net_SocketOutputStream_socketWrite0() uses a 64k buffer on the
50// stack if compiled for unix and LP64. To pass stack overflow tests we need
51// 20 shadow pages.
52#define DEFAULT_STACK_SHADOW_PAGES (20 DEBUG_ONLY(+5))
53#define DEFAULT_STACK_RESERVED_PAGES (1)
54
55#define MIN_STACK_YELLOW_PAGES DEFAULT_STACK_YELLOW_PAGES
56#define MIN_STACK_RED_PAGES    DEFAULT_STACK_RED_PAGES
57#define MIN_STACK_SHADOW_PAGES DEFAULT_STACK_SHADOW_PAGES
58#define MIN_STACK_RESERVED_PAGES (0)
59
60define_pd_global(intx, StackYellowPages, DEFAULT_STACK_YELLOW_PAGES);
61define_pd_global(intx, StackRedPages, DEFAULT_STACK_RED_PAGES);
62define_pd_global(intx, StackShadowPages, DEFAULT_STACK_SHADOW_PAGES);
63define_pd_global(intx, StackReservedPages, DEFAULT_STACK_RESERVED_PAGES);
64
65define_pd_global(bool, RewriteBytecodes,     true);
66define_pd_global(bool, RewriteFrequentPairs, true);
67
68define_pd_global(bool, UseMembar,            true);
69
70define_pd_global(bool, PreserveFramePointer, false);
71
72// GC Ergo Flags
73define_pd_global(uintx, CMSYoungGenPerWorker, 64*M);  // default max size of CMS young gen, per GC worker thread
74
75define_pd_global(uintx, TypeProfileLevel, 111);
76
77define_pd_global(bool, CompactStrings, true);
78
79// Clear short arrays bigger than one word in an arch-specific way
80define_pd_global(intx, InitArrayShortSize, BytesPerLong);
81
82#if defined(COMPILER1) || defined(COMPILER2)
83define_pd_global(intx, InlineSmallCode,          1000);
84#endif
85
86#ifdef BUILTIN_SIM
87#define UseBuiltinSim           true
88#define ARCH_FLAGS(develop, \
89                   product, \
90                   diagnostic, \
91                   experimental, \
92                   notproduct, \
93                   range, \
94                   constraint, \
95                   writeable) \
96                                                                        \
97  product(bool, NotifySimulator, UseBuiltinSim,                         \
98         "tell the AArch64 sim where we are in method code")            \
99                                                                        \
100  product(bool, UseSimulatorCache, false,                               \
101         "tell sim to cache memory updates until exclusive op occurs")  \
102                                                                        \
103  product(bool, DisableBCCheck, true,                                   \
104          "tell sim not to invoke bccheck callback")                    \
105                                                                        \
106  product(bool, NearCpool, true,                                        \
107         "constant pool is close to instructions")                      \
108                                                                        \
109  product(bool, UseBarriersForVolatile, false,                          \
110          "Use memory barriers to implement volatile accesses")         \
111                                                                        \
112  product(bool, UseCRC32, false,                                        \
113          "Use CRC32 instructions for CRC32 computation")               \
114                                                                        \
115  product(bool, UseLSE, false,                                          \
116          "Use LSE instructions")                                       \
117
118// Don't attempt to use Neon on builtin sim until builtin sim supports it
119#define UseCRC32 false
120#define UseSIMDForMemoryOps    false
121#define AvoidUnalignedAcesses false
122
123#else
124#define UseBuiltinSim           false
125#define NotifySimulator         false
126#define UseSimulatorCache       false
127#define DisableBCCheck          true
128#define ARCH_FLAGS(develop, \
129                   product, \
130                   diagnostic, \
131                   experimental, \
132                   notproduct, \
133                   range, \
134                   constraint, \
135                   writeable) \
136                                                                        \
137  product(bool, NearCpool, true,                                        \
138         "constant pool is close to instructions")                      \
139                                                                        \
140  product(bool, UseBarriersForVolatile, false,                          \
141          "Use memory barriers to implement volatile accesses")         \
142  product(bool, UseNeon, false,                                         \
143          "Use Neon for CRC32 computation")                             \
144  product(bool, UseCRC32, false,                                        \
145          "Use CRC32 instructions for CRC32 computation")               \
146  product(bool, UseSIMDForMemoryOps, false,                             \
147          "Use SIMD instructions in generated memory move code")        \
148  product(bool, AvoidUnalignedAccesses, false,                          \
149          "Avoid generating unaligned memory accesses")                 \
150  product(bool, UseLSE, false,                                          \
151          "Use LSE instructions")                                       \
152  product(bool, UseBlockZeroing, true,                                  \
153          "Use DC ZVA for block zeroing")                               \
154  product(intx, BlockZeroingLowLimit, 256,                              \
155          "Minimum size in bytes when block zeroing will be used")      \
156          range(1, max_jint)                                            \
157  product(bool, TraceTraps, false, "Trace all traps the signal handler")\
158  product(int, SoftwarePrefetchHintDistance, -1,                        \
159          "Use prfm hint with specified distance in compiled code."     \
160          "Value -1 means off.")                                        \
161          range(-1, 32760)
162#endif
163
164
165#endif // CPU_AARCH64_VM_GLOBALS_AARCH64_HPP
166