Changeset 95397 in webkit
- Timestamp:
- Sep 18, 2011 11:38:43 AM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r95389 r95397 1 2011-09-17 Oliver Hunt <oliver@apple.com> 2 3 Remove special case handling of inline storage from the JIT 4 https://bugs.webkit.org/show_bug.cgi?id=68319 5 6 Reviewed by Gavin Barraclough. 7 8 Simplify logic used for reading and writing to property storage 9 by removing the special cases for inline storage. This has no 10 perf impact. 11 12 * dfg/DFGRepatch.cpp: 13 (JSC::DFG::generateProtoChainAccessStub): 14 (JSC::DFG::tryBuildGetByIDList): 15 * jit/JIT.h: 16 * jit/JITPropertyAccess.cpp: 17 (JSC::JIT::compilePutDirectOffset): 18 (JSC::JIT::compileGetDirectOffset): 19 (JSC::JIT::privateCompilePutByIdTransition): 20 (JSC::JIT::privateCompileGetByIdSelfList): 21 * jit/JITPropertyAccess32_64.cpp: 22 (JSC::JIT::compilePutDirectOffset): 23 (JSC::JIT::compileGetDirectOffset): 24 (JSC::JIT::privateCompilePutByIdTransition): 25 (JSC::JIT::privateCompileGetByIdSelfList): 26 1 27 2011-09-17 Filip Pizlo <fpizlo@apple.com> 2 28 -
trunk/Source/JavaScriptCore/dfg/DFGRepatch.cpp
r94920 r95397 125 125 } 126 126 127 if (protoObject->structure()->isUsingInlineStorage()) 128 stubJit.loadPtr(MacroAssembler::Address(scratchGPR, JSObject::offsetOfInlineStorage() + offset * sizeof(JSValue)), resultGPR); 129 else 130 stubJit.loadPtr(protoObject->addressOfPropertyAtOffset(offset), resultGPR); 127 stubJit.loadPtr(protoObject->addressOfPropertyAtOffset(offset), resultGPR); 131 128 132 129 MacroAssembler::Jump success, fail; … … 340 337 341 338 MacroAssembler::Jump wrongStruct = stubJit.branchPtr(MacroAssembler::NotEqual, MacroAssembler::Address(baseGPR, JSCell::structureOffset()), MacroAssembler::TrustedImmPtr(structure)); 342 343 if (structure->isUsingInlineStorage()) 344 stubJit.loadPtr(MacroAssembler::Address(baseGPR, JSObject::offsetOfInlineStorage() + slot.cachedOffset() * sizeof(JSValue)), resultGPR); 345 else { 346 stubJit.loadPtr(MacroAssembler::Address(baseGPR, JSObject::offsetOfPropertyStorage()), resultGPR); 347 stubJit.loadPtr(MacroAssembler::Address(resultGPR, slot.cachedOffset() * sizeof(JSValue)), resultGPR); 348 } 349 339 340 stubJit.loadPtr(MacroAssembler::Address(baseGPR, JSObject::offsetOfPropertyStorage()), resultGPR); 341 stubJit.loadPtr(MacroAssembler::Address(resultGPR, slot.cachedOffset() * sizeof(JSValue)), resultGPR); 342 350 343 MacroAssembler::Jump success = stubJit.jump(); 351 344 -
trunk/Source/JavaScriptCore/jit/JIT.h
r95324 r95397 363 363 void compileGetByIdHotPath(); 364 364 void compileGetByIdSlowCase(int resultVReg, int baseVReg, Identifier* ident, Vector<SlowCaseEntry>::iterator& iter, bool isMethodCheck = false); 365 void compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, Structure* structure,size_t cachedOffset);365 void compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, size_t cachedOffset); 366 366 void compileGetDirectOffset(JSObject* base, RegisterID resultTag, RegisterID resultPayload, size_t cachedOffset); 367 367 void compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, RegisterID offset); 368 void compilePutDirectOffset(RegisterID base, RegisterID valueTag, RegisterID valuePayload, Structure* structure,size_t cachedOffset);368 void compilePutDirectOffset(RegisterID base, RegisterID valueTag, RegisterID valuePayload, size_t cachedOffset); 369 369 370 370 // Arithmetic opcode helpers … … 606 606 void compileGetByIdHotPath(int baseVReg, Identifier*); 607 607 void compileGetByIdSlowCase(int resultVReg, int baseVReg, Identifier* ident, Vector<SlowCaseEntry>::iterator& iter, bool isMethodCheck = false); 608 void compileGetDirectOffset(RegisterID base, RegisterID result, Structure* structure,size_t cachedOffset);608 void compileGetDirectOffset(RegisterID base, RegisterID result, size_t cachedOffset); 609 609 void compileGetDirectOffset(JSObject* base, RegisterID result, size_t cachedOffset); 610 610 void compileGetDirectOffset(RegisterID base, RegisterID result, RegisterID offset, RegisterID scratch); 611 void compilePutDirectOffset(RegisterID base, RegisterID value, Structure* structure,size_t cachedOffset);611 void compilePutDirectOffset(RegisterID base, RegisterID value, size_t cachedOffset); 612 612 613 613 #if CPU(X86_64) -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp
r95388 r95397 483 483 // Compile a store into an object's property storage. May overwrite the 484 484 // value in objectReg. 485 void JIT::compilePutDirectOffset(RegisterID base, RegisterID value, Structure* structure,size_t cachedOffset)485 void JIT::compilePutDirectOffset(RegisterID base, RegisterID value, size_t cachedOffset) 486 486 { 487 487 int offset = cachedOffset * sizeof(JSValue); 488 if (structure->isUsingInlineStorage()) 489 offset += JSObject::offsetOfInlineStorage(); 490 else 491 loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), base); 488 loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), base); 492 489 storePtr(value, Address(base, offset)); 493 490 } 494 491 495 492 // Compile a load from an object's property storage. May overwrite base. 496 void JIT::compileGetDirectOffset(RegisterID base, RegisterID result, Structure* structure,size_t cachedOffset)493 void JIT::compileGetDirectOffset(RegisterID base, RegisterID result, size_t cachedOffset) 497 494 { 498 495 int offset = cachedOffset * sizeof(JSValue); 499 if (structure->isUsingInlineStorage()) { 500 offset += JSObject::offsetOfInlineStorage(); 501 loadPtr(Address(base, offset), result); 502 } else { 503 loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), result); 504 loadPtr(Address(result, offset), result); 505 } 496 loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), result); 497 loadPtr(Address(result, offset), result); 506 498 } 507 499 … … 549 541 550 542 storePtr(TrustedImmPtr(newStructure), Address(regT0, JSCell::structureOffset())); 551 compilePutDirectOffset(regT0, regT1, newStructure,cachedOffset);543 compilePutDirectOffset(regT0, regT1, cachedOffset); 552 544 553 545 ret(); … … 708 700 if (slot.cachedPropertyType() == PropertySlot::Getter) { 709 701 needsStubLink = true; 710 compileGetDirectOffset(regT0, regT1, structure,cachedOffset);702 compileGetDirectOffset(regT0, regT1, cachedOffset); 711 703 JITStubCall stubCall(this, cti_op_get_by_id_getter_stub); 712 704 stubCall.addArgument(regT1); … … 723 715 stubCall.call(); 724 716 } else 725 compileGetDirectOffset(regT0, regT0, structure,cachedOffset);717 compileGetDirectOffset(regT0, regT0, cachedOffset); 726 718 Jump success = jump(); 727 719 -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp
r95273 r95397 441 441 442 442 // Compile a store into an object's property storage. May overwrite base. 443 void JIT::compilePutDirectOffset(RegisterID base, RegisterID valueTag, RegisterID valuePayload, Structure* structure,size_t cachedOffset)443 void JIT::compilePutDirectOffset(RegisterID base, RegisterID valueTag, RegisterID valuePayload, size_t cachedOffset) 444 444 { 445 445 int offset = cachedOffset; 446 if (structure->isUsingInlineStorage()) 447 offset += JSObject::offsetOfInlineStorage() / sizeof(Register); 448 else 449 loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), base); 446 loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), base); 450 447 emitStore(offset, valueTag, valuePayload, base); 451 448 } 452 449 453 450 // Compile a load from an object's property storage. May overwrite base. 454 void JIT::compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, Structure* structure,size_t cachedOffset)451 void JIT::compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, size_t cachedOffset) 455 452 { 456 453 int offset = cachedOffset; 457 if (structure->isUsingInlineStorage()) { 458 offset += JSObject::offsetOfInlineStorage() / sizeof(Register); 459 emitLoad(offset, resultTag, resultPayload, base); 460 } else { 461 RegisterID temp = resultPayload; 462 loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), temp); 463 emitLoad(offset, resultTag, resultPayload, temp); 464 } 454 RegisterID temp = resultPayload; 455 loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), temp); 456 emitLoad(offset, resultTag, resultPayload, temp); 465 457 } 466 458 … … 535 527 load32(Address(stackPointerRegister, OBJECT_OFFSETOF(JITStackFrame, args[2]) + sizeof(void*) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), regT2); 536 528 #endif 537 compilePutDirectOffset(regT0, regT2, regT3, newStructure,cachedOffset);529 compilePutDirectOffset(regT0, regT2, regT3, cachedOffset); 538 530 539 531 ret(); … … 704 696 if (slot.cachedPropertyType() == PropertySlot::Getter) { 705 697 needsStubLink = true; 706 compileGetDirectOffset(regT0, regT2, regT1, structure,cachedOffset);698 compileGetDirectOffset(regT0, regT2, regT1, cachedOffset); 707 699 JITStubCall stubCall(this, cti_op_get_by_id_getter_stub); 708 700 stubCall.addArgument(regT1); … … 719 711 stubCall.call(); 720 712 } else 721 compileGetDirectOffset(regT0, regT1, regT0, structure,cachedOffset);713 compileGetDirectOffset(regT0, regT1, regT0, cachedOffset); 722 714 723 715 Jump success = jump();
Note: See TracChangeset
for help on using the changeset viewer.