< 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
class CompiledICLocker: public StackObj {
CompiledMethod* _method;
CompiledICProtectionBehaviour* _behaviour;
bool _locked;
+ NoSafepointVerifier _nsv;
public:
CompiledICLocker(CompiledMethod* method);
~CompiledICLocker();
static bool is_safe(CompiledMethod* method);
// 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);
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 >