aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/access-builder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/access-builder.cc')
-rw-r--r--deps/v8/src/compiler/access-builder.cc136
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;