Ignore:
Timestamp:
Oct 28, 2009, 6:40:09 PM (16 years ago)
Author:
[email protected]
Message:

JSC JIT on ARMv7 cannot link jumps >16Mb range
https://bugs.webkit.org/show_bug.cgi?id=30891

Patch by Gavin Barraclough <[email protected]> on 2009-10-28
Reviewed by Oliver Hunt.

Start planing all relative jumps as move-32-bit-immediate-to-register-BX.
In the cases where the jump would fall within a relative jump range, use a relative jump.

  • JavaScriptCore.xcodeproj/project.pbxproj:
  • assembler/ARMv7Assembler.h:

(JSC::ARMv7Assembler::~ARMv7Assembler):
(JSC::ARMv7Assembler::LinkRecord::LinkRecord):
(JSC::ARMv7Assembler::):
(JSC::ARMv7Assembler::executableCopy):
(JSC::ARMv7Assembler::linkJump):
(JSC::ARMv7Assembler::relinkJump):
(JSC::ARMv7Assembler::setInt32):
(JSC::ARMv7Assembler::isB):
(JSC::ARMv7Assembler::isBX):
(JSC::ARMv7Assembler::isMOV_imm_T3):
(JSC::ARMv7Assembler::isMOVT):
(JSC::ARMv7Assembler::isNOP_T1):
(JSC::ARMv7Assembler::isNOP_T2):
(JSC::ARMv7Assembler::linkJumpAbsolute):
(JSC::ARMv7Assembler::twoWordOp5i6Imm4Reg4EncodedImmFirst):
(JSC::ARMv7Assembler::twoWordOp5i6Imm4Reg4EncodedImmSecond):
(JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp5i6Imm4Reg4EncodedImm):

  • assembler/MacroAssemblerARMv7.h:

(JSC::MacroAssemblerARMv7::makeJump):
(JSC::MacroAssemblerARMv7::makeBranch):

  • jit/JIT.h:
  • wtf/Platform.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/assembler/MacroAssemblerARMv7.h

    r48782 r50255  
    991991    ARMv7Assembler::JmpSrc makeJump()
    992992    {
    993         return m_assembler.b();
     993        moveFixedWidthEncoding(Imm32(0), dataTempRegister);
     994        return m_assembler.bx(dataTempRegister);
    994995    }
    995996
    996997    ARMv7Assembler::JmpSrc makeBranch(ARMv7Assembler::Condition cond)
    997998    {
    998         m_assembler.it(cond);
    999         return m_assembler.b();
     999        m_assembler.it(cond, true, true);
     1000        moveFixedWidthEncoding(Imm32(0), dataTempRegister);
     1001        return m_assembler.bx(dataTempRegister);
    10001002    }
    10011003    ARMv7Assembler::JmpSrc makeBranch(Condition cond) { return makeBranch(armV7Condition(cond)); }
Note: See TracChangeset for help on using the changeset viewer.