2731 } 2732 #endif 2733 _call->set_destination_mt_safe(dest); 2734 } 2735 2736 virtual void set_to_interpreted(const methodHandle& method, CompiledICInfo& info) { 2737 CompiledDirectStaticCall* csc = CompiledDirectStaticCall::at(instruction_address()); 2738 #if INCLUDE_AOT 2739 if (info.to_aot()) { 2740 csc->set_to_far(method, info.entry()); 2741 } else 2742 #endif 2743 { 2744 csc->set_to_interpreted(method, info.entry()); 2745 } 2746 } 2747 2748 virtual void verify() const { 2749 // make sure code pattern is actually a call imm32 instruction 2750 _call->verify(); 2751 if (os::is_MP()) { 2752 _call->verify_alignment(); 2753 } 2754 } 2755 2756 virtual void verify_resolve_call(address dest) const { 2757 CodeBlob* db = CodeCache::find_blob_unsafe(dest); 2758 assert(db != NULL && !db->is_adapter_blob(), "must use stub!"); 2759 } 2760 2761 virtual bool is_call_to_interpreted(address dest) const { 2762 CodeBlob* cb = CodeCache::find_blob(_call->instruction_address()); 2763 return cb->contains(dest); 2764 } 2765 2766 virtual bool is_safe_for_patching() const { return false; } 2767 2768 virtual NativeInstruction* get_load_instruction(virtual_call_Relocation* r) const { 2769 return nativeMovConstReg_at(r->cached_value()); 2770 } 2771 2772 virtual void *get_data(NativeInstruction* instruction) const { 2773 return (void*)((NativeMovConstReg*) instruction)->data(); | 2731 } 2732 #endif 2733 _call->set_destination_mt_safe(dest); 2734 } 2735 2736 virtual void set_to_interpreted(const methodHandle& method, CompiledICInfo& info) { 2737 CompiledDirectStaticCall* csc = CompiledDirectStaticCall::at(instruction_address()); 2738 #if INCLUDE_AOT 2739 if (info.to_aot()) { 2740 csc->set_to_far(method, info.entry()); 2741 } else 2742 #endif 2743 { 2744 csc->set_to_interpreted(method, info.entry()); 2745 } 2746 } 2747 2748 virtual void verify() const { 2749 // make sure code pattern is actually a call imm32 instruction 2750 _call->verify(); 2751 _call->verify_alignment(); 2752 } 2753 2754 virtual void verify_resolve_call(address dest) const { 2755 CodeBlob* db = CodeCache::find_blob_unsafe(dest); 2756 assert(db != NULL && !db->is_adapter_blob(), "must use stub!"); 2757 } 2758 2759 virtual bool is_call_to_interpreted(address dest) const { 2760 CodeBlob* cb = CodeCache::find_blob(_call->instruction_address()); 2761 return cb->contains(dest); 2762 } 2763 2764 virtual bool is_safe_for_patching() const { return false; } 2765 2766 virtual NativeInstruction* get_load_instruction(virtual_call_Relocation* r) const { 2767 return nativeMovConstReg_at(r->cached_value()); 2768 } 2769 2770 virtual void *get_data(NativeInstruction* instruction) const { 2771 return (void*)((NativeMovConstReg*) instruction)->data(); |