diff options
Diffstat (limited to 'deps/v8/src/compiler/access-builder.cc')
-rw-r--r-- | deps/v8/src/compiler/access-builder.cc | 136 |
1 files changed, 79 insertions, 57 deletions
diff --git a/deps/v8/src/compiler/access-builder.cc b/deps/v8/src/compiler/access-builder.cc index a0648d0257..9d24c08dde 100644 --- a/deps/v8/src/compiler/access-builder.cc +++ b/deps/v8/src/compiler/access-builder.cc @@ -11,6 +11,8 @@ #include "src/heap/heap.h" #include "src/objects-inl.h" #include "src/objects/arguments.h" +#include "src/objects/cell.h" +#include "src/objects/heap-number.h" #include "src/objects/js-collection.h" #include "src/objects/js-generator.h" #include "src/objects/module.h" @@ -30,9 +32,12 @@ FieldAccess AccessBuilder::ForExternalTaggedValue() { // static FieldAccess AccessBuilder::ForExternalUint8Value() { - FieldAccess access = {kUntaggedBase, 0, - MaybeHandle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kUint8, MachineType::Uint8(), + FieldAccess access = {kUntaggedBase, + 0, + MaybeHandle<Name>(), + MaybeHandle<Map>(), + TypeCache::Get()->kUint8, + MachineType::Uint8(), kNoWriteBarrier}; return access; } @@ -50,8 +55,8 @@ FieldAccess AccessBuilder::ForMap() { // static FieldAccess AccessBuilder::ForHeapNumberValue() { FieldAccess access = { - kTaggedBase, HeapNumber::kValueOffset, MaybeHandle<Name>(), - MaybeHandle<Map>(), TypeCache::Get().kFloat64, MachineType::Float64(), + kTaggedBase, HeapNumber::kValueOffset, MaybeHandle<Name>(), + MaybeHandle<Map>(), TypeCache::Get()->kFloat64, MachineType::Float64(), kNoWriteBarrier}; return access; } @@ -59,8 +64,8 @@ FieldAccess AccessBuilder::ForHeapNumberValue() { // static FieldAccess AccessBuilder::ForBigIntBitfield() { FieldAccess access = { - kTaggedBase, BigInt::kBitfieldOffset, MaybeHandle<Name>(), - MaybeHandle<Map>(), TypeCache::Get().kInt32, MachineType::IntPtr(), + kTaggedBase, BigInt::kBitfieldOffset, MaybeHandle<Name>(), + MaybeHandle<Map>(), TypeCache::Get()->kInt32, MachineType::Uint32(), kNoWriteBarrier}; return access; } @@ -131,7 +136,7 @@ FieldAccess AccessBuilder::ForJSCollectionIteratorIndex() { JSCollectionIterator::kIndexOffset, MaybeHandle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kFixedArrayLengthType, + TypeCache::Get()->kFixedArrayLengthType, MachineType::TaggedSigned(), kNoWriteBarrier}; return access; @@ -283,6 +288,16 @@ FieldAccess AccessBuilder::ForJSGeneratorObjectResumeMode() { } // static +FieldAccess AccessBuilder::ForJSAsyncFunctionObjectPromise() { + FieldAccess access = { + kTaggedBase, JSAsyncFunctionObject::kPromiseOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::OtherObject(), MachineType::TaggedPointer(), + kFullWriteBarrier}; + return access; +} + +// static FieldAccess AccessBuilder::ForJSAsyncGeneratorObjectQueue() { FieldAccess access = { kTaggedBase, JSAsyncGeneratorObject::kQueueOffset, @@ -304,19 +319,19 @@ FieldAccess AccessBuilder::ForJSAsyncGeneratorObjectIsAwaiting() { // static FieldAccess AccessBuilder::ForJSArrayLength(ElementsKind elements_kind) { - TypeCache const& type_cache = TypeCache::Get(); + TypeCache const* type_cache = TypeCache::Get(); FieldAccess access = {kTaggedBase, JSArray::kLengthOffset, Handle<Name>(), MaybeHandle<Map>(), - type_cache.kJSArrayLengthType, + type_cache->kJSArrayLengthType, MachineType::TaggedSigned(), kFullWriteBarrier}; if (IsDoubleElementsKind(elements_kind)) { - access.type = type_cache.kFixedDoubleArrayLengthType; + access.type = type_cache->kFixedDoubleArrayLengthType; access.write_barrier_kind = kNoWriteBarrier; } else if (IsFastElementsKind(elements_kind)) { - access.type = type_cache.kFixedArrayLengthType; + access.type = type_cache->kFixedArrayLengthType; access.write_barrier_kind = kNoWriteBarrier; } return access; @@ -337,7 +352,7 @@ FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() { FieldAccess AccessBuilder::ForJSArrayBufferBitField() { FieldAccess access = { kTaggedBase, JSArrayBuffer::kBitFieldOffset, MaybeHandle<Name>(), - MaybeHandle<Map>(), TypeCache::Get().kUint8, MachineType::Uint32(), + MaybeHandle<Map>(), TypeCache::Get()->kUint8, MachineType::Uint32(), kNoWriteBarrier}; return access; } @@ -357,7 +372,7 @@ FieldAccess AccessBuilder::ForJSArrayBufferViewByteLength() { JSArrayBufferView::kByteLengthOffset, MaybeHandle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kJSArrayBufferViewByteLengthType, + TypeCache::Get()->kJSArrayBufferViewByteLengthType, MachineType::UintPtr(), kNoWriteBarrier}; return access; @@ -369,7 +384,7 @@ FieldAccess AccessBuilder::ForJSArrayBufferViewByteOffset() { JSArrayBufferView::kByteOffsetOffset, MaybeHandle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kJSArrayBufferViewByteOffsetType, + TypeCache::Get()->kJSArrayBufferViewByteOffsetType, MachineType::UintPtr(), kNoWriteBarrier}; return access; @@ -381,7 +396,7 @@ FieldAccess AccessBuilder::ForJSTypedArrayLength() { JSTypedArray::kLengthOffset, MaybeHandle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kJSTypedArrayLengthType, + TypeCache::Get()->kJSTypedArrayLengthType, MachineType::TaggedSigned(), kNoWriteBarrier}; return access; @@ -393,7 +408,7 @@ FieldAccess AccessBuilder::ForJSDateValue() { JSDate::kValueOffset, MaybeHandle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kJSDateValueType, + TypeCache::Get()->kJSDateValueType, MachineType::AnyTagged(), kFullWriteBarrier}; return access; @@ -402,7 +417,7 @@ FieldAccess AccessBuilder::ForJSDateValue() { // static FieldAccess AccessBuilder::ForJSDateField(JSDate::FieldIndex index) { FieldAccess access = { - kTaggedBase, JSDate::kValueOffset + index * kPointerSize, + kTaggedBase, JSDate::kValueOffset + index * kTaggedSize, MaybeHandle<Name>(), MaybeHandle<Map>(), Type::Number(), MachineType::AnyTagged(), kFullWriteBarrier}; @@ -472,7 +487,7 @@ FieldAccess AccessBuilder::ForFixedArrayLength() { FixedArray::kLengthOffset, MaybeHandle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kFixedArrayLengthType, + TypeCache::Get()->kFixedArrayLengthType, MachineType::TaggedSigned(), kNoWriteBarrier}; return access; @@ -524,8 +539,8 @@ FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() { // static FieldAccess AccessBuilder::ForMapBitField() { FieldAccess access = { - kTaggedBase, Map::kBitFieldOffset, Handle<Name>(), - MaybeHandle<Map>(), TypeCache::Get().kUint8, MachineType::Uint8(), + kTaggedBase, Map::kBitFieldOffset, Handle<Name>(), + MaybeHandle<Map>(), TypeCache::Get()->kUint8, MachineType::Uint8(), kNoWriteBarrier}; return access; } @@ -533,8 +548,8 @@ FieldAccess AccessBuilder::ForMapBitField() { // static FieldAccess AccessBuilder::ForMapBitField2() { FieldAccess access = { - kTaggedBase, Map::kBitField2Offset, Handle<Name>(), - MaybeHandle<Map>(), TypeCache::Get().kUint8, MachineType::Uint8(), + kTaggedBase, Map::kBitField2Offset, Handle<Name>(), + MaybeHandle<Map>(), TypeCache::Get()->kUint8, MachineType::Uint8(), kNoWriteBarrier}; return access; } @@ -542,8 +557,8 @@ FieldAccess AccessBuilder::ForMapBitField2() { // static FieldAccess AccessBuilder::ForMapBitField3() { FieldAccess access = { - kTaggedBase, Map::kBitField3Offset, Handle<Name>(), - MaybeHandle<Map>(), TypeCache::Get().kInt32, MachineType::Int32(), + kTaggedBase, Map::kBitField3Offset, Handle<Name>(), + MaybeHandle<Map>(), TypeCache::Get()->kInt32, MachineType::Int32(), kNoWriteBarrier}; return access; } @@ -562,8 +577,8 @@ FieldAccess AccessBuilder::ForMapDescriptors() { // static FieldAccess AccessBuilder::ForMapInstanceType() { FieldAccess access = { - kTaggedBase, Map::kInstanceTypeOffset, Handle<Name>(), - MaybeHandle<Map>(), TypeCache::Get().kUint16, MachineType::Uint16(), + kTaggedBase, Map::kInstanceTypeOffset, Handle<Name>(), + MaybeHandle<Map>(), TypeCache::Get()->kUint16, MachineType::Uint16(), kNoWriteBarrier}; return access; } @@ -611,7 +626,7 @@ FieldAccess AccessBuilder::ForStringLength() { String::kLengthOffset, Handle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kStringLengthType, + TypeCache::Get()->kStringLengthType, MachineType::Uint32(), kNoWriteBarrier}; return access; @@ -676,14 +691,14 @@ FieldAccess AccessBuilder::ForExternalStringResourceData() { // static ElementAccess AccessBuilder::ForExternalOneByteStringCharacter() { - ElementAccess access = {kUntaggedBase, 0, TypeCache::Get().kUint8, + ElementAccess access = {kUntaggedBase, 0, TypeCache::Get()->kUint8, MachineType::Uint8(), kNoWriteBarrier}; return access; } // static ElementAccess AccessBuilder::ForExternalTwoByteStringCharacter() { - ElementAccess access = {kUntaggedBase, 0, TypeCache::Get().kUint16, + ElementAccess access = {kUntaggedBase, 0, TypeCache::Get()->kUint16, MachineType::Uint16(), kNoWriteBarrier}; return access; } @@ -691,7 +706,7 @@ ElementAccess AccessBuilder::ForExternalTwoByteStringCharacter() { // static ElementAccess AccessBuilder::ForSeqOneByteStringCharacter() { ElementAccess access = {kTaggedBase, SeqOneByteString::kHeaderSize, - TypeCache::Get().kUint8, MachineType::Uint8(), + TypeCache::Get()->kUint8, MachineType::Uint8(), kNoWriteBarrier}; return access; } @@ -699,7 +714,7 @@ ElementAccess AccessBuilder::ForSeqOneByteStringCharacter() { // static ElementAccess AccessBuilder::ForSeqTwoByteStringCharacter() { ElementAccess access = {kTaggedBase, SeqTwoByteString::kHeaderSize, - TypeCache::Get().kUint16, MachineType::Uint16(), + TypeCache::Get()->kUint16, MachineType::Uint16(), kNoWriteBarrier}; return access; } @@ -751,7 +766,7 @@ FieldAccess AccessBuilder::ForJSArrayIteratorNextIndex() { JSArrayIterator::kNextIndexOffset, Handle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kPositiveSafeInteger, + TypeCache::Get()->kPositiveSafeInteger, MachineType::AnyTagged(), kFullWriteBarrier}; return access; @@ -763,7 +778,7 @@ FieldAccess AccessBuilder::ForJSArrayIteratorKind() { JSArrayIterator::kKindOffset, Handle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kJSArrayIteratorKindType, + TypeCache::Get()->kJSArrayIteratorKindType, MachineType::TaggedSigned(), kNoWriteBarrier}; return access; @@ -784,7 +799,7 @@ FieldAccess AccessBuilder::ForJSStringIteratorIndex() { JSStringIterator::kNextIndexOffset, Handle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kStringLengthType, + TypeCache::Get()->kStringLengthType, MachineType::TaggedSigned(), kNoWriteBarrier}; return access; @@ -845,7 +860,7 @@ FieldAccess AccessBuilder::ForCellValue() { // static FieldAccess AccessBuilder::ForContextSlot(size_t index) { - int offset = Context::kHeaderSize + static_cast<int>(index) * kPointerSize; + int offset = Context::OffsetOfElementAt(static_cast<int>(index)); DCHECK_EQ(offset, Context::SlotOffset(static_cast<int>(index)) + kHeapObjectTag); FieldAccess access = {kTaggedBase, offset, @@ -875,7 +890,7 @@ ElementAccess AccessBuilder::ForFixedArrayElement( access.write_barrier_kind = kNoWriteBarrier; break; case HOLEY_SMI_ELEMENTS: - access.type = TypeCache::Get().kHoleySmi; + access.type = TypeCache::Get()->kHoleySmi; break; case PACKED_ELEMENTS: access.type = Type::NonInternal(); @@ -902,7 +917,7 @@ ElementAccess AccessBuilder::ForFixedArrayElement( // static ElementAccess AccessBuilder::ForFixedDoubleArrayElement() { ElementAccess access = {kTaggedBase, FixedDoubleArray::kHeaderSize, - TypeCache::Get().kFloat64, MachineType::Float64(), + TypeCache::Get()->kFloat64, MachineType::Float64(), kNoWriteBarrier}; return access; } @@ -1026,11 +1041,13 @@ FieldAccess AccessBuilder::ForHashTableBaseCapacity() { } // static -FieldAccess AccessBuilder::ForOrderedHashTableBaseNextTable() { +FieldAccess AccessBuilder::ForOrderedHashMapOrSetNextTable() { // TODO(turbofan): This will be redundant with the HashTableBase // methods above once the hash table unification is done. + STATIC_ASSERT(OrderedHashMap::NextTableOffset() == + OrderedHashSet::NextTableOffset()); FieldAccess const access = { - kTaggedBase, OrderedHashTableBase::kNextTableOffset, + kTaggedBase, OrderedHashMap::NextTableOffset(), MaybeHandle<Name>(), MaybeHandle<Map>(), Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier}; @@ -1038,43 +1055,48 @@ FieldAccess AccessBuilder::ForOrderedHashTableBaseNextTable() { } // static -FieldAccess AccessBuilder::ForOrderedHashTableBaseNumberOfBuckets() { +FieldAccess AccessBuilder::ForOrderedHashMapOrSetNumberOfBuckets() { // TODO(turbofan): This will be redundant with the HashTableBase // methods above once the hash table unification is done. + STATIC_ASSERT(OrderedHashMap::NumberOfBucketsOffset() == + OrderedHashSet::NumberOfBucketsOffset()); FieldAccess const access = {kTaggedBase, - OrderedHashTableBase::kNumberOfBucketsOffset, + OrderedHashMap::NumberOfBucketsOffset(), MaybeHandle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kFixedArrayLengthType, + TypeCache::Get()->kFixedArrayLengthType, MachineType::TaggedSigned(), kNoWriteBarrier}; return access; } // static -FieldAccess AccessBuilder::ForOrderedHashTableBaseNumberOfDeletedElements() { +FieldAccess AccessBuilder::ForOrderedHashMapOrSetNumberOfDeletedElements() { // TODO(turbofan): This will be redundant with the HashTableBase // methods above once the hash table unification is done. - FieldAccess const access = { - kTaggedBase, - OrderedHashTableBase::kNumberOfDeletedElementsOffset, - MaybeHandle<Name>(), - MaybeHandle<Map>(), - TypeCache::Get().kFixedArrayLengthType, - MachineType::TaggedSigned(), - kNoWriteBarrier}; + STATIC_ASSERT(OrderedHashMap::NumberOfDeletedElementsOffset() == + OrderedHashSet::NumberOfDeletedElementsOffset()); + FieldAccess const access = {kTaggedBase, + OrderedHashMap::NumberOfDeletedElementsOffset(), + MaybeHandle<Name>(), + MaybeHandle<Map>(), + TypeCache::Get()->kFixedArrayLengthType, + MachineType::TaggedSigned(), + kNoWriteBarrier}; return access; } // static -FieldAccess AccessBuilder::ForOrderedHashTableBaseNumberOfElements() { +FieldAccess AccessBuilder::ForOrderedHashMapOrSetNumberOfElements() { // TODO(turbofan): This will be redundant with the HashTableBase // methods above once the hash table unification is done. + STATIC_ASSERT(OrderedHashMap::NumberOfElementsOffset() == + OrderedHashSet::NumberOfElementsOffset()); FieldAccess const access = {kTaggedBase, - OrderedHashTableBase::kNumberOfElementsOffset, + OrderedHashMap::NumberOfElementsOffset(), MaybeHandle<Name>(), MaybeHandle<Map>(), - TypeCache::Get().kFixedArrayLengthType, + TypeCache::Get()->kFixedArrayLengthType, MachineType::TaggedSigned(), kNoWriteBarrier}; return access; @@ -1083,8 +1105,8 @@ FieldAccess AccessBuilder::ForOrderedHashTableBaseNumberOfElements() { // static ElementAccess AccessBuilder::ForOrderedHashMapEntryValue() { ElementAccess const access = {kTaggedBase, - OrderedHashMap::kHashTableStartOffset + - OrderedHashMap::kValueOffset * kPointerSize, + OrderedHashMap::HashTableStartOffset() + + OrderedHashMap::kValueOffset * kTaggedSize, Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier}; return access; |