Changeset 95397 in webkit


Ignore:
Timestamp:
Sep 18, 2011 11:38:43 AM (13 years ago)
Author:
oliver@apple.com
Message:

Remove special case handling of inline storage from the JIT
https://bugs.webkit.org/show_bug.cgi?id=68319

Reviewed by Gavin Barraclough.

Simplify logic used for reading and writing to property storage
by removing the special cases for inline storage. This has no
perf impact.

  • dfg/DFGRepatch.cpp:

(JSC::DFG::generateProtoChainAccessStub):
(JSC::DFG::tryBuildGetByIDList):

  • jit/JIT.h:
  • jit/JITPropertyAccess.cpp:

(JSC::JIT::compilePutDirectOffset):
(JSC::JIT::compileGetDirectOffset):
(JSC::JIT::privateCompilePutByIdTransition):
(JSC::JIT::privateCompileGetByIdSelfList):

  • jit/JITPropertyAccess32_64.cpp:

(JSC::JIT::compilePutDirectOffset):
(JSC::JIT::compileGetDirectOffset):
(JSC::JIT::privateCompilePutByIdTransition):
(JSC::JIT::privateCompileGetByIdSelfList):

Location:
trunk/Source/JavaScriptCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r95389 r95397  
     12011-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
    1272011-09-17  Filip Pizlo  <fpizlo@apple.com>
    228
  • trunk/Source/JavaScriptCore/dfg/DFGRepatch.cpp

    r94920 r95397  
    125125    }
    126126   
    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);
    131128       
    132129    MacroAssembler::Jump success, fail;
     
    340337       
    341338        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
    350343        MacroAssembler::Jump success = stubJit.jump();
    351344       
  • trunk/Source/JavaScriptCore/jit/JIT.h

    r95324 r95397  
    363363        void compileGetByIdHotPath();
    364364        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);
    366366        void compileGetDirectOffset(JSObject* base, RegisterID resultTag, RegisterID resultPayload, size_t cachedOffset);
    367367        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);
    369369
    370370        // Arithmetic opcode helpers
     
    606606        void compileGetByIdHotPath(int baseVReg, Identifier*);
    607607        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);
    609609        void compileGetDirectOffset(JSObject* base, RegisterID result, size_t cachedOffset);
    610610        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);
    612612
    613613#if CPU(X86_64)
  • trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp

    r95388 r95397  
    483483// Compile a store into an object's property storage.  May overwrite the
    484484// value in objectReg.
    485 void JIT::compilePutDirectOffset(RegisterID base, RegisterID value, Structure* structure, size_t cachedOffset)
     485void JIT::compilePutDirectOffset(RegisterID base, RegisterID value, size_t cachedOffset)
    486486{
    487487    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);
    492489    storePtr(value, Address(base, offset));
    493490}
    494491
    495492// 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)
     493void JIT::compileGetDirectOffset(RegisterID base, RegisterID result, size_t cachedOffset)
    497494{
    498495    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);
    506498}
    507499
     
    549541
    550542    storePtr(TrustedImmPtr(newStructure), Address(regT0, JSCell::structureOffset()));
    551     compilePutDirectOffset(regT0, regT1, newStructure, cachedOffset);
     543    compilePutDirectOffset(regT0, regT1, cachedOffset);
    552544
    553545    ret();
     
    708700    if (slot.cachedPropertyType() == PropertySlot::Getter) {
    709701        needsStubLink = true;
    710         compileGetDirectOffset(regT0, regT1, structure, cachedOffset);
     702        compileGetDirectOffset(regT0, regT1, cachedOffset);
    711703        JITStubCall stubCall(this, cti_op_get_by_id_getter_stub);
    712704        stubCall.addArgument(regT1);
     
    723715        stubCall.call();
    724716    } else
    725         compileGetDirectOffset(regT0, regT0, structure, cachedOffset);
     717        compileGetDirectOffset(regT0, regT0, cachedOffset);
    726718    Jump success = jump();
    727719
  • trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp

    r95273 r95397  
    441441
    442442// 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)
     443void JIT::compilePutDirectOffset(RegisterID base, RegisterID valueTag, RegisterID valuePayload, size_t cachedOffset)
    444444{
    445445    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);
    450447    emitStore(offset, valueTag, valuePayload, base);
    451448}
    452449
    453450// 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)
     451void JIT::compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, size_t cachedOffset)
    455452{
    456453    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);
    465457}
    466458
     
    535527    load32(Address(stackPointerRegister, OBJECT_OFFSETOF(JITStackFrame, args[2]) + sizeof(void*) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), regT2);
    536528#endif
    537     compilePutDirectOffset(regT0, regT2, regT3, newStructure, cachedOffset);
     529    compilePutDirectOffset(regT0, regT2, regT3, cachedOffset);
    538530   
    539531    ret();
     
    704696    if (slot.cachedPropertyType() == PropertySlot::Getter) {
    705697        needsStubLink = true;
    706         compileGetDirectOffset(regT0, regT2, regT1, structure, cachedOffset);
     698        compileGetDirectOffset(regT0, regT2, regT1, cachedOffset);
    707699        JITStubCall stubCall(this, cti_op_get_by_id_getter_stub);
    708700        stubCall.addArgument(regT1);
     
    719711        stubCall.call();
    720712    } else
    721         compileGetDirectOffset(regT0, regT1, regT0, structure, cachedOffset);
     713        compileGetDirectOffset(regT0, regT1, regT0, cachedOffset);
    722714
    723715    Jump success = jump();
Note: See TracChangeset for help on using the changeset viewer.