diff src/share/vm/c1x/c1x_CodeInstaller.hpp @ 1429:abc670a709dc

* -XX:TraceC1X=0...5 controls the native c1x tracing * -Dc1x.debug=true turns on the logging proxies and lots of log output on the java side * provide more information about types to the compiler (type hierarchy, etc) * provide exception handler tables to the compiler * add exception handlers to the nmethod * correct implementation of ExceptionObject * exception handling/unwinding entry points * modified versions of handle/unwind exception stubs using standard calling conventions * exception throwing * implicit null pointer exception, implicit div by 0 exception * arraystore/classcast/arrayindex exceptions * checkcast implementation * newarray, anewarray, multinewarray implementation * correct new instance initialization * access to java class mirrors (for ldc) * unresolved methods * class resolving - class patching (asssembly prototype copying)
author Lukas Stadler <lukas.stadler@oracle.com>
date Tue, 31 Aug 2010 22:13:30 -0700
parents 695451afc619
children b61a43cd1255
line wrap: on
line diff
--- a/src/share/vm/c1x/c1x_CodeInstaller.hpp	Thu Aug 19 14:34:52 2010 -0700
+++ b/src/share/vm/c1x/c1x_CodeInstaller.hpp	Tue Aug 31 22:13:30 2010 -0700
@@ -26,16 +26,20 @@
 private:
   // this needs to correspond to HotSpotXirGenerator.java
   enum MarkId {
-    MARK_VERIFIED_ENTRY                 = 0x0001,
-    MARK_UNVERIFIED_ENTRY               = 0x0002,
-    MARK_OSR_ENTRY                      = 0x0003,
-    MARK_STATIC_CALL_STUB               = 0x1000,
-    MARK_INVOKE_INVALID                 = 0x2000,
-    MARK_INVOKEINTERFACE                = 0x2001,
-    MARK_INVOKESTATIC                   = 0x2002,
-    MARK_INVOKESPECIAL                  = 0x2003,
-    MARK_INVOKEVIRTUAL                  = 0x2004,
-    MARK_IMPLICIT_NULL_EXCEPTION_TARGET = 0x3000
+    MARK_VERIFIED_ENTRY             = 0x0001,
+    MARK_UNVERIFIED_ENTRY           = 0x0002,
+    MARK_OSR_ENTRY                  = 0x0003,
+    MARK_UNWIND_ENTRY               = 0x0004,
+    MARK_EXCEPTION_HANDLER_ENTRY    = 0x0005,
+    MARK_STATIC_CALL_STUB           = 0x1000,
+    MARK_INVOKE_INVALID             = 0x2000,
+    MARK_INVOKEINTERFACE            = 0x2001,
+    MARK_INVOKESTATIC               = 0x2002,
+    MARK_INVOKESPECIAL              = 0x2003,
+    MARK_INVOKEVIRTUAL              = 0x2004,
+    MARK_IMPLICIT_NULL              = 0x3000,
+    MARK_KLASS_PATCHING             = 0x4000,
+    MARK_DUMMY_OOP_RELOCATION       = 0x4001
   };
 
   ciEnv*        _env;
@@ -44,6 +48,7 @@
   oop           _hotspot_method;
   oop           _name;
   arrayOop      _sites;
+  arrayOop      _exception_handlers;
   CodeOffsets   _offsets;
 
   arrayOop      _code;
@@ -59,9 +64,11 @@
   CodeSection*  _instructions;
   CodeSection*  _constants;
 
-  OopRecorder*  _oop_recorder;
+  OopRecorder*              _oop_recorder;
   DebugInformationRecorder* _debug_recorder;
-  Dependencies* _dependencies;
+  Dependencies*             _dependencies;
+  ExceptionHandlerTable     _exception_handler_table;
+  ImplicitExceptionTable    _implicit_exception_table;
 
 public:
 
@@ -80,9 +87,10 @@
   void site_Safepoint(CodeBuffer& buffer, jint pc_offset, oop site);
   void site_Call(CodeBuffer& buffer, jint pc_offset, oop site);
   void site_DataPatch(CodeBuffer& buffer, jint pc_offset, oop site);
-  void site_ExceptionHandler(CodeBuffer& buffer, jint pc_offset, oop site);
   void site_Mark(CodeBuffer& buffer, jint pc_offset, oop site);
 
   void record_frame(jint pc_offset, oop code_pos, oop frame);
 
+  void process_exception_handlers();
+
 };