240ffdcb5dac59d11998b0bf7cf0c0b386f61197
[platform/upstream/v8.git] / src / compiler / access-builder.h
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/compiler/simplified-operator.h"
9
10 namespace v8 {
11 namespace internal {
12 namespace compiler {
13
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 {
18  public:
19   // ===========================================================================
20   // Access to heap object fields and elements (based on tagged pointer).
21
22   // Provides access to HeapObject::map() field.
23   static FieldAccess ForMap();
24
25   // Provides access to JSObject::properties() field.
26   static FieldAccess ForJSObjectProperties();
27
28   // Provides access to JSObject::elements() field.
29   static FieldAccess ForJSObjectElements();
30
31   // Provides access to JSFunction::context() field.
32   static FieldAccess ForJSFunctionContext();
33
34   // Provides access to JSFunction::shared() field.
35   static FieldAccess ForJSFunctionSharedFunctionInfo();
36
37   // Provides access to JSArrayBuffer::backing_store() field.
38   static FieldAccess ForJSArrayBufferBackingStore();
39
40   // Provides access to JSDate fields.
41   static FieldAccess ForJSDateField(JSDate::FieldIndex index);
42
43   // Provides access to FixedArray::length() field.
44   static FieldAccess ForFixedArrayLength();
45
46   // Provides access to ExternalArray::external_pointer() field.
47   static FieldAccess ForExternalArrayPointer();
48
49   // Provides access to DescriptorArray::enum_cache() field.
50   static FieldAccess ForDescriptorArrayEnumCache();
51
52   // Provides access to DescriptorArray::enum_cache_bridge_cache() field.
53   static FieldAccess ForDescriptorArrayEnumCacheBridgeCache();
54
55   // Provides access to Map::bit_field3() field.
56   static FieldAccess ForMapBitField3();
57
58   // Provides access to Map::descriptors() field.
59   static FieldAccess ForMapDescriptors();
60
61   // Provides access to Map::instance_type() field.
62   static FieldAccess ForMapInstanceType();
63
64   // Provides access to String::length() field.
65   static FieldAccess ForStringLength(Zone* zone);
66
67   // Provides access to JSValue::value() field.
68   static FieldAccess ForValue();
69
70   // Provides access Context slots.
71   static FieldAccess ForContextSlot(size_t index);
72
73   // Provides access to PropertyCell::value() field.
74   static FieldAccess ForPropertyCellValue();
75
76   // Provides access to SharedFunctionInfo::feedback_vector() field.
77   static FieldAccess ForSharedFunctionInfoTypeFeedbackVector();
78
79   // Provides access to FixedArray elements.
80   static ElementAccess ForFixedArrayElement();
81
82   // Provides access to Fixed{type}TypedArray and External{type}Array elements.
83   static ElementAccess ForTypedArrayElement(ExternalArrayType type,
84                                             bool is_external);
85
86   // Provides access to the characters of sequential strings.
87   static ElementAccess ForSeqStringChar(String::Encoding encoding);
88
89   // ===========================================================================
90   // Access to global per-isolate variables (based on external reference).
91
92   // Provides access to the backing store of a StatsCounter.
93   static FieldAccess ForStatsCounter();
94
95   // ===========================================================================
96   // Access to activation records on the stack (based on frame pointer).
97
98   // Provides access to the next frame pointer in a stack frame.
99   static FieldAccess ForFrameCallerFramePtr();
100
101   // Provides access to the marker in a stack frame.
102   static FieldAccess ForFrameMarker();
103
104  private:
105   DISALLOW_IMPLICIT_CONSTRUCTORS(AccessBuilder);
106 };
107
108 }  // namespace compiler
109 }  // namespace internal
110 }  // namespace v8
111
112 #endif  // V8_COMPILER_ACCESS_BUILDER_H_