41
42 // CPU feature flags.
43 static uint64_t _features;
44 static const char* _features_string;
45
46 // These are set by machine-dependent initializations
47 static bool _supports_cx8;
48 static bool _supports_atomic_getset4;
49 static bool _supports_atomic_getset8;
50 static bool _supports_atomic_getadd4;
51 static bool _supports_atomic_getadd8;
52 static unsigned int _logical_processors_per_package;
53 static unsigned int _L1_data_cache_line_size;
54 static int _vm_major_version;
55 static int _vm_minor_version;
56 static int _vm_security_version;
57 static int _vm_patch_version;
58 static int _vm_build_number;
59 static unsigned int _parallel_worker_threads;
60 static bool _parallel_worker_threads_initialized;
61
62 static unsigned int nof_parallel_worker_threads(unsigned int num,
63 unsigned int dem,
64 unsigned int switch_pt);
65 public:
66 // Called as part of the runtime services initialization which is
67 // called from the management module initialization (via init_globals())
68 // after argument parsing and attaching of the main thread has
69 // occurred. Examines a variety of the hardware capabilities of
70 // the platform to determine which features can be used to execute the
71 // program.
72 static void initialize();
73
74 // This allows for early initialization of VM_Version information
75 // that may be needed later in the initialization sequence but before
76 // full VM_Version initialization is possible. It can not depend on any
77 // other part of the VM being initialized when called. Platforms that
78 // need to specialize this define VM_Version::early_initialize().
79 static void early_initialize() { }
80
120 static bool supports_cx8() {
121 #ifdef SUPPORTS_NATIVE_CX8
122 return true;
123 #else
124 return _supports_cx8;
125 #endif
126 }
127 // does HW support atomic get-and-set or atomic get-and-add? Used
128 // to guide intrinsification decisions for Unsafe atomic ops
129 static bool supports_atomic_getset4() {return _supports_atomic_getset4;}
130 static bool supports_atomic_getset8() {return _supports_atomic_getset8;}
131 static bool supports_atomic_getadd4() {return _supports_atomic_getadd4;}
132 static bool supports_atomic_getadd8() {return _supports_atomic_getadd8;}
133
134 static unsigned int logical_processors_per_package() {
135 return _logical_processors_per_package;
136 }
137
138 static unsigned int L1_data_cache_line_size() {
139 return _L1_data_cache_line_size;
140 }
141
142 // ARCH specific policy for the BiasedLocking
143 static bool use_biased_locking() { return true; }
144
145 // Number of page sizes efficiently supported by the hardware. Most chips now
146 // support two sizes, thus this default implementation. Processor-specific
147 // subclasses should define new versions to hide this one as needed. Note
148 // that the O/S may support more sizes, but at most this many are used.
149 static uint page_size_count() { return 2; }
150
151 // Returns the number of parallel threads to be used for VM
152 // work. If that number has not been calculated, do so and
153 // save it. Returns ParallelGCThreads if it is set on the
154 // command line.
155 static unsigned int parallel_worker_threads();
156 // Calculates and returns the number of parallel threads. May
157 // be VM version specific.
158 static unsigned int calc_parallel_worker_threads();
159
|
41
42 // CPU feature flags.
43 static uint64_t _features;
44 static const char* _features_string;
45
46 // These are set by machine-dependent initializations
47 static bool _supports_cx8;
48 static bool _supports_atomic_getset4;
49 static bool _supports_atomic_getset8;
50 static bool _supports_atomic_getadd4;
51 static bool _supports_atomic_getadd8;
52 static unsigned int _logical_processors_per_package;
53 static unsigned int _L1_data_cache_line_size;
54 static int _vm_major_version;
55 static int _vm_minor_version;
56 static int _vm_security_version;
57 static int _vm_patch_version;
58 static int _vm_build_number;
59 static unsigned int _parallel_worker_threads;
60 static bool _parallel_worker_threads_initialized;
61 static unsigned int _data_cache_line_flush_size;
62
63 static unsigned int nof_parallel_worker_threads(unsigned int num,
64 unsigned int dem,
65 unsigned int switch_pt);
66 public:
67 // Called as part of the runtime services initialization which is
68 // called from the management module initialization (via init_globals())
69 // after argument parsing and attaching of the main thread has
70 // occurred. Examines a variety of the hardware capabilities of
71 // the platform to determine which features can be used to execute the
72 // program.
73 static void initialize();
74
75 // This allows for early initialization of VM_Version information
76 // that may be needed later in the initialization sequence but before
77 // full VM_Version initialization is possible. It can not depend on any
78 // other part of the VM being initialized when called. Platforms that
79 // need to specialize this define VM_Version::early_initialize().
80 static void early_initialize() { }
81
121 static bool supports_cx8() {
122 #ifdef SUPPORTS_NATIVE_CX8
123 return true;
124 #else
125 return _supports_cx8;
126 #endif
127 }
128 // does HW support atomic get-and-set or atomic get-and-add? Used
129 // to guide intrinsification decisions for Unsafe atomic ops
130 static bool supports_atomic_getset4() {return _supports_atomic_getset4;}
131 static bool supports_atomic_getset8() {return _supports_atomic_getset8;}
132 static bool supports_atomic_getadd4() {return _supports_atomic_getadd4;}
133 static bool supports_atomic_getadd8() {return _supports_atomic_getadd8;}
134
135 static unsigned int logical_processors_per_package() {
136 return _logical_processors_per_package;
137 }
138
139 static unsigned int L1_data_cache_line_size() {
140 return _L1_data_cache_line_size;
141 }
142
143 // the size in bytes of a data cache line flushed by a flush
144 // operation which should be a power of two
145 static unsigned int data_cache_line_flush_size() {
146 return _data_cache_line_flush_size;
147 }
148
149 // ARCH specific policy for the BiasedLocking
150 static bool use_biased_locking() { return true; }
151
152 // Number of page sizes efficiently supported by the hardware. Most chips now
153 // support two sizes, thus this default implementation. Processor-specific
154 // subclasses should define new versions to hide this one as needed. Note
155 // that the O/S may support more sizes, but at most this many are used.
156 static uint page_size_count() { return 2; }
157
158 // Returns the number of parallel threads to be used for VM
159 // work. If that number has not been calculated, do so and
160 // save it. Returns ParallelGCThreads if it is set on the
161 // command line.
162 static unsigned int parallel_worker_threads();
163 // Calculates and returns the number of parallel threads. May
164 // be VM version specific.
165 static unsigned int calc_parallel_worker_threads();
166
|