src/share/vm/code/compiledIC.hpp

Print this page
rev 3825 : Specify offset of IC load in java_to_interp stub.

If a compiled static call calls the interpreter, it jumps past a
java_to_interp stub in the compiled code. Patching this call must
find the load of the IC. So far the shared code assumed this is the
first instruction in the stub.
This might not be the case if, for example, the base of the constant
table must be loaded.
Extend CompiledStaticCall to consider an offset from its beginning
where to search the load of the IC.


 310   bool is_call_to_interpreted() const;
 311 
 312   // Clean static call (will force resolving on next use)
 313   void set_to_clean();
 314 
 315   // Set state. The entry must be the same, as computed by compute_entry.
 316   // Computation and setting is split up, since the actions are separate during
 317   // a OptoRuntime::resolve_xxx.
 318   void set(const StaticCallInfo& info);
 319 
 320   // Compute entry point given a method
 321   static void compute_entry(methodHandle m, StaticCallInfo& info);
 322 
 323   // Stub support
 324   address find_stub();
 325   static void set_stub_to_clean(static_stub_Relocation* static_stub);
 326 
 327   // Misc.
 328   void print()  PRODUCT_RETURN;
 329   void verify() PRODUCT_RETURN;




 330 };
 331 
 332 
 333 inline CompiledStaticCall* compiledStaticCall_before(address return_addr) {
 334   CompiledStaticCall* st = (CompiledStaticCall*)nativeCall_before(return_addr);
 335   st->verify();
 336   return st;
 337 }
 338 
 339 inline CompiledStaticCall* compiledStaticCall_at(address native_call) {
 340   CompiledStaticCall* st = (CompiledStaticCall*)native_call;
 341   st->verify();
 342   return st;
 343 }
 344 
 345 inline CompiledStaticCall* compiledStaticCall_at(Relocation* call_site) {
 346   return compiledStaticCall_at(call_site->addr());
 347 }
 348 
 349 #endif // SHARE_VM_CODE_COMPILEDIC_HPP


 310   bool is_call_to_interpreted() const;
 311 
 312   // Clean static call (will force resolving on next use)
 313   void set_to_clean();
 314 
 315   // Set state. The entry must be the same, as computed by compute_entry.
 316   // Computation and setting is split up, since the actions are separate during
 317   // a OptoRuntime::resolve_xxx.
 318   void set(const StaticCallInfo& info);
 319 
 320   // Compute entry point given a method
 321   static void compute_entry(methodHandle m, StaticCallInfo& info);
 322 
 323   // Stub support
 324   address find_stub();
 325   static void set_stub_to_clean(static_stub_Relocation* static_stub);
 326 
 327   // Misc.
 328   void print()  PRODUCT_RETURN;
 329   void verify() PRODUCT_RETURN;
 330 
 331   // Offset of start of compiled java to interpreter stub to the load
 332   // constant that loads the inline cache (IC). See ad file.
 333   static const int comp_to_int_load_offset;
 334 };
 335 
 336 
 337 inline CompiledStaticCall* compiledStaticCall_before(address return_addr) {
 338   CompiledStaticCall* st = (CompiledStaticCall*)nativeCall_before(return_addr);
 339   st->verify();
 340   return st;
 341 }
 342 
 343 inline CompiledStaticCall* compiledStaticCall_at(address native_call) {
 344   CompiledStaticCall* st = (CompiledStaticCall*)native_call;
 345   st->verify();
 346   return st;
 347 }
 348 
 349 inline CompiledStaticCall* compiledStaticCall_at(Relocation* call_site) {
 350   return compiledStaticCall_at(call_site->addr());
 351 }
 352 
 353 #endif // SHARE_VM_CODE_COMPILEDIC_HPP