# HG changeset patch # User Thomas Wuerthinger # Date 1289583247 -3600 # Node ID d603bdbec024ef1b4d784cabeda3774450b44ff4 # Parent 9b22e3e5df8e6013fdd458c401c164d85c02ce7f Enable monitorenter/monitorexit runtime calls. diff -r 9b22e3e5df8e -r d603bdbec024 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/Compiler.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/Compiler.java Fri Nov 12 18:04:27 2010 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/Compiler.java Fri Nov 12 18:34:07 2010 +0100 @@ -180,6 +180,7 @@ C1XOptions.NullCheckUniquePc = true; C1XOptions.invokeinterfaceTemplatePos = true; C1XOptions.StackShadowPages = config.stackShadowPages; + C1XOptions.NeedsDebugInformation = false; } diff -r 9b22e3e5df8e -r d603bdbec024 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java Fri Nov 12 18:04:27 2010 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java Fri Nov 12 18:34:07 2010 +0100 @@ -307,11 +307,11 @@ asm.mark(MARK_IMPLICIT_NULL); asm.pload(CiKind.Word, asm.createTemp("temp", CiKind.Word), object, true); } -/* + useRegisters(asm, AMD64.rbx, AMD64.rsi, AMD64.rdx); useRegisters(asm, AMD64.rax); asm.callRuntime(config.monitorEnterStub, null, object, lock); -*/ + return asm.finishTemplate("monitorEnter"); } }; @@ -323,11 +323,11 @@ asm.restart(CiKind.Void); XirParameter object = asm.createInputParameter("object", CiKind.Object); XirParameter lock = asm.createInputParameter("lock", CiKind.Word); -/* + useRegisters(asm, AMD64.rbx, AMD64.rsi, AMD64.rdx); useRegisters(asm, AMD64.rax); asm.callRuntime(config.monitorExitStub, null, object, lock); -*/ + return asm.finishTemplate("monitorExit"); } }; diff -r 9b22e3e5df8e -r d603bdbec024 src/share/vm/c1x/c1x_CodeInstaller.cpp --- a/src/share/vm/c1x/c1x_CodeInstaller.cpp Fri Nov 12 18:04:27 2010 +0100 +++ b/src/share/vm/c1x/c1x_CodeInstaller.cpp Fri Nov 12 18:34:07 2010 +0100 @@ -327,7 +327,6 @@ reexecute = Interpreter::bytecode_should_reexecute(code); } - if (frame != NULL) { jint local_count = CiDebugInfo_Frame::numLocals(frame); jint expression_count = CiDebugInfo_Frame::numStack(frame); @@ -350,8 +349,9 @@ } else { assert(value->is_location(), "invalid monitor location"); LocationValue* loc = (LocationValue*)value; - LocationValue* obj = new LocationValue(Location::new_stk_loc(Location::oop, loc->location().stack_offset() + HeapWordSize)); - monitors->append(new MonitorValue(obj, Location::new_stk_loc(Location::normal, loc->location().stack_offset()))); + int monitor_offset = loc->location().stack_offset(); + LocationValue* obj = new LocationValue(Location::new_stk_loc(Location::oop, monitor_offset + BasicObjectLock::obj_offset_in_bytes())); + monitors->append(new MonitorValue(obj, Location::new_stk_loc(Location::normal, monitor_offset + BasicObjectLock::lock_offset_in_bytes()))); } } DebugToken* locals_token = _debug_recorder->create_scope_values(locals);