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_get_put(JavaThread* current, Bytecodes::Code bytecode);
107
108 // Calls
109 static void resolve_invoke(JavaThread* current, Bytecodes::Code bytecode);
110 static void resolve_invokehandle (JavaThread* current);
111 static void resolve_invokedynamic(JavaThread* current);
112
113 static void update_invoke_cp_cache_entry(CallInfo& info, Bytecodes::Code bytecode,
114 methodHandle& resolved_method,
115 constantPoolHandle& pool, int method_index);
116 public:
117 // Synchronization
153
154 // bytecode tracing is only used by the TraceBytecodes
155 static intptr_t trace_bytecode(JavaThread* current, intptr_t preserve_this_value, intptr_t tos, intptr_t tos2) PRODUCT_RETURN0;
156
157 // Platform dependent stuff
158 #include CPU_HEADER(interpreterRT)
159
160 // optional normalization of fingerprints to reduce the number of adapters
161 static uint64_t normalize_fast_native_fingerprint(uint64_t fingerprint);
162
163 // Interpreter's frequency counter overflow
164 static nmethod* frequency_counter_overflow(JavaThread* current, address branch_bcp);
165
166 // Interpreter profiling support
167 static jint bcp_to_di(Method* method, address cur_bcp);
168 static void update_mdp_for_ret(JavaThread* current, int bci);
169 #ifdef ASSERT
170 static void verify_mdp(Method* method, address bcp, address mdp);
171 #endif // ASSERT
172 static MethodCounters* build_method_counters(JavaThread* current, Method* m);
173 };
174
175
176 class SignatureHandlerLibrary: public AllStatic {
177 public:
178 enum { buffer_size = 1*K }; // the size of the temporary code buffer
179 enum { blob_size = 32*K }; // the size of a handler code blob.
180
181 private:
182 static BufferBlob* _handler_blob; // the current buffer blob containing the generated handlers
183 static address _handler; // next available address within _handler_blob;
184 static GrowableArray<uint64_t>* _fingerprints; // the fingerprint collection
185 static GrowableArray<address>* _handlers; // the corresponding handlers
186 static address _buffer; // the temporary code buffer
187
188 static address set_handler_blob();
189 static void initialize();
190 static address set_handler(CodeBuffer* buffer);
191 static void pd_set_handler(address handler);
192
|
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, StaticMode static_mode, 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_get_put(JavaThread* current, Bytecodes::Code bytecode);
107
108 // Calls
109 static void resolve_invoke(JavaThread* current, Bytecodes::Code bytecode);
110 static void resolve_invokehandle (JavaThread* current);
111 static void resolve_invokedynamic(JavaThread* current);
112
113 static void update_invoke_cp_cache_entry(CallInfo& info, Bytecodes::Code bytecode,
114 methodHandle& resolved_method,
115 constantPoolHandle& pool, int method_index);
116 public:
117 // Synchronization
153
154 // bytecode tracing is only used by the TraceBytecodes
155 static intptr_t trace_bytecode(JavaThread* current, intptr_t preserve_this_value, intptr_t tos, intptr_t tos2) PRODUCT_RETURN0;
156
157 // Platform dependent stuff
158 #include CPU_HEADER(interpreterRT)
159
160 // optional normalization of fingerprints to reduce the number of adapters
161 static uint64_t normalize_fast_native_fingerprint(uint64_t fingerprint);
162
163 // Interpreter's frequency counter overflow
164 static nmethod* frequency_counter_overflow(JavaThread* current, address branch_bcp);
165
166 // Interpreter profiling support
167 static jint bcp_to_di(Method* method, address cur_bcp);
168 static void update_mdp_for_ret(JavaThread* current, int bci);
169 #ifdef ASSERT
170 static void verify_mdp(Method* method, address bcp, address mdp);
171 #endif // ASSERT
172 static MethodCounters* build_method_counters(JavaThread* current, Method* m);
173
174 // Virtual Thread Preemption
175 DEBUG_ONLY(static bool is_preemptable_call(address entry_point);)
176 };
177
178
179 class SignatureHandlerLibrary: public AllStatic {
180 public:
181 enum { buffer_size = 1*K }; // the size of the temporary code buffer
182 enum { blob_size = 32*K }; // the size of a handler code blob.
183
184 private:
185 static BufferBlob* _handler_blob; // the current buffer blob containing the generated handlers
186 static address _handler; // next available address within _handler_blob;
187 static GrowableArray<uint64_t>* _fingerprints; // the fingerprint collection
188 static GrowableArray<address>* _handlers; // the corresponding handlers
189 static address _buffer; // the temporary code buffer
190
191 static address set_handler_blob();
192 static void initialize();
193 static address set_handler(CodeBuffer* buffer);
194 static void pd_set_handler(address handler);
195
|