Home | History | Annotate | Download | only in compiler
      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 #ifndef V8_COMPILER_ACCESS_BUILDER_H_
      6 #define V8_COMPILER_ACCESS_BUILDER_H_
      7 
      8 #include "src/base/compiler-specific.h"
      9 #include "src/compiler/simplified-operator.h"
     10 #include "src/elements-kind.h"
     11 #include "src/globals.h"
     12 
     13 namespace v8 {
     14 namespace internal {
     15 namespace compiler {
     16 
     17 // This access builder provides a set of static methods constructing commonly
     18 // used FieldAccess and ElementAccess descriptors. These descriptors serve as
     19 // parameters to simplified load/store operators.
     20 class V8_EXPORT_PRIVATE AccessBuilder final
     21     : public NON_EXPORTED_BASE(AllStatic) {
     22  public:
     23   // ===========================================================================
     24   // Access to external values (based on external references).
     25 
     26   // Provides access to a double field identified by an external reference.
     27   static FieldAccess ForExternalDoubleValue();
     28 
     29   // Provides access to a tagged field identified by an external reference.
     30   static FieldAccess ForExternalTaggedValue();
     31 
     32   // Provides access to an uint8 field identified by an external reference.
     33   static FieldAccess ForExternalUint8Value();
     34 
     35   // ===========================================================================
     36   // Access to heap object fields and elements (based on tagged pointer).
     37 
     38   // Provides access to HeapObject::map() field.
     39   static FieldAccess ForMap();
     40 
     41   // Provides access to HeapNumber::value() field.
     42   static FieldAccess ForHeapNumberValue();
     43 
     44   // Provides access to JSObject::properties() field.
     45   static FieldAccess ForJSObjectProperties();
     46 
     47   // Provides access to JSObject::elements() field.
     48   static FieldAccess ForJSObjectElements();
     49 
     50   // Provides access to JSObject inobject property fields.
     51   static FieldAccess ForJSObjectInObjectProperty(Handle<Map> map, int index);
     52   static FieldAccess ForJSObjectOffset(
     53       int offset, WriteBarrierKind write_barrier_kind = kFullWriteBarrier);
     54 
     55   // Provides access to JSCollecton::table() field.
     56   static FieldAccess ForJSCollectionTable();
     57 
     58   // Provides access to JSFunction::prototype_or_initial_map() field.
     59   static FieldAccess ForJSFunctionPrototypeOrInitialMap();
     60 
     61   // Provides access to JSFunction::context() field.
     62   static FieldAccess ForJSFunctionContext();
     63 
     64   // Provides access to JSFunction::shared() field.
     65   static FieldAccess ForJSFunctionSharedFunctionInfo();
     66 
     67   // Provides access to JSFunction::feedback_vector() field.
     68   static FieldAccess ForJSFunctionFeedbackVector();
     69 
     70   // Provides access to JSFunction::code() field.
     71   static FieldAccess ForJSFunctionCodeEntry();
     72 
     73   // Provides access to JSFunction::next_function_link() field.
     74   static FieldAccess ForJSFunctionNextFunctionLink();
     75 
     76   // Provides access to JSGeneratorObject::context() field.
     77   static FieldAccess ForJSGeneratorObjectContext();
     78 
     79   // Provides access to JSGeneratorObject::continuation() field.
     80   static FieldAccess ForJSGeneratorObjectContinuation();
     81 
     82   // Provides access to JSGeneratorObject::input_or_debug_pos() field.
     83   static FieldAccess ForJSGeneratorObjectInputOrDebugPos();
     84 
     85   // Provides access to JSGeneratorObject::register_file() field.
     86   static FieldAccess ForJSGeneratorObjectRegisterFile();
     87 
     88   // Provides access to JSGeneratorObject::resume_mode() field.
     89   static FieldAccess ForJSGeneratorObjectResumeMode();
     90 
     91   // Provides access to JSArray::length() field.
     92   static FieldAccess ForJSArrayLength(ElementsKind elements_kind);
     93 
     94   // Provides access to JSArrayBuffer::backing_store() field.
     95   static FieldAccess ForJSArrayBufferBackingStore();
     96 
     97   // Provides access to JSArrayBuffer::bit_field() field.
     98   static FieldAccess ForJSArrayBufferBitField();
     99 
    100   // Provides access to JSArrayBufferView::buffer() field.
    101   static FieldAccess ForJSArrayBufferViewBuffer();
    102 
    103   // Provides access to JSArrayBufferView::byteLength() field.
    104   static FieldAccess ForJSArrayBufferViewByteLength();
    105 
    106   // Provides access to JSArrayBufferView::byteOffset() field.
    107   static FieldAccess ForJSArrayBufferViewByteOffset();
    108 
    109   // Provides access to JSTypedArray::length() field.
    110   static FieldAccess ForJSTypedArrayLength();
    111 
    112   // Provides access to JSDate::value() field.
    113   static FieldAccess ForJSDateValue();
    114 
    115   // Provides access to JSDate fields.
    116   static FieldAccess ForJSDateField(JSDate::FieldIndex index);
    117 
    118   // Provides access to JSIteratorResult::done() field.
    119   static FieldAccess ForJSIteratorResultDone();
    120 
    121   // Provides access to JSIteratorResult::value() field.
    122   static FieldAccess ForJSIteratorResultValue();
    123 
    124   // Provides access to JSRegExp::flags() field.
    125   static FieldAccess ForJSRegExpFlags();
    126 
    127   // Provides access to JSRegExp::source() field.
    128   static FieldAccess ForJSRegExpSource();
    129 
    130   // Provides access to FixedArray::length() field.
    131   static FieldAccess ForFixedArrayLength();
    132 
    133   // Provides access to FixedTypedArrayBase::base_pointer() field.
    134   static FieldAccess ForFixedTypedArrayBaseBasePointer();
    135 
    136   // Provides access to FixedTypedArrayBase::external_pointer() field.
    137   static FieldAccess ForFixedTypedArrayBaseExternalPointer();
    138 
    139   // Provides access to DescriptorArray::enum_cache() field.
    140   static FieldAccess ForDescriptorArrayEnumCache();
    141 
    142   // Provides access to DescriptorArray::enum_cache_bridge_cache() field.
    143   static FieldAccess ForDescriptorArrayEnumCacheBridgeCache();
    144 
    145   // Provides access to Map::bit_field() byte.
    146   static FieldAccess ForMapBitField();
    147 
    148   // Provides access to Map::bit_field3() field.
    149   static FieldAccess ForMapBitField3();
    150 
    151   // Provides access to Map::descriptors() field.
    152   static FieldAccess ForMapDescriptors();
    153 
    154   // Provides access to Map::instance_type() field.
    155   static FieldAccess ForMapInstanceType();
    156 
    157   // Provides access to Map::prototype() field.
    158   static FieldAccess ForMapPrototype();
    159 
    160   // Provides access to Module::regular_exports() field.
    161   static FieldAccess ForModuleRegularExports();
    162 
    163   // Provides access to Module::regular_imports() field.
    164   static FieldAccess ForModuleRegularImports();
    165 
    166   // Provides access to Name::hash_field() field.
    167   static FieldAccess ForNameHashField();
    168 
    169   // Provides access to String::length() field.
    170   static FieldAccess ForStringLength();
    171 
    172   // Provides access to ConsString::first() field.
    173   static FieldAccess ForConsStringFirst();
    174 
    175   // Provides access to ConsString::second() field.
    176   static FieldAccess ForConsStringSecond();
    177 
    178   // Provides access to ThinString::actual() field.
    179   static FieldAccess ForThinStringActual();
    180 
    181   // Provides access to SlicedString::offset() field.
    182   static FieldAccess ForSlicedStringOffset();
    183 
    184   // Provides access to SlicedString::parent() field.
    185   static FieldAccess ForSlicedStringParent();
    186 
    187   // Provides access to ExternalString::resource_data() field.
    188   static FieldAccess ForExternalStringResourceData();
    189 
    190   // Provides access to ExternalOneByteString characters.
    191   static ElementAccess ForExternalOneByteStringCharacter();
    192 
    193   // Provides access to ExternalTwoByteString characters.
    194   static ElementAccess ForExternalTwoByteStringCharacter();
    195 
    196   // Provides access to SeqOneByteString characters.
    197   static ElementAccess ForSeqOneByteStringCharacter();
    198 
    199   // Provides access to SeqTwoByteString characters.
    200   static ElementAccess ForSeqTwoByteStringCharacter();
    201 
    202   // Provides access to JSGlobalObject::global_proxy() field.
    203   static FieldAccess ForJSGlobalObjectGlobalProxy();
    204 
    205   // Provides access to JSGlobalObject::native_context() field.
    206   static FieldAccess ForJSGlobalObjectNativeContext();
    207 
    208   // Provides access to JSArrayIterator::object() field.
    209   static FieldAccess ForJSArrayIteratorObject();
    210 
    211   // Provides access to JSArrayIterator::index() field.
    212   static FieldAccess ForJSArrayIteratorIndex(InstanceType type = JS_OBJECT_TYPE,
    213                                              ElementsKind kind = NO_ELEMENTS);
    214 
    215   // Provides access to JSArrayIterator::object_map() field.
    216   static FieldAccess ForJSArrayIteratorObjectMap();
    217 
    218   // Provides access to JSStringIterator::string() field.
    219   static FieldAccess ForJSStringIteratorString();
    220 
    221   // Provides access to JSStringIterator::index() field.
    222   static FieldAccess ForJSStringIteratorIndex();
    223 
    224   // Provides access to JSValue::value() field.
    225   static FieldAccess ForValue();
    226 
    227   // Provides access to Cell::value() field.
    228   static FieldAccess ForCellValue();
    229 
    230   // Provides access to arguments object fields.
    231   static FieldAccess ForArgumentsLength();
    232   static FieldAccess ForArgumentsCallee();
    233 
    234   // Provides access to FixedArray slots.
    235   static FieldAccess ForFixedArraySlot(
    236       size_t index, WriteBarrierKind write_barrier_kind = kFullWriteBarrier);
    237 
    238   // Provides access to Context slots.
    239   static FieldAccess ForContextSlot(size_t index);
    240 
    241   // Provides access to ContextExtension fields.
    242   static FieldAccess ForContextExtensionScopeInfo();
    243   static FieldAccess ForContextExtensionExtension();
    244 
    245   // Provides access to FixedArray elements.
    246   static ElementAccess ForFixedArrayElement();
    247   static ElementAccess ForFixedArrayElement(ElementsKind kind);
    248 
    249   // Provides access to FixedDoubleArray elements.
    250   static ElementAccess ForFixedDoubleArrayElement();
    251 
    252   // Provides access to Fixed{type}TypedArray and External{type}Array elements.
    253   static ElementAccess ForTypedArrayElement(ExternalArrayType type,
    254                                             bool is_external);
    255 
    256   // Provides access to HashTable fields.
    257   static FieldAccess ForHashTableBaseNumberOfElements();
    258   static FieldAccess ForHashTableBaseNumberOfDeletedElement();
    259   static FieldAccess ForHashTableBaseCapacity();
    260 
    261   // Provides access to Dictionary fields.
    262   static FieldAccess ForDictionaryMaxNumberKey();
    263   static FieldAccess ForDictionaryNextEnumerationIndex();
    264 
    265  private:
    266   DISALLOW_IMPLICIT_CONSTRUCTORS(AccessBuilder);
    267 };
    268 
    269 }  // namespace compiler
    270 }  // namespace internal
    271 }  // namespace v8
    272 
    273 #endif  // V8_COMPILER_ACCESS_BUILDER_H_
    274