Changeset 130726 in webkit for trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp
- Timestamp:
- Oct 9, 2012, 12:12:56 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp
r129713 r130726 77 77 // Finish canonical initialization before JS function call. 78 78 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 79 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);79 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 80 80 81 81 // Also initialize ReturnPC for use by lazy linking and exceptions. 82 82 preserveReturnAddressAfterCall(regT3); 83 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);83 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 84 84 85 85 storePtr(callFrameRegister, &m_globalData->topCallFrame); … … 97 97 // Finish canonical initialization before JS function call. 98 98 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 99 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);99 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 100 100 101 101 // Also initialize ReturnPC for use by lazy linking and exeptions. 102 102 preserveReturnAddressAfterCall(regT3); 103 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);103 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 104 104 105 105 storePtr(callFrameRegister, &m_globalData->topCallFrame); … … 117 117 // Finish canonical initialization before JS function call. 118 118 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 119 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);119 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 120 120 121 121 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 140 140 // Finish canonical initialization before JS function call. 141 141 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scope)), regT1); 142 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);142 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 143 143 144 144 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 157 157 callSlowCase.link(this); 158 158 // Finish canonical initialization before JS function call. 159 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT2);160 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT2, regT2);161 emitPutCellToCallFrameHeader(regT2, RegisterFile::ScopeChain);159 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT2); 160 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT2, regT2); 161 emitPutCellToCallFrameHeader(regT2, JSStack::ScopeChain); 162 162 163 163 // Also initialize ReturnPC and CodeBlock, like a JS function would. 164 164 preserveReturnAddressAfterCall(regT3); 165 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);166 emitPutImmediateToCallFrameHeader(0, RegisterFile::CodeBlock);165 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 166 emitPutImmediateToCallFrameHeader(0, JSStack::CodeBlock); 167 167 168 168 storePtr(callFrameRegister, &m_globalData->topCallFrame); 169 169 restoreArgumentReference(); 170 170 Call callCallNotJSFunction = call(); 171 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);171 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 172 172 restoreReturnAddressBeforeReturn(regT3); 173 173 ret(); … … 175 175 constructSlowCase.link(this); 176 176 // Finish canonical initialization before JS function call. 177 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT2);178 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT2, regT2);179 emitPutCellToCallFrameHeader(regT2, RegisterFile::ScopeChain);177 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT2); 178 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT2, regT2); 179 emitPutCellToCallFrameHeader(regT2, JSStack::ScopeChain); 180 180 181 181 // Also initialize ReturnPC and CodeBlock, like a JS function would. 182 182 preserveReturnAddressAfterCall(regT3); 183 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);184 emitPutImmediateToCallFrameHeader(0, RegisterFile::CodeBlock);183 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 184 emitPutImmediateToCallFrameHeader(0, JSStack::CodeBlock); 185 185 186 186 storePtr(callFrameRegister, &m_globalData->topCallFrame); 187 187 restoreArgumentReference(); 188 188 Call callConstructNotJSFunction = call(); 189 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);189 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 190 190 restoreReturnAddressBeforeReturn(regT3); 191 191 ret(); … … 232 232 Label nativeCallThunk = align(); 233 233 234 emitPutImmediateToCallFrameHeader(0, RegisterFile::CodeBlock);234 emitPutImmediateToCallFrameHeader(0, JSStack::CodeBlock); 235 235 storePtr(callFrameRegister, &m_globalData->topCallFrame); 236 236 … … 238 238 // Load caller frame's scope chain into this callframe so that whatever we call can 239 239 // get to its global data. 240 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT0);241 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT0);242 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);240 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT0); 241 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT0); 242 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 243 243 244 244 peek(regT1); 245 emitPutToCallFrameHeader(regT1, RegisterFile::ReturnPC);245 emitPutToCallFrameHeader(regT1, JSStack::ReturnPC); 246 246 247 247 // Calling convention: f(edi, esi, edx, ecx, ...); … … 251 251 subPtr(TrustedImm32(16 - sizeof(void*)), stackPointerRegister); // Align stack after call. 252 252 253 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, X86Registers::esi);253 emitGetFromCallFrameHeaderPtr(JSStack::Callee, X86Registers::esi); 254 254 loadPtr(Address(X86Registers::esi, OBJECT_OFFSETOF(JSFunction, m_executable)), X86Registers::r9); 255 255 move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. … … 261 261 // Load caller frame's scope chain into this callframe so that whatever we call can 262 262 // get to its global data. 263 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT2);264 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT2);265 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);263 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT2); 264 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT2); 265 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 266 266 267 267 preserveReturnAddressAfterCall(regT3); // Callee preserved 268 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);268 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 269 269 270 270 // Calling convention: f(r0 == regT0, r1 == regT1, ...); … … 272 272 move(callFrameRegister, ARMRegisters::r0); 273 273 274 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, ARMRegisters::r1);274 emitGetFromCallFrameHeaderPtr(JSStack::Callee, ARMRegisters::r1); 275 275 move(regT2, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. 276 276 loadPtr(Address(ARMRegisters::r1, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 282 282 // Load caller frame's scope chain into this callframe so that whatever we call can 283 283 // get to its global data. 284 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, regT0);285 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT1, regT0);286 emitPutCellToCallFrameHeader(regT1, RegisterFile::ScopeChain);284 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, regT0); 285 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT0); 286 emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain); 287 287 288 288 preserveReturnAddressAfterCall(regT3); // Callee preserved 289 emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);289 emitPutToCallFrameHeader(regT3, JSStack::ReturnPC); 290 290 291 291 // Calling convention: f(a0, a1, a2, a3); … … 300 300 301 301 // Call 302 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, MIPSRegisters::a2);302 emitGetFromCallFrameHeaderPtr(JSStack::Callee, MIPSRegisters::a2); 303 303 loadPtr(Address(MIPSRegisters::a2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); 304 304 move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack. … … 383 383 ASSERT(returnValueRegister != callFrameRegister); 384 384 emitGetVirtualRegister(currentInstruction[1].u.operand, returnValueRegister); 385 restoreReturnAddressBeforeReturn(Address(callFrameRegister, RegisterFile::ReturnPC * static_cast<int>(sizeof(Register))));385 restoreReturnAddressBeforeReturn(Address(callFrameRegister, JSStack::ReturnPC * static_cast<int>(sizeof(Register)))); 386 386 ret(); 387 387 } … … 584 584 585 585 // Grab the return address. 586 emitGetFromCallFrameHeaderPtr( RegisterFile::ReturnPC, regT1);586 emitGetFromCallFrameHeaderPtr(JSStack::ReturnPC, regT1); 587 587 588 588 // Restore our caller's "r". 589 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);589 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 590 590 591 591 // Return. … … 607 607 608 608 // Grab the return address. 609 emitGetFromCallFrameHeaderPtr( RegisterFile::ReturnPC, regT1);609 emitGetFromCallFrameHeaderPtr(JSStack::ReturnPC, regT1); 610 610 611 611 // Restore our caller's "r". 612 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);612 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 613 613 614 614 // Return. … … 622 622 623 623 // Grab the return address. 624 emitGetFromCallFrameHeaderPtr( RegisterFile::ReturnPC, regT1);624 emitGetFromCallFrameHeaderPtr(JSStack::ReturnPC, regT1); 625 625 626 626 // Restore our caller's "r". 627 emitGetFromCallFrameHeaderPtr( RegisterFile::CallerFrame, callFrameRegister);627 emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, callFrameRegister); 628 628 629 629 // Return. … … 1286 1286 void JIT::emit_op_create_this(Instruction* currentInstruction) 1287 1287 { 1288 emitGetFromCallFrameHeaderPtr( RegisterFile::Callee, regT0);1288 emitGetFromCallFrameHeaderPtr(JSStack::Callee, regT0); 1289 1289 loadPtr(Address(regT0, JSFunction::offsetOfCachedInheritorID()), regT2); 1290 1290 addSlowCase(branchTestPtr(Zero, regT2)); … … 1510 1510 int argumentsRegister = currentInstruction[2].u.operand; 1511 1511 addSlowCase(branchTestPtr(NonZero, addressFor(argumentsRegister))); 1512 emitGetFromCallFrameHeader32( RegisterFile::ArgumentCount, regT0);1512 emitGetFromCallFrameHeader32(JSStack::ArgumentCount, regT0); 1513 1513 sub32(TrustedImm32(1), regT0); 1514 1514 emitFastArithReTagImmediate(regT0, regT0); … … 1540 1540 add32(TrustedImm32(1), regT1); 1541 1541 // regT1 now contains the integer index of the argument we want, including this 1542 emitGetFromCallFrameHeader32( RegisterFile::ArgumentCount, regT2);1542 emitGetFromCallFrameHeader32(JSStack::ArgumentCount, regT2); 1543 1543 addSlowCase(branch32(AboveOrEqual, regT1, regT2)); 1544 1544 … … 1578 1578 int skip = currentInstruction[5].u.operand; 1579 1579 1580 emitGetFromCallFrameHeaderPtr( RegisterFile::ScopeChain, regT0);1580 emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT0); 1581 1581 1582 1582 bool checkTopLevel = m_codeBlock->codeType() == FunctionCode && m_codeBlock->needsFullScopeChain();
Note:
See TracChangeset
for help on using the changeset viewer.