!1143 get prev interpreted frame of entry frame

Merge pull request !1143 from guobingbing/adapter-asm
This commit is contained in:
openharmony_ci 2022-04-26 09:34:00 +00:00 committed by Gitee
commit 2c0c759481
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 14 additions and 4 deletions

View File

@ -389,6 +389,17 @@ void InterpretedEntryFrameHandler::Iterate([[maybe_unused]] const RootVisitor &v
v1(Root::ROOT_FRAME, ObjectSlot(start), ObjectSlot(end));
}
JSTaggedType* InterpretedEntryFrameHandler::GetPrevInterpretedFrame(JSTaggedType *sp)
{
InterpretedEntryFrame *entryState = InterpretedEntryFrame::GetFrameFromSp(sp);
JSTaggedType *prevSp = entryState->base.prev;
if (prevSp != nullptr && FrameHandler(prevSp).GetFrameType() == FrameType::LEAVE_FRAME) {
OptimizedLeaveFrame *leaveFrame = OptimizedLeaveFrame::GetFrameFromSp(prevSp);
prevSp = reinterpret_cast<JSTaggedType *>(leaveFrame->callsiteFp);
}
return prevSp;
}
void OptimizedFrameHandler::PrevFrame()
{
OptimizedFrame *frame = OptimizedFrame::GetFrameFromSp(sp_);

View File

@ -138,6 +138,7 @@ public:
void PrevFrame();
int32_t GetArgsNumber();
void Iterate(const RootVisitor &v0, const RootRangeVisitor &v1);
static JSTaggedType *GetPrevInterpretedFrame(JSTaggedType *sp);
};
class OptimizedFrameHandler : public FrameHandler {

View File

@ -456,8 +456,7 @@ JSTaggedValue InterpreterAssembly::ExecuteNative(EcmaRuntimeCallInfo *info)
ASSERT(method->GetNumVregsWithCallField() == 0);
JSTaggedType *sp = const_cast<JSTaggedType *>(thread->GetCurrentSPFrame());
InterpretedEntryFrame *entryState = GET_ENTRY_FRAME(sp);
JSTaggedType *prevSp = entryState->base.prev;
JSTaggedType *prevSp = InterpretedEntryFrameHandler::GetPrevInterpretedFrame(sp);
int32_t actualNumArgs = static_cast<int32_t>(info->GetArgsNumber());
// NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
@ -510,8 +509,7 @@ JSTaggedValue InterpreterAssembly::Execute(EcmaRuntimeCallInfo *info)
// current sp is entry frame.
JSTaggedType *sp = const_cast<JSTaggedType *>(thread->GetCurrentSPFrame());
InterpretedEntryFrame *entryState = GET_ENTRY_FRAME(sp);
JSTaggedType *prevSp = entryState->base.prev;
JSTaggedType *prevSp = InterpretedEntryFrameHandler::GetPrevInterpretedFrame(sp);
int32_t actualNumArgs = static_cast<int32_t>(info->GetArgsNumber());
// NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)