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.
5 #ifndef V8_COMPILER_ACCESS_BUILDER_H_
6 #define V8_COMPILER_ACCESS_BUILDER_H_
8 #include "src/compiler/simplified-operator.h"
14 // This access builder provides a set of static methods constructing commonly
15 // used FieldAccess and ElementAccess descriptors. These descriptors serve as
16 // parameters to simplified load/store operators.
17 class AccessBuilder final : public AllStatic {
19 // ===========================================================================
20 // Access to heap object fields and elements (based on tagged pointer).
22 // Provides access to HeapObject::map() field.
23 static FieldAccess ForMap();
25 // Provides access to JSObject::properties() field.
26 static FieldAccess ForJSObjectProperties();
28 // Provides access to JSObject::elements() field.
29 static FieldAccess ForJSObjectElements();
31 // Provides access to JSFunction::context() field.
32 static FieldAccess ForJSFunctionContext();
34 // Provides access to JSFunction::shared() field.
35 static FieldAccess ForJSFunctionSharedFunctionInfo();
37 // Provides access to JSArrayBuffer::backing_store() field.
38 static FieldAccess ForJSArrayBufferBackingStore();
40 // Provides access to JSDate fields.
41 static FieldAccess ForJSDateField(JSDate::FieldIndex index);
43 // Provides access to FixedArray::length() field.
44 static FieldAccess ForFixedArrayLength();
46 // Provides access to ExternalArray::external_pointer() field.
47 static FieldAccess ForExternalArrayPointer();
49 // Provides access to DescriptorArray::enum_cache() field.
50 static FieldAccess ForDescriptorArrayEnumCache();
52 // Provides access to DescriptorArray::enum_cache_bridge_cache() field.
53 static FieldAccess ForDescriptorArrayEnumCacheBridgeCache();
55 // Provides access to Map::bit_field3() field.
56 static FieldAccess ForMapBitField3();
58 // Provides access to Map::descriptors() field.
59 static FieldAccess ForMapDescriptors();
61 // Provides access to Map::instance_type() field.
62 static FieldAccess ForMapInstanceType();
64 // Provides access to String::length() field.
65 static FieldAccess ForStringLength(Zone* zone);
67 // Provides access to JSValue::value() field.
68 static FieldAccess ForValue();
70 // Provides access Context slots.
71 static FieldAccess ForContextSlot(size_t index);
73 // Provides access to PropertyCell::value() field.
74 static FieldAccess ForPropertyCellValue();
76 // Provides access to SharedFunctionInfo::feedback_vector() field.
77 static FieldAccess ForSharedFunctionInfoTypeFeedbackVector();
79 // Provides access to FixedArray elements.
80 static ElementAccess ForFixedArrayElement();
82 // Provides access to Fixed{type}TypedArray and External{type}Array elements.
83 static ElementAccess ForTypedArrayElement(ExternalArrayType type,
86 // Provides access to the characters of sequential strings.
87 static ElementAccess ForSeqStringChar(String::Encoding encoding);
89 // ===========================================================================
90 // Access to global per-isolate variables (based on external reference).
92 // Provides access to the backing store of a StatsCounter.
93 static FieldAccess ForStatsCounter();
95 // ===========================================================================
96 // Access to activation records on the stack (based on frame pointer).
98 // Provides access to the next frame pointer in a stack frame.
99 static FieldAccess ForFrameCallerFramePtr();
101 // Provides access to the marker in a stack frame.
102 static FieldAccess ForFrameMarker();
105 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessBuilder);
108 } // namespace compiler
109 } // namespace internal
112 #endif // V8_COMPILER_ACCESS_BUILDER_H_