Ignore:
Timestamp:
Apr 20, 2022, 12:54:47 AM (3 years ago)
Author:
Mikhail R. Gadelha
Message:

Unify calls and checks for CellTag
https://bugs.webkit.org/show_bug.cgi?id=238025

Reviewed by Yusuke Suzuki.

This patch moves all the places where cell tags are written and checked
when branching: this will be needed when implementing the concurrency on
32 bits archs, so we can focus on changing storeCell, branchIfNotCell and
branchIfCell to implement the mutex locks/unlocks.

It also reduces the code size in JetStream2 by ~1% on average on 32
bits platforms.

  • assembler/MacroAssemblerARMv7.h:

(JSC::MacroAssemblerARMv7::store8):
(JSC::MacroAssemblerARMv7::storePair32):

  • assembler/MacroAssemblerMIPS.h:

(JSC::MacroAssemblerMIPS::storePair32):

  • dfg/DFGOSRExit.cpp:

(JSC::DFG::OSRExit::compileExit):

  • dfg/DFGOSRExitCompilerCommon.cpp:

(JSC::DFG::reifyInlinedCallFrames):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::checkArgumentTypes):

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::fillSpeculateCell):
(JSC::DFG::SpeculativeJIT::compilePeepHoleObjectStrictEquality):

  • jit/AssemblyHelpers.cpp:

(JSC::AssemblyHelpers::jitAssertIsCell):

  • jit/AssemblyHelpers.h:

(JSC::AssemblyHelpers::storeCell):
(JSC::AssemblyHelpers::storeTrustedValue):
(JSC::AssemblyHelpers::branchIfNotCell):
(JSC::AssemblyHelpers::branchIfCell):

  • jit/CallFrameShuffler32_64.cpp:

(JSC::CallFrameShuffler::emitStore):

  • jit/JSInterfaceJIT.h:

(JSC::JSInterfaceJIT::emitLoadJSCell):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h

    r292540 r293087  
    16521652    }
    16531653
     1654    void storePair32(RegisterID src1, TrustedImm32 imm, Address address)
     1655    {
     1656        move(imm, addrTempRegister);
     1657        storePair32(src1, addrTempRegister, address);
     1658    }
     1659
     1660    void storePair32(TrustedImmPtr immPtr, TrustedImm32 imm32, Address address)
     1661    {
     1662        move(immPtr, addrTempRegister);
     1663        move(imm32, dataTempRegister);
     1664        storePair32(addrTempRegister, dataTempRegister, address);
     1665    }
     1666
     1667    void storePair32(TrustedImm32 imm1, TrustedImm32 imm2, Address address)
     1668    {
     1669        move(imm1, addrTempRegister);
     1670        RegisterID scratch = addrTempRegister;
     1671        if (imm1.m_value != imm2.m_value) {
     1672            scratch = dataTempRegister;
     1673            move(imm2, scratch);
     1674        }
     1675        storePair32(addrTempRegister, scratch, address);
     1676    }
     1677
    16541678    void storePair32(RegisterID src1, RegisterID src2, RegisterID dest)
    16551679    {
     
    16721696        store32(src1, address);
    16731697        store32(src2, address.withOffset(4));
     1698    }
     1699
     1700    void storePair32(TrustedImm32 imm1, TrustedImm32 imm2, BaseIndex address)
     1701    {
     1702        store32(imm1, address);
     1703        store32(imm2, address.withOffset(4));
     1704    }
     1705
     1706    void storePair32(RegisterID src1, TrustedImm32 imm, const void* address)
     1707    {
     1708        move(TrustedImmPtr(address), addrTempRegister);
     1709        move(imm, dataTempRegister);
     1710        storePair32(src1, dataTempRegister, addrTempRegister);
    16741711    }
    16751712
Note: See TracChangeset for help on using the changeset viewer.