5 #include "src/compiler/access-builder.h" 7 #include "src/compiler/type-cache.h" 8 #include "src/contexts.h" 9 #include "src/frames.h" 10 #include "src/handles-inl.h" 11 #include "src/heap/heap.h" 12 #include "src/objects-inl.h" 13 #include "src/objects/arguments.h" 14 #include "src/objects/js-collection.h" 15 #include "src/objects/js-generator.h" 16 #include "src/objects/module.h" 23 FieldAccess AccessBuilder::ForExternalTaggedValue() {
24 FieldAccess access = {kUntaggedBase, 0,
25 MaybeHandle<Name>(), MaybeHandle<Map>(),
26 Type::Any(), MachineType::AnyTagged(),
32 FieldAccess AccessBuilder::ForExternalUint8Value() {
33 FieldAccess access = {kUntaggedBase, 0,
34 MaybeHandle<Name>(), MaybeHandle<Map>(),
35 TypeCache::Get().kUint8, MachineType::Uint8(),
41 FieldAccess AccessBuilder::ForMap() {
42 FieldAccess access = {kTaggedBase, HeapObject::kMapOffset,
43 MaybeHandle<Name>(), MaybeHandle<Map>(),
44 Type::OtherInternal(), MachineType::TaggedPointer(),
51 FieldAccess AccessBuilder::ForHeapNumberValue() {
52 FieldAccess access = {
53 kTaggedBase, HeapNumber::kValueOffset, MaybeHandle<Name>(),
54 MaybeHandle<Map>(), TypeCache::Get().kFloat64, MachineType::Float64(),
60 FieldAccess AccessBuilder::ForBigIntBitfield() {
61 FieldAccess access = {
62 kTaggedBase, BigInt::kBitfieldOffset, MaybeHandle<Name>(),
63 MaybeHandle<Map>(), TypeCache::Get().kInt32, MachineType::IntPtr(),
69 FieldAccess AccessBuilder::ForJSObjectPropertiesOrHash() {
70 FieldAccess access = {kTaggedBase, JSObject::kPropertiesOrHashOffset,
71 MaybeHandle<Name>(), MaybeHandle<Map>(),
72 Type::Any(), MachineType::AnyTagged(),
73 kPointerWriteBarrier, LoadSensitivity::kCritical};
79 FieldAccess AccessBuilder::ForJSObjectElements() {
80 FieldAccess access = {kTaggedBase, JSObject::kElementsOffset,
81 MaybeHandle<Name>(), MaybeHandle<Map>(),
82 Type::Internal(), MachineType::TaggedPointer(),
83 kPointerWriteBarrier, LoadSensitivity::kCritical};
89 FieldAccess AccessBuilder::ForJSObjectInObjectProperty(
const MapRef& map,
91 int const offset = map.GetInObjectPropertyOffset(index);
92 FieldAccess access = {kTaggedBase, offset,
93 MaybeHandle<Name>(), MaybeHandle<Map>(),
94 Type::NonInternal(), MachineType::AnyTagged(),
100 FieldAccess AccessBuilder::ForJSObjectOffset(
101 int offset, WriteBarrierKind write_barrier_kind) {
102 FieldAccess access = {kTaggedBase, offset,
103 MaybeHandle<Name>(), MaybeHandle<Map>(),
104 Type::NonInternal(), MachineType::AnyTagged(),
110 FieldAccess AccessBuilder::ForJSCollectionTable() {
111 FieldAccess access = {kTaggedBase, JSCollection::kTableOffset,
112 MaybeHandle<Name>(), MaybeHandle<Map>(),
113 Type::OtherInternal(), MachineType::TaggedPointer(),
114 kPointerWriteBarrier};
119 FieldAccess AccessBuilder::ForJSCollectionIteratorTable() {
120 FieldAccess access = {
121 kTaggedBase, JSCollectionIterator::kTableOffset,
122 MaybeHandle<Name>(), MaybeHandle<Map>(),
123 Type::OtherInternal(), MachineType::TaggedPointer(),
124 kPointerWriteBarrier};
129 FieldAccess AccessBuilder::ForJSCollectionIteratorIndex() {
130 FieldAccess access = {kTaggedBase,
131 JSCollectionIterator::kIndexOffset,
134 TypeCache::Get().kFixedArrayLengthType,
135 MachineType::TaggedSigned(),
141 FieldAccess AccessBuilder::ForJSFunctionPrototypeOrInitialMap() {
142 FieldAccess access = {
143 kTaggedBase, JSFunction::kPrototypeOrInitialMapOffset,
144 MaybeHandle<Name>(), MaybeHandle<Map>(),
145 Type::Any(), MachineType::AnyTagged(),
151 FieldAccess AccessBuilder::ForJSFunctionContext() {
152 FieldAccess access = {kTaggedBase, JSFunction::kContextOffset,
153 MaybeHandle<Name>(), MaybeHandle<Map>(),
154 Type::Internal(), MachineType::AnyTagged(),
155 kPointerWriteBarrier};
161 FieldAccess AccessBuilder::ForJSFunctionSharedFunctionInfo() {
162 FieldAccess access = {
163 kTaggedBase, JSFunction::kSharedFunctionInfoOffset,
164 Handle<Name>(), MaybeHandle<Map>(),
165 Type::OtherInternal(), MachineType::TaggedPointer(),
166 kPointerWriteBarrier};
171 FieldAccess AccessBuilder::ForJSFunctionFeedbackCell() {
172 FieldAccess access = {kTaggedBase, JSFunction::kFeedbackCellOffset,
173 Handle<Name>(), MaybeHandle<Map>(),
174 Type::Internal(), MachineType::TaggedPointer(),
175 kPointerWriteBarrier};
180 FieldAccess AccessBuilder::ForJSFunctionCode() {
181 FieldAccess access = {kTaggedBase, JSFunction::kCodeOffset,
182 Handle<Name>(), MaybeHandle<Map>(),
183 Type::OtherInternal(), MachineType::TaggedPointer(),
184 kPointerWriteBarrier};
189 FieldAccess AccessBuilder::ForJSBoundFunctionBoundTargetFunction() {
190 FieldAccess access = {
191 kTaggedBase, JSBoundFunction::kBoundTargetFunctionOffset,
192 Handle<Name>(), MaybeHandle<Map>(),
193 Type::Callable(), MachineType::TaggedPointer(),
194 kPointerWriteBarrier};
199 FieldAccess AccessBuilder::ForJSBoundFunctionBoundThis() {
200 FieldAccess access = {kTaggedBase, JSBoundFunction::kBoundThisOffset,
201 Handle<Name>(), MaybeHandle<Map>(),
202 Type::NonInternal(), MachineType::AnyTagged(),
208 FieldAccess AccessBuilder::ForJSBoundFunctionBoundArguments() {
209 FieldAccess access = {
210 kTaggedBase, JSBoundFunction::kBoundArgumentsOffset,
211 Handle<Name>(), MaybeHandle<Map>(),
212 Type::Internal(), MachineType::TaggedPointer(),
213 kPointerWriteBarrier};
218 FieldAccess AccessBuilder::ForJSGeneratorObjectContext() {
219 FieldAccess access = {kTaggedBase, JSGeneratorObject::kContextOffset,
220 Handle<Name>(), MaybeHandle<Map>(),
221 Type::Internal(), MachineType::TaggedPointer(),
222 kPointerWriteBarrier};
227 FieldAccess AccessBuilder::ForJSGeneratorObjectFunction() {
228 FieldAccess access = {kTaggedBase, JSGeneratorObject::kFunctionOffset,
229 Handle<Name>(), MaybeHandle<Map>(),
230 Type::Function(), MachineType::TaggedPointer(),
231 kPointerWriteBarrier};
236 FieldAccess AccessBuilder::ForJSGeneratorObjectReceiver() {
237 FieldAccess access = {kTaggedBase, JSGeneratorObject::kReceiverOffset,
238 Handle<Name>(), MaybeHandle<Map>(),
239 Type::Internal(), MachineType::TaggedPointer(),
240 kPointerWriteBarrier};
245 FieldAccess AccessBuilder::ForJSGeneratorObjectContinuation() {
246 FieldAccess access = {
247 kTaggedBase, JSGeneratorObject::kContinuationOffset,
248 Handle<Name>(), MaybeHandle<Map>(),
249 Type::SignedSmall(), MachineType::TaggedSigned(),
255 FieldAccess AccessBuilder::ForJSGeneratorObjectInputOrDebugPos() {
256 FieldAccess access = {
257 kTaggedBase, JSGeneratorObject::kInputOrDebugPosOffset,
258 Handle<Name>(), MaybeHandle<Map>(),
259 Type::NonInternal(), MachineType::AnyTagged(),
266 FieldAccess AccessBuilder::ForJSGeneratorObjectParametersAndRegisters() {
267 FieldAccess access = {
268 kTaggedBase, JSGeneratorObject::kParametersAndRegistersOffset,
269 Handle<Name>(), MaybeHandle<Map>(),
270 Type::Internal(), MachineType::AnyTagged(),
271 kPointerWriteBarrier};
276 FieldAccess AccessBuilder::ForJSGeneratorObjectResumeMode() {
277 FieldAccess access = {
278 kTaggedBase, JSGeneratorObject::kResumeModeOffset,
279 Handle<Name>(), MaybeHandle<Map>(),
280 Type::SignedSmall(), MachineType::TaggedSigned(),
286 FieldAccess AccessBuilder::ForJSAsyncFunctionObjectPromise() {
287 FieldAccess access = {
288 kTaggedBase, JSAsyncFunctionObject::kPromiseOffset,
289 Handle<Name>(), MaybeHandle<Map>(),
290 Type::OtherObject(), MachineType::TaggedPointer(),
296 FieldAccess AccessBuilder::ForJSAsyncGeneratorObjectQueue() {
297 FieldAccess access = {
298 kTaggedBase, JSAsyncGeneratorObject::kQueueOffset,
299 Handle<Name>(), MaybeHandle<Map>(),
300 Type::NonInternal(), MachineType::AnyTagged(),
306 FieldAccess AccessBuilder::ForJSAsyncGeneratorObjectIsAwaiting() {
307 FieldAccess access = {
308 kTaggedBase, JSAsyncGeneratorObject::kIsAwaitingOffset,
309 Handle<Name>(), MaybeHandle<Map>(),
310 Type::SignedSmall(), MachineType::TaggedSigned(),
316 FieldAccess AccessBuilder::ForJSArrayLength(ElementsKind elements_kind) {
317 TypeCache
const& type_cache = TypeCache::Get();
318 FieldAccess access = {kTaggedBase,
319 JSArray::kLengthOffset,
322 type_cache.kJSArrayLengthType,
323 MachineType::TaggedSigned(),
325 if (IsDoubleElementsKind(elements_kind)) {
326 access.type = type_cache.kFixedDoubleArrayLengthType;
327 access.write_barrier_kind = kNoWriteBarrier;
328 }
else if (IsFastElementsKind(elements_kind)) {
329 access.type = type_cache.kFixedArrayLengthType;
330 access.write_barrier_kind = kNoWriteBarrier;
337 FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() {
338 FieldAccess access = {
339 kTaggedBase, JSArrayBuffer::kBackingStoreOffset,
340 MaybeHandle<Name>(), MaybeHandle<Map>(),
341 Type::OtherInternal(), MachineType::Pointer(),
347 FieldAccess AccessBuilder::ForJSArrayBufferBitField() {
348 FieldAccess access = {
349 kTaggedBase, JSArrayBuffer::kBitFieldOffset, MaybeHandle<Name>(),
350 MaybeHandle<Map>(), TypeCache::Get().kUint8, MachineType::Uint32(),
356 FieldAccess AccessBuilder::ForJSArrayBufferViewBuffer() {
357 FieldAccess access = {kTaggedBase, JSArrayBufferView::kBufferOffset,
358 MaybeHandle<Name>(), MaybeHandle<Map>(),
359 Type::OtherInternal(), MachineType::TaggedPointer(),
360 kPointerWriteBarrier};
365 FieldAccess AccessBuilder::ForJSArrayBufferViewByteLength() {
366 FieldAccess access = {kTaggedBase,
367 JSArrayBufferView::kByteLengthOffset,
370 TypeCache::Get().kJSArrayBufferViewByteLengthType,
371 MachineType::UintPtr(),
377 FieldAccess AccessBuilder::ForJSArrayBufferViewByteOffset() {
378 FieldAccess access = {kTaggedBase,
379 JSArrayBufferView::kByteOffsetOffset,
382 TypeCache::Get().kJSArrayBufferViewByteOffsetType,
383 MachineType::UintPtr(),
389 FieldAccess AccessBuilder::ForJSTypedArrayLength() {
390 FieldAccess access = {kTaggedBase,
391 JSTypedArray::kLengthOffset,
394 TypeCache::Get().kJSTypedArrayLengthType,
395 MachineType::TaggedSigned(),
401 FieldAccess AccessBuilder::ForJSDateValue() {
402 FieldAccess access = {kTaggedBase,
403 JSDate::kValueOffset,
406 TypeCache::Get().kJSDateValueType,
407 MachineType::AnyTagged(),
413 FieldAccess AccessBuilder::ForJSDateField(JSDate::FieldIndex index) {
414 FieldAccess access = {
415 kTaggedBase, JSDate::kValueOffset + index * kPointerSize,
416 MaybeHandle<Name>(), MaybeHandle<Map>(),
417 Type::Number(), MachineType::AnyTagged(),
424 FieldAccess AccessBuilder::ForJSIteratorResultDone() {
425 FieldAccess access = {kTaggedBase, JSIteratorResult::kDoneOffset,
426 MaybeHandle<Name>(), MaybeHandle<Map>(),
427 Type::NonInternal(), MachineType::AnyTagged(),
434 FieldAccess AccessBuilder::ForJSIteratorResultValue() {
435 FieldAccess access = {kTaggedBase, JSIteratorResult::kValueOffset,
436 MaybeHandle<Name>(), MaybeHandle<Map>(),
437 Type::NonInternal(), MachineType::AnyTagged(),
443 FieldAccess AccessBuilder::ForJSRegExpData() {
444 FieldAccess access = {kTaggedBase, JSRegExp::kDataOffset,
445 MaybeHandle<Name>(), MaybeHandle<Map>(),
446 Type::NonInternal(), MachineType::AnyTagged(),
452 FieldAccess AccessBuilder::ForJSRegExpFlags() {
453 FieldAccess access = {kTaggedBase, JSRegExp::kFlagsOffset,
454 MaybeHandle<Name>(), MaybeHandle<Map>(),
455 Type::NonInternal(), MachineType::AnyTagged(),
461 FieldAccess AccessBuilder::ForJSRegExpLastIndex() {
462 FieldAccess access = {kTaggedBase, JSRegExp::kLastIndexOffset,
463 MaybeHandle<Name>(), MaybeHandle<Map>(),
464 Type::NonInternal(), MachineType::AnyTagged(),
470 FieldAccess AccessBuilder::ForJSRegExpSource() {
471 FieldAccess access = {kTaggedBase, JSRegExp::kSourceOffset,
472 MaybeHandle<Name>(), MaybeHandle<Map>(),
473 Type::NonInternal(), MachineType::AnyTagged(),
480 FieldAccess AccessBuilder::ForFixedArrayLength() {
481 FieldAccess access = {kTaggedBase,
482 FixedArray::kLengthOffset,
485 TypeCache::Get().kFixedArrayLengthType,
486 MachineType::TaggedSigned(),
492 FieldAccess AccessBuilder::ForPropertyArrayLengthAndHash() {
493 FieldAccess access = {
494 kTaggedBase, PropertyArray::kLengthAndHashOffset,
495 MaybeHandle<Name>(), MaybeHandle<Map>(),
496 Type::SignedSmall(), MachineType::TaggedSigned(),
502 FieldAccess AccessBuilder::ForFixedTypedArrayBaseBasePointer() {
503 FieldAccess access = {
504 kTaggedBase, FixedTypedArrayBase::kBasePointerOffset,
505 MaybeHandle<Name>(), MaybeHandle<Map>(),
506 Type::OtherInternal(), MachineType::AnyTagged(),
507 kPointerWriteBarrier, LoadSensitivity::kCritical};
512 FieldAccess AccessBuilder::ForFixedTypedArrayBaseExternalPointer() {
513 FieldAccess access = {kTaggedBase,
514 FixedTypedArrayBase::kExternalPointerOffset,
517 Type::ExternalPointer(),
518 MachineType::Pointer(),
520 LoadSensitivity::kCritical};
525 FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() {
526 FieldAccess access = {
527 kTaggedBase, DescriptorArray::kEnumCacheOffset,
528 Handle<Name>(), MaybeHandle<Map>(),
529 Type::OtherInternal(), MachineType::TaggedPointer(),
530 kPointerWriteBarrier};
535 FieldAccess AccessBuilder::ForMapBitField() {
536 FieldAccess access = {
537 kTaggedBase, Map::kBitFieldOffset, Handle<Name>(),
538 MaybeHandle<Map>(), TypeCache::Get().kUint8, MachineType::Uint8(),
544 FieldAccess AccessBuilder::ForMapBitField2() {
545 FieldAccess access = {
546 kTaggedBase, Map::kBitField2Offset, Handle<Name>(),
547 MaybeHandle<Map>(), TypeCache::Get().kUint8, MachineType::Uint8(),
553 FieldAccess AccessBuilder::ForMapBitField3() {
554 FieldAccess access = {
555 kTaggedBase, Map::kBitField3Offset, Handle<Name>(),
556 MaybeHandle<Map>(), TypeCache::Get().kInt32, MachineType::Int32(),
563 FieldAccess AccessBuilder::ForMapDescriptors() {
564 FieldAccess access = {kTaggedBase, Map::kDescriptorsOffset,
565 Handle<Name>(), MaybeHandle<Map>(),
566 Type::OtherInternal(), MachineType::TaggedPointer(),
567 kPointerWriteBarrier};
573 FieldAccess AccessBuilder::ForMapInstanceType() {
574 FieldAccess access = {
575 kTaggedBase, Map::kInstanceTypeOffset, Handle<Name>(),
576 MaybeHandle<Map>(), TypeCache::Get().kUint16, MachineType::Uint16(),
583 FieldAccess AccessBuilder::ForMapPrototype() {
584 FieldAccess access = {kTaggedBase, Map::kPrototypeOffset,
585 Handle<Name>(), MaybeHandle<Map>(),
586 Type::Any(), MachineType::TaggedPointer(),
587 kPointerWriteBarrier};
592 FieldAccess AccessBuilder::ForModuleRegularExports() {
593 FieldAccess access = {kTaggedBase, Module::kRegularExportsOffset,
594 Handle<Name>(), MaybeHandle<Map>(),
595 Type::OtherInternal(), MachineType::TaggedPointer(),
596 kPointerWriteBarrier};
601 FieldAccess AccessBuilder::ForModuleRegularImports() {
602 FieldAccess access = {kTaggedBase, Module::kRegularImportsOffset,
603 Handle<Name>(), MaybeHandle<Map>(),
604 Type::OtherInternal(), MachineType::TaggedPointer(),
605 kPointerWriteBarrier};
610 FieldAccess AccessBuilder::ForNameHashField() {
611 FieldAccess access = {kTaggedBase, Name::kHashFieldOffset,
612 Handle<Name>(), MaybeHandle<Map>(),
613 Type::Unsigned32(), MachineType::Uint32(),
619 FieldAccess AccessBuilder::ForStringLength() {
620 FieldAccess access = {kTaggedBase,
621 String::kLengthOffset,
624 TypeCache::Get().kStringLengthType,
625 MachineType::Uint32(),
631 FieldAccess AccessBuilder::ForConsStringFirst() {
632 FieldAccess access = {kTaggedBase, ConsString::kFirstOffset,
633 Handle<Name>(), MaybeHandle<Map>(),
634 Type::String(), MachineType::TaggedPointer(),
635 kPointerWriteBarrier};
640 FieldAccess AccessBuilder::ForConsStringSecond() {
641 FieldAccess access = {kTaggedBase, ConsString::kSecondOffset,
642 Handle<Name>(), MaybeHandle<Map>(),
643 Type::String(), MachineType::TaggedPointer(),
644 kPointerWriteBarrier};
649 FieldAccess AccessBuilder::ForThinStringActual() {
650 FieldAccess access = {kTaggedBase, ThinString::kActualOffset,
651 Handle<Name>(), MaybeHandle<Map>(),
652 Type::String(), MachineType::TaggedPointer(),
653 kPointerWriteBarrier};
658 FieldAccess AccessBuilder::ForSlicedStringOffset() {
659 FieldAccess access = {kTaggedBase, SlicedString::kOffsetOffset,
660 Handle<Name>(), MaybeHandle<Map>(),
661 Type::SignedSmall(), MachineType::TaggedSigned(),
667 FieldAccess AccessBuilder::ForSlicedStringParent() {
668 FieldAccess access = {kTaggedBase, SlicedString::kParentOffset,
669 Handle<Name>(), MaybeHandle<Map>(),
670 Type::String(), MachineType::TaggedPointer(),
671 kPointerWriteBarrier};
676 FieldAccess AccessBuilder::ForExternalStringResourceData() {
677 FieldAccess access = {kTaggedBase,
678 ExternalString::kResourceDataOffset,
681 Type::ExternalPointer(),
682 MachineType::Pointer(),
688 ElementAccess AccessBuilder::ForExternalOneByteStringCharacter() {
689 ElementAccess access = {kUntaggedBase, 0, TypeCache::Get().kUint8,
690 MachineType::Uint8(), kNoWriteBarrier};
695 ElementAccess AccessBuilder::ForExternalTwoByteStringCharacter() {
696 ElementAccess access = {kUntaggedBase, 0, TypeCache::Get().kUint16,
697 MachineType::Uint16(), kNoWriteBarrier};
702 ElementAccess AccessBuilder::ForSeqOneByteStringCharacter() {
703 ElementAccess access = {kTaggedBase, SeqOneByteString::kHeaderSize,
704 TypeCache::Get().kUint8, MachineType::Uint8(),
710 ElementAccess AccessBuilder::ForSeqTwoByteStringCharacter() {
711 ElementAccess access = {kTaggedBase, SeqTwoByteString::kHeaderSize,
712 TypeCache::Get().kUint16, MachineType::Uint16(),
718 FieldAccess AccessBuilder::ForJSGlobalObjectGlobalProxy() {
719 FieldAccess access = {kTaggedBase, JSGlobalObject::kGlobalProxyOffset,
720 Handle<Name>(), MaybeHandle<Map>(),
721 Type::Receiver(), MachineType::TaggedPointer(),
722 kPointerWriteBarrier};
727 FieldAccess AccessBuilder::ForJSGlobalObjectNativeContext() {
728 FieldAccess access = {
729 kTaggedBase, JSGlobalObject::kNativeContextOffset,
730 Handle<Name>(), MaybeHandle<Map>(),
731 Type::Internal(), MachineType::TaggedPointer(),
732 kPointerWriteBarrier};
737 FieldAccess AccessBuilder::ForJSGlobalProxyNativeContext() {
738 FieldAccess access = {
739 kTaggedBase, JSGlobalProxy::kNativeContextOffset,
740 Handle<Name>(), MaybeHandle<Map>(),
741 Type::Internal(), MachineType::TaggedPointer(),
742 kPointerWriteBarrier};
747 FieldAccess AccessBuilder::ForJSArrayIteratorIteratedObject() {
748 FieldAccess access = {
749 kTaggedBase, JSArrayIterator::kIteratedObjectOffset,
750 Handle<Name>(), MaybeHandle<Map>(),
751 Type::Receiver(), MachineType::TaggedPointer(),
752 kPointerWriteBarrier};
757 FieldAccess AccessBuilder::ForJSArrayIteratorNextIndex() {
760 FieldAccess access = {kTaggedBase,
761 JSArrayIterator::kNextIndexOffset,
764 TypeCache::Get().kPositiveSafeInteger,
765 MachineType::AnyTagged(),
771 FieldAccess AccessBuilder::ForJSArrayIteratorKind() {
772 FieldAccess access = {kTaggedBase,
773 JSArrayIterator::kKindOffset,
776 TypeCache::Get().kJSArrayIteratorKindType,
777 MachineType::TaggedSigned(),
783 FieldAccess AccessBuilder::ForJSStringIteratorString() {
784 FieldAccess access = {kTaggedBase, JSStringIterator::kStringOffset,
785 Handle<Name>(), MaybeHandle<Map>(),
786 Type::String(), MachineType::TaggedPointer(),
787 kPointerWriteBarrier};
792 FieldAccess AccessBuilder::ForJSStringIteratorIndex() {
793 FieldAccess access = {kTaggedBase,
794 JSStringIterator::kNextIndexOffset,
797 TypeCache::Get().kStringLengthType,
798 MachineType::TaggedSigned(),
804 FieldAccess AccessBuilder::ForValue() {
805 FieldAccess access = {kTaggedBase, JSValue::kValueOffset,
806 Handle<Name>(), MaybeHandle<Map>(),
807 Type::NonInternal(), MachineType::AnyTagged(),
814 FieldAccess AccessBuilder::ForArgumentsLength() {
815 FieldAccess access = {
816 kTaggedBase, JSArgumentsObjectWithLength::kLengthOffset,
817 Handle<Name>(), MaybeHandle<Map>(),
818 Type::NonInternal(), MachineType::AnyTagged(),
825 FieldAccess AccessBuilder::ForArgumentsCallee() {
826 FieldAccess access = {
827 kTaggedBase, JSSloppyArgumentsObject::kCalleeOffset,
828 Handle<Name>(), MaybeHandle<Map>(),
829 Type::NonInternal(), MachineType::AnyTagged(),
830 kPointerWriteBarrier};
836 FieldAccess AccessBuilder::ForFixedArraySlot(
837 size_t index, WriteBarrierKind write_barrier_kind) {
838 int offset = FixedArray::OffsetOfElementAt(static_cast<int>(index));
839 FieldAccess access = {kTaggedBase, offset,
840 Handle<Name>(), MaybeHandle<Map>(),
841 Type::Any(), MachineType::AnyTagged(),
848 FieldAccess AccessBuilder::ForCellValue() {
849 FieldAccess access = {kTaggedBase, Cell::kValueOffset,
850 Handle<Name>(), MaybeHandle<Map>(),
851 Type::Any(), MachineType::AnyTagged(),
852 kFullWriteBarrier, LoadSensitivity::kCritical};
857 FieldAccess AccessBuilder::ForContextSlot(
size_t index) {
858 int offset = Context::OffsetOfElementAt(static_cast<int>(index));
860 Context::SlotOffset(static_cast<int>(index)) + kHeapObjectTag);
861 FieldAccess access = {kTaggedBase, offset,
862 Handle<Name>(), MaybeHandle<Map>(),
863 Type::Any(), MachineType::AnyTagged(),
869 ElementAccess AccessBuilder::ForFixedArrayElement() {
870 ElementAccess access = {kTaggedBase, FixedArray::kHeaderSize, Type::Any(),
871 MachineType::AnyTagged(), kFullWriteBarrier};
876 ElementAccess AccessBuilder::ForFixedArrayElement(
877 ElementsKind kind, LoadSensitivity load_sensitivity) {
878 ElementAccess access = {kTaggedBase, FixedArray::kHeaderSize,
879 Type::Any(), MachineType::AnyTagged(),
880 kFullWriteBarrier, load_sensitivity};
882 case PACKED_SMI_ELEMENTS:
883 access.type = Type::SignedSmall();
884 access.machine_type = MachineType::TaggedSigned();
885 access.write_barrier_kind = kNoWriteBarrier;
887 case HOLEY_SMI_ELEMENTS:
888 access.type = TypeCache::Get().kHoleySmi;
890 case PACKED_ELEMENTS:
891 access.type = Type::NonInternal();
895 case PACKED_DOUBLE_ELEMENTS:
896 access.type = Type::Number();
897 access.write_barrier_kind = kNoWriteBarrier;
898 access.machine_type = MachineType::Float64();
900 case HOLEY_DOUBLE_ELEMENTS:
901 access.type = Type::NumberOrHole();
902 access.write_barrier_kind = kNoWriteBarrier;
903 access.machine_type = MachineType::Float64();
913 ElementAccess AccessBuilder::ForFixedDoubleArrayElement() {
914 ElementAccess access = {kTaggedBase, FixedDoubleArray::kHeaderSize,
915 TypeCache::Get().kFloat64, MachineType::Float64(),
921 FieldAccess AccessBuilder::ForEnumCacheKeys() {
922 FieldAccess access = {kTaggedBase, EnumCache::kKeysOffset,
923 MaybeHandle<Name>(), MaybeHandle<Map>(),
924 Type::OtherInternal(), MachineType::TaggedPointer(),
925 kPointerWriteBarrier};
930 FieldAccess AccessBuilder::ForEnumCacheIndices() {
931 FieldAccess access = {kTaggedBase, EnumCache::kIndicesOffset,
932 MaybeHandle<Name>(), MaybeHandle<Map>(),
933 Type::OtherInternal(), MachineType::TaggedPointer(),
934 kPointerWriteBarrier};
939 ElementAccess AccessBuilder::ForTypedArrayElement(
940 ExternalArrayType type,
bool is_external,
941 LoadSensitivity load_sensitivity) {
942 BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase;
943 int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset;
945 case kExternalInt8Array: {
946 ElementAccess access = {taggedness, header_size,
947 Type::Signed32(), MachineType::Int8(),
948 kNoWriteBarrier, load_sensitivity};
951 case kExternalUint8Array:
952 case kExternalUint8ClampedArray: {
953 ElementAccess access = {taggedness, header_size,
954 Type::Unsigned32(), MachineType::Uint8(),
955 kNoWriteBarrier, load_sensitivity};
958 case kExternalInt16Array: {
959 ElementAccess access = {taggedness, header_size,
960 Type::Signed32(), MachineType::Int16(),
961 kNoWriteBarrier, load_sensitivity};
964 case kExternalUint16Array: {
965 ElementAccess access = {taggedness, header_size,
966 Type::Unsigned32(), MachineType::Uint16(),
967 kNoWriteBarrier, load_sensitivity};
970 case kExternalInt32Array: {
971 ElementAccess access = {taggedness, header_size,
972 Type::Signed32(), MachineType::Int32(),
973 kNoWriteBarrier, load_sensitivity};
976 case kExternalUint32Array: {
977 ElementAccess access = {taggedness, header_size,
978 Type::Unsigned32(), MachineType::Uint32(),
979 kNoWriteBarrier, load_sensitivity};
982 case kExternalFloat32Array: {
983 ElementAccess access = {taggedness, header_size,
984 Type::Number(), MachineType::Float32(),
985 kNoWriteBarrier, load_sensitivity};
988 case kExternalFloat64Array: {
989 ElementAccess access = {taggedness, header_size,
990 Type::Number(), MachineType::Float64(),
991 kNoWriteBarrier, load_sensitivity};
994 case kExternalBigInt64Array:
995 case kExternalBigUint64Array:
1003 FieldAccess AccessBuilder::ForHashTableBaseNumberOfElements() {
1004 FieldAccess access = {
1006 FixedArray::OffsetOfElementAt(HashTableBase::kNumberOfElementsIndex),
1007 MaybeHandle<Name>(),
1009 Type::SignedSmall(),
1010 MachineType::TaggedSigned(),
1016 FieldAccess AccessBuilder::ForHashTableBaseNumberOfDeletedElement() {
1017 FieldAccess access = {
1018 kTaggedBase, FixedArray::OffsetOfElementAt(
1019 HashTableBase::kNumberOfDeletedElementsIndex),
1020 MaybeHandle<Name>(), MaybeHandle<Map>(), Type::SignedSmall(),
1021 MachineType::TaggedSigned(), kNoWriteBarrier};
1026 FieldAccess AccessBuilder::ForHashTableBaseCapacity() {
1027 FieldAccess access = {
1029 FixedArray::OffsetOfElementAt(HashTableBase::kCapacityIndex),
1030 MaybeHandle<Name>(),
1032 Type::SignedSmall(),
1033 MachineType::TaggedSigned(),
1039 FieldAccess AccessBuilder::ForOrderedHashMapOrSetNextTable() {
1042 STATIC_ASSERT(OrderedHashMap::kNextTableOffset ==
1043 OrderedHashSet::kNextTableOffset);
1044 FieldAccess
const access = {
1045 kTaggedBase, OrderedHashMap::kNextTableOffset,
1046 MaybeHandle<Name>(), MaybeHandle<Map>(),
1047 Type::Any(), MachineType::AnyTagged(),
1053 FieldAccess AccessBuilder::ForOrderedHashMapOrSetNumberOfBuckets() {
1056 STATIC_ASSERT(OrderedHashMap::kNumberOfBucketsOffset ==
1057 OrderedHashSet::kNumberOfBucketsOffset);
1058 FieldAccess
const access = {kTaggedBase,
1059 OrderedHashMap::kNumberOfBucketsOffset,
1060 MaybeHandle<Name>(),
1062 TypeCache::Get().kFixedArrayLengthType,
1063 MachineType::TaggedSigned(),
1069 FieldAccess AccessBuilder::ForOrderedHashMapOrSetNumberOfDeletedElements() {
1072 STATIC_ASSERT(OrderedHashMap::kNumberOfDeletedElementsOffset ==
1073 OrderedHashSet::kNumberOfDeletedElementsOffset);
1074 FieldAccess
const access = {kTaggedBase,
1075 OrderedHashMap::kNumberOfDeletedElementsOffset,
1076 MaybeHandle<Name>(),
1078 TypeCache::Get().kFixedArrayLengthType,
1079 MachineType::TaggedSigned(),
1085 FieldAccess AccessBuilder::ForOrderedHashMapOrSetNumberOfElements() {
1088 STATIC_ASSERT(OrderedHashMap::kNumberOfElementsOffset ==
1089 OrderedHashSet::kNumberOfElementsOffset);
1090 FieldAccess
const access = {kTaggedBase,
1091 OrderedHashMap::kNumberOfElementsOffset,
1092 MaybeHandle<Name>(),
1094 TypeCache::Get().kFixedArrayLengthType,
1095 MachineType::TaggedSigned(),
1101 ElementAccess AccessBuilder::ForOrderedHashMapEntryValue() {
1102 ElementAccess
const access = {kTaggedBase,
1103 OrderedHashMap::kHashTableStartOffset +
1104 OrderedHashMap::kValueOffset * kPointerSize,
1105 Type::Any(), MachineType::AnyTagged(),
1111 FieldAccess AccessBuilder::ForDictionaryMaxNumberKey() {
1112 FieldAccess access = {
1114 FixedArray::OffsetOfElementAt(NumberDictionary::kMaxNumberKeyIndex),
1115 MaybeHandle<Name>(),
1118 MachineType::AnyTagged(),
1124 FieldAccess AccessBuilder::ForDictionaryNextEnumerationIndex() {
1125 FieldAccess access = {
1127 FixedArray::OffsetOfElementAt(NameDictionary::kNextEnumerationIndexIndex),
1128 MaybeHandle<Name>(),
1130 Type::SignedSmall(),
1131 MachineType::TaggedSigned(),
1137 FieldAccess AccessBuilder::ForDictionaryObjectHashIndex() {
1138 FieldAccess access = {
1140 FixedArray::OffsetOfElementAt(NameDictionary::kObjectHashIndex),
1141 MaybeHandle<Name>(),
1143 Type::SignedSmall(),
1144 MachineType::TaggedSigned(),