Title: [95397] trunk/Source/_javascript_Core
Revision
95397
Author
[email protected]
Date
2011-09-18 11:38:43 -0700 (Sun, 18 Sep 2011)

Log 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):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (95396 => 95397)


--- trunk/Source/_javascript_Core/ChangeLog	2011-09-18 18:18:26 UTC (rev 95396)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-09-18 18:38:43 UTC (rev 95397)
@@ -1,3 +1,29 @@
+2011-09-17  Oliver Hunt  <[email protected]>
+
+        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):
+
 2011-09-17  Filip Pizlo  <[email protected]>
 
         DFG JIT does not have full block-local CSE

Modified: trunk/Source/_javascript_Core/dfg/DFGRepatch.cpp (95396 => 95397)


--- trunk/Source/_javascript_Core/dfg/DFGRepatch.cpp	2011-09-18 18:18:26 UTC (rev 95396)
+++ trunk/Source/_javascript_Core/dfg/DFGRepatch.cpp	2011-09-18 18:38:43 UTC (rev 95397)
@@ -124,10 +124,7 @@
         currStructure = it->get();
     }
     
-    if (protoObject->structure()->isUsingInlineStorage())
-        stubJit.loadPtr(MacroAssembler::Address(scratchGPR, JSObject::offsetOfInlineStorage() + offset * sizeof(JSValue)), resultGPR);
-    else
-        stubJit.loadPtr(protoObject->addressOfPropertyAtOffset(offset), resultGPR);
+    stubJit.loadPtr(protoObject->addressOfPropertyAtOffset(offset), resultGPR);
         
     MacroAssembler::Jump success, fail;
     
@@ -339,14 +336,10 @@
         MacroAssembler stubJit;
         
         MacroAssembler::Jump wrongStruct = stubJit.branchPtr(MacroAssembler::NotEqual, MacroAssembler::Address(baseGPR, JSCell::structureOffset()), MacroAssembler::TrustedImmPtr(structure));
-        
-        if (structure->isUsingInlineStorage())
-            stubJit.loadPtr(MacroAssembler::Address(baseGPR, JSObject::offsetOfInlineStorage() + slot.cachedOffset() * sizeof(JSValue)), resultGPR);
-        else {
-            stubJit.loadPtr(MacroAssembler::Address(baseGPR, JSObject::offsetOfPropertyStorage()), resultGPR);
-            stubJit.loadPtr(MacroAssembler::Address(resultGPR, slot.cachedOffset() * sizeof(JSValue)), resultGPR);
-        }
-        
+
+        stubJit.loadPtr(MacroAssembler::Address(baseGPR, JSObject::offsetOfPropertyStorage()), resultGPR);
+        stubJit.loadPtr(MacroAssembler::Address(resultGPR, slot.cachedOffset() * sizeof(JSValue)), resultGPR);
+
         MacroAssembler::Jump success = stubJit.jump();
         
         LinkBuffer patchBuffer(*globalData, &stubJit);

Modified: trunk/Source/_javascript_Core/jit/JIT.h (95396 => 95397)


--- trunk/Source/_javascript_Core/jit/JIT.h	2011-09-18 18:18:26 UTC (rev 95396)
+++ trunk/Source/_javascript_Core/jit/JIT.h	2011-09-18 18:38:43 UTC (rev 95397)
@@ -362,10 +362,10 @@
 
         void compileGetByIdHotPath();
         void compileGetByIdSlowCase(int resultVReg, int baseVReg, Identifier* ident, Vector<SlowCaseEntry>::iterator& iter, bool isMethodCheck = false);
-        void compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, Structure* structure, size_t cachedOffset);
+        void compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, size_t cachedOffset);
         void compileGetDirectOffset(JSObject* base, RegisterID resultTag, RegisterID resultPayload, size_t cachedOffset);
         void compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, RegisterID offset);
-        void compilePutDirectOffset(RegisterID base, RegisterID valueTag, RegisterID valuePayload, Structure* structure, size_t cachedOffset);
+        void compilePutDirectOffset(RegisterID base, RegisterID valueTag, RegisterID valuePayload, size_t cachedOffset);
 
         // Arithmetic opcode helpers
         void emitAdd32Constant(unsigned dst, unsigned op, int32_t constant, ResultType opType);
@@ -605,10 +605,10 @@
 
         void compileGetByIdHotPath(int baseVReg, Identifier*);
         void compileGetByIdSlowCase(int resultVReg, int baseVReg, Identifier* ident, Vector<SlowCaseEntry>::iterator& iter, bool isMethodCheck = false);
-        void compileGetDirectOffset(RegisterID base, RegisterID result, Structure* structure, size_t cachedOffset);
+        void compileGetDirectOffset(RegisterID base, RegisterID result, size_t cachedOffset);
         void compileGetDirectOffset(JSObject* base, RegisterID result, size_t cachedOffset);
         void compileGetDirectOffset(RegisterID base, RegisterID result, RegisterID offset, RegisterID scratch);
-        void compilePutDirectOffset(RegisterID base, RegisterID value, Structure* structure, size_t cachedOffset);
+        void compilePutDirectOffset(RegisterID base, RegisterID value, size_t cachedOffset);
 
 #if CPU(X86_64)
         // These architecture specific value are used to enable patching - see comment on op_put_by_id.

Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp (95396 => 95397)


--- trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp	2011-09-18 18:18:26 UTC (rev 95396)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp	2011-09-18 18:38:43 UTC (rev 95397)
@@ -482,27 +482,19 @@
 
 // Compile a store into an object's property storage.  May overwrite the
 // value in objectReg.
-void JIT::compilePutDirectOffset(RegisterID base, RegisterID value, Structure* structure, size_t cachedOffset)
+void JIT::compilePutDirectOffset(RegisterID base, RegisterID value, size_t cachedOffset)
 {
     int offset = cachedOffset * sizeof(JSValue);
-    if (structure->isUsingInlineStorage())
-        offset += JSObject::offsetOfInlineStorage();
-    else
-        loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), base);
+    loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), base);
     storePtr(value, Address(base, offset));
 }
 
 // Compile a load from an object's property storage.  May overwrite base.
-void JIT::compileGetDirectOffset(RegisterID base, RegisterID result, Structure* structure, size_t cachedOffset)
+void JIT::compileGetDirectOffset(RegisterID base, RegisterID result, size_t cachedOffset)
 {
     int offset = cachedOffset * sizeof(JSValue);
-    if (structure->isUsingInlineStorage()) {
-        offset += JSObject::offsetOfInlineStorage();
-        loadPtr(Address(base, offset), result);
-    } else {
-        loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), result);
-        loadPtr(Address(result, offset), result);
-    }
+    loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), result);
+    loadPtr(Address(result, offset), result);
 }
 
 void JIT::compileGetDirectOffset(JSObject* base, RegisterID result, size_t cachedOffset)
@@ -548,7 +540,7 @@
     emitWriteBarrier(regT0, regT2, WriteBarrierForPropertyAccess);
 
     storePtr(TrustedImmPtr(newStructure), Address(regT0, JSCell::structureOffset()));
-    compilePutDirectOffset(regT0, regT1, newStructure, cachedOffset);
+    compilePutDirectOffset(regT0, regT1, cachedOffset);
 
     ret();
     
@@ -707,7 +699,7 @@
     bool needsStubLink = false;
     if (slot.cachedPropertyType() == PropertySlot::Getter) {
         needsStubLink = true;
-        compileGetDirectOffset(regT0, regT1, structure, cachedOffset);
+        compileGetDirectOffset(regT0, regT1, cachedOffset);
         JITStubCall stubCall(this, cti_op_get_by_id_getter_stub);
         stubCall.addArgument(regT1);
         stubCall.addArgument(regT0);
@@ -722,7 +714,7 @@
         stubCall.addArgument(TrustedImmPtr(stubInfo->callReturnLocation.executableAddress()));
         stubCall.call();
     } else
-        compileGetDirectOffset(regT0, regT0, structure, cachedOffset);
+        compileGetDirectOffset(regT0, regT0, cachedOffset);
     Jump success = jump();
 
     LinkBuffer patchBuffer(*m_globalData, this);

Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp (95396 => 95397)


--- trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp	2011-09-18 18:18:26 UTC (rev 95396)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp	2011-09-18 18:38:43 UTC (rev 95397)
@@ -440,28 +440,20 @@
 }
 
 // Compile a store into an object's property storage.  May overwrite base.
-void JIT::compilePutDirectOffset(RegisterID base, RegisterID valueTag, RegisterID valuePayload, Structure* structure, size_t cachedOffset)
+void JIT::compilePutDirectOffset(RegisterID base, RegisterID valueTag, RegisterID valuePayload, size_t cachedOffset)
 {
     int offset = cachedOffset;
-    if (structure->isUsingInlineStorage())
-        offset += JSObject::offsetOfInlineStorage() /  sizeof(Register);
-    else
-        loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), base);
+    loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), base);
     emitStore(offset, valueTag, valuePayload, base);
 }
 
 // Compile a load from an object's property storage.  May overwrite base.
-void JIT::compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, Structure* structure, size_t cachedOffset)
+void JIT::compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, size_t cachedOffset)
 {
     int offset = cachedOffset;
-    if (structure->isUsingInlineStorage()) {
-        offset += JSObject::offsetOfInlineStorage() / sizeof(Register);
-        emitLoad(offset, resultTag, resultPayload, base);
-    } else {
-        RegisterID temp = resultPayload;
-        loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), temp);
-        emitLoad(offset, resultTag, resultPayload, temp);
-    }
+    RegisterID temp = resultPayload;
+    loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), temp);
+    emitLoad(offset, resultTag, resultPayload, temp);
 }
 
 void JIT::compileGetDirectOffset(JSObject* base, RegisterID resultTag, RegisterID resultPayload, size_t cachedOffset)
@@ -534,7 +526,7 @@
     load32(Address(stackPointerRegister, OBJECT_OFFSETOF(JITStackFrame, args[2]) + sizeof(void*) + OBJECT_OFFSETOF(JSValue, u.asBits.payload)), regT3);
     load32(Address(stackPointerRegister, OBJECT_OFFSETOF(JITStackFrame, args[2]) + sizeof(void*) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), regT2);
 #endif
-    compilePutDirectOffset(regT0, regT2, regT3, newStructure, cachedOffset);
+    compilePutDirectOffset(regT0, regT2, regT3, cachedOffset);
     
     ret();
     
@@ -703,7 +695,7 @@
     bool needsStubLink = false;
     if (slot.cachedPropertyType() == PropertySlot::Getter) {
         needsStubLink = true;
-        compileGetDirectOffset(regT0, regT2, regT1, structure, cachedOffset);
+        compileGetDirectOffset(regT0, regT2, regT1, cachedOffset);
         JITStubCall stubCall(this, cti_op_get_by_id_getter_stub);
         stubCall.addArgument(regT1);
         stubCall.addArgument(regT0);
@@ -718,7 +710,7 @@
         stubCall.addArgument(TrustedImmPtr(stubInfo->callReturnLocation.executableAddress()));
         stubCall.call();
     } else
-        compileGetDirectOffset(regT0, regT1, regT0, structure, cachedOffset);
+        compileGetDirectOffset(regT0, regT1, regT0, cachedOffset);
 
     Jump success = jump();
     
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to