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/jit/JITOpcodes.cpp

    r55684 r56759  
    18351835#endif // OS(WINCE)
    18361836
     1837#elif CPU(MIPS)
     1838    emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT0);
     1839
     1840    // Allocate stack space for our arglist
     1841    COMPILE_ASSERT(!(sizeof(ArgList) & 0x7), ArgList_should_by_8byte_aligned);
     1842    subPtr(Imm32(sizeof(ArgList) + 24), stackPointerRegister);
     1843
     1844    // Set up arguments
     1845    subPtr(Imm32(1), regT0); // Don't include 'this' in argcount
     1846
     1847    // Push argcount to 24 + offset($sp)
     1848    storePtr(regT0, Address(stackPointerRegister, 24 + OBJECT_OFFSETOF(ArgList, m_argCount)));
     1849
     1850    // Calculate the start of the callframe header, and store in regT1
     1851    move(callFrameRegister, regT1);
     1852    sub32(Imm32(RegisterFile::CallFrameHeaderSize * (int32_t)sizeof(Register)), regT1);
     1853
     1854    // Calculate start of arguments as callframe header - sizeof(Register) * argcount (regT1)
     1855    mul32(Imm32(sizeof(Register)), regT0, regT0);
     1856    subPtr(regT0, regT1);
     1857
     1858    // push pointer to arguments to 24 + offset($sp)
     1859    storePtr(regT1, Address(stackPointerRegister, 24 + OBJECT_OFFSETOF(ArgList, m_args)));
     1860
     1861    // Setup arg3: regT1 currently points to the first argument, regT1-sizeof(Register) points to 'this'
     1862    loadPtr(Address(regT1, -(int32_t)sizeof(Register)), MIPSRegisters::a3);
     1863
     1864    // Setup arg2:
     1865    emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, MIPSRegisters::a2);
     1866
     1867    // Setup arg1:
     1868    move(callFrameRegister, MIPSRegisters::a1);
     1869
     1870    // Setup arg4: ArgList is passed by reference.  At 16($sp), store ($sp + 24)
     1871    addPtr(Imm32(24), stackPointerRegister, regT2);
     1872    storePtr(regT2, Address(stackPointerRegister, 16));
     1873
     1874    // Setup arg0 as 20($sp) to hold the returned structure.
     1875    ASSERT(sizeof(JSValue) == 4);
     1876    addPtr(Imm32(20), stackPointerRegister, MIPSRegisters::a0);
     1877
     1878    // Call
     1879    call(Address(MIPSRegisters::a2, OBJECT_OFFSETOF(JSFunction, m_data)));
     1880
     1881    // Get returned value from 0($v0) which is the same as 20($sp)
     1882    loadPtr(Address(returnValueRegister, 0), returnValueRegister);
     1883
     1884    // Restore stack space
     1885    addPtr(Imm32(sizeof(ArgList) + 24), stackPointerRegister);
     1886
    18371887#elif ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
    18381888#error "JIT_OPTIMIZE_NATIVE_CALL not yet supported on this platform."
Note: See TracChangeset for help on using the changeset viewer.