LCOV - code coverage report
Current view: top level - src/compiler - access-builder.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 249 274 90.9 %
Date: 2019-04-17 Functions: 95 104 91.3 %

          Line data    Source code
       1             : // Copyright 2014 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #include "src/compiler/access-builder.h"
       6             : 
       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/cell.h"
      15             : #include "src/objects/heap-number.h"
      16             : #include "src/objects/js-collection.h"
      17             : #include "src/objects/js-generator.h"
      18             : #include "src/objects/module.h"
      19             : #include "src/objects/ordered-hash-table.h"
      20             : 
      21             : namespace v8 {
      22             : namespace internal {
      23             : namespace compiler {
      24             : 
      25             : // static
      26      146422 : FieldAccess AccessBuilder::ForExternalIntPtr() {
      27             :   FieldAccess access = {kUntaggedBase,      0,           MaybeHandle<Name>(),
      28             :                         MaybeHandle<Map>(), Type::Any(), MachineType::IntPtr(),
      29             :                         kNoWriteBarrier};
      30      146422 :   return access;
      31             : }
      32             : 
      33             : // static
      34           0 : FieldAccess AccessBuilder::ForExternalUint8Value() {
      35             :   FieldAccess access = {kUntaggedBase,
      36             :                         0,
      37             :                         MaybeHandle<Name>(),
      38             :                         MaybeHandle<Map>(),
      39           0 :                         TypeCache::Get()->kUint8,
      40             :                         MachineType::Uint8(),
      41             :                         kNoWriteBarrier};
      42           0 :   return access;
      43             : }
      44             : 
      45             : // static
      46      471113 : FieldAccess AccessBuilder::ForMap() {
      47             :   FieldAccess access = {kTaggedBase,           HeapObject::kMapOffset,
      48             :                         MaybeHandle<Name>(),   MaybeHandle<Map>(),
      49             :                         Type::OtherInternal(), MachineType::TaggedPointer(),
      50             :                         kMapWriteBarrier};
      51      471113 :   return access;
      52             : }
      53             : 
      54             : // static
      55           0 : FieldAccess AccessBuilder::ForCompressedMap() {
      56             :   FieldAccess access = {kTaggedBase, HeapObject::kMapOffset,
      57             :                         MaybeHandle<Name>(), MaybeHandle<Map>(),
      58             :                         // We use MachineType::Uint32() for the compressed
      59             :                         // pointer load, because we want to examine it
      60             :                         // as a compressed pointer in map checks.
      61             :                         Type::OtherInternal(), MachineType::Uint32(),
      62             :                         kMapWriteBarrier, LoadSensitivity::kUnsafe};
      63           0 :   return access;
      64             : }
      65             : 
      66             : // static
      67      175263 : FieldAccess AccessBuilder::ForHeapNumberValue() {
      68             :   FieldAccess access = {
      69             :       kTaggedBase,        HeapNumber::kValueOffset,   MaybeHandle<Name>(),
      70      175263 :       MaybeHandle<Map>(), TypeCache::Get()->kFloat64, MachineType::Float64(),
      71             :       kNoWriteBarrier};
      72      175264 :   return access;
      73             : }
      74             : 
      75             : // static
      76       48110 : FieldAccess AccessBuilder::ForBigIntBitfield() {
      77             :   FieldAccess access = {
      78             :       kTaggedBase,        BigInt::kBitfieldOffset,  MaybeHandle<Name>(),
      79       48110 :       MaybeHandle<Map>(), TypeCache::Get()->kInt32, MachineType::Uint32(),
      80             :       kNoWriteBarrier};
      81       48110 :   return access;
      82             : }
      83             : 
      84             : // static
      85       89235 : FieldAccess AccessBuilder::ForJSObjectPropertiesOrHash() {
      86             :   FieldAccess access = {kTaggedBase,          JSObject::kPropertiesOrHashOffset,
      87             :                         MaybeHandle<Name>(),  MaybeHandle<Map>(),
      88             :                         Type::Any(),          MachineType::AnyTagged(),
      89             :                         kPointerWriteBarrier, LoadSensitivity::kCritical};
      90       89235 :   return access;
      91             : }
      92             : 
      93             : 
      94             : // static
      95      106222 : FieldAccess AccessBuilder::ForJSObjectElements() {
      96             :   FieldAccess access = {kTaggedBase,          JSObject::kElementsOffset,
      97             :                         MaybeHandle<Name>(),  MaybeHandle<Map>(),
      98             :                         Type::Internal(),     MachineType::TaggedPointer(),
      99             :                         kPointerWriteBarrier, LoadSensitivity::kCritical};
     100      106222 :   return access;
     101             : }
     102             : 
     103             : 
     104             : // static
     105       34569 : FieldAccess AccessBuilder::ForJSObjectInObjectProperty(const MapRef& map,
     106             :                                                        int index) {
     107       34569 :   int const offset = map.GetInObjectPropertyOffset(index);
     108             :   FieldAccess access = {kTaggedBase,         offset,
     109             :                         MaybeHandle<Name>(), MaybeHandle<Map>(),
     110             :                         Type::NonInternal(), MachineType::AnyTagged(),
     111             :                         kFullWriteBarrier};
     112       34569 :   return access;
     113             : }
     114             : 
     115             : // static
     116        3008 : FieldAccess AccessBuilder::ForJSObjectOffset(
     117             :     int offset, WriteBarrierKind write_barrier_kind) {
     118             :   FieldAccess access = {kTaggedBase,         offset,
     119             :                         MaybeHandle<Name>(), MaybeHandle<Map>(),
     120             :                         Type::NonInternal(), MachineType::AnyTagged(),
     121             :                         write_barrier_kind};
     122        3008 :   return access;
     123             : }
     124             : 
     125             : // static
     126         507 : FieldAccess AccessBuilder::ForJSCollectionTable() {
     127             :   FieldAccess access = {kTaggedBase,           JSCollection::kTableOffset,
     128             :                         MaybeHandle<Name>(),   MaybeHandle<Map>(),
     129             :                         Type::OtherInternal(), MachineType::TaggedPointer(),
     130             :                         kPointerWriteBarrier};
     131         507 :   return access;
     132             : }
     133             : 
     134             : // static
     135        1331 : FieldAccess AccessBuilder::ForJSCollectionIteratorTable() {
     136             :   FieldAccess access = {
     137             :       kTaggedBase,           JSCollectionIterator::kTableOffset,
     138             :       MaybeHandle<Name>(),   MaybeHandle<Map>(),
     139             :       Type::OtherInternal(), MachineType::TaggedPointer(),
     140             :       kPointerWriteBarrier};
     141        1331 :   return access;
     142             : }
     143             : 
     144             : // static
     145        1331 : FieldAccess AccessBuilder::ForJSCollectionIteratorIndex() {
     146             :   FieldAccess access = {kTaggedBase,
     147             :                         JSCollectionIterator::kIndexOffset,
     148             :                         MaybeHandle<Name>(),
     149             :                         MaybeHandle<Map>(),
     150        1331 :                         TypeCache::Get()->kFixedArrayLengthType,
     151             :                         MachineType::TaggedSigned(),
     152             :                         kNoWriteBarrier};
     153        1331 :   return access;
     154             : }
     155             : 
     156             : // static
     157        2271 : FieldAccess AccessBuilder::ForJSFunctionPrototypeOrInitialMap() {
     158             :   FieldAccess access = {
     159             :       kTaggedBase,         JSFunction::kPrototypeOrInitialMapOffset,
     160             :       MaybeHandle<Name>(), MaybeHandle<Map>(),
     161             :       Type::Any(),         MachineType::AnyTagged(),
     162             :       kFullWriteBarrier};
     163        2271 :   return access;
     164             : }
     165             : 
     166             : // static
     167       60201 : FieldAccess AccessBuilder::ForJSFunctionContext() {
     168             :   FieldAccess access = {kTaggedBase,         JSFunction::kContextOffset,
     169             :                         MaybeHandle<Name>(), MaybeHandle<Map>(),
     170             :                         Type::Internal(),    MachineType::AnyTagged(),
     171             :                         kPointerWriteBarrier};
     172       60201 :   return access;
     173             : }
     174             : 
     175             : 
     176             : // static
     177       32131 : FieldAccess AccessBuilder::ForJSFunctionSharedFunctionInfo() {
     178             :   FieldAccess access = {
     179             :       kTaggedBase,           JSFunction::kSharedFunctionInfoOffset,
     180             :       Handle<Name>(),        MaybeHandle<Map>(),
     181             :       Type::OtherInternal(), MachineType::TaggedPointer(),
     182             :       kPointerWriteBarrier};
     183       32131 :   return access;
     184             : }
     185             : 
     186             : // static
     187       32131 : FieldAccess AccessBuilder::ForJSFunctionFeedbackCell() {
     188             :   FieldAccess access = {kTaggedBase,         JSFunction::kFeedbackCellOffset,
     189             :                         Handle<Name>(),      MaybeHandle<Map>(),
     190             :                         Type::Internal(),    MachineType::TaggedPointer(),
     191             :                         kPointerWriteBarrier};
     192       32131 :   return access;
     193             : }
     194             : 
     195             : // static
     196       32131 : FieldAccess AccessBuilder::ForJSFunctionCode() {
     197             :   FieldAccess access = {kTaggedBase,           JSFunction::kCodeOffset,
     198             :                         Handle<Name>(),        MaybeHandle<Map>(),
     199             :                         Type::OtherInternal(), MachineType::TaggedPointer(),
     200             :                         kPointerWriteBarrier};
     201       32131 :   return access;
     202             : }
     203             : 
     204             : // static
     205         115 : FieldAccess AccessBuilder::ForJSBoundFunctionBoundTargetFunction() {
     206             :   FieldAccess access = {
     207             :       kTaggedBase,         JSBoundFunction::kBoundTargetFunctionOffset,
     208             :       Handle<Name>(),      MaybeHandle<Map>(),
     209             :       Type::Callable(),    MachineType::TaggedPointer(),
     210             :       kPointerWriteBarrier};
     211         115 :   return access;
     212             : }
     213             : 
     214             : // static
     215         115 : FieldAccess AccessBuilder::ForJSBoundFunctionBoundThis() {
     216             :   FieldAccess access = {kTaggedBase,         JSBoundFunction::kBoundThisOffset,
     217             :                         Handle<Name>(),      MaybeHandle<Map>(),
     218             :                         Type::NonInternal(), MachineType::AnyTagged(),
     219             :                         kFullWriteBarrier};
     220         115 :   return access;
     221             : }
     222             : 
     223             : // static
     224         115 : FieldAccess AccessBuilder::ForJSBoundFunctionBoundArguments() {
     225             :   FieldAccess access = {
     226             :       kTaggedBase,         JSBoundFunction::kBoundArgumentsOffset,
     227             :       Handle<Name>(),      MaybeHandle<Map>(),
     228             :       Type::Internal(),    MachineType::TaggedPointer(),
     229             :       kPointerWriteBarrier};
     230         115 :   return access;
     231             : }
     232             : 
     233             : // static
     234        9760 : FieldAccess AccessBuilder::ForJSGeneratorObjectContext() {
     235             :   FieldAccess access = {kTaggedBase,         JSGeneratorObject::kContextOffset,
     236             :                         Handle<Name>(),      MaybeHandle<Map>(),
     237             :                         Type::Internal(),    MachineType::TaggedPointer(),
     238             :                         kPointerWriteBarrier};
     239        9760 :   return access;
     240             : }
     241             : 
     242             : // static
     243        1606 : FieldAccess AccessBuilder::ForJSGeneratorObjectFunction() {
     244             :   FieldAccess access = {kTaggedBase,         JSGeneratorObject::kFunctionOffset,
     245             :                         Handle<Name>(),      MaybeHandle<Map>(),
     246             :                         Type::Function(),    MachineType::TaggedPointer(),
     247             :                         kPointerWriteBarrier};
     248        1606 :   return access;
     249             : }
     250             : 
     251             : // static
     252        1606 : FieldAccess AccessBuilder::ForJSGeneratorObjectReceiver() {
     253             :   FieldAccess access = {kTaggedBase,         JSGeneratorObject::kReceiverOffset,
     254             :                         Handle<Name>(),      MaybeHandle<Map>(),
     255             :                         Type::Internal(),    MachineType::TaggedPointer(),
     256             :                         kPointerWriteBarrier};
     257        1606 :   return access;
     258             : }
     259             : 
     260             : // static
     261        9942 : FieldAccess AccessBuilder::ForJSGeneratorObjectContinuation() {
     262             :   FieldAccess access = {
     263             :       kTaggedBase,         JSGeneratorObject::kContinuationOffset,
     264             :       Handle<Name>(),      MaybeHandle<Map>(),
     265             :       Type::SignedSmall(), MachineType::TaggedSigned(),
     266             :       kNoWriteBarrier};
     267        9942 :   return access;
     268             : }
     269             : 
     270             : // static
     271       13781 : FieldAccess AccessBuilder::ForJSGeneratorObjectInputOrDebugPos() {
     272             :   FieldAccess access = {
     273             :       kTaggedBase,         JSGeneratorObject::kInputOrDebugPosOffset,
     274             :       Handle<Name>(),      MaybeHandle<Map>(),
     275             :       Type::NonInternal(), MachineType::AnyTagged(),
     276             :       kFullWriteBarrier};
     277       13781 :   return access;
     278             : }
     279             : 
     280             : 
     281             : // static
     282       23070 : FieldAccess AccessBuilder::ForJSGeneratorObjectParametersAndRegisters() {
     283             :   FieldAccess access = {
     284             :       kTaggedBase,         JSGeneratorObject::kParametersAndRegistersOffset,
     285             :       Handle<Name>(),      MaybeHandle<Map>(),
     286             :       Type::Internal(),    MachineType::AnyTagged(),
     287             :       kPointerWriteBarrier};
     288       23070 :   return access;
     289             : }
     290             : 
     291             : // static
     292        8069 : FieldAccess AccessBuilder::ForJSGeneratorObjectResumeMode() {
     293             :   FieldAccess access = {
     294             :       kTaggedBase,         JSGeneratorObject::kResumeModeOffset,
     295             :       Handle<Name>(),      MaybeHandle<Map>(),
     296             :       Type::SignedSmall(), MachineType::TaggedSigned(),
     297             :       kNoWriteBarrier};
     298        8069 :   return access;
     299             : }
     300             : 
     301             : // static
     302        3231 : FieldAccess AccessBuilder::ForJSAsyncFunctionObjectPromise() {
     303             :   FieldAccess access = {
     304             :       kTaggedBase,         JSAsyncFunctionObject::kPromiseOffset,
     305             :       Handle<Name>(),      MaybeHandle<Map>(),
     306             :       Type::OtherObject(), MachineType::TaggedPointer(),
     307             :       kFullWriteBarrier};
     308        3231 :   return access;
     309             : }
     310             : 
     311             : // static
     312          35 : FieldAccess AccessBuilder::ForJSAsyncGeneratorObjectQueue() {
     313             :   FieldAccess access = {
     314             :       kTaggedBase,         JSAsyncGeneratorObject::kQueueOffset,
     315             :       Handle<Name>(),      MaybeHandle<Map>(),
     316             :       Type::NonInternal(), MachineType::AnyTagged(),
     317             :       kFullWriteBarrier};
     318          35 :   return access;
     319             : }
     320             : 
     321             : // static
     322          35 : FieldAccess AccessBuilder::ForJSAsyncGeneratorObjectIsAwaiting() {
     323             :   FieldAccess access = {
     324             :       kTaggedBase,         JSAsyncGeneratorObject::kIsAwaitingOffset,
     325             :       Handle<Name>(),      MaybeHandle<Map>(),
     326             :       Type::SignedSmall(), MachineType::TaggedSigned(),
     327             :       kNoWriteBarrier};
     328          35 :   return access;
     329             : }
     330             : 
     331             : // static
     332       33051 : FieldAccess AccessBuilder::ForJSArrayLength(ElementsKind elements_kind) {
     333       33051 :   TypeCache const* type_cache = TypeCache::Get();
     334             :   FieldAccess access = {kTaggedBase,
     335             :                         JSArray::kLengthOffset,
     336             :                         Handle<Name>(),
     337             :                         MaybeHandle<Map>(),
     338             :                         type_cache->kJSArrayLengthType,
     339             :                         MachineType::TaggedSigned(),
     340             :                         kFullWriteBarrier};
     341       33051 :   if (IsDoubleElementsKind(elements_kind)) {
     342        3731 :     access.type = type_cache->kFixedDoubleArrayLengthType;
     343        3731 :     access.write_barrier_kind = kNoWriteBarrier;
     344       29320 :   } else if (IsFastElementsKind(elements_kind)) {
     345       29320 :     access.type = type_cache->kFixedArrayLengthType;
     346       29320 :     access.write_barrier_kind = kNoWriteBarrier;
     347             :   }
     348       33051 :   return access;
     349             : }
     350             : 
     351             : 
     352             : // static
     353         478 : FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() {
     354             :   FieldAccess access = {
     355             :       kTaggedBase,           JSArrayBuffer::kBackingStoreOffset,
     356             :       MaybeHandle<Name>(),   MaybeHandle<Map>(),
     357             :       Type::OtherInternal(), MachineType::Pointer(),
     358             :       kNoWriteBarrier};
     359         478 :   return access;
     360             : }
     361             : 
     362             : // static
     363         312 : FieldAccess AccessBuilder::ForJSArrayBufferBitField() {
     364             :   FieldAccess access = {
     365             :       kTaggedBase,        JSArrayBuffer::kBitFieldOffset, MaybeHandle<Name>(),
     366         312 :       MaybeHandle<Map>(), TypeCache::Get()->kUint8,       MachineType::Uint32(),
     367             :       kNoWriteBarrier};
     368         312 :   return access;
     369             : }
     370             : 
     371             : // static
     372        6201 : FieldAccess AccessBuilder::ForJSArrayBufferViewBuffer() {
     373             :   FieldAccess access = {kTaggedBase,           JSArrayBufferView::kBufferOffset,
     374             :                         MaybeHandle<Name>(),   MaybeHandle<Map>(),
     375             :                         Type::OtherInternal(), MachineType::TaggedPointer(),
     376             :                         kPointerWriteBarrier};
     377        6201 :   return access;
     378             : }
     379             : 
     380             : // static
     381         267 : FieldAccess AccessBuilder::ForJSArrayBufferViewByteLength() {
     382             :   FieldAccess access = {kTaggedBase,
     383             :                         JSArrayBufferView::kByteLengthOffset,
     384             :                         MaybeHandle<Name>(),
     385             :                         MaybeHandle<Map>(),
     386         267 :                         TypeCache::Get()->kJSArrayBufferViewByteLengthType,
     387             :                         MachineType::UintPtr(),
     388             :                         kNoWriteBarrier};
     389         267 :   return access;
     390             : }
     391             : 
     392             : // static
     393         266 : FieldAccess AccessBuilder::ForJSArrayBufferViewByteOffset() {
     394             :   FieldAccess access = {kTaggedBase,
     395             :                         JSArrayBufferView::kByteOffsetOffset,
     396             :                         MaybeHandle<Name>(),
     397             :                         MaybeHandle<Map>(),
     398         266 :                         TypeCache::Get()->kJSArrayBufferViewByteOffsetType,
     399             :                         MachineType::UintPtr(),
     400             :                         kNoWriteBarrier};
     401         266 :   return access;
     402             : }
     403             : 
     404             : // static
     405        6385 : FieldAccess AccessBuilder::ForJSTypedArrayLength() {
     406             :   FieldAccess access = {kTaggedBase,
     407             :                         JSTypedArray::kLengthOffset,
     408             :                         MaybeHandle<Name>(),
     409             :                         MaybeHandle<Map>(),
     410        6385 :                         TypeCache::Get()->kJSTypedArrayLengthType,
     411             :                         MachineType::TaggedSigned(),
     412             :                         kNoWriteBarrier};
     413        6385 :   return access;
     414             : }
     415             : 
     416             : // static
     417           8 : FieldAccess AccessBuilder::ForJSDateValue() {
     418             :   FieldAccess access = {kTaggedBase,
     419             :                         JSDate::kValueOffset,
     420             :                         MaybeHandle<Name>(),
     421             :                         MaybeHandle<Map>(),
     422           8 :                         TypeCache::Get()->kJSDateValueType,
     423             :                         MachineType::AnyTagged(),
     424             :                         kFullWriteBarrier};
     425           8 :   return access;
     426             : }
     427             : 
     428             : // static
     429           0 : FieldAccess AccessBuilder::ForJSDateField(JSDate::FieldIndex index) {
     430             :   FieldAccess access = {
     431             :       kTaggedBase,         JSDate::kValueOffset + index * kTaggedSize,
     432             :       MaybeHandle<Name>(), MaybeHandle<Map>(),
     433             :       Type::Number(),      MachineType::AnyTagged(),
     434           0 :       kFullWriteBarrier};
     435           0 :   return access;
     436             : }
     437             : 
     438             : 
     439             : // static
     440        3025 : FieldAccess AccessBuilder::ForJSIteratorResultDone() {
     441             :   FieldAccess access = {kTaggedBase,         JSIteratorResult::kDoneOffset,
     442             :                         MaybeHandle<Name>(), MaybeHandle<Map>(),
     443             :                         Type::NonInternal(), MachineType::AnyTagged(),
     444             :                         kFullWriteBarrier};
     445        3025 :   return access;
     446             : }
     447             : 
     448             : 
     449             : // static
     450        3025 : FieldAccess AccessBuilder::ForJSIteratorResultValue() {
     451             :   FieldAccess access = {kTaggedBase,         JSIteratorResult::kValueOffset,
     452             :                         MaybeHandle<Name>(), MaybeHandle<Map>(),
     453             :                         Type::NonInternal(), MachineType::AnyTagged(),
     454             :                         kFullWriteBarrier};
     455        3025 :   return access;
     456             : }
     457             : 
     458             : // static
     459         574 : FieldAccess AccessBuilder::ForJSRegExpData() {
     460             :   FieldAccess access = {kTaggedBase,         JSRegExp::kDataOffset,
     461             :                         MaybeHandle<Name>(), MaybeHandle<Map>(),
     462             :                         Type::NonInternal(), MachineType::AnyTagged(),
     463             :                         kFullWriteBarrier};
     464         574 :   return access;
     465             : }
     466             : 
     467             : // static
     468         574 : FieldAccess AccessBuilder::ForJSRegExpFlags() {
     469             :   FieldAccess access = {kTaggedBase,         JSRegExp::kFlagsOffset,
     470             :                         MaybeHandle<Name>(), MaybeHandle<Map>(),
     471             :                         Type::NonInternal(), MachineType::AnyTagged(),
     472             :                         kFullWriteBarrier};
     473         574 :   return access;
     474             : }
     475             : 
     476             : // static
     477        1075 : FieldAccess AccessBuilder::ForJSRegExpLastIndex() {
     478             :   FieldAccess access = {kTaggedBase,         JSRegExp::kLastIndexOffset,
     479             :                         MaybeHandle<Name>(), MaybeHandle<Map>(),
     480             :                         Type::NonInternal(), MachineType::AnyTagged(),
     481             :                         kFullWriteBarrier};
     482        1075 :   return access;
     483             : }
     484             : 
     485             : // static
     486         574 : FieldAccess AccessBuilder::ForJSRegExpSource() {
     487             :   FieldAccess access = {kTaggedBase,         JSRegExp::kSourceOffset,
     488             :                         MaybeHandle<Name>(), MaybeHandle<Map>(),
     489             :                         Type::NonInternal(), MachineType::AnyTagged(),
     490             :                         kFullWriteBarrier};
     491         574 :   return access;
     492             : }
     493             : 
     494             : 
     495             : // static
     496       64442 : FieldAccess AccessBuilder::ForFixedArrayLength() {
     497             :   FieldAccess access = {kTaggedBase,
     498             :                         FixedArray::kLengthOffset,
     499             :                         MaybeHandle<Name>(),
     500             :                         MaybeHandle<Map>(),
     501       64442 :                         TypeCache::Get()->kFixedArrayLengthType,
     502             :                         MachineType::TaggedSigned(),
     503             :                         kNoWriteBarrier};
     504       64442 :   return access;
     505             : }
     506             : 
     507             : // static
     508        4358 : FieldAccess AccessBuilder::ForPropertyArrayLengthAndHash() {
     509             :   FieldAccess access = {
     510             :       kTaggedBase,         PropertyArray::kLengthAndHashOffset,
     511             :       MaybeHandle<Name>(), MaybeHandle<Map>(),
     512             :       Type::SignedSmall(), MachineType::TaggedSigned(),
     513             :       kNoWriteBarrier};
     514        4358 :   return access;
     515             : }
     516             : 
     517             : // static
     518        5627 : FieldAccess AccessBuilder::ForFixedTypedArrayBaseBasePointer() {
     519             :   FieldAccess access = {
     520             :       kTaggedBase,           FixedTypedArrayBase::kBasePointerOffset,
     521             :       MaybeHandle<Name>(),   MaybeHandle<Map>(),
     522             :       Type::OtherInternal(), MachineType::AnyTagged(),
     523             :       kPointerWriteBarrier,  LoadSensitivity::kCritical};
     524        5627 :   return access;
     525             : }
     526             : 
     527             : // static
     528        5627 : FieldAccess AccessBuilder::ForFixedTypedArrayBaseExternalPointer() {
     529             :   FieldAccess access = {kTaggedBase,
     530             :                         FixedTypedArrayBase::kExternalPointerOffset,
     531             :                         MaybeHandle<Name>(),
     532             :                         MaybeHandle<Map>(),
     533             :                         Type::ExternalPointer(),
     534             :                         MachineType::Pointer(),
     535             :                         kNoWriteBarrier,
     536             :                         LoadSensitivity::kCritical};
     537        5627 :   return access;
     538             : }
     539             : 
     540             : // static
     541        1682 : FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() {
     542             :   FieldAccess access = {
     543             :       kTaggedBase,           DescriptorArray::kEnumCacheOffset,
     544             :       Handle<Name>(),        MaybeHandle<Map>(),
     545             :       Type::OtherInternal(), MachineType::TaggedPointer(),
     546             :       kPointerWriteBarrier};
     547        1682 :   return access;
     548             : }
     549             : 
     550             : // static
     551       70251 : FieldAccess AccessBuilder::ForMapBitField() {
     552             :   FieldAccess access = {
     553             :       kTaggedBase,        Map::kBitFieldOffset,     Handle<Name>(),
     554       70251 :       MaybeHandle<Map>(), TypeCache::Get()->kUint8, MachineType::Uint8(),
     555             :       kNoWriteBarrier};
     556       70251 :   return access;
     557             : }
     558             : 
     559             : // static
     560         228 : FieldAccess AccessBuilder::ForMapBitField2() {
     561             :   FieldAccess access = {
     562             :       kTaggedBase,        Map::kBitField2Offset,    Handle<Name>(),
     563         228 :       MaybeHandle<Map>(), TypeCache::Get()->kUint8, MachineType::Uint8(),
     564             :       kNoWriteBarrier};
     565         228 :   return access;
     566             : }
     567             : 
     568             : // static
     569        1434 : FieldAccess AccessBuilder::ForMapBitField3() {
     570             :   FieldAccess access = {
     571             :       kTaggedBase,        Map::kBitField3Offset,    Handle<Name>(),
     572        1434 :       MaybeHandle<Map>(), TypeCache::Get()->kInt32, MachineType::Int32(),
     573             :       kNoWriteBarrier};
     574        1434 :   return access;
     575             : }
     576             : 
     577             : 
     578             : // static
     579        1682 : FieldAccess AccessBuilder::ForMapDescriptors() {
     580             :   FieldAccess access = {kTaggedBase,           Map::kDescriptorsOffset,
     581             :                         Handle<Name>(),        MaybeHandle<Map>(),
     582             :                         Type::OtherInternal(), MachineType::TaggedPointer(),
     583             :                         kPointerWriteBarrier};
     584        1682 :   return access;
     585             : }
     586             : 
     587             : 
     588             : // static
     589       87363 : FieldAccess AccessBuilder::ForMapInstanceType() {
     590             :   FieldAccess access = {
     591             :       kTaggedBase,        Map::kInstanceTypeOffset,  Handle<Name>(),
     592       87363 :       MaybeHandle<Map>(), TypeCache::Get()->kUint16, MachineType::Uint16(),
     593             :       kNoWriteBarrier};
     594       87363 :   return access;
     595             : }
     596             : 
     597             : 
     598             : // static
     599         674 : FieldAccess AccessBuilder::ForMapPrototype() {
     600             :   FieldAccess access = {kTaggedBase,         Map::kPrototypeOffset,
     601             :                         Handle<Name>(),      MaybeHandle<Map>(),
     602             :                         Type::Any(),         MachineType::TaggedPointer(),
     603             :                         kPointerWriteBarrier};
     604         674 :   return access;
     605             : }
     606             : 
     607             : // static
     608        7001 : FieldAccess AccessBuilder::ForModuleRegularExports() {
     609             :   FieldAccess access = {kTaggedBase,           Module::kRegularExportsOffset,
     610             :                         Handle<Name>(),        MaybeHandle<Map>(),
     611             :                         Type::OtherInternal(), MachineType::TaggedPointer(),
     612             :                         kPointerWriteBarrier};
     613        7001 :   return access;
     614             : }
     615             : 
     616             : // static
     617         103 : FieldAccess AccessBuilder::ForModuleRegularImports() {
     618             :   FieldAccess access = {kTaggedBase,           Module::kRegularImportsOffset,
     619             :                         Handle<Name>(),        MaybeHandle<Map>(),
     620             :                         Type::OtherInternal(), MachineType::TaggedPointer(),
     621             :                         kPointerWriteBarrier};
     622         103 :   return access;
     623             : }
     624             : 
     625             : // static
     626        7573 : FieldAccess AccessBuilder::ForNameHashField() {
     627             :   FieldAccess access = {kTaggedBase,        Name::kHashFieldOffset,
     628             :                         Handle<Name>(),     MaybeHandle<Map>(),
     629             :                         Type::Unsigned32(), MachineType::Uint32(),
     630             :                         kNoWriteBarrier};
     631        7573 :   return access;
     632             : }
     633             : 
     634             : // static
     635       31071 : FieldAccess AccessBuilder::ForStringLength() {
     636             :   FieldAccess access = {kTaggedBase,
     637             :                         String::kLengthOffset,
     638             :                         Handle<Name>(),
     639             :                         MaybeHandle<Map>(),
     640       31071 :                         TypeCache::Get()->kStringLengthType,
     641             :                         MachineType::Uint32(),
     642             :                         kNoWriteBarrier};
     643       31071 :   return access;
     644             : }
     645             : 
     646             : // static
     647        7290 : FieldAccess AccessBuilder::ForConsStringFirst() {
     648             :   FieldAccess access = {kTaggedBase,         ConsString::kFirstOffset,
     649             :                         Handle<Name>(),      MaybeHandle<Map>(),
     650             :                         Type::String(),      MachineType::TaggedPointer(),
     651             :                         kPointerWriteBarrier};
     652        7290 :   return access;
     653             : }
     654             : 
     655             : // static
     656        7290 : FieldAccess AccessBuilder::ForConsStringSecond() {
     657             :   FieldAccess access = {kTaggedBase,         ConsString::kSecondOffset,
     658             :                         Handle<Name>(),      MaybeHandle<Map>(),
     659             :                         Type::String(),      MachineType::TaggedPointer(),
     660             :                         kPointerWriteBarrier};
     661        7290 :   return access;
     662             : }
     663             : 
     664             : // static
     665        2379 : FieldAccess AccessBuilder::ForThinStringActual() {
     666             :   FieldAccess access = {kTaggedBase,         ThinString::kActualOffset,
     667             :                         Handle<Name>(),      MaybeHandle<Map>(),
     668             :                         Type::String(),      MachineType::TaggedPointer(),
     669             :                         kPointerWriteBarrier};
     670        2379 :   return access;
     671             : }
     672             : 
     673             : // static
     674        2270 : FieldAccess AccessBuilder::ForSlicedStringOffset() {
     675             :   FieldAccess access = {kTaggedBase,         SlicedString::kOffsetOffset,
     676             :                         Handle<Name>(),      MaybeHandle<Map>(),
     677             :                         Type::SignedSmall(), MachineType::TaggedSigned(),
     678             :                         kNoWriteBarrier};
     679        2270 :   return access;
     680             : }
     681             : 
     682             : // static
     683        2270 : FieldAccess AccessBuilder::ForSlicedStringParent() {
     684             :   FieldAccess access = {kTaggedBase,         SlicedString::kParentOffset,
     685             :                         Handle<Name>(),      MaybeHandle<Map>(),
     686             :                         Type::String(),      MachineType::TaggedPointer(),
     687             :                         kPointerWriteBarrier};
     688        2270 :   return access;
     689             : }
     690             : 
     691             : // static
     692        2270 : FieldAccess AccessBuilder::ForExternalStringResourceData() {
     693             :   FieldAccess access = {kTaggedBase,
     694             :                         ExternalString::kResourceDataOffset,
     695             :                         Handle<Name>(),
     696             :                         MaybeHandle<Map>(),
     697             :                         Type::ExternalPointer(),
     698             :                         MachineType::Pointer(),
     699             :                         kNoWriteBarrier};
     700        2270 :   return access;
     701             : }
     702             : 
     703             : // static
     704           0 : ElementAccess AccessBuilder::ForExternalOneByteStringCharacter() {
     705           0 :   ElementAccess access = {kUntaggedBase, 0, TypeCache::Get()->kUint8,
     706             :                           MachineType::Uint8(), kNoWriteBarrier};
     707           0 :   return access;
     708             : }
     709             : 
     710             : // static
     711           0 : ElementAccess AccessBuilder::ForExternalTwoByteStringCharacter() {
     712           0 :   ElementAccess access = {kUntaggedBase, 0, TypeCache::Get()->kUint16,
     713             :                           MachineType::Uint16(), kNoWriteBarrier};
     714           0 :   return access;
     715             : }
     716             : 
     717             : // static
     718        2270 : ElementAccess AccessBuilder::ForSeqOneByteStringCharacter() {
     719             :   ElementAccess access = {kTaggedBase, SeqOneByteString::kHeaderSize,
     720        2270 :                           TypeCache::Get()->kUint8, MachineType::Uint8(),
     721             :                           kNoWriteBarrier};
     722        2270 :   return access;
     723             : }
     724             : 
     725             : // static
     726        2270 : ElementAccess AccessBuilder::ForSeqTwoByteStringCharacter() {
     727             :   ElementAccess access = {kTaggedBase, SeqTwoByteString::kHeaderSize,
     728        2270 :                           TypeCache::Get()->kUint16, MachineType::Uint16(),
     729             :                           kNoWriteBarrier};
     730        2270 :   return access;
     731             : }
     732             : 
     733             : // static
     734           0 : FieldAccess AccessBuilder::ForJSGlobalObjectGlobalProxy() {
     735             :   FieldAccess access = {kTaggedBase,         JSGlobalObject::kGlobalProxyOffset,
     736             :                         Handle<Name>(),      MaybeHandle<Map>(),
     737             :                         Type::Receiver(),    MachineType::TaggedPointer(),
     738             :                         kPointerWriteBarrier};
     739           0 :   return access;
     740             : }
     741             : 
     742             : // static
     743           0 : FieldAccess AccessBuilder::ForJSGlobalObjectNativeContext() {
     744             :   FieldAccess access = {
     745             :       kTaggedBase,         JSGlobalObject::kNativeContextOffset,
     746             :       Handle<Name>(),      MaybeHandle<Map>(),
     747             :       Type::Internal(),    MachineType::TaggedPointer(),
     748             :       kPointerWriteBarrier};
     749           0 :   return access;
     750             : }
     751             : 
     752             : // static
     753         873 : FieldAccess AccessBuilder::ForJSGlobalProxyNativeContext() {
     754             :   FieldAccess access = {
     755             :       kTaggedBase,         JSGlobalProxy::kNativeContextOffset,
     756             :       Handle<Name>(),      MaybeHandle<Map>(),
     757             :       Type::Internal(),    MachineType::TaggedPointer(),
     758             :       kPointerWriteBarrier};
     759         873 :   return access;
     760             : }
     761             : 
     762             : // static
     763        1594 : FieldAccess AccessBuilder::ForJSArrayIteratorIteratedObject() {
     764             :   FieldAccess access = {
     765             :       kTaggedBase,         JSArrayIterator::kIteratedObjectOffset,
     766             :       Handle<Name>(),      MaybeHandle<Map>(),
     767             :       Type::Receiver(),    MachineType::TaggedPointer(),
     768             :       kPointerWriteBarrier};
     769        1594 :   return access;
     770             : }
     771             : 
     772             : // static
     773        1594 : FieldAccess AccessBuilder::ForJSArrayIteratorNextIndex() {
     774             :   // In generic case, cap to 2^53-1 (per ToLength() in spec) via
     775             :   // kPositiveSafeInteger
     776             :   FieldAccess access = {kTaggedBase,
     777             :                         JSArrayIterator::kNextIndexOffset,
     778             :                         Handle<Name>(),
     779             :                         MaybeHandle<Map>(),
     780        1594 :                         TypeCache::Get()->kPositiveSafeInteger,
     781             :                         MachineType::AnyTagged(),
     782             :                         kFullWriteBarrier};
     783        1594 :   return access;
     784             : }
     785             : 
     786             : // static
     787         981 : FieldAccess AccessBuilder::ForJSArrayIteratorKind() {
     788             :   FieldAccess access = {kTaggedBase,
     789             :                         JSArrayIterator::kKindOffset,
     790             :                         Handle<Name>(),
     791             :                         MaybeHandle<Map>(),
     792         981 :                         TypeCache::Get()->kJSArrayIteratorKindType,
     793             :                         MachineType::TaggedSigned(),
     794             :                         kNoWriteBarrier};
     795         981 :   return access;
     796             : }
     797             : 
     798             : // static
     799         149 : FieldAccess AccessBuilder::ForJSStringIteratorString() {
     800             :   FieldAccess access = {kTaggedBase,         JSStringIterator::kStringOffset,
     801             :                         Handle<Name>(),      MaybeHandle<Map>(),
     802             :                         Type::String(),      MachineType::TaggedPointer(),
     803             :                         kPointerWriteBarrier};
     804         149 :   return access;
     805             : }
     806             : 
     807             : // static
     808         236 : FieldAccess AccessBuilder::ForJSStringIteratorIndex() {
     809             :   FieldAccess access = {kTaggedBase,
     810             :                         JSStringIterator::kNextIndexOffset,
     811             :                         Handle<Name>(),
     812             :                         MaybeHandle<Map>(),
     813         236 :                         TypeCache::Get()->kStringLengthType,
     814             :                         MachineType::TaggedSigned(),
     815             :                         kNoWriteBarrier};
     816         236 :   return access;
     817             : }
     818             : 
     819             : // static
     820           0 : FieldAccess AccessBuilder::ForValue() {
     821             :   FieldAccess access = {kTaggedBase,         JSValue::kValueOffset,
     822             :                         Handle<Name>(),      MaybeHandle<Map>(),
     823             :                         Type::NonInternal(), MachineType::AnyTagged(),
     824             :                         kFullWriteBarrier};
     825           0 :   return access;
     826             : }
     827             : 
     828             : 
     829             : // static
     830       18104 : FieldAccess AccessBuilder::ForArgumentsLength() {
     831             :   FieldAccess access = {
     832             :       kTaggedBase,         JSArgumentsObjectWithLength::kLengthOffset,
     833             :       Handle<Name>(),      MaybeHandle<Map>(),
     834             :       Type::NonInternal(), MachineType::AnyTagged(),
     835             :       kFullWriteBarrier};
     836       18104 :   return access;
     837             : }
     838             : 
     839             : 
     840             : // static
     841       11923 : FieldAccess AccessBuilder::ForArgumentsCallee() {
     842             :   FieldAccess access = {
     843             :       kTaggedBase,         JSSloppyArgumentsObject::kCalleeOffset,
     844             :       Handle<Name>(),      MaybeHandle<Map>(),
     845             :       Type::NonInternal(), MachineType::AnyTagged(),
     846             :       kPointerWriteBarrier};
     847       11923 :   return access;
     848             : }
     849             : 
     850             : 
     851             : // static
     852     1627493 : FieldAccess AccessBuilder::ForFixedArraySlot(
     853             :     size_t index, WriteBarrierKind write_barrier_kind) {
     854     1627493 :   int offset = FixedArray::OffsetOfElementAt(static_cast<int>(index));
     855             :   FieldAccess access = {kTaggedBase,       offset,
     856             :                         Handle<Name>(),    MaybeHandle<Map>(),
     857             :                         Type::Any(),       MachineType::AnyTagged(),
     858             :                         write_barrier_kind};
     859     1627493 :   return access;
     860             : }
     861             : 
     862             : 
     863             : // static
     864        7249 : FieldAccess AccessBuilder::ForCellValue() {
     865             :   FieldAccess access = {kTaggedBase,       Cell::kValueOffset,
     866             :                         Handle<Name>(),    MaybeHandle<Map>(),
     867             :                         Type::Any(),       MachineType::AnyTagged(),
     868             :                         kFullWriteBarrier, LoadSensitivity::kCritical};
     869        7249 :   return access;
     870             : }
     871             : 
     872             : // static
     873     1043552 : FieldAccess AccessBuilder::ForContextSlot(size_t index) {
     874     1043552 :   int offset = Context::OffsetOfElementAt(static_cast<int>(index));
     875             :   DCHECK_EQ(offset,
     876             :             Context::SlotOffset(static_cast<int>(index)) + kHeapObjectTag);
     877             :   FieldAccess access = {kTaggedBase,      offset,
     878             :                         Handle<Name>(),   MaybeHandle<Map>(),
     879             :                         Type::Any(),      MachineType::AnyTagged(),
     880             :                         kFullWriteBarrier};
     881     1043552 :   return access;
     882             : }
     883             : 
     884             : // static
     885       19397 : ElementAccess AccessBuilder::ForFixedArrayElement() {
     886             :   ElementAccess access = {kTaggedBase, FixedArray::kHeaderSize, Type::Any(),
     887             :                           MachineType::AnyTagged(), kFullWriteBarrier};
     888       19397 :   return access;
     889             : }
     890             : 
     891             : // static
     892        6572 : ElementAccess AccessBuilder::ForFixedArrayElement(
     893             :     ElementsKind kind, LoadSensitivity load_sensitivity) {
     894             :   ElementAccess access = {kTaggedBase,       FixedArray::kHeaderSize,
     895             :                           Type::Any(),       MachineType::AnyTagged(),
     896             :                           kFullWriteBarrier, load_sensitivity};
     897        6572 :   switch (kind) {
     898             :     case PACKED_SMI_ELEMENTS:
     899        3312 :       access.type = Type::SignedSmall();
     900        3312 :       access.machine_type = MachineType::TaggedSigned();
     901        3312 :       access.write_barrier_kind = kNoWriteBarrier;
     902        3312 :       break;
     903             :     case HOLEY_SMI_ELEMENTS:
     904         669 :       access.type = TypeCache::Get()->kHoleySmi;
     905         669 :       break;
     906             :     case PACKED_ELEMENTS:
     907        1402 :       access.type = Type::NonInternal();
     908        1402 :       break;
     909             :     case HOLEY_ELEMENTS:
     910             :       break;
     911             :     case PACKED_DOUBLE_ELEMENTS:
     912         584 :       access.type = Type::Number();
     913         584 :       access.write_barrier_kind = kNoWriteBarrier;
     914         584 :       access.machine_type = MachineType::Float64();
     915         584 :       break;
     916             :     case HOLEY_DOUBLE_ELEMENTS:
     917         255 :       access.type = Type::NumberOrHole();
     918         255 :       access.write_barrier_kind = kNoWriteBarrier;
     919         255 :       access.machine_type = MachineType::Float64();
     920         255 :       break;
     921             :     default:
     922           0 :       UNREACHABLE();
     923             :       break;
     924             :   }
     925        6572 :   return access;
     926             : }
     927             : 
     928             : // static
     929         572 : ElementAccess AccessBuilder::ForStackArgument() {
     930             :   ElementAccess access = {
     931             :       kUntaggedBase,
     932             :       CommonFrameConstants::kFixedFrameSizeAboveFp - kSystemPointerSize,
     933             :       Type::NonInternal(), MachineType::Pointer(),
     934             :       WriteBarrierKind::kNoWriteBarrier};
     935         572 :   return access;
     936             : }
     937             : 
     938             : // static
     939         910 : ElementAccess AccessBuilder::ForFixedDoubleArrayElement() {
     940             :   ElementAccess access = {kTaggedBase, FixedDoubleArray::kHeaderSize,
     941         910 :                           TypeCache::Get()->kFloat64, MachineType::Float64(),
     942             :                           kNoWriteBarrier};
     943         910 :   return access;
     944             : }
     945             : 
     946             : // static
     947        1371 : FieldAccess AccessBuilder::ForEnumCacheKeys() {
     948             :   FieldAccess access = {kTaggedBase,           EnumCache::kKeysOffset,
     949             :                         MaybeHandle<Name>(),   MaybeHandle<Map>(),
     950             :                         Type::OtherInternal(), MachineType::TaggedPointer(),
     951             :                         kPointerWriteBarrier};
     952        1371 :   return access;
     953             : }
     954             : 
     955             : // static
     956         311 : FieldAccess AccessBuilder::ForEnumCacheIndices() {
     957             :   FieldAccess access = {kTaggedBase,           EnumCache::kIndicesOffset,
     958             :                         MaybeHandle<Name>(),   MaybeHandle<Map>(),
     959             :                         Type::OtherInternal(), MachineType::TaggedPointer(),
     960             :                         kPointerWriteBarrier};
     961         311 :   return access;
     962             : }
     963             : 
     964             : // static
     965        9389 : ElementAccess AccessBuilder::ForTypedArrayElement(
     966             :     ExternalArrayType type, bool is_external,
     967             :     LoadSensitivity load_sensitivity) {
     968        9389 :   BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase;
     969        9389 :   int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset;
     970        9389 :   switch (type) {
     971             :     case kExternalInt8Array: {
     972             :       ElementAccess access = {taggedness,       header_size,
     973             :                               Type::Signed32(), MachineType::Int8(),
     974             :                               kNoWriteBarrier,  load_sensitivity};
     975         771 :       return access;
     976             :     }
     977             :     case kExternalUint8Array:
     978             :     case kExternalUint8ClampedArray: {
     979             :       ElementAccess access = {taggedness,         header_size,
     980             :                               Type::Unsigned32(), MachineType::Uint8(),
     981             :                               kNoWriteBarrier,    load_sensitivity};
     982        2405 :       return access;
     983             :     }
     984             :     case kExternalInt16Array: {
     985             :       ElementAccess access = {taggedness,       header_size,
     986             :                               Type::Signed32(), MachineType::Int16(),
     987             :                               kNoWriteBarrier,  load_sensitivity};
     988         617 :       return access;
     989             :     }
     990             :     case kExternalUint16Array: {
     991             :       ElementAccess access = {taggedness,         header_size,
     992             :                               Type::Unsigned32(), MachineType::Uint16(),
     993             :                               kNoWriteBarrier,    load_sensitivity};
     994         831 :       return access;
     995             :     }
     996             :     case kExternalInt32Array: {
     997             :       ElementAccess access = {taggedness,       header_size,
     998             :                               Type::Signed32(), MachineType::Int32(),
     999             :                               kNoWriteBarrier,  load_sensitivity};
    1000         933 :       return access;
    1001             :     }
    1002             :     case kExternalUint32Array: {
    1003             :       ElementAccess access = {taggedness,         header_size,
    1004             :                               Type::Unsigned32(), MachineType::Uint32(),
    1005             :                               kNoWriteBarrier,    load_sensitivity};
    1006         880 :       return access;
    1007             :     }
    1008             :     case kExternalFloat32Array: {
    1009             :       ElementAccess access = {taggedness,      header_size,
    1010             :                               Type::Number(),  MachineType::Float32(),
    1011             :                               kNoWriteBarrier, load_sensitivity};
    1012        2050 :       return access;
    1013             :     }
    1014             :     case kExternalFloat64Array: {
    1015             :       ElementAccess access = {taggedness,      header_size,
    1016             :                               Type::Number(),  MachineType::Float64(),
    1017             :                               kNoWriteBarrier, load_sensitivity};
    1018         902 :       return access;
    1019             :     }
    1020             :     case kExternalBigInt64Array:
    1021             :     case kExternalBigUint64Array:
    1022             :       // TODO(neis/jkummerow): Define appropriate types.
    1023           0 :       UNIMPLEMENTED();
    1024             :   }
    1025           0 :   UNREACHABLE();
    1026             : }
    1027             : 
    1028             : // static
    1029          16 : FieldAccess AccessBuilder::ForHashTableBaseNumberOfElements() {
    1030             :   FieldAccess access = {
    1031             :       kTaggedBase,
    1032             :       FixedArray::OffsetOfElementAt(HashTableBase::kNumberOfElementsIndex),
    1033             :       MaybeHandle<Name>(),
    1034             :       MaybeHandle<Map>(),
    1035             :       Type::SignedSmall(),
    1036             :       MachineType::TaggedSigned(),
    1037             :       kNoWriteBarrier};
    1038          16 :   return access;
    1039             : }
    1040             : 
    1041             : // static
    1042          16 : FieldAccess AccessBuilder::ForHashTableBaseNumberOfDeletedElement() {
    1043             :   FieldAccess access = {
    1044             :       kTaggedBase, FixedArray::OffsetOfElementAt(
    1045             :                        HashTableBase::kNumberOfDeletedElementsIndex),
    1046             :       MaybeHandle<Name>(), MaybeHandle<Map>(), Type::SignedSmall(),
    1047             :       MachineType::TaggedSigned(), kNoWriteBarrier};
    1048          16 :   return access;
    1049             : }
    1050             : 
    1051             : // static
    1052          16 : FieldAccess AccessBuilder::ForHashTableBaseCapacity() {
    1053             :   FieldAccess access = {
    1054             :       kTaggedBase,
    1055             :       FixedArray::OffsetOfElementAt(HashTableBase::kCapacityIndex),
    1056             :       MaybeHandle<Name>(),
    1057             :       MaybeHandle<Map>(),
    1058             :       Type::SignedSmall(),
    1059             :       MachineType::TaggedSigned(),
    1060             :       kNoWriteBarrier};
    1061          16 :   return access;
    1062             : }
    1063             : 
    1064             : // static
    1065         280 : FieldAccess AccessBuilder::ForOrderedHashMapOrSetNextTable() {
    1066             :   // TODO(turbofan): This will be redundant with the HashTableBase
    1067             :   // methods above once the hash table unification is done.
    1068             :   STATIC_ASSERT(OrderedHashMap::NextTableOffset() ==
    1069             :                 OrderedHashSet::NextTableOffset());
    1070             :   FieldAccess const access = {
    1071             :       kTaggedBase,         OrderedHashMap::NextTableOffset(),
    1072             :       MaybeHandle<Name>(), MaybeHandle<Map>(),
    1073             :       Type::Any(),         MachineType::AnyTagged(),
    1074             :       kFullWriteBarrier};
    1075         280 :   return access;
    1076             : }
    1077             : 
    1078             : // static
    1079         296 : FieldAccess AccessBuilder::ForOrderedHashMapOrSetNumberOfBuckets() {
    1080             :   // TODO(turbofan): This will be redundant with the HashTableBase
    1081             :   // methods above once the hash table unification is done.
    1082             :   STATIC_ASSERT(OrderedHashMap::NumberOfBucketsOffset() ==
    1083             :                 OrderedHashSet::NumberOfBucketsOffset());
    1084             :   FieldAccess const access = {kTaggedBase,
    1085             :                               OrderedHashMap::NumberOfBucketsOffset(),
    1086             :                               MaybeHandle<Name>(),
    1087             :                               MaybeHandle<Map>(),
    1088         296 :                               TypeCache::Get()->kFixedArrayLengthType,
    1089             :                               MachineType::TaggedSigned(),
    1090             :                               kNoWriteBarrier};
    1091         296 :   return access;
    1092             : }
    1093             : 
    1094             : // static
    1095         280 : FieldAccess AccessBuilder::ForOrderedHashMapOrSetNumberOfDeletedElements() {
    1096             :   // TODO(turbofan): This will be redundant with the HashTableBase
    1097             :   // methods above once the hash table unification is done.
    1098             :   STATIC_ASSERT(OrderedHashMap::NumberOfDeletedElementsOffset() ==
    1099             :                 OrderedHashSet::NumberOfDeletedElementsOffset());
    1100             :   FieldAccess const access = {kTaggedBase,
    1101             :                               OrderedHashMap::NumberOfDeletedElementsOffset(),
    1102             :                               MaybeHandle<Name>(),
    1103             :                               MaybeHandle<Map>(),
    1104         280 :                               TypeCache::Get()->kFixedArrayLengthType,
    1105             :                               MachineType::TaggedSigned(),
    1106             :                               kNoWriteBarrier};
    1107         280 :   return access;
    1108             : }
    1109             : 
    1110             : // static
    1111         378 : FieldAccess AccessBuilder::ForOrderedHashMapOrSetNumberOfElements() {
    1112             :   // TODO(turbofan): This will be redundant with the HashTableBase
    1113             :   // methods above once the hash table unification is done.
    1114             :   STATIC_ASSERT(OrderedHashMap::NumberOfElementsOffset() ==
    1115             :                 OrderedHashSet::NumberOfElementsOffset());
    1116             :   FieldAccess const access = {kTaggedBase,
    1117             :                               OrderedHashMap::NumberOfElementsOffset(),
    1118             :                               MaybeHandle<Name>(),
    1119             :                               MaybeHandle<Map>(),
    1120         378 :                               TypeCache::Get()->kFixedArrayLengthType,
    1121             :                               MachineType::TaggedSigned(),
    1122             :                               kNoWriteBarrier};
    1123         378 :   return access;
    1124             : }
    1125             : 
    1126             : // static
    1127         113 : ElementAccess AccessBuilder::ForOrderedHashMapEntryValue() {
    1128             :   ElementAccess const access = {kTaggedBase,
    1129             :                                 OrderedHashMap::HashTableStartOffset() +
    1130             :                                     OrderedHashMap::kValueOffset * kTaggedSize,
    1131             :                                 Type::Any(), MachineType::AnyTagged(),
    1132             :                                 kFullWriteBarrier};
    1133         113 :   return access;
    1134             : }
    1135             : 
    1136             : // static
    1137           0 : FieldAccess AccessBuilder::ForDictionaryMaxNumberKey() {
    1138             :   FieldAccess access = {
    1139             :       kTaggedBase,
    1140             :       FixedArray::OffsetOfElementAt(NumberDictionary::kMaxNumberKeyIndex),
    1141             :       MaybeHandle<Name>(),
    1142             :       MaybeHandle<Map>(),
    1143             :       Type::Any(),
    1144             :       MachineType::AnyTagged(),
    1145             :       kNoWriteBarrier};
    1146           0 :   return access;
    1147             : }
    1148             : 
    1149             : // static
    1150          16 : FieldAccess AccessBuilder::ForDictionaryNextEnumerationIndex() {
    1151             :   FieldAccess access = {
    1152             :       kTaggedBase,
    1153             :       FixedArray::OffsetOfElementAt(NameDictionary::kNextEnumerationIndexIndex),
    1154             :       MaybeHandle<Name>(),
    1155             :       MaybeHandle<Map>(),
    1156             :       Type::SignedSmall(),
    1157             :       MachineType::TaggedSigned(),
    1158             :       kNoWriteBarrier};
    1159          16 :   return access;
    1160             : }
    1161             : 
    1162             : // static
    1163          16 : FieldAccess AccessBuilder::ForDictionaryObjectHashIndex() {
    1164             :   FieldAccess access = {
    1165             :       kTaggedBase,
    1166             :       FixedArray::OffsetOfElementAt(NameDictionary::kObjectHashIndex),
    1167             :       MaybeHandle<Name>(),
    1168             :       MaybeHandle<Map>(),
    1169             :       Type::SignedSmall(),
    1170             :       MachineType::TaggedSigned(),
    1171             :       kNoWriteBarrier};
    1172          16 :   return access;
    1173             : }
    1174             : 
    1175             : }  // namespace compiler
    1176             : }  // namespace internal
    1177      122004 : }  // namespace v8

Generated by: LCOV version 1.10