Ignore:
Timestamp:
Aug 5, 2009, 10:22:42 PM (16 years ago)
Author:
[email protected]
Message:

2009-08-05 Zoltan Herczeg <[email protected]>

Reviewed by Gavin Barraclough.

Add JIT support for generic ARM port without optimizations.
https://bugs.webkit.org/show_bug.cgi?id=24986

All JIT optimizations are disabled.

Signed off by Zoltan Herczeg <[email protected]>
Signed off by Gabor Loki <[email protected]>

  • assembler/ARMAssembler.cpp: (JSC::ARMAssembler::baseIndexTransfer32):
  • assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::Imm32::Imm32):
  • assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::store32): (JSC::MacroAssemblerARM::move): (JSC::MacroAssemblerARM::branch32): (JSC::MacroAssemblerARM::add32): (JSC::MacroAssemblerARM::sub32): (JSC::MacroAssemblerARM::load32):
  • bytecode/CodeBlock.h: (JSC::CodeBlock::getBytecodeIndex):
  • jit/JIT.h:
  • jit/JITInlineMethods.h: (JSC::JIT::restoreArgumentReference):
  • jit/JITOpcodes.cpp:
  • jit/JITStubs.cpp:
  • jit/JITStubs.h: (JSC::JITStackFrame::returnAddressSlot):
  • wtf/Platform.h:
File:
1 edited

Legend:

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

    r46209 r46831  
    244244    void store32(Imm32 imm, ImplicitAddress address)
    245245    {
    246         move(imm, ARM::S1);
     246        if (imm.m_isPointer)
     247            m_assembler.ldr_un_imm(ARM::S1, imm.m_value);
     248        else
     249            move(imm, ARM::S1);
    247250        store32(ARM::S1, address);
    248251    }
     
    250253    void store32(RegisterID src, void* address)
    251254    {
    252         m_assembler.moveImm(reinterpret_cast<ARMWord>(address), ARM::S0);
     255        m_assembler.ldr_un_imm(ARM::S0, reinterpret_cast<ARMWord>(address));
    253256        m_assembler.dtr_u(false, src, ARM::S0, 0);
    254257    }
     
    256259    void store32(Imm32 imm, void* address)
    257260    {
    258         m_assembler.moveImm(reinterpret_cast<ARMWord>(address), ARM::S0);
    259         m_assembler.moveImm(imm.m_value, ARM::S1);
     261        m_assembler.ldr_un_imm(ARM::S0, reinterpret_cast<ARMWord>(address));
     262        if (imm.m_isPointer)
     263            m_assembler.ldr_un_imm(ARM::S1, imm.m_value);
     264        else
     265            m_assembler.moveImm(imm.m_value, ARM::S1);
    260266        m_assembler.dtr_u(false, ARM::S1, ARM::S0, 0);
    261267    }
     
    285291    void move(Imm32 imm, RegisterID dest)
    286292    {
    287         m_assembler.moveImm(imm.m_value, dest);
     293        if (imm.m_isPointer)
     294            m_assembler.ldr_un_imm(dest, imm.m_value);
     295        else
     296            m_assembler.moveImm(imm.m_value, dest);
    288297    }
    289298
     
    295304    void move(ImmPtr imm, RegisterID dest)
    296305    {
    297         m_assembler.mov_r(dest, m_assembler.getImm(reinterpret_cast<ARMWord>(imm.m_value), ARM::S0));
     306        move(Imm32(imm), dest);
    298307    }
    299308
     
    325334    Jump branch32(Condition cond, RegisterID left, Imm32 right)
    326335    {
    327         m_assembler.cmp_r(left, m_assembler.getImm(right.m_value, ARM::S0));
     336        if (right.m_isPointer) {
     337            m_assembler.ldr_un_imm(ARM::S0, right.m_value);
     338            m_assembler.cmp_r(left, ARM::S0);
     339        } else
     340            m_assembler.cmp_r(left, m_assembler.getImm(right.m_value, ARM::S0));
    328341        return Jump(m_assembler.jmp(ARMCondition(cond)));
    329342    }
     
    539552    void add32(Imm32 imm, AbsoluteAddress address)
    540553    {
    541         m_assembler.moveImm(reinterpret_cast<ARMWord>(address.m_ptr), ARM::S1);
     554        m_assembler.ldr_un_imm(ARM::S1, reinterpret_cast<ARMWord>(address.m_ptr));
    542555        m_assembler.dtr_u(true, ARM::S1, ARM::S1, 0);
    543556        add32(imm, ARM::S1);
    544         m_assembler.moveImm(reinterpret_cast<ARMWord>(address.m_ptr), ARM::S0);
     557        m_assembler.ldr_un_imm(ARM::S0, reinterpret_cast<ARMWord>(address.m_ptr));
    545558        m_assembler.dtr_u(false, ARM::S1, ARM::S0, 0);
    546559    }
     
    548561    void sub32(Imm32 imm, AbsoluteAddress address)
    549562    {
    550         m_assembler.moveImm(reinterpret_cast<ARMWord>(address.m_ptr), ARM::S1);
     563        m_assembler.ldr_un_imm(ARM::S1, reinterpret_cast<ARMWord>(address.m_ptr));
    551564        m_assembler.dtr_u(true, ARM::S1, ARM::S1, 0);
    552565        sub32(imm, ARM::S1);
    553         m_assembler.moveImm(reinterpret_cast<ARMWord>(address.m_ptr), ARM::S0);
     566        m_assembler.ldr_un_imm(ARM::S0, reinterpret_cast<ARMWord>(address.m_ptr));
    554567        m_assembler.dtr_u(false, ARM::S1, ARM::S0, 0);
    555568    }
     
    557570    void load32(void* address, RegisterID dest)
    558571    {
    559         m_assembler.moveImm(reinterpret_cast<ARMWord>(address), ARM::S0);
     572        m_assembler.ldr_un_imm(ARM::S0, reinterpret_cast<ARMWord>(address));
    560573        m_assembler.dtr_u(true, dest, ARM::S0, 0);
    561574    }
Note: See TracChangeset for help on using the changeset viewer.