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/contexts.h" | 7 #include "src/contexts.h" |
8 #include "src/frames.h" | 8 #include "src/frames.h" |
9 #include "src/handles-inl.h" | 9 #include "src/handles-inl.h" |
10 #include "src/heap/heap.h" | 10 #include "src/heap/heap.h" |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 MachineType::Uint32(), kNoWriteBarrier}; | 223 MachineType::Uint32(), kNoWriteBarrier}; |
224 return access; | 224 return access; |
225 } | 225 } |
226 | 226 |
227 // static | 227 // static |
228 FieldAccess AccessBuilder::ForJSArrayBufferViewBuffer() { | 228 FieldAccess AccessBuilder::ForJSArrayBufferViewBuffer() { |
229 FieldAccess access = {kTaggedBase, | 229 FieldAccess access = {kTaggedBase, |
230 JSArrayBufferView::kBufferOffset, | 230 JSArrayBufferView::kBufferOffset, |
231 MaybeHandle<Name>(), | 231 MaybeHandle<Name>(), |
232 Type::TaggedPointer(), | 232 Type::TaggedPointer(), |
233 MachineType::AnyTagged(), | 233 MachineType::TaggedPointer(), |
234 kPointerWriteBarrier}; | 234 kPointerWriteBarrier}; |
235 return access; | 235 return access; |
236 } | 236 } |
237 | 237 |
238 // static | 238 // static |
239 FieldAccess AccessBuilder::ForJSArrayBufferViewByteLength() { | 239 FieldAccess AccessBuilder::ForJSArrayBufferViewByteLength() { |
240 FieldAccess access = {kTaggedBase, | 240 FieldAccess access = {kTaggedBase, |
241 JSArrayBufferView::kByteLengthOffset, | 241 JSArrayBufferView::kByteLengthOffset, |
242 MaybeHandle<Name>(), | 242 MaybeHandle<Name>(), |
243 TypeCache::Get().kPositiveInteger, | 243 TypeCache::Get().kPositiveInteger, |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 kNoWriteBarrier}; | 348 kNoWriteBarrier}; |
349 return access; | 349 return access; |
350 } | 350 } |
351 | 351 |
352 // static | 352 // static |
353 FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() { | 353 FieldAccess AccessBuilder::ForDescriptorArrayEnumCache() { |
354 FieldAccess access = {kTaggedBase, | 354 FieldAccess access = {kTaggedBase, |
355 DescriptorArray::kEnumCacheOffset, | 355 DescriptorArray::kEnumCacheOffset, |
356 Handle<Name>(), | 356 Handle<Name>(), |
357 Type::TaggedPointer(), | 357 Type::TaggedPointer(), |
358 MachineType::AnyTagged(), | 358 MachineType::TaggedPointer(), |
359 kPointerWriteBarrier}; | 359 kPointerWriteBarrier}; |
360 return access; | 360 return access; |
361 } | 361 } |
362 | 362 |
363 | 363 |
364 // static | 364 // static |
365 FieldAccess AccessBuilder::ForDescriptorArrayEnumCacheBridgeCache() { | 365 FieldAccess AccessBuilder::ForDescriptorArrayEnumCacheBridgeCache() { |
366 FieldAccess access = {kTaggedBase, | 366 FieldAccess access = {kTaggedBase, |
367 DescriptorArray::kEnumCacheBridgeCacheOffset, | 367 DescriptorArray::kEnumCacheBridgeCacheOffset, |
368 Handle<Name>(), | 368 Handle<Name>(), |
369 Type::TaggedPointer(), | 369 Type::TaggedPointer(), |
370 MachineType::AnyTagged(), | 370 MachineType::TaggedPointer(), |
371 kPointerWriteBarrier}; | 371 kPointerWriteBarrier}; |
372 return access; | 372 return access; |
373 } | 373 } |
374 | 374 |
375 | 375 |
376 // static | 376 // static |
377 FieldAccess AccessBuilder::ForMapBitField() { | 377 FieldAccess AccessBuilder::ForMapBitField() { |
378 FieldAccess access = {kTaggedBase, Map::kBitFieldOffset, | 378 FieldAccess access = {kTaggedBase, Map::kBitFieldOffset, |
379 Handle<Name>(), TypeCache::Get().kUint8, | 379 Handle<Name>(), TypeCache::Get().kUint8, |
380 MachineType::Uint8(), kNoWriteBarrier}; | 380 MachineType::Uint8(), kNoWriteBarrier}; |
381 return access; | 381 return access; |
382 } | 382 } |
383 | 383 |
384 | 384 |
385 // static | 385 // static |
386 FieldAccess AccessBuilder::ForMapBitField3() { | 386 FieldAccess AccessBuilder::ForMapBitField3() { |
387 FieldAccess access = {kTaggedBase, Map::kBitField3Offset, | 387 FieldAccess access = {kTaggedBase, Map::kBitField3Offset, |
388 Handle<Name>(), TypeCache::Get().kInt32, | 388 Handle<Name>(), TypeCache::Get().kInt32, |
389 MachineType::Int32(), kNoWriteBarrier}; | 389 MachineType::Int32(), kNoWriteBarrier}; |
390 return access; | 390 return access; |
391 } | 391 } |
392 | 392 |
393 | 393 |
394 // static | 394 // static |
395 FieldAccess AccessBuilder::ForMapDescriptors() { | 395 FieldAccess AccessBuilder::ForMapDescriptors() { |
396 FieldAccess access = { | 396 FieldAccess access = {kTaggedBase, |
397 kTaggedBase, Map::kDescriptorsOffset, Handle<Name>(), | 397 Map::kDescriptorsOffset, |
398 Type::TaggedPointer(), MachineType::AnyTagged(), kPointerWriteBarrier}; | 398 Handle<Name>(), |
| 399 Type::TaggedPointer(), |
| 400 MachineType::TaggedPointer(), |
| 401 kPointerWriteBarrier}; |
399 return access; | 402 return access; |
400 } | 403 } |
401 | 404 |
402 | 405 |
403 // static | 406 // static |
404 FieldAccess AccessBuilder::ForMapInstanceType() { | 407 FieldAccess AccessBuilder::ForMapInstanceType() { |
405 FieldAccess access = {kTaggedBase, Map::kInstanceTypeOffset, | 408 FieldAccess access = {kTaggedBase, Map::kInstanceTypeOffset, |
406 Handle<Name>(), TypeCache::Get().kUint8, | 409 Handle<Name>(), TypeCache::Get().kUint8, |
407 MachineType::Uint8(), kNoWriteBarrier}; | 410 MachineType::Uint8(), kNoWriteBarrier}; |
408 return access; | 411 return access; |
409 } | 412 } |
410 | 413 |
411 | 414 |
412 // static | 415 // static |
413 FieldAccess AccessBuilder::ForMapPrototype() { | 416 FieldAccess AccessBuilder::ForMapPrototype() { |
414 FieldAccess access = { | 417 FieldAccess access = {kTaggedBase, |
415 kTaggedBase, Map::kPrototypeOffset, Handle<Name>(), | 418 Map::kPrototypeOffset, |
416 Type::TaggedPointer(), MachineType::AnyTagged(), kPointerWriteBarrier}; | 419 Handle<Name>(), |
| 420 Type::TaggedPointer(), |
| 421 MachineType::TaggedPointer(), |
| 422 kPointerWriteBarrier}; |
417 return access; | 423 return access; |
418 } | 424 } |
419 | 425 |
420 | 426 |
421 // static | 427 // static |
422 FieldAccess AccessBuilder::ForNameHashField() { | 428 FieldAccess AccessBuilder::ForNameHashField() { |
423 FieldAccess access = {kTaggedBase, Name::kHashFieldOffset, | 429 FieldAccess access = {kTaggedBase, Name::kHashFieldOffset, |
424 Handle<Name>(), Type::Internal(), | 430 Handle<Name>(), Type::Internal(), |
425 MachineType::Uint32(), kNoWriteBarrier}; | 431 MachineType::Uint32(), kNoWriteBarrier}; |
426 return access; | 432 return access; |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 | 598 |
593 | 599 |
594 // static | 600 // static |
595 FieldAccess AccessBuilder::ForPropertyCellValue() { | 601 FieldAccess AccessBuilder::ForPropertyCellValue() { |
596 return ForPropertyCellValue(Type::Tagged()); | 602 return ForPropertyCellValue(Type::Tagged()); |
597 } | 603 } |
598 | 604 |
599 | 605 |
600 // static | 606 // static |
601 FieldAccess AccessBuilder::ForPropertyCellValue(Type* type) { | 607 FieldAccess AccessBuilder::ForPropertyCellValue(Type* type) { |
| 608 // Extract representation dimension of {type} into MachineType {r}. |
| 609 MachineType r = MachineType::AnyTagged(); |
| 610 if (type->Is(Type::TaggedSigned())) { |
| 611 r = MachineType::TaggedSigned(); |
| 612 } else if (type->Is(Type::TaggedPointer())) { |
| 613 r = MachineType::TaggedPointer(); |
| 614 } |
602 FieldAccess access = { | 615 FieldAccess access = { |
603 kTaggedBase, PropertyCell::kValueOffset, Handle<Name>(), | 616 kTaggedBase, PropertyCell::kValueOffset, Handle<Name>(), type, |
604 type, MachineType::AnyTagged(), kFullWriteBarrier}; | 617 r, kFullWriteBarrier}; |
605 return access; | 618 return access; |
606 } | 619 } |
607 | 620 |
608 // static | 621 // static |
609 ElementAccess AccessBuilder::ForFixedArrayElement() { | 622 ElementAccess AccessBuilder::ForFixedArrayElement() { |
610 ElementAccess access = {kTaggedBase, FixedArray::kHeaderSize, Type::Tagged(), | 623 ElementAccess access = {kTaggedBase, FixedArray::kHeaderSize, Type::Tagged(), |
611 MachineType::AnyTagged(), kFullWriteBarrier}; | 624 MachineType::AnyTagged(), kFullWriteBarrier}; |
612 return access; | 625 return access; |
613 } | 626 } |
614 | 627 |
615 // static | 628 // static |
616 ElementAccess AccessBuilder::ForFixedArrayElement(ElementsKind kind) { | 629 ElementAccess AccessBuilder::ForFixedArrayElement(ElementsKind kind) { |
617 ElementAccess access = {kTaggedBase, FixedArray::kHeaderSize, Type::Any(), | 630 ElementAccess access = {kTaggedBase, FixedArray::kHeaderSize, Type::Any(), |
618 MachineType::AnyTagged(), kFullWriteBarrier}; | 631 MachineType::AnyTagged(), kFullWriteBarrier}; |
619 switch (kind) { | 632 switch (kind) { |
620 case FAST_SMI_ELEMENTS: | 633 case FAST_SMI_ELEMENTS: |
621 access.type = TypeCache::Get().kSmi; | 634 access.type = TypeCache::Get().kSmi; |
| 635 access.machine_type = MachineType::TaggedSigned(); |
622 access.write_barrier_kind = kNoWriteBarrier; | 636 access.write_barrier_kind = kNoWriteBarrier; |
623 break; | 637 break; |
624 case FAST_HOLEY_SMI_ELEMENTS: | 638 case FAST_HOLEY_SMI_ELEMENTS: |
625 access.type = TypeCache::Get().kHoleySmi; | 639 access.type = TypeCache::Get().kHoleySmi; |
626 break; | 640 break; |
627 case FAST_ELEMENTS: | 641 case FAST_ELEMENTS: |
628 access.type = Type::NonInternal(); | 642 access.type = Type::NonInternal(); |
629 break; | 643 break; |
630 case FAST_HOLEY_ELEMENTS: | 644 case FAST_HOLEY_ELEMENTS: |
631 break; | 645 break; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
705 } | 719 } |
706 UNREACHABLE(); | 720 UNREACHABLE(); |
707 ElementAccess access = {kUntaggedBase, 0, Type::None(), MachineType::None(), | 721 ElementAccess access = {kUntaggedBase, 0, Type::None(), MachineType::None(), |
708 kNoWriteBarrier}; | 722 kNoWriteBarrier}; |
709 return access; | 723 return access; |
710 } | 724 } |
711 | 725 |
712 } // namespace compiler | 726 } // namespace compiler |
713 } // namespace internal | 727 } // namespace internal |
714 } // namespace v8 | 728 } // namespace v8 |
OLD | NEW |