Ignore:
Timestamp:
May 24, 2013, 9:46:10 AM (12 years ago)
Author:
[email protected]
Message:

[sh4] Optimize LLINT generated code and fix few bugs in baseline JIT.
https://bugs.webkit.org/show_bug.cgi?id=116716

Patch by Julien Brianceau <[email protected]> on 2013-05-24
Reviewed by Geoffrey Garen.

  • assembler/MacroAssemblerSH4.h:

(JSC::MacroAssemblerSH4::mul32): Cosmetic changes.
(JSC::MacroAssemblerSH4::convertInt32ToDouble): Absolute address was not dereferenced.
(JSC::MacroAssemblerSH4::branch32): Absolute address was not dereferenced.
(JSC::MacroAssemblerSH4::revertJumpReplacementToBranchPtrWithPatch): Use all 32 bits of pointer for revertJump call.

  • assembler/SH4Assembler.h:

(JSC::SH4Assembler::revertJump): Use changePCrelativeAddress to patch the whole pointer.
(JSC::SH4Assembler::linkJump): Cosmetic change.

  • offlineasm/sh4.rb: Optimize LLINT generated code.
File:
1 edited

Legend:

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

    r149676 r150644  
    15291529    }
    15301530
    1531     static void revertJump(void* instructionStart, SH4Word imm)
     1531    static void revertJump(void* instructionStart, void *immptr)
    15321532    {
    15331533        SH4Word *insn = reinterpret_cast<SH4Word*>(instructionStart);
    1534         SH4Word disp;
    1535 
    15361534        ASSERT((insn[0] & 0xf000) == MOVL_READ_OFFPC_OPCODE);
    1537 
    1538         disp = insn[0] & 0x00ff;
    1539         insn += 2 + (disp << 1); // PC += 4 + (disp*4)
    1540         insn = (SH4Word *) ((unsigned) insn & (~3));
    1541         insn[0] = imm;
    1542         cacheFlush(insn, sizeof(SH4Word));
     1535        changePCrelativeAddress(insn[0] & 0x00ff, insn, reinterpret_cast<uint32_t>(immptr));
    15431536    }
    15441537
     
    15941587
    15951588        instruction = *instructionPtr;
    1596         if ((instruction  & 0xf000) == 0xe000) {
     1589        if ((instruction & 0xf000) == 0xe000) {
    15971590            uint32_t* addr = getLdrImmAddressOnPool(instructionPtr, m_buffer.poolAddress());
    15981591            *addr = offsetBits - 2;
Note: See TracChangeset for help on using the changeset viewer.