diff c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java @ 1936:8d88c9ac9247

Correct deopt handler entry. New flag -XX:+TraceSignals. More detailed deopt printing.
author Thomas Wuerthinger <wuerthinger@ssw.jku.at>
date Thu, 23 Dec 2010 18:13:28 +0100
parents b1f2e875300a
children 00bc9eaf0e24
line wrap: on
line diff
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java	Wed Dec 22 19:47:39 2010 +0100
+++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java	Thu Dec 23 18:13:28 2010 +0100
@@ -51,6 +51,7 @@
     private static final Integer MARK_OSR_ENTRY                 = 0x0003;
     private static final Integer MARK_UNWIND_ENTRY              = 0x0004;
     private static final Integer MARK_EXCEPTION_HANDLER_ENTRY   = 0x0005;
+    private static final Integer MARK_DEOPT_HANDLER_ENTRY       = 0x0006;
 
     private static final Integer MARK_STATIC_CALL_STUB          = 0x1000;
 
@@ -128,6 +129,11 @@
             asm.callRuntime(config.handleExceptionStub, null);
             asm.shouldNotReachHere();
 
+            asm.nop(1);
+            asm.mark(MARK_DEOPT_HANDLER_ENTRY);
+            asm.callRuntime(config.handleDeoptStub, null);
+            asm.shouldNotReachHere();
+
             if (!is(STATIC_METHOD, flags)) {
                 asm.bindOutOfLine(unverifiedStub);
                 asm.jmpRuntime(config.inlineCacheMissStub);
@@ -663,11 +669,10 @@
                 } else {
                     length = asm.createTemp("length", CiKind.Int);
                     if (implicitNullException) {
-                        asm.nop(1);
+                        //asm.nop(1);
                         asm.mark(MARK_IMPLICIT_NULL);
                     }
                     asm.pload(CiKind.Int, length, array, asm.i(config.arrayLengthOffset), implicitNullException);
-                    implicitNullException = false;
                 }
                 asm.jugteq(failBoundsCheck, index, length);
                 implicitNullException = false;
@@ -1088,6 +1093,8 @@
             asm.callRuntime(config.accessFieldStub, null);
             asm.jmp(patchSite);
 
+            // Check if we need NOP instructions like in C1 to "not destroy the world".
+
             state = State.Finished;
         }
     }