mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-18 17:37:53 +00:00
8320276: Improve class initialization barrier in TemplateTable::_new
Reviewed-by: dholmes, fparain
This commit is contained in:
parent
296c5b645a
commit
409a39ec8d
@ -3603,11 +3603,9 @@ void TemplateTable::_new() {
|
||||
// get InstanceKlass
|
||||
__ load_resolved_klass_at_offset(r4, r3, r4, rscratch1);
|
||||
|
||||
// make sure klass is initialized & doesn't have finalizer
|
||||
// make sure klass is fully initialized
|
||||
__ ldrb(rscratch1, Address(r4, InstanceKlass::init_state_offset()));
|
||||
__ cmp(rscratch1, (u1)InstanceKlass::fully_initialized);
|
||||
__ br(Assembler::NE, slow_case);
|
||||
// make sure klass is initialized
|
||||
assert(VM_Version::supports_fast_class_init_checks(), "Optimization requires support for fast class initialization checks");
|
||||
__ clinit_barrier(r4, rscratch1, nullptr /*L_fast_path*/, &slow_case);
|
||||
|
||||
// get instance_size in InstanceKlass (scaled to a count of bytes)
|
||||
__ ldrw(r3,
|
||||
|
||||
@ -165,6 +165,7 @@ enum Ampere_CPU_Model {
|
||||
static int dcache_line_size() { return _dcache_line_size; }
|
||||
static int get_initial_sve_vector_length() { return _initial_sve_vector_length; };
|
||||
|
||||
// Aarch64 supports fast class initialization checks
|
||||
static bool supports_fast_class_init_checks() { return true; }
|
||||
constexpr static bool supports_stack_watermark_barrier() { return true; }
|
||||
|
||||
|
||||
@ -91,7 +91,7 @@ public:
|
||||
// Override Abstract_VM_Version implementation
|
||||
static void print_platform_virtualization_info(outputStream*);
|
||||
|
||||
// PPC64 supports fast class initialization checks for static methods.
|
||||
// PPC64 supports fast class initialization checks
|
||||
static bool supports_fast_class_init_checks() { return true; }
|
||||
constexpr static bool supports_stack_watermark_barrier() { return true; }
|
||||
|
||||
|
||||
@ -410,7 +410,7 @@ class VM_Version: public Abstract_VM_Version {
|
||||
// Override Abstract_VM_Version implementation
|
||||
static void print_platform_virtualization_info(outputStream*);
|
||||
|
||||
// s390 supports fast class initialization checks for static methods.
|
||||
// s390 supports fast class initialization checks
|
||||
static bool supports_fast_class_init_checks() { return true; }
|
||||
|
||||
// CPU feature query functions
|
||||
|
||||
@ -4048,11 +4048,16 @@ void TemplateTable::_new() {
|
||||
__ load_resolved_klass_at_index(rcx, rcx, rdx);
|
||||
__ push(rcx); // save the contexts of klass for initializing the header
|
||||
|
||||
// make sure klass is initialized & doesn't have finalizer
|
||||
// make sure klass is fully initialized
|
||||
// make sure klass is initialized
|
||||
#ifdef _LP64
|
||||
assert(VM_Version::supports_fast_class_init_checks(), "must support fast class initialization checks");
|
||||
__ clinit_barrier(rcx, r15_thread, nullptr /*L_fast_path*/, &slow_case);
|
||||
#else
|
||||
__ cmpb(Address(rcx, InstanceKlass::init_state_offset()), InstanceKlass::fully_initialized);
|
||||
__ jcc(Assembler::notEqual, slow_case);
|
||||
#endif
|
||||
|
||||
// make sure klass doesn't have finalizer
|
||||
// get instance_size in InstanceKlass (scaled to a count of bytes)
|
||||
__ movl(rdx, Address(rcx, Klass::layout_helper_offset()));
|
||||
// test to see if it has a finalizer or is malformed in some way
|
||||
|
||||
@ -756,7 +756,7 @@ public:
|
||||
// the intrinsic for java.lang.Thread.onSpinWait()
|
||||
static bool supports_on_spin_wait() { return supports_sse2(); }
|
||||
|
||||
// x86_64 supports fast class initialization checks for static methods.
|
||||
// x86_64 supports fast class initialization checks
|
||||
static bool supports_fast_class_init_checks() {
|
||||
return LP64_ONLY(true) NOT_LP64(false); // not implemented on x86_32
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user