Ignore:
Timestamp:
Nov 29, 2017, 9:37:36 AM (8 years ago)
Author:
Yusuke Suzuki
Message:

[JSC] Add MacroAssembler::getEffectiveAddress in all platforms
https://bugs.webkit.org/show_bug.cgi?id=180070

Reviewed by Saam Barati.

This patch adds getEffectiveAddress in all JIT platforms.
This is abstracted version of x86 lea.

We also fix a bug in Yarr that uses branch32 instead of branchPtr for addresses.

  • assembler/MacroAssemblerARM.h:

(JSC::MacroAssemblerARM::getEffectiveAddress):

  • assembler/MacroAssemblerARM64.h:

(JSC::MacroAssemblerARM64::getEffectiveAddress):
(JSC::MacroAssemblerARM64::getEffectiveAddress64): Deleted.

  • assembler/MacroAssemblerARMv7.h:

(JSC::MacroAssemblerARMv7::getEffectiveAddress):

  • assembler/MacroAssemblerMIPS.h:

(JSC::MacroAssemblerMIPS::getEffectiveAddress):

  • assembler/MacroAssemblerX86.h:

(JSC::MacroAssemblerX86::getEffectiveAddress):

  • assembler/MacroAssemblerX86_64.h:

(JSC::MacroAssemblerX86_64::getEffectiveAddress):
(JSC::MacroAssemblerX86_64::getEffectiveAddress64): Deleted.

  • assembler/testmasm.cpp:

(JSC::testGetEffectiveAddress):
(JSC::run):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::compileArrayPush):

  • yarr/YarrJIT.cpp:

(JSC::Yarr::YarrGenerator::tryReadUnicodeCharImpl):
(JSC::Yarr::YarrGenerator::tryReadUnicodeChar):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/assembler/testmasm.cpp

    r224843 r225271  
    172172}
    173173
     174void testGetEffectiveAddress(size_t pointer, ptrdiff_t length, int32_t offset, CCallHelpers::Scale scale)
     175{
     176    CHECK_EQ(compileAndRun<size_t>([=] (CCallHelpers& jit) {
     177        jit.emitFunctionPrologue();
     178        jit.move(CCallHelpers::TrustedImmPtr(bitwise_cast<void*>(pointer)), GPRInfo::regT0);
     179        jit.move(CCallHelpers::TrustedImmPtr(bitwise_cast<void*>(length)), GPRInfo::regT1);
     180        jit.getEffectiveAddress(CCallHelpers::BaseIndex(GPRInfo::regT0, GPRInfo::regT1, scale, offset), GPRInfo::returnValueGPR);
     181        jit.emitFunctionEpilogue();
     182        jit.ret();
     183    }), pointer + offset + (1 << static_cast<int>(scale)) * length);
     184}
     185
    174186// branchTruncateDoubleToInt32(), when encountering Infinity, -Infinity or a
    175187// Nan, should either yield 0 in dest or fail.
     
    731743
    732744    RUN(testSimple());
     745    RUN(testGetEffectiveAddress(0xff00, 42, 8, CCallHelpers::TimesEight));
     746    RUN(testGetEffectiveAddress(0xff00, -200, -300, CCallHelpers::TimesEight));
    733747    RUN(testBranchTruncateDoubleToInt32(0, 0));
    734748    RUN(testBranchTruncateDoubleToInt32(42, 42));
Note: See TracChangeset for help on using the changeset viewer.