75 static void throw_IncompatibleClassChangeError(JavaThread* current);
76 static void throw_IncompatibleClassChangeErrorVerbose(JavaThread* current,
77 Klass* resc,
78 Klass* interfaceKlass);
79 static void throw_StackOverflowError(JavaThread* current);
80 static void throw_delayed_StackOverflowError(JavaThread* current);
81 static void throw_ArrayIndexOutOfBoundsException(JavaThread* current, arrayOopDesc* a, jint index);
82 static void throw_ClassCastException(JavaThread* current, oopDesc* obj);
83 static void throw_NullPointerException(JavaThread* current);
84
85 static void create_exception(JavaThread* current, char* name, char* message);
86 static void create_klass_exception(JavaThread* current, char* name, oopDesc* obj);
87 static address exception_handler_for_exception(JavaThread* current, oopDesc* exception);
88 #if INCLUDE_JVMTI
89 static void member_name_arg_or_null(JavaThread* current, address dmh, Method* m, address bcp);
90 #endif
91 static void throw_pending_exception(JavaThread* current);
92
93 static void resolve_from_cache(JavaThread* current, Bytecodes::Code bytecode);
94
95 // Used by ClassPrelinker
96 static void resolve_get_put(Bytecodes::Code bytecode, int field_index,
97 methodHandle& m, constantPoolHandle& pool, bool initialize_holder, TRAPS);
98 static void cds_resolve_invoke(Bytecodes::Code bytecode, int method_index,
99 constantPoolHandle& pool, TRAPS);
100
101 private:
102 // Statics & fields
103 static void resolve_get_put(JavaThread* current, Bytecodes::Code bytecode);
104
105 // Calls
106 static void resolve_invoke(JavaThread* current, Bytecodes::Code bytecode);
107 static void resolve_invokehandle (JavaThread* current);
108 static void resolve_invokedynamic(JavaThread* current);
109
110 static void update_invoke_cp_cache_entry(CallInfo& info, Bytecodes::Code bytecode,
111 methodHandle& resolved_method,
112 constantPoolHandle& pool, int method_index);
113 public:
114 // Synchronization
115 static void monitorenter(JavaThread* current, BasicObjectLock* elem);
116 static void monitorenter_obj(JavaThread* current, oopDesc* obj);
117 static void monitorexit (BasicObjectLock* elem);
118
119 static void throw_illegal_monitor_state_exception(JavaThread* current);
120 static void new_illegal_monitor_state_exception(JavaThread* current);
121
122 // Breakpoints
123 static void _breakpoint(JavaThread* current, Method* method, address bcp);
124 static Bytecodes::Code get_original_bytecode_at(JavaThread* current, Method* method, address bcp);
125 static void set_original_bytecode_at(JavaThread* current, Method* method, address bcp, Bytecodes::Code new_code);
150
151 // bytecode tracing is only used by the TraceBytecodes
152 static intptr_t trace_bytecode(JavaThread* current, intptr_t preserve_this_value, intptr_t tos, intptr_t tos2) PRODUCT_RETURN0;
153
154 // Platform dependent stuff
155 #include CPU_HEADER(interpreterRT)
156
157 // optional normalization of fingerprints to reduce the number of adapters
158 static uint64_t normalize_fast_native_fingerprint(uint64_t fingerprint);
159
160 // Interpreter's frequency counter overflow
161 static nmethod* frequency_counter_overflow(JavaThread* current, address branch_bcp);
162
163 // Interpreter profiling support
164 static jint bcp_to_di(Method* method, address cur_bcp);
165 static void update_mdp_for_ret(JavaThread* current, int bci);
166 #ifdef ASSERT
167 static void verify_mdp(Method* method, address bcp, address mdp);
168 #endif // ASSERT
169 static MethodCounters* build_method_counters(JavaThread* current, Method* m);
170 };
171
172
173 class SignatureHandlerLibrary: public AllStatic {
174 public:
175 enum { buffer_size = 1*K }; // the size of the temporary code buffer
176 enum { blob_size = 32*K }; // the size of a handler code blob.
177
178 private:
179 static BufferBlob* _handler_blob; // the current buffer blob containing the generated handlers
180 static address _handler; // next available address within _handler_blob;
181 static GrowableArray<uint64_t>* _fingerprints; // the fingerprint collection
182 static GrowableArray<address>* _handlers; // the corresponding handlers
183 static address _buffer; // the temporary code buffer
184
185 static address set_handler_blob();
186 static void initialize();
187 static address set_handler(CodeBuffer* buffer);
188 static void pd_set_handler(address handler);
189
|
75 static void throw_IncompatibleClassChangeError(JavaThread* current);
76 static void throw_IncompatibleClassChangeErrorVerbose(JavaThread* current,
77 Klass* resc,
78 Klass* interfaceKlass);
79 static void throw_StackOverflowError(JavaThread* current);
80 static void throw_delayed_StackOverflowError(JavaThread* current);
81 static void throw_ArrayIndexOutOfBoundsException(JavaThread* current, arrayOopDesc* a, jint index);
82 static void throw_ClassCastException(JavaThread* current, oopDesc* obj);
83 static void throw_NullPointerException(JavaThread* current);
84
85 static void create_exception(JavaThread* current, char* name, char* message);
86 static void create_klass_exception(JavaThread* current, char* name, oopDesc* obj);
87 static address exception_handler_for_exception(JavaThread* current, oopDesc* exception);
88 #if INCLUDE_JVMTI
89 static void member_name_arg_or_null(JavaThread* current, address dmh, Method* m, address bcp);
90 #endif
91 static void throw_pending_exception(JavaThread* current);
92
93 static void resolve_from_cache(JavaThread* current, Bytecodes::Code bytecode);
94
95 // Used by AOTConstantPoolResolver
96 static void resolve_get_put(Bytecodes::Code bytecode, int field_index,
97 methodHandle& m, constantPoolHandle& pool, bool initialize_holder, TRAPS);
98 static void cds_resolve_invoke(Bytecodes::Code bytecode, int method_index,
99 constantPoolHandle& pool, TRAPS);
100 static void cds_resolve_invokehandle(int raw_index,
101 constantPoolHandle& pool, TRAPS);
102 static void cds_resolve_invokedynamic(int raw_index,
103 constantPoolHandle& pool, TRAPS);
104 private:
105 // Statics & fields
106 static void resolve_getfield(JavaThread* current);
107 static void resolve_putfield(JavaThread* current);
108 static void resolve_getstatic(JavaThread* current);
109 static void resolve_putstatic(JavaThread* current);
110
111 static void resolve_get_put(JavaThread* current, Bytecodes::Code bytecode);
112
113 // Calls
114 static void resolve_invokevirtual(JavaThread* current);
115 static void resolve_invokespecial(JavaThread* current);
116 static void resolve_invokestatic(JavaThread* current);
117 static void resolve_invokeinterface(JavaThread* current);
118
119 static void resolve_invoke(JavaThread* current, Bytecodes::Code bytecode);
120 static void resolve_invokehandle (JavaThread* current);
121 static void resolve_invokedynamic(JavaThread* current);
122
123 static void update_invoke_cp_cache_entry(CallInfo& info, Bytecodes::Code bytecode,
124 methodHandle& resolved_method,
125 constantPoolHandle& pool, int method_index);
126 public:
127 // Synchronization
128 static void monitorenter(JavaThread* current, BasicObjectLock* elem);
129 static void monitorenter_obj(JavaThread* current, oopDesc* obj);
130 static void monitorexit (BasicObjectLock* elem);
131
132 static void throw_illegal_monitor_state_exception(JavaThread* current);
133 static void new_illegal_monitor_state_exception(JavaThread* current);
134
135 // Breakpoints
136 static void _breakpoint(JavaThread* current, Method* method, address bcp);
137 static Bytecodes::Code get_original_bytecode_at(JavaThread* current, Method* method, address bcp);
138 static void set_original_bytecode_at(JavaThread* current, Method* method, address bcp, Bytecodes::Code new_code);
163
164 // bytecode tracing is only used by the TraceBytecodes
165 static intptr_t trace_bytecode(JavaThread* current, intptr_t preserve_this_value, intptr_t tos, intptr_t tos2) PRODUCT_RETURN0;
166
167 // Platform dependent stuff
168 #include CPU_HEADER(interpreterRT)
169
170 // optional normalization of fingerprints to reduce the number of adapters
171 static uint64_t normalize_fast_native_fingerprint(uint64_t fingerprint);
172
173 // Interpreter's frequency counter overflow
174 static nmethod* frequency_counter_overflow(JavaThread* current, address branch_bcp);
175
176 // Interpreter profiling support
177 static jint bcp_to_di(Method* method, address cur_bcp);
178 static void update_mdp_for_ret(JavaThread* current, int bci);
179 #ifdef ASSERT
180 static void verify_mdp(Method* method, address bcp, address mdp);
181 #endif // ASSERT
182 static MethodCounters* build_method_counters(JavaThread* current, Method* m);
183
184 static void init_counters();
185 static void print_counters_on(outputStream* st);
186 };
187
188
189 class SignatureHandlerLibrary: public AllStatic {
190 public:
191 enum { buffer_size = 1*K }; // the size of the temporary code buffer
192 enum { blob_size = 32*K }; // the size of a handler code blob.
193
194 private:
195 static BufferBlob* _handler_blob; // the current buffer blob containing the generated handlers
196 static address _handler; // next available address within _handler_blob;
197 static GrowableArray<uint64_t>* _fingerprints; // the fingerprint collection
198 static GrowableArray<address>* _handlers; // the corresponding handlers
199 static address _buffer; // the temporary code buffer
200
201 static address set_handler_blob();
202 static void initialize();
203 static address set_handler(CodeBuffer* buffer);
204 static void pd_set_handler(address handler);
205
|