< prev index next >

src/hotspot/cpu/aarch64/c1_Runtime1_aarch64.cpp

Print this page




 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 


< prev index next >