Changeset 178856 in webkit for trunk/Source/JavaScriptCore/jit
- Timestamp:
- Jan 21, 2015, 1:43:55 PM (10 years ago)
- Location:
- trunk/Source/JavaScriptCore/jit
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/jit/JITCall.cpp
r173282 r178856 178 178 179 179 For a JS call: 180 - Caller initializes ScopeChain.181 180 - Callee initializes ReturnPC; CodeBlock. 182 181 - Callee restores callFrameRegister before return. 183 182 184 183 For a non-JS call: 185 - Caller initializes ScopeChain;ReturnPC; CodeBlock.184 - Caller initializes ReturnPC; CodeBlock. 186 185 - Caller restores callFrameRegister after return. 187 186 */ … … 237 236 m_callCompilationInfo[callLinkInfoIndex].callLinkInfo = info; 238 237 239 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT2);240 store64(regT2, Address(MacroAssembler::stackPointerRegister, JSStack::ScopeChain * sizeof(Register) - sizeof(CallerFrameAndPC)));241 242 238 m_callCompilationInfo[callLinkInfoIndex].hotPathOther = emitNakedCall(); 243 239 -
trunk/Source/JavaScriptCore/jit/JITCall32_64.cpp
r173282 r178856 265 265 266 266 For a JS call: 267 - Caller initializes ScopeChain.268 267 - Callee initializes ReturnPC; CodeBlock. 269 268 - Callee restores callFrameRegister before return. 270 269 271 270 For a non-JS call: 272 - Caller initializes ScopeChain;ReturnPC; CodeBlock.271 - Caller initializes ReturnPC; CodeBlock. 273 272 - Caller restores callFrameRegister after return. 274 273 */ … … 328 327 m_callCompilationInfo[callLinkInfoIndex].callLinkInfo = info; 329 328 330 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT2);331 store32(regT2, Address(MacroAssembler::stackPointerRegister, JSStack::ScopeChain * sizeof(Register) + PayloadOffset - sizeof(CallerFrameAndPC)));332 store32(TrustedImm32(JSValue::CellTag), Address(stackPointerRegister, JSStack::ScopeChain * sizeof(Register) + TagOffset - sizeof(CallerFrameAndPC)));333 334 329 checkStackPointerAlignment(); 335 330 m_callCompilationInfo[callLinkInfoIndex].hotPathOther = emitNakedCall(); -
trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp
r178143 r178856 58 58 59 59 #if CPU(X86) 60 // Load caller frame's scope chain into this callframe so that whatever we call can61 // get to its global data.62 emitGetCallerFrameFromCallFrameHeaderPtr(regT0);63 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT0);64 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain);65 66 60 // Calling convention: f(ecx, edx, ...); 67 61 // Host function signature: f(ExecState*); … … 77 71 78 72 #elif CPU(ARM) || CPU(SH4) || CPU(MIPS) 79 // Load caller frame's scope chain into this callframe so that whatever we call can get to its global data.80 emitGetCallerFrameFromCallFrameHeaderPtr(regT2);81 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT2);82 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain);83 84 73 #if CPU(MIPS) 85 74 // Allocate stack space for (unused) 16 bytes (8-byte aligned) for 4 arguments. -
trunk/Source/JavaScriptCore/jit/Repatch.cpp
r178756 r178856 512 512 MacroAssembler::TrustedImmPtr(0)); 513 513 514 // loadedValueGPR is already burned. We can reuse it. From here on we assume that515 // any volatile register will be clobbered anyway.516 stubJit.loadPtr(517 MacroAssembler::Address(loadedValueGPR, JSFunction::offsetOfScopeChain()),518 loadedValueGPR);519 stubJit.storeCell(520 loadedValueGPR, calleeFrame.withOffset(JSStack::ScopeChain * sizeof(Register)));521 514 fastPathCall = stubJit.nearCall(); 522 515 … … 1686 1679 CCallHelpers::TrustedImmPtr(executable))); 1687 1680 1688 stubJit.loadPtr(1689 CCallHelpers::Address(calleeGPR, JSFunction::offsetOfScopeChain()),1690 GPRInfo::returnValueGPR);1691 1692 #if USE(JSVALUE64)1693 stubJit.store64(1694 GPRInfo::returnValueGPR,1695 CCallHelpers::Address(MacroAssembler::stackPointerRegister, static_cast<ptrdiff_t>(sizeof(Register) * JSStack::ScopeChain) + offsetToFrame));1696 #else1697 stubJit.storePtr(1698 GPRInfo::returnValueGPR,1699 CCallHelpers::Address(MacroAssembler::stackPointerRegister, static_cast<ptrdiff_t>(sizeof(Register) * JSStack::ScopeChain) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload) + offsetToFrame));1700 stubJit.store32(1701 CCallHelpers::TrustedImm32(JSValue::CellTag),1702 CCallHelpers::Address(MacroAssembler::stackPointerRegister, static_cast<ptrdiff_t>(sizeof(Register) * JSStack::ScopeChain) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag) + offsetToFrame));1703 #endif1704 1705 1681 AssemblyHelpers::Call call = stubJit.nearCall(); 1706 1682 AssemblyHelpers::Jump done = stubJit.jump(); -
trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp
r175243 r178856 215 215 // call. 216 216 217 jit.loadPtr(218 CCallHelpers::Address(GPRInfo::regT0, JSFunction::offsetOfScopeChain()),219 GPRInfo::regT1);220 #if USE(JSVALUE64)221 jit.emitPutToCallFrameHeaderBeforePrologue(GPRInfo::regT1, JSStack::ScopeChain);222 #else223 jit.emitPutPayloadToCallFrameHeaderBeforePrologue(GPRInfo::regT1, JSStack::ScopeChain);224 jit.emitPutTagToCallFrameHeaderBeforePrologue(CCallHelpers::TrustedImm32(JSValue::CellTag),225 JSStack::ScopeChain);226 #endif227 228 217 // Make a tail call. This will return back to JIT code. 229 218 emitPointerValidation(jit, GPRInfo::regT4); … … 277 266 278 267 #if CPU(X86) 279 // Load callee's scope chain into this callframe so that whatever we call can280 // get to its global data.281 jit.emitGetFromCallFrameHeaderPtr(JSStack::Callee, JSInterfaceJIT::regT1);282 jit.loadPtr(JSInterfaceJIT::Address(JSInterfaceJIT::regT1, JSCallee::offsetOfScopeChain()), JSInterfaceJIT::regT1);283 jit.emitPutCellToCallFrameHeader(JSInterfaceJIT::regT1, JSStack::ScopeChain);284 285 268 // Calling convention: f(ecx, edx, ...); 286 269 // Host function signature: f(ExecState*); … … 297 280 298 281 #elif CPU(X86_64) 299 // Load callee's scope chain into this callframe so that whatever we call can300 // get to its global data.301 jit.emitGetFromCallFrameHeaderPtr(JSStack::Callee, JSInterfaceJIT::regT1);302 jit.loadPtr(JSInterfaceJIT::Address(JSInterfaceJIT::regT1, JSCallee::offsetOfScopeChain()), JSInterfaceJIT::regT1);303 jit.emitPutCellToCallFrameHeader(JSInterfaceJIT::regT1, JSStack::ScopeChain);304 282 #if !OS(WINDOWS) 305 283 // Calling convention: f(edi, esi, edx, ecx, ...); … … 334 312 COMPILE_ASSERT(ARM64Registers::x2 != JSInterfaceJIT::regT3, T3_not_trampled_by_arg_2); 335 313 336 // Load callee's scope chain into this callframe so that whatever we call can337 // get to its global data.338 jit.emitGetFromCallFrameHeaderPtr(JSStack::Callee, JSInterfaceJIT::regT1);339 jit.loadPtr(JSInterfaceJIT::Address(JSInterfaceJIT::regT1, JSCallee::offsetOfScopeChain()), JSInterfaceJIT::regT1);340 jit.emitPutCellToCallFrameHeader(JSInterfaceJIT::regT1, JSStack::ScopeChain);341 342 314 // Host function signature: f(ExecState*); 343 315 jit.move(JSInterfaceJIT::callFrameRegister, ARM64Registers::x0); … … 347 319 jit.call(JSInterfaceJIT::Address(ARM64Registers::x2, executableOffsetToFunction)); 348 320 #elif CPU(ARM) || CPU(SH4) || CPU(MIPS) 349 // Load callee's scope chain into this callframe so that whatever we call can350 // get to its global data.351 jit.emitGetFromCallFrameHeaderPtr(JSStack::Callee, JSInterfaceJIT::regT1);352 jit.loadPtr(JSInterfaceJIT::Address(JSInterfaceJIT::regT1, JSCallee::offsetOfScopeChain()), JSInterfaceJIT::regT1);353 jit.emitPutCellToCallFrameHeader(JSInterfaceJIT::regT1, JSStack::ScopeChain);354 355 321 #if CPU(MIPS) 356 322 // Allocate stack space for (unused) 16 bytes (8-byte aligned) for 4 arguments.
Note:
See TracChangeset
for help on using the changeset viewer.