Mercurial > hg > graal-compiler
comparison 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 |
comparison
equal
deleted
inserted
replaced
1428:695451afc619 | 1429:abc670a709dc |
---|---|
24 | 24 |
25 class CodeInstaller { | 25 class CodeInstaller { |
26 private: | 26 private: |
27 // this needs to correspond to HotSpotXirGenerator.java | 27 // this needs to correspond to HotSpotXirGenerator.java |
28 enum MarkId { | 28 enum MarkId { |
29 MARK_VERIFIED_ENTRY = 0x0001, | 29 MARK_VERIFIED_ENTRY = 0x0001, |
30 MARK_UNVERIFIED_ENTRY = 0x0002, | 30 MARK_UNVERIFIED_ENTRY = 0x0002, |
31 MARK_OSR_ENTRY = 0x0003, | 31 MARK_OSR_ENTRY = 0x0003, |
32 MARK_STATIC_CALL_STUB = 0x1000, | 32 MARK_UNWIND_ENTRY = 0x0004, |
33 MARK_INVOKE_INVALID = 0x2000, | 33 MARK_EXCEPTION_HANDLER_ENTRY = 0x0005, |
34 MARK_INVOKEINTERFACE = 0x2001, | 34 MARK_STATIC_CALL_STUB = 0x1000, |
35 MARK_INVOKESTATIC = 0x2002, | 35 MARK_INVOKE_INVALID = 0x2000, |
36 MARK_INVOKESPECIAL = 0x2003, | 36 MARK_INVOKEINTERFACE = 0x2001, |
37 MARK_INVOKEVIRTUAL = 0x2004, | 37 MARK_INVOKESTATIC = 0x2002, |
38 MARK_IMPLICIT_NULL_EXCEPTION_TARGET = 0x3000 | 38 MARK_INVOKESPECIAL = 0x2003, |
39 MARK_INVOKEVIRTUAL = 0x2004, | |
40 MARK_IMPLICIT_NULL = 0x3000, | |
41 MARK_KLASS_PATCHING = 0x4000, | |
42 MARK_DUMMY_OOP_RELOCATION = 0x4001 | |
39 }; | 43 }; |
40 | 44 |
41 ciEnv* _env; | 45 ciEnv* _env; |
42 | 46 |
43 oop _citarget_method; | 47 oop _citarget_method; |
44 oop _hotspot_method; | 48 oop _hotspot_method; |
45 oop _name; | 49 oop _name; |
46 arrayOop _sites; | 50 arrayOop _sites; |
51 arrayOop _exception_handlers; | |
47 CodeOffsets _offsets; | 52 CodeOffsets _offsets; |
48 | 53 |
49 arrayOop _code; | 54 arrayOop _code; |
50 jint _code_size; | 55 jint _code_size; |
51 jint _frame_size; | 56 jint _frame_size; |
57 address _invoke_mark_pc; | 62 address _invoke_mark_pc; |
58 | 63 |
59 CodeSection* _instructions; | 64 CodeSection* _instructions; |
60 CodeSection* _constants; | 65 CodeSection* _constants; |
61 | 66 |
62 OopRecorder* _oop_recorder; | 67 OopRecorder* _oop_recorder; |
63 DebugInformationRecorder* _debug_recorder; | 68 DebugInformationRecorder* _debug_recorder; |
64 Dependencies* _dependencies; | 69 Dependencies* _dependencies; |
70 ExceptionHandlerTable _exception_handler_table; | |
71 ImplicitExceptionTable _implicit_exception_table; | |
65 | 72 |
66 public: | 73 public: |
67 | 74 |
68 // constructor used to create a method | 75 // constructor used to create a method |
69 CodeInstaller(oop target_method); | 76 CodeInstaller(oop target_method); |
78 void initialize_buffer(CodeBuffer& buffer); | 85 void initialize_buffer(CodeBuffer& buffer); |
79 | 86 |
80 void site_Safepoint(CodeBuffer& buffer, jint pc_offset, oop site); | 87 void site_Safepoint(CodeBuffer& buffer, jint pc_offset, oop site); |
81 void site_Call(CodeBuffer& buffer, jint pc_offset, oop site); | 88 void site_Call(CodeBuffer& buffer, jint pc_offset, oop site); |
82 void site_DataPatch(CodeBuffer& buffer, jint pc_offset, oop site); | 89 void site_DataPatch(CodeBuffer& buffer, jint pc_offset, oop site); |
83 void site_ExceptionHandler(CodeBuffer& buffer, jint pc_offset, oop site); | |
84 void site_Mark(CodeBuffer& buffer, jint pc_offset, oop site); | 90 void site_Mark(CodeBuffer& buffer, jint pc_offset, oop site); |
85 | 91 |
86 void record_frame(jint pc_offset, oop code_pos, oop frame); | 92 void record_frame(jint pc_offset, oop code_pos, oop frame); |
87 | 93 |
94 void process_exception_handlers(); | |
95 | |
88 }; | 96 }; |