Title: [284914] branches/safari-613.1.6-branch/Source/_javascript_Core

Diff

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/ChangeLog (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/ChangeLog	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/ChangeLog	2021-10-27 00:35:11 UTC (rev 284914)
@@ -1,3 +1,7 @@
+2021-10-26  Kocsen Chung  <[email protected]>
+
+        Revert r284255. rdar://problem/84666813
+
 2021-10-18  Yusuke Suzuki  <[email protected]>
 
         [JSC] Use USE(LARGE_TYPED_ARRAY)

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/bytecode/ValueRecovery.cpp (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/bytecode/ValueRecovery.cpp	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/bytecode/ValueRecovery.cpp	2021-10-27 00:35:11 UTC (rev 284914)
@@ -99,11 +99,6 @@
     case Int32DisplacedInJSStack:
         out.print("*int32(", virtualRegister(), ")");
         return;
-#if USE(JSVALUE32_64)
-    case Int32TagDisplacedInJSStack:
-        out.print("*int32Tag(", virtualRegister(), ")");
-        return;
-#endif
     case Int52DisplacedInJSStack:
         out.print("*int52(", virtualRegister(), ")");
         return;

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/bytecode/ValueRecovery.h (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/bytecode/ValueRecovery.h	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/bytecode/ValueRecovery.h	2021-10-27 00:35:11 UTC (rev 284914)
@@ -60,9 +60,6 @@
     DisplacedInJSStack,
     // It's in the stack, at a different location, and it's unboxed.
     Int32DisplacedInJSStack,
-#if USE(JSVALUE32_64)
-    Int32TagDisplacedInJSStack, // int32 stored in tag field
-#endif
     Int52DisplacedInJSStack,
     StrictInt52DisplacedInJSStack,
     DoubleDisplacedInJSStack,
@@ -190,19 +187,7 @@
         result.m_source = WTFMove(u);
         return result;
     }
-
-#if USE(JSVALUE32_64)
-    static ValueRecovery calleeSaveRegDisplacedInJSStack(VirtualRegister virtualReg, bool inTag)
-    {
-        ValueRecovery result;
-        UnionType u;
-        u.virtualReg = virtualReg.offset();
-        result.m_source = WTFMove(u);
-        result.m_technique = inTag ? Int32TagDisplacedInJSStack : Int32DisplacedInJSStack;
-        return result;
-    }
-#endif
-
+    
     static ValueRecovery constant(JSValue value)
     {
         ValueRecovery result;
@@ -273,9 +258,6 @@
         switch (m_technique) {
         case DisplacedInJSStack:
         case Int32DisplacedInJSStack:
-#if USE(JSVALUE32_64)
-        case Int32TagDisplacedInJSStack:
-#endif
         case Int52DisplacedInJSStack:
         case StrictInt52DisplacedInJSStack:
         case DoubleDisplacedInJSStack:
@@ -300,9 +282,6 @@
             return DataFormatJS;
         case UnboxedInt32InGPR:
         case Int32DisplacedInJSStack:
-#if USE(JSVALUE32_64)
-        case Int32TagDisplacedInJSStack:
-#endif
             return DataFormatInt32;
         case UnboxedInt52InGPR:
         case Int52DisplacedInJSStack:
@@ -379,9 +358,6 @@
         switch (m_technique) {
         case DisplacedInJSStack:
         case Int32DisplacedInJSStack:
-#if USE(JSVALUE32_64)
-        case Int32TagDisplacedInJSStack:
-#endif
         case DoubleDisplacedInJSStack:
         case CellDisplacedInJSStack:
         case BooleanDisplacedInJSStack:

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp	2021-10-27 00:35:11 UTC (rev 284914)
@@ -742,8 +742,6 @@
             
             for (unsigned i = numPassedArgs; i < numAllocatedArgs; ++i)
                 shuffleData.args[i] = ValueRecovery::constant(jsUndefined());
-
-            shuffleData.setupCalleeSaveRegisters(m_jit.codeBlock());
         } else {
             m_jit.store32(MacroAssembler::TrustedImm32(numPassedArgs), m_jit.calleeFramePayloadSlot(CallFrameSlot::argumentCountIncludingThis));
         

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CachedRecovery.cpp (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CachedRecovery.cpp	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CachedRecovery.cpp	2021-10-27 00:35:11 UTC (rev 284914)
@@ -52,9 +52,7 @@
 {
     switch (recovery().technique()) {
     case Int32DisplacedInJSStack:
-#if USE(JSVALUE32_64)
-    case Int32TagDisplacedInJSStack:
-#elif USE(JSVALUE64)
+#if USE(JSVALUE64)
     case Int52DisplacedInJSStack:
     case StrictInt52DisplacedInJSStack:
     case DisplacedInJSStack:

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffleData.cpp (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffleData.cpp	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffleData.cpp	2021-10-27 00:35:11 UTC (rev 284914)
@@ -33,6 +33,8 @@
 
 namespace JSC {
 
+#if USE(JSVALUE64)
+
 void CallFrameShuffleData::setupCalleeSaveRegisters(CodeBlock* codeBlock)
 {
     setupCalleeSaveRegisters(codeBlock->calleeSaveRegisters());
@@ -47,24 +49,9 @@
         if (!calleeSaveRegisters.get(entry.reg()))
             continue;
 
-        int saveSlotIndexInCPURegisters = entry.offsetAsIndex();
-
-#if USE(JSVALUE64)
-        // CPU registers are the same size as virtual registers
-        VirtualRegister saveSlot { saveSlotIndexInCPURegisters };
+        VirtualRegister saveSlot { entry.offsetAsIndex() };
         registers[entry.reg()]
             = ValueRecovery::displacedInJSStack(saveSlot, DataFormatJS);
-#elif USE(JSVALUE32_64)
-        // On 32-bit architectures, 2 callee saved registers may be packed into the same slot
-        static_assert(!PayloadOffset || !TagOffset);
-        static_assert(PayloadOffset == 4 || TagOffset == 4);
-        bool inTag = (saveSlotIndexInCPURegisters & 1) == !!TagOffset;
-        if (saveSlotIndexInCPURegisters < 0)
-            saveSlotIndexInCPURegisters -= 1; // Round towards -inf
-        VirtualRegister saveSlot { saveSlotIndexInCPURegisters / 2 };
-        registers[entry.reg()]
-            = ValueRecovery::calleeSaveRegDisplacedInJSStack(saveSlot, inTag);
-#endif
     }
 
     for (Reg reg = Reg::first(); reg <= Reg::last(); reg = reg.next()) {
@@ -74,14 +61,12 @@
         if (registers[reg])
             continue;
 
-#if USE(JSVALUE64)
         registers[reg] = ValueRecovery::inRegister(reg, DataFormatJS);
-#elif USE(JSVALUE32_64)
-        registers[reg] = ValueRecovery::inRegister(reg, DataFormatInt32);
-#endif
     }
 }
 
+#endif // USE(JSVALUE64)
+
 } // namespace JSC
 
 #endif // ENABLE(JIT)

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffleData.h (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffleData.h	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffleData.h	2021-10-27 00:35:11 UTC (rev 284914)
@@ -44,13 +44,13 @@
     unsigned numLocals { UINT_MAX };
     unsigned numPassedArgs { UINT_MAX };
     unsigned numParameters { UINT_MAX }; // On our machine frame.
+#if USE(JSVALUE64)
     RegisterMap<ValueRecovery> registers;
-#if USE(JSVALUE64)
     GPRReg numberTagRegister { InvalidGPRReg };
-#endif
 
     void setupCalleeSaveRegisters(CodeBlock*);
     void setupCalleeSaveRegisters(const RegisterAtOffsetList*);
+#endif
     ValueRecovery callee;
 };
 

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffler.cpp (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffler.cpp	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffler.cpp	2021-10-27 00:35:11 UTC (rev 284914)
@@ -52,8 +52,13 @@
     for (unsigned i = FPRInfo::numberOfRegisters; i--; )
         m_lockedRegisters.clear(FPRInfo::toRegister(i));
 
-    // ... as well as the callee saved registers
+#if USE(JSVALUE64)
+    // ... as well as the runtime registers on 64-bit architectures.
+    // However do not use these registers on 32-bit architectures since
+    // saving and restoring callee-saved registers in CallFrameShuffler isn't supported
+    // on 32-bit architectures yet.
     m_lockedRegisters.exclude(RegisterSet::vmCalleeSaveRegisters());
+#endif
 
     ASSERT(!data.callee.isInJSStack() || data.callee.virtualRegister().isLocal());
     addNew(CallFrameSlot::callee, data.callee);
@@ -63,21 +68,17 @@
         addNew(virtualRegisterForArgumentIncludingThis(i), data.args[i]);
     }
 
+#if USE(JSVALUE64)
     for (Reg reg = Reg::first(); reg <= Reg::last(); reg = reg.next()) {
         if (!data.registers[reg].isSet())
             continue;
 
-        if (reg.isGPR()) {
-#if USE(JSVALUE64)
+        if (reg.isGPR())
             addNew(JSValueRegs(reg.gpr()), data.registers[reg]);
-#elif USE(JSVALUE32_64)
-            addNew(reg.gpr(), data.registers[reg]);
-#endif
-        } else
+        else
             addNew(reg.fpr(), data.registers[reg]);
     }
 
-#if USE(JSVALUE64)
     m_numberTagRegister = data.numberTagRegister;
     if (m_numberTagRegister != InvalidGPRReg)
         lockGPR(m_numberTagRegister);

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffler.h (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffler.h	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffler.h	2021-10-27 00:35:11 UTC (rev 284914)
@@ -116,15 +116,6 @@
 
 #if USE(JSVALUE64)
             data.registers[reg] = cachedRecovery->recovery();
-#elif USE(JSVALUE32_64)
-            ValueRecovery recovery = cachedRecovery->recovery();
-            if (recovery.technique() == DisplacedInJSStack) {
-                JSValueRegs wantedJSValueReg = cachedRecovery->wantedJSValueRegs();
-                ASSERT(reg == wantedJSValueReg.payloadGPR() || reg == wantedJSValueReg.tagGPR());
-                bool inTag = reg == wantedJSValueReg.tagGPR();
-                data.registers[reg] = ValueRecovery::calleeSaveRegDisplacedInJSStack(recovery.virtualRegister(), inTag);
-            } else
-                data.registers[reg] = recovery;
 #else
             RELEASE_ASSERT_NOT_REACHED();
 #endif
@@ -672,32 +663,6 @@
         cachedRecovery->setWantedJSValueRegs(jsValueRegs);
     }
 
-#if USE(JSVALUE32_64)
-    void addNew(GPRReg gpr, ValueRecovery recovery)
-    {
-        ASSERT(gpr != InvalidGPRReg && !m_newRegisters[gpr]);
-        ASSERT(recovery.technique() == Int32DisplacedInJSStack
-            || recovery.technique() == Int32TagDisplacedInJSStack);
-        CachedRecovery* cachedRecovery = addCachedRecovery(recovery);
-        if (JSValueRegs oldRegs { cachedRecovery->wantedJSValueRegs() }) {
-            // Combine with the other CSR in the same virtual register slot
-            ASSERT(oldRegs.tagGPR() == InvalidGPRReg);
-            ASSERT(oldRegs.payloadGPR() != InvalidGPRReg && oldRegs.payloadGPR() != gpr);
-            if (recovery.technique() == Int32DisplacedInJSStack) {
-                ASSERT(cachedRecovery->recovery().technique() == Int32TagDisplacedInJSStack);
-                cachedRecovery->setWantedJSValueRegs(JSValueRegs(oldRegs.payloadGPR(), gpr));
-            } else {
-                ASSERT(cachedRecovery->recovery().technique() == Int32DisplacedInJSStack);
-                cachedRecovery->setWantedJSValueRegs(JSValueRegs(gpr, oldRegs.payloadGPR()));
-            }
-            cachedRecovery->setRecovery(
-                ValueRecovery::displacedInJSStack(recovery.virtualRegister(), DataFormatJS));
-        } else
-            cachedRecovery->setWantedJSValueRegs(JSValueRegs::payloadOnly(gpr));
-        m_newRegisters[gpr] = cachedRecovery;
-    }
-#endif
-
     void addNew(FPRReg fpr, ValueRecovery recovery)
     {
         ASSERT(fpr != InvalidFPRReg && !m_newRegisters[fpr]);

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffler32_64.cpp (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffler32_64.cpp	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/jit/CallFrameShuffler32_64.cpp	2021-10-27 00:35:11 UTC (rev 284914)
@@ -124,11 +124,8 @@
         if (resultGPR == InvalidGPRReg || m_registers[resultGPR] || m_lockedRegisters.get(resultGPR))
             resultGPR = getFreeGPR();
         ASSERT(resultGPR != InvalidGPRReg);
-        if (location.recovery().technique() == Int32TagDisplacedInJSStack)
-            m_jit.loadPtr(address.withOffset(TagOffset), resultGPR);
-        else
-            m_jit.loadPtr(address.withOffset(PayloadOffset), resultGPR);
-        updateRecovery(location,
+        m_jit.loadPtr(address.withOffset(PayloadOffset), resultGPR);
+        updateRecovery(location, 
             ValueRecovery::inGPR(resultGPR, location.recovery().dataFormat()));
         if (verbose)
             dataLog(location.recovery(), "\n");
@@ -193,9 +190,15 @@
     if (wantedTagGPR != InvalidGPRReg) {
         ASSERT(!m_lockedRegisters.get(wantedTagGPR));
         if (CachedRecovery* currentTag { m_registers[wantedTagGPR] }) {
-            RELEASE_ASSERT(currentTag == &location);
-            if (verbose)
-                dataLog("   + ", wantedTagGPR, " is OK\n");
+            if (currentTag == &location) {
+                if (verbose)
+                    dataLog("   + ", wantedTagGPR, " is OK\n");
+            } else {
+                // This can never happen on 32bit platforms since we
+                // have at most one wanted JSValueRegs, for the
+                // callee, and no callee-save registers.
+                RELEASE_ASSERT_NOT_REACHED();
+            }
         }
     }
 
@@ -202,9 +205,13 @@
     if (wantedPayloadGPR != InvalidGPRReg) {
         ASSERT(!m_lockedRegisters.get(wantedPayloadGPR));
         if (CachedRecovery* currentPayload { m_registers[wantedPayloadGPR] }) {
-            RELEASE_ASSERT(currentPayload == &location);
-            if (verbose)
-                dataLog("   + ", wantedPayloadGPR, " is OK\n");
+            if (currentPayload == &location) {
+                if (verbose)
+                    dataLog("   + ", wantedPayloadGPR, " is OK\n");
+            } else {
+                // See above
+                RELEASE_ASSERT_NOT_REACHED();
+            }
         }
     }
 

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/jit/GPRInfo.h (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/jit/GPRInfo.h	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/jit/GPRInfo.h	2021-10-27 00:35:11 UTC (rev 284914)
@@ -538,7 +538,7 @@
 class GPRInfo {
 public:
     typedef GPRReg RegisterType;
-    static constexpr unsigned numberOfRegisters = 10;
+    static constexpr unsigned numberOfRegisters = 9;
     static constexpr unsigned numberOfArgumentRegisters = NUMBER_OF_ARGUMENT_REGISTERS;
 
     // Temporary registers.
@@ -567,7 +567,7 @@
     static GPRReg toRegister(unsigned index)
     {
         ASSERT(index < numberOfRegisters);
-        static const GPRReg registerForIndex[numberOfRegisters] = { regT0, regT1, regT2, regT3, regT4, regT5, regT6, regT7, regCS0, regCS1 };
+        static const GPRReg registerForIndex[numberOfRegisters] = { regT0, regT1, regT2, regT3, regT4, regT5, regT6, regT7, regCS1 };
         return registerForIndex[index];
     }
 
@@ -583,7 +583,7 @@
         ASSERT(reg != InvalidGPRReg);
         ASSERT(static_cast<int>(reg) < 16);
         static const unsigned indexForRegister[16] =
-            { 0, 1, 2, 3, 7, 6, InvalidIndex, InvalidIndex, 4, 5, 9, 8, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex };
+            { 0, 1, 2, 3, 7, 6, InvalidIndex, InvalidIndex, 4, 5, 8, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex };
         unsigned result = indexForRegister[reg];
         return result;
     }

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/jit/RegisterSet.cpp (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/jit/RegisterSet.cpp	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/jit/RegisterSet.cpp	2021-10-27 00:35:11 UTC (rev 284914)
@@ -254,7 +254,6 @@
     result.set(GPRInfo::regCS6);
 #endif
 #elif CPU(ARM_THUMB2)
-    result.set(GPRInfo::regCS0);
     result.set(GPRInfo::regCS1);
 #elif CPU(ARM64)
     static_assert(GPRInfo::regCS8 == GPRInfo::numberTagRegister, "");

Modified: branches/safari-613.1.6-branch/Source/_javascript_Core/llint/LowLevelInterpreter32_64.asm (284913 => 284914)


--- branches/safari-613.1.6-branch/Source/_javascript_Core/llint/LowLevelInterpreter32_64.asm	2021-10-27 00:33:43 UTC (rev 284913)
+++ branches/safari-613.1.6-branch/Source/_javascript_Core/llint/LowLevelInterpreter32_64.asm	2021-10-27 00:35:11 UTC (rev 284914)
@@ -79,6 +79,8 @@
 # After calling, calling bytecode is claiming input registers are not used.
 macro dispatchAfterCall(size, opcodeStruct, valueProfileName, dstVirtualRegister, dispatch)
     loadi ArgumentCountIncludingThis + TagOffset[cfr], PC
+    loadp CodeBlock[cfr], PB
+    loadp CodeBlock::m_instructionsRawPointer[PB], PB
     get(size, opcodeStruct, dstVirtualRegister, t3)
     storei r1, TagOffset[cfr, t3, 8]
     storei r0, PayloadOffset[cfr, t3, 8]
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to