249 bool is_icholder_call() const;
250
251 address end_of_call() { return _call->return_address(); }
252
253 // MT-safe patching of inline caches. Note: Only safe to call is_xxx when holding the CompiledIC_ock
254 // so you are guaranteed that no patching takes place. The same goes for verify.
255 //
256 // Note: We do not provide any direct access to the stub code, to prevent parts of the code
257 // to manipulate the inline cache in MT-unsafe ways.
258 //
259 // They all takes a TRAP argument, since they can cause a GC if the inline-cache buffer is full.
260 //
261 void set_to_clean(bool in_use = true);
262 void set_to_monomorphic(CompiledICInfo& info);
263 void clear_ic_stub();
264
265 // Returns true if successful and false otherwise. The call can fail if memory
266 // allocation in the code cache fails.
267 bool set_to_megamorphic(CallInfo* call_info, Bytecodes::Code bytecode, TRAPS);
268
269 static void compute_monomorphic_entry(const methodHandle& method, KlassHandle receiver_klass,
270 bool is_optimized, bool static_bound, bool caller_is_nmethod,
271 CompiledICInfo& info, TRAPS);
272
273 // Location
274 address instruction_address() const { return _call->instruction_address(); }
275
276 // Misc
277 void print() PRODUCT_RETURN;
278 void print_compiled_ic() PRODUCT_RETURN;
279 void verify() PRODUCT_RETURN;
280 };
281
282 inline CompiledIC* CompiledIC_before(CompiledMethod* nm, address return_addr) {
283 CompiledIC* c_ic = new CompiledIC(nm, nativeCall_before(return_addr));
284 c_ic->verify();
285 return c_ic;
286 }
287
288 inline CompiledIC* CompiledIC_at(CompiledMethod* nm, address call_site) {
289 CompiledIC* c_ic = new CompiledIC(nm, nativeCall_at(call_site));
|
249 bool is_icholder_call() const;
250
251 address end_of_call() { return _call->return_address(); }
252
253 // MT-safe patching of inline caches. Note: Only safe to call is_xxx when holding the CompiledIC_ock
254 // so you are guaranteed that no patching takes place. The same goes for verify.
255 //
256 // Note: We do not provide any direct access to the stub code, to prevent parts of the code
257 // to manipulate the inline cache in MT-unsafe ways.
258 //
259 // They all takes a TRAP argument, since they can cause a GC if the inline-cache buffer is full.
260 //
261 void set_to_clean(bool in_use = true);
262 void set_to_monomorphic(CompiledICInfo& info);
263 void clear_ic_stub();
264
265 // Returns true if successful and false otherwise. The call can fail if memory
266 // allocation in the code cache fails.
267 bool set_to_megamorphic(CallInfo* call_info, Bytecodes::Code bytecode, TRAPS);
268
269 static void compute_monomorphic_entry(const methodHandle& method, Klass* receiver_klass,
270 bool is_optimized, bool static_bound, bool caller_is_nmethod,
271 CompiledICInfo& info, TRAPS);
272
273 // Location
274 address instruction_address() const { return _call->instruction_address(); }
275
276 // Misc
277 void print() PRODUCT_RETURN;
278 void print_compiled_ic() PRODUCT_RETURN;
279 void verify() PRODUCT_RETURN;
280 };
281
282 inline CompiledIC* CompiledIC_before(CompiledMethod* nm, address return_addr) {
283 CompiledIC* c_ic = new CompiledIC(nm, nativeCall_before(return_addr));
284 c_ic->verify();
285 return c_ic;
286 }
287
288 inline CompiledIC* CompiledIC_at(CompiledMethod* nm, address call_site) {
289 CompiledIC* c_ic = new CompiledIC(nm, nativeCall_at(call_site));
|