Ignore:
Timestamp:
Mar 29, 2010, 7:59:20 PM (15 years ago)
Author:
[email protected]
Message:

2010-03-29 Chao-ying Fu <[email protected]>

Reviewed by Oliver Hunt.

MIPS JIT Supports
https://bugs.webkit.org/show_bug.cgi?id=30144

The following changes enable MIPS JIT.

  • assembler/MIPSAssembler.h: (JSC::MIPSAssembler::lbu): (JSC::MIPSAssembler::linkWithOffset):
  • assembler/MacroAssemblerMIPS.h: (JSC::MacroAssemblerMIPS::load8): (JSC::MacroAssemblerMIPS::branch8): (JSC::MacroAssemblerMIPS::branchTest8): (JSC::MacroAssemblerMIPS::setTest8): (JSC::MacroAssemblerMIPS::setTest32):
  • jit/JIT.h:
  • jit/JITInlineMethods.h: (JSC::JIT::preserveReturnAddressAfterCall): (JSC::JIT::restoreReturnAddressBeforeReturn):
  • jit/JITOpcodes.cpp:
  • jit/JITStubs.cpp: (JSC::JITThunks::JITThunks):
  • jit/JITStubs.h: (JSC::JITStackFrame::returnAddressSlot):
  • wtf/Platform.h:
File:
1 edited

Legend:

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

    r55633 r56759  
    443443    // register is passed.
    444444
     445    /* Need to use zero-extened load byte for load8.  */
     446    void load8(ImplicitAddress address, RegisterID dest)
     447    {
     448        if (address.offset >= -32768 && address.offset <= 32767
     449            && !m_fixedWidth)
     450            m_assembler.lbu(dest, address.base, address.offset);
     451        else {
     452            /*
     453                lui     addrTemp, (offset + 0x8000) >> 16
     454                addu    addrTemp, addrTemp, base
     455                lbu     dest, (offset & 0xffff)(addrTemp)
     456              */
     457            m_assembler.lui(addrTempRegister, (address.offset + 0x8000) >> 16);
     458            m_assembler.addu(addrTempRegister, addrTempRegister, address.base);
     459            m_assembler.lbu(dest, addrTempRegister, address.offset);
     460        }
     461    }
     462
    445463    void load32(ImplicitAddress address, RegisterID dest)
    446464    {
     
    857875    // an optional second operand of a mask under which to perform the test.
    858876
     877    Jump branch8(Condition cond, Address left, Imm32 right)
     878    {
     879        // Make sure the immediate value is unsigned 8 bits.
     880        ASSERT(!(right.m_value & 0xFFFFFF00));
     881        load8(left, dataTempRegister);
     882        move(right, immTempRegister);
     883        return branch32(cond, dataTempRegister, immTempRegister);
     884    }
     885
    859886    Jump branch32(Condition cond, RegisterID left, RegisterID right)
    860887    {
     
    10361063    {
    10371064        load32(address, dataTempRegister);
     1065        return branchTest32(cond, dataTempRegister, mask);
     1066    }
     1067
     1068    Jump branchTest8(Condition cond, Address address, Imm32 mask = Imm32(-1))
     1069    {
     1070        load8(address, dataTempRegister);
    10381071        return branchTest32(cond, dataTempRegister, mask);
    10391072    }
     
    13331366    }
    13341367
     1368    void setTest8(Condition cond, Address address, Imm32 mask, RegisterID dest)
     1369    {
     1370        ASSERT((cond == Zero) || (cond == NonZero));
     1371        load8(address, dataTempRegister);
     1372        if (mask.m_value == -1 && !m_fixedWidth) {
     1373            if (cond == Zero)
     1374                m_assembler.sltiu(dest, dataTempRegister, 1);
     1375            else
     1376                m_assembler.sltu(dest, MIPSRegisters::zero, dataTempRegister);
     1377        } else {
     1378            move(mask, immTempRegister);
     1379            m_assembler.andInsn(cmpTempRegister, dataTempRegister,
     1380                                immTempRegister);
     1381            if (cond == Zero)
     1382                m_assembler.sltiu(dest, cmpTempRegister, 1);
     1383            else
     1384                m_assembler.sltu(dest, MIPSRegisters::zero, cmpTempRegister);
     1385        }
     1386    }
     1387
    13351388    void setTest32(Condition cond, Address address, Imm32 mask, RegisterID dest)
    13361389    {
     
    13451398            move(mask, immTempRegister);
    13461399            m_assembler.andInsn(cmpTempRegister, dataTempRegister,
    1347                                  immTempRegister);
     1400                                immTempRegister);
    13481401            if (cond == Zero)
    13491402                m_assembler.sltiu(dest, cmpTempRegister, 1);
Note: See TracChangeset for help on using the changeset viewer.