Changeset 93277 in webkit for trunk/Source/JavaScriptCore


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:
Location:
trunk/Source/JavaScriptCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r93238 r93277  
     12011-08-17  Thouraya ANDOLSI  <[email protected]>
     2
     3        https://bugs.webkit.org/show_bug.cgi?id=66379
     4        implements load32WithCompactAddressOffsetPatch function
     5        and fixes store32 and moveWithPatch functions for SH4 platforms.
     6
     7        Reviewed by Gavin Barraclough.
     8
     9        * assembler/MacroAssemblerSH4.h:
     10        (JSC::MacroAssemblerSH4::rshift32):
     11        (JSC::MacroAssemblerSH4::store32):
     12        (JSC::MacroAssemblerSH4::load32WithCompactAddressOffsetPatch):
     13        (JSC::MacroAssemblerSH4::moveWithPatch):
     14        * assembler/SH4Assembler.h:
     15        (JSC::SH4Assembler::movlMemRegCompact):
     16        (JSC::SH4Assembler::readPointer):
     17        (JSC::SH4Assembler::repatchCompact):
     18        * jit/JIT.h:
     19
    1202011-08-17  Filip Pizlo  <[email protected]>
    221
  • 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    }
  • trunk/Source/JavaScriptCore/assembler/SH4Assembler.h

    r89630 r93277  
    3434#include <stdarg.h>
    3535#include <stdint.h>
     36#include <stdio.h>
    3637#include <wtf/Assertions.h>
    3738#include <wtf/Vector.h>
     
    10641065    }
    10651066
     1067    void movlMemRegCompact(int offset, RegisterID base, RegisterID dst)
     1068    {
     1069        oneShortOp(getOpcodeGroup4(MOVL_READ_OFFRM_OPCODE, dst, base, offset));
     1070    }
     1071
    10661072    void movbMemReg(int offset, RegisterID base, RegisterID dst)
    10671073    {
     
    12331239        *reinterpret_cast<uint32_t*>(address) = newAddress;
    12341240    }
    1235    
     1241
    12361242    static uint32_t readPCrelativeAddress(int offset, uint16_t* instructionPtr)
    12371243    {
     
    13551361    static void* readPointer(void* code)
    13561362    {
    1357         return static_cast<void*>(readInt32(code));
     1363        return reinterpret_cast<void*>(readInt32(code));
    13581364    }
    13591365
     
    13661372    static void repatchCompact(void* where, int32_t value)
    13671373    {
    1368         repatchInt32(where, value);
     1374        ASSERT(value >= 0);
     1375        ASSERT(value <= 60);
     1376        *reinterpret_cast<uint16_t*>(where) = ((*reinterpret_cast<uint16_t*>(where) & 0xfff0) | (value >> 2));
     1377        ExecutableAllocator::cacheFlush(reinterpret_cast<uint16_t*>(where), sizeof(uint16_t));
    13691378    }
    13701379
  • trunk/Source/JavaScriptCore/jit/JIT.h

    r92498 r93277  
    489489        static const int patchOffsetGetByIdBranchToSlowCase = 10;
    490490        static const int patchOffsetGetByIdPropertyMapOffset = 24;
    491         static const int patchOffsetGetByIdPutResult = 32;
     491        static const int patchOffsetGetByIdPutResult = 24;
    492492
    493493        // sequenceOpCall
     
    508508
    509509        static const int patchOffsetGetByIdPropertyMapOffset1 = 20;
    510         static const int patchOffsetGetByIdPropertyMapOffset2 = 26;
     510        static const int patchOffsetGetByIdPropertyMapOffset2 = 22;
    511511
    512512        static const int patchOffsetPutByIdPropertyMapOffset1 = 20;
Note: See TracChangeset for help on using the changeset viewer.