< prev index next >

src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp

Print this page

        

@@ -204,15 +204,15 @@
   // Restore stack bottom in case i2c adjusted stack
   __ movptr(rsp, Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize));
   // and NULL it as marker that esp is now tos until next java call
   __ movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD);
 
-  if (/*state == qtos*/ false && ValueTypeReturnedAsFields) {
+  if (state == atos && ValueTypeReturnedAsFields) {
 #ifndef _LP64
     __ super_call_VM_leaf(StubRoutines::store_value_type_fields_to_buf());
 #else
-    // A value type is being returned. If fields are in registers we
+    // A value type might be returned. If fields are in registers we
     // need to allocate a value type instance and initialize it with
     // the value of the fields.
     Label skip, slow_case;
     // We only need a new buffered value if a new one is not returned
     __ testptr(rax, 1);

@@ -228,26 +228,21 @@
       __ movptr(r13, Address(r15_thread, in_bytes(JavaThread::tlab_top_offset())));
       __ lea(r14, Address(r13, r14, Address::times_1));
       __ cmpptr(r14, Address(r15_thread, in_bytes(JavaThread::tlab_end_offset())));
       __ jcc(Assembler::above, slow_case);
       __ movptr(Address(r15_thread, in_bytes(JavaThread::tlab_top_offset())), r14);
+      __ movptr(Address(r13, oopDesc::mark_offset_in_bytes()), (intptr_t)markOopDesc::always_locked_prototype());
 
-      if (UseBiasedLocking) {
-        __ movptr(rax, Address(rbx, Klass::prototype_header_offset()));
-        __ movptr(Address(r13, oopDesc::mark_offset_in_bytes ()), rax);
-      } else {
-        __ movptr(Address(r13, oopDesc::mark_offset_in_bytes ()),
-                  (intptr_t)markOopDesc::prototype());
-      }
       __ xorl(rax, rax); // use zero reg to clear memory (shorter code)
       __ store_klass_gap(r13, rax);  // zero klass gap for compressed oops
       __ mov(rax, rbx);
       __ store_klass(r13, rbx);  // klass
 
       // We have our new buffered value, initialize its fields with a
       // value class specific handler
-      __ movptr(rbx, Address(rax, ValueKlass::pack_handler_offset()));
+      __ movptr(rbx, Address(rax, InstanceKlass::adr_valueklass_fixed_block_offset()));
+      __ movptr(rbx, Address(rbx, ValueKlass::pack_handler_offset()));
       __ mov(rax, r13);
       __ call(rbx);
       __ jmp(skip);
     }
 
< prev index next >