Title: [270711] trunk/Source/_javascript_Core
Revision
270711
Author
ticaiol...@gmail.com
Date
2020-12-11 14:57:14 -0800 (Fri, 11 Dec 2020)

Log Message

[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):

Modified Paths

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)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to