OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/compiler/access-builder.h" | 5 #include "src/compiler/access-builder.h" |
| 6 |
| 7 #include "src/contexts.h" |
| 8 #include "src/frames.h" |
| 9 #include "src/heap/heap.h" |
| 10 #include "src/type-cache.h" |
6 #include "src/types-inl.h" | 11 #include "src/types-inl.h" |
7 | 12 |
8 namespace v8 { | 13 namespace v8 { |
9 namespace internal { | 14 namespace internal { |
10 namespace compiler { | 15 namespace compiler { |
11 | 16 |
12 // static | 17 // static |
13 FieldAccess AccessBuilder::ForMap() { | 18 FieldAccess AccessBuilder::ForMap() { |
14 FieldAccess access = {kTaggedBase, HeapObject::kMapOffset, | 19 FieldAccess access = {kTaggedBase, HeapObject::kMapOffset, |
15 MaybeHandle<Name>(), Type::Any(), kMachAnyTagged}; | 20 MaybeHandle<Name>(), Type::Any(), kMachAnyTagged}; |
16 return access; | 21 return access; |
17 } | 22 } |
18 | 23 |
19 | 24 |
20 // static | 25 // static |
21 FieldAccess AccessBuilder::ForJSObjectProperties() { | 26 FieldAccess AccessBuilder::ForJSObjectProperties() { |
22 FieldAccess access = {kTaggedBase, JSObject::kPropertiesOffset, | 27 FieldAccess access = {kTaggedBase, JSObject::kPropertiesOffset, |
23 MaybeHandle<Name>(), Type::Any(), kMachAnyTagged}; | 28 MaybeHandle<Name>(), Type::Internal(), kMachAnyTagged}; |
24 return access; | 29 return access; |
25 } | 30 } |
26 | 31 |
27 | 32 |
28 // static | 33 // static |
29 FieldAccess AccessBuilder::ForJSObjectElements() { | 34 FieldAccess AccessBuilder::ForJSObjectElements() { |
30 FieldAccess access = {kTaggedBase, JSObject::kElementsOffset, | 35 FieldAccess access = {kTaggedBase, JSObject::kElementsOffset, |
31 MaybeHandle<Name>(), Type::Internal(), kMachAnyTagged}; | 36 MaybeHandle<Name>(), Type::Internal(), kMachAnyTagged}; |
32 return access; | 37 return access; |
33 } | 38 } |
(...skipping 26 matching lines...) Expand all Loading... |
60 // static | 65 // static |
61 FieldAccess AccessBuilder::ForJSDateField(JSDate::FieldIndex index) { | 66 FieldAccess AccessBuilder::ForJSDateField(JSDate::FieldIndex index) { |
62 FieldAccess access = {kTaggedBase, | 67 FieldAccess access = {kTaggedBase, |
63 JSDate::kValueOffset + index * kPointerSize, | 68 JSDate::kValueOffset + index * kPointerSize, |
64 MaybeHandle<Name>(), Type::Number(), kMachAnyTagged}; | 69 MaybeHandle<Name>(), Type::Number(), kMachAnyTagged}; |
65 return access; | 70 return access; |
66 } | 71 } |
67 | 72 |
68 | 73 |
69 // static | 74 // static |
70 FieldAccess AccessBuilder::ForFixedArrayLength(Zone* zone) { | 75 FieldAccess AccessBuilder::ForFixedArrayLength() { |
71 FieldAccess access = { | 76 FieldAccess access = {kTaggedBase, FixedArray::kLengthOffset, |
72 kTaggedBase, FixedArray::kLengthOffset, MaybeHandle<Name>(), | 77 MaybeHandle<Name>(), |
73 Type::Intersect(Type::Range(0, FixedArray::kMaxLength, zone), | 78 TypeCache::Get().kFixedArrayLengthType, kMachAnyTagged}; |
74 Type::TaggedSigned(), zone), | |
75 kMachAnyTagged}; | |
76 return access; | 79 return access; |
77 } | 80 } |
78 | 81 |
79 | 82 |
80 // static | 83 // static |
81 FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() { | 84 FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() { |
82 FieldAccess access = {kTaggedBase, DescriptorArray::kEnumCacheOffset, | 85 FieldAccess access = {kTaggedBase, DescriptorArray::kEnumCacheOffset, |
83 Handle<Name>(), Type::TaggedPointer(), kMachAnyTagged}; | 86 Handle<Name>(), Type::TaggedPointer(), kMachAnyTagged}; |
84 return access; | 87 return access; |
85 } | 88 } |
86 | 89 |
87 | 90 |
88 // static | 91 // static |
89 FieldAccess AccessBuilder::ForDescriptorArrayEnumCacheBridgeCache() { | 92 FieldAccess AccessBuilder::ForDescriptorArrayEnumCacheBridgeCache() { |
90 FieldAccess access = {kTaggedBase, | 93 FieldAccess access = {kTaggedBase, |
91 DescriptorArray::kEnumCacheBridgeCacheOffset, | 94 DescriptorArray::kEnumCacheBridgeCacheOffset, |
92 Handle<Name>(), Type::TaggedPointer(), kMachAnyTagged}; | 95 Handle<Name>(), Type::TaggedPointer(), kMachAnyTagged}; |
93 return access; | 96 return access; |
94 } | 97 } |
95 | 98 |
96 | 99 |
97 // static | 100 // static |
98 FieldAccess AccessBuilder::ForMapBitField3(Zone* zone) { | 101 FieldAccess AccessBuilder::ForMapBitField3() { |
99 FieldAccess access = { | 102 FieldAccess access = {kTaggedBase, Map::kBitField3Offset, Handle<Name>(), |
100 kTaggedBase, Map::kBitField3Offset, Handle<Name>(), | 103 TypeCache::Get().kInt32, kMachInt32}; |
101 Type::Intersect(Type::Signed32(), Type::UntaggedSigned32(), zone), | |
102 kMachInt32}; | |
103 return access; | 104 return access; |
104 } | 105 } |
105 | 106 |
106 | 107 |
107 // static | 108 // static |
108 FieldAccess AccessBuilder::ForMapDescriptors() { | 109 FieldAccess AccessBuilder::ForMapDescriptors() { |
109 FieldAccess access = {kTaggedBase, Map::kDescriptorsOffset, Handle<Name>(), | 110 FieldAccess access = {kTaggedBase, Map::kDescriptorsOffset, Handle<Name>(), |
110 Type::TaggedPointer(), kMachAnyTagged}; | 111 Type::TaggedPointer(), kMachAnyTagged}; |
111 return access; | 112 return access; |
112 } | 113 } |
113 | 114 |
114 | 115 |
115 // static | 116 // static |
116 FieldAccess AccessBuilder::ForMapInstanceType() { | 117 FieldAccess AccessBuilder::ForMapInstanceType() { |
117 FieldAccess access = {kTaggedBase, Map::kInstanceTypeOffset, Handle<Name>(), | 118 FieldAccess access = {kTaggedBase, Map::kInstanceTypeOffset, Handle<Name>(), |
118 Type::UntaggedUnsigned8(), kMachUint8}; | 119 TypeCache::Get().kUint8, kMachUint8}; |
119 return access; | 120 return access; |
120 } | 121 } |
121 | 122 |
122 | 123 |
123 // static | 124 // static |
124 FieldAccess AccessBuilder::ForStringLength(Zone* zone) { | 125 FieldAccess AccessBuilder::ForStringLength() { |
125 FieldAccess access = { | 126 FieldAccess access = {kTaggedBase, String::kLengthOffset, Handle<Name>(), |
126 kTaggedBase, String::kLengthOffset, Handle<Name>(), | 127 TypeCache::Get().kStringLengthType, kMachAnyTagged}; |
127 Type::Intersect(Type::Range(0, String::kMaxLength, zone), | |
128 Type::TaggedSigned(), zone), | |
129 kMachAnyTagged}; | |
130 return access; | 128 return access; |
131 } | 129 } |
132 | 130 |
133 | 131 |
134 // static | 132 // static |
135 FieldAccess AccessBuilder::ForGlobalObjectGlobalProxy() { | 133 FieldAccess AccessBuilder::ForGlobalObjectGlobalProxy() { |
136 FieldAccess access = {kTaggedBase, GlobalObject::kGlobalProxyOffset, | 134 FieldAccess access = {kTaggedBase, GlobalObject::kGlobalProxyOffset, |
137 Handle<Name>(), Type::Receiver(), kMachAnyTagged}; | 135 Handle<Name>(), Type::Receiver(), kMachAnyTagged}; |
138 return access; | 136 return access; |
139 } | 137 } |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 } | 292 } |
295 } | 293 } |
296 UNREACHABLE(); | 294 UNREACHABLE(); |
297 ElementAccess access = {kUntaggedBase, 0, Type::None(), kMachNone}; | 295 ElementAccess access = {kUntaggedBase, 0, Type::None(), kMachNone}; |
298 return access; | 296 return access; |
299 } | 297 } |
300 | 298 |
301 | 299 |
302 // static | 300 // static |
303 FieldAccess AccessBuilder::ForStatsCounter() { | 301 FieldAccess AccessBuilder::ForStatsCounter() { |
304 FieldAccess access = {kUntaggedBase, 0, MaybeHandle<Name>(), Type::Signed32(), | 302 FieldAccess access = {kUntaggedBase, 0, MaybeHandle<Name>(), |
305 kMachInt32}; | 303 TypeCache::Get().kInt32, kMachInt32}; |
306 return access; | 304 return access; |
307 } | 305 } |
308 | 306 |
309 | 307 |
310 // static | 308 // static |
311 FieldAccess AccessBuilder::ForFrameCallerFramePtr() { | 309 FieldAccess AccessBuilder::ForFrameCallerFramePtr() { |
312 FieldAccess access = {kUntaggedBase, StandardFrameConstants::kCallerFPOffset, | 310 FieldAccess access = {kUntaggedBase, StandardFrameConstants::kCallerFPOffset, |
313 MaybeHandle<Name>(), Type::Internal(), kMachPtr}; | 311 MaybeHandle<Name>(), Type::Internal(), kMachPtr}; |
314 return access; | 312 return access; |
315 } | 313 } |
316 | 314 |
317 | 315 |
318 // static | 316 // static |
319 FieldAccess AccessBuilder::ForFrameMarker() { | 317 FieldAccess AccessBuilder::ForFrameMarker() { |
320 FieldAccess access = {kUntaggedBase, StandardFrameConstants::kMarkerOffset, | 318 FieldAccess access = {kUntaggedBase, StandardFrameConstants::kMarkerOffset, |
321 MaybeHandle<Name>(), Type::Tagged(), kMachAnyTagged}; | 319 MaybeHandle<Name>(), Type::Tagged(), kMachAnyTagged}; |
322 return access; | 320 return access; |
323 } | 321 } |
324 | 322 |
325 } // namespace compiler | 323 } // namespace compiler |
326 } // namespace internal | 324 } // namespace internal |
327 } // namespace v8 | 325 } // namespace v8 |
OLD | NEW |