Skip to content

Commit c0f85a8

Browse files
committed
experimenting more
1 parent 1ed4fb5 commit c0f85a8

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

lib/Runtime/Base/FunctionBody.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -3302,6 +3302,11 @@ namespace Js
33023302
{
33033303
entryPoint = currentEntryPoint;
33043304
}
3305+
if (currentEntryPoint->lboNativeAddr <= codeAddress && currentEntryPoint->lboNativeAddr + currentEntryPoint->lboCodeSize > codeAddress)
3306+
{
3307+
entryPoint = currentEntryPoint;
3308+
}
3309+
33053310
});
33063311

33073312
return entryPoint;
@@ -9277,7 +9282,7 @@ namespace Js
92779282

92789283
}
92799284

9280-
void FunctionEntryPointInfo::Invalidate(bool prolongEntryPoint)
9285+
FunctionEntryPointInfo* FunctionEntryPointInfo::InvalidateRet(bool prolongEntryPoint)
92819286
{
92829287
Assert(!this->functionProxy->IsDeferred());
92839288
FunctionBody* functionBody = this->functionProxy->GetFunctionBody();
@@ -9336,6 +9341,8 @@ namespace Js
93369341
ThreadContext* threadContext = this->functionProxy->GetScriptContext()->GetThreadContext();
93379342
threadContext->QueueFreeOldEntryPointInfoIfInScript(this);
93389343
}
9344+
9345+
return entryPoint;
93399346
}
93409347

93419348
void FunctionEntryPointInfo::Expire()

lib/Runtime/Base/FunctionBody.h

+3
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,8 @@ namespace Js
622622

623623
Field(uint32) callsCount;
624624
Field(uint32) lastCallsCount;
625+
Field(DWORD_PTR) lboNativeAddr;
626+
Field(ptrdiff_t) lboCodeSize;
625627

626628
private:
627629
Field(ExecutionMode) jitMode;
@@ -638,6 +640,7 @@ namespace Js
638640
ExecutionMode GetJitMode() const;
639641
void SetJitMode(const ExecutionMode jitMode);
640642

643+
FunctionEntryPointInfo* InvalidateRet(bool prolongEntryPoint);
641644
virtual void Invalidate(bool prolongEntryPoint) override;
642645
virtual void Expire() override;
643646
virtual void EnterExpirableCollectMode() override;

lib/Runtime/Base/ThreadContext.cpp

+11-2
Original file line numberDiff line numberDiff line change
@@ -3760,14 +3760,23 @@ ThreadContext::InvalidatePropertyGuardEntry(
37603760

37613761
if (propertyGuardEntry->lazyBailOutEntryPoints && propertyGuardEntry->lazyBailOutEntryPoints->Count() > 0)
37623762
{
3763-
propertyGuardEntry->lazyBailOutEntryPoints->Map([=](Js::EntryPointInfo* lazyBailOutEntryPoint, BYTE& dummy, const RecyclerWeakReference<Js::EntryPointInfo>* infoWeakRef)
3763+
if (!propertyGuardEntry->hasLazyBailOut)
3764+
{
3765+
int a = 5;
3766+
a++;
3767+
3768+
}
3769+
3770+
propertyGuardEntry->lazyBailOutEntryPoints->Map([=](Js::FunctionEntryPointInfo* lazyBailOutEntryPoint, BYTE& dummy, const RecyclerWeakReference<Js::EntryPointInfo>* infoWeakRef)
37643771
{
37653772
if (lazyBailOutEntryPoint->IsCleanedUp())
37663773
{
37673774
return;
37683775
}
37693776
OUTPUT_TRACE2(Js::LazyBailoutPhase, lazyBailOutEntryPoint->GetFunctionBody(), _u("Lazy bailout - Invalidation due to property: %s \n"), propertyRecord->GetBuffer());
3770-
lazyBailOutEntryPoint->Invalidate(true);
3777+
Js::FunctionEntryPointInfo* newEntryPoint = lazyBailOutEntryPoint->InvalidateRet(true);
3778+
newEntryPoint->lboCodeSize = lazyBailOutEntryPoint->GetCodeSize();
3779+
newEntryPoint->lboNativeAddr = lazyBailOutEntryPoint->GetNativeAddress();
37713780
});
37723781

37733782
// TODO: make function.

0 commit comments

Comments
 (0)