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 };