< prev index next >
src/hotspot/cpu/x86/interp_masm_x86.cpp
Print this page
*** 1077,1089 ****
notify_method_exit(state, NotifyJVMTI); // preserve TOSCA
} else {
notify_method_exit(state, SkipNotifyJVMTI); // preserve TOSCA
}
! Label vtbuffer_slow, vtbuffer_done;
const Register thread1 = NOT_LP64(rcx) LP64_ONLY(r15_thread);
const uintptr_t chunk_mask = VTBufferChunk::chunk_mask();
movptr(rbx, Address(rbp, frame::interpreter_frame_vt_alloc_ptr_offset * wordSize));
NOT_LP64(get_thread(thread1));
movptr(rcx, Address(thread1, JavaThread::vt_alloc_ptr_offset()));
cmpptr(rbx, rcx);
jcc(Assembler::equal, vtbuffer_done);
--- 1077,1125 ----
notify_method_exit(state, NotifyJVMTI); // preserve TOSCA
} else {
notify_method_exit(state, SkipNotifyJVMTI); // preserve TOSCA
}
! if (StackReservedPages > 0) {
! movptr(rbx,
! Address(rbp, frame::interpreter_frame_sender_sp_offset * wordSize));
! // testing if reserved zone needs to be re-enabled
! Register rthread = LP64_ONLY(r15_thread) NOT_LP64(rcx);
! Label no_reserved_zone_enabling;
!
! NOT_LP64(get_thread(rthread);)
!
! cmpl(Address(rthread, JavaThread::stack_guard_state_offset()), JavaThread::stack_guard_enabled);
! jcc(Assembler::equal, no_reserved_zone_enabling);
!
! cmpptr(rbx, Address(rthread, JavaThread::reserved_stack_activation_offset()));
! jcc(Assembler::lessEqual, no_reserved_zone_enabling);
!
! call_VM_leaf(
! CAST_FROM_FN_PTR(address, SharedRuntime::enable_stack_reserved_zone), rthread);
! call_VM(noreg, CAST_FROM_FN_PTR(address,
! InterpreterRuntime::throw_delayed_StackOverflowError));
! should_not_reach_here();
!
! bind(no_reserved_zone_enabling);
! }
!
! // Code below is taking care of recycling TLVB memory, no safepoint should
! // occur between this point and the end of the remove_activation() method
! Label vtbuffer_slow, vtbuffer_done, no_buffered_value_returned;
const Register thread1 = NOT_LP64(rcx) LP64_ONLY(r15_thread);
const uintptr_t chunk_mask = VTBufferChunk::chunk_mask();
+ NOT_LP64(get_thread(thread1));
+ cmpptr(Address(thread1, JavaThread::return_buffered_value_offset()), (intptr_t)NULL_WORD);
+ jcc(Assembler::equal, no_buffered_value_returned);
+ movptr(rbx, Address(rbp, frame::interpreter_frame_vt_alloc_ptr_offset * wordSize));
+ call_VM_leaf(CAST_FROM_FN_PTR(address,
+ InterpreterRuntime::return_value_step2), rax, rbx);
+ NOT_LP64(get_thread(thread1));
+ get_vm_result(rax, thread1);
+ jmp(vtbuffer_done);
+ bind(no_buffered_value_returned);
movptr(rbx, Address(rbp, frame::interpreter_frame_vt_alloc_ptr_offset * wordSize));
NOT_LP64(get_thread(thread1));
movptr(rcx, Address(thread1, JavaThread::vt_alloc_ptr_offset()));
cmpptr(rbx, rcx);
jcc(Assembler::equal, vtbuffer_done);
*** 1094,1133 ****
movptr(rbx, Address(rbp, frame::interpreter_frame_vt_alloc_ptr_offset * wordSize));
movptr(Address(thread1, JavaThread::vt_alloc_ptr_offset()), rbx);
jmp(vtbuffer_done);
bind(vtbuffer_slow);
push(state);
! call_VM(noreg, CAST_FROM_FN_PTR(address,
! InterpreterRuntime::recycle_vtbuffer));
pop(state);
bind(vtbuffer_done);
// remove activation
// get sender sp
movptr(rbx,
Address(rbp, frame::interpreter_frame_sender_sp_offset * wordSize));
- if (StackReservedPages > 0) {
- // testing if reserved zone needs to be re-enabled
- Register rthread = LP64_ONLY(r15_thread) NOT_LP64(rcx);
- Label no_reserved_zone_enabling;
-
- NOT_LP64(get_thread(rthread);)
- cmpl(Address(rthread, JavaThread::stack_guard_state_offset()), JavaThread::stack_guard_enabled);
- jcc(Assembler::equal, no_reserved_zone_enabling);
-
- cmpptr(rbx, Address(rthread, JavaThread::reserved_stack_activation_offset()));
- jcc(Assembler::lessEqual, no_reserved_zone_enabling);
-
- call_VM_leaf(
- CAST_FROM_FN_PTR(address, SharedRuntime::enable_stack_reserved_zone), rthread);
- call_VM(noreg, CAST_FROM_FN_PTR(address,
- InterpreterRuntime::throw_delayed_StackOverflowError));
- should_not_reach_here();
-
- bind(no_reserved_zone_enabling);
- }
if (load_values) {
// We are returning a value type, load its fields into registers
#ifndef _LP64
super_call_VM_leaf(StubRoutines::load_value_type_fields_in_regs());
#else
--- 1130,1150 ----
movptr(rbx, Address(rbp, frame::interpreter_frame_vt_alloc_ptr_offset * wordSize));
movptr(Address(thread1, JavaThread::vt_alloc_ptr_offset()), rbx);
jmp(vtbuffer_done);
bind(vtbuffer_slow);
push(state);
! movptr(rbx, Address(rbp, frame::interpreter_frame_vt_alloc_ptr_offset * wordSize));
! call_VM_leaf(CAST_FROM_FN_PTR(address,
! InterpreterRuntime::recycle_vtbuffer), rbx);
pop(state);
bind(vtbuffer_done);
// remove activation
// get sender sp
movptr(rbx,
Address(rbp, frame::interpreter_frame_sender_sp_offset * wordSize));
if (load_values) {
// We are returning a value type, load its fields into registers
#ifndef _LP64
super_call_VM_leaf(StubRoutines::load_value_type_fields_in_regs());
#else
< prev index next >