mirror of
https://gitee.com/openharmony/arkcompiler_ets_runtime
synced 2024-10-07 08:03:29 +00:00
!1143 get prev interpreted frame of entry frame
Merge pull request !1143 from guobingbing/adapter-asm
This commit is contained in:
commit
2c0c759481
@ -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_);
|
||||
|
@ -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 {
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user