3124 Label initialize_header; |
3124 Label initialize_header; |
3125 Label initialize_object; // including clearing the fields |
3125 Label initialize_object; // including clearing the fields |
3126 Label allocate_shared; |
3126 Label allocate_shared; |
3127 |
3127 |
3128 __ get_cpool_and_tags(rsi, rax); |
3128 __ get_cpool_and_tags(rsi, rax); |
3129 // get instanceKlass |
3129 // Make sure the class we're about to instantiate has been resolved. |
3130 __ movptr(rsi, Address(rsi, rdx, |
3130 // This is done before loading instanceKlass to be consistent with the order |
3131 Address::times_8, sizeof(constantPoolOopDesc))); |
3131 // how Constant Pool is updated (see constantPoolOopDesc::klass_at_put) |
3132 |
|
3133 // make sure the class we're about to instantiate has been |
|
3134 // resolved. Note: slow_case does a pop of stack, which is why we |
|
3135 // loaded class/pushed above |
|
3136 const int tags_offset = typeArrayOopDesc::header_size(T_BYTE) * wordSize; |
3132 const int tags_offset = typeArrayOopDesc::header_size(T_BYTE) * wordSize; |
3137 __ cmpb(Address(rax, rdx, Address::times_1, tags_offset), |
3133 __ cmpb(Address(rax, rdx, Address::times_1, tags_offset), |
3138 JVM_CONSTANT_Class); |
3134 JVM_CONSTANT_Class); |
3139 __ jcc(Assembler::notEqual, slow_case); |
3135 __ jcc(Assembler::notEqual, slow_case); |
|
3136 |
|
3137 // get instanceKlass |
|
3138 __ movptr(rsi, Address(rsi, rdx, |
|
3139 Address::times_8, sizeof(constantPoolOopDesc))); |
3140 |
3140 |
3141 // make sure klass is initialized & doesn't have finalizer |
3141 // make sure klass is initialized & doesn't have finalizer |
3142 // make sure klass is fully initialized |
3142 // make sure klass is fully initialized |
3143 __ cmpl(Address(rsi, |
3143 __ cmpl(Address(rsi, |
3144 instanceKlass::init_state_offset_in_bytes() + |
3144 instanceKlass::init_state_offset_in_bytes() + |