Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (270710 => 270711)
--- trunk/Source/_javascript_Core/ChangeLog 2020-12-11 22:34:24 UTC (rev 270710)
+++ trunk/Source/_javascript_Core/ChangeLog 2020-12-11 22:57:14 UTC (rev 270711)
@@ -1,3 +1,60 @@
+2020-12-11 Caio Lima <ticaiol...@gmail.com>
+
+ [JIT] Require value registers explicitly on emitValueProfilingSite
+ https://bugs.webkit.org/show_bug.cgi?id=219550
+
+ Reviewed by Yusuke Suzuki.
+
+ This patch is removing the default value for `emitValueProfilingSite`
+ to avoid bugs like r270423 and r270431.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::compileWithoutLinking):
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::emitPutCallResult):
+ (JSC::JIT::emit_op_iterator_open):
+ * jit/JITCall32_64.cpp:
+ (JSC::JIT::emitPutCallResult):
+ (JSC::JIT::emit_op_iterator_open):
+ * jit/JITInlines.h:
+ (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile):
+ (JSC::JIT::emitValueProfilingSiteIfProfiledOpcode):
+ (JSC::JIT::emitValueProfilingSite):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_to_number):
+ (JSC::JIT::emit_op_to_numeric):
+ (JSC::JIT::emit_op_to_object):
+ (JSC::JIT::emit_op_catch):
+ (JSC::JIT::emit_op_get_direct_pname):
+ (JSC::JIT::emit_op_get_argument):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_to_number):
+ (JSC::JIT::emit_op_to_numeric):
+ (JSC::JIT::emit_op_to_object):
+ (JSC::JIT::emit_op_catch):
+ (JSC::JIT::emit_op_get_direct_pname):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emit_op_get_private_name):
+ (JSC::JIT::emit_op_try_get_by_id):
+ (JSC::JIT::emit_op_get_by_id_direct):
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::emit_op_get_by_id_with_this):
+ (JSC::JIT::emit_op_get_from_scope):
+ (JSC::JIT::emit_op_get_from_arguments):
+ (JSC::JIT::emit_op_get_internal_field):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emit_op_get_private_name):
+ (JSC::JIT::emit_op_try_get_by_id):
+ (JSC::JIT::emit_op_get_by_id_direct):
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::emit_op_get_by_id_with_this):
+ (JSC::JIT::emit_op_get_from_scope):
+ (JSC::JIT::emit_op_get_from_arguments):
+ (JSC::JIT::emit_op_get_internal_field):
+
2020-12-11 Tadeu Zagallo <tzaga...@apple.com>
REGRESSION (r270665): testapi failing on CLoop bot
Modified: trunk/Source/_javascript_Core/jit/JIT.cpp (270710 => 270711)
--- trunk/Source/_javascript_Core/jit/JIT.cpp 2020-12-11 22:34:24 UTC (rev 270710)
+++ trunk/Source/_javascript_Core/jit/JIT.cpp 2020-12-11 22:57:14 UTC (rev 270711)
@@ -756,12 +756,14 @@
continue;
int offset = CallFrame::argumentOffsetIncludingThis(argument) * static_cast<int>(sizeof(Register));
#if USE(JSVALUE64)
- load64(Address(callFrameRegister, offset), regT0);
+ JSValueRegs resultRegs = JSValueRegs(regT0);
+ load64(Address(callFrameRegister, offset), resultRegs.payloadGPR());
#elif USE(JSVALUE32_64)
- load32(Address(callFrameRegister, offset + OBJECT_OFFSETOF(JSValue, u.asBits.payload)), regT0);
- load32(Address(callFrameRegister, offset + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), regT1);
+ JSValueRegs resultRegs = JSValueRegs(regT1, regT0);
+ load32(Address(callFrameRegister, offset + OBJECT_OFFSETOF(JSValue, u.asBits.payload)), resultRegs.payloadGPR());
+ load32(Address(callFrameRegister, offset + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), resultRegs.tagGPR());
#endif
- emitValueProfilingSite(m_codeBlock->valueProfileForArgument(argument));
+ emitValueProfilingSite(m_codeBlock->valueProfileForArgument(argument), resultRegs);
}
}
}
Modified: trunk/Source/_javascript_Core/jit/JIT.h (270710 => 270711)
--- trunk/Source/_javascript_Core/jit/JIT.h 2020-12-11 22:34:24 UTC (rev 270710)
+++ trunk/Source/_javascript_Core/jit/JIT.h 2020-12-11 22:57:14 UTC (rev 270711)
@@ -374,11 +374,13 @@
// This assumes that the value to profile is in regT0 and that regT3 is available for
// scratch.
#if USE(JSVALUE64)
- void emitValueProfilingSite(ValueProfile&, JSValueRegs value = JSValueRegs { regT0 });
- template<typename Metadata> void emitValueProfilingSite(Metadata&, JSValueRegs value = JSValueRegs { regT0 });
+ void emitValueProfilingSite(ValueProfile&, GPRReg);
+ void emitValueProfilingSite(ValueProfile&, JSValueRegs);
+ template<typename Metadata> void emitValueProfilingSite(Metadata&, GPRReg);
+ template<typename Metadata> void emitValueProfilingSite(Metadata&, JSValueRegs);
#else
- void emitValueProfilingSite(ValueProfile&, JSValueRegs value = JSValueRegs { regT1, regT0 });
- template<typename Metadata> void emitValueProfilingSite(Metadata&, JSValueRegs value = JSValueRegs { regT1, regT0 });
+ void emitValueProfilingSite(ValueProfile&, JSValueRegs);
+ template<typename Metadata> void emitValueProfilingSite(Metadata&, JSValueRegs);
#endif
void emitValueProfilingSiteIfProfiledOpcode(...);
Modified: trunk/Source/_javascript_Core/jit/JITCall.cpp (270710 => 270711)
--- trunk/Source/_javascript_Core/jit/JITCall.cpp 2020-12-11 22:34:24 UTC (rev 270710)
+++ trunk/Source/_javascript_Core/jit/JITCall.cpp 2020-12-11 22:57:14 UTC (rev 270711)
@@ -44,7 +44,7 @@
template<typename Op>
void JIT::emitPutCallResult(const Op& bytecode)
{
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), regT0);
emitPutVirtualRegister(destinationFor(bytecode, m_bytecodeIndex.checkpoint()).virtualRegister(), regT0);
}
@@ -405,7 +405,7 @@
addSlowCase(gen.slowPathJump());
m_getByIds.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), regT0);
emitPutVirtualRegister(bytecode.m_next);
fastCase.link(this);
Modified: trunk/Source/_javascript_Core/jit/JITCall32_64.cpp (270710 => 270711)
--- trunk/Source/_javascript_Core/jit/JITCall32_64.cpp 2020-12-11 22:34:24 UTC (rev 270710)
+++ trunk/Source/_javascript_Core/jit/JITCall32_64.cpp 2020-12-11 22:57:14 UTC (rev 270711)
@@ -52,7 +52,7 @@
template<typename Op>
void JIT::emitPutCallResult(const Op& bytecode)
{
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), JSValueRegs(regT1, regT0));
emitStore(destinationFor(bytecode, m_bytecodeIndex.checkpoint()).virtualRegister(), regT1, regT0);
}
@@ -402,6 +402,8 @@
GPRReg tagNextGPR = tagIteratorGPR;
GPRReg payloadNextGPR = payloadIteratorGPR;
+ JSValueRegs nextRegs = JSValueRegs(tagNextGPR, payloadNextGPR);
+
JITGetByIdGenerator gen(
m_codeBlock,
CodeOrigin(m_bytecodeIndex),
@@ -409,7 +411,7 @@
RegisterSet::stubUnavailableRegisters(),
CacheableIdentifier::createFromImmortalIdentifier(ident->impl()),
JSValueRegs(tagIteratorGPR, payloadIteratorGPR),
- JSValueRegs(tagNextGPR, payloadNextGPR),
+ nextRegs,
AccessType::GetById);
gen.generateFastPath(*this);
@@ -416,8 +418,8 @@
addSlowCase(gen.slowPathJump());
m_getByIds.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
- emitPutVirtualRegister(bytecode.m_next, JSValueRegs(tagNextGPR, payloadNextGPR));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), nextRegs);
+ emitPutVirtualRegister(bytecode.m_next, nextRegs);
fastCase.link(this);
}
Modified: trunk/Source/_javascript_Core/jit/JITInlines.h (270710 => 270711)
--- trunk/Source/_javascript_Core/jit/JITInlines.h 2020-12-11 22:34:24 UTC (rev 270710)
+++ trunk/Source/_javascript_Core/jit/JITInlines.h 2020-12-11 22:57:14 UTC (rev 270711)
@@ -157,10 +157,11 @@
ALWAYS_INLINE MacroAssembler::Call JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile(Metadata& metadata, const FunctionPtr<CFunctionPtrTag> function, VirtualRegister dst)
{
MacroAssembler::Call call = appendCallWithExceptionCheck(function);
- emitValueProfilingSite(metadata);
#if USE(JSVALUE64)
+ emitValueProfilingSite(metadata, returnValueGPR);
emitPutVirtualRegister(dst, returnValueGPR);
#else
+ emitValueProfilingSite(metadata, JSValueRegs(returnValueGPR2, returnValueGPR));
emitStore(dst, returnValueGPR2, returnValueGPR);
#endif
return call;
@@ -327,7 +328,11 @@
template<typename Op>
inline std::enable_if_t<std::is_same<decltype(Op::Metadata::m_profile), ValueProfile>::value, void> JIT::emitValueProfilingSiteIfProfiledOpcode(Op bytecode)
{
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+#if USE(JSVALUE64)
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), regT0);
+#else
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), JSValueRegs(regT1, regT0));
+#endif
}
inline void JIT::emitValueProfilingSiteIfProfiledOpcode(...) { }
@@ -340,6 +345,19 @@
emitValueProfilingSite(valueProfileFor(metadata, m_bytecodeIndex.checkpoint()), value);
}
+#if USE(JSVALUE64)
+inline void JIT::emitValueProfilingSite(ValueProfile& valueProfile, GPRReg resultReg)
+{
+ emitValueProfilingSite(valueProfile, JSValueRegs(resultReg));
+}
+
+template<typename Metadata>
+inline void JIT::emitValueProfilingSite(Metadata& metadata, GPRReg resultReg)
+{
+ emitValueProfilingSite(metadata, JSValueRegs(resultReg));
+}
+#endif
+
inline void JIT::emitArrayProfilingSiteWithCell(RegisterID cell, RegisterID indexingType, ArrayProfile* arrayProfile)
{
if (shouldEmitProfiling()) {
Modified: trunk/Source/_javascript_Core/jit/JITOpcodes.cpp (270710 => 270711)
--- trunk/Source/_javascript_Core/jit/JITOpcodes.cpp 2020-12-11 22:34:24 UTC (rev 270710)
+++ trunk/Source/_javascript_Core/jit/JITOpcodes.cpp 2020-12-11 22:57:14 UTC (rev 270711)
@@ -777,7 +777,7 @@
addSlowCase(branchIfNotNumber(regT0));
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), regT0);
if (srcVReg != dstVReg)
emitPutVirtualRegister(dstVReg);
}
@@ -797,7 +797,7 @@
addSlowCase(branchIfNotNumber(regT0));
isBigInt.link(this);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), regT0);
if (srcVReg != dstVReg)
emitPutVirtualRegister(dstVReg);
}
@@ -824,7 +824,7 @@
addSlowCase(branchIfNotCell(regT0));
addSlowCase(branchIfNotObject(regT0));
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), regT0);
if (srcVReg != dstVReg)
emitPutVirtualRegister(dstVReg);
}
@@ -873,7 +873,7 @@
buffer->forEach([&] (ValueProfileAndVirtualRegister& profile) {
JSValueRegs regs(regT0);
emitGetVirtualRegister(profile.m_operand, regs);
- emitValueProfilingSite(static_cast<ValueProfile&>(profile));
+ emitValueProfilingSite(static_cast<ValueProfile&>(profile), regs);
});
}
#endif // ENABLE(DFG_JIT)
@@ -1539,7 +1539,7 @@
load64(BaseIndex(regT0, regT1, TimesEight, offsetOfFirstProperty), regT0);
done.link(this);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), regT0);
emitPutVirtualRegister(dst, regT0);
}
@@ -1759,7 +1759,7 @@
moveValue(jsUndefined(), resultRegs);
done.link(this);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
emitPutVirtualRegister(dst, resultRegs);
}
Modified: trunk/Source/_javascript_Core/jit/JITOpcodes32_64.cpp (270710 => 270711)
--- trunk/Source/_javascript_Core/jit/JITOpcodes32_64.cpp 2020-12-11 22:34:24 UTC (rev 270710)
+++ trunk/Source/_javascript_Core/jit/JITOpcodes32_64.cpp 2020-12-11 22:57:14 UTC (rev 270711)
@@ -860,7 +860,7 @@
addSlowCase(branch32(AboveOrEqual, regT1, TrustedImm32(JSValue::LowestTag)));
isInt32.link(this);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), JSValueRegs(regT1, regT0));
if (src != dst)
emitStore(dst, regT1, regT0);
}
@@ -882,7 +882,7 @@
addSlowCase(branchIfNotNumber(argumentValueRegs, regT2));
isBigInt.link(this);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), JSValueRegs(regT1, regT0));
if (src != dst)
emitStore(dst, regT1, regT0);
}
@@ -913,7 +913,7 @@
addSlowCase(branchIfNotCell(regT1));
addSlowCase(branchIfNotObject(regT0));
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), JSValueRegs(regT1, regT0));
if (src != dst)
emitStore(dst, regT1, regT0);
}
@@ -970,7 +970,7 @@
buffer->forEach([&] (ValueProfileAndVirtualRegister& profile) {
JSValueRegs regs(regT1, regT0);
emitGetVirtualRegister(profile.m_operand, regs);
- emitValueProfilingSite(static_cast<ValueProfile&>(profile));
+ emitValueProfilingSite(static_cast<ValueProfile&>(profile), regs);
});
}
#endif // ENABLE(DFG_JIT)
@@ -1298,7 +1298,7 @@
load32(BaseIndex(regT0, regT2, TimesEight, offsetOfFirstProperty + OBJECT_OFFSETOF(JSValue, u.asBits.payload)), regT0);
done.link(this);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), JSValueRegs(regT1, regT0));
emitStore(dst, regT1, regT0);
}
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp (270710 => 270711)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2020-12-11 22:34:24 UTC (rev 270710)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2020-12-11 22:57:14 UTC (rev 270711)
@@ -64,9 +64,11 @@
emitJumpSlowCaseIfNotJSCell(regT0, base);
emitArrayProfilingSiteWithCell(regT0, regT2, profile);
+ JSValueRegs resultRegs = JSValueRegs(regT0);
+
JITGetByValGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::GetByVal, RegisterSet::stubUnavailableRegisters(),
- JSValueRegs(regT0), JSValueRegs(regT1), JSValueRegs(regT0));
+ JSValueRegs(regT0), JSValueRegs(regT1), resultRegs);
if (isOperandConstantInt(property))
gen.stubInfo()->propertyIsInt32 = true;
gen.generateFastPath(*this);
@@ -73,7 +75,7 @@
addSlowCase(gen.slowPathJump());
m_getByVals.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
emitPutVirtualRegister(dst);
}
@@ -110,14 +112,16 @@
emitJumpSlowCaseIfNotJSCell(regT0, base);
+ JSValueRegs resultRegs = JSValueRegs(regT0);
+
JITGetByValGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::GetPrivateName,
- RegisterSet::stubUnavailableRegisters(), JSValueRegs(baseGPR), JSValueRegs(propertyGPR), JSValueRegs(regT0));
+ RegisterSet::stubUnavailableRegisters(), JSValueRegs(baseGPR), JSValueRegs(propertyGPR), resultRegs);
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
m_getByVals.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
emitPutVirtualRegister(dst);
}
@@ -570,14 +574,16 @@
emitJumpSlowCaseIfNotJSCell(regT0, baseVReg);
+ JSValueRegs resultRegs = JSValueRegs(regT0);
+
JITGetByIdGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
- CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs(regT0), JSValueRegs(regT0), AccessType::TryGetById);
+ CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs(regT0), resultRegs, AccessType::TryGetById);
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
m_getByIds.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
emitPutVirtualRegister(resultVReg);
}
@@ -609,14 +615,16 @@
emitJumpSlowCaseIfNotJSCell(regT0, baseVReg);
+ JSValueRegs resultRegs = JSValueRegs(regT0);
+
JITGetByIdGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
- CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs(regT0), JSValueRegs(regT0), AccessType::GetByIdDirect);
+ CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs(regT0), resultRegs, AccessType::GetByIdDirect);
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
m_getByIds.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
emitPutVirtualRegister(resultVReg);
}
@@ -655,14 +663,16 @@
notArrayLengthMode.link(this);
}
+ JSValueRegs resultRegs = JSValueRegs(regT0);
+
JITGetByIdGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
- CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs(regT0), JSValueRegs(regT0), AccessType::GetById);
+ CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs(regT0), resultRegs, AccessType::GetById);
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
m_getByIds.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
emitPutVirtualRegister(resultVReg);
}
@@ -679,14 +689,16 @@
emitJumpSlowCaseIfNotJSCell(regT0, baseVReg);
emitJumpSlowCaseIfNotJSCell(regT1, thisVReg);
+ JSValueRegs resultRegs = JSValueRegs(regT0);
+
JITGetByIdWithThisGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
- CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs(regT0), JSValueRegs(regT0), JSValueRegs(regT1));
+ CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), resultRegs, JSValueRegs(regT0), JSValueRegs(regT1));
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
m_getByIdsWithThis.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
emitPutVirtualRegister(resultVReg);
}
@@ -1071,7 +1083,7 @@
break;
}
emitPutVirtualRegister(dst);
- emitValueProfilingSite(metadata);
+ emitValueProfilingSite(metadata, regT0);
}
void JIT::emitSlow_op_get_from_scope(const Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
@@ -1252,7 +1264,7 @@
emitGetVirtualRegister(arguments, regT0);
load64(Address(regT0, DirectArguments::storageOffset() + index * sizeof(WriteBarrier<Unknown>)), regT0);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), regT0);
emitPutVirtualRegister(dst);
}
@@ -1318,7 +1330,7 @@
emitGetVirtualRegister(base, regT1);
loadPtr(Address(regT1, JSInternalFieldObjectImpl<>::offsetOfInternalField(index)), regT0);
- emitValueProfilingSite(metadata);
+ emitValueProfilingSite(metadata, regT0);
emitPutVirtualRegister(dst);
}
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp (270710 => 270711)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp 2020-12-11 22:34:24 UTC (rev 270710)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp 2020-12-11 22:57:14 UTC (rev 270711)
@@ -254,9 +254,11 @@
emitJumpSlowCaseIfNotJSCell(base, regT1);
emitArrayProfilingSiteWithCell(regT0, regT4, profile);
+ JSValueRegs resultRegs = JSValueRegs(regT1, regT0);
+
JITGetByValGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::GetByVal, RegisterSet::stubUnavailableRegisters(),
- JSValueRegs::payloadOnly(regT0), JSValueRegs(regT3, regT2), JSValueRegs(regT1, regT0));
+ JSValueRegs::payloadOnly(regT0), JSValueRegs(regT3, regT2), resultRegs);
if (isOperandConstantInt(property))
gen.stubInfo()->propertyIsInt32 = true;
gen.generateFastPath(*this);
@@ -263,7 +265,7 @@
addSlowCase(gen.slowPathJump());
m_getByVals.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
emitStore(dst, regT1, regT0);
}
}
@@ -300,15 +302,17 @@
emitJumpSlowCaseIfNotJSCell(base, regT1);
+ JSValueRegs resultRegs = JSValueRegs(regT1, regT0);
+
JITGetByValGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::GetPrivateName,
- RegisterSet::stubUnavailableRegisters(), baseGPR, propertyGPR, JSValueRegs(regT1, regT0));
+ RegisterSet::stubUnavailableRegisters(), baseGPR, propertyGPR, resultRegs);
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
m_getByVals.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
- emitStore(dst, regT1, regT0);
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
+ emitStore(dst, resultRegs.tagGPR(), resultRegs.payloadGPR());
}
@@ -579,15 +583,17 @@
emitLoad(base, regT1, regT0);
emitJumpSlowCaseIfNotJSCell(base, regT1);
+ JSValueRegs resultRegs = JSValueRegs(regT1, regT0);
+
JITGetByIdGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
- CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0), AccessType::TryGetById);
+ CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs::payloadOnly(regT0), resultRegs, AccessType::TryGetById);
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
m_getByIds.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
- emitStore(dst, regT1, regT0);
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
+ emitStore(dst, resultRegs.tagGPR(), resultRegs.payloadGPR());
}
void JIT::emitSlow_op_try_get_by_id(const Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
@@ -618,15 +624,17 @@
emitLoad(base, regT1, regT0);
emitJumpSlowCaseIfNotJSCell(base, regT1);
+ JSValueRegs resultRegs = JSValueRegs(regT1, regT0);
+
JITGetByIdGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
- CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0), AccessType::GetByIdDirect);
+ CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs::payloadOnly(regT0), resultRegs, AccessType::GetByIdDirect);
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
m_getByIds.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
- emitStore(dst, regT1, regT0);
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
+ emitStore(dst, resultRegs.tagGPR(), resultRegs.payloadGPR());
}
void JIT::emitSlow_op_get_by_id_direct(const Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
@@ -664,15 +672,16 @@
notArrayLengthMode.link(this);
}
+ JSValueRegs resultRegs = JSValueRegs(regT1, regT0);
JITGetByIdGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
- CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0), AccessType::GetById);
+ CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs::payloadOnly(regT0), resultRegs, AccessType::GetById);
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
m_getByIds.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
- emitStore(dst, regT1, regT0);
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
+ emitStore(dst, resultRegs.tagGPR(), resultRegs.payloadGPR());
}
void JIT::emitSlow_op_get_by_id(const Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
@@ -705,15 +714,17 @@
emitJumpSlowCaseIfNotJSCell(base, regT1);
emitJumpSlowCaseIfNotJSCell(thisVReg, regT4);
+ JSValueRegs resultRegs = JSValueRegs(regT1, regT0);
+
JITGetByIdWithThisGenerator gen(
m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
- CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), JSValueRegs(regT1, regT0), JSValueRegs::payloadOnly(regT0), JSValueRegs(regT4, regT3));
+ CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_codeBlock, *ident), resultRegs, JSValueRegs::payloadOnly(regT0), JSValueRegs(regT4, regT3));
gen.generateFastPath(*this);
addSlowCase(gen.slowPathJump());
m_getByIdsWithThis.append(gen);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
- emitStore(dst, regT1, regT0);
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resultRegs);
+ emitStore(dst, resultRegs.tagGPR(), resultRegs.payloadGPR());
}
void JIT::emitSlow_op_get_by_id_with_this(const Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
@@ -1083,7 +1094,7 @@
emitCode(resolveType, false);
break;
}
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), JSValueRegs(regT1, regT0));
emitStore(dst, regT1, regT0);
}
@@ -1263,12 +1274,14 @@
VirtualRegister dst = bytecode.m_dst;
VirtualRegister arguments = bytecode.m_arguments;
int index = bytecode.m_index;
+
+ JSValueRegs resutlRegs = JSValueRegs(regT1, regT0);
emitLoadPayload(arguments, regT0);
- load32(Address(regT0, DirectArguments::storageOffset() + index * sizeof(WriteBarrier<Unknown>) + TagOffset), regT1);
- load32(Address(regT0, DirectArguments::storageOffset() + index * sizeof(WriteBarrier<Unknown>) + PayloadOffset), regT0);
- emitValueProfilingSite(bytecode.metadata(m_codeBlock));
- emitStore(dst, regT1, regT0);
+ load32(Address(regT0, DirectArguments::storageOffset() + index * sizeof(WriteBarrier<Unknown>) + TagOffset), resutlRegs.tagGPR());
+ load32(Address(regT0, DirectArguments::storageOffset() + index * sizeof(WriteBarrier<Unknown>) + PayloadOffset), resutlRegs.payloadGPR());
+ emitValueProfilingSite(bytecode.metadata(m_codeBlock), resutlRegs);
+ emitStore(dst, resutlRegs.tagGPR(), resutlRegs.payloadGPR());
}
void JIT::emit_op_put_to_arguments(const Instruction* currentInstruction)
@@ -1294,11 +1307,13 @@
VirtualRegister base = bytecode.m_base;
unsigned index = bytecode.m_index;
+ JSValueRegs resultRegs = JSValueRegs(regT1, regT0);
+
emitLoadPayload(base, regT2);
- load32(Address(regT2, JSInternalFieldObjectImpl<>::offsetOfInternalField(index) + TagOffset), regT1);
- load32(Address(regT2, JSInternalFieldObjectImpl<>::offsetOfInternalField(index) + PayloadOffset), regT0);
- emitValueProfilingSite(metadata);
- emitStore(dst, regT1, regT0);
+ load32(Address(regT2, JSInternalFieldObjectImpl<>::offsetOfInternalField(index) + TagOffset), resultRegs.tagGPR());
+ load32(Address(regT2, JSInternalFieldObjectImpl<>::offsetOfInternalField(index) + PayloadOffset), resultRegs.payloadGPR());
+ emitValueProfilingSite(metadata, resultRegs);
+ emitStore(dst, resultRegs.tagGPR(), resultRegs.payloadGPR());
}
void JIT::emit_op_put_internal_field(const Instruction* currentInstruction)