131 const Address val_addr (rcx, JvmtiThreadState::earlyret_value_offset()); |
131 const Address val_addr (rcx, JvmtiThreadState::earlyret_value_offset()); |
132 const Address val_addr1(rcx, JvmtiThreadState::earlyret_value_offset() |
132 const Address val_addr1(rcx, JvmtiThreadState::earlyret_value_offset() |
133 + in_ByteSize(wordSize)); |
133 + in_ByteSize(wordSize)); |
134 switch (state) { |
134 switch (state) { |
135 case atos: movptr(rax, oop_addr); |
135 case atos: movptr(rax, oop_addr); |
136 movptr(oop_addr, (int32_t)NULL_WORD); |
136 movptr(oop_addr, NULL_WORD); |
137 verify_oop(rax, state); break; |
137 verify_oop(rax, state); break; |
138 case ltos: |
138 case ltos: |
139 movl(rdx, val_addr1); // fall through |
139 movl(rdx, val_addr1); // fall through |
140 case btos: // fall through |
140 case btos: // fall through |
141 case ctos: // fall through |
141 case ctos: // fall through |
146 case vtos: /* nothing to do */ break; |
146 case vtos: /* nothing to do */ break; |
147 default : ShouldNotReachHere(); |
147 default : ShouldNotReachHere(); |
148 } |
148 } |
149 // Clean up tos value in the thread object |
149 // Clean up tos value in the thread object |
150 movl(tos_addr, (int32_t) ilgl); |
150 movl(tos_addr, (int32_t) ilgl); |
151 movptr(val_addr, (int32_t)NULL_WORD); |
151 movptr(val_addr, NULL_WORD); |
152 NOT_LP64(movl(val_addr1, (int32_t)NULL_WORD)); |
152 NOT_LP64(movl(val_addr1, (int32_t)NULL_WORD)); |
153 } |
153 } |
154 |
154 |
155 |
155 |
156 void InterpreterMacroAssembler::check_and_handle_earlyret(Register java_thread) { |
156 void InterpreterMacroAssembler::check_and_handle_earlyret(Register java_thread) { |
942 |
942 |
943 // Load oop into obj_reg(%rcx) |
943 // Load oop into obj_reg(%rcx) |
944 movptr(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset_in_bytes ())); |
944 movptr(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset_in_bytes ())); |
945 |
945 |
946 // Free entry |
946 // Free entry |
947 movptr(Address(lock_reg, BasicObjectLock::obj_offset_in_bytes()), (int32_t)NULL_WORD); |
947 movptr(Address(lock_reg, BasicObjectLock::obj_offset_in_bytes()), NULL_WORD); |
948 |
948 |
949 if (UseBiasedLocking) { |
949 if (UseBiasedLocking) { |
950 biased_locking_exit(obj_reg, header_reg, done); |
950 biased_locking_exit(obj_reg, header_reg, done); |
951 } |
951 } |
952 |
952 |