From 2e06461e8892640b3e9c73b54fd7f68daa9fcb2a Mon Sep 17 00:00:00 2001 From: Irwin D'Souza Date: Tue, 15 Oct 2024 15:14:23 -0400 Subject: [PATCH] Support resolved invokeHandle/invokeDynamic dispatch in SVM AOT Signed-off-by: Irwin D'Souza --- runtime/compiler/env/j9method.cpp | 24 ++++++++++++++++++++++++ runtime/compiler/env/j9method.h | 4 ++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/runtime/compiler/env/j9method.cpp b/runtime/compiler/env/j9method.cpp index 898a29fa8d4..d62895cb59b 100644 --- a/runtime/compiler/env/j9method.cpp +++ b/runtime/compiler/env/j9method.cpp @@ -1294,6 +1294,30 @@ TR_ResolvedRelocatableJ9Method::isUnresolvedMethodHandle(I_32 cpIndex) return true; } +bool +TR_ResolvedRelocatableJ9Method::isUnresolvedCallSiteTableEntry(int32_t callSiteIndex) + { + bool unresolved = true; + J9JavaVM * javaVM = fej9()->_jitConfig->javaVM; + if (J9_ARE_ALL_BITS_SET(javaVM->sharedClassConfig->runtimeFlags2, J9SHR_RUNTIMEFLAG2_SHARE_LAMBDAFORM)) + { + unresolved = TR_ResolvedJ9Method::isUnresolvedCallSiteTableEntry(callSiteIndex); + } + return unresolved; + } + +bool +TR_ResolvedRelocatableJ9Method::isUnresolvedMethodTypeTableEntry(int32_t cpIndex) + { + bool unresolved = true; + J9JavaVM * javaVM = fej9()->_jitConfig->javaVM; + if (J9_ARE_ALL_BITS_SET(javaVM->sharedClassConfig->runtimeFlags2, J9SHR_RUNTIMEFLAG2_SHARE_LAMBDAFORM)) + { + unresolved = TR_ResolvedJ9Method::isUnresolvedMethodTypeTableEntry(cpIndex); + } + return unresolved; + } + TR_ResolvedMethod * TR_ResolvedRelocatableJ9Method::getResolvedPossiblyPrivateVirtualMethod( TR::Compilation *comp, diff --git a/runtime/compiler/env/j9method.h b/runtime/compiler/env/j9method.h index f12cb69592c..783be767574 100644 --- a/runtime/compiler/env/j9method.h +++ b/runtime/compiler/env/j9method.h @@ -604,8 +604,8 @@ class TR_ResolvedRelocatableJ9Method : public TR_ResolvedJ9Method virtual bool isUnresolvedMethodType(int32_t cpIndex); virtual void * methodHandleConstant(int32_t cpIndex); virtual bool isUnresolvedMethodHandle(int32_t cpIndex); - virtual bool isUnresolvedCallSiteTableEntry(int32_t callSiteIndex) { return true; } - virtual bool isUnresolvedMethodTypeTableEntry(int32_t cpIndex) { return true; } + virtual bool isUnresolvedCallSiteTableEntry(int32_t callSiteIndex); + virtual bool isUnresolvedMethodTypeTableEntry(int32_t cpIndex); virtual bool fieldAttributes ( TR::Compilation *, int32_t cpIndex, uint32_t * fieldOffset, TR::DataType * type, bool * volatileP, bool * isFinal, bool *isPrivate, bool isStore, bool * unresolvedInCP, bool needsAOTValidation);