Changeset 159995 in webkit
- Timestamp:
- Dec 3, 2013 2:28:21 AM (10 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r159987 r159995 1 2013-12-03 Julien Brianceau <jbriance@cisco.com> 2 3 Merge mips and arm/sh4 paths in nativeForGenerator and privateCompileCTINativeCall functions. 4 https://bugs.webkit.org/show_bug.cgi?id=125067 5 6 Reviewed by Michael Saboff. 7 8 * jit/JITOpcodes32_64.cpp: 9 (JSC::JIT::privateCompileCTINativeCall): 10 * jit/ThunkGenerators.cpp: 11 (JSC::nativeForGenerator): 12 1 13 2013-12-02 Mark Lam <mark.lam@apple.com> 2 14 -
trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp
r159973 r159995 75 75 addPtr(TrustedImm32(16 - sizeof(void*)), stackPointerRegister); 76 76 77 #elif CPU(ARM) || CPU(SH4) 77 #elif CPU(ARM) || CPU(SH4) || CPU(MIPS) 78 78 // Load caller frame's scope chain into this callframe so that whatever we call can get to its global data. 79 79 emitGetCallerFrameFromCallFrameHeaderPtr(regT2); … … 84 84 emitPutReturnPCToCallFrameHeader(regT3); 85 85 86 #if CPU(MIPS) 87 // Allocate stack space for (unused) 16 bytes (8-byte aligned) for 4 arguments. 88 subPtr(TrustedImm32(16), stackPointerRegister); 89 #endif 90 86 91 // Calling convention is f(argumentGPR0, argumentGPR1, ...). 87 92 // Host function signature is f(ExecState*). … … 95 100 nativeCall = call(); 96 101 97 restoreReturnAddressBeforeReturn(regT3); 98 #elif CPU(MIPS) 99 // Load caller frame's scope chain into this callframe so that whatever we call can 100 // get to its global data. 101 emitGetCallerFrameFromCallFrameHeaderPtr(regT0); 102 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT0); 103 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 104 105 preserveReturnAddressAfterCall(regT3); // Callee preserved 106 emitPutReturnPCToCallFrameHeader(regT3); 107 108 // Calling convention: f(a0, a1, a2, a3); 109 // Host function signature: f(ExecState*); 110 111 // Allocate stack space for 16 bytes (8-byte aligned) 112 // 16 bytes (unused) for 4 arguments 113 subPtr(TrustedImm32(16), stackPointerRegister); 114 115 // Setup arg0 116 move(callFrameRegister, MIPSRegisters::a0); 117 118 // Call 119 emitGetFromCallFrameHeaderPtr(JSStack::Callee, MIPSRegisters::a2); 120 loadPtr(Address(MIPSRegisters::a2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); 121 move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. 122 123 // call the function 124 nativeCall = call(); 125 102 #if CPU(MIPS) 126 103 // Restore stack space 127 104 addPtr(TrustedImm32(16), stackPointerRegister); 105 #endif 128 106 129 107 restoreReturnAddressBeforeReturn(regT3); -
trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp
r159871 r159995 344 344 jit.restoreReturnAddressBeforeReturn(JSInterfaceJIT::regT3); 345 345 346 #elif CPU(ARM) || CPU(SH4) 346 #elif CPU(ARM) || CPU(SH4) || CPU(MIPS) 347 347 // Load caller frame's scope chain into this callframe so that whatever we call can get to its global data. 348 348 jit.emitGetCallerFrameFromCallFrameHeaderPtr(JSInterfaceJIT::regT2); … … 353 353 jit.emitPutReturnPCToCallFrameHeader(JSInterfaceJIT::regT3); 354 354 355 #if CPU(MIPS) 356 // Allocate stack space for (unused) 16 bytes (8-byte aligned) for 4 arguments. 357 jit.subPtr(JSInterfaceJIT::TrustedImm32(16), JSInterfaceJIT::stackPointerRegister); 358 #endif 359 355 360 // Calling convention is f(argumentGPR0, argumentGPR1, ...). 356 361 // Host function signature is f(ExecState*). … … 362 367 jit.call(JSInterfaceJIT::Address(JSInterfaceJIT::regT2, executableOffsetToFunction)); 363 368 364 jit.restoreReturnAddressBeforeReturn(JSInterfaceJIT::regT3); 365 #elif CPU(MIPS) 366 // Load caller frame's scope chain into this callframe so that whatever we call can 367 // get to its global data. 368 jit.emitGetCallerFrameFromCallFrameHeaderPtr(JSInterfaceJIT::regT0); 369 jit.emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, JSInterfaceJIT::regT1, JSInterfaceJIT::regT0); 370 jit.emitPutCellToCallFrameHeader(JSInterfaceJIT::regT1, JSStack::ScopeChain); 371 372 jit.preserveReturnAddressAfterCall(JSInterfaceJIT::regT3); // Callee preserved 373 jit.emitPutReturnPCToCallFrameHeader(JSInterfaceJIT::regT3); 374 375 // Calling convention: f(a0, a1, a2, a3); 376 // Host function signature: f(ExecState*); 377 378 // Allocate stack space for 16 bytes (8-byte aligned) 379 // 16 bytes (unused) for 4 arguments 380 jit.subPtr(JSInterfaceJIT::TrustedImm32(16), JSInterfaceJIT::stackPointerRegister); 381 382 // Setup arg0 383 jit.move(JSInterfaceJIT::callFrameRegister, MIPSRegisters::a0); 384 385 // Call 386 jit.emitGetFromCallFrameHeaderPtr(JSStack::Callee, MIPSRegisters::a2); 387 jit.loadPtr(JSInterfaceJIT::Address(MIPSRegisters::a2, JSFunction::offsetOfExecutable()), JSInterfaceJIT::regT2); 388 jit.move(JSInterfaceJIT::regT0, JSInterfaceJIT::callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. 389 jit.call(JSInterfaceJIT::Address(JSInterfaceJIT::regT2, executableOffsetToFunction)); 390 369 #if CPU(MIPS) 391 370 // Restore stack space 392 371 jit.addPtr(JSInterfaceJIT::TrustedImm32(16), JSInterfaceJIT::stackPointerRegister); 372 #endif 393 373 394 374 jit.restoreReturnAddressBeforeReturn(JSInterfaceJIT::regT3);
Note: See TracChangeset
for help on using the changeset viewer.