< prev index next >

src/hotspot/share/code/compiledIC.hpp

 #define SHARE_VM_CODE_COMPILEDIC_HPP
 
 #include "code/nativeInst.hpp"
 #include "interpreter/linkResolver.hpp"
 #include "oops/compiledICHolder.hpp"
+#include "runtime/safepointVerifiers.hpp"
 
 //-----------------------------------------------------------------------------
 // The CompiledIC represents a compiled inline cache.
 //
 // In order to make patching of the inline cache MT-safe, we only allow the following

@@ -65,10 +66,11 class CompiledICLocker: public StackObj { CompiledMethod* _method; CompiledICProtectionBehaviour* _behaviour; bool _locked; + NoSafepointVerifier _nsv; public: CompiledICLocker(CompiledMethod* method); ~CompiledICLocker(); static bool is_safe(CompiledMethod* method);
@@ -270,17 +272,17 // Note: We do not provide any direct access to the stub code, to prevent parts of the code // to manipulate the inline cache in MT-unsafe ways. // // They all takes a TRAP argument, since they can cause a GC if the inline-cache buffer is full. // - void set_to_clean(bool in_use = true); - void set_to_monomorphic(CompiledICInfo& info); + bool set_to_clean(bool in_use = true); + bool set_to_monomorphic(CompiledICInfo& info); void clear_ic_stub(); // Returns true if successful and false otherwise. The call can fail if memory - // allocation in the code cache fails. - bool set_to_megamorphic(CallInfo* call_info, Bytecodes::Code bytecode, TRAPS); + // allocation in the code cache fails, or ic stub refill is required. + bool set_to_megamorphic(CallInfo* call_info, Bytecodes::Code bytecode, bool& needs_ic_stub_refill, TRAPS); static void compute_monomorphic_entry(const methodHandle& method, Klass* receiver_klass, bool is_optimized, bool static_bound, bool caller_is_nmethod, CompiledICInfo& info, TRAPS);
@@ -370,11 +372,11 public: // Clean static call (will force resolving on next use) virtual address destination() const = 0; // Clean static call (will force resolving on next use) - void set_to_clean(bool in_use = true); + bool set_to_clean(bool in_use = true); // Set state. The entry must be the same, as computed by compute_entry. // Computation and setting is split up, since the actions are separate during // a OptoRuntime::resolve_xxx. void set(const StaticCallInfo& info);
< prev index next >