| 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 |