Remove UnboxedObjects ObjectGroup addendum

This commit is contained in:
wolfbeast 2019-06-25 20:24:34 +00:00 • committed by Roy Tam
commit 82e3eafecf
2 changed files with 7 additions and 36 deletions

View file

@ -126,20 +126,14 @@ MacroAssembler::guardTypeSetMightBeIncomplete(TypeSet* types, Register obj, Regi
{ {
// Type set guards might miss when an object's group changes. In this case // Type set guards might miss when an object's group changes. In this case
// either its old group's properties will become unknown, or it will change // either its old group's properties will become unknown, or it will change
// to a native object with an original unboxed group. Jump to label if this // to a native object. Jump to label if this might have happened for the
// might have happened for the input object. // input object.
if (types->unknownObject()) { if (types->unknownObject()) {
jump(label); jump(label);
return; return;
} }
loadPtr(Address(obj, JSObject::offsetOfGroup()), scratch);
load32(Address(scratch, ObjectGroup::offsetOfFlags()), scratch);
and32(Imm32(OBJECT_FLAG_ADDENDUM_MASK), scratch);
branch32(Assembler::Equal,
scratch, Imm32(ObjectGroup::addendumOriginalUnboxedGroupValue()), label);
for (size_t i = 0; i < types->getObjectCount(); i++) { for (size_t i = 0; i < types->getObjectCount(); i++) {
if (JSObject* singleton = types->getSingletonNoBarrier(i)) { if (JSObject* singleton = types->getSingletonNoBarrier(i)) {
movePtr(ImmGCPtr(singleton), scratch); movePtr(ImmGCPtr(singleton), scratch);

View file

@ -153,11 +153,6 @@ class ObjectGroup : public gc::TenuredCell
// For some plain objects, the addendum stores a PreliminaryObjectArrayWithTemplate. // For some plain objects, the addendum stores a PreliminaryObjectArrayWithTemplate.
Addendum_PreliminaryObjects, Addendum_PreliminaryObjects,
// If this group is used by objects that have been converted from an
// unboxed representation and/or have the same allocation kind as such
// objects, the addendum points to that unboxed group.
Addendum_OriginalUnboxedGroup,
// When used by typed objects, the addendum stores a TypeDescr. // When used by typed objects, the addendum stores a TypeDescr.
Addendum_TypeDescr Addendum_TypeDescr
}; };
@ -219,16 +214,6 @@ class ObjectGroup : public gc::TenuredCell
maybePreliminaryObjectsDontCheckGeneration(); maybePreliminaryObjectsDontCheckGeneration();
} }
ObjectGroup* maybeOriginalUnboxedGroup() const {
if (addendumKind() == Addendum_OriginalUnboxedGroup)
return reinterpret_cast<ObjectGroup*>(addendum_);
return nullptr;
}
void setOriginalUnboxedGroup(ObjectGroup* group) {
setAddendum(Addendum_OriginalUnboxedGroup, group);
}
TypeDescr* maybeTypeDescr() { TypeDescr* maybeTypeDescr() {
// Note: there is no need to sweep when accessing the type descriptor // Note: there is no need to sweep when accessing the type descriptor
// of an object, as it is strongly held and immutable. // of an object, as it is strongly held and immutable.
@ -289,9 +274,8 @@ class ObjectGroup : public gc::TenuredCell
* that can be read out of that property in actual JS objects. In native * that can be read out of that property in actual JS objects. In native
* objects, property types account for plain data properties (those with a * objects, property types account for plain data properties (those with a
* slot and no getter or setter hook) and dense elements. In typed objects * slot and no getter or setter hook) and dense elements. In typed objects
* and unboxed objects, property types account for object and value * property types account for object and value properties and elements in
* properties and elements in the object, and expando properties in unboxed * the object.
* objects.
* *
* For accesses on these properties, the correspondence is as follows: * For accesses on these properties, the correspondence is as follows:
* *
@ -314,10 +298,9 @@ class ObjectGroup : public gc::TenuredCell
* 2. Array lengths are special cased by the compiler and VM and are not * 2. Array lengths are special cased by the compiler and VM and are not
* reflected in property types. * reflected in property types.
* *
* 3. In typed objects (but not unboxed objects), the initial values of * 3. In typed objects, the initial values of properties (null pointers and
* properties (null pointers and undefined values) are not reflected in * undefined values) are not reflected in the property types. These
* the property types. These values are always possible when reading the * values are always possible when reading the property.
* property.
* *
* We establish these by using write barriers on calls to setProperty and * We establish these by using write barriers on calls to setProperty and
* defineProperty which are on native properties, and on any jitcode which * defineProperty which are on native properties, and on any jitcode which
@ -431,12 +414,6 @@ class ObjectGroup : public gc::TenuredCell
return &flags_; return &flags_;
} }
// Get the bit pattern stored in an object's addendum when it has an
// original unboxed group.
static inline int32_t addendumOriginalUnboxedGroupValue() {
return Addendum_OriginalUnboxedGroup << OBJECT_FLAG_ADDENDUM_SHIFT;
}
inline uint32_t basePropertyCount(); inline uint32_t basePropertyCount();
private: private: