Changeset 56759 in webkit for trunk/JavaScriptCore/jit/JITOpcodes.cpp
- Timestamp:
- Mar 29, 2010, 7:59:20 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JITOpcodes.cpp
r55684 r56759 1835 1835 #endif // OS(WINCE) 1836 1836 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 1837 1887 #elif ENABLE(JIT_OPTIMIZE_NATIVE_CALL) 1838 1888 #error "JIT_OPTIMIZE_NATIVE_CALL not yet supported on this platform."
Note:
See TracChangeset
for help on using the changeset viewer.