diff options
Diffstat (limited to 'src/compiler/access-builder.cc')
-rw-r--r-- | src/compiler/access-builder.cc | 569 |
1 files changed, 340 insertions, 229 deletions
diff --git a/src/compiler/access-builder.cc b/src/compiler/access-builder.cc index 540eb375..2722590c 100644 --- a/src/compiler/access-builder.cc +++ b/src/compiler/access-builder.cc @@ -9,6 +9,7 @@ #include "src/frames.h" #include "src/handles-inl.h" #include "src/heap/heap.h" +#include "src/objects-inl.h" namespace v8 { namespace internal { @@ -16,47 +17,67 @@ namespace compiler { // static FieldAccess AccessBuilder::ForExternalDoubleValue() { - FieldAccess access = {kUntaggedBase, 0, - MaybeHandle<Name>(), Type::Number(), - MachineType::Float64(), kNoWriteBarrier}; + FieldAccess access = {kUntaggedBase, 0, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Number(), MachineType::Float64(), + kNoWriteBarrier}; + return access; +} + +// static +FieldAccess AccessBuilder::ForExternalTaggedValue() { + FieldAccess access = {kUntaggedBase, 0, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), + kNoWriteBarrier}; + return access; +} + +// static +FieldAccess AccessBuilder::ForExternalUint8Value() { + FieldAccess access = {kUntaggedBase, 0, + MaybeHandle<Name>(), MaybeHandle<Map>(), + TypeCache::Get().kUint8, MachineType::Uint8(), + kNoWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForMap() { - FieldAccess access = { - kTaggedBase, HeapObject::kMapOffset, MaybeHandle<Name>(), - Type::OtherInternal(), MachineType::TaggedPointer(), kMapWriteBarrier}; + FieldAccess access = {kTaggedBase, HeapObject::kMapOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::TaggedPointer(), + kMapWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForHeapNumberValue() { - FieldAccess access = {kTaggedBase, - HeapNumber::kValueOffset, - MaybeHandle<Name>(), - TypeCache::Get().kFloat64, - MachineType::Float64(), - kNoWriteBarrier}; + FieldAccess access = { + kTaggedBase, HeapNumber::kValueOffset, MaybeHandle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kFloat64, MachineType::Float64(), + kNoWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSObjectProperties() { - FieldAccess access = { - kTaggedBase, JSObject::kPropertiesOffset, MaybeHandle<Name>(), - Type::Internal(), MachineType::TaggedPointer(), kPointerWriteBarrier}; + FieldAccess access = {kTaggedBase, JSObject::kPropertiesOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Internal(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSObjectElements() { - FieldAccess access = { - kTaggedBase, JSObject::kElementsOffset, MaybeHandle<Name>(), - Type::Internal(), MachineType::TaggedPointer(), kPointerWriteBarrier}; + FieldAccess access = {kTaggedBase, JSObject::kElementsOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Internal(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } @@ -65,126 +86,136 @@ FieldAccess AccessBuilder::ForJSObjectElements() { FieldAccess AccessBuilder::ForJSObjectInObjectProperty(Handle<Map> map, int index) { int const offset = map->GetInObjectPropertyOffset(index); - FieldAccess access = {kTaggedBase, - offset, - MaybeHandle<Name>(), - Type::NonInternal(), - MachineType::AnyTagged(), + FieldAccess access = {kTaggedBase, offset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::NonInternal(), MachineType::AnyTagged(), kFullWriteBarrier}; return access; } +// static +FieldAccess AccessBuilder::ForJSObjectOffset( + int offset, WriteBarrierKind write_barrier_kind) { + FieldAccess access = {kTaggedBase, offset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::NonInternal(), MachineType::AnyTagged(), + write_barrier_kind}; + return access; +} + +// static +FieldAccess AccessBuilder::ForJSCollectionTable() { + FieldAccess access = {kTaggedBase, JSCollection::kTableOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; + return access; +} // static FieldAccess AccessBuilder::ForJSFunctionPrototypeOrInitialMap() { - FieldAccess access = {kTaggedBase, - JSFunction::kPrototypeOrInitialMapOffset, - MaybeHandle<Name>(), - Type::Any(), - MachineType::AnyTagged(), - kFullWriteBarrier}; + FieldAccess access = { + kTaggedBase, JSFunction::kPrototypeOrInitialMapOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), + kFullWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSFunctionContext() { - FieldAccess access = { - kTaggedBase, JSFunction::kContextOffset, MaybeHandle<Name>(), - Type::Internal(), MachineType::AnyTagged(), kPointerWriteBarrier}; + FieldAccess access = {kTaggedBase, JSFunction::kContextOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Internal(), MachineType::AnyTagged(), + kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSFunctionSharedFunctionInfo() { - FieldAccess access = {kTaggedBase, - JSFunction::kSharedFunctionInfoOffset, - Handle<Name>(), - Type::OtherInternal(), - MachineType::TaggedPointer(), - kPointerWriteBarrier}; + FieldAccess access = { + kTaggedBase, JSFunction::kSharedFunctionInfoOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } // static -FieldAccess AccessBuilder::ForJSFunctionLiterals() { - FieldAccess access = { - kTaggedBase, JSFunction::kLiteralsOffset, Handle<Name>(), - Type::Internal(), MachineType::TaggedPointer(), kPointerWriteBarrier}; +FieldAccess AccessBuilder::ForJSFunctionFeedbackVector() { + FieldAccess access = {kTaggedBase, JSFunction::kFeedbackVectorOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::Internal(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSFunctionCodeEntry() { - FieldAccess access = { - kTaggedBase, JSFunction::kCodeEntryOffset, Handle<Name>(), - Type::OtherInternal(), MachineType::Pointer(), kNoWriteBarrier}; + FieldAccess access = {kTaggedBase, JSFunction::kCodeEntryOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::Pointer(), + kNoWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSFunctionNextFunctionLink() { - FieldAccess access = {kTaggedBase, - JSFunction::kNextFunctionLinkOffset, - Handle<Name>(), - Type::Any(), - MachineType::AnyTagged(), - kPointerWriteBarrier}; + FieldAccess access = { + kTaggedBase, JSFunction::kNextFunctionLinkOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), + kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSGeneratorObjectContext() { - FieldAccess access = {kTaggedBase, - JSGeneratorObject::kContextOffset, - Handle<Name>(), - Type::Internal(), - MachineType::TaggedPointer(), + FieldAccess access = {kTaggedBase, JSGeneratorObject::kContextOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::Internal(), MachineType::TaggedPointer(), kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSGeneratorObjectContinuation() { - FieldAccess access = {kTaggedBase, - JSGeneratorObject::kContinuationOffset, - Handle<Name>(), - Type::SignedSmall(), - MachineType::TaggedSigned(), - kNoWriteBarrier}; + FieldAccess access = { + kTaggedBase, JSGeneratorObject::kContinuationOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::SignedSmall(), MachineType::TaggedSigned(), + kNoWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSGeneratorObjectInputOrDebugPos() { - FieldAccess access = {kTaggedBase, - JSGeneratorObject::kInputOrDebugPosOffset, - Handle<Name>(), - Type::NonInternal(), - MachineType::AnyTagged(), - kFullWriteBarrier}; + FieldAccess access = { + kTaggedBase, JSGeneratorObject::kInputOrDebugPosOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::NonInternal(), MachineType::AnyTagged(), + kFullWriteBarrier}; return access; } // static -FieldAccess AccessBuilder::ForJSGeneratorObjectOperandStack() { - FieldAccess access = {kTaggedBase, - JSGeneratorObject::kOperandStackOffset, - Handle<Name>(), - Type::Internal(), - MachineType::AnyTagged(), - kPointerWriteBarrier}; +FieldAccess AccessBuilder::ForJSGeneratorObjectRegisterFile() { + FieldAccess access = { + kTaggedBase, JSGeneratorObject::kRegisterFileOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::Internal(), MachineType::AnyTagged(), + kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSGeneratorObjectResumeMode() { - FieldAccess access = {kTaggedBase, - JSGeneratorObject::kResumeModeOffset, - Handle<Name>(), - Type::SignedSmall(), - MachineType::TaggedSigned(), - kNoWriteBarrier}; + FieldAccess access = { + kTaggedBase, JSGeneratorObject::kResumeModeOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::SignedSmall(), MachineType::TaggedSigned(), + kNoWriteBarrier}; return access; } @@ -194,6 +225,7 @@ FieldAccess AccessBuilder::ForJSArrayLength(ElementsKind elements_kind) { FieldAccess access = {kTaggedBase, JSArray::kLengthOffset, Handle<Name>(), + MaybeHandle<Map>(), type_cache.kJSArrayLengthType, MachineType::TaggedSigned(), kFullWriteBarrier}; @@ -210,30 +242,28 @@ FieldAccess AccessBuilder::ForJSArrayLength(ElementsKind elements_kind) { // static FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() { - FieldAccess access = {kTaggedBase, - JSArrayBuffer::kBackingStoreOffset, - MaybeHandle<Name>(), - Type::OtherInternal(), - MachineType::Pointer(), - kNoWriteBarrier}; + FieldAccess access = { + kTaggedBase, JSArrayBuffer::kBackingStoreOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::Pointer(), + kNoWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSArrayBufferBitField() { - FieldAccess access = {kTaggedBase, JSArrayBuffer::kBitFieldOffset, - MaybeHandle<Name>(), TypeCache::Get().kUint8, - MachineType::Uint32(), kNoWriteBarrier}; + FieldAccess access = { + kTaggedBase, JSArrayBuffer::kBitFieldOffset, MaybeHandle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kUint8, MachineType::Uint32(), + kNoWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSArrayBufferViewBuffer() { - FieldAccess access = {kTaggedBase, - JSArrayBufferView::kBufferOffset, - MaybeHandle<Name>(), - Type::OtherInternal(), - MachineType::TaggedPointer(), + FieldAccess access = {kTaggedBase, JSArrayBufferView::kBufferOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::TaggedPointer(), kPointerWriteBarrier}; return access; } @@ -243,6 +273,7 @@ FieldAccess AccessBuilder::ForJSArrayBufferViewByteLength() { FieldAccess access = {kTaggedBase, JSArrayBufferView::kByteLengthOffset, MaybeHandle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kPositiveInteger, MachineType::AnyTagged(), kFullWriteBarrier}; @@ -254,6 +285,7 @@ FieldAccess AccessBuilder::ForJSArrayBufferViewByteOffset() { FieldAccess access = {kTaggedBase, JSArrayBufferView::kByteOffsetOffset, MaybeHandle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kPositiveInteger, MachineType::AnyTagged(), kFullWriteBarrier}; @@ -265,6 +297,7 @@ FieldAccess AccessBuilder::ForJSTypedArrayLength() { FieldAccess access = {kTaggedBase, JSTypedArray::kLengthOffset, MaybeHandle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kJSTypedArrayLengthType, MachineType::TaggedSigned(), kNoWriteBarrier}; @@ -276,6 +309,7 @@ FieldAccess AccessBuilder::ForJSDateValue() { FieldAccess access = {kTaggedBase, JSDate::kValueOffset, MaybeHandle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kJSDateValueType, MachineType::AnyTagged(), kFullWriteBarrier}; @@ -284,48 +318,51 @@ FieldAccess AccessBuilder::ForJSDateValue() { // static FieldAccess AccessBuilder::ForJSDateField(JSDate::FieldIndex index) { - FieldAccess access = {kTaggedBase, - JSDate::kValueOffset + index * kPointerSize, - MaybeHandle<Name>(), - Type::Number(), - MachineType::AnyTagged(), - kFullWriteBarrier}; + FieldAccess access = { + kTaggedBase, JSDate::kValueOffset + index * kPointerSize, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Number(), MachineType::AnyTagged(), + kFullWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSIteratorResultDone() { - FieldAccess access = { - kTaggedBase, JSIteratorResult::kDoneOffset, MaybeHandle<Name>(), - Type::NonInternal(), MachineType::AnyTagged(), kFullWriteBarrier}; + FieldAccess access = {kTaggedBase, JSIteratorResult::kDoneOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::NonInternal(), MachineType::AnyTagged(), + kFullWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSIteratorResultValue() { - FieldAccess access = { - kTaggedBase, JSIteratorResult::kValueOffset, MaybeHandle<Name>(), - Type::NonInternal(), MachineType::AnyTagged(), kFullWriteBarrier}; + FieldAccess access = {kTaggedBase, JSIteratorResult::kValueOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::NonInternal(), MachineType::AnyTagged(), + kFullWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSRegExpFlags() { - FieldAccess access = { - kTaggedBase, JSRegExp::kFlagsOffset, MaybeHandle<Name>(), - Type::NonInternal(), MachineType::AnyTagged(), kFullWriteBarrier}; + FieldAccess access = {kTaggedBase, JSRegExp::kFlagsOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::NonInternal(), MachineType::AnyTagged(), + kFullWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSRegExpSource() { - FieldAccess access = { - kTaggedBase, JSRegExp::kSourceOffset, MaybeHandle<Name>(), - Type::NonInternal(), MachineType::AnyTagged(), kFullWriteBarrier}; + FieldAccess access = {kTaggedBase, JSRegExp::kSourceOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::NonInternal(), MachineType::AnyTagged(), + kFullWriteBarrier}; return access; } @@ -335,6 +372,7 @@ FieldAccess AccessBuilder::ForFixedArrayLength() { FieldAccess access = {kTaggedBase, FixedArray::kLengthOffset, MaybeHandle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kFixedArrayLengthType, MachineType::TaggedSigned(), kNoWriteBarrier}; @@ -343,12 +381,11 @@ FieldAccess AccessBuilder::ForFixedArrayLength() { // static FieldAccess AccessBuilder::ForFixedTypedArrayBaseBasePointer() { - FieldAccess access = {kTaggedBase, - FixedTypedArrayBase::kBasePointerOffset, - MaybeHandle<Name>(), - Type::OtherInternal(), - MachineType::AnyTagged(), - kPointerWriteBarrier}; + FieldAccess access = { + kTaggedBase, FixedTypedArrayBase::kBasePointerOffset, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::AnyTagged(), + kPointerWriteBarrier}; return access; } @@ -357,6 +394,7 @@ FieldAccess AccessBuilder::ForFixedTypedArrayBaseExternalPointer() { FieldAccess access = {kTaggedBase, FixedTypedArrayBase::kExternalPointerOffset, MaybeHandle<Name>(), + MaybeHandle<Map>(), Type::ExternalPointer(), MachineType::Pointer(), kNoWriteBarrier}; @@ -365,53 +403,51 @@ FieldAccess AccessBuilder::ForFixedTypedArrayBaseExternalPointer() { // static FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() { - FieldAccess access = {kTaggedBase, - DescriptorArray::kEnumCacheOffset, - Handle<Name>(), - Type::OtherInternal(), - MachineType::TaggedPointer(), - kPointerWriteBarrier}; + FieldAccess access = { + kTaggedBase, DescriptorArray::kEnumCacheOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForDescriptorArrayEnumCacheBridgeCache() { - FieldAccess access = {kTaggedBase, - DescriptorArray::kEnumCacheBridgeCacheOffset, - Handle<Name>(), - Type::OtherInternal(), - MachineType::TaggedPointer(), - kPointerWriteBarrier}; + FieldAccess access = { + kTaggedBase, DescriptorArray::kEnumCacheBridgeCacheOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForMapBitField() { - FieldAccess access = {kTaggedBase, Map::kBitFieldOffset, - Handle<Name>(), TypeCache::Get().kUint8, - MachineType::Uint8(), kNoWriteBarrier}; + FieldAccess access = { + kTaggedBase, Map::kBitFieldOffset, Handle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kUint8, MachineType::Uint8(), + kNoWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForMapBitField3() { - FieldAccess access = {kTaggedBase, Map::kBitField3Offset, - Handle<Name>(), TypeCache::Get().kInt32, - MachineType::Int32(), kNoWriteBarrier}; + FieldAccess access = { + kTaggedBase, Map::kBitField3Offset, Handle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kInt32, MachineType::Int32(), + kNoWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForMapDescriptors() { - FieldAccess access = {kTaggedBase, - Map::kDescriptorsOffset, - Handle<Name>(), - Type::OtherInternal(), - MachineType::TaggedPointer(), + FieldAccess access = {kTaggedBase, Map::kDescriptorsOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::TaggedPointer(), kPointerWriteBarrier}; return access; } @@ -419,48 +455,47 @@ FieldAccess AccessBuilder::ForMapDescriptors() { // static FieldAccess AccessBuilder::ForMapInstanceType() { - FieldAccess access = {kTaggedBase, Map::kInstanceTypeOffset, - Handle<Name>(), TypeCache::Get().kUint8, - MachineType::Uint8(), kNoWriteBarrier}; + FieldAccess access = { + kTaggedBase, Map::kInstanceTypeOffset, Handle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kUint8, MachineType::Uint8(), + kNoWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForMapPrototype() { - FieldAccess access = { - kTaggedBase, Map::kPrototypeOffset, Handle<Name>(), - Type::Any(), MachineType::TaggedPointer(), kPointerWriteBarrier}; + FieldAccess access = {kTaggedBase, Map::kPrototypeOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForModuleRegularExports() { - FieldAccess access = {kTaggedBase, - Module::kRegularExportsOffset, - Handle<Name>(), - Type::OtherInternal(), - MachineType::TaggedPointer(), + FieldAccess access = {kTaggedBase, Module::kRegularExportsOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::TaggedPointer(), kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForModuleRegularImports() { - FieldAccess access = {kTaggedBase, - Module::kRegularImportsOffset, - Handle<Name>(), - Type::OtherInternal(), - MachineType::TaggedPointer(), + FieldAccess access = {kTaggedBase, Module::kRegularImportsOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::TaggedPointer(), kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForNameHashField() { - FieldAccess access = {kTaggedBase, Name::kHashFieldOffset, - Handle<Name>(), Type::Internal(), - MachineType::Uint32(), kNoWriteBarrier}; + FieldAccess access = {kTaggedBase, Name::kHashFieldOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::Unsigned32(), MachineType::Uint32(), + kNoWriteBarrier}; return access; } @@ -469,6 +504,7 @@ FieldAccess AccessBuilder::ForStringLength() { FieldAccess access = {kTaggedBase, String::kLengthOffset, Handle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kStringLengthType, MachineType::TaggedSigned(), kNoWriteBarrier}; @@ -477,33 +513,46 @@ FieldAccess AccessBuilder::ForStringLength() { // static FieldAccess AccessBuilder::ForConsStringFirst() { - FieldAccess access = { - kTaggedBase, ConsString::kFirstOffset, Handle<Name>(), - Type::String(), MachineType::TaggedPointer(), kPointerWriteBarrier}; + FieldAccess access = {kTaggedBase, ConsString::kFirstOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::String(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForConsStringSecond() { - FieldAccess access = { - kTaggedBase, ConsString::kSecondOffset, Handle<Name>(), - Type::String(), MachineType::TaggedPointer(), kPointerWriteBarrier}; + FieldAccess access = {kTaggedBase, ConsString::kSecondOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::String(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; + return access; +} + +// static +FieldAccess AccessBuilder::ForThinStringActual() { + FieldAccess access = {kTaggedBase, ThinString::kActualOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::String(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForSlicedStringOffset() { - FieldAccess access = { - kTaggedBase, SlicedString::kOffsetOffset, Handle<Name>(), - Type::SignedSmall(), MachineType::TaggedSigned(), kNoWriteBarrier}; + FieldAccess access = {kTaggedBase, SlicedString::kOffsetOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::SignedSmall(), MachineType::TaggedSigned(), + kNoWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForSlicedStringParent() { - FieldAccess access = { - kTaggedBase, SlicedString::kParentOffset, Handle<Name>(), - Type::String(), MachineType::TaggedPointer(), kPointerWriteBarrier}; + FieldAccess access = {kTaggedBase, SlicedString::kParentOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::String(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } @@ -512,6 +561,7 @@ FieldAccess AccessBuilder::ForExternalStringResourceData() { FieldAccess access = {kTaggedBase, ExternalString::kResourceDataOffset, Handle<Name>(), + MaybeHandle<Map>(), Type::ExternalPointer(), MachineType::Pointer(), kNoWriteBarrier}; @@ -550,23 +600,20 @@ ElementAccess AccessBuilder::ForSeqTwoByteStringCharacter() { // static FieldAccess AccessBuilder::ForJSGlobalObjectGlobalProxy() { - FieldAccess access = {kTaggedBase, - JSGlobalObject::kGlobalProxyOffset, - Handle<Name>(), - Type::Receiver(), - MachineType::TaggedPointer(), + FieldAccess access = {kTaggedBase, JSGlobalObject::kGlobalProxyOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::Receiver(), MachineType::TaggedPointer(), kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSGlobalObjectNativeContext() { - FieldAccess access = {kTaggedBase, - JSGlobalObject::kNativeContextOffset, - Handle<Name>(), - Type::Internal(), - MachineType::TaggedPointer(), - kPointerWriteBarrier}; + FieldAccess access = { + kTaggedBase, JSGlobalObject::kNativeContextOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::Internal(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } @@ -575,6 +622,7 @@ FieldAccess AccessBuilder::ForJSArrayIteratorObject() { FieldAccess access = {kTaggedBase, JSArrayIterator::kIteratedObjectOffset, Handle<Name>(), + MaybeHandle<Map>(), Type::ReceiverOrUndefined(), MachineType::TaggedPointer(), kPointerWriteBarrier}; @@ -589,6 +637,7 @@ FieldAccess AccessBuilder::ForJSArrayIteratorIndex(InstanceType instance_type, FieldAccess access = {kTaggedBase, JSArrayIterator::kNextIndexOffset, Handle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kPositiveSafeInteger, MachineType::AnyTagged(), kFullWriteBarrier}; @@ -614,20 +663,20 @@ FieldAccess AccessBuilder::ForJSArrayIteratorIndex(InstanceType instance_type, // static FieldAccess AccessBuilder::ForJSArrayIteratorObjectMap() { - FieldAccess access = {kTaggedBase, - JSArrayIterator::kIteratedObjectMapOffset, - Handle<Name>(), - Type::OtherInternal(), - MachineType::TaggedPointer(), - kPointerWriteBarrier}; + FieldAccess access = { + kTaggedBase, JSArrayIterator::kIteratedObjectMapOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForJSStringIteratorString() { - FieldAccess access = { - kTaggedBase, JSStringIterator::kStringOffset, Handle<Name>(), - Type::String(), MachineType::TaggedPointer(), kPointerWriteBarrier}; + FieldAccess access = {kTaggedBase, JSStringIterator::kStringOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::String(), MachineType::TaggedPointer(), + kPointerWriteBarrier}; return access; } @@ -636,6 +685,7 @@ FieldAccess AccessBuilder::ForJSStringIteratorIndex() { FieldAccess access = {kTaggedBase, JSStringIterator::kNextIndexOffset, Handle<Name>(), + MaybeHandle<Map>(), TypeCache::Get().kStringLengthType, MachineType::TaggedSigned(), kNoWriteBarrier}; @@ -644,52 +694,53 @@ FieldAccess AccessBuilder::ForJSStringIteratorIndex() { // static FieldAccess AccessBuilder::ForValue() { - FieldAccess access = { - kTaggedBase, JSValue::kValueOffset, Handle<Name>(), - Type::NonInternal(), MachineType::AnyTagged(), kFullWriteBarrier}; + FieldAccess access = {kTaggedBase, JSValue::kValueOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::NonInternal(), MachineType::AnyTagged(), + kFullWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForArgumentsLength() { - FieldAccess access = { - kTaggedBase, JSArgumentsObject::kLengthOffset, Handle<Name>(), - Type::NonInternal(), MachineType::AnyTagged(), kFullWriteBarrier}; + FieldAccess access = {kTaggedBase, JSArgumentsObject::kLengthOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::NonInternal(), MachineType::AnyTagged(), + kFullWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForArgumentsCallee() { - FieldAccess access = {kTaggedBase, - JSSloppyArgumentsObject::kCalleeOffset, - Handle<Name>(), - Type::NonInternal(), - MachineType::AnyTagged(), - kPointerWriteBarrier}; + FieldAccess access = { + kTaggedBase, JSSloppyArgumentsObject::kCalleeOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::NonInternal(), MachineType::AnyTagged(), + kPointerWriteBarrier}; return access; } // static -FieldAccess AccessBuilder::ForFixedArraySlot(size_t index) { +FieldAccess AccessBuilder::ForFixedArraySlot( + size_t index, WriteBarrierKind write_barrier_kind) { int offset = FixedArray::OffsetOfElementAt(static_cast<int>(index)); - FieldAccess access = {kTaggedBase, - offset, - Handle<Name>(), - Type::NonInternal(), - MachineType::AnyTagged(), - kFullWriteBarrier}; + FieldAccess access = {kTaggedBase, offset, + Handle<Name>(), MaybeHandle<Map>(), + Type::NonInternal(), MachineType::AnyTagged(), + write_barrier_kind}; return access; } // static FieldAccess AccessBuilder::ForCellValue() { - FieldAccess access = { - kTaggedBase, Cell::kValueOffset, Handle<Name>(), - Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier}; + FieldAccess access = {kTaggedBase, Cell::kValueOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), + kFullWriteBarrier}; return access; } @@ -698,31 +749,29 @@ FieldAccess AccessBuilder::ForContextSlot(size_t index) { int offset = Context::kHeaderSize + static_cast<int>(index) * kPointerSize; DCHECK_EQ(offset, Context::SlotOffset(static_cast<int>(index)) + kHeapObjectTag); - FieldAccess access = {kTaggedBase, - offset, - Handle<Name>(), - Type::Any(), - MachineType::AnyTagged(), + FieldAccess access = {kTaggedBase, offset, + Handle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForContextExtensionScopeInfo() { - FieldAccess access = {kTaggedBase, - ContextExtension::kScopeInfoOffset, - Handle<Name>(), - Type::OtherInternal(), - MachineType::AnyTagged(), - kFullWriteBarrier}; + FieldAccess access = { + kTaggedBase, ContextExtension::kScopeInfoOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::OtherInternal(), MachineType::AnyTagged(), + kFullWriteBarrier}; return access; } // static FieldAccess AccessBuilder::ForContextExtensionExtension() { - FieldAccess access = { - kTaggedBase, ContextExtension::kExtensionOffset, Handle<Name>(), - Type::Any(), MachineType::AnyTagged(), kFullWriteBarrier}; + FieldAccess access = {kTaggedBase, ContextExtension::kExtensionOffset, + Handle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), + kFullWriteBarrier}; return access; } @@ -831,6 +880,68 @@ ElementAccess AccessBuilder::ForTypedArrayElement(ExternalArrayType type, return access; } +// static +FieldAccess AccessBuilder::ForHashTableBaseNumberOfElements() { + FieldAccess access = { + kTaggedBase, + FixedArray::OffsetOfElementAt(HashTableBase::kNumberOfElementsIndex), + MaybeHandle<Name>(), + MaybeHandle<Map>(), + Type::SignedSmall(), + MachineType::TaggedSigned(), + kNoWriteBarrier}; + return access; +} + +// static +FieldAccess AccessBuilder::ForHashTableBaseNumberOfDeletedElement() { + FieldAccess access = { + kTaggedBase, FixedArray::OffsetOfElementAt( + HashTableBase::kNumberOfDeletedElementsIndex), + MaybeHandle<Name>(), MaybeHandle<Map>(), Type::SignedSmall(), + MachineType::TaggedSigned(), kNoWriteBarrier}; + return access; +} + +// static +FieldAccess AccessBuilder::ForHashTableBaseCapacity() { + FieldAccess access = { + kTaggedBase, + FixedArray::OffsetOfElementAt(HashTableBase::kCapacityIndex), + MaybeHandle<Name>(), + MaybeHandle<Map>(), + Type::SignedSmall(), + MachineType::TaggedSigned(), + kNoWriteBarrier}; + return access; +} + +// static +FieldAccess AccessBuilder::ForDictionaryMaxNumberKey() { + FieldAccess access = { + kTaggedBase, + FixedArray::OffsetOfElementAt(NameDictionary::kMaxNumberKeyIndex), + MaybeHandle<Name>(), + MaybeHandle<Map>(), + Type::Any(), + MachineType::AnyTagged(), + kNoWriteBarrier}; + return access; +} + +// static +FieldAccess AccessBuilder::ForDictionaryNextEnumerationIndex() { + FieldAccess access = { + kTaggedBase, + FixedArray::OffsetOfElementAt(NameDictionary::kNextEnumerationIndexIndex), + MaybeHandle<Name>(), + MaybeHandle<Map>(), + Type::SignedSmall(), + MachineType::TaggedSigned(), + kNoWriteBarrier}; + return access; +} + } // namespace compiler } // namespace internal } // namespace v8 |