提交 3d006345 编写于 作者: R robm

Merge

...@@ -40,7 +40,10 @@ const char* VM_Version::_features_str = ""; ...@@ -40,7 +40,10 @@ const char* VM_Version::_features_str = "";
unsigned int VM_Version::_L2_data_cache_line_size = 0; unsigned int VM_Version::_L2_data_cache_line_size = 0;
void VM_Version::initialize() { void VM_Version::initialize() {
_features = determine_features();
assert(_features != VM_Version::unknown_m, "System pre-initialization is not complete.");
guarantee(VM_Version::has_v9(), "only SPARC v9 is supported");
PrefetchCopyIntervalInBytes = prefetch_copy_interval_in_bytes(); PrefetchCopyIntervalInBytes = prefetch_copy_interval_in_bytes();
PrefetchScanIntervalInBytes = prefetch_scan_interval_in_bytes(); PrefetchScanIntervalInBytes = prefetch_scan_interval_in_bytes();
PrefetchFieldsAhead = prefetch_fields_ahead(); PrefetchFieldsAhead = prefetch_fields_ahead();
...@@ -76,8 +79,6 @@ void VM_Version::initialize() { ...@@ -76,8 +79,6 @@ void VM_Version::initialize() {
FLAG_SET_DEFAULT(AllocatePrefetchStyle, 1); FLAG_SET_DEFAULT(AllocatePrefetchStyle, 1);
} }
guarantee(VM_Version::has_v9(), "only SPARC v9 is supported");
assert(ArraycopySrcPrefetchDistance < 4096, "invalid value"); assert(ArraycopySrcPrefetchDistance < 4096, "invalid value");
if (ArraycopySrcPrefetchDistance >= 4096) if (ArraycopySrcPrefetchDistance >= 4096)
ArraycopySrcPrefetchDistance = 4064; ArraycopySrcPrefetchDistance = 4064;
......
...@@ -124,6 +124,8 @@ public: ...@@ -124,6 +124,8 @@ public:
// Initialization // Initialization
static void initialize(); static void initialize();
static void init_before_ergo() { _features = determine_features(); }
// Instruction support // Instruction support
static bool has_v8() { return (_features & v8_instructions_m) != 0; } static bool has_v8() { return (_features & v8_instructions_m) != 0; }
static bool has_v9() { return (_features & v9_instructions_m) != 0; } static bool has_v9() { return (_features & v9_instructions_m) != 0; }
......
...@@ -995,7 +995,9 @@ void JvmtiExport::post_class_unload(Klass* klass) { ...@@ -995,7 +995,9 @@ void JvmtiExport::post_class_unload(Klass* klass) {
// Before we call the JVMTI agent, we have to set the state in the // Before we call the JVMTI agent, we have to set the state in the
// thread for which we are proxying. // thread for which we are proxying.
JavaThreadState prev_state = real_thread->thread_state(); JavaThreadState prev_state = real_thread->thread_state();
assert(prev_state == _thread_blocked, "JavaThread should be at safepoint"); assert(((Thread *)real_thread)->is_ConcurrentGC_thread() ||
(real_thread->is_Java_thread() && prev_state == _thread_blocked),
"should be ConcurrentGCThread or JavaThread at safepoint");
real_thread->set_thread_state(_thread_in_native); real_thread->set_thread_state(_thread_in_native);
jvmtiExtensionEvent callback = env->ext_callbacks()->ClassUnload; jvmtiExtensionEvent callback = env->ext_callbacks()->ClassUnload;
......
...@@ -325,6 +325,10 @@ void os::init_before_ergo() { ...@@ -325,6 +325,10 @@ void os::init_before_ergo() {
// We need to initialize large page support here because ergonomics takes some // We need to initialize large page support here because ergonomics takes some
// decisions depending on large page support and the calculated large page size. // decisions depending on large page support and the calculated large page size.
large_page_init(); large_page_init();
// VM version initialization identifies some characteristics of the
// the platform that are used during ergonomic decisions.
VM_Version::init_before_ergo();
} }
void os::signal_init() { void os::signal_init() {
......
...@@ -54,6 +54,12 @@ class Abstract_VM_Version: AllStatic { ...@@ -54,6 +54,12 @@ class Abstract_VM_Version: AllStatic {
unsigned int dem, unsigned int dem,
unsigned int switch_pt); unsigned int switch_pt);
public: public:
// Called as part of the runtime services initialization which is
// called from the management module initialization (via init_globals())
// after argument parsing and attaching of the main thread has
// occurred. Examines a variety of the hardware capabilities of
// the platform to determine which features can be used to execute the
// program.
static void initialize(); static void initialize();
// This allows for early initialization of VM_Version information // This allows for early initialization of VM_Version information
...@@ -63,6 +69,11 @@ class Abstract_VM_Version: AllStatic { ...@@ -63,6 +69,11 @@ class Abstract_VM_Version: AllStatic {
// need to specialize this define VM_Version::early_initialize(). // need to specialize this define VM_Version::early_initialize().
static void early_initialize() { } static void early_initialize() { }
// Called to initialize VM variables needing initialization
// after command line parsing. Platforms that need to specialize
// this should define VM_Version::init_before_ergo().
static void init_before_ergo() {}
// Name // Name
static const char* vm_name(); static const char* vm_name();
// Vendor // Vendor
......
...@@ -39,12 +39,12 @@ import java.util.Random; ...@@ -39,12 +39,12 @@ import java.util.Random;
* @library /testlibrary * @library /testlibrary
* @requires (os.simpleArch == "x64") & (os.family != "windows") * @requires (os.simpleArch == "x64") & (os.family != "windows")
* @summary Verify that the Montgomery multiply intrinsic works and correctly checks its arguments. * @summary Verify that the Montgomery multiply intrinsic works and correctly checks its arguments.
* @run main/othervm -XX:+UseMontgomerySquareIntrinsic -XX:+UseMontgomeryMultiplyIntrinsic * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UseMontgomerySquareIntrinsic
* MontgomeryMultiplyTest * -XX:+UseMontgomeryMultiplyIntrinsic MontgomeryMultiplyTest
* @run main/othervm -XX:+UseMontgomerySquareIntrinsic -XX:-UseMontgomeryMultiplyIntrinsic * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UseMontgomerySquareIntrinsic
* MontgomeryMultiplyTest * -XX:-UseMontgomeryMultiplyIntrinsic MontgomeryMultiplyTest
* @run main/othervm -XX:-UseMontgomerySquareIntrinsic -XX:+UseMontgomeryMultiplyIntrinsic * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseMontgomerySquareIntrinsic
* MontgomeryMultiplyTest * -XX:+UseMontgomeryMultiplyIntrinsic MontgomeryMultiplyTest
*/ */
public class MontgomeryMultiplyTest { public class MontgomeryMultiplyTest {
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
* @summary Add C2 x86 intrinsic for BigInteger::squareToLen() method * @summary Add C2 x86 intrinsic for BigInteger::squareToLen() method
* *
* @run main/othervm/timeout=600 -XX:-TieredCompilation -Xbatch * @run main/othervm/timeout=600 -XX:-TieredCompilation -Xbatch
* -XX:+IgnoreUnrecognizedVMOptions
* -XX:+UseSquareToLenIntrinsic * -XX:+UseSquareToLenIntrinsic
* -XX:CompileCommand=exclude,TestSquareToLen::main * -XX:CompileCommand=exclude,TestSquareToLen::main
* -XX:CompileCommand=option,TestSquareToLen::base_multiply,ccstr,DisableIntrinsic,_squareToLen * -XX:CompileCommand=option,TestSquareToLen::base_multiply,ccstr,DisableIntrinsic,_squareToLen
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册