Changeset 62896 in webkit for trunk/JavaScriptCore/jit/JITPropertyAccess32_64.cpp
- Timestamp:
- Jul 8, 2010, 10:47:49 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JITPropertyAccess32_64.cpp
r61830 r62896 532 532 int base = currentInstruction[1].u.operand; 533 533 int ident = currentInstruction[2].u.operand; 534 534 int direct = currentInstruction[8].u.operand; 535 535 536 linkSlowCaseIfNotJSCell(iter, base); 536 537 linkSlowCase(iter); 537 538 538 JITStubCall stubCall(this, cti_op_put_by_id);539 JITStubCall stubCall(this, direct ? cti_op_put_by_id_direct : cti_op_put_by_id); 539 540 stubCall.addArgument(regT1, regT0); 540 541 stubCall.addArgument(ImmPtr(&(m_codeBlock->identifier(ident)))); … … 593 594 } 594 595 595 void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure* oldStructure, Structure* newStructure, size_t cachedOffset, StructureChain* chain, ReturnAddressPtr returnAddress )596 void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure* oldStructure, Structure* newStructure, size_t cachedOffset, StructureChain* chain, ReturnAddressPtr returnAddress, bool direct) 596 597 { 597 598 // It is assumed that regT0 contains the basePayload and regT1 contains the baseTag. The value can be found on the stack. … … 602 603 testPrototype(oldStructure, failureCases); 603 604 604 // Verify that nothing in the prototype chain has a setter for this property. 605 for (RefPtr<Structure>* it = chain->head(); *it; ++it) 606 testPrototype(it->get(), failureCases); 607 605 if (!direct) { 606 // Verify that nothing in the prototype chain has a setter for this property. 607 for (RefPtr<Structure>* it = chain->head(); *it; ++it) 608 testPrototype(it->get(), failureCases); 609 } 610 608 611 // Reallocate property storage if needed. 609 612 Call callTarget; … … 644 647 LinkBuffer patchBuffer(this, m_codeBlock->executablePool()); 645 648 646 patchBuffer.link(failureCall, FunctionPtr( cti_op_put_by_id_fail));649 patchBuffer.link(failureCall, FunctionPtr(direct ? cti_op_put_by_id_direct_fail : cti_op_put_by_id_fail)); 647 650 648 651 if (willNeedStorageRealloc) { … … 698 701 } 699 702 700 void JIT::patchPutByIdReplace(CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* structure, size_t cachedOffset, ReturnAddressPtr returnAddress )703 void JIT::patchPutByIdReplace(CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* structure, size_t cachedOffset, ReturnAddressPtr returnAddress, bool direct) 701 704 { 702 705 RepatchBuffer repatchBuffer(codeBlock); … … 704 707 // We don't want to patch more than once - in future go to cti_op_put_by_id_generic. 705 708 // Should probably go to cti_op_put_by_id_fail, but that doesn't do anything interesting right now. 706 repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr( cti_op_put_by_id_generic));709 repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(direct ? cti_op_put_by_id_direct_generic : cti_op_put_by_id_generic)); 707 710 708 711 int offset = sizeof(JSValue) * cachedOffset;
Note:
See TracChangeset
for help on using the changeset viewer.