From 4455a3a5eeccf3443a6a14afe5a10368eb461bf1 Mon Sep 17 00:00:00 2001 From: Salikh Zakirov Date: Mon, 4 Dec 2006 18:26:27 +0300 Subject: [PATCH] skip monitor_exit fast path generation only if monitor events were enabled --- .../util/ia32/base/jit_lock_rt_support_ia32.cpp | 29 ++++++++++--------- 1 files changed, 15 insertions(+), 14 deletions(-) diff --git a/vm/vmcore/src/util/ia32/base/jit_lock_rt_support_ia32.cpp b/vm/vmcore/src/util/ia32/base/jit_lock_rt_support_ia32.cpp index 7dfc657..4cb8462 100644 --- a/vm/vmcore/src/util/ia32/base/jit_lock_rt_support_ia32.cpp +++ b/vm/vmcore/src/util/ia32/base/jit_lock_rt_support_ia32.cpp @@ -191,20 +191,21 @@ static char * gen_restore_monitor_exit(char *ss, char *patch_addr_null_arg) ss = test(ss, ecx_opnd, ecx_opnd); ss = branch8(ss, Condition_Z, Imm_Opnd(size_8, 0)); char *backpatch_address__null_pointer = ((char *)ss) - 1; -// skip fast path if ti is enabled -// so all TI events will be generated -if(!VM_Global_State::loader_env->TI->isEnabled()) { - ss = alu(ss, add_opc, ecx_opnd, Imm_Opnd(header_offset)); - ss = gen_monitor_exit_helper(ss, ecx_opnd); -} else { - ss = gen_setup_j2n_frame(ss); - ss = push(ss, M_Base_Opnd(esp_reg, m2n_sizeof_m2n_frame)); - - ss = call(ss, (char *)oh_convert_to_local_handle); - ss = alu(ss, add_opc, esp_opnd, Imm_Opnd(4)); // pop parameters - ss = gen_monitorexit_slow_path_helper(ss, eax_opnd); - ss = gen_pop_j2n_frame(ss); -} + // skip fast path if can_generate_monitor_events capability + // was requested, so all TI events will be generated + if (!VM_Global_State::loader_env->TI->get_global_capability( + DebugUtilsTI::TI_GC_ENABLE_MONITOR_EVENTS)) { + ss = alu(ss, add_opc, ecx_opnd, Imm_Opnd(header_offset)); + ss = gen_monitor_exit_helper(ss, ecx_opnd); + } else { + ss = gen_setup_j2n_frame(ss); + ss = push(ss, M_Base_Opnd(esp_reg, m2n_sizeof_m2n_frame)); + + ss = call(ss, (char *)oh_convert_to_local_handle); + ss = alu(ss, add_opc, esp_opnd, Imm_Opnd(4)); // pop parameters + ss = gen_monitorexit_slow_path_helper(ss, eax_opnd); + ss = gen_pop_j2n_frame(ss); + } ss = test(ss, eax_opnd, eax_opnd); ss = branch8(ss, Condition_NZ, Imm_Opnd(size_8, 0)); char *backpatch_address__fast_monitor_failed = ((char *)ss) - 1; -- 1.4.4.1.gc94a