692 Label slow_path;
693 Register obj_size = r2;
694 Register t1 = r19;
695 Register t2 = r4;
696 assert_different_registers(klass, obj, obj_size, t1, t2);
697
698 __ stp(r19, zr, Address(__ pre(sp, -2 * wordSize)));
699
700 if (id == fast_new_instance_init_check_id) {
701 // make sure the klass is initialized
702 __ ldrb(rscratch1, Address(klass, InstanceKlass::init_state_offset()));
703 __ cmpw(rscratch1, InstanceKlass::fully_initialized);
704 __ br(Assembler::NE, slow_path);
705 }
706
707 #ifdef ASSERT
708 // assert object can be fast path allocated
709 {
710 Label ok, not_ok;
711 __ ldrw(obj_size, Address(klass, Klass::layout_helper_offset()));
712 __ cmp(obj_size, 0u);
713 __ br(Assembler::LE, not_ok); // make sure it's an instance (LH > 0)
714 __ tstw(obj_size, Klass::_lh_instance_slow_path_bit);
715 __ br(Assembler::EQ, ok);
716 __ bind(not_ok);
717 __ stop("assert(can be fast path allocated)");
718 __ should_not_reach_here();
719 __ bind(ok);
720 }
721 #endif // ASSERT
722
723 // get the instance size (size is postive so movl is fine for 64bit)
724 __ ldrw(obj_size, Address(klass, Klass::layout_helper_offset()));
725
726 __ eden_allocate(obj, obj_size, 0, t1, slow_path);
727
728 __ initialize_object(obj, klass, obj_size, 0, t1, t2, /* is_tlab_allocated */ false);
729 __ verify_oop(obj);
730 __ ldp(r19, zr, Address(__ post(sp, 2 * wordSize)));
731 __ ret(lr);
732
|
692 Label slow_path;
693 Register obj_size = r2;
694 Register t1 = r19;
695 Register t2 = r4;
696 assert_different_registers(klass, obj, obj_size, t1, t2);
697
698 __ stp(r19, zr, Address(__ pre(sp, -2 * wordSize)));
699
700 if (id == fast_new_instance_init_check_id) {
701 // make sure the klass is initialized
702 __ ldrb(rscratch1, Address(klass, InstanceKlass::init_state_offset()));
703 __ cmpw(rscratch1, InstanceKlass::fully_initialized);
704 __ br(Assembler::NE, slow_path);
705 }
706
707 #ifdef ASSERT
708 // assert object can be fast path allocated
709 {
710 Label ok, not_ok;
711 __ ldrw(obj_size, Address(klass, Klass::layout_helper_offset()));
712 __ cmp(obj_size, (u1)0);
713 __ br(Assembler::LE, not_ok); // make sure it's an instance (LH > 0)
714 __ tstw(obj_size, Klass::_lh_instance_slow_path_bit);
715 __ br(Assembler::EQ, ok);
716 __ bind(not_ok);
717 __ stop("assert(can be fast path allocated)");
718 __ should_not_reach_here();
719 __ bind(ok);
720 }
721 #endif // ASSERT
722
723 // get the instance size (size is postive so movl is fine for 64bit)
724 __ ldrw(obj_size, Address(klass, Klass::layout_helper_offset()));
725
726 __ eden_allocate(obj, obj_size, 0, t1, slow_path);
727
728 __ initialize_object(obj, klass, obj_size, 0, t1, t2, /* is_tlab_allocated */ false);
729 __ verify_oop(obj);
730 __ ldp(r19, zr, Address(__ post(sp, 2 * wordSize)));
731 __ ret(lr);
732
|