diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h')
-rw-r--r-- | Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h | 137 |
1 files changed, 28 insertions, 109 deletions
diff --git a/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h b/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h index 9088455be..f811c8be5 100644 --- a/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h +++ b/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2016 Apple Inc. All rights reserved. + * Copyright (C) 2013 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -26,90 +26,52 @@ #ifndef FTLAbstractHeapRepository_h #define FTLAbstractHeapRepository_h +#include <wtf/Platform.h> + #if ENABLE(FTL_JIT) -#include "B3Value.h" -#include "DFGArrayMode.h" #include "FTLAbstractHeap.h" #include "IndexingType.h" namespace JSC { namespace FTL { #define FOR_EACH_ABSTRACT_HEAP(macro) \ - macro(typedArrayProperties) + macro(length) \ + macro(typedArrayProperties) \ + macro(WriteBarrierBuffer_bufferContents) #define FOR_EACH_ABSTRACT_FIELD(macro) \ - macro(ArrayBuffer_data, ArrayBuffer::offsetOfData()) \ - macro(Butterfly_arrayBuffer, Butterfly::offsetOfArrayBuffer()) \ macro(Butterfly_publicLength, Butterfly::offsetOfPublicLength()) \ macro(Butterfly_vectorLength, Butterfly::offsetOfVectorLength()) \ macro(CallFrame_callerFrame, CallFrame::callerFrameOffset()) \ - macro(DirectArguments_callee, DirectArguments::offsetOfCallee()) \ - macro(DirectArguments_length, DirectArguments::offsetOfLength()) \ - macro(DirectArguments_minCapacity, DirectArguments::offsetOfMinCapacity()) \ - macro(DirectArguments_overrides, DirectArguments::offsetOfOverrides()) \ - macro(GetterSetter_getter, GetterSetter::offsetOfGetter()) \ - macro(GetterSetter_setter, GetterSetter::offsetOfSetter()) \ macro(JSArrayBufferView_length, JSArrayBufferView::offsetOfLength()) \ macro(JSArrayBufferView_mode, JSArrayBufferView::offsetOfMode()) \ macro(JSArrayBufferView_vector, JSArrayBufferView::offsetOfVector()) \ - macro(JSCell_cellState, JSCell::cellStateOffset()) \ - macro(JSCell_header, 0) \ - macro(JSCell_indexingType, JSCell::indexingTypeOffset()) \ - macro(JSCell_structureID, JSCell::structureIDOffset()) \ - macro(JSCell_typeInfoFlags, JSCell::typeInfoFlagsOffset()) \ - macro(JSCell_typeInfoType, JSCell::typeInfoTypeOffset()) \ - macro(JSCell_usefulBytes, JSCell::indexingTypeOffset()) \ - macro(JSFunction_executable, JSFunction::offsetOfExecutable()) \ - macro(JSFunction_scope, JSFunction::offsetOfScopeChain()) \ - macro(JSFunction_rareData, JSFunction::offsetOfRareData()) \ + macro(JSCell_structure, JSCell::structureOffset()) \ macro(JSObject_butterfly, JSObject::butterflyOffset()) \ - macro(JSPropertyNameEnumerator_cachedInlineCapacity, JSPropertyNameEnumerator::cachedInlineCapacityOffset()) \ - macro(JSPropertyNameEnumerator_cachedPropertyNamesVector, JSPropertyNameEnumerator::cachedPropertyNamesVectorOffset()) \ - macro(JSPropertyNameEnumerator_cachedStructureID, JSPropertyNameEnumerator::cachedStructureIDOffset()) \ - macro(JSPropertyNameEnumerator_endGenericPropertyIndex, JSPropertyNameEnumerator::endGenericPropertyIndexOffset()) \ - macro(JSPropertyNameEnumerator_endStructurePropertyIndex, JSPropertyNameEnumerator::endStructurePropertyIndexOffset()) \ - macro(JSPropertyNameEnumerator_indexLength, JSPropertyNameEnumerator::indexedLengthOffset()) \ macro(JSScope_next, JSScope::offsetOfNext()) \ - macro(JSString_flags, JSString::offsetOfFlags()) \ macro(JSString_length, JSString::offsetOfLength()) \ macro(JSString_value, JSString::offsetOfValue()) \ - macro(JSSymbolTableObject_symbolTable, JSSymbolTableObject::offsetOfSymbolTable()) \ - macro(JSWrapperObject_internalValue, JSWrapperObject::internalValueOffset()) \ + macro(JSVariableObject_registers, JSVariableObject::offsetOfRegisters()) \ macro(MarkedAllocator_freeListHead, MarkedAllocator::offsetOfFreeListHead()) \ - macro(ScopedArguments_overrodeThings, ScopedArguments::offsetOfOverrodeThings()) \ - macro(ScopedArguments_scope, ScopedArguments::offsetOfScope()) \ - macro(ScopedArguments_table, ScopedArguments::offsetOfTable()) \ - macro(ScopedArguments_totalLength, ScopedArguments::offsetOfTotalLength()) \ - macro(ScopedArgumentsTable_arguments, ScopedArgumentsTable::offsetOfArguments()) \ - macro(ScopedArgumentsTable_length, ScopedArgumentsTable::offsetOfLength()) \ + macro(MarkedBlock_markBits, MarkedBlock::offsetOfMarks()) \ macro(StringImpl_data, StringImpl::dataOffset()) \ macro(StringImpl_hashAndFlags, StringImpl::flagsOffset()) \ macro(Structure_classInfo, Structure::classInfoOffset()) \ macro(Structure_globalObject, Structure::globalObjectOffset()) \ - macro(Structure_prototype, Structure::prototypeOffset()) \ - macro(Structure_structureID, Structure::structureIDOffset()) \ - macro(Symbol_privateName, Symbol::offsetOfPrivateName()) + macro(Structure_indexingType, Structure::indexingTypeOffset()) \ + macro(Structure_typeInfoFlags, Structure::typeInfoFlagsOffset()) \ + macro(Structure_typeInfoType, Structure::typeInfoTypeOffset()) #define FOR_EACH_INDEXED_ABSTRACT_HEAP(macro) \ - macro(DirectArguments_storage, DirectArguments::storageOffset(), sizeof(EncodedJSValue)) \ - macro(JSEnvironmentRecord_variables, JSEnvironmentRecord::offsetOfVariables(), sizeof(EncodedJSValue)) \ - macro(JSPropertyNameEnumerator_cachedPropertyNamesVectorContents, 0, sizeof(WriteBarrier<JSString>)) \ - macro(JSRopeString_fibers, JSRopeString::offsetOfFibers(), sizeof(WriteBarrier<JSString>)) \ - macro(MarkedSpace_Subspace_impreciseAllocators, OBJECT_OFFSETOF(MarkedSpace::Subspace, impreciseAllocators), sizeof(MarkedAllocator)) \ - macro(MarkedSpace_Subspace_preciseAllocators, OBJECT_OFFSETOF(MarkedSpace::Subspace, preciseAllocators), sizeof(MarkedAllocator)) \ - macro(ScopedArguments_overflowStorage, ScopedArguments::overflowStorageOffset(), sizeof(EncodedJSValue)) \ - macro(WriteBarrierBuffer_bufferContents, 0, sizeof(JSCell*)) \ - macro(characters8, 0, sizeof(LChar)) \ - macro(characters16, 0, sizeof(UChar)) \ - macro(indexedInt32Properties, 0, sizeof(EncodedJSValue)) \ - macro(indexedDoubleProperties, 0, sizeof(double)) \ - macro(indexedContiguousProperties, 0, sizeof(EncodedJSValue)) \ - macro(indexedArrayStorageProperties, 0, sizeof(EncodedJSValue)) \ - macro(scopedArgumentsTableArguments, 0, sizeof(int32_t)) \ - macro(singleCharacterStrings, 0, sizeof(JSString*)) \ - macro(structureTable, 0, sizeof(Structure*)) \ - macro(variables, 0, sizeof(Register)) + macro(characters8, sizeof(LChar)) \ + macro(characters16, sizeof(UChar)) \ + macro(indexedInt32Properties, sizeof(EncodedJSValue)) \ + macro(indexedDoubleProperties, sizeof(double)) \ + macro(indexedContiguousProperties, sizeof(EncodedJSValue)) \ + macro(indexedArrayStorageProperties, sizeof(EncodedJSValue)) \ + macro(singleCharacterStrings, sizeof(JSString*)) \ + macro(variables, sizeof(Register)) #define FOR_EACH_NUMBERED_ABSTRACT_HEAP(macro) \ macro(properties) @@ -120,7 +82,7 @@ namespace JSC { namespace FTL { class AbstractHeapRepository { WTF_MAKE_NONCOPYABLE(AbstractHeapRepository); public: - AbstractHeapRepository(); + AbstractHeapRepository(LContext); ~AbstractHeapRepository(); AbstractHeap root; @@ -129,13 +91,13 @@ public: FOR_EACH_ABSTRACT_HEAP(ABSTRACT_HEAP_DECLARATION) #undef ABSTRACT_HEAP_DECLARATION -#define ABSTRACT_FIELD_DECLARATION(name, offset) AbstractHeap name; +#define ABSTRACT_FIELD_DECLARATION(name, offset) AbstractField name; FOR_EACH_ABSTRACT_FIELD(ABSTRACT_FIELD_DECLARATION) #undef ABSTRACT_FIELD_DECLARATION - AbstractHeap& JSCell_freeListNext; + AbstractField& JSCell_freeListNext; -#define INDEXED_ABSTRACT_HEAP_DECLARATION(name, offset, size) IndexedAbstractHeap name; +#define INDEXED_ABSTRACT_HEAP_DECLARATION(name, size) IndexedAbstractHeap name; FOR_EACH_INDEXED_ABSTRACT_HEAP(INDEXED_ABSTRACT_HEAP_DECLARATION) #undef INDEXED_ABSTRACT_HEAP_DECLARATION @@ -169,55 +131,12 @@ public: return 0; } } - - IndexedAbstractHeap& forArrayType(DFG::Array::Type type) - { - switch (type) { - case DFG::Array::Int32: - return indexedInt32Properties; - case DFG::Array::Double: - return indexedDoubleProperties; - case DFG::Array::Contiguous: - return indexedContiguousProperties; - case DFG::Array::ArrayStorage: - case DFG::Array::SlowPutArrayStorage: - return indexedArrayStorageProperties; - default: - RELEASE_ASSERT_NOT_REACHED(); - return indexedInt32Properties; - } - } - - void decorateMemory(const AbstractHeap*, B3::Value*); - void decorateCCallRead(const AbstractHeap*, B3::Value*); - void decorateCCallWrite(const AbstractHeap*, B3::Value*); - void decoratePatchpointRead(const AbstractHeap*, B3::Value*); - void decoratePatchpointWrite(const AbstractHeap*, B3::Value*); - - void computeRangesAndDecorateInstructions(); private: - - struct HeapForValue { - HeapForValue() - { - } - - HeapForValue(const AbstractHeap* heap, B3::Value* value) - : heap(heap) - , value(value) - { - } - - const AbstractHeap* heap { nullptr }; - B3::Value* value { nullptr }; - }; - - Vector<HeapForValue> m_heapForMemory; - Vector<HeapForValue> m_heapForCCallRead; - Vector<HeapForValue> m_heapForCCallWrite; - Vector<HeapForValue> m_heapForPatchpointRead; - Vector<HeapForValue> m_heapForPatchpointWrite; + friend class AbstractHeap; + + LContext m_context; + unsigned m_tbaaKind; }; } } // namespace JSC::FTL |