385 virtual address instruction_address() const = 0; 386 protected: 387 virtual address resolve_call_stub() const = 0; 388 virtual void set_destination_mt_safe(address dest) = 0; 389 #if INCLUDE_AOT 390 virtual void set_to_far(const methodHandle& callee, address entry) = 0; 391 #endif 392 virtual void set_to_interpreted(const methodHandle& callee, address entry) = 0; 393 virtual const char* name() const = 0; 394 395 void set_to_compiled(address entry); 396 }; 397 398 class CompiledDirectStaticCall : public CompiledStaticCall { 399 private: 400 friend class CompiledIC; 401 friend class DirectNativeCallWrapper; 402 403 // Also used by CompiledIC 404 void set_to_interpreted(const methodHandle& callee, address entry); 405 #if INCLUDE_AOT 406 void set_to_far(const methodHandle& callee, address entry); 407 #endif 408 address instruction_address() const { return _call->instruction_address(); } 409 void set_destination_mt_safe(address dest) { _call->set_destination_mt_safe(dest); } 410 411 NativeCall* _call; 412 413 CompiledDirectStaticCall(NativeCall* call) : _call(call) {} 414 415 public: 416 static inline CompiledDirectStaticCall* before(address return_addr) { 417 CompiledDirectStaticCall* st = new CompiledDirectStaticCall(nativeCall_before(return_addr)); 418 st->verify(); 419 return st; 420 } 421 422 static inline CompiledDirectStaticCall* at(address native_call) { 423 CompiledDirectStaticCall* st = new CompiledDirectStaticCall(nativeCall_at(native_call)); 424 st->verify(); | 385 virtual address instruction_address() const = 0; 386 protected: 387 virtual address resolve_call_stub() const = 0; 388 virtual void set_destination_mt_safe(address dest) = 0; 389 #if INCLUDE_AOT 390 virtual void set_to_far(const methodHandle& callee, address entry) = 0; 391 #endif 392 virtual void set_to_interpreted(const methodHandle& callee, address entry) = 0; 393 virtual const char* name() const = 0; 394 395 void set_to_compiled(address entry); 396 }; 397 398 class CompiledDirectStaticCall : public CompiledStaticCall { 399 private: 400 friend class CompiledIC; 401 friend class DirectNativeCallWrapper; 402 403 // Also used by CompiledIC 404 void set_to_interpreted(const methodHandle& callee, address entry); 405 void verify_mt_safe(const methodHandle& callee, address entry, 406 NativeMovConstReg* method_holder, 407 NativeJump* jump) PRODUCT_RETURN; 408 #if INCLUDE_AOT 409 void set_to_far(const methodHandle& callee, address entry); 410 #endif 411 address instruction_address() const { return _call->instruction_address(); } 412 void set_destination_mt_safe(address dest) { _call->set_destination_mt_safe(dest); } 413 414 NativeCall* _call; 415 416 CompiledDirectStaticCall(NativeCall* call) : _call(call) {} 417 418 public: 419 static inline CompiledDirectStaticCall* before(address return_addr) { 420 CompiledDirectStaticCall* st = new CompiledDirectStaticCall(nativeCall_before(return_addr)); 421 st->verify(); 422 return st; 423 } 424 425 static inline CompiledDirectStaticCall* at(address native_call) { 426 CompiledDirectStaticCall* st = new CompiledDirectStaticCall(nativeCall_at(native_call)); 427 st->verify(); |