Changeset 286502 in webkit
- Timestamp:
- Dec 3, 2021, 10:30:11 AM (5 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 1 deleted
- 11 edited
-
CMakeLists.txt (modified) (1 diff)
-
ChangeLog (modified) (1 diff)
-
JavaScriptCore.xcodeproj/project.pbxproj (modified) (8 diffs)
-
ftl/FTLAbstractHeapRepository.h (modified) (1 diff)
-
ftl/FTLLowerDFGToB3.cpp (modified) (1 diff)
-
jit/AssemblyHelpers.h (modified) (1 diff)
-
jit/JITPropertyAccess.cpp (modified) (1 diff)
-
runtime/Structure.cpp (modified) (10 diffs)
-
runtime/Structure.h (modified) (7 diffs)
-
runtime/StructureIDBlob.h (deleted)
-
runtime/StructureInlines.h (modified) (1 diff)
-
tools/VMInspectorInlines.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/CMakeLists.txt
r286378 r286502 1187 1187 runtime/StructureChain.h 1188 1188 runtime/StructureID.h 1189 runtime/StructureIDBlob.h1190 1189 runtime/StructureInlines.h 1191 1190 runtime/StructureRareData.h -
trunk/Source/JavaScriptCore/ChangeLog
r286478 r286502 1 2021-12-03 Keith Miller <keith_miller@apple.com> 2 3 Remove StructureIDBlob 4 https://bugs.webkit.org/show_bug.cgi?id=233723 5 6 Reviewed by Yusuke Suzuki. 7 8 StructureIDBlob isn't very useful now that StructureIDs are just the 9 bottom bits of the pointer on 64 bit platforms. In a follow up patch 10 I'll change the layout of JSCell and Structure so that TypeInfo creation 11 can be a single load platforms that allow (and don't penalize) misaligned loads. 12 13 * CMakeLists.txt: 14 * JavaScriptCore.xcodeproj/project.pbxproj: 15 * ftl/FTLAbstractHeapRepository.h: 16 * ftl/FTLLowerDFGToB3.cpp: 17 (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): 18 * jit/AssemblyHelpers.h: 19 (JSC::AssemblyHelpers::emitStoreStructureWithTypeInfo): 20 * jit/JITPropertyAccess.cpp: 21 (JSC::JIT::emit_op_put_to_scope): 22 * runtime/Structure.cpp: 23 (JSC::Structure::Structure): 24 (JSC::Structure::addNewPropertyTransition): 25 (JSC::Structure::removeNewPropertyTransition): 26 (JSC::Structure::attributeChangeTransition): 27 (JSC::Structure::nonPropertyTransitionSlow): 28 (JSC::Structure::setBrandTransition): 29 * runtime/Structure.h: 30 (JSC::Structure::id const): 31 (JSC::Structure::objectInitializationBlob const): 32 (JSC::Structure::idBlob const): 33 (JSC::Structure::isProxy const): 34 (JSC::Structure::typeInfo const): 35 (JSC::Structure::indexingType const): 36 (JSC::Structure::indexingMode const): 37 (JSC::Structure::fencedIndexingMode): 38 (JSC::Structure::indexingModeIncludingHistory const): 39 (JSC::Structure::indexingModeIncludingHistoryOffset): 40 (JSC::Structure::structureIDOffset): Deleted. 41 * runtime/StructureIDBlob.h: Removed. 42 * runtime/StructureInlines.h: 43 (JSC::Structure::hasIndexingHeader const): 44 * tools/VMInspectorInlines.h: 45 (JSC::VMInspector::verifyCellSize): 46 1 47 2021-12-02 Yusuke Suzuki <ysuzuki@apple.com> 2 48 -
trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r286347 r286502 853 853 2A83638618D7D0EE0000EBCC /* EdenGCActivityCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A83638418D7D0EE0000EBCC /* EdenGCActivityCallback.h */; settings = {ATTRIBUTES = (Private, ); }; }; 854 854 2A83638A18D7D0FE0000EBCC /* FullGCActivityCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A83638818D7D0FE0000EBCC /* FullGCActivityCallback.h */; settings = {ATTRIBUTES = (Private, ); }; }; 855 2AAAA31218BD49D100394CC8 /* StructureIDBlob.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AAAA31018BD49D100394CC8 /* StructureIDBlob.h */; settings = {ATTRIBUTES = (Private, ); }; };856 855 2AABCDE718EF294200002096 /* GCLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AABCDE618EF294200002096 /* GCLogging.h */; settings = {ATTRIBUTES = (Private, ); }; }; 857 856 2AACE63D18CA5A0300ED0191 /* GCActivityCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AACE63B18CA5A0300ED0191 /* GCActivityCallback.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 3633 3632 2A83638718D7D0FE0000EBCC /* FullGCActivityCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FullGCActivityCallback.cpp; sourceTree = "<group>"; }; 3634 3633 2A83638818D7D0FE0000EBCC /* FullGCActivityCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FullGCActivityCallback.h; sourceTree = "<group>"; }; 3635 2AAAA31018BD49D100394CC8 /* StructureIDBlob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StructureIDBlob.h; sourceTree = "<group>"; };3636 3634 2AABCDE618EF294200002096 /* GCLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCLogging.h; sourceTree = "<group>"; }; 3637 3635 2AACE63A18CA5A0300ED0191 /* GCActivityCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GCActivityCallback.cpp; sourceTree = "<group>"; }; … … 8077 8075 7E4EE7080EBB7963005934AA /* StructureChain.h */, 8078 8076 537FEEC82742BDA300C9EFEE /* StructureID.h */, 8079 2AAAA31018BD49D100394CC8 /* StructureIDBlob.h */,8080 8077 0FD2C92316D01EE900C7803F /* StructureInlines.h */, 8081 8078 C2F0F2D016BAEEE900187C19 /* StructureRareData.cpp */, … … 10161 10158 A54C2AB11C6544F200A18D78 /* HeapSnapshot.h in Headers */, 10162 10159 A5311C361C77CEC500E6B1B6 /* HeapSnapshotBuilder.h in Headers */, 10160 FE2CC9302756B2B9003F5AB8 /* HeapSubspaceTypes.h in Headers */, 10163 10161 0FADE6731D4D23BE00768457 /* HeapUtil.h in Headers */, 10164 10162 FE1BD0251E72053800134BC9 /* HeapVerifier.h in Headers */, … … 10277 10275 E3BF1BAE238AAEDB003A1C2B /* IsoHeapCellType.h in Headers */, 10278 10276 E3C8ED4323A1DBCB00131958 /* IsoInlinedHeapCellType.h in Headers */, 10277 FE65B1512748601F00DB5B16 /* IsoInlinedHeapCellTypeInlines.h in Headers */, 10279 10278 537FEED12742BDE100C9EFEE /* IsoMemoryAllocatorBase.h in Headers */, 10280 10279 537FEECE2742BDE100C9EFEE /* IsoMemoryAllocatorBaseInlines.h in Headers */, … … 10427 10426 E33F50791B84225700413856 /* JSInternalPromiseConstructor.h in Headers */, 10428 10427 E33F50871B8449EF00413856 /* JSInternalPromiseConstructor.lut.h in Headers */, 10429 FE65B1512748601F00DB5B16 /* IsoInlinedHeapCellTypeInlines.h in Headers */,10430 10428 E33F50751B8421C000413856 /* JSInternalPromisePrototype.h in Headers */, 10431 10429 A503FA1E188E0FB000110F14 /* JSJavaScriptCallFramePrototype.h in Headers */, … … 10833 10831 7E4EE7090EBB7963005934AA /* StructureChain.h in Headers */, 10834 10832 537FEEC92742BDA300C9EFEE /* StructureID.h in Headers */, 10835 2AAAA31218BD49D100394CC8 /* StructureIDBlob.h in Headers */,10836 10833 0FD2C92416D01EE900C7803F /* StructureInlines.h in Headers */, 10837 10834 C2FE18A416BAEC4000AF3061 /* StructureRareData.h in Headers */, … … 10956 10953 526AC4B71E977C5D003500E1 /* WasmCodeBlock.h in Headers */, 10957 10954 E3BD2B7622F275020011765C /* WasmCompilationMode.h in Headers */, 10958 FE2CC9302756B2B9003F5AB8 /* HeapSubspaceTypes.h in Headers */,10959 10955 AD412B341E7B2E9E008AF157 /* WasmContext.h in Headers */, 10960 10956 7593C898BE714A64BE93A6E7 /* WasmContextInlines.h in Headers */, -
trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h
r283874 r286502 150 150 macro(Structure_previousOrRareData, Structure::previousOrRareDataOffset()) \ 151 151 macro(Structure_prototype, Structure::prototypeOffset()) \ 152 macro(Structure_structureID, Structure::structureIDOffset()) \153 152 macro(StructureRareData_cachedKeys, StructureRareData::offsetOfCachedPropertyNames(CachedPropertyNamesKind::Keys)) \ 154 153 macro(StructureRareData_cachedGetOwnPropertyNames, StructureRareData::offsetOfCachedPropertyNames(CachedPropertyNamesKind::GetOwnPropertyNames)) \ -
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
r286347 r286502 16803 16803 } 16804 16804 16805 LValue id = m_out. load32(structure, m_heaps.Structure_structureID);16805 LValue id = m_out.bitAnd(m_out.castToInt32(structure), m_out.constInt32(structureIDMask)); 16806 16806 m_out.store32(id, object, m_heaps.JSCell_structureID); 16807 16807 -
trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h
r286424 r286502 1588 1588 void emitStoreStructureWithTypeInfo(RegisterID structure, RegisterID dest, RegisterID scratch) 1589 1589 { 1590 #if USE(JSVALUE64)1591 load64(MacroAssembler::Address(structure, Structure::structureIDOffset()), scratch);1592 store64(scratch, MacroAssembler::Address(dest, JSCell::structureIDOffset()));1593 #else1594 1590 // Store all the info flags using a single 32-bit wide load and store. 1595 1591 load32(MacroAssembler::Address(structure, Structure::indexingModeIncludingHistoryOffset()), scratch); 1596 1592 store32(scratch, MacroAssembler::Address(dest, JSCell::indexingTypeAndMiscOffset())); 1597 1593 1594 #if CPU(ADDRESS64) 1595 and32(MacroAssembler::TrustedImm32(structureIDMask), structure, scratch); 1596 store32(scratch, MacroAssembler::Address(dest, JSCell::structureIDOffset())); 1597 #else 1598 1598 // Store the StructureID 1599 1599 storePtr(structure, MacroAssembler::Address(dest, JSCell::structureIDOffset())); -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp
r286424 r286502 2465 2465 emitGetVirtualRegisterPayload(scope, scopeGPR); 2466 2466 addSlowCase(branchTestPtr(Zero, scratchGPR1)); 2467 load32(Address(scratchGPR1, Structure::structureIDOffset()), scratchGPR1);2467 and32(TrustedImm32(structureIDMask), scratchGPR1); 2468 2468 addSlowCase(branch32(NotEqual, Address(scopeGPR, JSCell::structureIDOffset()), scratchGPR1)); 2469 2469 -
trunk/Source/JavaScriptCore/runtime/Structure.cpp
r286345 r286502 198 198 Structure::Structure(VM& vm, JSGlobalObject* globalObject, JSValue prototype, const TypeInfo& typeInfo, const ClassInfo* classInfo, IndexingType indexingType, unsigned inlineCapacity) 199 199 : JSCell(vm, vm.structureStructure.get()) 200 , m_blob(StructureID::encode(this), indexingType, typeInfo) 200 , m_cellHeaderIndexingModeIncludingHistory(indexingType) 201 , m_cellHeaderType(typeInfo.type()) 202 , m_cellHeaderInlineTypeFlags(typeInfo.inlineTypeFlags()) 201 203 , m_outOfLineTypeFlags(typeInfo.outOfLineTypeFlags()) 202 204 , m_inlineCapacity(inlineCapacity) … … 239 241 Structure::Structure(VM& vm, CreatingEarlyCellTag) 240 242 : JSCell(CreatingEarlyCell) 243 , m_cellHeaderIndexingModeIncludingHistory(NoIndexingShape) 244 , m_cellHeaderType(StructureType) 241 245 , m_inlineCapacity(0) 242 246 , m_bitField(0) … … 265 269 266 270 TypeInfo typeInfo = TypeInfo(StructureType, StructureFlags); 267 m_ blob = StructureIDBlob(StructureID::encode(this), 0, typeInfo);271 m_cellHeaderInlineTypeFlags = typeInfo.inlineTypeFlags(); 268 272 m_outOfLineTypeFlags = typeInfo.outOfLineTypeFlags(); 269 273 … … 275 279 Structure::Structure(VM& vm, Structure* previous, DeferredStructureTransitionWatchpointFire* deferred) 276 280 : JSCell(vm, vm.structureStructure.get()) 281 , m_cellHeaderIndexingModeIncludingHistory(previous->m_cellHeaderIndexingModeIncludingHistory) 282 , m_cellHeaderType(previous->m_cellHeaderType) 283 , m_cellHeaderInlineTypeFlags(previous->m_cellHeaderInlineTypeFlags) 284 , m_outOfLineTypeFlags(previous->m_outOfLineTypeFlags) 277 285 , m_inlineCapacity(previous->m_inlineCapacity) 278 286 , m_bitField(0) … … 301 309 setMaxOffset(vm, invalidOffset); 302 310 303 TypeInfo typeInfo = previous->typeInfo();304 m_blob = StructureIDBlob(StructureID::encode(this), previous->indexingModeIncludingHistory(), typeInfo);305 m_outOfLineTypeFlags = typeInfo.outOfLineTypeFlags();306 307 311 ASSERT(!previous->typeInfo().structureIsImmortal()); 308 312 setPreviousID(vm, previous); … … 530 534 } 531 535 532 transition->m_ blob.setIndexingModeIncludingHistory(structure->indexingModeIncludingHistory() & ~CopyOnWrite);536 transition->m_cellHeaderIndexingModeIncludingHistory = structure->indexingModeIncludingHistory() & ~CopyOnWrite; 533 537 transition->m_transitionPropertyName = propertyName.uid(); 534 538 transition->setTransitionPropertyAttributes(attributes); … … 627 631 } 628 632 629 transition->m_ blob.setIndexingModeIncludingHistory(structure->indexingModeIncludingHistory() & ~CopyOnWrite);633 transition->m_cellHeaderIndexingModeIncludingHistory = structure->indexingModeIncludingHistory() & ~CopyOnWrite; 630 634 transition->m_transitionPropertyName = propertyName.uid(); 631 635 transition->setTransitionKind(TransitionKind::PropertyDeletion); … … 721 725 } 722 726 723 transition->m_ blob.setIndexingModeIncludingHistory(structure->indexingModeIncludingHistory() & ~CopyOnWrite);727 transition->m_cellHeaderIndexingModeIncludingHistory = structure->indexingModeIncludingHistory() & ~CopyOnWrite; 724 728 transition->m_transitionPropertyName = propertyName.uid(); 725 729 transition->setTransitionPropertyAttributes(attributes); … … 819 823 Structure* transition = create(vm, structure); 820 824 transition->setTransitionKind(transitionKind); 821 transition->m_ blob.setIndexingModeIncludingHistory(indexingModeIncludingHistory);825 transition->m_cellHeaderIndexingModeIncludingHistory = indexingModeIncludingHistory; 822 826 823 827 if (preventsExtensions(transitionKind)) … … 1547 1551 1548 1552 transition->m_cachedPrototypeChain.setMayBeNull(vm, transition, structure->m_cachedPrototypeChain.get()); 1549 transition->m_ blob.setIndexingModeIncludingHistory(structure->indexingModeIncludingHistory());1553 transition->m_cellHeaderIndexingModeIncludingHistory = structure->indexingModeIncludingHistory(); 1550 1554 transition->m_transitionPropertyName = &brand->uid(); 1551 1555 transition->setTransitionPropertyAttributes(0); -
trunk/Source/JavaScriptCore/runtime/Structure.h
r286347 r286502 38 38 #include "PropertyOffset.h" 39 39 #include "PutPropertySlot.h" 40 #include "StructureIDBlob.h"41 40 #include "StructureRareData.h" 42 41 #include "StructureTransitionTable.h" … … 166 165 167 166 public: 168 StructureID id() const { ASSERT(m_blob.structureID() == StructureID::encode(this)); return m_blob.structureID(); }169 int32_t objectInitializationBlob() const { return m_blob.blobExcludingStructureID(); }170 int64_t idBlob() const { return m_blob.blob(); }167 StructureID id() const { return StructureID::encode(this); } 168 int32_t objectInitializationBlob() const { return *reinterpret_cast_ptr<const uint32_t*>(&m_cellHeaderIndexingModeIncludingHistory); } 169 int64_t idBlob() const { return static_cast<uint64_t>(objectInitializationBlob()) << 32 | id().bits(); } 171 170 172 171 bool isProxy() const 173 172 { 174 JSType type = m_blob.type(); 175 return type == PureForwardingProxyType || type == ProxyObjectType; 173 return m_cellHeaderType == PureForwardingProxyType || m_cellHeaderType == ProxyObjectType; 176 174 } 177 175 … … 264 262 265 263 // Type accessors. 266 TypeInfo typeInfo() const { return m_blob.typeInfo(m_outOfLineTypeFlags); }264 TypeInfo typeInfo() const { return TypeInfo(m_cellHeaderType, m_cellHeaderInlineTypeFlags, m_outOfLineTypeFlags); } 267 265 bool isObject() const { return typeInfo().isObject(); } 268 266 protected: … … 271 269 public: 272 270 273 IndexingType indexingType() const { return m_blob.indexingModeIncludingHistory() & AllWritableArrayTypes; }274 IndexingType indexingMode() const { return m_blob.indexingModeIncludingHistory() & AllArrayTypes; }271 IndexingType indexingType() const { return indexingModeIncludingHistory() & AllWritableArrayTypes; } 272 IndexingType indexingMode() const { return indexingModeIncludingHistory() & AllArrayTypes; } 275 273 Dependency fencedIndexingMode(IndexingType& indexingType) 276 274 { 277 Dependency dependency = m_blob.fencedIndexingModeIncludingHistory(indexingType);275 Dependency dependency = Dependency::loadAndFence(&m_cellHeaderIndexingModeIncludingHistory, indexingType); 278 276 indexingType &= AllArrayTypes; 279 277 return dependency; 280 278 } 281 IndexingType indexingModeIncludingHistory() const { return m_ blob.indexingModeIncludingHistory(); }279 IndexingType indexingModeIncludingHistory() const { return m_cellHeaderIndexingModeIncludingHistory; } 282 280 283 281 inline bool mayInterceptIndexedAccesses() const; … … 558 556 const ClassInfo* classInfo() const { return m_classInfo; } 559 557 560 static ptrdiff_t structureIDOffset()561 {562 return OBJECT_OFFSETOF(Structure, m_blob) + StructureIDBlob::structureIDOffset();563 }564 565 558 static ptrdiff_t prototypeOffset() 566 559 { … … 585 578 static ptrdiff_t indexingModeIncludingHistoryOffset() 586 579 { 587 return OBJECT_OFFSETOF(Structure, m_ blob) + StructureIDBlob::indexingModeIncludingHistoryOffset();580 return OBJECT_OFFSETOF(Structure, m_cellHeaderIndexingModeIncludingHistory); 588 581 } 589 582 … … 861 854 862 855 // These need to be properly aligned at the beginning of the 'Structure' 863 // part of the object. 864 StructureIDBlob m_blob; 856 // part of the object. And need to match the order of the equivalent properties in 857 // JSCell. 858 IndexingType m_cellHeaderIndexingModeIncludingHistory; 859 const JSType m_cellHeaderType; 860 TypeInfo::InlineTypeFlags m_cellHeaderInlineTypeFlags; 861 const CellState m_cellHeaderDefaultCellState { CellState::DefinitelyWhite }; 865 862 TypeInfo::OutOfLineTypeFlags m_outOfLineTypeFlags; 866 863 -
trunk/Source/JavaScriptCore/runtime/StructureInlines.h
r286034 r286502 257 257 return true; 258 258 259 if (!isTypedView(typedArrayTypeForType(m_ blob.type())))259 if (!isTypedView(typedArrayTypeForType(m_cellHeaderType))) 260 260 return false; 261 261 -
trunk/Source/JavaScriptCore/tools/VMInspectorInlines.h
r252302 r286502 46 46 const ClassInfo* classInfo = structure->classInfo(); 47 47 JSType cellType = cell->type(); 48 AUDIT_VERIFY(action, verifier, cellType == structure-> m_blob.type(), cell, cellType, structure->m_blob.type());48 AUDIT_VERIFY(action, verifier, cellType == structure->typeInfo().type(), cell, cellType, structure->typeInfo().type()); 49 49 50 50 size_t size = cellSize(vm, cell);
Note:
See TracChangeset
for help on using the changeset viewer.