Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (87354 => 87355)
--- trunk/Source/_javascript_Core/ChangeLog 2011-05-26 03:50:11 UTC (rev 87354)
+++ trunk/Source/_javascript_Core/ChangeLog 2011-05-26 04:05:42 UTC (rev 87355)
@@ -1,3 +1,23 @@
+2011-05-25 Gavin Barraclough <[email protected]>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=61500
+ Add JSObject::offsetOfPropertyStorage
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::compileGetDirectOffset):
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::emit_op_put_by_id):
+ (JSC::JIT::compilePutDirectOffset):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::emit_op_put_by_id):
+ (JSC::JIT::compilePutDirectOffset):
+ (JSC::JIT::compileGetDirectOffset):
+ * runtime/JSObject.h:
+ (JSC::JSObject::offsetOfPropertyStorage):
+
2011-05-25 Oliver Hunt <[email protected]>
Reviewed by Geoffrey Garen.
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp (87354 => 87355)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2011-05-26 03:50:11 UTC (rev 87354)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2011-05-26 04:05:42 UTC (rev 87355)
@@ -140,7 +140,7 @@
void JIT::compileGetDirectOffset(RegisterID base, RegisterID result, RegisterID offset, RegisterID scratch)
{
- loadPtr(Address(base, OBJECT_OFFSETOF(JSObject, m_propertyStorage)), scratch);
+ loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), scratch);
loadPtr(BaseIndex(scratch, offset, ScalePtr, 0), result);
}
@@ -419,7 +419,7 @@
ASSERT_JIT_OFFSET(differenceBetween(hotPathBegin, structureToCompare), patchOffsetGetByIdStructure);
ASSERT_JIT_OFFSET(differenceBetween(hotPathBegin, structureCheck), patchOffsetGetByIdBranchToSlowCase)
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSObject, m_propertyStorage)), regT0);
+ loadPtr(Address(regT0, JSObject::offsetOfPropertyStorage()), regT0);
DataLabelCompact displacementLabel = loadPtrWithCompactAddressOffsetPatch(Address(regT0, patchGetByIdDefaultOffset), regT0);
ASSERT_JIT_OFFSET_UNUSED(displacementLabel, differenceBetween(hotPathBegin, displacementLabel), patchOffsetGetByIdPropertyMapOffset);
@@ -495,7 +495,7 @@
addSlowCase(branchPtrWithPatch(NotEqual, Address(regT0, JSCell::structureOffset()), structureToCompare, TrustedImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure))));
ASSERT_JIT_OFFSET(differenceBetween(hotPathBegin, structureToCompare), patchOffsetPutByIdStructure);
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSObject, m_propertyStorage)), regT0);
+ loadPtr(Address(regT0, JSObject::offsetOfPropertyStorage()), regT0);
DataLabel32 displacementLabel = storePtrWithAddressOffsetPatch(regT1, Address(regT0, patchPutByIdDefaultOffset));
END_UNINTERRUPTED_SEQUENCE(sequencePutById);
@@ -532,7 +532,7 @@
if (structure->isUsingInlineStorage())
offset += JSObject::offsetOfInlineStorage();
else
- loadPtr(Address(base, OBJECT_OFFSETOF(JSObject, m_propertyStorage)), base);
+ loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), base);
storePtr(value, Address(base, offset));
}
@@ -544,7 +544,7 @@
offset += JSObject::offsetOfInlineStorage();
loadPtr(Address(base, offset), result);
} else {
- loadPtr(Address(base, OBJECT_OFFSETOF(JSObject, m_propertyStorage)), result);
+ loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), result);
loadPtr(Address(result, offset), result);
}
}
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp (87354 => 87355)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp 2011-05-26 03:50:11 UTC (rev 87354)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp 2011-05-26 04:05:42 UTC (rev 87355)
@@ -434,7 +434,7 @@
ASSERT_JIT_OFFSET(differenceBetween(hotPathBegin, structureToCompare), patchOffsetGetByIdStructure);
ASSERT_JIT_OFFSET(differenceBetween(hotPathBegin, structureCheck), patchOffsetGetByIdBranchToSlowCase);
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSObject, m_propertyStorage)), regT2);
+ loadPtr(Address(regT0, JSObject::offsetOfPropertyStorage()), regT2);
DataLabelCompact displacementLabel1 = loadPtrWithCompactAddressOffsetPatch(Address(regT2, patchGetByIdDefaultOffset), regT0); // payload
ASSERT_JIT_OFFSET(differenceBetween(hotPathBegin, displacementLabel1), patchOffsetGetByIdPropertyMapOffset1);
DataLabelCompact displacementLabel2 = loadPtrWithCompactAddressOffsetPatch(Address(regT2, patchGetByIdDefaultOffset), regT1); // tag
@@ -508,7 +508,7 @@
addSlowCase(branchPtrWithPatch(NotEqual, Address(regT0, JSCell::structureOffset()), structureToCompare, TrustedImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure))));
ASSERT_JIT_OFFSET(differenceBetween(hotPathBegin, structureToCompare), patchOffsetPutByIdStructure);
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSObject, m_propertyStorage)), regT0);
+ loadPtr(Address(regT0, JSObject::offsetOfPropertyStorage()), regT0);
DataLabel32 displacementLabel1 = storePtrWithAddressOffsetPatch(regT2, Address(regT0, patchPutByIdDefaultOffset)); // payload
DataLabel32 displacementLabel2 = storePtrWithAddressOffsetPatch(regT3, Address(regT0, patchPutByIdDefaultOffset)); // tag
@@ -545,7 +545,7 @@
if (structure->isUsingInlineStorage())
offset += JSObject::offsetOfInlineStorage() / sizeof(Register);
else
- loadPtr(Address(base, OBJECT_OFFSETOF(JSObject, m_propertyStorage)), base);
+ loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), base);
emitStore(offset, valueTag, valuePayload, base);
}
@@ -558,7 +558,7 @@
emitLoad(offset, resultTag, resultPayload, base);
} else {
RegisterID temp = resultPayload;
- loadPtr(Address(base, OBJECT_OFFSETOF(JSObject, m_propertyStorage)), temp);
+ loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), temp);
emitLoad(offset, resultTag, resultPayload, temp);
}
}
@@ -1055,7 +1055,7 @@
{
ASSERT(sizeof(JSValue) == 8);
- loadPtr(Address(base, OBJECT_OFFSETOF(JSObject, m_propertyStorage)), base);
+ loadPtr(Address(base, JSObject::offsetOfPropertyStorage()), base);
loadPtr(BaseIndex(base, offset, TimesEight, OBJECT_OFFSETOF(JSValue, u.asBits.payload)), resultPayload);
loadPtr(BaseIndex(base, offset, TimesEight, OBJECT_OFFSETOF(JSValue, u.asBits.tag)), resultTag);
}
Modified: trunk/Source/_javascript_Core/runtime/JSObject.h (87354 => 87355)
--- trunk/Source/_javascript_Core/runtime/JSObject.h 2011-05-26 03:50:11 UTC (rev 87354)
+++ trunk/Source/_javascript_Core/runtime/JSObject.h 2011-05-26 04:05:42 UTC (rev 87355)
@@ -245,7 +245,8 @@
}
static size_t offsetOfInlineStorage();
-
+ static size_t offsetOfPropertyStorage();
+
static JS_EXPORTDATA const ClassInfo s_info;
protected:
@@ -381,6 +382,11 @@
return OBJECT_OFFSETOF(JSFinalObject, m_inlineStorage);
}
+inline size_t JSObject::offsetOfPropertyStorage()
+{
+ return OBJECT_OFFSETOF(JSObject, m_propertyStorage);
+}
+
inline JSObject* constructEmptyObject(ExecState* exec, Structure* structure)
{
return JSFinalObject::create(exec, structure);