Skip to content

Commit 24f388c

Browse files
committed
Add DummyVirtualFunctionToHinderLinkerICF
1 parent 5f9cddc commit 24f388c

File tree

6 files changed

+67
-8
lines changed

6 files changed

+67
-8
lines changed

lib/Backend/amd64/LinearScanMD.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -510,13 +510,14 @@ IR::Instr* LinearScanMD::GeneratorBailIn::GenerateBailIn(IR::Instr* resumeLabelI
510510
LinearScan::InsertMove(LowererMD::CreateStackArgumentsSlotOpnd(this->func), this->rcxRegOpnd, instrAfter);
511511
}
512512

513-
BailInInsertionPoint insertionPoint = {
513+
BailInInsertionPoint insertionPoint
514+
{
514515
nullptr, /* raxRestoreInstr */
515516
instrAfter, /* instrInsertStackSym */
516517
instrAfter /* instrInsertRegSym */
517518
};
518519

519-
SaveInitializedRegister saveInitializedReg = { false /* rax */, false /* rcx */ };
520+
SaveInitializedRegister saveInitializedReg { false /* rax */, false /* rcx */ };
520521

521522
// 4) Restore symbols
522523
// - We don't need to restore argObjSyms because StackArgs is currently not enabled

lib/Backend/amd64/LinearScanMD.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ class LinearScanMD : public LinearScanMDShared
8383
// The following 3 instructions indicate the insertion points for the above cases:
8484
struct BailInInsertionPoint
8585
{
86-
IR::Instr* raxRestoreInstr = nullptr;
87-
IR::Instr* instrInsertStackSym = nullptr;
88-
IR::Instr* instrInsertRegSym = nullptr;
86+
IR::Instr* raxRestoreInstr;
87+
IR::Instr* instrInsertStackSym;
88+
IR::Instr* instrInsertRegSym;
8989
};
9090

9191
// There are symbols that we don't need to restore such as constant values,
@@ -95,8 +95,8 @@ class LinearScanMD : public LinearScanMDShared
9595
// So we would need to save their values (and restore afterwards) before generating the bail-in code.
9696
struct SaveInitializedRegister
9797
{
98-
bool rax = false;
99-
bool rcx = false;
98+
bool rax;
99+
bool rcx;
100100
};
101101

102102
Func* const func;

lib/Common/BackendApi.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,10 @@ enum VTableValue {
266266
VtableJavascriptRegExp,
267267
VtableScriptFunction,
268268

269+
VtableScriptFunctionWithHomeObj,
270+
VtableScriptFunctionWithComputedName,
271+
VtableScriptFunctionWithHomeObjAndComputedName,
272+
269273
// Generator/Async functions
270274
VtableJavascriptGeneratorFunction,
271275
VtableVirtualJavascriptGeneratorFunctionWithHomeObj,
@@ -274,7 +278,9 @@ enum VTableValue {
274278
VtableJavascriptAsyncFunction,
275279

276280
VtableStackScriptFunction,
281+
VtableAsmJsScriptFunction,
277282
VtableScriptFunctionWithInlineCacheAndHomeObj,
283+
VtableScriptFunctionWithInlineCacheAndComputedName,
278284
VtableScriptFunctionWithInlineCacheHomeObjAndComputedName,
279285
VtableConcatStringMulti,
280286
VtableCompoundString,

lib/JITIDL/JITTypes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ typedef unsigned char boolean;
7878
#define __JITTypes_h__
7979

8080
// TODO: OOP JIT, how do we make this better?
81-
const int VTABLE_COUNT = 54;
81+
const int VTABLE_COUNT = 59;
8282
const int EQUIVALENT_TYPE_CACHE_SIZE = 8;
8383

8484
typedef IDL_DEF([context_handle]) void * PTHREADCONTEXT_HANDLE;

lib/Runtime/Library/ScriptFunction.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -867,3 +867,53 @@ using namespace Js;
867867
}
868868
SetHasInlineCaches(false);
869869
}
870+
871+
template <> VTableValue Js::FunctionWithComputedName<Js::AsmJsScriptFunction>::DummyVirtualFunctionToHinderLinkerICF() const
872+
{
873+
return VTableValue::VtableAsmJsScriptFunction;
874+
}
875+
876+
template <> VTableValue Js::FunctionWithHomeObj<Js::ScriptFunction>::DummyVirtualFunctionToHinderLinkerICF() const
877+
{
878+
return VTableValue::VtableScriptFunctionWithHomeObj;
879+
}
880+
881+
template <> VTableValue Js::FunctionWithComputedName<Js::ScriptFunction>::DummyVirtualFunctionToHinderLinkerICF() const
882+
{
883+
return VTableValue::VtableScriptFunctionWithComputedName;
884+
}
885+
886+
template <> VTableValue Js::FunctionWithComputedName<Js::FunctionWithHomeObj<Js::ScriptFunction>>::DummyVirtualFunctionToHinderLinkerICF() const
887+
{
888+
return VTableValue::VtableScriptFunctionWithHomeObjAndComputedName;
889+
}
890+
891+
template <> VTableValue Js::FunctionWithHomeObj<Js::ScriptFunctionWithInlineCache>::DummyVirtualFunctionToHinderLinkerICF() const
892+
{
893+
return VTableValue::VtableScriptFunctionWithInlineCacheAndHomeObj;
894+
}
895+
896+
template <> VTableValue Js::FunctionWithComputedName<Js::ScriptFunctionWithInlineCache>::DummyVirtualFunctionToHinderLinkerICF() const
897+
{
898+
return VTableValue::VtableScriptFunctionWithInlineCacheAndComputedName;
899+
}
900+
901+
template <> VTableValue Js::FunctionWithComputedName<Js::FunctionWithHomeObj<Js::ScriptFunctionWithInlineCache>>::DummyVirtualFunctionToHinderLinkerICF() const
902+
{
903+
return VTableValue::VtableScriptFunctionWithInlineCacheHomeObjAndComputedName;
904+
}
905+
906+
template <> VTableValue Js::FunctionWithHomeObj<Js::GeneratorVirtualScriptFunction>::DummyVirtualFunctionToHinderLinkerICF() const
907+
{
908+
return VTableValue::VtableVirtualJavascriptGeneratorFunctionWithHomeObj;
909+
}
910+
911+
template <> VTableValue Js::FunctionWithComputedName<Js::GeneratorVirtualScriptFunction>::DummyVirtualFunctionToHinderLinkerICF() const
912+
{
913+
return VTableValue::VtableVirtualJavascriptGeneratorFunctionWithComputedName;
914+
}
915+
916+
template <> VTableValue Js::FunctionWithComputedName<Js::FunctionWithHomeObj<Js::GeneratorVirtualScriptFunction>>::DummyVirtualFunctionToHinderLinkerICF() const
917+
{
918+
return VTableValue::VtableVirtualJavascriptGeneratorFunctionWithHomeObjAndComputedName;
919+
}

lib/Runtime/Library/ScriptFunction.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ namespace Js
4141
}
4242
virtual Var GetComputedNameVar() const override { return this->computedNameVar; }
4343
virtual void SetComputedNameVar(Var computedNameVar) override { this->computedNameVar = computedNameVar; }
44+
virtual VTableValue DummyVirtualFunctionToHinderLinkerICF() const;
4445
};
4546

4647
template <class BaseClass>
@@ -60,6 +61,7 @@ namespace Js
6061
virtual Var GetHomeObj() const override { return homeObj; }
6162
virtual void SetHomeObj(Var homeObj) override { this->homeObj = homeObj; }
6263
static uint32 GetOffsetOfHomeObj() { return offsetof(FunctionWithHomeObj<BaseClass>, homeObj); }
64+
virtual VTableValue DummyVirtualFunctionToHinderLinkerICF() const;
6365
};
6466

6567
class ScriptFunction : public ScriptFunctionBase

0 commit comments

Comments
 (0)