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 | 6 |
7 #include "src/compiler/type-cache.h" | 7 #include "src/compiler/type-cache.h" |
8 #include "src/contexts.h" | 8 #include "src/contexts.h" |
9 #include "src/frames.h" | 9 #include "src/frames.h" |
10 #include "src/handles-inl.h" | 10 #include "src/handles-inl.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 } | 61 } |
62 | 62 |
63 | 63 |
64 // static | 64 // static |
65 FieldAccess AccessBuilder::ForJSObjectInObjectProperty(Handle<Map> map, | 65 FieldAccess AccessBuilder::ForJSObjectInObjectProperty(Handle<Map> map, |
66 int index) { | 66 int index) { |
67 int const offset = map->GetInObjectPropertyOffset(index); | 67 int const offset = map->GetInObjectPropertyOffset(index); |
68 FieldAccess access = {kTaggedBase, | 68 FieldAccess access = {kTaggedBase, |
69 offset, | 69 offset, |
70 MaybeHandle<Name>(), | 70 MaybeHandle<Name>(), |
71 Type::Tagged(), | 71 Type::NonInternal(), |
72 MachineType::AnyTagged(), | 72 MachineType::AnyTagged(), |
73 kFullWriteBarrier}; | 73 kFullWriteBarrier}; |
74 return access; | 74 return access; |
75 } | 75 } |
76 | 76 |
77 | 77 |
78 // static | 78 // static |
79 FieldAccess AccessBuilder::ForJSFunctionPrototypeOrInitialMap() { | 79 FieldAccess AccessBuilder::ForJSFunctionPrototypeOrInitialMap() { |
80 FieldAccess access = {kTaggedBase, | 80 FieldAccess access = {kTaggedBase, |
81 JSFunction::kPrototypeOrInitialMapOffset, | 81 JSFunction::kPrototypeOrInitialMapOffset, |
(...skipping 27 matching lines...) Expand all Loading... |
109 // static | 109 // static |
110 FieldAccess AccessBuilder::ForJSFunctionLiterals() { | 110 FieldAccess AccessBuilder::ForJSFunctionLiterals() { |
111 FieldAccess access = { | 111 FieldAccess access = { |
112 kTaggedBase, JSFunction::kLiteralsOffset, Handle<Name>(), | 112 kTaggedBase, JSFunction::kLiteralsOffset, Handle<Name>(), |
113 Type::Internal(), MachineType::AnyTagged(), kPointerWriteBarrier}; | 113 Type::Internal(), MachineType::AnyTagged(), kPointerWriteBarrier}; |
114 return access; | 114 return access; |
115 } | 115 } |
116 | 116 |
117 // static | 117 // static |
118 FieldAccess AccessBuilder::ForJSFunctionCodeEntry() { | 118 FieldAccess AccessBuilder::ForJSFunctionCodeEntry() { |
119 FieldAccess access = {kTaggedBase, | 119 FieldAccess access = { |
120 JSFunction::kCodeEntryOffset, | 120 kTaggedBase, JSFunction::kCodeEntryOffset, Handle<Name>(), |
121 Handle<Name>(), | 121 Type::OtherInternal(), MachineType::Pointer(), kNoWriteBarrier}; |
122 Type::UntaggedPointer(), | |
123 MachineType::Pointer(), | |
124 kNoWriteBarrier}; | |
125 return access; | 122 return access; |
126 } | 123 } |
127 | 124 |
128 // static | 125 // static |
129 FieldAccess AccessBuilder::ForJSFunctionNextFunctionLink() { | 126 FieldAccess AccessBuilder::ForJSFunctionNextFunctionLink() { |
130 FieldAccess access = {kTaggedBase, | 127 FieldAccess access = {kTaggedBase, |
131 JSFunction::kNextFunctionLinkOffset, | 128 JSFunction::kNextFunctionLinkOffset, |
132 Handle<Name>(), | 129 Handle<Name>(), |
133 Type::Any(), | 130 Type::Any(), |
134 MachineType::AnyTagged(), | 131 MachineType::AnyTagged(), |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 } | 208 } |
212 return access; | 209 return access; |
213 } | 210 } |
214 | 211 |
215 | 212 |
216 // static | 213 // static |
217 FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() { | 214 FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() { |
218 FieldAccess access = {kTaggedBase, | 215 FieldAccess access = {kTaggedBase, |
219 JSArrayBuffer::kBackingStoreOffset, | 216 JSArrayBuffer::kBackingStoreOffset, |
220 MaybeHandle<Name>(), | 217 MaybeHandle<Name>(), |
221 Type::UntaggedPointer(), | 218 Type::OtherInternal(), |
222 MachineType::Pointer(), | 219 MachineType::Pointer(), |
223 kNoWriteBarrier}; | 220 kNoWriteBarrier}; |
224 return access; | 221 return access; |
225 } | 222 } |
226 | 223 |
227 // static | 224 // static |
228 FieldAccess AccessBuilder::ForJSArrayBufferBitField() { | 225 FieldAccess AccessBuilder::ForJSArrayBufferBitField() { |
229 FieldAccess access = {kTaggedBase, JSArrayBuffer::kBitFieldOffset, | 226 FieldAccess access = {kTaggedBase, JSArrayBuffer::kBitFieldOffset, |
230 MaybeHandle<Name>(), TypeCache::Get().kUint8, | 227 MaybeHandle<Name>(), TypeCache::Get().kUint8, |
231 MachineType::Uint32(), kNoWriteBarrier}; | 228 MachineType::Uint32(), kNoWriteBarrier}; |
232 return access; | 229 return access; |
233 } | 230 } |
234 | 231 |
235 // static | 232 // static |
236 FieldAccess AccessBuilder::ForJSArrayBufferViewBuffer() { | 233 FieldAccess AccessBuilder::ForJSArrayBufferViewBuffer() { |
237 FieldAccess access = {kTaggedBase, | 234 FieldAccess access = {kTaggedBase, |
238 JSArrayBufferView::kBufferOffset, | 235 JSArrayBufferView::kBufferOffset, |
239 MaybeHandle<Name>(), | 236 MaybeHandle<Name>(), |
240 Type::TaggedPointer(), | 237 Type::OtherInternal(), |
241 MachineType::TaggedPointer(), | 238 MachineType::TaggedPointer(), |
242 kPointerWriteBarrier}; | 239 kPointerWriteBarrier}; |
243 return access; | 240 return access; |
244 } | 241 } |
245 | 242 |
246 // static | 243 // static |
247 FieldAccess AccessBuilder::ForJSArrayBufferViewByteLength() { | 244 FieldAccess AccessBuilder::ForJSArrayBufferViewByteLength() { |
248 FieldAccess access = {kTaggedBase, | 245 FieldAccess access = {kTaggedBase, |
249 JSArrayBufferView::kByteLengthOffset, | 246 JSArrayBufferView::kByteLengthOffset, |
250 MaybeHandle<Name>(), | 247 MaybeHandle<Name>(), |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 FieldAccess access = { | 310 FieldAccess access = { |
314 kTaggedBase, JSIteratorResult::kValueOffset, MaybeHandle<Name>(), | 311 kTaggedBase, JSIteratorResult::kValueOffset, MaybeHandle<Name>(), |
315 Type::NonInternal(), MachineType::AnyTagged(), kFullWriteBarrier}; | 312 Type::NonInternal(), MachineType::AnyTagged(), kFullWriteBarrier}; |
316 return access; | 313 return access; |
317 } | 314 } |
318 | 315 |
319 | 316 |
320 // static | 317 // static |
321 FieldAccess AccessBuilder::ForJSRegExpFlags() { | 318 FieldAccess AccessBuilder::ForJSRegExpFlags() { |
322 FieldAccess access = { | 319 FieldAccess access = { |
323 kTaggedBase, JSRegExp::kFlagsOffset, MaybeHandle<Name>(), | 320 kTaggedBase, JSRegExp::kFlagsOffset, MaybeHandle<Name>(), |
324 Type::Tagged(), MachineType::AnyTagged(), kFullWriteBarrier}; | 321 Type::NonInternal(), MachineType::AnyTagged(), kFullWriteBarrier}; |
325 return access; | 322 return access; |
326 } | 323 } |
327 | 324 |
328 | 325 |
329 // static | 326 // static |
330 FieldAccess AccessBuilder::ForJSRegExpSource() { | 327 FieldAccess AccessBuilder::ForJSRegExpSource() { |
331 FieldAccess access = { | 328 FieldAccess access = { |
332 kTaggedBase, JSRegExp::kSourceOffset, MaybeHandle<Name>(), | 329 kTaggedBase, JSRegExp::kSourceOffset, MaybeHandle<Name>(), |
333 Type::Tagged(), MachineType::AnyTagged(), kFullWriteBarrier}; | 330 Type::NonInternal(), MachineType::AnyTagged(), kFullWriteBarrier}; |
334 return access; | 331 return access; |
335 } | 332 } |
336 | 333 |
337 | 334 |
338 // static | 335 // static |
339 FieldAccess AccessBuilder::ForFixedArrayLength() { | 336 FieldAccess AccessBuilder::ForFixedArrayLength() { |
340 FieldAccess access = {kTaggedBase, | 337 FieldAccess access = {kTaggedBase, |
341 FixedArray::kLengthOffset, | 338 FixedArray::kLengthOffset, |
342 MaybeHandle<Name>(), | 339 MaybeHandle<Name>(), |
343 TypeCache::Get().kFixedArrayLengthType, | 340 TypeCache::Get().kFixedArrayLengthType, |
344 MachineType::TaggedSigned(), | 341 MachineType::TaggedSigned(), |
345 kNoWriteBarrier}; | 342 kNoWriteBarrier}; |
346 return access; | 343 return access; |
347 } | 344 } |
348 | 345 |
349 // static | 346 // static |
350 FieldAccess AccessBuilder::ForFixedTypedArrayBaseBasePointer() { | 347 FieldAccess AccessBuilder::ForFixedTypedArrayBaseBasePointer() { |
351 FieldAccess access = {kTaggedBase, | 348 FieldAccess access = {kTaggedBase, |
352 FixedTypedArrayBase::kBasePointerOffset, | 349 FixedTypedArrayBase::kBasePointerOffset, |
353 MaybeHandle<Name>(), | 350 MaybeHandle<Name>(), |
354 Type::Tagged(), | 351 Type::OtherInternal(), |
355 MachineType::AnyTagged(), | 352 MachineType::AnyTagged(), |
356 kPointerWriteBarrier}; | 353 kPointerWriteBarrier}; |
357 return access; | 354 return access; |
358 } | 355 } |
359 | 356 |
360 // static | 357 // static |
361 FieldAccess AccessBuilder::ForFixedTypedArrayBaseExternalPointer() { | 358 FieldAccess AccessBuilder::ForFixedTypedArrayBaseExternalPointer() { |
362 FieldAccess access = {kTaggedBase, | 359 FieldAccess access = {kTaggedBase, |
363 FixedTypedArrayBase::kExternalPointerOffset, | 360 FixedTypedArrayBase::kExternalPointerOffset, |
364 MaybeHandle<Name>(), | 361 MaybeHandle<Name>(), |
365 Type::UntaggedPointer(), | 362 Type::OtherInternal(), |
366 MachineType::Pointer(), | 363 MachineType::Pointer(), |
367 kNoWriteBarrier}; | 364 kNoWriteBarrier}; |
368 return access; | 365 return access; |
369 } | 366 } |
370 | 367 |
371 // static | 368 // static |
372 FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() { | 369 FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() { |
373 FieldAccess access = {kTaggedBase, | 370 FieldAccess access = {kTaggedBase, |
374 DescriptorArray::kEnumCacheOffset, | 371 DescriptorArray::kEnumCacheOffset, |
375 Handle<Name>(), | 372 Handle<Name>(), |
376 Type::TaggedPointer(), | 373 Type::OtherInternal(), |
377 MachineType::TaggedPointer(), | 374 MachineType::TaggedPointer(), |
378 kPointerWriteBarrier}; | 375 kPointerWriteBarrier}; |
379 return access; | 376 return access; |
380 } | 377 } |
381 | 378 |
382 | 379 |
383 // static | 380 // static |
384 FieldAccess AccessBuilder::ForDescriptorArrayEnumCacheBridgeCache() { | 381 FieldAccess AccessBuilder::ForDescriptorArrayEnumCacheBridgeCache() { |
385 FieldAccess access = {kTaggedBase, | 382 FieldAccess access = {kTaggedBase, |
386 DescriptorArray::kEnumCacheBridgeCacheOffset, | 383 DescriptorArray::kEnumCacheBridgeCacheOffset, |
387 Handle<Name>(), | 384 Handle<Name>(), |
388 Type::TaggedPointer(), | 385 Type::OtherInternal(), |
389 MachineType::TaggedPointer(), | 386 MachineType::TaggedPointer(), |
390 kPointerWriteBarrier}; | 387 kPointerWriteBarrier}; |
391 return access; | 388 return access; |
392 } | 389 } |
393 | 390 |
394 | 391 |
395 // static | 392 // static |
396 FieldAccess AccessBuilder::ForMapBitField() { | 393 FieldAccess AccessBuilder::ForMapBitField() { |
397 FieldAccess access = {kTaggedBase, Map::kBitFieldOffset, | 394 FieldAccess access = {kTaggedBase, Map::kBitFieldOffset, |
398 Handle<Name>(), TypeCache::Get().kUint8, | 395 Handle<Name>(), TypeCache::Get().kUint8, |
399 MachineType::Uint8(), kNoWriteBarrier}; | 396 MachineType::Uint8(), kNoWriteBarrier}; |
400 return access; | 397 return access; |
401 } | 398 } |
402 | 399 |
403 | 400 |
404 // static | 401 // static |
405 FieldAccess AccessBuilder::ForMapBitField3() { | 402 FieldAccess AccessBuilder::ForMapBitField3() { |
406 FieldAccess access = {kTaggedBase, Map::kBitField3Offset, | 403 FieldAccess access = {kTaggedBase, Map::kBitField3Offset, |
407 Handle<Name>(), TypeCache::Get().kInt32, | 404 Handle<Name>(), TypeCache::Get().kInt32, |
408 MachineType::Int32(), kNoWriteBarrier}; | 405 MachineType::Int32(), kNoWriteBarrier}; |
409 return access; | 406 return access; |
410 } | 407 } |
411 | 408 |
412 | 409 |
413 // static | 410 // static |
414 FieldAccess AccessBuilder::ForMapDescriptors() { | 411 FieldAccess AccessBuilder::ForMapDescriptors() { |
415 FieldAccess access = {kTaggedBase, | 412 FieldAccess access = {kTaggedBase, |
416 Map::kDescriptorsOffset, | 413 Map::kDescriptorsOffset, |
417 Handle<Name>(), | 414 Handle<Name>(), |
418 Type::TaggedPointer(), | 415 Type::OtherInternal(), |
419 MachineType::TaggedPointer(), | 416 MachineType::TaggedPointer(), |
420 kPointerWriteBarrier}; | 417 kPointerWriteBarrier}; |
421 return access; | 418 return access; |
422 } | 419 } |
423 | 420 |
424 | 421 |
425 // static | 422 // static |
426 FieldAccess AccessBuilder::ForMapInstanceType() { | 423 FieldAccess AccessBuilder::ForMapInstanceType() { |
427 FieldAccess access = {kTaggedBase, Map::kInstanceTypeOffset, | 424 FieldAccess access = {kTaggedBase, Map::kInstanceTypeOffset, |
428 Handle<Name>(), TypeCache::Get().kUint8, | 425 Handle<Name>(), TypeCache::Get().kUint8, |
429 MachineType::Uint8(), kNoWriteBarrier}; | 426 MachineType::Uint8(), kNoWriteBarrier}; |
430 return access; | 427 return access; |
431 } | 428 } |
432 | 429 |
433 | 430 |
434 // static | 431 // static |
435 FieldAccess AccessBuilder::ForMapPrototype() { | 432 FieldAccess AccessBuilder::ForMapPrototype() { |
436 FieldAccess access = {kTaggedBase, | 433 FieldAccess access = { |
437 Map::kPrototypeOffset, | 434 kTaggedBase, Map::kPrototypeOffset, Handle<Name>(), |
438 Handle<Name>(), | 435 Type::Any(), MachineType::TaggedPointer(), kPointerWriteBarrier}; |
439 Type::TaggedPointer(), | |
440 MachineType::TaggedPointer(), | |
441 kPointerWriteBarrier}; | |
442 return access; | 436 return access; |
443 } | 437 } |
444 | 438 |
445 | 439 |
446 // static | 440 // static |
447 FieldAccess AccessBuilder::ForNameHashField() { | 441 FieldAccess AccessBuilder::ForNameHashField() { |
448 FieldAccess access = {kTaggedBase, Name::kHashFieldOffset, | 442 FieldAccess access = {kTaggedBase, Name::kHashFieldOffset, |
449 Handle<Name>(), Type::Internal(), | 443 Handle<Name>(), Type::Internal(), |
450 MachineType::Uint32(), kNoWriteBarrier}; | 444 MachineType::Uint32(), kNoWriteBarrier}; |
451 return access; | 445 return access; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 kTaggedBase, SlicedString::kParentOffset, Handle<Name>(), | 486 kTaggedBase, SlicedString::kParentOffset, Handle<Name>(), |
493 Type::String(), MachineType::AnyTagged(), kPointerWriteBarrier}; | 487 Type::String(), MachineType::AnyTagged(), kPointerWriteBarrier}; |
494 return access; | 488 return access; |
495 } | 489 } |
496 | 490 |
497 // static | 491 // static |
498 FieldAccess AccessBuilder::ForExternalStringResourceData() { | 492 FieldAccess AccessBuilder::ForExternalStringResourceData() { |
499 FieldAccess access = {kTaggedBase, | 493 FieldAccess access = {kTaggedBase, |
500 ExternalString::kResourceDataOffset, | 494 ExternalString::kResourceDataOffset, |
501 Handle<Name>(), | 495 Handle<Name>(), |
502 Type::UntaggedPointer(), | 496 Type::OtherInternal(), |
503 MachineType::Pointer(), | 497 MachineType::Pointer(), |
504 kNoWriteBarrier}; | 498 kNoWriteBarrier}; |
505 return access; | 499 return access; |
506 } | 500 } |
507 | 501 |
508 // static | 502 // static |
509 ElementAccess AccessBuilder::ForExternalOneByteStringCharacter() { | 503 ElementAccess AccessBuilder::ForExternalOneByteStringCharacter() { |
510 ElementAccess access = {kUntaggedBase, 0, TypeCache::Get().kUint8, | 504 ElementAccess access = {kUntaggedBase, 0, TypeCache::Get().kUint8, |
511 MachineType::Uint8(), kNoWriteBarrier}; | 505 MachineType::Uint8(), kNoWriteBarrier}; |
512 return access; | 506 return access; |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 } | 733 } |
740 UNREACHABLE(); | 734 UNREACHABLE(); |
741 ElementAccess access = {kUntaggedBase, 0, Type::None(), MachineType::None(), | 735 ElementAccess access = {kUntaggedBase, 0, Type::None(), MachineType::None(), |
742 kNoWriteBarrier}; | 736 kNoWriteBarrier}; |
743 return access; | 737 return access; |
744 } | 738 } |
745 | 739 |
746 } // namespace compiler | 740 } // namespace compiler |
747 } // namespace internal | 741 } // namespace internal |
748 } // namespace v8 | 742 } // namespace v8 |
OLD | NEW |