Changeset 159871 in webkit
- Timestamp:
- Nov 29, 2013 6:16:18 AM (10 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r159855 r159871 1 2013-11-29 Julien Brianceau <jbriance@cisco.com> 2 3 Merge arm and sh4 paths in nativeForGenerator and privateCompileCTINativeCall functions. 4 https://bugs.webkit.org/show_bug.cgi?id=124892 5 6 Reviewed by Zoltan Herczeg. 7 8 * assembler/MacroAssemblerSH4.h: 9 (JSC::MacroAssemblerSH4::call): Pick a scratch register instead of getting it as a 10 parameter. The sh4 port was the only one to have this call(Address, RegisterID) prototype. 11 * jit/JITOpcodes32_64.cpp: 12 (JSC::JIT::privateCompileCTINativeCall): Use argumentGPRx and merge arm and sh4 paths. 13 * jit/ThunkGenerators.cpp: 14 (JSC::nativeForGenerator): Use argumentGPRx and merge arm and sh4 paths. 15 1 16 2013-11-28 Nadav Rotem <nrotem@apple.com> 2 17 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h
r159629 r159871 2361 2361 } 2362 2362 2363 void call(Address address, RegisterID target) 2364 { 2363 void call(Address address) 2364 { 2365 RegisterID target = claimScratch(); 2365 2366 load32(address.base, address.offset, target); 2366 2367 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 2); 2367 2368 m_assembler.branch(JSR_OPCODE, target); 2368 2369 m_assembler.nop(); 2370 releaseScratch(target); 2369 2371 } 2370 2372 -
trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp
r159091 r159871 75 75 addPtr(TrustedImm32(16 - sizeof(void*)), stackPointerRegister); 76 76 77 #elif CPU(ARM) 78 // Load caller frame's scope chain into this callframe so that whatever we call can 79 // get to its global data. 77 #elif CPU(ARM) || CPU(SH4) 78 // Load caller frame's scope chain into this callframe so that whatever we call can get to its global data. 80 79 emitGetCallerFrameFromCallFrameHeaderPtr(regT2); 81 80 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT2); … … 85 84 emitPutReturnPCToCallFrameHeader(regT3); 86 85 87 // Calling convention : f(r0 == regT0, r1 == regT1, ...);88 // Host function signature : f(ExecState*);89 move(callFrameRegister, ARMRegisters::r0);90 91 emitGetFromCallFrameHeaderPtr(JSStack::Callee, ARMRegisters::r1);86 // Calling convention is f(argumentGPR0, argumentGPR1, ...). 87 // Host function signature is f(ExecState*). 88 move(callFrameRegister, argumentGPR0); 89 90 emitGetFromCallFrameHeaderPtr(JSStack::Callee, argumentGPR1); 92 91 move(regT2, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. 93 loadPtr(Address( ARMRegisters::r1, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);92 loadPtr(Address(argumentGPR1, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); 94 93 95 94 // call the function … … 97 96 98 97 restoreReturnAddressBeforeReturn(regT3); 99 100 98 #elif CPU(MIPS) 101 99 // Load caller frame's scope chain into this callframe so that whatever we call can … … 128 126 // Restore stack space 129 127 addPtr(TrustedImm32(16), stackPointerRegister); 130 131 restoreReturnAddressBeforeReturn(regT3);132 #elif CPU(SH4)133 // Load caller frame's scope chain into this callframe so that whatever we call can134 // get to its global data.135 emitGetCallerFrameFromCallFrameHeaderPtr(regT2);136 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT2);137 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain);138 139 preserveReturnAddressAfterCall(regT3); // Callee preserved140 emitPutReturnPCToCallFrameHeader(regT3);141 142 // Calling convention: f(r0 == regT4, r1 == regT5, ...);143 // Host function signature: f(ExecState*);144 move(callFrameRegister, regT4);145 146 emitGetFromCallFrameHeaderPtr(JSStack::Callee, regT5);147 move(regT2, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.148 loadPtr(Address(regT5, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);149 150 // call the function151 nativeCall = call();152 128 153 129 restoreReturnAddressBeforeReturn(regT3); -
trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp
r159593 r159871 344 344 jit.restoreReturnAddressBeforeReturn(JSInterfaceJIT::regT3); 345 345 346 #elif CPU(ARM) 347 // Load caller frame's scope chain into this callframe so that whatever we call can 348 // get to its global data. 346 #elif CPU(ARM) || CPU(SH4) 347 // Load caller frame's scope chain into this callframe so that whatever we call can get to its global data. 349 348 jit.emitGetCallerFrameFromCallFrameHeaderPtr(JSInterfaceJIT::regT2); 350 349 jit.emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, JSInterfaceJIT::regT1, JSInterfaceJIT::regT2); … … 354 353 jit.emitPutReturnPCToCallFrameHeader(JSInterfaceJIT::regT3); 355 354 356 // Calling convention : f(r0 == regT0, r1 == regT1, ...);357 // Host function signature : f(ExecState*);358 jit.move(JSInterfaceJIT::callFrameRegister, ARMRegisters::r0);359 360 jit.emitGetFromCallFrameHeaderPtr(JSStack::Callee, ARMRegisters::r1);355 // Calling convention is f(argumentGPR0, argumentGPR1, ...). 356 // Host function signature is f(ExecState*). 357 jit.move(JSInterfaceJIT::callFrameRegister, JSInterfaceJIT::argumentGPR0); 358 359 jit.emitGetFromCallFrameHeaderPtr(JSStack::Callee, JSInterfaceJIT::argumentGPR1); 361 360 jit.move(JSInterfaceJIT::regT2, JSInterfaceJIT::callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. 362 jit.loadPtr(JSInterfaceJIT::Address( ARMRegisters::r1, JSFunction::offsetOfExecutable()), JSInterfaceJIT::regT2);361 jit.loadPtr(JSInterfaceJIT::Address(JSInterfaceJIT::argumentGPR1, JSFunction::offsetOfExecutable()), JSInterfaceJIT::regT2); 363 362 jit.call(JSInterfaceJIT::Address(JSInterfaceJIT::regT2, executableOffsetToFunction)); 364 363 365 364 jit.restoreReturnAddressBeforeReturn(JSInterfaceJIT::regT3); 366 367 #elif CPU(SH4)368 // Load caller frame's scope chain into this callframe so that whatever we call can369 // get to its global data.370 jit.emitGetCallerFrameFromCallFrameHeaderPtr(JSInterfaceJIT::regT2);371 jit.emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, JSInterfaceJIT::regT1, JSInterfaceJIT::regT2);372 jit.emitPutCellToCallFrameHeader(JSInterfaceJIT::regT1, JSStack::ScopeChain);373 374 jit.preserveReturnAddressAfterCall(JSInterfaceJIT::regT3); // Callee preserved375 jit.emitPutReturnPCToCallFrameHeader(JSInterfaceJIT::regT3);376 377 // Calling convention: f(r0 == regT4, r1 == regT5, ...);378 // Host function signature: f(ExecState*);379 jit.move(JSInterfaceJIT::callFrameRegister, JSInterfaceJIT::regT4);380 381 jit.emitGetFromCallFrameHeaderPtr(JSStack::Callee, JSInterfaceJIT::regT5);382 jit.move(JSInterfaceJIT::regT2, JSInterfaceJIT::callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.383 jit.loadPtr(JSInterfaceJIT::Address(JSInterfaceJIT::regT5, JSFunction::offsetOfExecutable()), JSInterfaceJIT::regT2);384 385 jit.call(JSInterfaceJIT::Address(JSInterfaceJIT::regT2, executableOffsetToFunction), JSInterfaceJIT::regT0);386 jit.restoreReturnAddressBeforeReturn(JSInterfaceJIT::regT3);387 388 365 #elif CPU(MIPS) 389 366 // Load caller frame's scope chain into this callframe so that whatever we call can
Note: See TracChangeset
for help on using the changeset viewer.