Ignore:
Timestamp:
Aug 17, 2011, 7:56:13 PM (14 years ago)
Author:
[email protected]
Message:

https://bugs.webkit.org/show_bug.cgi?id=66379
implements load32WithCompactAddressOffsetPatch function
and fixes store32 and moveWithPatch functions for SH4 platforms.

Patch by Thouraya ANDOLSI <[email protected]> on 2011-08-17
Reviewed by Gavin Barraclough.

  • assembler/MacroAssemblerSH4.h:

(JSC::MacroAssemblerSH4::rshift32):
(JSC::MacroAssemblerSH4::store32):
(JSC::MacroAssemblerSH4::load32WithCompactAddressOffsetPatch):
(JSC::MacroAssemblerSH4::moveWithPatch):

  • assembler/SH4Assembler.h:

(JSC::SH4Assembler::movlMemRegCompact):
(JSC::SH4Assembler::readPointer):
(JSC::SH4Assembler::repatchCompact):

  • jit/JIT.h:
File:
1 edited

Legend:

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

    r90237 r93277  
    4646    static const RegisterID scratchReg3 = SH4Registers::r13;
    4747
    48     static const int MaximumCompactPtrAlignedAddressOffset = 0x7FFFFFFF;
     48    static const int MaximumCompactPtrAlignedAddressOffset = 60;
    4949
    5050    enum RelationalCondition {
     
    237237    }
    238238
     239    void rshift32(RegisterID src, TrustedImm32 imm, RegisterID dest)
     240    {
     241        if (src != dest)
     242            move(src, dest);
     243        rshift32(imm, dest);
     244    }
     245
    239246    void sub32(RegisterID src, RegisterID dest)
    240247    {
     
    712719        m_assembler.loadConstant((imm.m_value), scr);
    713720        m_assembler.loadConstant(reinterpret_cast<uint32_t>(address), scr1);
    714         m_assembler.movlMemReg(scr, scr1);
     721        m_assembler.movlRegMem(scr, scr1);
    715722        releaseScratch(scr);
    716723        releaseScratch(scr1);
     
    721728        RegisterID scr = claimScratch();
    722729        m_assembler.loadConstant(reinterpret_cast<uint32_t>(address), scr);
    723         m_assembler.movlMemReg(src, scr);
     730        m_assembler.movlRegMem(src, scr);
    724731        releaseScratch(scr);
    725732    }
     
    736743    }
    737744   
    738     DataLabel32 load32WithAddressOffsetPatch(Address address, RegisterID dest)
    739     {
    740         RegisterID scr = claimScratch();
    741         DataLabelCompact label(this);
    742         m_assembler.loadConstantUnReusable(address.offset, scr);
    743         m_assembler.addlRegReg(address.base, scr);
    744         m_assembler.movlMemReg(scr, dest);
    745         releaseScratch(scr);
    746         return label;
    747     }
    748 
    749745    DataLabel32 store32WithAddressOffsetPatch(RegisterID src, Address address)
    750746    {
     
    756752        releaseScratch(scr);
    757753        return label;
     754    }
     755
     756    DataLabelCompact load32WithCompactAddressOffsetPatch(Address address, RegisterID dest)
     757    {
     758        DataLabelCompact dataLabel(this);
     759        ASSERT(address.offset <= MaximumCompactPtrAlignedAddressOffset);
     760        ASSERT(address.offset >= 0);
     761        m_assembler.movlMemRegCompact(address.offset >> 2, address.base, dest);
     762        return dataLabel;
    758763    }
    759764
     
    11951200    DataLabelPtr moveWithPatch(TrustedImmPtr initialValue, RegisterID dest)
    11961201    {
     1202        m_assembler.ensureSpace(m_assembler.maxInstructionSize, sizeof(uint32_t));
    11971203        DataLabelPtr dataLabel(this);
    1198         m_assembler.loadConstantUnReusable(reinterpret_cast<uint32_t>(initialValue.m_value), dest, true);
     1204        m_assembler.loadConstantUnReusable(reinterpret_cast<uint32_t>(initialValue.m_value), dest);
    11991205        return dataLabel;
    12001206    }
Note: See TracChangeset for help on using the changeset viewer.