Ignore:
Timestamp:
Mar 7, 2022, 1:55:08 PM (3 years ago)
Author:
Angelos Oikonomopoulos
Message:

AssemblyHelpersSpoolers: use load/store pair on ARMv7
https://bugs.webkit.org/show_bug.cgi?id=235112

Reviewed by Žan Doberšek.

Save ~1% code size for baseline JIT on JS2 by emitting load/store pair
instructions on 32-bit ARM.

  • assembler/ARMv7Assembler.h:

(JSC::ARMv6Assembler::vldmia):
(JSC::ARMv7Assembler::vstmia):

  • assembler/CPU.h:

(JSC::isARM):

  • assembler/MacroAssemblerARMv7.h:

(JSC::MacroAssemblerARMv7::loadPair64):
(JSC::MacroAssemblerARMv7::storePair64):

  • jit/AssemblyHelpers.cpp:

(JSC::AssemblyHelpers::copyLLIntBaselineCalleeSavesFromFrameOrRegisterToEntryFrameCalleeSavesBuffer):

  • jit/AssemblyHelpersSpoolers.h:

(JSC::AssemblyHelpers::LoadRegSpooler::executePair):
(JSC::AssemblyHelpers::StoreRegSpooler::executePair):
(JSC::AssemblyHelpers::CopySpooler::CopySpooler):
(JSC::AssemblyHelpers::CopySpooler::loadPair):
(JSC::AssemblyHelpers::CopySpooler::storePair):

File:
1 edited

Legend:

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

    r287516 r290907  
    584584        OP_VMOV_CtoD    = 0xEC00,
    585585        OP_VMOV_DtoC    = 0xEC10,
     586        OP_VSTMIA       = 0xEC80,
     587        OP_VLDMIA       = 0xEC90,
    586588        OP_FSTS         = 0xED00,
    587589        OP_VSTR         = 0xED00,
     
    689691        OP_VCVTSD_T1b    = 0x0A40,
    690692        OP_VCVTDS_T1b    = 0x0A40,
     693        OP_VSTMIAb       = 0x0B00,
     694        OP_VLDMIAb       = 0x0B00,
    691695        OP_NOP_T2b       = 0x8000,
    692696        OP_DMB_SY_T1b    = 0x8F5F,
     
    19261930    }
    19271931#endif
     1932
     1933    void vldmia(RegisterID rn, FPDoubleRegisterID rs, uint32_t count)
     1934    {
     1935        ASSERT(count < 16);
     1936        m_formatter.vfpMemOp(OP_VLDMIA, OP_VLDMIAb, true, rn, rs, count << 3);
     1937    }
     1938
     1939    void vstmia(RegisterID rn, FPDoubleRegisterID rs, uint32_t count)
     1940    {
     1941        ASSERT(count < 16);
     1942        m_formatter.vfpMemOp(OP_VSTMIA, OP_VSTMIAb, true, rn, rs, count << 3);
     1943    }
    19281944
    19291945    void vand(FPDoubleRegisterID rd, FPDoubleRegisterID rn, FPDoubleRegisterID rm)
Note: See TracChangeset for help on using the changeset viewer.