hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp
changeset 6176 4d9030fe341f
parent 5882 6b2aecc4f7d8
child 6453 970dc585ab63
equal deleted inserted replaced
6175:86dbf3cacacc 6176:4d9030fe341f
  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() +